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
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:
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.
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).
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.
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.