【问题标题】:Drawing a map fast with thousands of lines in WPF在 WPF 中使用数千行快速绘制地图
【发布时间】:2012-04-16 11:02:37
【问题描述】:

我正在 WPF 中制作路线规划程序,我需要显示一个地图,该地图是具有数万条边的图形对象。如果我还想与此地图进行交互(例如缩放、移动、选择边缘),那么绘制这些线的最佳选择是什么?我尝试过的所有选项都导致渲染性能非常慢。

【问题讨论】:

    标签: c# wpf draw


    【解决方案1】:

    你可以使用Shape,与这些对象交互特别简单,但如果你正在处理数千条边我建议使用DrawingVisual类,一个可以用来渲染矢量图形的可视对象屏幕及其 RenderOpen 方法。我有一个 similar problem 给你,我已经使用 DrawingContext 来绘制我的边缘来提高我的应用程序的性能。

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

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

    【讨论】:

    • 谢谢,我想我会使用 DrawingVisual。
    【解决方案2】:

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

    你必须遵循这些事情:

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

    【讨论】:

    • 感谢您的想法。我将尝试实现不同的层。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多