检测标记是否在Google Maps(Javascript API V3)上的圆形覆盖物内

19

我在地图上放置了标记,并在一个标记上标记您的位置(每次移动时更改),形成一个半径(圆形叠加层)。

有没有办法检查其他标记是否在这个圆形范围内?

更新:

我通过循环遍历每个其他标记并使用几何库计算您的标记与其他标记之间的距离,然后使用简单的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,它将不起作用。


你应该将解决方案作为回答发布到你自己的问题中。 - duncan
1个回答

50

以下是一种向 google.maps.Circle 类添加 contains 方法的方法。它首先使用边界框来排除不在边界框内的点。如果它在边界框内,则比较从点到中心的距离与半径,仅在距离小于半径时返回 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
为什么不直接计算距离并与半径进行比较呢? - zavidovych
1
进行边界计算是一种更便宜的计算方式(它只使用<=和>=),因此在对接近的圆进行更昂贵的距离计算之前,请使用它来排除任何圆形。 (球面距离很复杂,简单的勾股距离仍然相对昂贵) - Mark
你有类似的方法可以用于矩形吗? - Konstantinos Papakonstantinou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接