【问题标题】:Google maps API v3 markers谷歌地图 API v3 标记
【发布时间】:2013-11-12 10:43:52
【问题描述】:

谁能告诉我如何根据标记缩放地图。实际上我已经对地址进行了地理编码,并且标记显示在地图上。但它们没有居中,即我必须拖动地图才能看到另一个标记。我希望我的地图使用我在addresses 数组中的地址来适应边界。这怎么能做到。?我当前的地理编码代码是:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script>
var addresses = new Array();
abc = document.getElementsByTagName('td');
//loc = mydiv.getAttribute("data-addr");
var l = abc.length; 
 for (var i=0; i < l; i++){
    if (abc[i].hasAttribute('name'))
    {   
        addresses.push(""+abc[i].innerHTML+""); //removed single quotes here. see previous code
    }   
}
var len = addresses.length;
var geocoder;
var map;
var add = document.getElementById("addr").value;
window.onload = function init() {

      geocoder = new google.maps.Geocoder();    
      var add = document.getElementById("address").value;
      var latlng = codeAddress(add);
      var myOptions = {
        zoom: 10,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      map = new google.maps.Map(document.getElementById("map_canvas"),
          myOptions);
}

//for (var i = 0; i < addresses.length; i++)
//{
    function codeAddress(add) 
    {
      //var addr = addresses[i];
      geocoder.geocode( { 'address':add }, function(results, status) {

          if (status == google.maps.GeocoderStatus.OK) {
             map.setCenter(results[0].geometry.location);     
          } else {
              alert("Geocode was not successful for the following reason: " + status);
          }
        });
    }

    function createMarkers()
    {
        for(var i = 0; i < len; i++){
            (function(addresses){
                geocoder.geocode( { 'address': addresses }, function(results) {
                    var marker = new google.maps.Marker ({
                        map: map,
                        position: results[0].geometry.location,//error:results[0] is undefined
                        title: address
                    }); 

                    google.maps.event.addListener(marker, 'click', function() {
                        alert(addresses);
                    });
                });
            })(addresses[i]);
        }
    }
    window.onload = createMarkers;
</script>

【问题讨论】:

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


    【解决方案1】:

    在您创建标记的函数中,您还可以扩展边界(使用

    function createMarkers()
    {
        //create the bounds for the map
        var bounds = new google.maps.LatLngBounds();
    
        for(var i = 0; i < len; i++){
            (function(addresses){
                geocoder.geocode( { 'address': addresses }, function(results) {
                    var marker = new google.maps.Marker ({
                        map: map,
                        position: results[0].geometry.location,//error:results[0] is undefined
                        title: address
                    }); 
    
                    google.maps.event.addListener(marker, 'click', function() {
                        alert(addresses);
                    });
                });
            })(addresses[i]);
    
            //extend the bounds with each address
            bounds.extend (addresses[i]);
        }
        //fit to the full list of bounds
        map.fitBounds(bounds); 
    }
    

    如果您想设置最大缩放级别,无论实际边界是什么,您都可以在 map.fitBounds 之后添加它(您可以更改缩放级别):

    var listener = google.maps.event.addListener(map, "idle", function() { 
    if (map.getZoom() > 10) map.setZoom(10); 
      google.maps.event.removeListener(listener); 
    });
    

    【讨论】:

    • 您可以将map.fitBounds(bounds); 行移到for循环之外;你只需要这样做一次
    • @spacebean 嘿,谢谢你的回答。它确实改变了缩放级别,但地图上只显示了一个标记。然后我不得不在createMarkers() 之外编写这两行代码,这解决了我的问题。谢谢!
    • @duncan 感谢您的建议!
    • @spacebean @duncan 在我的地图中如果位置太近,则使用map.fitBounds() 重叠标记。有什么建议可以清楚地看到我的标记吗?
    • Duncan 是对的,map.fitBounds 只需要做一次,编辑修复。至于重叠,唯一的解决方法是缩放,这是 fitBounds 设置的。如果您想专门设置允许的最大缩放,我将在上面添加一些代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2012-04-29
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2011-08-07
    • 2011-12-10
    相关资源
    最近更新 更多