2010-03-22 126 views
31

我使用Google API v3中的地理编码器显示国家/地区的地图。我得到了国家推荐的视口,但是当我想将地图调整到该视口时,它不起作用(请参阅下面的代码中调用fitBounds函数之前和之后的边界)。Google地图api V3中的fitbounds()不适合边界

我在做什么错?

如何将我的地图的视口设置为results[0].geometry.viewport

var geocoder = new google.maps.Geocoder(); 
geocoder.geocode(
    {'address': '{{countrycode}}'}, 
    function(results, status) { 
     var bounds = new google.maps.LatLngBounds(); 
     bounds = results[0].geometry.viewport; 
     console.log(bounds);   // ((35.173, -12.524), (45.244, 5.098)) 
     console.log(map.getBounds()); // ((34.628, -14.683), (58.283, 27.503)) 
     map.fitBounds(bounds);    
     console.log(map.getBounds()); // ((25.740, -24.806), (52.442, 17.380)) 
    } 
); 

回答

72

这是因为fitBounds()需要捕捉到适合使用最大变焦水平可能在地图画布视口。另一方面,地理编码器返回的视口不依赖于地图画布的大小,布局或缩放级别。因此,fitBounds()方法会调整地图的视口,以便在地图中心完整地查看传递的LatLngBounds

您可能要检查下面的例子更清晰的示范开始:

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Google Maps fitBounds Demo</title> 
    <script src="http://maps.google.com/maps/api/js?sensor=false" 
      type="text/javascript"></script> 
</head> 
<body> 
    <div id="map" style="width: 500px; height: 350px"></div> 

    <script type="text/javascript"> 
     var myOptions = { mapTypeId: google.maps.MapTypeId.ROADMAP }; 
     var map = new google.maps.Map(document.getElementById("map"), myOptions); 
     var geocoder = new google.maps.Geocoder(); 

     geocoder.geocode({'address': 'RU'}, function (results, status) { 
     var ne = results[0].geometry.viewport.getNorthEast(); 
     var sw = results[0].geometry.viewport.getSouthWest(); 

     map.fitBounds(results[0].geometry.viewport);    

     var boundingBoxPoints = [ 
      ne, new google.maps.LatLng(ne.lat(), sw.lng()), 
      sw, new google.maps.LatLng(sw.lat(), ne.lng()), ne 
     ]; 

     var boundingBox = new google.maps.Polyline({ 
      path: boundingBoxPoints, 
      strokeColor: '#FF0000', 
      strokeOpacity: 1.0, 
      strokeWeight: 2 
     }); 

     boundingBox.setMap(map); 
     }); 
    </script> 
</body> 
</html> 

下面是从上面的例子不同国家的截图。红色边界框是地理编码器返回的视口。注意边框和实际视之间的差异,如fitBounds()调整:

国家:美国

US

国家:RU

RU

国家:IT

IT

+0

谢谢Daniel。 – jul 2010-03-23 11:41:02

+0

我也很难理解如何做到这一点,真棒详细的解释! – designermonkey 2011-04-13 09:18:37

+0

非常感谢您的详细解释。 boundingBox是一个很好的主意,可以清楚地说明这一点。 – Symmetric 2012-06-05 05:17:15

2

只是为了让你知道用什么方式这是可以定制的,我准备的,如果你喜欢宽松一些boundingBox的在视口中

+1

:(该链接的都死了。 – 2013-04-08 13:09:21

+2

固定一个更永久链路 – kaskader 2013-04-09 14:49:31

+4

死再次..... – 2013-11-01 22:03:25

相关问题