2013-07-12 92 views
14

我需要在地圖中選擇多個標記。像這樣:Box/Rectangle Draw Selection in Google Maps,但與傳單和osm。單張中的多個標記選擇

我認爲可以很容易地修改當你在osm貼圖中移動clic和拖動時出現的縮放框,但我不知道該怎麼做。

編輯: 我重寫_onMouseUp功能,@LSA註釋,結束了這樣的事情:

_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

一個數組,你是如何做到的到底是什麼?有沒有一種方法可以不通過傳單代碼?像重寫這個函數一樣? – mblaettermann

+1

@mblaettermann:檢查我的答案。 – fuzz

回答

3

我認爲這可能是容易modificating時 你轉移CLIC顯示的縮放框並拖動在osm地圖,但我不知道該怎麼辦

好主意。縮放框實際上是傳單的功能。

Here是代碼。

只需重寫_onMouseUp函數以適應您的需求。

+1

就是這樣,我重寫了該功能,它的工作原理。我會用代碼更新我的問題。謝謝 – deckard

5

你試過類似的東西嗎?

markersL.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

你能否添加更多關於如何使用它的細節? – Matt

+0

@Matt:沒有太多。 'markers'只是'L.latlng()'的一個'Array'的座標,當你在地圖上拖動一個區域時,它會調用'boxzoomend'方法,並顯示你選擇的'markers',只要它們在陣列。它只是檢查標記是否存在於選定的邊界內。 – fuzz