如何检查标记是否超出特定常量范围? - 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 事件,并在监听器处理程序中使用上述方法。
我是 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 事件,并在监听器处理程序中使用上述方法。