Che cosa è un buon modo per memorizzare i dati geografici per i calcoli della distanza

2

Quale sarebbe il modo migliore per archiviare i dati in un database per i calcoli geografici? Supponiamo che io abbia una tabella ItemsForSale abbinata a una tabella Users che trattiene la loro posizione geografica. So che posso usare latitudine e longitudine per cercare oggetti che si trovano entro un raggio di un certo chilometro usando la formula di Lambert per le linee lunghe o la formula di Haversine, ma non sono sicuro che ci sia un approccio migliore per questo.

    
posta Adrian 22.03.2014 - 18:48
fonte

1 risposta

1

Non sono sicuro che database standard come MySql forniscano indicizzazione spaziale. Devi metterli in un indice spaziale persistente. Come gli alberi M Gli indici spaziali sono strutture di dati efficienti in grado di eseguire query di intervallo su metriche di distanza.

Potresti riuscire a trovare un'implementazione di M-tree o altre strutture di dati di indicizzazione spaziale come gli alberi K-D.

EDIT: Dopo che Martijn Pieters ha menzionato MySql con indici spaziali, l'ho cercato. Si scopre che ha un albero R ma il supporto non sembra eccezionale. Io uso solo innodb perché per lo più finisco per richiedere blocchi a livello di riga.

MySQL 5.6 implements an additional set of functions that can help create geo-enabled applications with MySQL. Storing polygons boundaries (ZIP code boundaries for example) is efficient and the new spatial functions (st_within, st_contains, etc) will produce correct results and will use spatial (rtree) indexes (for MyISAM tables only). The OpenGIS standard is very common and it is easy to obtain the data in this format or use the standard application which can “talk” this language. Unfortunately, st_distance function is not very usable for calculating distance between 2 points on Earth and it does not use an index. In this case it is still more feasible to calculate distances manually using the harvesine formula. Hopefully this will be fixed in the next mysql release.

risposta data 29.10.2014 - 09:18
fonte

Leggi altre domande sui tag