2012-06-14 11 views

Respuesta

12

Si quieres coordenadas GPS más precisos, entonces sí decimales son el camino a seguir. Se pueden crear con una migración como:

create_table "models" do |t| 
    t.decimal "latitude", :precision => 15, :scale => 10, :default => 0.0 
    t.decimal "longitude", :precision => 15, :scale => 10, :default => 0.0 
end 

La razón la gente utiliza flotadores es que por lo general son lo suficientemente precisos para la mayoría de los casos de uso y utiliza menos espacio para almacenar.

+0

@jac Consulte: 'http: // www.ruby-forum.com/topic/208222' y por qué el decimal no resuelve su problema. – Anil

+0

@Anil no estoy seguro de seguir. Utilizo esto en mi aplicación en lugar de flotadores para obtener coordenadas de GPS de mayor precisión y funciona exactamente como esperaba. –

1

Si quiere 100% de precisión con sus decimales, multiplique por 10 ** n (donde n es la precisión deseada) y guárdelo como número entero.

Los objetos flotantes representan números reales inexactos utilizando la representación de punto flotante de precisión doble de la arquitectura nativa.

Ver:

http://www.ruby-doc.org/core-1.9.3/Float.html 
24

Desde Tierra circunferencia ecuatorial es de alrededor de 40.000 kilometros y la longitud se extiende 360 grados, se deduce que cerca del ecuador 1 grados es equivalente a a unos 110 km.

Así:

  • 0 precisión dígitos: ± 110 kilometros
  • precisión 1 dígitos: ± 11 kilometros
  • 2 precisión dígitos: ± 1,1 kilometros
  • precisión 3 dígitos: ± 110 m
  • 4 dígitos de precisión: ± 11 m
  • 5 dígitos de precisión: ± 1,1 m
  • 6 dígitos de precisión: ± 11 cm
  • 7 dígitos de precisión: ± 1,1 cm

Sin embargo, mientras más cerca se muda a los polacos, menores serán las longitudes de los paralelos se convierte. Por ejemplo, cerca de Paris, que tiene una latitud de 48 grados, 1 grado es equivalente a cos(48) * 110 = 74 km.

Así:

  • 0 precisión dígitos: ± 74 kilometros
  • precisión 1 dígitos: ± 7,4 kilometros
  • 2 precisión dígitos: ± 0,74 kilometros precisión
  • 3 dígitos: ± 74 m
  • 4 dígitos de precisión: ± 7,4 m
  • 5 dígitos de precisión: ± 0.74 m
  • 6 digit precisio n: ± 7,4 cm
  • Precisión de 7 dígitos: ± 0.74 cm

Por lo tanto, el campo del tipo DECIMAL(10,7) sería suficiente para satisfacerte con bastante precisión.

+1

https://en.wikipedia.org/wiki/Decimal_degrees –

1

Como puede ver en la respuesta de Paul, depende de su caso de uso.
Un flotador proporciona una precisión de aproximadamente 6 dígitos decimales.
± 11 cm es bastante aceptable para, por ejemplo, una dirección. y si está mostrando direcciones, es poco probable que vaya a realizar operaciones aritméticas que compilarán errores de redondeo.

Cuestiones relacionadas