2016-05-30 49 views
3

我跑了谷歌搜索,並伸出援手在這裏。我們現在正在客戶端使用geoXml3處理KML文件。但理想情況下,我想要在服務器端預處理它,並在客戶端發送這些圖。由於KML文件是18MB文件,需要永久下載到客戶端,然後客戶端解析它並在Google地圖上繪製多邊形。如何在Nodejs中處理KML/GeoJSON?

我們將KML文件更改爲GeoJSON並縮小了尺寸,壓縮了它 - 畢竟馬戲團的響應時間仍然不好。我只想知道節點中是否有方法/庫可以執行此操作。

+1

您是否在尋找一個庫來將kml文件轉換爲geojson? – Dario

+0

您是否需要爲每個請求處理文件,或者這是服務器端的一次性處理? – HeadCode

+0

@HeadCode這是一次加載層,我們有每個請求的postgis –

回答

1

當你說你正在壓縮文件時,你是什麼意思?如果你的意思是像zip或lha這樣的算法,那麼不一定會減小文件的大小。您想要做的是從KML文件中刪除線段。在減少一些地理信息時,我發現有許多英里的長度與直線相差不到一英尺。由於數據點每隔幾英尺就會間隔一段距離,這意味着KML文件中的絕大多數點都可以在幾何外觀沒有明顯變化的情況下被移除。尋找直線段比較簡單。

您還應該記住您正在查看的地圖的比例尺以及KML文件中數據點的間距。即使線條是複雜曲線,也可以通過嘗試曲線擬合特徵線段並以此方式減小數據大小來移除大量點。

您似乎暗示將數據從服務器下載到客戶端比處理服務器上的數據要花費更多的時間。如果這是正確的,減少點數是最有效的方法。

+0

使用gzip壓縮我們減少了點數和下載時間從120s到15s。它仍然很慢!我不認爲這有任何解決方案 –

+0

可能不是一個簡單的解決方案或通常適用的解決方案。一種方法是使用KML文件繪製所有點並以不同程度的放大率查看它。 –

0

有許多技巧可以嘗試減少KML多邊形文件的下載時間。

正如前面的答案中所提到的,關鍵是要減少數據的大小。這可以通過多種方式完成,具體取決於您的使用情況:

  • 減少每個線段/多邊形邊界所組成的點的數量。有很多這樣的算法,Douglas-Peucker行簡化算法是最知名的。
  • 降低數據點的精度。如果您的座標以高精度存儲(即緯度/經度有幾個小數位),則可以將這些座標四捨五入爲精度較低/小數點位數較少。請注意,如果你走得太遠,你可能需要玩這個,因爲它會使你的多邊形的邊界波濤洶涌/鋸齒狀。
  • 壓縮。它看起來好像你已經嘗試過這一點。 Gzip壓縮應該能夠顯着降低KML的有效負載大小。
  • 最後,如果你還沒有得到你想要的結果,你可以考慮通過去除小的/不重要的多邊形來進一步概括你的數據。再次,這將取決於您的使用情況
+0

謝謝Aengus,減少的文件現在是1.6 MB。但是仍然需要15s加載,這從可用性預期來說有點令人沮喪 –

+0

是的,還是很慢。你看看15年前的情況嗎?例如網絡,閱讀,渲染。進一步優化將取決於您想要對客戶端上的多邊形執行的操作。你看過服務器端渲染嗎? – aengus