如何检查标记是否超出特定常量范围? - Google 地图 API v3

How to check if marker is out of specific constant bounds? - Google Maps API v3

我是 GoogleMaps API v3 的新手,我在我的地理编码器配置中指定了一个边界,代码如下:

bounds: new google.maps.LatLngBounds(
                     new google.maps.LatLng(-27.242171228168928, -27.242171228168928), 
                     new google.maps.LatLng(-26.99771082240342, -109.0823670364868))

现在,搜索更准确:-) 但是,现在我想在用户将标记拖出指定的边界时显示警告。我怎样才能做到这一点?

简而言之,我想防止用户将标记放在区域之外

因此,您希望使用 bounds 的 contains 函数在标记被拖动时有一个事件侦听器。此外,如果您真的想阻止他们将该标记拖到边界之外,您可能还需要跟踪最初的位置,并在必要时将其重置回原处。像这样:

var bounds = new google.maps.LatLngBounds(
                     new google.maps.LatLng(-27.242171228168928, -27.242171228168928), 
                     new google.maps.LatLng(-26.99771082240342, -109.0823670364868));

var marker = new google.maps.Marker({
    map: map,
    position: new google.maps.LatLng(51.5087531, -0.1281153),
    draggable: true
});

var markerPosition;

marker.addListener('dragstart', function() {
    markerPosition = this.getPosition();
});

marker.addListener('dragend', function() {
    if (bounds.contains(this.getPosition()) == false) {
        alert("You've dragged the marker outside of the bounds allowed. We've reset it");

        this.setPosition(markerPosition);
    }
});

PS:我还将此答案扩展到 a blog post,包括如何对多边形和边界执行相同的操作。

在 LatLngBounds 对象上,您可以调用 contains() 函数,该函数接受 LatLng 参数和 returns true\false 如果它包含在您定义的 LatLngBounds 中。

因此,在您的情况下,您可以在标记上监听 dragend 事件,并在监听器处理程序中使用上述方法。