我是GoogleMaps API v3中的新手,我在地理编码器配置中设置了一个界限,使用以下代码:
bounds: new google.maps.LatLngBounds(
new google.maps.LatLng(-27.242171228168928, -27.242171228168928),
new google.maps.LatLng(-26.99771082240342, -109.0823670364868))
现在,搜索更准确:-)但是,现在我想显示一个警告,如果用户将标记拖出指定的边界。我怎么能做到这一点?
简而言之,我想阻止用户将标记放在区域之外
答案 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事件,并在侦听器处理程序中使用上述方法。