2008-11-16 22 views
5

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

1

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.

5

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.

0

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

1

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.

+0

Los tipos de datos son GEOGRAFÍA y GEOMETRÍA. Él querría usar GEOGRAFÍA. –

0

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.

1

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.

Cuestiones relacionadas