我有一张地图显示用户的“签到”。我需要在2个场景中首次展示这张地图:
所以红色“块”是我想在地图上看到的区域。不是整个午睡。
这是我创建地图的方式:
mapDiv = document.getElementById('map');
map = new google.maps.Map(mapDiv, {
center: markerLocation,
zoom: zoomLevel,
});
然后我为签到添加“标记”:
marker = new google.maps.Marker({
position: markerLocation,
label: '',
icon: 'img/map_marker.png',
map: map
});
所以我的猜测是我需要专注于“缩放级别”。因为这决定了地图的显示量。但请记住,此地图具有响应性,因此高度和宽度会有所不同。此外,标记可以放置在各种不同的地方。
那么如何计算ZoomLevel只显示相关信息?即只有包含地图标记的区域,或者如果没有地图标记,则只包括西开普省的区域?
更新
我认为对于第一个问题,我可以找到西开普省的中心并将其用作地图的“中心”。这很容易。如果只有一次办理登机手续,这也很容易。但如果办理登机手续的次数超过1,您如何找到地图的中心?事实上,即使2分也许不会太难,但你怎么找到许多分数的中心?!
答案 0 :(得分:3)
google.maps.LatLngBounds
是一个对象,旨在包含矩形边界。它可以通过两种方式创建:
var my_bounds = new google.maps.LatLngBounds({east: -34, north: 151, south: -34, west: 151});
var my_bounds = new google.maps.LatLngBounds()
;这将创建一个没有坐标的边界,并且您将使用extend
方法添加到它们中的任何坐标将对它们进行扩展。因此,如果extend
使用坐标lat:20, lng:-12
,那么您将获得{e:20, n:-12, s:-12, w:20}
的界限,那么如果extend
进一步lat:22, lng:10
,您将获得边界{e:22, n:10, s:-12, w:20}
等等。 google.maps.Map
函数fitBounds(bounds)
的工作方式是计算最接近的缩放级别以包含您创建的边界(视口可能大于bounds
传递的但是永远不会更小)和一个中心,它是bounds
矩形的中心,然后使用计算出的值缩放和居中地图。
所以要解决你的问题:
1.要缩放到"西开普省,南非",使用此区域的硬编码值创建一个边界,即cca south:-34.985081, west:17.811984, north:-30.016613, east:24.265440
并将视口放入其中,这样您就可以:
var western_cape_bounds = new google.maps.LatLngBounds({east: 24.265440, north: -30.016613, south: -34.985081, west: 17.811984});
map.fitBounds(western_cape_bounds);
2.如果你有很多标记,那么你需要遍历所有标记,extend
边界,然后将视口放入其中:
var marker_bounds = new google.maps.LatLngBounds();
for(var i = 0; i < markers.length; i++){
marker_bounds.extend(markers[i].getPosition());
//alternatively, if you don't have markers created yet, you can extend the bounds like this: marker_bounds.extend({lat: MY_LAT, lng:MY_LNG});
}
map.fitBounds(marker_bounds);
答案 1 :(得分:1)
您可以使用fitBounds
方法将视口设置为包含给定的边界(documentation)
var myBounds = new google.maps.LatLngBounds();
myBounds.extend(myMarker1);
myBounds.extend(myMarker2);
map.fitBounds(myBounds);