2012-06-14 12 views

答えて

12

あなたは、より正確なGPS座標をしたい場合は、[はい小数を移動するための方法です。

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 

人々が山車を使用する理由は、彼らは通常、ほとんどのユースケースのために十分に正確であるということで、ストアに少ないスペースを使用します。あなたのような移行でそれらを作成することができます。

+0

@jac「http:// www.ruby-forum.com/topic/208222」を参照してください。なぜdecimalで問題が解決されないのですか。 – Anil

+0

@Anil私はフォローしていません。私は高精度のGPS座標のために浮動小数点の代わりに私のアプリケーションでこれを使用し、私はそれが期待どおりに動作します。 –

1

小数点以下を100%の精度で求めたい場合は、10 ** n(nは希望の精度)を乗算し、整数として格納します。

Floatオブジェクトは、ネイティブアーキテクチャの倍精度浮動小数点表現を使用して不正確な実数を表します。

参照:

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

地球赤道円周の周り4万キロと経度が360度にわたるので、赤道近く1度約110キロに相当することになります。

したがって:

  • 0桁精度:桁精度
  • 2キロ11±:
  • 1桁精度キロ110±±1.1キロ
  • 3桁の精度:±110メートル
  • 4桁精度:±11 m
  • 5桁精度:±1.1 m
  • 6桁精度: 11センチメートル
  • 7桁の精度±:1.1センチメートル

±しかし、近いあなたが極に移動し、小さい方のParallelsのlenghtsになります。 たとえば、のパリの緯度が48度の場合、1度はcos(48) * 110 = 74 kmに相当します。したがって

  • 0桁の精度:74キロ
  • 1桁精度±:7.4キロ
  • 2桁の精度±:0.74キロ
  • 3桁の精度±:74メートル
  • ±
  • 4桁精度:±7.4 m
  • 5桁精度:±0.74 m
  • 6桁精度n:±7.4cm
  • 7桁精度:±0。74 cm

したがって、DECIMAL(10,7)のフィールドは、かなり正確にあなたを満足させるのに十分でしょう。

+1

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

1

Paulの答えで分かるように、使用するケースによって異なります。
浮動小数点数は、およそ6桁の精度を提供します。
±11cmは、例えば住所のようにかなり受け入れられます。アドレスを表示している場合は、丸め誤差を合成する算術演算を行うつもりはありません。

関連する問題