在WPF中用数千行快速绘制地图

时间:2012-04-16 11:02:37

标签: c# wpf draw

我正在WPF中制作路线规划程序,我需要显示一个地图,它是一个有数万条边的图形对象。如果我还想与这个地图交互(比如缩放,移动,选择边缘),那么绘制这些线条的最佳选择是什么?我试过的所有选项都变成了hova,但渲染性能却很慢。

3 个答案:

答案 0 :(得分:3)

你可以使用Shape,与这些对象的交互特别简单,但是如果你处理成千上万的边缘我建议使用DrawingVisual类,一个可以用来的可视对象在屏幕上渲染矢量图形,以及它的RenderOpen方法。我有一个similar problem,我使用DrawingContext改善了我的应用程序的性能以绘制我的边缘。

要缩放,您必须使用转换,尤其是ScaleTrasnform并将转换应用于面板或形状。

DrawingVisual不提供事件handlig,因此如果使用Shape,您可以使用事件与边缘交互,使用DrawingVisual,您需要实现Hit-Testing

答案 1 :(得分:1)

要提高绘图性能,您必须避免一次渲染所有线条。即使使用较低级别的视觉效果,也无法提高性能。

你必须遵循这些事情:

  1. 如果您在一个图层中包含这些线条,则将该图层拆分为不同的图层。您可以在与高速公路,高速公路,当地道路,街道等相关的线路基础上拆分它们。
  2. 您必须找到对这些图层进行空间索引的机制。通过使用空间索引,您可以根据边界框索引线条。
  3. 在边界框的基础上获取线条,仅渲染位于该边界框中的线条
  4. 在较高的缩放级别渲染重要线条(高速公路,高速公路),然后在地图上放大时逐渐显示其他线条(低重要性道路,街道)。

答案 2 :(得分:0)

如果必须使用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