geografische Koordinaten als Pixel abbilden

hello again,

ich habe die anforderungen nochmal zusammengefasst :
die anwendung muss in der lage sein aus den bezogenen geodaten eine vektorbasierte grafik zu erstellen und diese darzustellen. es muss die möglichkeit bestehen die kartendarstellung zu verschieben, zu skalieren und zu rotieren. grafische und textuelle elemente müssen unabhängig voneinadner zeichenbar sein

ich setz mich gerade mit deinem beispiel auseinander :smiley:

mfg

marvel

Wieso nimmst du nicht die OSM Koordinaten? Ist doch total simpel…
Dein Beispielsatz: lat=“53.0749616” lon=“8.7867913”

Zum Rendern selber: du legst für dein Fenster in dem du zeichnest eine Größeß fest…z.b. 200x400 Pixel entsprechen 1000 x 2000 Meter. Nun legst du irgendeinen startpunkt fest (aktuelle GPS-Koordinate wäre ja sinnvoll) und nimmst diese als Mitte des Bildschirms…von dieser ziehst du jetzt 500 meter ab in der horizontalen und 1000 meter in der vertikalen und schon hast du die koordinate für deine linke obere ecke…die rechte untere durch zuzählen von 500 und 1000 Metern…

Beispiel: GPS Koordinate bei 52.750000 / 9.400000
52.75 abzgl. 500 Meter = 52.745000 9.400000 abzgl. 1000 Meter = 9.390000
Rechte unter Ecke: 52.755000 und 9.410000

Das Zeichnen ist total simpel…wenn du jetzt eine Koordinate hast die in diesem viereck liegt und du die zeichnen willst:
wo liegt die Koordinate in der Breite (Prozentual)? Wo liegt diese vertikal? (Prozentual) …dann die entsprechende Prozentzahl anhand der Pixel ausrechnen…z.B. 25 % von 200 Pixel und 50 % von 400 Pixel = bei X=50 unc Y=200 zeichnen…

Also rein von der Theorie her :smiley: Ich mach mich selbst erst am WE da dran…aber habe schon diverse Graphen und Vektorgrafiken selbst per Code gezeichnet.

Dann musst du nur noch eine Zoom-Funktion einbauen die diese 1000x2000 meter vergrößert oder verkleinert…
Maßstabgetreu kannst du nur etwas machen wenn du die Display-Größe in Millimetern kennst (Usereingabe)…

Gruß
Paul

Naja kommt halt auf die Größe des abzubildenden Gebiets an. Die einfache lineare lat-lon
Abbildung bringt natürlich mehr Verzerrungen als Mercator und Co. :wink:
Chris

hi chris,

genau das war auch meine sorge das die lineare abbildung eventuell zu große verzerrungen verursacht. deshalb habe ich auch zu anfang gedacht das die utm projektion eine alternative wäre. die lineare abbildung habe ich dank gary jetzt nachvollziehen können. schön das es foren gibt in denen man über sowas diskutieren kann :slight_smile:

mfg

marvel

Ah? Ich dachte das wäre nur ne Umrechnung wie von °C nach Fahrenheit … :wink:
Aber wie groß kann die Verzerrung schon sein? Bzw. wie groß ist der Ausschnitt den du brauchst und unbedingt (!) entzerren musst?

Sonst hilft dir vielleicht die Seite…unten sind paar Formeln:
http://www.vermessung-wolf.de/wissen/etrs.html

nun, da das ganze für ein navigationssystem konzepiert wird sollte eine geringe verzerrung vorliegen.

beispiel :

navigieren von düsseldorf flughafen nach dortmund flughafen.

.

Nahmd,

Ich empfehle, das “int” wegzulassen, weil:

xmin ≤ x < xmax → 0 ≤ (x-xmin)/(xmax-xmin) <1

Und damit int ((x-xmin)/(xmax-xmin)) = 0.

