2009-07-28 14 views
60

緯度と経度を文字列または浮動小数点(または何か)として保存する必要がありますか?緯度と経度の正しいデータ型ですか? (アクティブレコードで)

(私はレール上でactiverecord/ruby​​を使用しています。

+0

どのデータベースをお使いですか? –

+0

MySQLデータベースに緯度/経度を格納する際に使用する理想的なデータ型は何ですか? –

+0

可能性があります(http://stackoverflow.com/questions/)。 159255/what-is-the-the-the-ideal-data-type-to-use-latitude-in-a-mysql) – Gajus

答えて

16

さらに複雑な地理的計算が必要な場合は、Postgresqlの場合はPostGIS、MySQLの場合はMySQL Spatial Extensionsを調べることができます。さもなければ、浮動小数点数(倍精度は良いアイデアかもしれません)が動作するはずです。

編集:GeoRubyライブラリは、前述のデータベースの両方のための空間/ GISの拡張を操作するためのRailsの拡張子を含むように見えます。

2

私はフロートを使用することをお勧めしますが、実際にはそれほど大きな違いはありません。浮動小数点数は、あなたが将来それを望む場合に計算を行う方が簡単です。

1

通常、Lat/Longをあなたが持っている最大のフロートタイプに保存します。いくつかの緯度(例えば、赤道の近く)では、経度のごくわずかな変化は、表面の距離の大きな違いと同等になります。

私はこれまでに数学をしたくないフィールドであれば、文字列を使うことができます。私はそれを避けるだろう。

16

スペースが有効なデータベースを使用していない場合は、Googleマップrecommendsはサイズ(10,6)の浮動小数点数を使用します。小数点の後に6桁の数字が表示されます。精度を上げたい場合は、それに応じて調整することができます。

112

これは私が使用するものです。

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

値は間隔(-180,180)以内でなければなりません。なぜあなたのスケールは7ではないのですか? – taro

+13

Googleマップのドキュメントから:「テーブルに必要な記憶領域を最小限に抑えるには、lat属性とlng属性が浮動小数点数(10,6)であることを指定できます」 –

関連する問題