Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:35_maps:m_webtiles_intern

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

de:35_maps:m_webtiles_intern [2017/01/22 15:57] (aktuell)
Zeile 1: Zeile 1:
 +====== Webtiles intern ======
  
 +<ifauth @user>​FIXME
 +\\ Inhalt:
 +\\ Symbole:
 +\\ Bildschirmfotos:​
 +\\ Formatierung:​ LOUDINI, etwas angepßt
 +\\ Korrekturgelesen:​ ok - bernd
 +\\ QV7
 +</​ifauth>​
 +
 +===== Kachelschema und Koordinatensysteme für Google Maps und OSM =====
 +Um das System der Online-Karten mit deren Kachelung zu verstehen, muss man sich ein wenig einlesen - beispielsweise hier:\\
 +[[https://​developers.google.com/​maps/​documentation/​javascript/​maptypes#​MapCoordinates]]\\
 +\\
 +
 +==== 1. Teil - Kacheln ====
 +Zunächst mal wird die Erde per sphärischer Mercator-Projektion plattgedrückt. Dann werden hohe geografische Breiten (so etwa ab 85° Nord bzw. Süd) abgeschnitten. Über das entstandene Quadrat wird eine Kachel gelegt, die 256 Pixel breit und 256 Pixel hoch ist. Diese Kachel umfasst (abgesehen von den Polen) die gesamte Erde. Adressiert werden die Pixel innerhalb dieser Kachel von der oberen linken Ecke aus.\\ ​
 +Hier habt Ihr ein Bild davon:\\
 +{{:​images:​pixelcoordinates.png}}\\
 +
 +Diese Pixel bieten natürlich eine sehr grobe Auflösung der Erde; am Äquator ist ein Pixel ~156 km lang.
 +Und das ist exakt die **0. Zoomstufe** des Google-/​OSM-Systems. Die Kachel hat die Adresse (0,0).\\
 +\\
 +Um mehr Details zu bekommen, geht man in die nächste - erste - Zoomstufe. Das geschieht dadurch, dass man die Kachel viertelt. Aus der einen Kachel entstehen horizontal und vertikal jeweils 2 Kacheln - wieder jeweils der Größe 256 x 256 Pixel. Die gesamte Erde wird jetzt mit 512 x 512 Pixel abgebildet. Somit umfasst ein Pixel am Äquator ~78 km. \\
 +Das Adressschema der Kacheln sieht so aus:\\
 +|linke obere Kachel --> (0,​0)|rechte obere Kachel --> (1,0)|
 +|linke untere Kachel --> (0,​1)|rechte untere Kachel --> (1,1)|
 +\\
 +Für die nächste Verfeinerungsstufe - Zoomlevel 2 - wird jede Kachel der Zoomstufe 1 wieder geviertelt.\\
 +Das Ergebnis schaut so aus:\\
 +
 +{{:​images:​tileCoordinates.png}}\\
 +
 +Mit jeder weiteren Zoomstufe werden die Kacheln gemäß dem obigen Schema weiter verfeinert. An einigen Orten der Erde (z.B. am Bondi Beach) kommt man bei Google bis zur Zoomstufe 23. Ein Pixel ist hier 0.019 m lang.\\
 +\\
 +Dieses Adressschema der Kacheln findet man auf dem jeweiligen Kartenserver wieder.\\
 +\\
 +Die Adresse einer OSM-Kachel wird prinzipiell so berechnet:​\\
 +- Wahl der Basisadresse. Bei OSM ist das z.B. [[http://​tile.openstreetmap.org/​]]\\
 +- Angabe der Zoomstufe, gefolgt von einem "/"​\\
 +- Angabe des x-Index der Kachel, gefolgt von einem "/"​\\
 +- Angabe des y-Index der Kachel, gefolgt von einem "​.png"​.\\
 +\\
 +Bei der Zoomstufe 0 gibt es ja nur eine Kachel:\\
 +|[[http://​tile.openstreetmap.org/​0/​0/​0.png]]|\\
 +\\
 +{{:​images:​000.png}}\\
 +\\
 +Zoomstufe 1 (4 Kacheln):\\
 +|[[http://​tile.openstreetmap.org/​1/​0/​0.png]]|[[http://​tile.openstreetmap.org/​1/​1/​0.png]]|\\
 +|[[http://​tile.openstreetmap.org/​1/​0/​1.png]]|[[http://​tile.openstreetmap.org/​1/​1/​1.png]]|\\
 +
 +{{:​images:​100.png}}{{:​images:​110.png}}\\
 +{{:​images:​101.png}}{{:​images:​111.png}}\\
 +\\
 +Zoomstufe 2 (16 Kacheln):\\
 +|[[http://​tile.openstreetmap.org/​2/​0/​0.png]]|[[http://​tile.openstreetmap.org/​2/​1/​0.png]]|[[http://​tile.openstreetmap.org/​2/​2/​0.png]]|[[http://​tile.openstreetmap.org/​2/​3/​0.png]]|
 +|[[http://​tile.openstreetmap.org/​2/​0/​1.png]]|[[http://​tile.openstreetmap.org/​2/​1/​1.png]]|[[http://​tile.openstreetmap.org/​2/​2/​1.png]]|[[http://​tile.openstreetmap.org/​2/​3/​1.png]]|
 +|[[http://​tile.openstreetmap.org/​2/​0/​2.png]]|[[http://​tile.openstreetmap.org/​2/​1/​2.png]]|[[http://​tile.openstreetmap.org/​2/​2/​2.png]]|[[http://​tile.openstreetmap.org/​2/​3/​2.png]]|
 +|[[http://​tile.openstreetmap.org/​2/​0/​3.png]]|[[http://​tile.openstreetmap.org/​2/​1/​3.png]]|[[http://​tile.openstreetmap.org/​2/​2/​3.png]]|[[http://​tile.openstreetmap.org/​2/​3/​3.png]]|
 +
 +\\
 +{{:​images:​200.png}}{{:​images:​210.png}}{{:​images:​220.png}}{{:​images:​230.png}}\\
 +{{:​images:​201.png}}{{:​images:​211.png}}{{:​images:​221.png}}{{:​images:​231.png}}\\
 +{{:​images:​202.png}}{{:​images:​212.png}}{{:​images:​222.png}}{{:​images:​232.png}}\\
 +{{:​images:​203.png}}{{:​images:​213.png}}{{:​images:​223.png}}{{:​images:​233.png}}\\
 +\\
 +Bei Google sieht die Kacheladresse leicht anders aus, das Adressschema selbst ist aber gleich:\\
 +[[https://​mt1.google.com/​vt/​lyrs=m@129&​hl=en&​z=0&​x=0&​y=0]]\\
 +\\
 +Die Bing-Karten von Microsoft verwenden ein ähnliches Schema, wobei aber die 3 Parameter Zoom, x-Index und y-Index zu einer Zahl - dem sog. Quadkey - kombiniert werden.\\ Näheres dazu findet man auf der sehr hilfreichen Infoseite von MS:\\
 +[[http://​msdn.microsoft.com/​en-us/​library/​bb259689.aspx|Bing Maps Tile System]]
 +\\
 +\\
 +
 +==== 2. Teil - Georeferenzierung ====
 +Jetzt stellt sich die Frage, wie man denn diese Kacheln kalibriert bzw. georeferenziert.\\
 +Einfache Antwort: gar nicht!\\
 +Die Angabe der 3 beschriebenen Parameter Zoomstufe, x-Index und y-Index einer Kachel führt unmittelbar zur Georeferenzierung dieser Kachel.\\
 +Diesem System hinterlegt sind nämlich 3 äußerst pfiffige Koordinatensysteme,​ die aufeinander aufbauen:\\
 +\\
 +**1. Weltkoordinaten**\\
 +Aufbauend auf einer sphärischen Mercatorprojektion und dem WGS84-Bezugssystem wird zunächst der Nullpunkt festgelegt. Dieser Nullpunkt liegt bei der geografischen Länge 180° und der geografischen Breite +85.05112878° (= arctan(sinh(Pi))) und ist __identisch__ mit der linken oberen Kachelecke der Zoomstufe 0. Das Koordinatensystem selbst hat die gleichen Zahlenwerte wie die **Pixel**-Indizes dieser Kachel der Zoomstufe 0. Der Wertebereich beträgt also für x und y jeweils {0;256}. Das rechte untere Ende der Kachel (Zoomstufe 0!) hat daher die Koordinate (256,​256).\\
 +(Man mag darüber verwirrt sein, dass die Zählung nicht bis 255 geht, aber gemeint ist hier die rechte untere Ecke des __Pixels__, das in der rechten unteren Ecke der Kachel liegt. Und die hat eben die Koordinate (256,​256).)\\
 +Mit diesem Koordinatensystem können (abgesehen von den Polgebieten) sämtliche Positionen auf der Erde beschrieben werden. Je detaillierter die Position angegeben wird, desto mehr Nachkommastellen braucht man halt.\\
 +Dieses Weltkoordinaten-System hängt **nicht** von der Zoomstufe ab und hat daher bei allen Zoomstufen den gleichen Wertebereich. D.h. eine Position auf der Erde hat eine Weltkoordinate,​ die bei allen Zoomstufen gleich ist.\\
 +\\
 +**2. Pixelkoordinaten**\\
 +Die Wahl der jeweils nächsthöheren Zoomstufe bedeutet eine Verdopplung der Pixelzahl in x und in y. Waren es bei Zoomstufe 0 noch 256 x 256 Pixel, so sind es bei der Zoomstufe 1 bereits 512 x 512 Pixel und bei der Zoomstufe 2 bereits 1024 x 1024 Pixel.\\
 +Allgemein berechnet sich die Pixelzahl in x und in y zu jeweils ''​(1 << Zoomstufe)''​.\\
 +Bei der Zoomstufe 23 wird die Erde beschrieben durch 2.147.483.648 x 2.147.483.648 Pixel.\\
 +\\
 +Hier sind die Pixelauflösungen für jede Zoomstufe (Äquator):​\\
 +''​Zoomstufe 0 --> 40.000.000 m = 256 Pixel --> 156250 m/px\\
 +Zoomstufe 1 --> 20.000.000 m = 256 Pixel --> 78125 m/px\\
 +Zoomstufe 2 --> 10.000.000 m = 256 Pixel --> 39063 m/px\\
 +Zoomstufe 3 --> 5.000.000 m = 256 Pixel --> 19531 m/px\\
 +Zoomstufe 4 --> 2.500.000 m = 256 Pixel --> 9766 m/px\\
 +Zoomstufe 5 --> 1.250.000 m = 256 Pixel --> 4883 m/px\\
 +Zoomstufe 6 --> 625.000 m = 256 Pixel --> 2441 m/px\\
 +Zoomstufe 7 --> 312.500 m = 256 Pixel --> 1221 m/px\\
 +Zoomstufe 8 --> 156.250 m = 256 Pixel --> 610.4 m/px\\
 +Zoomstufe 9 --> 78.125 m = 256 Pixel --> 305.2 m/px\\
 +Zoomstufe 10 --> 39.063 m = 256 Pixel --> 152.6 m/px\\
 +Zoomstufe 11 --> 19.531 m = 256 Pixel --> 76.29 m/px\\
 +Zoomstufe 12 --> 9.766 m = 256 Pixel --> 38.15 m/px\\
 +Zoomstufe 13 --> 4.883 m = 256 Pixel --> 19.07 m/px\\
 +Zoomstufe 14 --> 2.441 m = 256 Pixel --> 9.54 m/px\\
 +Zoomstufe 15 --> 1.221 m = 256 Pixel --> 4.77 m/px\\
 +Zoomstufe 16 --> 610 m = 256 Pixel --> 2.38 m/px\\
 +Zoomstufe 17 --> 305 m = 256 Pixel --> 1.19 m/px\\
 +Zoomstufe 18 --> 153 m = 256 Pixel --> 0.60 m/px\\
 +Zoomstufe 19 --> 76.3 m = 256 Pixel --> 0.30 m/px\\
 +Zoomstufe 20 --> 38.1 m = 256 Pixel --> 0.15 m/px\\
 +Zoomstufe 21 --> 19.1 m = 256 Pixel --> 0.075 m/px\\
 +Zoomstufe 22 --> 9.54 m = 256 Pixel --> 0.037 m/px\\
 +Zoomstufe 23 --> 4.77 m = 256 Pixel --> 0.019 m/​px''​\\
 +\\
 +Die Pixelkoordinaten selbst spiegeln diesen Zusammenhang wider:\\
 +**Pixelkoordinate = Weltkoordinate * 2^Zoomstufe**\\
 +Damit kann jedes einzelne Pixel adressiert werden.\\
 +\\
 +**3. Kachelkoordinaten**\\
 +Wie wir bereits wissen, besteht jede Kachel aus 256 x 256 Pixel.\\
 +Wenn wir also die Pixelkoordinate eines Punktes auf der Erde bei einer Zoomstufe kennen, können wir sofort ausrechnen, in welcher Kachel dieser Zoomstufe dieses Pixel liegt - also welche Kachel wir vom Server laden müssen. Und das geht ganz trivial:\\
 +**Kachelkoordinate = Pixelkoordinate / 256**\\
 +Die Nachkommastellen werden bei dieser Operation gestrichen.\\
 +Diese Berechnung führt man jeweils für x und y für die gewünschte Zoomstufe z durch 
 +und erhält als OSM-Kacheladresse http://​tile.openstreetmap.org/​z/​x/​y.png.\\
 +\\
 +==== 3. Teil - Koordinatenberechnungen ====
 +Im Folgenden berechnen wir aus einer "​normalen"​ Koordinate die Weltkoordinate und ermitteln daraus die zugehörige Kachel für die gewünschte Zoomstufe.\\
 +Nehmen wir als Beispiel das Brandenburger Tor. Mit QV ermittle ich die Koordinate im geografischen Koordinatensystem (WGS84) von ''​13,​37772° Ost, 52,51626° Nord''​.\\
 +\\
 +Den Rechtswert (= RW) der Weltkoordinate kann man ganz leicht ermitteln. Die Erde hat ja bekanntlich 360 Längengrade. Der Rechtswert im Weltkoordinatensystem wiederum hat einen Wertebereich zwischen 0 und 256. Deshalb kann man die geografische Länge einfach mit dem Faktor 256/360 runterskalieren. Da aber das Weltkoordinatensystem seinen Nullpunkt bei der geografischen Länge 180° hat, muss man noch eine Verschiebung um den Wert 128 durchführen. Das heißt also:\\
 +''​RW = geogr. Länge*256/​360 + 128''​\\
 +\\
 +Der Hochwert (= HW) der Weltkoordinate ist wegen der Projektion ein klein wenig komplizierter zu berechnen:​\\
 +''​HW = -ln( (1+sin(geogr. Breite))/​(1-sin(geogr. Breite))) * 64/Pi + 128\\
 +ln: natürlicher Logarithmus''​\\
 +\\
 +Setzen wir die Koordinate des Brandenburger Tors in beide Gleichungen ein, so erhalten wir:\\
 +''​RW = 137,​513045\\
 +HW = 83,​960892''​\\
 +\\
 +Jetzt berechnen wir die Pixelkoordinaten für die Zoomstufen 12, 16 und 18.\\
 +''​Pixelkoordinate = Weltkoordinate * 2^Zoomstufe''​\\
 +Zoomstufe 12:\\
 +''​PixelX = RW * 2^Zoomstufe = 563.253\\
 +PixelY = HW * 2^Zoomstufe = 343.903''​\\
 +Zoomstufe 16:\\
 +''​PixelX = RW * 2^Zoomstufe = 9.012.054\\
 +PixelY = HW * 2^Zoomstufe = 5.502.461''​\\
 +Zoomstufe 18:\\
 +''​PixelX = RW * 2^Zoomstufe = 36.048.219\\
 +PixelY = HW * 2^Zoomstufe = 22.009.844''​\\
 +\\
 +Und schließlich berechnen wir die Kachel, in der das Brandenburger Tor liegt.\\
 +''​Kachelkoordinate = Pixelkoordinate / 256''​\\
 +Zoomstufe 12:\\
 +''​KachelX = PixelX / 256 = 2.200\\
 +KachelY = PixelY / 256 = 1.343''​\\
 +Die Kachel findet man unter der Zoomstufe 12 bei OSM also unter der Adresse [[http://​tile.openstreetmap.org/​12/​2200/​1343.png]]\\
 +{{:​images:​12-2200-1343.png}}\\
 +\\
 +Zoomstufe 16:\\
 +''​KachelX = PixelX / 256 = 35.203\\
 +KachelY = PixelY / 256 = 21.493''​\\
 +Die Kachel findet man unter der Zoomstufe 16 bei OSM also unter der Adresse [[http://​tile.openstreetmap.org/​16/​35203/​21493.png]]\\
 +{{:​images:​16-35203-21493.png}}\\
 +\\
 +Zoomstufe 18:\\
 +''​KachelX = PixelX / 256 = 140.813\\
 +KachelY = PixelY / 256 = 85.975''​\\
 +Die Kachel findet man unter der Zoomstufe 18 bei OSM also unter der Adresse [[http://​tile.openstreetmap.org/​18/​140813/​85975.png]]\\
 +{{:​images:​18-140813-85975.png}}\\
 +\\
 +==== 4. Teil - QMZ-Export ====
 +Beim QMZ-Export wird der gewählte Exportausschnitt der gewünschten Karte (egal ob diese von einem Kachelserver stammt oder eine interne Topo ist) so in Kacheln verwurstet, dass diese exakt in das oben beschriebene Kachelschema passen. Dazu muss diese aber in passender Projektion vorliegen. Deshalb muss man bei inkompatiblen Karten eine OSM-artige Karte als Primärkarte (unsichtbar) öffnen und die eigentliche Exportkarte als Sekundärkarte drüber laden (= draufprojizieren).\\
 +\\
 +In dem beigefügten Beispiel wird die Wanderreitkarte mit der Zoomstufe 16 angezeigt. Das ist an dem unten rechts angezeigten Parameter "​I=16"​ (hier blau eingerahmt) zu erkennen. Entsprechend der Bildschirmbreite meines PC von 530 mm entspricht die Darstellung dem Maßstab ''​1:​8.100''​.\\
 +Genau dieser Maßstab wird hier beim QMZ-Export verwendet, wenn man im Export-Dialog auf den Button "​Map"​ klickt:\\
 +\\
 +{{:​de:​35_maps:​qmz4.jpg?​500}}\\
 +\\
 +Deshalb wird als höchste Zoomstufe auch "​16"​ gewählt - genau wie bei der Kartenanzeige.\\
 +Damit man etwas rauszoomen kann, werden hier auch für die Zoomstufen "​15"​ und "​14"​ Kachelexporte durchgeführt.\\
 +\\
 +Jetzt kommt eine Besonderheit zum Tragen, die es bei den Internet-Kacheln nicht gibt: Die Kartenanzeige in QV endet am Bildschirmrand normalerweise nie an einem Kachelrand; solche Kacheln werden daher in der Anzeige abgeschnitten. Der angezeigte Kartenausschnitt wird aber entsprechend der Anzeigegrenzen exportiert. Daher sind die exportierten Kacheln an den Kartenrändern meist nicht komplett ausgefüllt. Der Bereich außerhalb des Anzeigerands ist weiß.\\
 +\\
 +Die exportierte Karte ist nichts anderes als ein Container für Kacheln der Größe 256 x 256, die gemäß der obigen Beschreibung von Webkacheln erzeugt wurden. Dieser Container ist ein ZIP-Archiv, dessen Endung in "​.qmz"​ umbenannt wurde, damit die mobile App QVM direkt darauf zugreifen kann. Wenn man die Endung wieder auf "​.zip"​ umbenennt, kann man die Struktur erkennen.\\
 +\\
 +Wie man in den folgenden Screenshots sieht, wird ein Basisordner ''"​Lossburg"''​ für die Kacheln erzeugt, der mit dem vergebenen QMZ-Namen ''"​Lossburg"''​ übereinstimmt.\\
 +Innerhalb dieses Basisordners liegt zunächst die Datei ''"​webtileinfo.xml"'',​ die alle Parameter enthält, die QVM zur Kartenanzeige braucht. Außerdem findet man hier die Ordner "​14",​ "​15"​ und "​16",​ in denen die Kacheln der jeweiligen Zoomstufe in dem oben beschriebenen Schema liegen.\\
 +\\
 +{{:​images:​qmz6.jpg?​700}}
 +\\
 +{{:​images:​qmz7.jpg?​700}}
de/35_maps/m_webtiles_intern.txt · Zuletzt geändert: 2017/01/22 15:57 (Externe Bearbeitung)