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

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

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

去加倍,有几个原因。

  • 三angular函数只能用于双精度
  • 双倍精度远远超出了纬度/经度值所要求的任何值
  • 第三方模块(例如DotSpatial )也使用double来表示坐标

一个double有十五个十进制数字的精度。 所以,假设这些数字中的三位将在经纬度值的小数点左边(最大值为180度)。 这会在右侧留下12位数字的精度。 由于纬度/长度为〜111km,这12个数字中的5个将使我们精确到米。 还有3位数字可以使我们精确到毫米。 剩下的4位数字将使我们精确到100纳米左右。 由于双能赢得performance和记忆的angular度,我没有理由甚至考虑使用十进制。

我刚开始使用空间编程时,也遇到过这个问题。 我前一段时间读了一本书,这引起了我的注意。

 //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只是将点转换为hex并将其存储。 经过长时间的使用,我知道这是最安全的。

Interesting Posts