2009-07-28 14 views
60

¿Debo almacenar la latitud y la longitud como cadenas o flotantes (u otra cosa)?¿Tipo de datos correctos para la latitud y la longitud? (en activerecord)

(Estoy usando activerecord/ruby ​​on rails, si eso importa).

+0

Qué base de datos está utilizando? –

+0

Mysql en desarrollo y postgresql en producción (¿por qué es importante?) –

+0

posible duplicado de [¿Cuál es el tipo de datos ideal para usar cuando se almacenan latitudes/longitudes en una base de datos MySQL?] (Http://stackoverflow.com/questions/ 159255/what-is-the-ideal-data-type-to-use-when-storage-latitude-longitudes-in-a-mysql) – Gajus

Respuesta

16

Si necesita hacer cálculos geográficos más complejos, puede investigar PostGIS para Postgresql o MySQL Spatial Extensions para MySQL. De lo contrario, un flotador (la doble precisión podría ser una buena idea) debería funcionar.

Editar: Parece que la biblioteca GeoRuby incluye una extensión de los carriles para trabajar con las extensiones/GIS espaciales, tanto para las bases de datos antes mencionados.

2

Sugeriría usar flotadores, aunque realmente no hace mucha diferencia. Los flotantes son más fáciles de hacer cálculos si alguna vez lo deseas en el futuro.

1

Generalmente desea Lat/Long almacenado en el tipo de flotador más grande que tenga. En algunas latitudes (p. Ej .: cerca del ecuador), cambios muy pequeños en la longitud pueden equipararse a grandes diferencias en términos de distancia de superficie.

Supongo que si se trata de un campo en el que no querrás hacer ningún cálculo, podrías usar una cadena. Aunque evitaría eso.

16

Si no está utilizando una base de datos habilitada espacialmente, Google Maps recommends usa flotadores de tamaño (10,6). Eso le da 6 dígitos después del decimal; si desea más precisión, puede ajustar en consecuencia.

112

Esto es lo que yo uso:

add_column :table_name, :lat, :decimal, {:precision=>10, :scale=>6} 
add_column :table_name, :lng, :decimal, {:precision=>10, :scale=>6} 
+1

El valor debe estar dentro del intervalo (-180, 180), ¿verdad? ¿Por qué su escala no es 7? – taro

+13

De la documentación de Google Maps: "Para mantener al mínimo el espacio de almacenamiento requerido para su mesa, puede especificar que los atributos lat y lng sean flotantes de tamaño (10,6)" –

Cuestiones relacionadas