2017-06-17 60 views
0

我創建了一個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 

我真的不知道如何解決這個問題。有人能讓我走向正確的方向嗎?

+0

只是爲了澄清一點,一個地區有多個多邊形?在這樣的地點集合中通常有多少點? – Clemens

+0

或多或少。每個區域都是一個List ,每個都有一個LocationCollection。數量取決於大小,但我得到的地點從120到790. –

+0

好吧,在12個地區的幾個地區的幾百個位置。這可以簡單地總結爲幾千個折線點,這可能太多了。嘗試減少折線點的數量,可能取決於當前縮放級別。在較高的縮放級別下,只顯示位於當前視口內的多段線,以較低的縮放級別減少每個多段線的點數量,例如,通過Douglas-Ramer-Peucker算法。 – Clemens

回答

1

看看使用基於縮放級別的頂點縮減。我之前在Bing Maps Silverlight控件中撰寫了一篇博文,內容如下:https://rbrundritt.wordpress.com/2011/12/03/vertex-reductionone-of-my-secret-weapons/使用WPF控件應該相當容易。將視圖更改結束事件添加到地圖並檢查縮放級別是否有機會。如果有,則更新多邊形的位置。

或者,如果您希望能夠呈現更多數據,請查看通過Web瀏覽器控件在您的應用中使用Bing Maps V8 Web控件。這個控件有很多優化,可以渲染數萬個多邊形。

+0

謝謝,請看看! –