2012-06-27 70 views
7

我有一個具有各種標記的地圖,我需要能夠在地圖上繪製矩形並選擇矩形範圍內的標記。檢查地圖標記是否在選定範圍內

到目前爲止,我已經找到了一些偉大的信息在這裏:How to get markers inside an area selected by mouse drag?

我已經實現了keymapzoom插件確定。像這樣

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

這給了我下面的 ((緯度,經度),(緯度,經度))從警報格式(bnds);

我需要知道我現在可以檢查是否有任何標記在此範圍內?

我已經有一個對象存儲標記的另一個原因。如:

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

這可能是一個有用的檢查嗎?

我不明白如何使用GLatLngBounds和containsLatLng(latlng:GLatLng)建議。

回答

3

Box/Rectangle Draw Selection in Google Maps

這是我的解決方案..

 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

您的問題標有Maps API的v3版本,因此我假設您使用的是該版本(您應該將其作爲v2棄用)。請注意,某些類和方法的命名與您的問題不同。

界限用LatLngBounds類表示。您可以對該類的實例執行contains方法,以確定點是否位於這些邊界內。

如果您對您的所有標記的對象,你可以通過他們循環,並檢查各個標誌物,例如:

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

在一個側面說明,我將存儲的經緯度對象標記對象時創造它們。這樣你就不必在任何需要的地方創建它們。

+0

是其API第3版。謝謝你的回覆。所以我應該能夠使用var bounds = new google.maps.LatLngBounds(bnds); ? –

+0

構造函數需要2個參數:西南和東北。只需點擊我提供的鏈接。 –

+0

我明白了,那麼我如何從我的bnds輸出中獲得sw和ne參數? –

相關問題