So gruppieren Sie in SQL gespeicherte geografische Längen- und Breitengrade in der Nähe

Ich versuche, Daten von Fahrradunfällen in Großbritannien zu analysieren, um statistische schwarze Flecken zu finden. Hier ist das Beispiel der Daten von einer anderen Website.http://www.cycleinjury.co.uk/map

Ich verwende derzeit SQLite, um ~ 100k Lat / Lon-Speicherorte zu speichern. Ich möchte Orte in der Nähe zusammenfassen. Diese Aufgabe wird aufgerufenClusteranalyse.

Ich möchte den Datensatz vereinfachen, indem ich einzelne Vorfälle ignoriere und stattdessen nur die Herkunft von Clustern zeige, bei denen mehr als ein Unfall in einem kleinen Bereich stattgefunden hat.

Es gibt 3 Probleme, die ich überwinden muss.

Performance - Wie stelle ich sicher, dass nahe gelegene Punkte schnell gefunden werden. Sollte ich es benutzenSQLites Implementierung von einemR-Tree zum Beispiel?

Ketten - Wie vermeide ich es, Ketten von nahe gelegenen Punkten aufzunehmen?

Dichte - Wie kann man die Bevölkerungsdichte berücksichtigen? Es gibt in London eine weitaus größere Bevölkerungsdichte von Radfahrern als in Bristol, daher scheint es in London eine größere Anzahl von Rückstopps zu geben.

Ich möchte Kettenszenarien wie diese vermeiden:

Stattdessen möchte ich Cluster finden:

London-Screenshot (ich habe ein paar Cluster gezeichnet) ...

Bristol screenshot - Viel geringere Dichte - dasselbe Programm, das in diesem Bereich ausgeführt wurde, findet möglicherweise keine schwarzen Flecken, wenn die relative Dichte nicht berücksichtigt wird.

Irgendwelche Hinweise wären toll!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage