C#中经度/纬度值的双精度或小数点

在C#中存储地理数据时使用什么最好的数据类型? 我会用十进制表示它的正确性,但对十进制浮点数的操作比二进制浮点数(双精度)要慢。

我读到大部分时间你不需要6或7位数字的经度或纬度精度。 双打的不精确性究竟有多重要还是可以忽略?


去加倍,有几个原因。

  • 三角函数仅适用于双精度
  • 双倍的精度远远超出了Lat / Lon值所需的任何值
  • GeoCoordinate Class和第三方模块(例如DotSpatial)也使用double来表示坐标

  • 一个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

    上一篇: Double or decimal for latitude/longitude values in C#

    下一篇: EF5, SQL Server, Longitude and Latitude