2012-06-27 8 views
7

Tengo un mapa con varios marcadores y necesito poder dibujar un rectángulo en el mapa y seleccionar los marcadores que están dentro de los límites del rectángulo.compruebe si los marcadores del mapa están dentro de los límites seleccionados

Hasta ahora he encontrado una gran información aquí: How to get markers inside an area selected by mouse drag?

He implementado el plugin keymapzoom bien. al igual que

$('#dispatcher').gmap3({action:'get'}).enableKeyDragZoom({ 
     boxStyle: { 
      border: "dashed black", 
      //backgroundColor: "red", 
      opacity: 0.5 
     }, 
     paneStyle: { 
      backgroundColor: "gray", 
      opacity: 0.2 
     } 
    }); 
var dz = $('#dispatcher').gmap3({action:'get'}).getDragZoomObject(); 
google.maps.event.addListener(dz, 'dragend', function (bnds) { 
    alert(bnds); 
}); 

Esto me da el siguiente ((latitud, longitud), (lat ,) de largo) Formato de la alerta (bnds);

Necesito saber cómo puedo verificar ahora si hay algún marcador dentro de esto?

Ya tengo un objeto que almacena los marcadores por otro motivo. como:

markers[name] = {}; 
    markers[name].lat = lati; 
    markers[name].lng = longi; 

que puede serle útil?

No entiendo cómo usar los GLatLngBounds y contieneLatLng (latlng: GLatLng) como se sugiere.

Respuesta

3

Box/Rectangle Draw Selection in Google Maps

Esta fue mi solución ..

 google.maps.event.addListener(dz, 'dragend', function(e) { //important listener   
     for(var i = 0; i < markers.length; i++){ // looping through my Markers Collection  
     if(e.contains(markers[i].position)) 
      console.log("Marker"+ i +" - matched"); 
     }   
    }); 
10

Su pregunta está etiquetada con la versión v3 de la API de Google Maps, por lo que supongo que está utilizando esa versión (que debe tener como v2 está en desuso). Tenga en cuenta que algunas clases y métodos tienen nombres diferentes a los de su pregunta.

Los límites se representan con la clase LatLngBounds. Puede realizar el método contains en una instancia de esa clase para determinar si un punto se encuentra dentro de esos límites.

Si usted tiene un objeto con todos sus marcadores, puede recorrer a través de ellos y comprobar cada marcador, por ejemplo:

var bounds = new google.maps.LatLngBounds(sw, ne); 
for (var a in markers) { 
    if (bounds.contains(new google.maps.LatLng(markers[a].lat, markers[a].lng)) { 
     // marker is within bounds 
    } 
} 

En una nota lateral, me gustaría almacenar el objeto LatLng en los marcadores de objeto cuando creándolos. De esta forma no tienes que crearlos donde lo necesites.

+0

sí su versión 3 del API. gracias por su respuesta Peter. entonces debería poder usar var bounds = new google.maps.LatLngBounds (bnds); ? –

+0

El constructor toma 2 argumentos: suroeste y noreste. Simplemente haga clic en el enlace que proporcioné. –

+0

veo, entonces ¿cómo puedo obtener los argumentos sw y ne de mi salida de bnds? –

Cuestiones relacionadas