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 2015-11-13 19:14:06
- Lübeck
- Member

- Registered: 2009-02-17
- Posts: 2,874
Transformationsansatz für Lat-Lon-Werte
Moin !
gleich eines vorweg - bevor mich der erste gleich an den Pranger stellt und es Warnungen hagelt. Die nachfolgenden Schritte sind nur für den LOKALEN GEBRAUCH bestimmt und die Anwender sind sich der GEFAHR BEWUSST.
Es geht darum das die Karten immer Nordgerichtet erstellt werden und die allerwenigsten Tools es ermöglichen Kartenplots zu drehen. Zumindest geht es in Maperative nicht!
Also wollte ich einen einfachen mathematischen Ansatz aus der Vermessung nehmen und die Lon/Lat-Werte als Rechts bzw. Hochwert interpretieren.
Dann habe ich mir die passenden Formeln zusammengestellt und losgerechet - an diskreten Zahlenwerten passt es auch!
base_* ist ein Drehpunkt im Bereich der zu bearbeitenden Kartendaten (damit sollten geografische Verzerrungen weitestgehend zu vernachlässigen sein!)
*_angle sind die betreffenden trigonometrischen Werte des Drehwinkels
lon_new = base_lon + cos_angle * (lon_old - base_lon) - sin_angle * (lat_old - base_lat);
lat_new = base_lat + sin_angle * (lon_old - base_lon) + cos_angle * (lat_old - base_lat);
Wenn ich das aber für einen Bereich von Malaga mache, dann sieht das sehr merkwürdig aus:

https://www.openstreetmap.org/#map=16/3 … 1403805183
Wenn man in diesem Bereich ein Rechteck in JOSM zeichnet und dieses dreht, dann bleibt es erhalten in seiner Form.
Habe ich einen Gedankenfehler oder wird innerhalb von JOSM ein anderer Rechenansatz angewandt?
Gruß Jan
Last edited by Lübeck (2015-11-14 07:07:38)
Redmi Note 9 Pro mit Android 11, Tablet Android 8.1, PC: Win10
Offline
#2 2015-11-13 19:30:19
- chris66
- Member

- From: Germany
- Registered: 2009-05-24
- Posts: 10,128
Re: Transformationsansatz für Lat-Lon-Werte
Na ja, Deine Formel ist ja eine simple 2D Drehung. Das lat/lon Koordinatensystem ist aber verzerrt.
Es müsste gehen, indem Du vor der Drehung entzerrst und nach der Drehung wieder verzerrst.
Der Verzerrfaktor war glaube ich der cosinus des Breitengrades.
Das ganze natürlich nur für kleine Gebiete, wo man die Erdkrümmung vernachlässigen kann.
Mapper aus dem Münsterland.
Offline
#3 2015-11-13 19:34:24
- Lübeck
- Member

