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

Eseguire query sui valori del database in base alla posizione dell'utente

C'è una domanda che confronta le capacità di vari database spaziali, GIS:PostGIS/PostgreSQL vs. MySql vs. SQL Server? , dove Postgis risulta un vincitore abbastanza chiaro su MySQL.

Sia che tu usi MySQL o Postgis, faresti molto meglio, se possibile, a memorizzare i tuoi valori di latitudine e longitudine come una geometria/geografia (Punto), come le funzioni che possono essere utilizzate per trovare cose nelle vicinanze, ST_Distance , ST_Distance_Sphere e il più oscuro <-> operatore , vedi Trova n vicini più vicini per dato punto utilizzando PostGIS? (ad esempio l'utilizzo) lavora direttamente su colonne geometriche/geografia. Ancora più importante, puoi aggiungere un indice spaziale , di cui queste funzioni hanno bisogno per funzionare correttamente, che supererà le ricerche su colonne di latitudine e longitudine indicizzate separatamente di un ampio margine (questo dipenderà dalle dimensioni della tabella, ma aumenterà all'aumentare delle dimensioni della tabella),

In Postgis, puoi convertire lat e lon in una geometria con:

alter table mytable add column geom (Geometry, 4326);
update mytable set geom = ST_SetSRID(ST_MakePoint(lon, lat), 4326)
create index ix_spatial_mytable_geom on mytable using gist(geom);

A questo punto, sarai in grado di eseguire query molto efficienti per trovare punti vicino ad altri punti, utilizzando uno qualsiasi degli esempi nei link sopra.

Puoi fare cose simili in MySQL, anche se non supporta un sistema di riferimento spaziale, ad es. il 4326 sopra, che significa lat/lon, e manca di una funzione ST_MakePoint, quindi dovresti usare STGeomFromText e concatenare lat/ insieme per fare un PUNTO. Fa anche tutto in coordinate planari, come hanno affermato Claudio e altri, il che non è un problema con Postgis.

Mi scuso per la risposta lunga e un po' tangenziale, ma avendo fatto varie migrazioni tra database su grandi quantità di dati (MySQL, SQL Server e Postgres/GIS) e fatto molti errori lungo la strada, spero di potervi avviare nel giusta direzione (e aggiungi un po' di prove future, se vuoi iniziare a usare qualche altra funzionalità spaziale, che Postigs ha in picche).