C#の緯度/経度の値の2桁または10進数


96

C#で位置データを格納するときに使用するのに最適なデータ型は何ですか?正確さのために10進数を使用しますが、10進浮動小数点数の演算は2進浮動小数点数(double)よりも遅くなります。

たいていの場合、緯度または経度の精度を6桁または7桁以上必要としないことを私は読んだ。ダブルスの不正確さは重要なのですか、それとも無視できますか?


6
私は反対の質問をしたいと思います。パフォーマンスの違いはさらに重要ですか、それとも無視できますか?
ハインツィ

1
データベースでは、「sql空間データタイプ」を使用して経度と緯度を保存する必要があります
azhar_SE_nextbridge

8
.NET BCL自体がそのGeoCoordinateクラスでdoubleを使用していることに注意してください。これは、精度が十分である可能性があることを強く示しています。
ハインツィ

1
NodaTimeのTzdbZoneLocationもdoubleを使用します。
Rick Davin

4
1)固定小数点を検討します。2)地理座標で三角関数演算を実行する必要がある場合が多く、これらはに対してのみ実装されているためdoubledouble最適な場合があります。
CodesInChaos

回答:


119

に行く、doubleいくつかの理由があります。

  • 三角関数はdoubleでのみ使用できます
  • 倍精度(100ナノメートルの範囲)は、Lat / Lon値に必要なものをはるかに超えています。
  • GeoCoordinateクラスとサードパーティのモジュール(DotSpatialなど)も座標にdoubleを使用します

74

doubleは、最大15桁の精度を持ちます。したがって、緯度/経度の値(最大180度)の場合、これらの数字の3つが小数点の左側にあると仮定します。これにより、右側に12桁の精度が残ります。緯度/経度の程度は〜111kmであるため、これらの12桁のうち5桁でメーターの精度が得られます。3桁多いと、ミリメートルの精度が得られます。残りの4桁は、約100ナノメートルの精度になります。パフォーマンスとメモリの観点からdoubleが勝つため、10進数の使用を検討する理由すらありません。


2
さらに、詳細で正確な説明のための1つ。
Najeeb

4

空間プログラミングを始めたとき、かなり前にこの質問に直面しました。少し前に本を読んだのですが、この本に私を導きました。

//sql server has a really cool dll that deals with spacial data such like
//geography points and so on. 
//add this namespace
Using Microsoft.SqlServer.Types;

//SqlGeography.Point(dblLat、dblLon、srid)

var lat_lon_point = Microsoft.SqlServer.Types.SqlGeography.Point(lat, lon, 4326);

これは、空間データを使用してアプリケーションで作業する場合に最適な方法です。次に、データを保存するには、これをSQLで使用します

CREATE TABLE myGeoTable
{
LatLonPoint GEOMETRY 
}

それ以外、SQL以外の何かを使用している場合は、ポイントを16進数に変換して保存するだけです。私は長い間、空間を使用して、これが最も安全であることを知っています。


LatLonPoint、どの参照またはパッケージを含める必要があったのか、またはc#プロジェクトにどのような「使用法」を見つけられないのですか?(作成テーブルがIdentityモデル/ c#コード用であると仮定します。そのタイプはSSMSでも評価されないためです)。前もって感謝します!
クリス

0

ダブル

答えを組み合わせると、MicrosoftがSqlGeographyライブラリでそれ自体を表現する方法になります

[取得:Microsoft.SqlServer.Server.SqlMethod(IsDeterministic = true、IsPrecise = true)] public System.Data.SqlTypes.SqlDouble Lat {get; プロパティ値 SqlDouble 緯度を指定するSqlDouble値。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.