Bei der üblicherweise verwendeten Merkator-Projektion ist der berechnete Wert für lon richtig, der Wert für lat aber nur in der Nähe von ymin und ymax, also am unteren und oberen Rand richtig, dazwischen weicht er vom korrekten Wert ab. Wenn Deine Bahnstrecke ein paar Dutzend Kilometer lang ist, hält sich der Fehler in Grenzen. Führt sie quer durch Deutschland, ist er signifikant.

Gruß Wolf

Das kommt darauf an, wie groß das Gebiet ist und wie genau die Punkte in lat/lon stimmen sollen.
Grob gesagt: Wenn man in die Pixel-Darstellung ein Koordinaten-Gitter einzeichnen würde, sollten die Gitterlinien in der gewünschten Auflösung parallel zu den Außenrändern verlaufen.
Übrigens: SVG ist ein Vektor-Format, das erst durch das Anzeigeprogramm auf Bildschirmpixel abgebildet wird. Die originalen SVG-Koordinaten sollten eigentlich genauer als die Bildschirm-Pixel sein, muss man allerdings aus der Original-SVG-Datei herausfieseln.

.

Da mußt und wirst du wohl scheitern - es sei denn, du hast noch weitere Informationen.
Dieses SVG-Polygon beschreibt einen Weg in einem fiktiven Koordinatensystem (Darstellungsfläche des SVG-Files?) ohne Verbindung zu einer realen geographischen Lage (z.B. 0,0 ist bei lon/lat 12.3,45.8), ohne Maßstab und ohne Projektionsmethode. Wie soll das denn an der richtigen Stelle und in der richtigen Größe oberhalb einer OSM-Karte dargestellt werden?

ich hab da mal ein “richtiges” svg draus gemacht:


<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000pt" height="500pt" viewBox="-7600 -5100 15200 10200" version="1.1">
<polyline fill="none" stroke="red" stroke-width="5" points=" 7148,-524 7310,108 7435,732 7482,981 7489,1155 7427,1303 7325,1421 6975,1564 5437,2211 5025,2373 3849,2579 3636,2581 3457,2482 3273,2261 2499,949 2092,298 1913,159 1743,99 1076,-49 843,-176 624,-319 8,-917 -1216,-2242 -1494,-2549 -1632,-2589 -2042,-2579 -2238,-2557 -2485,-2479 -3290,-2264 -4010,-2204 -4274,-2194 -5273,-2107 -6340,-1995 -6906,-1927 -7171,-1878 -7461,-1752 -7495,-1652 -7397,-342 "/>
</svg>

und das sieht dann so aus:
http://osm.wno-edv-service.de/DataServer/osm/forum/komisches_svg.png

Und wo soll diese Linie jetzt hin?

Gruss
walter

Noch ne Zusatzfrage: Woher kommen eigentlich diese SVG-Ways und was sollen die bedeuten?

Du müsstest übrigens die Vorzeichen bei der Breitengradberechnung umdrehen. Das Koordinatensystem von SVG hat (0,0) in der oberen linken Ecke und geht dann positiv nach rechts und nach unten. Geografische Koordinaten gehen positiv nach oben.

lat= maxlat - (y-ymin)/(ymax-ymin) * (maxlat-minlat)
lon= minlon + (x-xmin)/(xmax-xmin) * (maxlon-minlon)

Wie oben schon erwähnt: minlon, maxlon, minlat und maxlat musst dir natürlich noch irgendwie besorgen. Und am besten auch noch eine Info zur Projektion, um den Fehler abschätzen zu können.

Grüße, Max

PS: Sind deine SVG immer so einfach wie das Beispiel? Die können sehr schnell sehr kompliziert werden und dürften dann nicht mehr so einfach einzulesen sein…

Edit: minlonlatmax verwehcselt

Marvel.

den ganzen Kram mit selber berechnen um Punkte auf dem Bildschirm darzustellen kannst Du Dir eigentlich sparen. Es gibt fertige Sachen wie Openlayers fürs Web oder Klassen für Java mit denen man sowas machen kann. Punkte in Lat/Lon kommen da rein und die werden auf einer OSM-Karte dargestellt.

