2010-06-30 75 views
5

我正在構建一個ASP.NET MVC網站,我希望Google Maps JavaScript API地圖顯示通過AJAX從後端加載的標記。將標記延遲加載到Google Maps JavaScript API地圖的策略

由於我不希望客戶端遇到內存問題,我想延遲加載標記並將它們應用於Fluster2,以將它們放入集羣。我認爲延遲加載標記的最佳方式是將事件偵聽器添加到Map的idle事件中,該事件在地圖平移或縮放後發生。


這是我目前的策略:

  1. 事件偵聽器添加到idle事件。
  2. idle事件被拋出時,使用jQuery對我的後端進行AJAX HTTP POST調用,提供地圖的當前視口/邊界。
  3. 後端返回視口內的所有點。
  4. 這些點被創建爲標記並添加到Fluster2,它將它們添加到地圖中。舊點不會被丟棄。
  5. 重複

然而,這可能會產生問題,因爲老點不被丟棄。我不想丟棄它們,因爲我不想再次加載它們,但是按照我目前的策略,我會再次加載它們併爲它們再次創建標記。

雖然我覺得在AJAX調用中告訴後端不是一個好主意,我已經有了一些標記,但是實現某種不允許重複的散列表

這樣,當我加載點時,我可以嘗試將它們添加到哈希表中:如果成功,我還沒有顯示它們,所以我可以將它們添加爲標記;如果失敗了,他們已經在地圖上了。


這是一個很好的策略嗎?如果是這樣,我怎麼能實現一個不允許重複的哈希表?

回答

3

我最近實現了一些非常相似的東西;雖然我個人選擇刪除所有標記並完全填充地圖,但我確實喜歡您的整體策略,並認爲它可能會讓用戶體驗更流暢,因爲刪除所有標記和添加新標記之間的短暫閃爍消失。所以,是的,我認爲這是一個很好的策略。

空閒是一個有趣的事件;我發現在Zoom等上沒有很好地工作,併爲TileLoaded(或類似的)解決了問題。對我來說工作得很好,但看起來有點像黑客。

關於你的hashtable問題 - 有兩種可能的地方你可以存儲這樣的地圖。

a)服務器 如果您可以跟蹤要發送座標的頁面,則可以在會話狀態下保留標記的Dotnet哈希表。這可能會阻止您向客戶端發送不必要的座標,但是更多的是錯誤產生的。imo

b)客戶端 這可能是您想要去的任何地方。在這裏,一個正常的Javascript關聯數組應該是你的朋友。

var x = {"some key": "some value"}; 
document.write ("some key" in x); // True 
document.write ("some other key" in x); // False 

除非你找到映射緯度和經度到一個單一的可哈希值的好方法,你可能要保持數組的數組:

var markers = {lat1: {lng11: 1, lng12: 1, lng13: 1}, lat2: ...} 

,然後檢查類似

... 
if (checklat in markers) 
    if (checklng in markers[checklat]) 
     return True 
return False 

我只是看到這是一個老問題。太晚了,也許它仍然有幫助。

+0

感謝您的幫助!我會盡力實現這一點。 – 2010-07-25 00:52:31

+0

對於散列鍵,您可以從lat/long創建一個google.maps.latLng對象,並使用它的toString()方法。 – dsas 2013-04-04 13:47:18