2009-09-24 145 views
2

有人注意到,當你去maps.google.com並進行搜索(比如洗車)時,它會呈現大量的結果(以小圓圈表示)和一些顯着的結果看作普通尺寸的引腳)?混合靜態/動態谷歌地圖

注意它有多快?

從我在Firebug中分析這些信息可以看出,其中大部分是在服務器上生成的,並以靜態圖像的形式發送給客戶端。

但是,它仍然是動態的。您仍然可以放大或縮小,或者單擊結果並查看呈現的動態InfoWindow。

谷歌已經使用靜態圖像快速平滑地圖,同時仍然使它更靈活。

有沒有辦法通過我自己的Google地圖(使用Google Maps API實現)進行這種「預加載」?

回答

1

maps.google.com使用的技術與GLayer中使用的技術類似。服務器動態構建瓦片和「熱點」信息。即使底層數據是相當靜態的,GLayer tile也是動態構建的(並且可能被緩存)。從客戶端來看,搜索到的點技術與維基百科或Panoramio GLayer完全相同。唯一的新技巧是點信息是在Google的大型快速服務器上動態生成的。

API尚未提供用於創建自定義GLayers的任何工具。如果你想要做同樣的你自己的事情,用你自己的位置數據庫,有你需要編寫三個步驟:

  1. 創建自己的自定義tileserver 它搜索你的數據庫 項瓷磚區域並使用像gd或 imagemagic的圖形庫在 瓷磚上放置點。使用這些圖塊在客戶端上創建一個 GTileLayerOverlay。

  2. 當用戶點擊地圖時, 將該點擊的位置發送到 第二臺服務器。該服務器應該 檢查您的數據庫,並返回 infowindow文本的位置在該 位置,如果有的話。如果需要,返回由tileserver映射的所有點的所有infowindow內容將會慢得令人無法接受,因此您必須逐個獲取它們。

  3. 當鼠標 位於點之上時更改光標更爲棘手。 Google 所做的是返回熱點列表 瓦片上的所有點的座標。無論何時移動鼠標,API都會確定指針結束的圖塊,並使用四叉樹 算法查看熱點上的指針是否爲 ,並根據需要更改 遊標。如果您只有 每個 瓦片的熱點數量適中,那麼線性搜索 可能是可接受的快。如果每塊瓷磚可能有數千個點,那麼您可能需要編寫自己的四叉樹算法。 Google四叉樹代碼未公開,因此您無法使用它。

這裏是a page有人已經做了所有這些。在這種情況下,通過比較與中心點的距離,即使點是正方形,熱點計算爲圓圈。在maps.google.com上,通過使用GBounds.containsPoint(),熱點計算爲矩形,儘管點是圓形的。

0

我正在做類似的事情 - 但改爲使用拼貼圖層,只是在視圖更改時向服務器發送服務器羣集標記。如果您的數據是靜態的,您可以對您的標記進行預先集羣,並且數以萬計的標記速度非常快。

我們的網站不能使用預聚集,因爲標記可以被搜索和過濾,但它仍然相當快,高達約20,000標記。仍然在努力...

+0

嘿克里斯,聽起來像一個很棒的網站。你有沒有在網絡上呢?你能給我一個鏈接? – Jonathan 2009-09-25 08:34:09