2013-03-12 31 views
0

編輯: 問題 =「有沒有辦法循環訪問數組,並檢查每個位置(long/lat)是否直接落入當前視口「(如若不然獲取視野內的所有標記)谷歌地圖 - 根據地圖當前的觀點從位置數組中獲取值

背景

我的位置(緯度,經度,ID)的陣列。

我想:

  • 在一個谷歌地圖,使用位置數組來顯示標記。
  • 用戶可以滾動/縮放地圖。
  • 在地圖下面有一個按鈕,所以當用戶決定了一個區域時,他可以點擊按鈕,代碼將返回包含在視口/地圖邊界內的ids(來自位置數組)

有谷歌的。載,所以我想你可能使用的東西,如

map.getBounds().contains並以某種方式相互引用marker.getPosition()

,但我不知道是否有辦法循環訪問數組,並檢查每個位置(long/lat)是否直接落入當前視口中

+0

你確切的問題是什麼?你希望在你提出的觀點列表上得​​到一個答案,或者你的問題是:如果有一種方法可以遍歷數組並檢查每個位置(長/緯)是否直接落入當前視口中 – 2013-03-12 13:52:23

+0

是的,理想情況下如果我可以檢查數組中的所有位置,並返回屬於當前視口 – JPMox 2013-03-13 10:10:31

回答

2

您的意思是像這樣(未測試),map是google.maps.Map對象,並且需要位於範圍內。 markersArray是標記數組。

for (var i=0; i< markersArray.length; i++) { 
    if (map.getBounds().contains(markersArray[i].getPosition())) { 
     // the marker is in view 
    } else { 
     // the marker is not in view 
    } 
} 
+0

的感謝地址解析。我想你錯過了一個關閉')',但我會嘗試一下 - 正如你所說我可能需要做一個標記。 – JPMox 2013-03-13 15:23:27

+0

修復了缺失的「)」。仍未測試。 – geocodezip 2013-03-13 16:12:28

+0

你可以使用你現有的數組,但是如果你想對標記進行操作(如果它在視圖中),則需要引用它。如果你所需要的只是id,你可以通過處理現有的數組來獲得,你只需要爲每個條目創建一個google.maps.LatLng,以便在我的答案中的if語句中進行測試。 – geocodezip 2013-03-13 17:38:14

0

http://jsfiddle.net/UA2g2/1/

感謝geocodezip,你給我如何通過遍歷數組循環解決這個問題的想法。我不知道這是否是最有效的方法,但我將一些似乎正在做我想做的代碼放在一起 - 如果您檢查上面的jsfiddle並查看控制檯,則可以看到它記錄了何時以及哪些點位於視口中。

$(document).ready(function(){ 

    var myOptions = { 
    center: new google.maps.LatLng(51, -2), 
    zoom: 9, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    var storeArray = new Array(["51.38254", "-2.362804", "ID1"], ["51.235249", "-2.297804","ID2"], ["51.086126", "-2.910767","ID3"]); 

    google.maps.event.addListener(map, 'idle', function() { 

     for (i = 0; i < storeArray.length; i++) { 
      marker = new google.maps.Marker({ 
      position: new google.maps.LatLng(storeArray[i][0], storeArray[i][1]), 
      map: map 
     }); 
     } 

     for (var i=0; i<storeArray.length; i++) { 
      if (map.getBounds().contains(new google.maps.LatLng(storeArray[i][0], storeArray[i][1]))) { 
       console.log("marker: " + storeArray[i][2]); 
      } 
     } 

    }); 


}); 
相關問題