- Registered: 2009-02-17
- Posts: 2,874
Re: Transformationsansatz für Lat-Lon-Werte
Hi !
also wenn ich Dich richtig verstehe, dann macht das JOSM schon bei einer einfachen Drehung ?
Dann würde mich die "genaue" Formel interessieren die in JOSM steckt.
Kommt da einer ran - ich kenne mich mit dem System und Java nun einmal gar nicht aus.
Gruß Jan
Redmi Note 9 Pro mit Android 11, Tablet Android 8.1, PC: Win10
Offline
#4 2015-11-13 20:04:03
- Hubert87
- Member
- Registered: 2014-03-07
- Posts: 344
Re: Transformationsansatz für Lat-Lon-Werte
Deine Idee ist schon ganz in Ordnung, bei kleinen Abständen kann man die Verzerrung ignorieren.
Das Problem ist, dass die Formel davon ausgeht, dass die Abstände in x und y Richtung gleich sind. Bei lat und lon sind Sie das aber nicht, da lat von -180 bis +180 geht, lon aber nur von -90 bis +90. Daher muss du deine Formeln entsprechend korrigieren:
lon_new = base_lon + cos_angle * (lon_old - base_lon)*2 - sin_angle * (lat_old - base_lat);
lat_new = base_lat + sin_angle * (lon_old - base_lon)*2 + cos_angle * (lat_old - base_lat);
Klappt das?
Edit: Erste Vermutung, ansonsten rechne ich die Transformationsmatrixen mal komplett neu aus.
(Stichpunkt: "Rotation um einen beliebigen Punkt")
Last edited by Hubert87 (2015-11-13 20:09:39)
Offline
#5 2015-11-13 20:29:07
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Transformationsansatz für Lat-Lon-Werte
also wenn ich Dich richtig verstehe, dann macht das JOSM schon bei einer einfachen Drehung ?
Dann würde mich die "genaue" Formel interessieren die in JOSM steckt.
Lade mal einen Kreisverkehr in JOSM (rund), stelle die Projektion auf WGS84 (er wird oval), drehe den Kreisverkehr (gedrehtes Oval) und stell wieder um auf Mercator (immer noch oval...).
Ich glaube, JOSM abschreiben ist ein Holzweg. So wie ich das sehe, arbeitet JOSM mit Daten in der Wunschprojektion des Nutzers. Oft ist das Mercator oder was anderes winkeltreues und die Drehung klappt zufällig.
Grüße, Max
Offline
#6 2015-11-13 20:54:00
- Bernhard Hiller
- Member

- Registered: 2011-05-10
- Posts: 1,122
Re: Transformationsansatz für Lat-Lon-Werte
Bei Latitude bleibt 1 Grad immer so 111 km, egal ob am Äquator oder am Pol. Bei Longitude mußt du das mit dem Cosinus von Latitude multiplizieren.
Mein Vorschlag: transformiere die Werte zunächst in so ein Kilometer-basiertes Koordinatensystem (km ab Äquator, km ab Greenwich-Meridian), transformiere den Bezugspunkt ebenso, und mache dann deine Transformation. In unseren Breiten sollte selbst bei 100x100km die Verzerrung nicht auffallen.
Z.B. 50°N, 12°E => 5550 km N, 942 km E (und nicht etwa 1320 km E).
Offline
#7 2015-11-13 21:07:45
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Transformationsansatz für Lat-Lon-Werte
Probiers mal damit:
LatLon in eine rechteckige Plattkarte für base_lon/base_lat mit Koordinatenursprung im Drehpunkt umwandeln
x= lon - base_lon
y=(lat - base_lat)/cos(base_lat)
Drehung
x_new = cos_angle * ( x ) - sin_angle * (y);
y_new = sin_angle * ( x ) + cos_angle * (y);
Plattkarte zurück in LatLon
lon_new=base_lon + x_new
lat_new=base_lat + y_new*cos(base_lat)... allerdings ungetestet und ich verwechsel ganz oft x und y, lat und lon und sin und cos ![]()
... geht nicht am Nordpol!
Wenn umprojizieren in eine rechteckige Plattkarte nicht reicht, musst dir die Formeln für Mercator oder UTM suchen, oder eine Bibliothek dafür.
Grüße, Max
Last edited by maxbe (2015-11-13 21:11:45)
Offline
#8 2015-11-13 21:10:39
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Transformationsansatz für Lat-Lon-Werte
-- snip -- Edit und Quote verwechselt
Last edited by maxbe (2015-11-13 21:11:24)
Offline
#9 2015-11-13 21:41:59
- Lübeck
- Member

