Desidero memorizzare migliaia di punti di latitudine/longitudine in un db MySQL. Ho avuto successo nell'impostare le tabelle e aggiungere i dati usando le estensioni geospaziali dove la colonna 'coord' è un punto (lat, lng).Come utilizzare estensioni geospaziali MySQL con geometrie sferiche
Problema:
voglio trovare rapidamente le voci più vicini alla 'N' di latitudine e longitudine gradi 'X' gradi 'Y'. Poiché la funzione Distance() non è stata ancora implementata, ho usato la funzione GLength() per calcolare la distanza tra (X, Y) e ciascuna delle voci, l'ordinamento per la distanza ascendente e la limitazione ai risultati 'N'. Il problema è che questo non sta calcolando la distanza più breve con la geometria sferica. Il che significa che se Y = 179,9 gradi, l'elenco delle voci più vicine includerà solo le longitudini di partenza a 179,9 e decrescenti anche se esistono voci più ravvicinate con le longitudini che aumentano da -179,9.
Come si gestisce in genere la discontinuità in longitudine quando si lavora con le geometrie sferiche nei database? Deve esserci una soluzione facile a questo, ma devo solo cercare la cosa sbagliata perché non ho trovato nulla di utile.
Devo semplicemente dimenticare la funzione GLength() e creare la mia funzione per calcolare la separazione angolare? Se lo faccio, sarà ancora veloce e sfrutterà le estensioni geospaziali?
Grazie!
josh
UPDATE:
This è esattamente quello che sto descrivendo sopra. Tuttavia, è solo per SQL Server. Apparentemente SQL Server ha un Geometry e Tipi di dati geografici. La geografia fa esattamente ciò di cui ho bisogno. C'è qualcosa di simile in MySQL?
Grazie per la risposta. Che cosa tipicamente usano le persone per questo? Ho visto la pagina che hai collegato un po 'indietro, ma questo sembra risolvere solo il problema di trovare i punti più vicini alla latitudine/longitudine data. Non risolve il problema di richiedere tutti i punti all'interno di una regione. L'utilizzo del roll proprio metodo non consente di richiedere tutti i punti da 178 lon a -178 lon e da 30 lat a 35 lat (area rettangolare). – Joshua
Io uso [PostGIS] (http://postgis.refractions.net/). Ci sono anche diverse librerie open source che possono essere usate: check out [osgeo] (http://www.osgeo.org/).Potrebbe essere eccessivo se tutto ciò che stai facendo è un calcolo relativo della distanza. – Seth