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

Consulta los valores de la base de datos según la ubicación del usuario

Hay una pregunta que compara las capacidades de varias bases de datos espaciales, GIS:¿PostGIS/PostgreSQL frente a MySql frente a SQL Server? , donde Postgis resulta bastante ganador sobre MySQL.

Ya sea que use MySQL o Postgis, sería mucho mejor, si puede, almacenar sus valores de latitud y longitud como una geometría/geografía (Punto), como las funciones que se pueden usar para encontrar cosas cercanas, ST_Distance , ST_Distance_Sphere y el más oscuro <-> operador , consulte Buscar n vecinos más cercanos para Punto dado usando PostGIS? (por ejemplo, uso) trabaje directamente en columnas de geometría/geografía. Aún más importante, puede agregar un índice espacial , que estas funciones necesitan para funcionar correctamente, lo que superará las búsquedas en columnas de latitud y longitud indexadas por separado por un amplio margen (esto dependerá del tamaño de la tabla, pero aumentará a medida que crezca el tamaño de la tabla),

En Postgis, puede convertir latitud y longitud en una geometría 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);

En este punto, podrá realizar consultas muy eficientes para encontrar puntos cerca de otros puntos, usando cualquiera de los ejemplos en los enlaces anteriores.

Puede hacer cosas similares en MySQL, aunque no admite un sistema de referencia espacial, es decir, el 4326 anterior, que significa lat/lon, y carece de una función ST_MakePoint, por lo que necesitaría usar STGeomFromText y concatenar el lat/ juntos para hacer un PUNTO. También hace todo en coordenadas planas, como han dicho Claudio y otros, lo cual no es un problema con Postgis.

Pido disculpas por una respuesta larga y algo tangencial, pero después de haber realizado varias migraciones entre bases de datos con grandes cantidades de datos (MySQL, SQL Server y Postgres/GIS) y haber cometido muchos errores en el camino, espero poder ponerlo en marcha. dirección correcta (y agregue un poco de prueba futura, si desea comenzar a usar alguna otra funcionalidad espacial, que Postigs tiene a montones).