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

时间:2015-03-15 16:06:06

标签: google-maps google-maps-api-3 geocoding

我是GoogleMaps API v3中的新手,我在地理编码器配置中设置了一个界限,使用以下代码:

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

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

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

2 个答案:

答案 0 :(得分:3)

因此,您希望使用边界'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,包括如何对多边形和边界做同样的事情。

答案 1 :(得分:1)

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

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