5

私はサーバー側(JAVAプラットフォーム)に緯度と経度を格納しています。floatとdoubleのデータ型は緯度と経度を格納するのに適していますか?

これらの値を格納するには、サーバー側でfloatとdoubleのデータ型を使用しています。フロートとダブルはのの丸め精度の問題があるため、floatとdoubleは推奨される基本データ型ではありません(専門的な方法で通貨を使用することはお勧めしません)。

私の場合は、サーバー側で格納されている座標(緯度と経度)を単に比較しています。

質問1:

データ型(floatまたはdouble)との座標を比較すると、将来的にすべての問題を作るのだろうか?

質問2:

大きな小数を使用すると良いでしょうか?または浮動小数点または二重で行く方が安全ですか?

私をご案内ください。

+0

小数点以下6桁(浮動小数点の最大精度)で十分です。 http://gis.stackexchange.com/a/8674を参照してください。 – Martin

+0

@JarrodRobersonこの質問はJavaに関するものです。もう1つの質問はMySQLに関するものです。この質問はどうやって重複するのですか? – Stijn

答えて

6

安全性の問題ではありません。正確さの問題です。 私はフロートを考慮しませんでしたが、ダブルスは私がここで理想的だと思います。 倍精度浮動小数点数から得ることができる最も精度の高いものを見て、正規の経度/緯度の値に合っているかどうかを確認するだけです。それ以上は十分だと思います。

それ以外のBigDecimalは、あなたがあなたがあなたが望むthe accuracyで始まる必要があり、より精度

+1

好奇心が強いのであれば、ダブルがどれだけの精度で扱うことができるか知りたい。私の見解によれば、14桁の精度を扱うことができます(私の場合)。だから私はそれが私にとって良いと思う。 doubleが20桁を超えて処理できる場合、doubleは私のアプリケーションにとって理想的です。あなたの提案をお願いします。 – ArunRaj

+0

あなたが使用しているJavaに応じて、doubleプリミティブデータ型は64ビットで、正弦などの場合はもちろん1桁です。 ここで精度に関する情報を見つけることができます:http://docs.oracle.com/ javase/specs/jls/se7/html/jls-4.html#jls-4.2.3 – ThaBomb

+0

貴重なご指導をいただきありがとうございます。この答えは – ArunRaj

2

あなたの経度または緯度の値を四捨五入する必要はありませんので、どちらかを使用してください。 Doubleはより正確ですので、それがあなたの決定において最も重要な要素になるようにしてください。

long/lat値の精度はどれくらいですか?

マップ上の正確な精度を得るには、大きな10進数を見たいかもしれませんが、あいまいな値の場合はfloatで十分です。

+1

20桁が必要な場合があります。しかし、わからない。私の観察によれば、これが当てはまる。もちろん、私は丸め操作をしていません。 (swLat <= latitude)&&(swLng <= longtitude)&&(neLat> = latitude)&&(neLng> = longtitude))...もし私がdoubleで実装していれば、状態は正常に動作しています。しかし、それを使用することを恐れ、私は正確さが必要なので。私の場合、Doubleを使うのが理想的な選択肢ですか? – ArunRaj

11

をしたい場合は、それを使用し、あなたの問題への単純なバックドアです。これを決定したら、適切なデータタイプを選択することができます。

小数点以下5桁(1.1132 m)の精度で十分と判断された場合は、floatと簡単に行けます。計算がより正確になる必要がある場合は、double、さらにはBigDecimalを使用してください。

浮動小数点数を比較する場合は、必要な精度も組み込む必要があります。

+3

+1です。このリンクをチェックすると、必要な精度を知ることができますhttp://en.wikipedia.org/wiki/Wikipedia%3AWikiProject_Geographical_coordinates#Precision – MrUpsidown

関連する問題