- Registered: 2009-02-17
- Posts: 2,874
Re: Transformationsansatz für Lat-Lon-Werte
Moin !
ich habe das versucht bei mir einzubauen... sieht jetzt so aus:
my $delta_x= $lon_old - $config{base_lon};
my $delta_y=($lat_old - $config{base_lat})/cos($config{base_lat});my $x_new = $cos_angle * $delta_x - $sin_angle * $delta_y;
my $y_new = $sin_angle * $delta_x + $cos_angle * $delta_y;my $lon_new=$config{base_lon} + $x_new;
my $lat_new=$config{base_lat} + $y_new*cos($config{base_lat});
Vielleicht kann noch einmal einer raufschauen, weil ich den Hintergrund der Formel nicht kenne - aber das Ergebnis sieht nicht viel besser aus !
Gruß Jan
Redmi Note 9 Pro mit Android 11, Tablet Android 8.1, PC: Win10
Offline
#10 2015-11-13 21:51:13
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Transformationsansatz für Lat-Lon-Werte
Nur mal vorsichtig gefragt... Du rechnest schon cos($config{base_lat}) mit base_lat in Bogenmaß? Ich vermute, das ist Perl und ich glaube, das rechnet so.
Offline
#11 2015-11-13 22:00:55
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Transformationsansatz für Lat-Lon-Werte
Und noch ne Korrektur, ich verwechsel auch manchmal / und *
x= lon - base_lon
y=(lat - base_lat)*cos(base_lat) <----- * statt /
x_new = cos_angle * ( x ) - sin_angle * (y);
y_new = sin_angle * ( x ) + cos_angle * (y);
lon_new=base_lon + x_new
lat_new=base_lat + y_new/cos(base_lat) <----- / statt *Last edited by maxbe (2015-11-13 22:02:40)
Offline
#12 2015-11-13 22:28:46
- Lübeck
- Member

- Registered: 2009-02-17
- Posts: 2,874
Re: Transformationsansatz für Lat-Lon-Werte
Hi !
Ich vermute, das ist Perl und ich glaube, das rechnet so.
Offline
Da ich von rechtwinkligen Koordinaten bei meiner Transformation ausgegangen war habe ich das hier vergessen!
Habe die Konvertierung mit
$config{base_lon} = $config{base_lon} / $rho;
$config{base_lat} = $config{base_lat} / $rho;$lon_old = $lon_old / $rho;
$lat_old = $lat_old / $rho;
vor der Transformation und
#Rekonvertierung
$lon_new = $lon_new * $rho;
$lat_new = $lat_new * $rho;
ergänzt.
Die Formel lautet dann jetzt:
my $delta_x= $lon_old - $config{base_lon};
my $delta_y=($lat_old - $config{base_lat})* cos($config{base_lat});my $x_new = $cos_angle * $delta_x - $sin_angle * $delta_y;
my $y_new = $sin_angle * $delta_x + $cos_angle * $delta_y;my $lon_new=$config{base_lon} + $x_new;
my $lat_new=$config{base_lat} + $y_new / cos($config{base_lat});
Aber jetzt beisst das Ergebnis förmlich in den Augen.
... und ja, ist Perl.
Gruß Jan
Redmi Note 9 Pro mit Android 11, Tablet Android 8.1, PC: Win10
Offline
#13 2015-11-13 22:51:57
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Transformationsansatz für Lat-Lon-Werte
Aber jetzt beisst das Ergebnis förmlich in den Augen.
Dann tausch nochmal / und *, und falls es nichts hilft, warte auf ne bessere Formel, bin grad überfordert ![]()
Offline
#14 2015-11-13 22:59:23
- Lübeck
- Member

- Registered: 2009-02-17
- Posts: 2,874
Re: Transformationsansatz für Lat-Lon-Werte
ausgetauscht - aber noch nicht besser !
Gute Nacht vorerst.
Gruß Jan
Redmi Note 9 Pro mit Android 11, Tablet Android 8.1, PC: Win10
Offline
#15 2015-11-13 23:03:28
- chris66
- Member

