在 WPF 中使用数千条线快速绘制地图
本文关键字:千条 地图 绘制 WPF | 更新日期: 2023-09-27 18:31:11
我正在用 WPF 制作一个路线规划程序,我需要显示一个地图,它是一个具有数万条边的图形对象。如果我还想与此地图进行交互(例如缩放、移动、选择边缘),绘制这些线条的最佳选择是什么?我尝试的所有选项都证明渲染性能真的很慢。
您可以使用 Shape,与这些对象的交互特别简单,但如果您要处理数千条边缘,我建议使用 DrawingVisual 类(一种可用于在屏幕上呈现矢量图形的视觉对象)及其 RenderOpen 方法。我遇到了与您类似的问题,并且我使用DrawingContext绘制边缘提高了应用程序的性能。
要缩放,您必须使用变换,特别是 ScaleTrasnform 并将变换应用于面板或形状。
DrawingVisual 不提供事件手部,因此如果使用 Shape,您可以使用事件与边缘进行交互,则使用 DrawingVisual,您需要实现命中测试。
为了提高绘图性能,您必须避免一次渲染所有线条。即使使用较低级别的视觉对象也无法提高性能。
您必须遵循以下事项:
- 如果这些线条位于一个图层中,则将该图层拆分为不同的图层。您可以在与高速公路,高速公路,地方道路,街道等相关的线路的基础上拆分它们。
- 您必须找到在空间上索引这些图层的机制。通过使用空间索引,您可以根据线的边界框为线编制索引。
- 获取边界框底部的线条,并仅呈现位于该边界框中的线条
- 在较高的缩放级别上渲染重要线(高速公路,高速公路),然后在地图中缩放时逐渐显示其他线(低重要性道路,街道)。
如果必须使用 WPF,请查看 DrawingVisual 类。这允许访问低级绘图基元,从而提供更快的性能。但是,当您处理较低级别的对象时,您必须处理诸如焦点和命中测试之类的事情。查看此处有关 DrawingVisuals 上的 msdn 条目:
http://msdn.microsoft.com/en-us/library/system.windows.media.drawingvisual.aspxhttp://msdn.microsoft.com/en-us/library/ms742254.aspx