longitude latitude inversa gratis google geocodificacion from address database geolocation geocoding

database - latitude - La manera más eficiente de almacenar geolocalizaciones en una base de datos



get address from latitude longitude google maps (6)

Sé que postgres tiene un tipo de datos para almacenar coordenadas geográficas. Pero estoy buscando una solución agnóstica RDBMS. Actualmente estoy usando Decimal (25,20) en MySQL. Puede que esté usando estos datos para buscar estas ubicaciones según una distancia dada desde una ubicación determinada más adelante. ¿Cuál sería el mejor enfoque para almacenar este tipo de datos?


AFAIK, MS SQL Server 2008 tiene soporte para GeoLocations como un DataType. Sé que estás usando MySQL, pero pensé que lo mencionaría en esta pregunta.


El estándar está aquí . Aunque es demasiado para un caso de uso simple como el suyo, puede brindarle algunas ideas sobre por qué puede ser mejor usar algunos paquetes compatibles con OGC que muchas bases de datos tienen actualmente, incluso MySQL .

En su defecto, y suponiendo que implementará los algoritmos para los cálculos de distancia, funcionará cualquier número de punto flotante que tenga la precisión que necesita.


Otra buena técnica es multiplicar los valores por una constante y almacenarlos como valores enteros. Usar enteros solo también puede ayudar a acelerar los cálculos.

A menos que necesites precisión, solo deberías almacenar 5 valores después del punto decimal.

Esta especificación de almacenamiento de datos de latitud y longitud proporciona un gráfico que muestra la precisión frente a lugares decimales.

# decmal places, example, precision 5 51.22135 ± 0.8 m 6 50.895132 ± 0.08 m

7 funcionaría para ser de 8 mm, o alrededor de 0.314 pulgadas.


Siempre acabo de utilizar columnas de coma flotante de 4 bytes para ahorrar latitud y longitud, porque el error de precisión es mucho menor que la precisión de los dispositivos que usamos. Puede que este no sea el caso con su aplicación, pero si es así, no puede obtener mucho más RDBMS-agnóstico que un flotador.


Siguiendo la respuesta de @ vfilby , ¿por qué no almacenar las dos mitades del número como dos tipos de int por separado?


La respuesta de vfilby es probablemente la mejor, sin embargo, muchos RDBMS tienen mejor soporte para indexar campos de caracteres que indexar campos enteros densos (o de coma flotante).

Solo por esta razón, podría recomendar transformar primero los datos: si quiere encontrar valores "cercanos" a otro valor, también querrá una función que lo preserve, tal vez convirtiendo a base36 y _ -padding al punto decimal, pero si solo necesitas una coincidencia exacta, casi cualquier función rápida de hash servirá.

De nuevo: si no tiene muchos datos, o si no está utilizando un RDBMS como este, haga lo que sugirió vfilby .