You are not logged in.
- Topics: Active | Unanswered
Announcement
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***
#1 2012-08-01 11:42:25
- Martin Steen
- Member
- Registered: 2012-08-01
- Posts: 9
Problem beim Ermitteln von Längengrad/Breitengrad für Segmente
Hallo,
ich arbeite an einem 3D-Programm zur Darstellung von Satellitendaten und Karten
für den Schulbereich. Das Programm heißt "Diercke Globus" (Screenshot:)

Jetzt möchten wir gerne OpenStreet-Daten darstellen. Das funktioniert auch super,
die Position der Tiles stimmen exakt mit den Satellitendaten überein - jedenfalls bei großer
Zoomstufe:

Einen kleinen Schönheitsfehler gibt es aber: im globalen Maßstab (kleine Zoom-Stufe) zeigt sich eine
deutliche Verschiebung, wie man hier am Beispiel der Falkland-Inseln gut sehen kann:

Der helle Bereich ist die OSM-Grafik, die halbtransparent über dem Satellitenbild liegt.
Die Abweichung tritt auf dem gesammten Globus auf, wobei die OSM-Tiles auf der Nordhalbkugel
nach unten und auf der Südhalbkugel nach oben verschoben sind.
Die Formel zum Umrechnen von Tiles in Breitengrad/Längengrad sieht so aus:
void TileNumberToLongLati(int zoom, int xtile, int ytile, double& Long, double& Lati)
{
double n = pow(2.0, zoom);
Long = DEG_TO_RAD((double(xtile) / n * 360.0) - 180.0);;
Lati = atan(sinh(M_PI * (1.0 - (2.0 * ytile / n))));
}
(Ergebnisse in Radians)
Da die Berechnung für hohe Zoomstufen sehr exakt funktioniert, weiß ich nicht, warum sie
für niedrige Zoomstufen so viel abweicht. Vielleicht hat ja jemand einen Tipp für mich.
Viele Grüße
Martin
Last edited by Martin Steen (2012-08-01 11:47:29)
Offline
#2 2012-08-01 12:45:18
- stephan75
- Member
- Registered: 2008-05-28
- Posts: 2,918
Re: Problem beim Ermitteln von Längengrad/Breitengrad für Segmente
Zwar keien direkte Lösung, aber:
http://wiki.openstreetmap.org/wiki/KDE_Marble kann auch OSM-Kacheln auf einem Globus darstellen.
und das Programm ist opensource ... weiß nicht ob man da die Stelle im Sourcecode finden kann, die deiner Berechnung entspricht.
Offline
#3 2012-08-01 13:34:51
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Problem beim Ermitteln von Längengrad/Breitengrad für Segmente
Kann es sein, dass Deine Formel nur die "äquatornäheren" Kanten der Kacheln ausgibt? Je größer der Maßstab, desto mehr macht sich bemerkbar, dass auch innerhalb der Kacheln die Abbildung verschoben ist.
Im Zoomlevel 2 geht die erste nördlich gelegene Kachel auch nicht von 0° bis 45°, sondern im Norden bis irgendwo bei 60°. Wenn man die Abbildung innerhalb der Kachel nicht berücksichtigt, landet Helsinki im Mittelmeer...
Grüße, Max
Offline
#4 2012-08-01 14:39:45
- Martin Steen
- Member
- Registered: 2012-08-01
- Posts: 9
Re: Problem beim Ermitteln von Längengrad/Breitengrad für Segmente
Kann es sein, dass Deine Formel nur die "äquatornäheren" Kanten der Kacheln ausgibt? Je größer der Maßstab, desto mehr macht sich bemerkbar, dass auch innerhalb der Kacheln die Abbildung verschoben ist.
Im Zoomlevel 2 geht die erste nördlich gelegene Kachel auch nicht von 0° bis 45°, sondern im Norden bis irgendwo bei 60°. Wenn man die Abbildung innerhalb der Kachel nicht berücksichtigt, landet Helsinki im Mittelmeer...
Grüße, Max
Du hast wahrscheinlich recht. Die Formel stimmt schon. Allerdings berechne ich nur die Eck-Koordinaten der Tiles. Innerhalb der Tiles ist die Grafik aber
ebenfalls projeziert. Danke für den Tipp, mal sehen, was ich da tun kann.
Offline
#5 2012-08-02 12:13:37
- Martin Steen
- Member
- Registered: 2012-08-01
- Posts: 9
Re: Problem beim Ermitteln von Längengrad/Breitengrad für Segmente
Ich konnte das Problem lösen!
Danke für eure Hilfe.
Das Problem besteht tatsächlich darin, dass die Segmente (oder Tiles) in der sogenannten "Spherical Mercator"-Projektion vorliegen.
Wenn man jetzt für ein Segment die Eck-Koordinaten als Längen/Breitengrad ermittelt und dieses Segment dann in einer
geografischen Projektion auf die Erdkugel projeziert, kommt es innerhalb des Segments zu Verzerrungen. Diese fallen aber
nur bei sehr großen Segmenten auf, da hier die Krümmung sehr groß ist.
Die Lösung besteht darin, die Projektion auch innerhalb des Segments zu berücksichtigen.
Die Formel für die Umrechnung des Breitengrades in die Spherical Mercator-Koordinate ist (in C, Winkel in Radians):
double lat2y(double a) { return log(tan(M_PI/4+a/2)); }Zum Schluss noch ein Bild von der korrekten Projektion:

