簡體   English   中英

在WPF中用數千行快速繪制地圖

[英]Drawing a map fast with thousands of lines in WPF

我正在WPF中制作路線規划程序,我需要顯示一個地圖,它是一個有數萬條邊的圖形對象。 如果我還想與這個地圖交互(比如縮放,移動,選擇邊緣),那么繪制這些線條的最佳選擇是什么? 我試過的所有選項都變成了hova,但渲染性能卻很慢。

你可以使用Shape ,與這些對象交互特別簡單,但如果你處理成千上萬的邊緣,我建議使用DrawingVisual類,一個可用於在屏幕上渲染矢量圖形的可視對象,以及它的RenderOpen方法。 我遇到了類似的問題 ,我使用DrawingContext繪制了邊緣,提高了應用程序的性能。

要進行縮放,您必須使用轉換,特別是ScaleTrasnform ,並將轉換應用於面板或形狀。

DrawingVisual不提供事件handlig,因此如果使用Shape,您可以使用事件與邊緣交互,使用DrawingVisual,您需要實現Hit-Testing

要提高繪圖性能,您必須避免一次渲染所有線條。 即使使用較低級別的視覺效果,也無法提高性能。

你必須遵循這些事情:

  1. 如果在一個圖層中有這些線條,則將該圖層拆分為不同的圖層。您可以在與高速公路,高速公路,當地道路,街道等相關的線路基礎上拆分它們。
  2. 您必須找到對這些圖層進行空間索引的機制。 通過使用空間索引,您可以根據邊界框索引線條。
  3. 在邊界框的基礎上獲取線條,並僅渲染位於該邊界框中的線條
  4. 在更高的縮放級別渲染重要線(高速公路,高速公路),然后在地圖上放大時逐漸顯示其他線(低重要性道路,街道)。

如果必須使用WPF,請查看DrawingVisual類。 這樣可以訪問低級繪圖基元,從而提供更快的性能。 但是,當您處理較低級別的對象時,您必須自己處理焦點和命中測試等事情。 在這里查看DrawingVisuals上的msdn條目:

http://msdn.microsoft.com/en-us/library/system.windows.media.drawingvisual.aspx http://msdn.microsoft.com/en-us/library/ms742254.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM