2012-01-07 12 views
16

Mam znaczniki zaznaczone wokół mapy i promień (nakładka koła) na znaczniku oznaczającym Twoją lokalizację (która zmienia się za każdym razem, gdy się poruszasz). Czy mogę w jakiś sposób sprawdzić, czy inne znaczniki znajdują się w kręgu?Wykryj, czy znacznik znajduje się w nakładce koła w Mapach Google (Javascript API V3).

UPDATE

Mam wokół tego poprzez zapętlenie przez każdy inny znacznik i przy użyciu biblioteki geometrii obliczanie odległości między znacznika a drugi znacznik, a następnie prosty if aby sprawdzić, czy jest to mniej niż 100 metrów.

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++; 
    }); 
} 

Chciałbym zwrócić uwagę, że powyższy kod wykorzystuje jQuery, więc jeśli nie używasz jQuery to nie będzie działać.

+0

Należy zakładać rozwiązanie jako odpowiedź na swoje pytanie – duncan

Odpowiedz

45

Oto sposób dodania metody contains do klasy . Najpierw używa obwiedni, aby wykluczyć punkt, nawet jeśli nie znajduje się w obwiedni. Jeśli znajduje się w obwiedni, porównuje odległość od punktu do środka z promieniem i zwraca wartość true tylko wtedy, gdy odległość jest mniejsza niż promień.

Po dodaniu poniższego kodu javascript można wywołać metodę contains() na obiekcie z kręgu.

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

Dlaczego nie wystarczy obliczyć odległość i porównać z promieniem? – zavidovych

+0

Wykonywanie obliczeń granic jest znacznie tańsze (używa tylko <= and > =), więc użyj go, aby wykluczyć jakiekolwiek kręgi, zanim wykonasz droższe obliczenie odległości tylko na okręgach, które są blisko (odległość sferyczna jest złożona, prostsza odległość pitagorejska jest nadal stosunkowo drogi) – Mark

+0

Masz podobną metodę dla prostokąta? –

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

1. Nie po prostu zrzucaj kod bez wyjaśnienia. 2. Przed udzieleniem odpowiedzi sprawdź pozostałe odpowiedzi. Ten kod jest już obecny w innej odpowiedzi. –

Powiązane problemy