Benutzer mit den meisten Antworten
Entfernung zwischen zwei Geokoordinaten

Frage
-
Hallo,
ich möchte die Entfernung zweier Postleitzahlen berechnen. Da Postleitzahlen keine genauen Geo-Koordinaten sind, muss ich zu diesem Zweck zunächst die zu einer Postleitzahl gehörende Geo-Koordinate ermitteln.
Da ich dabei nicht auf Online-Dienste (Google Maps, Bing, etc.) zugreifen möchte, benötige ich also eine Liste der Postleitzahlen mit Geo-Koordinaten in meiner Datenbank. Ich habe mich dazu dieser Tabelle aus dem Internet bedient.
Nachdem ich die Tabelle mit longitude/latitude-Werten in meine SQL-Datenbank importiert hatte, erweiterte ich sie um eine Spalte "location" des Typs GEOGRAPHY, um das entsprechende API nutzen zu können. Ich füllte diese Spalte dann so:
UPDATE ext_plz SET location=GEOGRAPHY::Point(lat,lon,4326);
Zur Ermittlung der Distanz erstellte ich mir diese Funktion:
CREATE FUNCTION [dbo].[ext_plz_distance] ( @src CHAR(5), @dst CHAR(5) ) RETURNS FLOAT AS BEGIN DECLARE @r FLOAT,@s GEOGRAPHY, @d GEOGRAPHY; SELECT @s=loc FROM ext_plz WHERE (plz=@src); SELECT @d=loc FROM ext_plz WHERE (plz=@dst); IF (@s IS NOT NULL AND @d IS NOT NULL) SET @r = @s.STDistance (@d); ELSE SET @r = 0; RETURN @r END
Zum Vergleich erstellte ich auch eine Funktion, welche die Distanz auf der Basis der latitude/longitude-Werte berechnet:
CREATE FUNCTION [dbo].[ext_plz_distance_raw] (@lat1 FLOAT, @lon1 FLOAT, @lat2 FLOAT, @lon2 FLOAT) RETURNS FLOAT AS BEGIN RETURN ACOS(SIN(PI()*@lat1/180.0)*SIN(PI()*@lat2/180.0)+COS(PI()*@lat1/180.0)*COS(PI()*@lat2/180.0)*COS(PI()*@lon2/180.0-PI()*@lon1/180.0))*6371 END
Soweit so gut. Leider hat ein erster Test ergeben, dass beide Funktionen Werte liefern, die nicht plausibel sind.
select * from ext_plz where plz='82008'; select * from ext_plz where plz='81667'; select dbo.ext_plz_distance('82008','81667'); select dbo.ext_plz_distance_raw(48.0681730154305,11.6195082445939,48.1324385270214,11.5991943880406);
(Die Koordinaten für die zweite Distanzberechnung habe ich aus der PLZ-Tabelle.)
Beide Funktionen liefern ähnliche Werte:
ext_plz_distance: 7304,24490235936 ext_plz_distance_raw: 7,30348133702833
Ich denke, das sind sicher Rundungsfehler.
Wie auch immer, mein Problem ist, dass diese Werte sehr unrealistisch sind. Die Distanz sollte ca. 10 km betragen und das wird auch bei Online-Diensten, die die Distanz aufgrund der PLZ ermitteln, so bestätigt.
Wie komme ich an realistischere Distanzen? Ist der Datenbestand vielleicht nicht der Richtige? Welche alternativen PLZ-Daten kann ich verwenden, unter der Prämisse, dass die Berechnung offline erfolgen soll?
Danke
Magnus
Antworten
-
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 12. Oktober 2017 14:25
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 26. Oktober 2017 11:33
-
Deine Berechnung sollte auf jeden Fall in Ordnung sein.
Am wenigsten plausibel erscheint mir der verlinkte Dienst. entscheidend ist auch immer welche Koordinaten in den entsprechenden Datenbanken hinterlegt sind.
Mir ist z.B. aufgefallen dass die Postleitzahl im Google Earth einen anderen Punkt liefern als die Geo-Koordinaten aus Deiner importierten Datenbank, siehe Screenshoot:
Die Differenz zwischen Deinen Geokoordinaten und den Koordinaten aus GoogleEarth beträgt nur einige hundert Meter.
Die größte Abweichung hat der Dienst "www.Postleitzahl.org/Entfernung.html" leider zeigt dieser Dienst nicht die verwendeten Koordinaten an, und hier wird der Fehler liegen.
Der relative Fehler ist natürlich bei nahe aneinander liegenden Orten größer als bei zwei Städten mit großem Abstand.
Lasse Dir mal den Abstand von zwei Orten berechnen bei dem der Eine in Norddeutschland und der Andere in Süddeutschland liegt.
Grüße
Roland
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 12. Oktober 2017 14:25
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 26. Oktober 2017 11:34
Alle Antworten
-
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 12. Oktober 2017 14:25
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 26. Oktober 2017 11:33
-
Hallo,
ich habe die Werte z. B. mit diesem Dienst verglichen:
http://www.postleitzahl.org/entfernung.html
Dort wird 10.62 km angezeigt und das ist angeblich Luftlinie...
Mir ist klar, dass das so genau nicht sein kann, aber die Abweichung finde ich schon groß.
Magnus
-
Deine Berechnung sollte auf jeden Fall in Ordnung sein.
Am wenigsten plausibel erscheint mir der verlinkte Dienst. entscheidend ist auch immer welche Koordinaten in den entsprechenden Datenbanken hinterlegt sind.
Mir ist z.B. aufgefallen dass die Postleitzahl im Google Earth einen anderen Punkt liefern als die Geo-Koordinaten aus Deiner importierten Datenbank, siehe Screenshoot:
Die Differenz zwischen Deinen Geokoordinaten und den Koordinaten aus GoogleEarth beträgt nur einige hundert Meter.
Die größte Abweichung hat der Dienst "www.Postleitzahl.org/Entfernung.html" leider zeigt dieser Dienst nicht die verwendeten Koordinaten an, und hier wird der Fehler liegen.
Der relative Fehler ist natürlich bei nahe aneinander liegenden Orten größer als bei zwei Städten mit großem Abstand.
Lasse Dir mal den Abstand von zwei Orten berechnen bei dem der Eine in Norddeutschland und der Andere in Süddeutschland liegt.
Grüße
Roland
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 12. Oktober 2017 14:25
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 26. Oktober 2017 11:34