Обнаружение, если маркер находится в пределах круга на Картах Google (Javascript API V3) - программирование
Подтвердить что ты не робот

Обнаружение, если маркер находится в пределах круга на Картах Google (Javascript API V3)

У меня есть маркеры, расположенные вокруг карты, и радиус (наложение круга) на маркер, обозначающий ваше местоположение (которое меняется при каждом перемещении). Есть ли способ проверить, находятся ли другие маркеры внутри круга?

UPDATE

Я обошел это, пропуская друг друга маркером и используя библиотеку геометрии, вычисляя расстояние между вашим маркером и другим маркером, а затем простой оператор 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, он не будет работать.

4b9b3361

Ответ 1

Здесь можно добавить метод contains в класс google.maps.Circle. Сначала он использует ограничивающий прямоугольник, чтобы исключить точку, если она даже не находится в ограничивающей рамке. Если он находится в ограничивающей рамке, то он сравнивает расстояние от точки до центра с радиусом и возвращает true, только если расстояние меньше радиуса.

После добавления javascript ниже вы можете вызвать метод contains() для вашего объекта circle.

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

Ответ 2

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