C#中经度/纬度值的双精度或小数点
在C#中存储地理数据时使用什么最好的数据类型? 我会用十进制表示它的正确性,但对十进制浮点数的操作比二进制浮点数(双精度)要慢。
我读到大部分时间你不需要6或7位数字的经度或纬度精度。 双打的不精确性究竟有多重要还是可以忽略?
去加倍,有几个原因。
一个double有多达15个十进制数字的精度。 因此,我们假设这些数字中的三位将位于经纬度值的小数点左侧(最大值为180度)。 这会在右侧留下12位数字的精度。 由于纬度/长度为〜111km,这12个数字中的5个会使我们精确到米。 3位数字可以使我们精确到毫米。 剩下的4位数字可以让我们精确到100纳米左右。 由于双打会从表现和记忆的角度来看,我认为没有理由甚至考虑使用十进制。
不久前,当我开始使用空间编程时,我遇到了这个问题。 我前一段时间看过一本书,这让我意识到了这一点。
//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的东西,只需将该点转换为十六进制并存储它。 我经过很长时间的使用空间知道这是最安全的。
链接地址: http://www.djcxy.com/p/93911.html