C#で地理位置データを保存するときに使用する最適なデータ型は何ですか?正確さのために10進数を使用しますが、10進浮動小数点数の操作は2進浮動小数点数(倍精度)よりも遅くなります。
ほとんどの場合、緯度または経度に6桁または7桁以上の精度は必要ありません。 doubleの不正確さはその場合でも重要ですか、それを無視できますか?
二重に行く、いくつかの理由があります。
Doubleには、最大15桁の精度があります。したがって、緯度/経度の値(最大180度)の場合、これらの数字のうち3桁が小数点の左側にあると仮定します。これにより、右側に12桁の精度が残ります。緯度/経度の程度は〜111kmであるため、この12桁のうち5桁でメーターの精度が得られます。さらに3桁あれば、ミリメートルの精度が得られます。残りの4桁により、約100ナノメートルの精度が得られます。パフォーマンスとメモリの観点からdoubleが勝つため、decimalの使用を検討する理由はありません。
空間プログラミングを始めたとき、私はかなり前にこの質問に直面しました。少し前に本を読んで、これに至りました。
//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進数に変換して保存します。 Spacialを使用して久しぶりに、これが最も安全であることがわかりました。