2016-07-25 10 views
1

This article beschreibt, wie Sie die Gesamtkartengröße in Pixel abhängig vom tatsächlichen Zoomfaktor ermitteln können.MapControl-Kartengröße (Pixel)

Die Formel sollte lauten:

Karte width = Karte height = 256 * 2^Ebene Pixel

Leider ist dieses nicht für die MapControl für universelle Anwendungen zu funktionieren scheint. Das erste ist, dass die ZoomLevel -Eigenschaft vom Typ double not integer ist (wie im Beispiel im Artikel benötigt). Aber auch mit einer ganzen Zahl ZoomLevel von d. H. 4,0 (int -> 4) funktioniert die Formel nicht.

Jetzt habe ich versucht, die Kartengröße in Pixel mit Hilfe der MapControl.GetOffsetFromLocation Methode zu erhalten:

private double GetMapSize() 
    { 
     Point pW, pE; 

     myMap.GetOffsetFromLocation(new Geopoint(new BasicGeoposition() 
      { Longitude = -90, Latitude = 0 }), out pW); 
     myMap.GetOffsetFromLocation(new Geopoint(new BasicGeoposition() 
      { Longitude = 90, Latitude = 0 }), out pE); 

     return (pE.X - pW.X) * 2; 
    } 

Dies funktioniert mit einer Abweichung von einigen Pixeln, aber dieses Problem ist eigentlich nicht wichtig.

ich auf meiner Oberfläche Pro 3 die folgenden Ergebnisse (Zoomstufe ist 4,0):

Oberflächen Bildschirm (Skala 1.5): 3654px

Oberflächen externer Bildschirm (Skala 1.0): 3274px

None von diesen Ergebnissen ist 4096px wie in dem Artikel beschrieben. Die Ergebnisse sind korrekt und ich kann damit arbeiten. Aber für mich ist es nur ein Workaround und auch wenn der ZoomLevel höher als ca. 13 ist, gibt die GetOffsetFromLocation-Methode -1 für pE.X und pW.X (für -90 und 90) zurück. Für nähere Längengrade zum eigentlichen Zentrum funktioniert es. Es scheint, dass GetOffsetFromLocation eine maximale Entfernung hat. Daher müsste ich bei einem höheren ZoomLevel nähere Längenwerte verwenden.

Das ist alles nicht wirklich eine klare Lösung. Meine Frage ist also: Gibt es eine Speichermethode, um die genaue Kartengröße für das UWP MapControl in Pixeln zu erhalten?

Vielen Dank!

Maas

Antwort

1

Der Artikel, den Sie wurde referenzieren Jahren geschrieben vor und ist die Basis auf der Karte Kachelsystem in allen von Bing Maps Kontrollen. Dies gilt jedoch für das Tiling-System und nicht unbedingt für die angezeigte Karte. Das UWP-Steuerelement ändert, wie es gerendert wird, um mit der Pixeldichte Ihres Bildschirms übereinzustimmen, damit es nett und klar ist. Aus diesem Grund sehen Sie bei Verwendung von GetOffsetFromLocation Diskrepanzen zwischen der erwarteten Kartenpixelgröße. Ich glaube, die UWP steuert die für Berechnungen verwendete Basispixeldichte auf 128. Das Surface Pro 3 hat eine Pixeldichte von 216,33. Mit ein wenig Mathe und unter Berücksichtigung der 1.5-Skalierung sehen wir also (128 * 1.5) /216.33 * 4096 = 3635, was viel näher an den Werten liegt, die Sie mit Ihrer Methode berechnen. In diesem Sinne würde ich schätzen, dass die Pixeldichte des externen Bildschirm ist 4096/3274 * 128 = 160.

Was:

map width = map height = 256 * 2^zoom; 

Auch das mit Doppel funktioniert. Das alte Bing Maps Silverlight-Steuerelement hat auch doppelte Zoomstufen ermöglicht, was bei Pixelberechnungen gut funktioniert.

+0

Ich werde ein bisschen herum damit spielen. Vielen Dank! Aber nein, mein Bildschirm hat eine Pixeldichte von 91. Von Windows.Graphics.Display.DisplayInformation.GetForCurrentView(): Oberflächenbildschirm -> LogicalDpi: 144 | RawDpi: 216 | Maßstab: 1.5 Externer Bildschirm -> LogicalDpi: 96 | RawDpi: 91 | Maßstab: 1.0 – Maas