LG,

-moenk

lies mal, was er am Anfang geschrieben hat:
“ich will den umgekehrten Weg gehen. Ich habe ein SVG File mit einer eingezeichneten Bahnstrecke. Die Pixel-koodinaten will ich in geograph. Koordinaten haben.”

Ist zwar ne komische Aufgabenstellung, die mir absolut unsinnig erscheint, aber wenn er unbedingt will …
Ich fragte ihn ja, woher er diese Bahnstrecken hat und was das soll, aber er hat noch nicht geantwortet.

Gruss
walter

UTM hat seine Berechtigung für Papierkarten. Ansonsten finde ich es viel zu umständlich in GEO-Software. Man kann das nicht einheitlich behandeln, sondern muss ständig die Zonenaufteilung berücksichtigen. In Software ist der Aufwand einfach zu hoch, wenn mit Koordinaten wirklich gerechnet werden soll. Das WGS84 von GPS ist schon ein gutes System, um weltweit Punkte zu kodieren. Falls für Berechnungen ein kartesisches System gewünscht wird, würde ich das in “ECEF” umwandeln, d.h. echte standardisierte 3D-Koordinaten mit einheitlichem Fixpunkt (der Erdmittelpunkt). Damit kann sehr schön mit 3D-Vektoren gerechnet werden (Luftfahrt ist 3D). GPS-Algorithmen rechnen intern ebenfalls in ECEF. Die Projektion auf ein kleines Erdoberflächensegment ist auch nicht schwierig. Das wäre dann quasi wie UTM, nur dass ich mich mit den UTM-Zonen nicht herumschlagen müsste. Die meisten Karten können über WGS84 kalibriert werden. Zwischen WGS84 und ECEF kann einfach umgerechnet werden (Ellipsoid). Einfach mal nach den entsprechenden Formeln bei Google suchen. Eine einfache lineare Rechnung funktioniert kleinräumig sehr gut (topografische Kachel von 2km Größe). Bei der Deutschlandkarte wäre die Verzerrung dafür aber zu groß.

Übrigens hatte ich mal eine ICAO-Luftverkehrskarte für meine OsmAnd Smarphone-App generiert. 3D kann die App zwar nicht, aber den Groundtrack kann man schön beim Fliegen verfolgen.

oops, gerade gesehen, dass du marvel geantwortest hast und nicht Markus (Quern). Marvels Thread ist leicht veraltet; Markus hat sich da nur drangehängt.
Ist mir aber auch schon passiert.

Gruss
walter

@all: wollten wir nicht irgendwann mal alle uralten Threads schließen lassen?

.

Nur um das mal klar zu stellen:

Die Geodaten aus dem NRW Bahnarchiv sind nicht zur Weiterverwendung im Projekt OpenStreetmap lizensiert.

Aber das mit dem Urheberrecht hat der Herr F. schon anderswo nicht verstehen wollen. Da nutzt es auch nichts, wenn man seine Spuren sorgfältig löscht.

Und wech,
André Joost

Danke Andrế für die Info.

Ich hatte schon ein ungutes Gefühl bezüglich der Datenquelle (wer will schon “komische” SVG unbekannter Herkunft unbedingt mit OSM verbinden?) und habe ja deshalb nachgebohrt.
Danke für deine klärenden Worte, die meine Ahnungen bestätigen.

@Markus: lass es!

Gruss
walter

Aber das mit dem Urheberrecht hat der Herr F. schon anderswo nicht verstehen wollen. Da nutzt es auch nichts, wenn man seine Spuren sorgfältig löscht.

Schwachsinn hoch drei! Nirgendwo habe ich URVs begangen! Herr J. ist einfach nur arrogant, überheblich und eingebildet. Er antwortet auf eine Mail bezüglich svg nicht, die ich ihm vor langer Zeit schickte. Macht der nochmal so eine Äußerung, setze ich meinen Anwalt auf den an!