Koordinaten vergleichen

Hallo,

ich habe mal wieder eine Frage für mein Feuerwehr-Projekt:

Bisher wird unser Fax von der Leitstelle welches die Daten zum Alarm enthält mittels Texterkennung ausgelesen und die sich daraus ergebende Adresse auf (unserem selbst aufgesetzten) Nominatim angezeigt. Das funktioniert relativ gut, jedenfalls wenn eine Straße oder sogar Hausnummer angegeben ist. Das ist aber nicht immer der Fall, bei einem Unfall auf der Landstraße in Richtung des Nachbarorts steht auf dem Fax in der Zeile “Straße” z.B. “B47>Göllheim”, womit Nominatim natürlich nicht klarkommt. Ich könnte zwar bei der Vorverarbeitung der Daten aus der Texterkennung alles ab dem > abschneiden, allerdings wüsste Nominatim ja dann immer noch nicht ob jetzt die B47 in Richtung Norden oder Süden gemeint ist. Außerdem gibt es in weiteren Ortsteilen Straßen mit gleichem Namen (z.B. Hauptstraße oder Schulstraße), die Nominatim vor der eigentlich gesuchten Adresse in der “Hauptstadt” der Gemeinde einsortiert. Somit kann man mal locker im falschen Ortsteil landen wenn man nicht aufpasst, und das darf natürlich nicht passieren.

Auf dem Alarmfax werden neben der Adresse aber außerdem die Gauß-Krüger-Koordinaten der Einsatzstelle angezeigt. Da habe ich mich lange nicht drangetraut, aber mittlerweile auch mittels proj eine Routine geschrieben die bis auf wenige Meter genau die Koordinaten in lon und lat umrechnet (Genauigkeit auf ein paar Meter reicht für unsere Anwendung völlig aus). Nachdem ich allerdings den Programmteil für die Koordinatentransformation fertig hatte und testweise mal über alle alten Einsätze drüberlaufen lassen habe, habe ich herausgefunden dass die GK-Koordinaten der Leitstelle oftmals nicht hausnummerngenau sind sondern nur auf den Mittelpunkt der Straße zeigen. So ein Mist!

Da Nominatim in diesem Fall ein deutlich genaueres Ergebnis liefert (und ich außerdem nicht für diesen Einsatzzweck völlig umsonst 2 Wochen lang zu Fuß Hausnummern erfasst haben will :smiley: ), würde ich gerne die beiden lat-lon-Koordinatenpaare (ich lese die von Nominatim ermittelten Koordinaten mittels der JSON-Ausgabe aus) miteinander vergleichen um herauszufinden welches das bessere Ergebnis liefert:

  • das von der Leitstelle, welches aber nicht hausnummerngenau ist
  • das was Nominatim liefert, oftmals genau richtig liegt aber manchmal auch völlig daneben oder gar kein Ergebnis liefert und dann nur die Weltkarte angezeigt wird

Allerdings hab ich jetzt von Geoinformatik nicht ganz so die Ahnung. Kann mir einer sagen ob ich mit der folgenden Idee völlig daneben liege oder man das so machen kann?

Die längsten Straßen in unserer Gemeinde die einen Namen haben (Bundesstraßen etc. mal ausgenommen) sind ca. 1,5 km lang. Die Koordinate von der Leitstelle, die halbwegs richtig aber nicht ganz genau ist würde ich als Mittelpunkt eines Kreises oder Quadrats (je nachdem was praktikabler ist) mit einem Radius von 1 km bzw. einer Seitenlänge von 2 km definieren (dann hab ich noch ein bisschen Reserve wenn die Koordinaten mal doch nicht ganz in der Straßenmitte liegen). Wenn die Nominatim-Koordinaten innerhalb des Kreises bzw. Quadrats liegen sollen diese genommen werden da sie sehr wahrscheinlich richtig und genauer sind, wenn nicht sollen die Koordinaten der Leitstelle genommen werden.

Die Preisfrage ist jetzt: Wie würde eine Formel aussehen die so etwas berechnet?

Wenn ich richtig informiert bin beschreibt ein Unterschied von 0.01 in den dezimal angegebenen Lat-Lon-Koordinaten ja eine Distanz von (ganz grob geschätzt) 1 km. Wenn ich also jetzt mein Quadrat mit 2 km Seitenlänge nehmen würde, müsste ich schauen ob die Leitstellen-Koordinaten jeweils nur 0.01 größer oder kleiner als die Nominatim-Koordinaten sind, korrekt?
Kreis wäre natürlich ein bisschen schöner, aber bevor ich da jetzt eine Formel entwickle die am Ende doch hinten und vorne nicht stimmt wollte ich gerne mal bei den Experten nachfragen.

Die Kartenanzeige etc. ist schon komplett fertig, mir fehlt jetzt nur noch eine Formel die ich PHP für ein if-else beibringen kann um die beiden Koordinaten miteinander zu vergleichen.

Vielen Dank schonmal für die Hilfe!

Viele Grüße,

Christoph

Bei 2 Koordinaten (lat1 lon1) und (lat2 lon2) ist der Abstand in Kilometer:

dx=111.317 * (lon1-lon2) * cos(lat1)
dy=111.317 * (lat1-lat2)
abstand=sqrt(dx*dx+dy*dy)

Ein Grad entspricht ungefähr Erdumfang/360=111.317 km, 0.01 Grad sind also 1.1 km in Nordsüdrichtung. Beim Längengrad kommt noch der Faktor cos(Breitengrad) dazu, weil die Längengrade am Äquator auch 111 km auseinanderliegen, sich aber an den Polen treffen.

Den cos(Breitengrad deiner Gemeinde) kannst auch einmal berechnen und dann als Konstante stehen lassen, eine so grosse Nordsüdausdehnung wird die Gemeinde nicht haben, dass man das jedes Mal genauer berechnen müsste.

Grüße, Max

Funktioniert perfekt!

Vielen Dank!

Grüße,

Christoph