我想在嵌入式Google Map(API v3)上绘制一组点.除非缩放级别太低(即缩小太多),否则我希望能够容纳所有点.我的方法是这样的:
var bounds = new google.maps.LatLngBounds();
// extend bounds with each point
gmap.fitBounds(bounds);
gmap.setZoom( Math.max(6, gmap.getZoom()) );
Run Code Online (Sandbox Code Playgroud)
这不起作用.如果在fitBounds之后直接调用,则最后一行"gmap.setZoom()"不会更改地图的缩放级别.
有没有办法获得边界的缩放级别而不将其应用于地图?解决这个问题的其他想法?
有没有办法设置最大缩放级别fitBounds()?我的问题是,当地图仅被馈送到一个位置时,它会尽可能地放大,这实际上使地图脱离了上下文并使其无用.也许我采取了错误的做法?
提前致谢!
我希望能够在调用a后将填充添加到地图视图中map.fitBounds(),因此无论地图控件还是打开时覆盖标记的滑动面板之类的东西都可以看到所有标记.Leaftlet可以选择为fitBounds添加填充,但Google Maps没有.
有时,最北端的标记部分隐藏在视口上方.最西侧的标记通常位于缩放滑块下方.使用API 2,可以通过减少地图视口中的给定填充来形成虚拟视口,然后调用该方法showBounds()来计算并基于该虚拟视口执行缩放和居中:
map.showBounds(bounds, {top:30,right:10,left:50});
Run Code Online (Sandbox Code Playgroud)
本作API 2所述的工作实施例中,可以发现这里的showBounds()的例子链接下.
我在API V3中找不到类似的功能,但希望还有另一种方法可以实现.也许我可以抓住东北和西南点,然后添加假坐标以在包括它们之后进一步扩展边界?
(Codepen以防下面的代码不起作用)
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
draggable: true,
streetViewControl: false,
zoomControl: false
});
var marker1 = new google.maps.Marker({
position: {lat: 37, lng: -121},
map: map,
});
var marker2 = new google.maps.Marker({
position: {lat: 39.3, lng: -122},
map: map,
});
var bounds = new google.maps.LatLngBounds();
bounds.extend(marker1.position);
bounds.extend(marker2.position);
map.fitBounds(bounds);
}Run Code Online (Sandbox Code Playgroud)
#map {
height: 640px;
width: 360px;
} …Run Code Online (Sandbox Code Playgroud)我想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);
};
Run Code Online (Sandbox Code Playgroud)
它大约80%的时间都能很好地工作.但是,标记的大约五分之一完全不在视野范围内,并且变焦太高,以至于两个点无法同时显示.我究竟做错了什么?
我的地图使用自定义标记可能是相关的.
为了帮助调试,我添加了这段代码来绘制地图上的边界...
rect = new google.maps.Rectangle( {bounds: latlngbounds, map: $scope.map} );
Run Code Online (Sandbox Code Playgroud)
对于前几个结果,它总是看起来很完美:

但往往是不正确的:
请注意,在每一个地方是不正确的情况下,似乎矩形(高度/宽度)的尺寸中的一个是正确的,但其他则不是.我的直觉告诉我这是相关的.
我知道这是一个很受欢迎的问题,但我已经审查了所有其他问题,而且我的问题似乎与其中任何一个都没有重复.希望这个库存对未来的故障排除者有用,但这些都没有解决我的问题.
谷歌地图V3 fitBounds不准确 无用的问题,没有代码,没有答案 …