谷歌地图 API V3 方法 fitBounds()

Posted

技术标签:

【中文标题】谷歌地图 API V3 方法 fitBounds()【英文标题】:Google maps API V3 method fitBounds() 【发布时间】:2012-05-03 07:49:36 【问题描述】:

我有这个渲染地图的代码。

function initialize() 
    var myOptions = 
      center: new google.maps.LatLng(45.4555729, 9.169236),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP,

panControl: true,
mapTypeControl: false,
panControlOptions: 
            position: google.maps.ControlPosition.RIGHT_CENTER
        ,
zoomControl: true,
zoomControlOptions: 
    style: google.maps.ZoomControlStyle.LARGE,
    position: google.maps.ControlPosition.RIGHT_CENTER
,
scaleControl: false,
streetViewControl: false,
streetViewControlOptions: 
    position: google.maps.ControlPosition.RIGHT_CENTER
            
        ;
    var map = new google.maps.Map(document.getElementById("mapCanvas"),
        myOptions);



var Item_1 = new google.maps.LatLng(45.5983128 ,8.9172776);

var myPlace = new google.maps.LatLng(45.4555729, 9.169236);

var marker = new google.maps.Marker(
    position: Item_1, 
    map: map);

var marker = new google.maps.Marker(
    position: myPlace, 
    map: map);

var bounds = new google.maps.LatLngBounds(myPlace, Item_1);
map.fitBounds(bounds);

    

即使两点相距 25 公里,我也会得到这个结果:

虽然我想渲染更高级别的缩放。

像这样

我使用方法fitBounds()

    var bounds = new google.maps.LatLngBounds(myPlace, Item_1);
    map.fitBounds(bounds);

感谢您的支持

【问题讨论】:

【参考方案1】:
 var map = new google.maps.Map(document.getElementById("map"),
                mapTypeId: google.maps.MapTypeId.ROADMAP

            );
var bounds = new google.maps.LatLngBounds();

for (i = 0; i < locations.length; i++)
        marker = new google.maps.Marker(
            position: new google.maps.LatLng(locations[i][1], locations[i][2]),
            map: map
        );
bounds.extend(marker.position);

map.fitBounds(bounds);

【讨论】:

对我来说,我必须从 bounds.extend(marker) 更改为 bounds.extend(marker.position)。谢谢【参考方案2】:

尽管我正在按照上面的建议构建我的 LatLngBounds,但我遇到了与您描述的相同的问题。问题是事情是异步的,在错误的时间调用 map.fitBounds() 可能会给你留下像 Q 一样的结果。 我发现最好的方法是将调用放在空闲处理程序中,如下所示:

google.maps.event.addListenerOnce(map, 'idle', function() 
    map.fitBounds(markerBounds);
);

【讨论】:

谢谢,这对我帮助很大,因为我将地址地理编码到坐标,然后映射到这些坐标,但它不起作用 我遇到了类似的问题,因为在调用fitBounds() 时还没有显示包含的 html,所以显然缩放无法解决。在尝试缩放地图之前确保首先显示地图对我有帮助。 非常感谢,你救了我,这很好用,这个答案对我来说是正确的。 你是救命稻草【参考方案3】:

出现这种情况是因为LatLngBounds()不以任意两个点为参数,而是以SW和NE点为参数

对空边界对象使用.extend() 方法

var bounds = new google.maps.LatLngBounds();
bounds.extend(myPlace);
bounds.extend(Item_1);
map.fitBounds(bounds);

http://jsfiddle.net/gaby/22qte/的演示

【讨论】:

正确答案。需要将 SW 和 NE 点传递给 extend 方法。但是,一旦地图完全加载,应该调用 fitBounds 方法,如下面的 vanthome 回答: google.maps.event.addListenerOnce(map, 'idle', function() map.fitBounds(markerBounds); );您可能还希望像这样将 padding=0 传递给 fitBounds: map.fitBounds(markerBounds, 0);【参考方案4】:

LatLngBounds 必须按(西南、东北)顺序定义点。您的积分不是按这个顺序排列的。

一般的解决方法是扩展一个空边界,尤其是如果您不知道这些点肯定会按该顺序排列:

var bounds = new google.maps.LatLngBounds();
bounds.extend(myPlace);
bounds.extend(Item_1);
map.fitBounds(bounds);

API 会整理边界。

【讨论】:

哈!刚刚被打败了。 iPad 键盘无法让快速打字变得容易。

以上是关于谷歌地图 API V3 方法 fitBounds()的主要内容,如果未能解决你的问题,请参考以下文章

Google 地图 api V3 中的 fitbounds() 不适合边界

谷歌地图 API 3 缩小 fitBounds

Google Maps API V3 fitbounds() 缩小但从不缩小

map.fitbounds google maps api v3 不适用于从 jQM 面板选择的位置

在 Google Maps API v3.0 中多次调用 map.fitBounds()

Google Maps v3 fitBounds 缩放不一致