Last edited by Martin Steen (2012-08-02 12:16:48)
Offline
#6 2012-08-02 12:15:36
- Martin Steen
- Member
- Registered: 2012-08-01
- Posts: 9
Re: Problem beim Ermitteln von Längengrad/Breitengrad für Segmente
Zwar keien direkte Lösung, aber:
http://wiki.openstreetmap.org/wiki/KDE_Marble kann auch OSM-Kacheln auf einem Globus darstellen.
und das Programm ist opensource ... weiß nicht ob man da die Stelle im Sourcecode finden kann, die deiner Berechnung entspricht.
Ich habe mir das Programm angesehen. Allerdings verwendet es einen Software-Renderer und verfolgt damit einen völlig anderen
Ansatz als unser Projekt, welches auf OpenGL basiert.
Viele Grüße
Martin
Offline
#7 2012-08-02 12:21:04
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Problem beim Ermitteln von Längengrad/Breitengrad für Segmente
Ich konnte das Problem lösen!
Schön, dann bekommen die Schüler auch mal was hübsches zu sehen... Und wir auch, ich finde diese Abbildung auf dem Globus macht schon was her.
Grüße, Max
Offline
#8 2012-08-02 12:31:36
- wambacher
- Member

- From: Schlangenbad/Wambach, Germany
- Registered: 2009-12-16
- Posts: 16,769
- Website
Re: Problem beim Ermitteln von Längengrad/Breitengrad für Segmente
Schön, dann bekommen die Schüler auch mal was hübsches zu sehen... Und wir auch, ich finde diese Abbildung auf dem Globus macht schon was her.
erst, wenn er sich dreht
duck&weg
walter
Offline
#9 2012-08-02 13:05:25
- Tordanik
- Moderator

- From: Germany
- Registered: 2008-06-17
- Posts: 2,840
- Website
Re: Problem beim Ermitteln von Längengrad/Breitengrad für Segmente
Ich habe mir das Programm angesehen. Allerdings verwendet es einen Software-Renderer und verfolgt damit einen völlig anderen
Ansatz als unser Projekt, welches auf OpenGL basiert.
Bei Marble gibt es einen experimentellen Branch für die Portierung auf OpenGL, daran wird u.a. derzeit im Rahmen des Google Summer of Code gearbeitet. Es ist ein erklärtes Ziel des Maintainers, dass das OpenGL-Rendering eine vollwertige Alternative zur software-basierten Implementierung werden soll.
Aber ja, aktuell verwenden sie Software-Rendering. Das Obige ist von meiner Seite also nur als Zusatzinformation gedacht.
OSM in 3D: OSM2World
Offline
#10 2012-08-02 13:42:56
- Martin Steen
- Member
- Registered: 2012-08-01
- Posts: 9
Re: Problem beim Ermitteln von Längengrad/Breitengrad für Segmente
maxbe wrote:Schön, dann bekommen die Schüler auch mal was hübsches zu sehen... Und wir auch, ich finde diese Abbildung auf dem Globus macht schon was her.
erst, wenn er sich dreht
duck&weg
walter
Das tut er ja ![]()
http://www.youtube.com/watch?v=BBf4VUK7QLA
Mal sehen wie es aussieht, wenn die OSM-Tiles auf dem Globus zu sehen sind.
Offline