Google Maps API v3 将地图重新定位到标记



>如果标记位于地图之外,我正在寻找一种重新居中(聚焦)地图的方法。例如,如果您单击不在视区内的标记...标记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循环中完成的,以获取所有标记位置,这对于大多数代码来说无关紧要,但如果您直接复制粘贴此代码,则值得注意。

相关内容

  • 没有找到相关文章

最新更新