Karten- und Kachelkoordinaten

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Plattform auswählen: Android iOS JavaScript

Im Maps SDK for Android werden die folgenden Koordinatensysteme verwendet:

  • Längen- und Breitenwerte, die auf einen eindeutigen Punkt der Welt verweisen. Google verwendet den Standard World Geodetic System WGS84.
  • Weltkoordinaten, die auf einen eindeutigen Punkt der Karte verweisen.
  • Pixelkoordinaten, die auf ein bestimmtes Pixel auf der Karte bei einem bestimmten Zoomfaktor verweisen.
  • Kachelkoordinaten, die auf eine bestimmte Kachel auf der Karte bei einem bestimmten Zoomfaktor verweisen.

Weltkoordinaten

Wenn die API einen Standort auf der Welt in einen Standort auf einer Karte umwandeln muss, rechnet sie zuerst die Längen- und Breitengradwerte in Weltkoordinaten um. Dabei kommt die Mercator-Projektion zum Einsatz.

Um die Berechnung der Pixelkoordinaten zu vereinfachen (siehe unten), gehen wir davon aus, dass eine Karte bei Zoomfaktor 0 eine einzelne Kachel mit der Größe der Basiskachel ist. Dann definieren wir Weltkoordinaten in Bezug auf Pixelkoordinaten bei Zoomfaktor 0, indem wir basierend auf der Projektion die Breitengrade und Längengrade in Pixelpositionen auf dieser Basiskachel konvertieren. Diese Weltkoordinaten sind Gleitkommawerte, gemessen zwischen dem Ursprung der Kartenprojektion und dem betreffenden Standort. Da es sich um Gleitkommawerte handelt, sind sie möglicherweise wesentlich genauer als die aktuelle Auflösung des angezeigten Kartenbildes. Mit anderen Worten sind Weltkoordinaten also unabhängig vom aktuellen Zoomfaktor.

Die Weltkoordinaten in Google Maps werden vom Ursprung der Mercator-Projektion aus gemessen, das heißt von der nordwestlichen Ecke der Karte bei 180 Grad Länge und ungefähr 85 Grad Breite. Die Werte der Weltkoordinaten nehmen auf der x-Achse in Richtung Osten (nach rechts hin) und auf der y-Achse in Richtung Süden (nach unten hin) zu. Da die Mercator-Basiskachel in Google Maps 256 × 256 Pixel hat, entspricht der nutzbare Weltkoordinatenraum {0-256}, {0-256}.

Beachten Sie, dass eine Mercator-Projektion eine begrenzte Breite nach Längengraden hat, aber eine unbegrenzte Höhe nach Breitengraden. Wir haben die Darstellung der Basiskarte unter Verwendung der Mercator-Projektion bei ca. +/− 85 Grad abgeschnitten, damit sich eine rechteckige Kartenform ergibt und die Kachelauswahl einfacher programmiert werden kann. Beachten Sie, dass bei einer Projektion Koordinaten erzeugt werden können, die außerhalb des nutzbaren Koordinatenraums der Basiskarte liegen, beispielsweise bei Punkten, die sich sehr nahe an den Polen befinden.

Pixelkoordinaten

Pixelkoordinaten verweisen bei einem speziellen Zoomfaktor auf ein bestimmtes Pixel auf der Karte. Weltkoordinaten spiegeln bei einer gegebenen Projektion absolute Standorte wider. Pixelkoordinaten werden mit der folgenden Formel berechnet:

pixelCoordinate = worldCoordinate * 2zoomLevel

Beachten Sie bei der obigen Gleichung, dass mit jedem höheren Zoomfaktor eine Verdoppelung der Größe sowohl in x- als auch in y-Richtung bewirkt wird. Somit enthält jeder höhere Zoomfaktor eine viermal so hohe Auflösung wie der vorherige. Zum Beispiel besteht die Karte bei Zoomfaktor 1 aus 4 Kacheln mit je 256 × 256 Pixeln, was einen Pixelraum der Größe 512 × 512 ergibt. Bei Zoomfaktor 19 kann jedes x- und y-Pixel auf der Karte anhand eines Werts zwischen 0 und 256 × 219 bezeichnet werden.

Da wir die Weltkoordinaten von der Kachelgröße der Karte abhängig gemacht haben, lässt sich anhand des ganzzahligen Teils einer Pixelkoordinate genau das Pixel des Standorts beim aktuellen Zoomfaktor bestimmen. Beachten Sie, dass bei Zoomfaktor 0 die Pixelkoordinaten mit den Weltkoordinaten übereinstimmen.

Mit dieser Methode kann jetzt jeder Standort auf der Karte bei jedem Zoomfaktor genau bezeichnet werden. Das Google Maps SDK for Android konstruiert einen Darstellungsbereich basierend auf dem Zoomfaktormittelpunkt der Karte (als LatLng-Wert) sowie der Größe des beinhaltenden DOM-Elements und wandelt diesen Begrenzungsrahmen in Pixelkoordinaten um. Dann ermittelt die API logisch alle Kartenkacheln, die innerhalb der gegebenen Pixelgrenzen liegen. Jede dieser Kartenkacheln wird mithilfe von Kachelkoordinaten bezeichnet, durch die die Anzeige von Kartenbildern wesentlich vereinfacht wird.

Kachelkoordinaten

Bei höheren Zoomfaktoren kann die API nicht alle Kartenbilder auf einmal laden. Stattdessen unterteilt sie die Bilder bei jedem Zoomfaktor in einen Satz logisch angeordneter Kartenkacheln, der von der Anwendung verstanden wird. Wenn eine Karte zu einem neuen Standort bewegt oder ein neuer Zoomfaktor für sie eingestellt wird, ermittelt die API die benötigten Kacheln mithilfe von Pixelkoordinaten und wandelt diese Werte in einen abzurufenden Kachelsatz um. Die Zuweisung dieser Kachelkoordinaten erfolgt nach einem Schema, mit dem sich logisch einfach ermitteln lässt, welche Kachel das Bild für einen gegebenen Punkt enthält.

Die Kacheln in Google Maps werden ausgehend vom gleichen Ursprung nummeriert, der auch für die Pixel verwendet wird. Bei der Implementierung der Mercator-Projektion in Google befindet sich die Ursprungskachel immer in der nordwestlichen Ecke der Karte. Die x-Werte nehmen von Westen nach Osten und die y-Werte von Norden nach Süden zu. Kacheln werden mithilfe von x,y-Koordinaten aus diesem Ursprung indexiert. Zum Beispiel kann bei Zoomfaktor 2, wenn die Erde in 16 Kacheln aufgeteilt ist, jede einzelne Kachel durch ein eindeutiges x,y-Paar bezeichnet werden:

Wenn Sie die Pixelkoordinaten durch die Kachelgröße (256) teilen und das Ergebnis auf den ganzzahligen Teil reduzieren, erhalten Sie als Nebenprodukt die Kachelkoordinate beim aktuellen Zoomfaktor.

Beispiel

Im folgenden Beispiel werden Koordinaten für Chicago dargestellt: Breiten- und Längengradwerte, Weltkoordinaten, Pixelkoordinaten und Kachelkoordinaten. Mit der Zoomsteuerung lassen sich die Koordinatenwerte bei verschiedenen Zoomfaktoren anzeigen.

Wie die Koordinaten berechnet wurden, sehen Sie im Code.