2017-06-17 3 views
0

Ich habe eine WPF-Anwendung erstellt, um die Bezirke von Berlin mit MapPolygon s anzuzeigen. Innerhalb des <m:Map> Tags erstellte ich 12 Mal einen MapItemsControl, um die verschiedenen Bezirke zu zeigen. Hier ist der Code für einen:WPF Bing Karte Leistungsprobleme

<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> 

Jedes ItemsSource hat eine Eigenschaft mit einem LocationCollection, wo viele Location s gespeichert sind, die richtigen Polygone zu zeichnen.

Alles funktioniert gut. Das einzige Problem ist, dass das Ziehen der Karte ziemlich langsam und verzögert ist. Das einzige, was ich mir vorstellen konnte, um die Leistung zu testen, war das eingebaute Leistungsanalyse-Tool von Visual Studio. Das gab mir dieses Ergebnis:

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 

Ich weiß nicht wirklich, wie diese zu lösen. Könnte mich jemand in die richtige Richtung führen?

+0

Um das zu verdeutlichen, hat ein einzelner Bezirk mehrere Polygone? Wie viele Punkte gibt es normalerweise in einer solchen Locations-Sammlung? – Clemens

+0

Mehr oder weniger. Jeder Distrikt ist eine List mit jeweils einer LocationCollection. Die Menge hängt von der Größe ab, aber ich habe Locations von 120 bis 790 bekommen. –

+0

Ok, mehrere hundert Standorte in einigen Bezirken in 12 Bezirken. Das fasst leicht einige tausend Polylinienpunkte zusammen, was einfach zu viel ist. Versuchen Sie, die Anzahl der Polylinienpunkte zu reduzieren, möglicherweise abhängig von der aktuellen Zoomstufe. Zeigen Sie bei höheren Zoomstufen nur die Polylinien an, die im aktuellen Ansichtsfenster liegen, verringern Sie bei niedrigeren Zoomstufen die Anzahl der Punkte pro Polylinie, z. nach dem Douglas-Ramer-Peucker-Algorithmus. – Clemens

Antwort

1

Schauen Sie sich die Vertexreduktion auf der Grundlage der Zoomstufe an. Ich schrieb vor langer Zeit einen Blog-Post über das Bing Maps Silverlight-Steuerelement: https://rbrundritt.wordpress.com/2011/12/03/vertex-reductionone-of-my-secret-weapons/ Es sollte ziemlich einfach sein, mit dem WPF-Steuerelement zu verwenden. Fügen Sie der Karte ein Ende des Ereignisses "Änderung der Ansicht" hinzu und überprüfen Sie, ob die Zoomstufe geändert wurde. Wenn dies der Fall ist, aktualisieren Sie die Positionen Ihrer Polygone.

Wenn Sie in der Lage sein möchten, viel mehr Daten zu rendern, können Sie auch die Bing Maps V8-Websteuerung in Ihrer App über einen Webbrowser steuern. Dieses Steuerelement enthält viele Optimierungen, mit denen Zehntausende von Polygonen gerendert werden können.

+0

Danke, schau dir das an! –