- From: Germany
- Registered: 2009-05-24
- Posts: 10,128
Re: Transformationsansatz für Lat-Lon-Werte
Ja, oben muss "/" (y-Richtung muss gestreckt werden), unten "*".
Mapper aus dem Münsterland.
Offline
#16 2015-11-13 23:59:50
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Transformationsansatz für Lat-Lon-Werte
Also dieses Progrämmchen haut bei mir hin und rotiert um 45° mit Drehpunkt bei 11.5359E 48.1271N
$rho=180/3.1415927;
$angle=45/$rho;
$base_lon = 11.535951/$rho;
$base_lat = 48.127126/$rho;
$lon_old=$ARGV[0];
$lat_old=$ARGV[1];
$cos_angle=cos($angle);
$sin_angle=sin($angle);
$lon_old = $lon_old / $rho;
$lat_old = $lat_old / $rho;
$delta_x= $lon_old - $base_lon;
$delta_y=($lat_old - $base_lat) / cos($base_lat);
$x_new = $cos_angle * $delta_x - $sin_angle * $delta_y;
$y_new = $sin_angle * $delta_x + $cos_angle * $delta_y;
$lon_new=$base_lon + $x_new;
$lat_new=$base_lat + $y_new * cos($base_lat);
$lon_new = $lon_new * $rho;
$lat_new = $lat_new * $rho;
print " $lon_new $lat_new\n";Input:
11.535951 48.127126
11.535771 48.154221
11.578082 48.154101
11.560655 48.140376
11.579609 48.126706
11.535951 48.127126Output:
11.535951 48.127126
11.5071201551467 48.1462001016678
11.5371656739326 48.1660851819675
11.5393827447693 48.1481549512658
11.5672668018948 48.1474347049245
11.535951 48.127126Ergebnis (dick markiert das Original, dünn rot das rotierte Fünfeck)

Last edited by maxbe (2015-11-14 00:17:31)
Offline
#17 2015-11-14 07:05:33
- Lübeck
- Member

- Registered: 2009-02-17
- Posts: 2,874
Re: Transformationsansatz für Lat-Lon-Werte
Moin !
so - ich habe es ausprobiert und mein Ergebnis war gestern abend mit Euren Formelansätzen schon korrekt und ich bin dem Problem ein Stück näher gekommen.
Ich habe vermutlich nur ein "besseres" Testbeispiel gehabt als Ihr!

Erfolgt die Berechnung östlich des 0-Meridian, dann ist alles OK - westlich dagegen "zerhaut" das negative Vorzeichen alles.
Entweder lebt man damit und wendet es nur im "richtigen" Bereich an - aber gerne würde ich das Problem schon "richtig" lösen.
Hat einer eine weiterführende Idee - mit einer temp. Additionskonstante für den Rechtswert wird man wohl nicht weiterkommen und zu große Verfälschungen einbauen.
Gruß Jan
Redmi Note 9 Pro mit Android 11, Tablet Android 8.1, PC: Win10
Offline
#18 2015-11-14 08:12:49
- Weide
- Member
- Registered: 2009-04-05
- Posts: 1,491
Re: Transformationsansatz für Lat-Lon-Werte
Erfolgt die Berechnung östlich des 0-Meridian, dann ist alles OK - westlich dagegen "zerhaut" das negative Vorzeichen alles.
Die Transformationsformeln sind auch für negative Winkel geeignet ... da gibt es kein Problem.
Kommen die Daten vom Aufruf im Programm überhaupt richtig an? Oder interpretiert irgendwas das Minus als Optionskennung?
Was macht das Programm, wenn man die negativen Winkel positiv formuliert (durch Addieren von 360°)?
Weide
Offline
#19 2015-11-14 09:24:54
- Lübeck
- Member

- Registered: 2009-02-17
- Posts: 2,874
Re: Transformationsansatz für Lat-Lon-Werte
Bin zwar derzeit nicht an dem Rechner, aber Vorzeichen werden nicht als Option berücksichtigt!
Es sind genau die oben geposteten Formeln!
Ich werde später nochmal schauen und ggf. Musterwagen veröffentlichen!
Jan
Redmi Note 9 Pro mit Android 11, Tablet Android 8.1, PC: Win10
Offline
#20 2015-11-14 11:18:52
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Transformationsansatz für Lat-Lon-Werte
Das Progrämmchen aus #16 kann auch in Malaga um 60° rotieren

