Mysql
 sql >> Database >  >> RDS >> Mysql

Calcolare quali punti (latitudine, longitudine) si trovano entro una certa distanza in mysql?

Se stai cercando un algoritmo di approssimazione, ti suggerisco di cercare un algoritmo k-mean o un cluster gerarchico, in particolare una curva mostruosa o una curva di riempimento dello spazio. Prima di tutto puoi calcolare uno spanning tree minimo del grafico e quindi rimuovere i bordi più lunghi e costosi. Quindi l'albero crea molti alberelli e puoi usare i k-mean per calcolare gruppi di punti, ad esempio cluster.

"L'algoritmo di k-clustering a collegamento singolo ... è precisamente l'algoritmo di Kruskal ... equivalente a trovare un MST ed eliminare i k-1 bordi più costosi". Vedi ad esempio qui:https://stats.stackexchange.com/ domande/1475/software-di-visualizzazione-per-clustering .

Un buon esempio di curva mostruosa è la curva di Hilbert. La forma base di questa curva è una forma a U e copiandone molte insieme e ruotandola la curva riempie lo spazio euklidiano. Sorprendentemente un codice grigio può aiutare a scoprire l'orientamento di questa forma a U. Puoi cercare la curva di Hilbert quadtree dell'indice spaziale di Nick articolo del blog con maggiori dettagli . Invece per calcolare l'indice della curva puoi mettere insieme un quadkey come nelle mappe bing. Il quadkey è unico per ogni coordinata e può essere utilizzato con normali operazioni sulle stringhe. Ogni posizione nella chiave fa parte della curva a forma di U e quindi puoi selezionare questa regione di punti da selezionare parzialmente da sinistra a destra dal quadkey.

In questa immagine puoi vedere il poligono verde che si trova usando una curva di Hilbert:

Puoi trovare le mie classi php qui:http://www.phpclasses.org/package/6202-PHP-Generate-points-of-an-Hilbert-curve.html