sql >> Base de Datos >  >> RDS >> Mysql

¿Calculando qué puntos (latitud, longitud) están dentro de una cierta distancia en mysql?

Si está buscando un algoritmo de aproximación, le sugiero que busque un algoritmo k-means o un grupo jerárquico, especialmente una curva monstruosa o una curva de relleno de espacio. En primer lugar, puede calcular un árbol de expansión mínimo del gráfico y luego eliminar los bordes más largos y costosos. Luego, el árbol forma muchos árboles pequeños y puede usar k-means para calcular grupos de puntos, es decir, grupos.

"El algoritmo de agrupamiento k de un solo enlace... es precisamente el algoritmo de Kruskal... equivalente a encontrar un MST y eliminar los bordes más caros k-1". Consulte, por ejemplo, aquí:https://stats.stackexchange.com/ preguntas/1475/software-de-visualización-para-agrupamiento .

Un buen ejemplo de una curva monstruosa es la curva de hilbert. La forma básica de esta curva es una forma de U y al copiar muchas de ellas juntas y girarlas, la curva llena el espacio euclidiano. Sorprendentemente, un código gris puede ayudar a descubrir la orientación de esta forma de U. Puede consultar la curva de hilbert quadtree de índice espacial de Nick artículo de blog sobre más detalles . En lugar de calcular el índice de la curva, puede armar un quadkey como en los mapas de Bing. El quadkey es único para cada coordenada y se puede utilizar con operaciones de cadena normales. Cada posición en la clave es parte de la curva en forma de U y, por lo tanto, puede seleccionar esta región de puntos para seleccionar parcialmente de izquierda a derecha desde la tecla cuádruple.

En esta imagen puedes ver que el polígono verde se encuentra usando una curva de hilbert:

Puede encontrar mis clases de php aquí:http://www.phpclasses.org/package/6202-PHP-Generate-points-of-an-Hilbert-curve.html