2012-01-07 21 views
16

Tengo marcadores repartidos por un mapa y un radio (superposición de círculos) en un marcador que marca tu ubicación (que cambia cada vez que te mueves). ¿Hay alguna manera de verificar si los otros marcadores entran dentro del círculo?Detecta si el marcador está dentro de la superposición de círculos en Google Maps (Javascript API V3)

ACTUALIZACIÓN

llegué alrededor de esto bucle a través de cada otro marcador, y el uso de la biblioteca de la geometría para calcular la distancia entre el marcador y el otro marcador y luego un simple if para ver si es inferior a 100 metros.

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

me gustaría tener en cuenta que el código anterior utiliza jQuery, por lo que si usted no está utilizando jQuery que no va a funcionar.

+0

Usted debe enviar la solución como una respuesta a su propia pregunta – duncan

Respuesta

45

Aquí hay una manera de agregar un método contains a la clase google.maps.Circle. Primero usa el cuadro delimitador para excluir un punto si ni siquiera está en el cuadro delimitador. Si está en el cuadro delimitador, compara la distancia desde el punto al centro con el radio, y devuelve verdadero solo si la distancia es más corta que el radio.

Una vez que agregue el javascript a continuación, puede llamar al método contains() en su objeto circular.

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

Por qué no sólo calcular la distancia y compara con el radio? – zavidovych

+0

Hacer el cálculo de límites es mucho más barato (solo usa <= and > =), así que úselo para descartar cualquier círculo antes de hacer el cálculo de distancia más caro solo en los círculos que están cerca (la distancia esférica es compleja, la distancia pitagórica más simple sigue siendo relativamente caro) – Mark

+0

¿Tiene un método similar para un rectángulo? –

-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. No solo descargue código sin explicación. 2. Antes de responder, verifique las otras respuestas. Este código ya está presente en otra respuesta. –

Cuestiones relacionadas