谷歌地图 API V3 fitBounds() 不工作

Posted

技术标签:

【中文标题】谷歌地图 API V3 fitBounds() 不工作【英文标题】:Google maps API V3 fitBounds() not working 【发布时间】:2014-12-14 16:26:47 【问题描述】:

我想在谷歌地图上调用fitBounds(),以便用户可以看到他们自己相对于选定标记/位置的位置。

这是我处理这个的函数:

var fitMapToShowResult = function(index)
    var hereLatLng = new google.maps.LatLng (lat,lng); //location of the user defined outside this func
    var firstResultLatLng = new google.maps.LatLng(
                                $scope.searchResults[index].geometry.location.k,
                                $scope.searchResults[0].geometry.location.B
    );
    var latlngList = new Array( hereLatLng, firstResultLatLng ); // latlng: an array of instances of GLatLng
    var latlngbounds = new google.maps.LatLngBounds();
    for (var i=0;i<latlngList.length;i++)
       latlngbounds.extend(latlngList[i]);
       console.log('latlngbounds',latlngbounds);
    
    //$scope.map.setCenter(latlngbounds.getCenter());
    $scope.map.fitBounds(latlngbounds); 

;

大约 80% 的时间它都能完美运行。但是大约五分之一的标记完全看不见,并且缩放太高以至于两个点无法同时可见。我做错了什么?

可能与我的地图使用自定义标记有关。

为了帮助调试,我添加了这段代码来在地图上绘制边界...

    rect = new google.maps.Rectangle( bounds: latlngbounds, map: $scope.map );

对于前几个结果,它总是看起来很完美:

但通常它是不正确的: 请注意,在每种不正确的情况下,矩形的一个尺寸(高度/宽度)似乎是正确的,而另一个则不正确。我的直觉告诉我这是相关的。

类似问题汇总

我知道这是一个受欢迎的问题,但我已经查看了所有其他问题,我的问题似乎与其中任何一个问题都不重复。希望这个库存对未来的故障排除者有用,但这些都没有解决我的问题。

google maps V3 fitBounds not accurate 没有代码也没有答案的无用问题

Google Maps API v3 - fitBounds centers only one marker 用户在不知不觉中重新定义了循环内部。

Using setZoom() after using fitBounds() with Google Maps API V3 & Google Maps API V3 fitbounds() zooms out but never in & Google Maps with fitBounds don't zoom fitBounds() 异步发生,因此下游操作需要包装在 eventListener 中。

google maps → fitBounds manually 用户向LatLngBounds 传递了错误的类型参数(应该是两个google.maps.LatLngs)

google maps fitBounds() is broken or..? & Google maps API V3 method fitBounds() 正在构建带有错误坐标的google.maps.LatLngBounds(而不是将其留空并使用.extend()

Trying to get Google Maps fitbounds to work 超级菜鸟没有意识到 javascript 方法是区分大小写的

Google maps V3 custom marker images and fitBounds() fitBounds() 按预期工作,但用户需要为错误自定义标记留出更多空间

Google Maps V3 fitBounds on visible markers 关于如何使用fitBounds()的简单问题... rtfm

Google Maps API V3 - fitBounds randomly works but occasionally ignores bounds and loads in the middle of the ocean 在撰写本文时没有答案。听起来像是无效的纬度/经度对。

【问题讨论】:

你为什么同时打电话给$scope.map.setCenter(latlngbounds.getCenter());$scope.map.fitBounds(latlngbounds);?他们可能会互相干扰。 @geocodezip 抱歉,这是一个错误。我对两者都进行了实验。是否包含 setCenter() 似乎并不重要,因此我将其删除。 您能否提供一个 Minimal, Complete, Tested and Readable example 来表明该问题? 你应该避免geometry.location.k。如上所述,请提供 MCVE,以便我们知道 $scope.searchResults 和其他变量是什么。 @MrUpsidown 您引用的关于geometry.location.k 的评论在哪里?我想更好地理解这一点。我正在开发一个 MCVE,但这需要一些时间,因为我必须从一个大型 javascript 应用程序中删除这个错误,使其成为“M” 【参考方案1】:

MrUpsidown 是对的。我的边界框是错误的,因为我直接引用 ....geometry.location.k 而不是 LatLng 对象。相应地重构代码纠正了问题。

【讨论】:

【参考方案2】:

不要使用geometry.location.**k**的值,它取决于最小化的文件(使用像MinifyJS这样的工具)然后当谷歌发布新版本时它会改变。

【讨论】:

以上是关于谷歌地图 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 缩放不一致