2011-02-25 81 views
2

我有一個商店定位器,它將商店作爲標記顯示在地圖上,並將它們列在邊欄中。有大約600個商店,它們全部通過AJAX加載到頁面上。所以我可以隨時訪問數組中的所有元素。現在,我想要的功能是,當用戶在視口中移動/縮放時,我將顯示當前區域的邊界,並在側邊欄中過濾結果(位置陣列,每個位置都有一個lat和long)根據他們是否會在該區域展示。然後我會畫出相關位置的標記。基本上,在視口中可以查看的任何位置也會列在側欄中,保持同步。谷歌地圖(v3)通過地圖移動來過濾

有人能指出我在正確的方向來實現這個嗎?這甚至聽起來像是處理這種功能的有效方式嗎?

回答

4

你需要寫一個處理程序bounds_changed事件(更多文檔here

google.maps.event.addListener(map, 'bounds_changed', function(){ 
    // your logic here - map.getBounds() will give you the updated bounds 
}); 

至於效率,同時加載的一切可能不是最具擴展性的方法。如果明年有6000家商店,或者您爲每家商店添加更多數據會怎樣?更好的方法是使用AJAX調用將邊界傳遞迴服務器,並僅返回屬於該區域的商店。

+1

一個更好的方法是將商店存放在當前窗口大小的兩倍的區域中,並且只在當前窗口超出上一個請求的範圍時才獲取新數據。 – rob 2011-11-03 22:14:42

2

您可以將移動/縮放事件附加到地圖上,並基本上執行綁定檢查以在查看邊界內隱藏/顯示標記。您可以使用LatLngBounds(sw?:LatLng, ne?:LatLng)來實現此目的,並使用getBounds();針對地圖的當前邊界檢查標記LatLng。此外,在LatLngBounds內有一種方法來檢查LatLtn是否在邊界contains(latLng:LatLng)內。所以你會循環你的標記'LatLng並檢查它。

Google Map API LatLngBounds

Google Map API Map

至於那張欄,如果你有保存那麼你可以刪除或隱藏側邊欄上的相關位置的標記。