0

我正在爲Windows Phone和Windows 8編寫一個基於Bing Map的通用應用程序,該應用程序顯示一些非常大的地圖圖層。加速一個非常大的基於Bing Maps多段線圖層

編寫最初的應用程序是沒有問題的(我遵循的教程是在http://blogs.msdn.com/b/rbrundritt/archive/2014/06/24/how-to-make-use-of-maps-in-universal-apps.aspx),但是我現在遇到的主要問題是渲染一個包含數千個折線的圖層,並且有數以萬計的座標。

數據太大 - 在Windows 8.1上,地圖崩潰了應用程序,而在Windows Phone 8.1上,該圖層需要很長時間才能呈現。

根據http://blogs.msdn.com/b/bingdevcenter/archive/2014/04/23/visualize-large-complex-data-with-local-tile-layers-in-bing-maps-windows-store-apps-c.aspx,我應該通過將其轉換爲本地磁貼層來加速它,但文章(MapCruncher)中提到的程序需要PNG作爲輸入。問題是,如何將我的地圖數據轉換爲PNG?我可以將數據作爲shapefile,KML文件或CSV文件。還有另外一種方法我應該這樣做嗎?我知道我可以通過Geoserver來做到這一點,但是我的應用程序必須有脫機支持,因此無法根據需要從Web服務器下載適當的文件。

如果有人有其他方法我可以用大圖層來解決這個速度問題,那麼將不勝感激。我意識到我可以通過四叉樹來加速在Bing地圖中繪製圖層,但是我發現的大部分內容都是理論上的。如果任何人有一些我可以插入的代碼,這將是非常有用的。

+0

我之前解決了這個問題,通過確保我只在地圖上添加多邊形(如果它們實際在地圖上可見)(使用邊界框),並且不添加多邊形的多邊形以注意給定當前縮放級別。只需訂閱地圖的事件即可檢測視圖中的更改,並相應地添加或刪除多段線。 – 2014-09-27 10:00:32

+0

@KrisVandermotten您是否有任何使用此方法的示例代碼? – Peter 2014-09-28 00:37:55

+0

不幸的是,這是一個客戶端的工作,我無法再訪問源代碼。但實際上這很直接。只需找出地圖的哪一部分正在顯示,無論是最初和通過視圖更改時的事件。除去不可見的多段線,並添加多段線。在四叉樹中組織多段線可以提高性能,但我不確定它甚至是必需的。儘管預先計算並緩存邊界框。 – 2014-09-28 09:19:53

回答

1

如果您只有一個小區域中的數據,或者只想顯示幾個縮放級別的數據,則本地磁貼層無問題。否則,瓷磚的數量會急劇增加,並會使您的應用程序變得龐大。如果您的數據定期更改,或者您希望支持地圖的所有縮放級別,則應將數據存儲在服務器上,並將其作爲動態切片圖層公開。動態圖塊圖層是一種Web服務,可根據您的數據生成按需圖片。您可以將緩存添加到磁貼以提高性能。這是處理大數據集的最好方法,也是我用過很多的一種方法。事實上,我在這裏有一個演示:http://onsbingmapsdemo.cloudapp.net/該數據集由175,000個複雜的多邊形組成,相當於大約2GB的數據。

我對如何做到這一點這裏的舊博客帖子:http://rbrundritt.wordpress.com/2009/11/26/dynamic-tile-layers-in-the-bing-maps-silverlight-control/

如果你喜歡用MVC工作,你可能會發現這些項目有用: https://ajaxmapdataconnector.codeplex.com/

https://dataconnector.codeplex.com/

+0

如果數據沒有改變,您可以使用Mapbox Studio(或其以前的版本)或任何平鋪服務器來呈現平鋪圖像金字塔中的數據。 – 2014-09-27 21:12:22

+0

@rbrundritt感謝詳細的帖子。我希望我不必去服務器端,但是您發佈的代碼對我瞭解如何生成拼貼圖層非常有幫助。謝謝! – Peter 2014-09-28 00:58:46