Hi,
ich habe eine Tabelle mit Koordinaten (Latitude und Longitude in separaten Feldern). Jetzt möchte per
SQL den Datensatz abfragen, der an nahsten zu einer angegebenen Koordinate liegt.
Noch schöner wäre es natürlich z.B. die 5 nahsten zu finden, aber ich wäre auch erst mal mit 1 zufrieden.
Wie könnte man sowas unter
SQL realieren?
Mein erste Ansatz ist folgendermaßen:
Code:
SELECT 53-lat as DiffLat, 10-lon as DiffLon, ABS((53 - lat) * (10 - lon)), lat, lon, id, FROM CPoints order by ABS((53 - lat) * (10 - lon));
In dem Beispiel wird als gesuchte Koordinate 53 Lat und 10 Lon angenommen.
Ich multipliziere die Differenz der Latitude zu meiner gesuchten Latitude mit der Longitude der gesuchten Longitude, und nehme davon die Erste.
Das sieht zwar auf den ersten Blick recht gut aus, bringt mir aber nicht, da dann alle die sehr genau an der Latitude oder Longitude liegen möglicher oben in der Ergebnisliste, aber trotzdem weiter von der gesuchten Koordinate entfernt als welche die weiter unten in der Liste stehen. So würde wenn die Latitude genau mit der gesuchten Latitude übereinstimmt mit 0 multipliziert, und würde somit ganz oben in der Liste herauskommen, obwohl der Punkt vielleicht mit seiner Longitude hunderte Kilometer weit weg wäre.