2012-06-27 8 views
7

Ho una mappa con vari marcatori e ho bisogno di essere in grado di disegnare un rettangolo sulla mappa e selezionare i marcatori che si trovano all'interno dei limiti del rettangolo.controllare se i contrassegni di mappa sono all'interno dei limiti selezionati

Finora ho trovato qualche grande informazioni qui: How to get markers inside an area selected by mouse drag?

Ho implementato il plugin keymapzoom ok. in questo modo

$('#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); 
}); 

Questo mi dà il seguente ((lat, long), (lat, long)) formato dal alert (BNDS);

Ho bisogno di sapere come posso ora verificare se ci sono dei marcatori all'interno di questo?

Ho già un oggetto che sta memorizzando i marcatori per un altro motivo. Mi piace:

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

che potrebbe essere utile?

Non capisco come utilizzare GLatLngBounds e containsLatLng (latlng: GLatLng) come suggerito.

risposta

3

Box/Rectangle Draw Selection in Google Maps

Questa era la mia soluzione ..

 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

La tua domanda è contrassegnata con la versione v3 dell'API di Maps, quindi presumo che tu stia utilizzando quella versione (che dovresti avere come v2 è deprecato). Nota che alcune classi e metodi sono denominati in modo diverso dalla tua domanda.

I limiti sono rappresentati con la classe LatLngBounds. È possibile eseguire il metodo contains su un'istanza di tale classe per determinare se un punto si trova all'interno di tali limiti.

Se si dispone di un oggetto con tutti i marcatori, si può ciclo attraverso di loro e controllare ogni marcatore, per esempio:

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 
    } 
} 

Una nota a parte, vorrei memorizzare l'oggetto LatLng nei marcatori oggetto quando creando loro. In questo modo non devi crearli dove ti serve.

+0

sì la sua v3 api. grazie per la tua risposta Peter. quindi dovrei essere in grado di usare var bounds = new google.maps.LatLngBounds (bnds); ? –

+0

Il costruttore prende 2 argomenti: sud-ovest e nord-est. Basta fare clic sul link che ho fornito. –

+0

vedo, quindi come posso ottenere gli argomenti sw e ne dal mio output di bnd? –

Problemi correlati