Ich habe die Aufgabe in einem Projekt ein Datenbank zu erstellen, Daten zu importieren usw. Das alles ist bereits geschehen. Kurz zu den relevanten Daten:
Es handelt sich um Stationen, die über ganz Deutschland verteilt sind. Nun muss ich über eine SQL-Abfrage herausfinden, welche Stationen die minimalste Distanz voneinander aufweisen, also sich am nächsten liegen. Habt ihr eine Ahnung, wie das möglich ist?
OK, aber wenn ich das richtig sehe, dann könnte man hier doch nur ausgehend von bestimmten Orten suchen lassen oder? Ich möchte ja die geringste Distanz haben, die zwischen allen Punkten existiert.
select s1.stationsna, s2.stationsna, st_distance(s1.geom,s2.geom)
from stationen as s1 cross join stationen as s2
where s1.stationsna not like s2.stationsna
order by st_distance
Allerdings wird die Distanz nicht in Metern ausgegeben, sondern im Format “0,0056165” etc.
Muss hier zuvor eine Umrechnung von Geometry in Geography erfolgen oder ist dies auch während der Abfrage möglich?
Dein Where führt dazu, daß Ort1 ↔ Ort2 und Ort2 ↔ Ort1 berechnet wird, also Du machst Dir doppelten Rechenaufwand, denn man kann davon ausgehen, daß Hin- und Rückweg mehr oder weniger gleich sein sollte.
Ich habe den Befehl jetzt nochmal mit st_distance_sphere statt st_distance durchgeführt und nun wird die Gradangabe in Meter umgerechnet.
Den Where-Befehl habe ich eingebaut, um zu verhindern, dass die Distanz zwischen ein und derselben Station berechnet wird. Wie kann ich nun diese von dir angesprochene doppelte Berechnung unterbinden?