检测标记是否在Google地图上的圆形覆盖范围内(Javascript API V3)

时间:2012-01-07 00:26:27

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

我在地图上点缀了标记,并在标记您位置的标记上设置了半径(圆形叠加)(每次移动时都会更改)。 有什么方法可以检查其他标记是否进入圆圈内?​​

更新

我绕过每个其他标记,并使用几何库计算标记与另一个标记之间的距离,然后使用简单的if语句来查看它是否小于100米。

function checkAllChests() {
    var Current = 0;
    $.each(treasureArray, function() {
        //var thisLocation = treasureArray[Current].getPosition();

        var distanceBetween = Math.ceil(google.maps.geometry.spherical.computeDistanceBetween(treasureArray[Current].getPosition(), marker_me.getPosition()));
        if(distanceBetween < 100) {
            alert('CAN OPEN THIS CHEST');
        }
        Current++;
    });
}

我想注意上面的代码使用jQuery,所以如果你不使用jQuery它将无法工作。

2 个答案:

答案 0 :(得分:45)

这是一种向contains类添加google.maps.Circle方法的方法。如果它甚至不在边界框中,它首先使用边界框来排除一个点。如果它在边界框中,则它将点与中心的距离与半径进行比较,并且仅当距离小于半径时才返回true。

在下面添加javascript后,您可以在圆形对象上调用contains()方法。

google.maps.Circle.prototype.contains = function(latLng) {
  return this.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(this.getCenter(), latLng) <= this.getRadius();
}

答案 1 :(得分:-4)

google.maps.Circle.prototype.contains = function(latLng) {
  return this.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(this.getCenter(), latLng) <= this.getRadius();
}