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.71345

Grüße, Max

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;

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

Er sagte doch bereits, dass er immer alles verwexelt. :wink:

Ja, wäre wirklich nicht unwahrscheinlich… :wink:

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>

Moin !

nun ist das Chaos bald perfekt.

Ich habe versucht die Bezeichnungen umzudrehen - aber irgendwie ist die Figur jetzt genau in die andere Richtung verdreht.

Hier mein derzeitiger Code:

Kann einer nochmal rüberschauen - mir lat-lon’t es schon durch den Kopf!

Gruß Jan

x gehört zu lon und y zu lat

Weide

Moin !

wenn ich das richtig verstanden habe, dann müßte es jetzt so aussehen:

Aber mein Ergebnis läßt immer noch zu wünschen über…

… und nun kommst Du !

Gruß Jan

Ich glaube, Weide und ich haben recht.

Grüße, Max

Hi !

also irgendwie klemmt es immer noch:

jetzt

und dann kommt da immer noch soetwas raus:

Könnt Ihr Euren Codeblock jetzt nochmal posten?

Gruß Jan

Erste Konvertierung: x=lon und y=lat/cos(lat)

Rückweg: lat=y und lon=x * cos(lon)

Das muss schon einheitlich sein.

Meiner ist nach wie vor der aus #16, lediglich mit anderen $angle (welchen nimmst Du?), $base_lon und $base_lat.

Grüße, Max

hi!

sorry jetzt versteh ich aber auch gar nichts mehr …

In meinen Zeilen steht doch bei x … lon und y … lat!

Auch für den Rückweg !

Codeblock auf #16 war doch noch mit den vertaushten Werten !

Das ist doch in meine Protokoll gewesen ! Oder was meinst Du

Deshalb nochmal die Bitte

Gruß Jan

Dann mach doch einfach winkel = - winkel am Programmbeginn.

Moin !

Das ist doch aber Pfusch und wenn es bei maxbe funktionert muss die Formel doch auch korrekt bei mir laufen.

Nur mit dem ändere hier und da kommt es zu Missverständnissen und dann ist der Komplettabgleich doch einfacher.

Gruß Jan

Das “* cos…” in der letzten Zeile muss eine Zeile rauf. Es gehört wie in der zweiten Zeile zu lat und y.

Code kann ich nicht schicken. Ich hab keinen.

Weide

In der oberen Zeile teilst Du durch Cosinus(Breitengrad) um aus dem Breitengrad zu y zu kommen.
Unten multipizierst du durch den Cosinus(Längengrad). um von x auf den Längengrad zu kommen.

Der Faktor cos(Breitengrad) muss in beiden Fällen eben der vom Breitengrad sein und hat bei allem, wo x drinsteht nichts zu suchen.

Wenn wir uns vom Äquator aus dem Nordpol nähern (der lat-Wert (die Breite) steigt), wird doch der Rechtswert (x) bei gleicher Differenz der Länge (lon in Gred) immer kleiner.

In der zweiten und auch letzten Zeile muss doch der cos(…) immer vom gleichen Argument genommen werden - nämlich, wie weit sich der Punkt in Richtung Norden befindet (base_lat), wie schon von maxbe bemerkt wurde.

Als Beispiel zum einfachen Rechnen nehme ich eine Position bei 60° nördlicher Breite - da ist der cos davon 0,5 und ein delta in x- und y-Richtung von je ein Grad. Dann möchte ich delta_y = 111 km und delta_x = 55,5 km erhalten - also muss ich zum Berechnen von delta_x mit cos(base_lat) multiplizieren. Zum Zurückrechnen (ohne Drehung soll wieder das selbe herauskommen) muss ich x_new durch den cos(base_lat) teilen.

Franz

Oh ja, das zweite Problem hatte ich übersehen.

Weide

Ja, da stimme ich Dir zu. Wenn man mit konkreten Entfernungen rechnet, ist das das einzig gute Verfahren. Aber in diesem Fall geht es nur um die Anwendbarkeit der Drehmatrix und der ist der Maßstab egal. Deshalb kann man den cos(base_lat) auch an beiden Stellen mit vertauschtem “*” und “/” auf die andere Koordinate loslassen.

Weide

Moin !

erst einmal noch vielen Dank für Eure Geduld in dieser Angelegenheit!

Es hat jetzt geklappt - gab zusätzlich noch ein Problem an anderer Stelle.

Hier nochmal der letzte Code-Stand als Zusammenfassung:

in Perl.

Gruß Jan