我创建了一个WPF应用程序,用MapPolygon
来显示柏林地区。在<m:Map>
标记内,我创建了12次MapItemsControl
来显示不同的区域。这是一个代码:
<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
来绘制正确的多边形。
一切正常。唯一的问题是,拖动地图非常缓慢且滞后。我唯一能想到的测试性能的是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
我真的不知道如何解决这个问题。有人能引导我走向正确的方向吗?
答案 0 :(得分:1)
看一下使用基于缩放级别的顶点缩减。我在很久以前用Bing Maps Silverlight控件写了一篇博客帖子:https://rbrundritt.wordpress.com/2011/12/03/vertex-reductionone-of-my-secret-weapons/使用WPF控件应该相当容易。将视图更改结束事件添加到地图,并检查缩放级别是否有可能。如果有,则更新多边形的位置。
或者,如果您希望能够渲染更多数据,请通过Web浏览器控件查看应用中的Bing Maps V8 Web控件。该控件在其中有大量优化,允许它渲染数万个多边形。