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?La manera más eficiente de almacenar geolocalizaciones en una base de datos
Respuesta
La norma es here. 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.
De lo contrario, y suponiendo que implementará los algoritmos para 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 necesite una gran precisión, solo debería almacenar 5+ valores después del punto decimal.
Este Latitude Longitude Data Storage Specification da un cuadro 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ían en 8 mm, o alrededor de 0,314 pulgadas.
Siguiendo @vfilby's respuesta, ¿por qué no almacena las dos mitades del número como dos tipos de int por separado?
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.
Siempre he usado columnas de punto flotante de 4 bytes para ahorrar latitud y longitud, porque el error en la 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.
vfilby's answer es probablemente la mejor, sin embargo, muchos RDBMS tienen un mejor soporte para la indexación carácter campos que la indexación de densa número entero (o coma flotante) campos.
Sólo por esta razón, podría recomendar la transformación de los datos en primer lugar: Si usted quiere encontrar los valores de "cerca" otro valor, que, además, querrá una función que conserva esta- tal vez mediante la conversión a base36 y _
Acolchado a el 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 vfilby suggested.
- 1. Manera más eficiente para obtener una fila de datos de la base de datos en ASP.NET
- 2. ¿La manera más eficiente de almacenar URLs en Mysql?
- 3. Manera eficiente de almacenar tuplas en el almacén de datos
- 4. Forma más eficiente de almacenar un valor GUID en la base de datos SQL Server
- 5. Manera eficiente de almacenar imágenes en android
- 6. Manera eficiente de almacenar pares desordenados en una tabla mysql
- 7. MySQL: ¿tipo de datos más eficiente para almacenar notas largas?
- 8. Necesito una forma eficiente de almacenar/consultar json en una base de datos SQL
- 9. Una manera eficiente de guardar una matriz y sus claves en una base de datos
- 10. Java: almacenar de manera eficiente boolean [32]?
- 11. La forma más eficiente de almacenar y acceder a una gran matriz de datos en MySQL
- 12. La forma más eficiente de almacenar direcciones IP en MySQL
- 13. Almacenar en Datos de Sesión vs almacenar en Base de Datos Sql para datos temporales
- 14. Manera más eficiente de monitorear una cola
- 15. manera más eficiente de extraer una cadena
- 16. ¿Cuál es la forma más eficiente de almacenar una matriz de enteros en una columna MySQL?
- 17. Almacenar una estructura de directorio en la base de datos
- 18. ¿La mejor manera de almacenar una matriz en la base de datos MySQL?
- 19. ¿La manera más eficiente de crear miniaturas?
- 20. ¿La mejor manera de almacenar etiquetas en una base de datos?
- 21. ¿Cuál es la mejor manera de almacenar archivos multimedia en una base de datos?
- 22. La mejor manera de almacenar varios indicadores en la base de datos
- 23. Android cargando imágenes al servidor de la manera más eficiente
- 24. ¿La mejor manera de almacenar listas ordenadas en una base de datos?
- 25. ¿Cuál es la mejor manera de almacenar/recuperar datos para un escritorio sin usar una base de datos?
- 26. La mejor manera de almacenar tiempos de eventos en la base de datos (My) SQL
- 27. La manera más eficiente de invertir una matriz numpy
- 28. ¿La manera más eficiente de indexar una matriz devuelta?
- 29. ¿La manera más eficiente de nombrar un avatar de usuario?
- 30. ¿La mejor manera de almacenar span a tiempo en una base de datos MySQL?
Los tipos de datos son GEOGRAFÍA y GEOMETRÍA. Él querría usar GEOGRAFÍA. –