SQL-Statement zum Gruppieren von Koordinaten. Bitte um Hilfe.

Kelley Courtney

Neuer Benutzer
Beiträge
1
Hallo allerseits,

ich suche eine Lösung, um Koordinaten in einer Datenbank zu gruppieren, die ähnlich sind.

Meine Lösung ist folgendes Statement:

SELECT * FROM (SELECT uid, accuracy, longitude, latitude, concat(round(latitude,3),\"_\",round(longitude,3)) as latitudex, max(timestamp) as timestamp from x_location group by latitudex order by timestamp desc limit 200) as sonstiges order by timestamp asc;


Die Werte werden auf die dritte Stelle gerundet und dann zum Gruppieren in einem neuen Feld zusammen gefügt. Jetzt möchte ich aber auch Koordinaten mit in die Gruppe einbeziehen, von denen einer der Werte (Latitude oder Longitude) ein wenig höher liegt. Also theoretisch müsste ich auch die Entfernung zwischen zwei Punkten berechnen und wenn diese z.B. <=25 Meter ist, dann sollten die Punkte gruppiert werden.

Hier mal ein paar Beispiele:

latitude longitude timestamp Neues_Feld
50.3021194 6.9068089 1376319155 50.302_6.907
50.3021194 6.9068089 1376319294 50.302_6.907
50.3021194 6.9080000 1376319500 50.302_6.908

Die ersten beiden Felder werden gruppiert und das Feld mit dem höheren Timestamp wird genommen. Das dritte Feld liegt aber ziemlich dicht dabei und sollte nach Möglichkeit auch weggruppiert werden. Wie kann ich das erreichen?

Macht es beispielsweise Sinn, beispielsweise die Werte nach der vierten Stelle mit Truncate abzuschneiden und dann zu runden? Ist das besser? round(truncate(longitude,4),3) + round(truncate(latitude,4),3)...

Wie könnte ich in einer dynamischen Abfrage die Entfernungen berechnen und das als Grundlage für die Abfrage nehmen? Also idealerweise eine Art Umkreissuche von Koordinaten innerhalb einer Abfrage...

Vielen Dank für mögliche Rückantworten.

Danke, Grüße, Kelley
 
Werbung:
Oben