Hallo Norbert,
Ausserdem verschwinden Treads schon nach wenigen Tagen aus der Forumshauptdatei,
nicht schon nach zwei Tagen :-)
womit der Tread praktisch einer "Zwangsschliessung" zum Opfer faellt. Und da das Thema alles andere als trivial ist, rennt uns einfach die Zeit weg.
Die Urechnung von Gradangaben in Kilometerangaben habe ich mir vom DLR in Portz besorgt und damit 184 Orte in die bekannte PNG-Karte eingetragen.
Da sich die signifikanten Orte an den bekannten Orten wiederfinden,
ja auch nicht signifikante sind in etwa dort, wo sie tatsächlich sind :-)
gehe ich von hinreichender Exaktheit der Berechnung aus.
zum Zweck der Positionierung der Orte: ja
Die Skalierungsfaktoren $faktX und $faktY wurden empirisch ermittelt und sind nicht Bestandteil der Klasse zur Berechnung von Entfernungen aus GeoKoordinaten.
Um das Umkreisproblem in der Abfrage zu vereinfachen, habe ich mit besagter Klasse die GeoKoordinaten in Kilometer umgerechnet und in zwei neuen Spalten abgelegt.
Diese Kilometer sind vermutlich keine Kilometer - und da, denke ich, liegt das
Problem. Warum vermute ich das?
Erstens: Dein OffsetOst beträgt 653 km.
Laut Wikipedia ist Selfkant die westlichste Gemeinde Deutschlands, mit den Geokoordinaten:
51° 1' nördliche Breite
5° 55' östliche Länge
und liegt damit ziemlich exakt westlich von Köln, das in Wikipedia mit
50° 57' nördlicher Breite
6° 58' östlicher Länge
Die Westspitze Deutschlands ist auf der Karte verzeichnet und Dein Offset gibt
ja den Abstand der Westkante der Karte zum 0-Meridian an.
Beim Längengrad x (östlich von Greenwich) und Breitengrad y ergibt sich der Abstand zum Nullmeridian (bei angenommener Kugelform, die Ellipsoidkorrektur
vernachlässige ich einfach) zu
a = x * cos(y) * (40000/360)
Den Korrekturfaktor cos(y) vermisse ich bei Dir, denn selbst für Köln und 7° östlicher Länge komme ich nur auf rund 490 km Abstand zum Null-Meridian (ohne Cosinus-Korrektur auf 774 km), für Selfkant komme ich ohne Cosinus-Korrektur auf 657 km (passt zu Deinem OffsetOst), mit Kosinuskorrektur dagegen auf rund 413 km Ost. Da der Nordabstand fast vernachlässigbar ist (insbesondere in Hinblick auf die Nordostausdehnung von Köln) beträgt die Distanz zwischen Köln und der Westspitze rund 77 km, was ich nach einer hochpräzisen Messung (Geodreick und mein alter Schulatlas) bestätigen kann. Der Unterschied zu den 117 km ohne Korrektur ist jedenfalls offensichtlich.
Wenn Deine kmOst nun keinen wirklichen Abstand zum Nullmeridian angeben, sondern nur den Abstand, den ein Ort gleicher Länge auf dem Äquator zum Nullmeridian hätte, dann ist natürlich Deine Formel im SQL-Statement falsch,
da diese davon ausgeht, dass es sich um tatsächliche Kilometer handelt. Es ist ja schließlich ein einfacher Pythagoras, der bei kleinen Entfernungen hinreichend genau sein sollte.
Dass dies nur für kleine Entfernungen gilt, sollte klar sein. Beispielsweise liegt Saarbrücken laut Wikipedia auf
49° 14' nördlicher Breite und
7° 0' östlicher Länge.
d.h. bis auf 2 Bogenminuten (die in Wirklichkeit in der Ausdehnung der Städte untergehen) exakt südlich von Köln, was Deine Karte auch bestätigt.
Für Saarbrücken ergeben sich jedoch 508 kmOst, d.h. 18 km Abstand in Ostrichtung (statt maximal 2-3 km). Diese machen sich bei 190 km Nord-Süd-Abstand im Pythagoras kaum bemerkbar (weniger als 1 Kilomter Unterschied, also vernachlässigbar).
Wenn Deine Karte halbwegs abstandsgleich ist (richtig abstandsgleich geht ja nicht), dann sollte Dein Skalierungsfaktor in Nord-Süd-Richtung der gleiche sein wie in Ost-West-Richtung. Nach der Korrektur Deiner kmOst, nach Korrektur des OffsetOst und des Skalierungsfaktor sollte das Ergebnis kreisförmig aussehen.
Zusammengefasst: Der Fehler liegt nach meiner Analyse darin, dass Du vermutlich statt dem wirklichen Abstand zum Nullmeridian auf der Breite des Ortes den Abstand zum Nullmeridian auf dem Äquator genommen hast.
Freundliche Grüße
Vinzenz