WPF Bing地图性能问题
问题描述:
我创建了一个WPF应用程序来显示柏林地区MapPolygon
s。在<m:Map>
标签内,我创建了12次MapItemsControl
来显示不同的地区。下面是一个代码:WPF Bing地图性能问题
<m:MapItemsControl ItemsSource="{Binding dMitte}">
<m:MapItemsControl.Style>
<Style TargetType="{x:Type m:MapItemsControl}">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=MitteVisibility, Path=IsChecked}" Value="True">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</m:MapItemsControl.Style>
<m:MapItemsControl.ItemTemplate>
<DataTemplate>
<!-- ReSharper disable once Xaml.BindingWithContextNotResolved -->
<m:MapPolygon Fill="Red" Stroke="Black" StrokeThickness="2" Opacity="0.2" Locations="{Binding Path=Locations}"/>
</DataTemplate>
</m:MapItemsControl.ItemTemplate>
</m:MapItemsControl>
每ItemsSource
有一个LocationCollection
其中很多Location
s的存储画出正确的多边形的属性。
一切工作正常。唯一的问题是,拖动地图非常缓慢和迟缓。我能想到的测试性能的唯一方法是Visual Studio中内置的性能分析工具。这给了我这个结果:
Function Name Inclusive Samples Exclusive Samples Inclusive Samples % Exclusive Samples % Module Name
Microsoft.Maps.MapExtras.BitmapImageRequestQueue.DownloadThreadStart() 1 0 100,00 0,00 Microsoft.Maps.MapControl.WPF.dll
--Microsoft.Maps.MapExtras.BitmapImageRequestQueue.DownloadThreadStart() 1 0 100,00 0,00 Microsoft.Maps.MapControl.WPF.dll
我真的不知道如何解决这个问题。有人能让我走向正确的方向吗?
答
看看使用基于缩放级别的顶点缩减。我之前在Bing Maps Silverlight控件中撰写了一篇博文,内容如下:https://rbrundritt.wordpress.com/2011/12/03/vertex-reductionone-of-my-secret-weapons/使用WPF控件应该相当容易。将视图更改结束事件添加到地图并检查缩放级别是否有机会。如果有,则更新多边形的位置。
或者,如果您希望能够呈现更多数据,请查看通过Web浏览器控件在您的应用中使用Bing Maps V8 Web控件。这个控件有很多优化,可以渲染数万个多边形。
+0
谢谢,请看看! –
只是为了澄清一点,一个地区有多个多边形?在这样的地点集合中通常有多少点? – Clemens
或多或少。每个区域都是一个List,每个都有一个LocationCollection。数量取决于大小,但我得到的地点从120到790. –
好吧,在12个地区的几个地区的几百个位置。这可以简单地总结为几千个折线点,这可能太多了。尝试减少折线点的数量,可能取决于当前缩放级别。在较高的缩放级别下,只显示位于当前视口内的多段线,以较低的缩放级别减少每个多段线的点数量,例如,通过Douglas-Ramer-Peucker算法。 – Clemens