Unterhalb des Schnitts - eine kurze Geschichte über Zoomstufen: Warum sie in der Standardform nicht für große Flächen geeignet sind und wie sich der Maßstab auf das Laden von Kacheln und das Erscheinungsbild der Karte auswirkt.
Zoomstufe
Um den Maßstab in der 2GIS WebGL-Karte anzugeben, wird wie in vielen anderen Karten eine Zahl verwendet - Zoomstufe oder nur Zoom. Ein Zoom von Null entspricht einem Kartenmaßstab, der die ganze Welt in ein Quadrat von 256 × 256 px einfügt.
Weltkarte bei Zoom = 0
Eine Erhöhung des Zooms um eins entspricht dem zweimaligen Strecken der Karte. Beim ersten Zoom beträgt die gesamte Welt 256 × 2 = 512 px. Am vierten erhalten wir die Größe 256 × 2 × 2 × 2 × 2 = 4096 px.
Mit diesem System können Sie eine Reihe von Skalen mit leicht verständlichen Zahlen festlegen. Beispiel: zoom = 11 ist ungefähr eine große Stadt auf dem Bildschirm. Mit zoom = 19 können Sie Gebäude und Passagen zwischen ihnen detailliert anzeigen.
Mercator-Projektion
2GIS-Karten verwenden die kartografische Projektion von Mercator. Eine kartografische Projektion ist eine Möglichkeit, eine sphärische Erdoberfläche auf einer flachen Karte anzuzeigen.
Da eine Ebene und eine Kugel nicht dasselbe sind, verzerrt jede kartografische Projektion die Form oder Größe von Objekten. In der Mercator-Projektion erscheinen Objekte in hohen Breiten auf der Karte größer als Objekte am Äquator. Daher sieht Grönland auf solchen Karten so groß aus wie Afrika, obwohl seine Fläche 14-mal kleiner ist als die von Afrika. Hier können Sie sehen, wie die Projektion die Größe der Länder verzerrt.
Wenn Russland näher an den Äquator gebracht wird, verringert sich seine Größe auf der Karte erheblich
Die Dehnung von Objekten ist proportional zu 1 / cos (lat), wobei lat der Breitengrad des Objekts ist. Aus dieser Formel folgt, dass Objekte auf dem Breitengrad von St. Petersburg (Lat = 60 °) auf der Karte zweimal gestreckt werden. Objekte am Nord- oder Südpol (lat = 90 °) dehnen sich unbegrenzt aus. Aus diesem Grund werden in der Mercator-Projektion niemals Pole auf Karten gezeichnet - alles nördlich und südlich von 85 ° Breite ist auf ihnen abgeschnitten. In diesem visuellen und faszinierenden Material
können Sie mehr über die Mercator-Projektion lesen .
Probleme mit Zoom und Mercator-Projektion
Das Hauptproblem bei Zooms ergibt sich aus den Eigenschaften der Mercator-Projektion: Dieselbe Zoomstufe in verschiedenen Breiten entspricht verschiedenen tatsächlichen Kartenmaßstäben.
Vergleichen wir Screenshots der Karte beim 14. Zoom in Murmansk (69 ° Breitengrad) und Taschkent (41 ° Breitengrad).
15. Zoom in Murmansk
15. Zoom in Taschkent Sie
können sehen, wie stark sich die Hausgröße unterscheidet. In Murmansk sind sie groß, in Taschkent ist die Karte flach.
Beim Stylen der Karte möchten wir ihr ein bestimmtes Erscheinungsbild verleihen. Dazu legen wir die Breite der Straßen in Pixel fest, abhängig vom Zoom oder dem Zoom, ab dem wir Häuser anzeigen. Stile, die für einen Breitengrad geschrieben wurden, sehen auf einem anderen sehr unterschiedlich aus. Die ihnen innewohnende Bedeutung wird verzerrt, da die Zooms eine andere tatsächliche Skala bedeuten.
Entscheidung
Um dieses Problem zu lösen, haben wir das Konzept von styleZoom eingeführt, das vom üblichen Zoom abweichen kann.
| Normaler Zoom | StyleZoom |
| Definiert die Skalierung von Objekten | Legt fest, welche Kacheln geladen werden sollen |
| Geschrieben in URL | Legt fest, auf welche Skala Stile angewendet werden sollen |
| Wird in den bekannten Methoden getZoom / setZoom verwendet | Wird in den Methoden getStyleZoom / setStyleZoom verwendet |
| Passt zu Bitmap-Kacheln |
styleZoom wird aus Zoom und Breitengrad nach der folgenden Formel berechnet: styleZoom = zoom + log2 (1 / (2 * cos (lat)).
Die folgenden styleZoom-Eigenschaften ergeben sich aus der Formel:
- Bei 60 ° Breite styleZoom = Zoom. Da die Stile ursprünglich für Nowosibirsk und Moskau geschrieben wurden, haben wir uns entschlossen, diesen Spielraum als Basis zu nehmen.
- Bei Breiten <60 ° styleZoom <zoom. Am Äquator ist styleZoom = zoom - 1.
- Bei Breiten> 60 ° styleZoom> zoom.
Nun wollen wir sehen, wie Taschkent und Murmansk mit styleZoom = 15 aussehen werden.
Taschkent, styleZoom = 15 (Zoom ≈ 15,59)
Murmansk, styleZoom = 15 (Zoom ≈ 14,53)
Es ist deutlich zu sehen, dass styleZoom unabhängig vom Breitengrad dem tatsächlichen Maßstab der Karte entspricht: visuell zu Hause unterscheiden sich nicht in der Größe, die Karte sieht in zwei verschiedenen Städten gleich aus.
Einschränkungen
Der Korrekturmechanismus weist Nachteile auf, die in zwei Szenarien für die Arbeit mit der Karte auftreten.
zoom <9
Bei kleinen Zooms führt das Ziehen der Karte nach oben und unten zu großen Änderungen des Breitengrads und dementsprechend zu styleZoom, wenn die gesamte Welt oder der größte Teil davon auf dem Bildschirm sichtbar ist.
Beim Ziehen und Ablegen kann dies dazu führen, dass neue Kacheln geladen, Stile gewechselt, Objekte angezeigt oder ausgeblendet werden usw. Um diesen Effekt zu vermeiden, ist bei Zoom <9 die Korrektur deaktiviert und styleZoom auf Zoom eingestellt.
lat> 60 °
In sehr hohen Breiten wird styleZoom viel größer. Da styleZoom für das Laden der Kacheln verantwortlich ist, kann sich beispielsweise herausstellen, dass beim 14. Zoom die Kacheln des 16. Zooms geladen und angezeigt werden. Die 16. Zoomkachel ist 16-mal kleiner als die 14. Zoomkachel. Und wenn normalerweise 30 Kacheln auf den Bildschirm fallen, sind es in diesem Fall 480. Und die Anzahl der Kacheln wirkt sich stark auf die Leistung aus. Um die Grafikkarte nicht in diesen Breiten zu laden, ist die Korrektur bei Lat> 60 ° deaktiviert und styleZoom ist ebenfalls auf Zoom eingestellt.
Anstelle von Ausgabe
Verbinden Sie die API unserer WebGL-Karten und entwerfen Sie Karten für die Aufgaben Ihres Dienstes, ohne sich Gedanken darüber zu machen, wie sie in verschiedenen Städten aussehen werden.
Besonderer Dank geht an Lesha Fedosov für den Beitrag. Lyokha, hallo!