Hallo zusammen,
ich versuche geografische Koordinaten in einem Bild einer PictureBox darzustellen. Dieses Bild stellt einen Ausschnitt der Weltkarte dar.
Das bedeutet, man muss die Latitude und Longitude entsprechend auf den Kartenausschnitt berechnen. Ich teste das derzeit an einer Europakarte die den unten beschrieben Bereich darstellen soll. Die Kartenprojektion ist eine Flächentreue Azimutalprojektion, also dass die Längen- und Breitengrade senkrecht bzw. waagerecht verlaufen.
Ich habe die wichtigsten Daten zusammengefasst:
Europakarte:
imageWidth = 1134 Pixel
imageHeight = 883 Pixel
maxX = 70 //Grad (rechts)
minX = -25 //Grad (links)
maxY = 72 //Grad (oben)
minY = 30 //Grad (unten)
Gleichungen zur Berechnung des Pixels auf der Europakarte:
x_pixel = imageWidth / (maxX - minX) * (lon - minX)
y_pixel = imageHeight / (maxY - minY) * ((lat-minY)[
Beispiel Berlin:
x_pixel = 1134 / (maxX - minX) * (13 + 25)
y_pixel = 883 / (maxY - minY) * ((53-30)
Die Gleichung zur Berechnung der x_pixel scheint schon richtig zu sein.
Nur bei der Berechnung der y_pixel Position im Bild, komme ich nicht auf ein richtiges Ergebnis.Das Ergebnis dieser Rechnung(lat-minY) ist zwar schon annähernd an der richtigen Stelle auf der Karte, aber liegt trotzdem mit dem Wert 23 noch in Schweden. Außerdem ergibt dies auch keinen Sinn, da damit ja auch nur die Pixelposition von unten an angezeigt wird.Das in rot Markierte müsste einen Wert von circa 24 bis 25 ergeben, damit die Pixel auch wirklich bei Berlin liegen.
Hoffentlich konnte ich mein Problem verständlich erklären.
Kann mir jemand bei der Lösung des Problems helfen?
Besten Dank im Voraus!
Vermutlich fehlt Dir http://wiki.openstreetmap.org/wiki/Mercator
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Vielen Dank für die schnelle Antwort. Ich werde das gleich mal testen.
Ich hätte nicht gedacht, dass das auch bei dieser Kartenprojektion beachtet werden muss.
Meines Wissens - und ich bin kein Genie in diesem Bereich - wird dies benötigt sobald Koordinaten auf Pixel umgerechnet werden sollen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Danke @Abt! Dein Link hat mir schon sehr geholfen. 👍
y_pixel = imageHeight / (maxY - minY) * LatitudeToY(lat-minY)
Ich vermute aber, dass ich bei dem lat-minY immer noch einen Fehler habe. Jetzt wird mir der Punkt in Mecklenburg-Vorpommern angezeigt. Ich werde das im Laufe des Tages nochmal durchdenken. Wenn einer eine Lösung findet, teste ich sie auch gerne.
**Edit:**Ich bin immer noch nicht auf eine Lösung gekommen. Habe ich die Mercator Projektion richtig angewendet?
Hi User007,
y_pixel = imageHeight / (maxY - minY) * LatitudeToY(lat-minY)
Wie kommst du denn überhaupt auf diese Gleichung? Schon der Term lat - minX ergibt aufgrund der Einheiten keinen richtigen Sinn, weil du Pixel von Grad subtrahierst. Hast du schonmal imageHeight / (maxY - minY) * (LatitudeToY(lat) - minY) ausprobiert?
Christian
Weeks of programming can save you hours of planning
Danke Christian, auch dies hatte ich schon getestet und liefert auch falsche Ergebnisse. Dass diese Gleichung mir unlogisch erschien, hatte ich auch schon bereits geschrieben.
Ich habe eine Website gefunden, auf dieser ein ähnliches Vorhaben in JavaScript und PHP gelöst wurde. Diesen Code konnte ich erfolgreich in C# implementieren und gibt mir nun die gewünschten Ergebnisse zurück.
Danke für die Hilfe und dem Hinweis auf die Umrechnung bei einer Mercator-Projektion