我想在Google地图上调用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&amp; Google Maps API V3 fitbounds() zooms out but never in&amp; Google Maps with fitBounds don't zoom fitBounds()异步发生,因此下游操作需要包装在eventListener中。
google maps → fitBounds manually
用户将错误的类型参数传递给LatLngBounds
(应该是两个google.maps.LatLng
s)
google maps fitBounds() is broken or..?&amp; Google maps API V3 method fitBounds()
正在构建带有错误坐标的google.maps.LatLngBounds
(而不是将其留空并使用.extend()
)
Trying to get Google Maps fitbounds to work 超级noob没有意识到javascript方法是区分大小写的
Google maps V3 custom marker images and fitBounds()
fitBounds()
按预期工作,但用户需要为bug自定义标记提供更多空间
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 写作时没有答案。听起来像无效的lat / lng对。
答案 0 :(得分:1)
不要将值用作geometry.location.**k**
,它取决于最小化的文件(使用MinifyJS等工具),然后当Google发布新的版本时它会发生变化。
答案 1 :(得分:0)
MrUpsidown是对的。我的边界框是错误的,因为我直接引用....geometry.location.k
而不是LatLng
对象。相应地重构代码纠正了问题。