2008-10-06 212 views
7

我想找到的東西,最好是F/OSS,可以從KML和/或KMZ數據生成谷歌地圖覆蓋。谷歌地圖覆蓋

我們有一個活動網站,我們正在努力,去年需要容納約16,000個地點標記,今年可能還會有這麼多。去年,完成該網站的公司只是將KML數據直接提供給gMaps API,並讓它放置所有標記客戶端。顯然,這成爲了一場表演噩夢,並且傾向於讓舊瀏覽器「凍結」(或者至少每次出現凍結幾分鐘)。

理想情況下,此服務器端腳本將採用KML,地圖的緯度/經度中心和地圖縮放級別,並將所有可見地點標記合適地合併到單個GIF或PNG疊加層中。

任何指導或建議,將不勝感激。

更新10/8/2008 - 我在這裏和其他地方遇到的大多數信息似乎表明,減少地圖上的點數是要走的路數(即使用一個標記來在從較高的高度/縮放級別觀看時代表幾個)。雖然在某些情況下這可能是一種好方法,但在這裏不起作用。我們正在尋找美國地圖上有數千個標記的視覺影響。我研究過的一個選項是PushPin服務,當服務器(大概)KML將創建服務器端時,會在所有可見點(基於中心經緯度和縮放級別)上創建一個疊加層,並將其渲染到單個圖像上,所以我們不是執行幾千個DOM操作客戶端,而是將所有這些標記合併到單個圖像服務器端,並在客戶端執行單個DOM操作。 PushPin服務非常靈活,如果不是相關的成本,它肯定會工作。我們真的在尋找一些F/OSS,我們可以運行服務器端來生成自己的覆蓋。

回答

0

這是一個艱難的。您可以使用custom tilesets with Google Maps,但仍需要某種方法來生成拼貼(手動除外)。

恐怕這就是我的一切=/

+0

是的,這當然是我的重疊覆蓋思想,但我特別希望的是服務器端將生成基於KML,中心經緯度和縮放級別的覆蓋。 – theraccoonbear 2008-10-06 14:49:21

4

你可能想看看像GeoserverMapserver。他們是谷歌地圖克隆,還有更多。

你可以生成你喜歡的覆蓋圖,Geoserver(我認爲mapserver也可以)可以爲你提供KML,PDF,PNG和其他輸出來混合你的地圖,或者你可以自己生成整個地圖,但這需要時間。

+0

這些看起來有趣,我會看看他們是否會爲我們的目的工作。 – theraccoonbear 2008-10-06 15:08:49

+1

我們將挑釁地研究GeoServer和GeoWebCache! – Adrian 2009-03-03 15:02:21

+4

不好意思? 「試着阻止我們!!!」 ;) – DanM 2010-01-21 16:53:04

1

我不知道你是如何與你的項目,但也許你可以看看GeoDjango?這個經過修改的Django版本包含各種存儲位置的工具;轉換座標和顯示地圖,簡單的方法。 Offcourse你需要一些Python經驗和一個服務器來運行它,但是一旦你擁有了Django的竅門,它就會運行得很快而且很好。

如果您只是想爲您的問題提供解決方案,請嘗試在較低的縮放級別對結果進行分組,這種實現的一個很好的示例可以在here找到。

0

OpenLayers是一個偉大的JavaScript前端多個地圖服務或您自己的地圖服務器。 2.7版剛剛發佈,它增加了一些非常神奇的功能和控制。

2

不確定您爲什麼要轉到GIF/PNG疊加層,您可以直接在KML中執行此操作。我假設你的大部分性能問題都是由用戶當前視圖以外的點引起的,即用戶正在看紐約,但你在洛杉磯有點浪費內存,因爲它們不可見。如果你真的有16,000個點可以同時看到,那麼你需要採取不同的策略。

如果以上適用,程序將如下所示:

  1. 確定地圖
  2. 鑑於中央&程度,你應該能夠計算緯度/久的左上角和地圖右下角。
  3. 迭代點數據庫並檢查兩個角落的每個位置。經度需要比左上角的經度更大(有符號!),小於右下角的經度。緯度需要小於左上方的緯度(signed!)並大於右下方的緯度。只是簡單的比較,這裏不需要花哨的計算。
  4. 將匹配點輸出到用戶的臨時KML。
  5. 您可以送入KML directly into Google Maps並讓它映射它,或者您可以使用Javascript maps API通過KML加載點。

它可能無法解決您在這裏的確切問題,但對於相關問題,您可能還需要查看Google Static Maps API。這使您可以創建一個靜態圖像文件,其上有地圖標記,加載速度非常快,但不具有常規Google地圖的交互性。但是,由於API的設計方式,它無法處理接近16,000點的任何地方,因此您仍然必須過濾到視圖。