Cómo agrupar ubicaciones cercanas de latitud y longitud almacenadas en SQL

Estoy tratando de analizar los datos de los accidentes de ciclo en el Reino Unido para encontrar puntos negros estadísticos. Aquí está el ejemplo de los datos de otro sitio web.http://www.cycleinjury.co.uk/map

Actualmente estoy usando SQLite para almacenar ~ 100k ubicaciones lat / lon. Quiero agrupar lugares cercanos juntos. Esta tarea se llamaanálisis de conglomerados.

Me gustaría simplificar el conjunto de datos al ignorar incidentes aislados y, en cambio, solo mostrar el origen de los grupos donde se produjo más de un accidente en un área pequeña.

Hay 3 problemas que necesito superar.

Actuación - ¿Cómo me aseguro que encontrar puntos cercanos es rápido? Debo usarImplementación de SQLite de unaR-Tree ¿por ejemplo?

Las cadenas - ¿Cómo evito recoger cadenas de puntos cercanos?

Densidad - ¿Cómo tomar en cuenta la densidad poblacional del ciclo? Hay una densidad de población de ciclistas mucho mayor en Londres que en Bristol, por lo que parece haber un mayor número de respaldos en Londres.

Me gustaría evitar escenarios 'en cadena' como este:

En su lugar me gustaría encontrar grupos:

Captura de pantalla de Londres (mano dibujé algunos grupos) ...

Captura de pantalla de Bristol - Densidad mucho menor: el mismo programa que se ejecuta en esta área podría no encontrar puntos negros si no se tuvo en cuenta la densidad relativa.

¡Cualquier punto sería genial!

Respuestas a la pregunta(2)

Su respuesta a la pregunta