2013-07-12 17 views
14

Devo selezionare più marker in una mappa. Qualcosa del genere: Box/Rectangle Draw Selection in Google Maps ma con volantino e osm.Selezione di più marker all'interno di una casella nel volantino

Penso che potrebbe essere facile modificare la finestra di zoom che appare quando si fa clic e si trascina su una mappa osm, ma non so come farlo.

Edit: riscrivo la funzione _onMouseUp, come commento @LSA e si è conclusa in qualcosa di simile:

_onMouseUp: function (e) { 

    this._finish(); 

    var map = this._map, 
    layerPoint = map.mouseEventToLayerPoint(e); 

    if (this._startLayerPoint.equals(layerPoint)) { return; } 

    var bounds = new L.LatLngBounds(
    map.layerPointToLatLng(this._startLayerPoint), 
    map.layerPointToLatLng(layerPoint)); 

    var t=0; 
    var selected = new Array(); 

    for (var i = 0; i < addressPoints.length; i++) { 
     var a = addressPoints[i]; 
     pt = new L.LatLng(a[0], a[1]); 

     if (bounds.contains(pt) == true) { 
      selected[t] = a[2]; 
      t++; 
     } 
    } 

    alert(selected.join('\n')) 
}, 
+0

Come hai fatto esattamente? C'è un modo senza ritoccare il volantino? Ti piace ignorare questa funzione? – mblaettermann

+1

@mblaettermann: Controlla la mia risposta. – fuzz

risposta

3

penso che potrebbe essere facile modificating casella di zoom che appare quando si passa clic e trascinare in una mappa di osm, ma non so come farlo

Buona idea. La casella di zoom è in realtà una funzionalità di volantino.

Here è il codice.

Basta riscrivere la funzione _onMouseUp in base alle proprie esigenze.

+1

Ecco, ho riscritto quella funzione e funziona. Aggiornerò la mia domanda con il codice. Grazie – deckard

5

Hai provato qualcosa del genere?

markers è un array di L.latLng() coordinates

map.on("boxzoomend", function(e) { 
    for (var i = 0; i < markers.length; i++) { 
    if (e.boxZoomBounds.contains(markers[i])) { 
     console.log(markers[i]); 
    } 
    } 
}); 
+0

Potresti aggiungere ulteriori dettagli su come utilizzare questo? – Matt

+0

@Matt: non c'è molto da fare. 'markers' è solo una' Array' di coordinate 'L.latlng()' che quando si sposta MAI un'area sulla mappa chiama il metodo 'boxzoomend' e mostra i' marcatori' che hai selezionato a condizione che siano in l'array. Sta solo controllando se i marker esistono all'interno dei limiti selezionati. – fuzz