Offline
#21 2015-11-14 13:56:47
- Lübeck
- Member

- Registered: 2009-02-17
- Posts: 2,874
Re: Transformationsansatz für Lat-Lon-Werte
????
Kannst du Daten um Vergleich heute Abend Bitte nochmal posten?
Jan
Redmi Note 9 Pro mit Android 11, Tablet Android 8.1, PC: Win10
Offline
#22 2015-11-14 15:28:20
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Transformationsansatz für Lat-Lon-Werte
????
Kannst du Daten um Vergleich heute Abend Bitte nochmal posten?
Jan
Programm:
$rho=180/3.1415927;
$angle=60/$rho;
$lon_old=$ARGV[0];
$lat_old=$ARGV[1];
$cos_angle=cos($angle);
$sin_angle=sin($angle);
$base_lon = -4.435957/$rho;
$base_lat = 36.713450/$rho;
$lon_old = $lon_old / $rho;
$lat_old = $lat_old / $rho;
$delta_x= $lon_old - $base_lon;
$delta_y=($lat_old - $base_lat) / cos($base_lat);
$x_new = $cos_angle * $delta_x - $sin_angle * $delta_y;
$y_new = $sin_angle * $delta_x + $cos_angle * $delta_y;
$lon_new=$base_lon + $x_new;
$lat_new=$base_lat + $y_new * cos($base_lat);
$lon_new = $lon_new * $rho;
$lat_new = $lat_new * $rho;
print " $lon_new $lat_new\n";Input:
-4.435957 36.713450
-4.435957 36.757238
-4.389817 36.757238
-4.413191 36.738023
-4.388907 36.711746
-4.435957 36.713450 Output:
-4.435957 36.71345
-4.48326220162197 36.7353439994134
-4.46019220224012 36.7673760744308
-4.45112078754024 36.7415414892643
-4.41059112953407 36.7452618303126
-4.435957 36.71345Grüße, Max
Offline
#23 2015-11-14 17:29:56
- Lübeck
- Member

- Registered: 2009-02-17
- Posts: 2,874
Re: Transformationsansatz für Lat-Lon-Werte
Moin!
irgendwie bin ich völlig mit dem Brett vor dem Kopf unterwegs. Aber kann es sein, dass Du lat/lon vertauscht hast ?
Habe eben einmal die OSM-Datei aus JOSM im Editor betrachtet;
<node id='-223' action='modify' visible='true' lat='-4.435957' lon='36.71345' />
und wenn ich nicht ganz falsch liege, dann ist lat der Wert mit -4 und bei Dir ist das Lon ??
Oder ist es nicht nur ein Brette sondern ein Balken vor meinem Kopf!
Gruß Jan
Redmi Note 9 Pro mit Android 11, Tablet Android 8.1, PC: Win10
Offline
#24 2015-11-14 17:37:13
- chris66
- Member

- From: Germany
- Registered: 2009-05-24
- Posts: 10,128
Re: Transformationsansatz für Lat-Lon-Werte
Er sagte doch bereits, dass er immer alles verwexelt. ![]()
Mapper aus dem Münsterland.
Offline
#25 2015-11-14 17:42:55
- maxbe
- Member
- Registered: 2010-01-19
- Posts: 3,255
- Website
Re: Transformationsansatz für Lat-Lon-Werte
Er sagte doch bereits, dass er immer alles verwexelt.
Ja, wäre wirklich nicht unwahrscheinlich... ![]()
Zur Sicherheit hab ich mir aber mal angesehen, was bei lon=-4.42 lat=36.72 (also am 4. westl. Längen und 36. nördl. Breitengrad) liegt und war sehr erleichtert, auf Malaga zu stossen...
Weitere Nachforschungen ergaben dann auch noch ein Cafe bei lon=-4
<node id="2083959218" visible="true" version="2" changeset="22124650" lat="36.7218343" lon="-4.4182057"><tag k="amenity" v="cafe"/></node>Last edited by maxbe (2015-11-14 17:45:32)
Offline