2013-07-12 11 views
14

Muszę wybrać wiele znaczników na mapie. Coś takiego: Box/Rectangle Draw Selection in Google Maps, ale z ulotką i osm.Zaznaczanie wielu markerów w ramce w ulotce

Myślę, że może to być łatwe modyfikowanie pola powiększenia, które pojawia się, gdy zmieniasz clic i przeciągasz na mapie osm, ale nie wiem jak to zrobić.

Edit: ja przepisać funkcję _onMouseUp, jak @LSA komentarzu, a zakończył się w coś takiego:

_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

Jak to zrobić dokładnie? Czy istnieje sposób bez bicia kodu ulotki? Jak nadpisanie tej funkcji? – mblaettermann

+1

@mblaettermann: Sprawdź moją odpowiedź. – fuzz

Odpowiedz

3

myślę, że może to być łatwe modificating pole powiększenia, który pojawia się, gdy Ci przesunąć zapadkę i przeciągnij w mapie osm, ale nie wiem jak to zrobić

Dobry pomysł. Zoom Box jest w rzeczywistości funkcjonalnością ulotki.

Here to kod.

Po prostu przepisz funkcję _onMouseUp, aby pasowała do twoich potrzeb.

+1

To wszystko, przepisałem tę funkcję i działa. Zaktualizuję moje pytanie za pomocą kodu. Dzięki – deckard

5

Próbowałeś czegoś takiego?

markers jest tablicą 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

Czy możesz dodać więcej szczegółów o tym, jak tego użyć? – Matt

+0

@Matt: Nie ma za wiele. 'markers' to po prostu' Array' ''latlat '' (ang. L.latlng()), który po przeciągnięciu obszaru na mapie SHIFT wywołuje metodę' boxzoomend' i pokazuje 'markery' które wybrałeś pod warunkiem, że są w tablica. To tylko sprawdzenie, czy znaczniki istnieją w wybranych granicach. – fuzz