javascript - 新的 google.maps.LatLngBounds() 边界扩展和中心随机工作

标签 javascript google-maps google-maps-api-3

我正在尝试在 map 上放置一些标记。数据是从数据库检索并使用 JSON 循环读取的。

标记已放置,但我也尝试在 map 上显示所有标记并将 View 居中。这似乎是随机的,我刷新页面,有时它显示 3 个标记,有时它只显示我的起始 LatLng,它只是岛中间的一个随机点。如果我缩小标记就在那里。因此,这似乎是标记的 LatLng 有时未在循环中扩展的问题。

非常感谢任何帮助。

<script type="text/javascript">             
        $(document).ready(function(){
            var myCenter=new google.maps.LatLng(12.106058, -68.935192);
            var mapOptions = {
                mapTypeId:google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map(document.getElementById('map-canvas'),mapOptions);
            bounds = new google.maps.LatLngBounds();
            bounds.extend(myCenter);
            $.getJSON('map.php',function(data){
                if(data.success == true) {
                    if(data.CData.length > 0){
                        $.each(data.CData,function(index, value){
                        CID = value.CID;
                        Active = value.Active;
                        Name = value.Name;
                        Tel = value.Tel;
                        Lng = value.Longitude;
                        Lat = value.Latitude;
                        i=0;
                        addMarker(map, i, CID, Active, Name, Tel, Lat, Lng);
                        setBounds(Lat, Lng);
                        i++;
                        });
                    }
                }
            });
            map.setCenter(bounds.getCenter());
            map.fitBounds(bounds);
        });

        function addMarker(map, i, CID, Active, Name, Tel, Lat, Lng){
            if (Active == 1){
                if (Lat != null && Lng != null){
                    //alert("loop start!");
                    var myLatLng = new google.maps.LatLng(Lat, Lng);
                    var imageUrl = 'Images/default.png';
                    var markerImage = new google.maps.MarkerImage(imageUrl);                                            
                    var marker = new google.maps.Marker({
                        position: myLatLng,
                        map: map,
                        icon: markerImage,
                        title: Name,
                        zIndex: i          
                    });

                    image = '<img src="image.php?cid='+CID+'" class="img-responsive img-thumbnail" />';

                    var content = '<div class="">'+image+'<h4>'+Name+'</h4><h4><span class="label label-danger">Tel: '+ Tel +'</span></h4></div>';

                    var infowindow = new google.maps.InfoWindow({ 
                        content: content,
                        maxWidth: 370
                    });
                    google.maps.event.addListener(marker, 'click', function (){
                        infowindow.open(map, marker);
                    });
                }
            }               
        }

        function setBounds(Lat, Lng){
            var newLatLng = new google.maps.LatLng(Lat, Lng);
            bounds.extend(newLatLng);
        }               
    </script>

最佳答案

获取标记数据的ajax调用是异步发生的,即它可以在调用map.setCenter和map.fitBounds之后完成。您应该尝试将它们移至 addMarker 函数中,或者仅在所有标记完成添加后才执行,例如

$.getJSON('map.php',function(data){
    if(data.success == true) {
        if(data.CData.length > 0){
            $.each(data.CData,function(index, value){
                CID = value.CID;
                Active = value.Active;
                Name = value.Name;
                Tel = value.Tel;
                Lng = value.Longitude;
                Lat = value.Latitude;
                i=0;
                addMarker(map, i, CID, Active, Name, Tel, Lat, Lng);
                setBounds(Lat, Lng);
                i++;
            });

            map.setCenter(bounds.getCenter());
            map.fitBounds(bounds);
        }
    }
});

关于javascript - 新的 google.maps.LatLngBounds() 边界扩展和中心随机工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28009169/

相关文章:

google-maps - 确定 Google map 中的西南点和东北点边界

c# - 如何使用 Sql 搜索矩形内的(预定义)位置(纬度/经度)?

javascript - 让 Google 热图数据点变暗

javascript - 如何在 RxJS 中使用 take() 而不取消订阅 observable

javascript - MongoError $regex 必须是一个字符串

javascript - 输入字段中的 token 、标签、徽章

javascript - 错误 :this. setValues 不是 js 代码中的函数使用 google map api

javascript - PHP/MYSQL 中自动更改选项值

javascript - 将多边形合并到 Google Maps API 3 中

php - Google map 在 JavaScript 弹出窗口中无法正确显示