>如果标记位于地图之外,我正在寻找一种重新居中(聚焦)地图的方法。例如,如果您单击不在视区内的标记...标记1:纽约 标记2:旧金山
在 V2 中,我以这种方式制作...但是对于 v3,包含 LatLng 需要一个额外的库并且对我不起作用......(见我的另一篇文章:Google Maps v3 map.getBounds().containsLatLng 不是一个函数)他们还有其他方法可以专注于标记位置吗?
更新:
if ((!map.getBounds().contains(marker.getPosition())) & (showAllCategoryElements == 0)) {
var newCenterPointLng = (map.getBounds().getCenter().lng() + marker.getPosition().lng()) / 2;
var newCenterPointLat = (map.getBounds().getCenter().lat() + marker.getPosition().lat()) / 2;
map.panTo(marker.getPosition());
//map.setCenter(new google.maps.LatLng(newCenterPointLat, newCenterPointLng));
if (!map.getBounds().contains(marker.getPosition())){
map.zoomOut();
}
}
的方法就是contains(),而不是containsLatLng()。 map.getBounds().contains(marker.getPosition())
您可以使用地图的 setCenter() 或 panTo() 方法来以标记位置为中心:map.setCenter(marker.getPosition())
或 map.panTo(marker.getPosition())
因此,如果我正确理解您要做什么,它应该如下所示:
if ((!map.getBounds().contains(marker.getPosition())) && (showAllCategoryElements == 0)) { //Note the double &
map.setCenter(marker.getPosition());
//OR map.panTo(marker.getPosition());
}
它实际上并不那么复杂,只是有点棘手。
在标记上创建单击事件时,您可以获得您声明的长度和纬度,以制作点并平移到此位置。
在我的代码中,它是这样的,long 和 lat 被声明为从 html 获取的变量:
var longitude = item.querySelector('#longitude').innerText;
var latitude = item.querySelector('#latitude').innerText;
const marker = new google.maps.Marker({
title: titel,
icon: "[url to marker]",
position: new google.maps.LatLng(longitude, latitude),
map: map
});
然后平移到长纬度上的位置。
google.maps.event.addListener(marker, "click", function() {
// JQuery to close all other markers before opening this one
jQuery(".gm-ui-hover-effect").click();
// Pan to long lat defined inside the marker locations
var laLatLng = new google.maps.LatLng(longitude, latitude);
map.panTo(laLatLng);
map.setZoom([place value for zoom level here]);
infowindow.open(map, this);
});
infowindow.close();
注意:在我的代码中,这是在for循环中完成的,以获取所有标记位置,这对于大多数代码来说无关紧要,但如果您直接复制粘贴此代码,则值得注意。