map.fitBounds()
后,能够为地图视图添加填充,以便所有标记点可见,不受地图控件或滑动面板等遮盖的影响。Leaflet 有一个选项,可以添加填充来适应 fitBounds,但是 Google Maps 没有实现这个功能。有时最北端的标记点会部分隐藏在视口之上。西侧的标记点也经常位于缩放滑块下面。使用 API 2,可以通过从地图视口中减去指定的填充(padding),形成虚拟视口(viewport),然后调用
showBounds()
方法来基于该虚拟视口计算和执行缩放和居中操作。map.showBounds(bounds, {top:30,right:10,left:50});
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);
}
#map {
height: 640px;
width: 360px;
}
#overlays {
position: absolute;
height: 50px;
width: 340px;
background: white;
margin: -80px 10px;
text-align: center;
line-height: 50px;
}
/* Optional: Makes the sample page fill the window. */
html, body {
height: 100%;
margin: 0;
padding: 0;
}
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Simple markers</title>
</head>
<body>
<div id="map"></div>
<div id="overlays">Controls / Order pizza / ETA / etc.</div>
<script async defer
src="https://maps.googleapis.com/maps/api/js?&callback=initMap">
</script>
</body>
</html>
问题在于:
我尝试按照自定义控件文档的说明添加了一个控件,但是地图并没有完全意识到它 - 请参见从地图自定义控件示例派生的此fiddle。其中一个标记仍然被该控件遮挡。
map.fitBounds(bounds); console.log(map.getZoom()); map.setZoom(map.getZoom() - 5); console.log(map.getZoom());
- Miguel Stevensvar zoom_level = handler.getMap().getZoom()
并在fitMapToBounds调用后使用handler.getMap().setZoom(zoom_level - 1)
来设置缩放级别。 - Adam Cooper