KRT*_*Tac 80 c# latitude-longitude geopoints
在C#中存储地理位置数据时使用的最佳数据类型是什么?我会使用十进制来确切,但对十进制浮点数的操作比二进制浮点数(双)慢.
我读到大多数时候你不需要经纬度或精度超过6或7位数的精度.那么双重的不精确性是否重要,或者可以被忽略?
Wer*_*eit 100
去双,有几个原因.
Mar*_*lug 59
double具有最多15个十进制数字的精度.因此,假设这些数字中的三个将位于小数点左侧的lat/long值(最大值为180deg).这在右侧留下了12位精度.由于纬度/长度为~111km,这12个数字中的5个将为我们提供精度.3个数字将使我们精确到毫米.剩下的4位数将使我们精确到100纳米左右.由于double会从性能和内存的角度获胜,我认为没有理由考虑使用decimal.
小智 7
很久以前,当我开始空间编程时,我就遇到了这个问题。不久前我读了一本书,让我想到了这一点。
//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;
Run Code Online (Sandbox Code Playgroud)
//SqlGeography.Point(dblLat, dblLon, srid)
var lat_lon_point = Microsoft.SqlServer.Types.SqlGeography.Point(lat, lon, 4326);
Run Code Online (Sandbox Code Playgroud)
这是在应用程序中处理空间数据时的最佳方法。然后保存数据在sql中使用它
CREATE TABLE myGeoTable
{
LatLonPoint GEOMETRY
}
Run Code Online (Sandbox Code Playgroud)
否则,如果您使用的不是 sql 的其他内容,只需将点转换为十六进制并存储它。使用空间很长时间后我知道这是最安全的。
小智 5
双倍的
结合答案,这就是 Microsoft 在 SqlGeography 库中表示自己的方式
[get: Microsoft.SqlServer.Server.SqlMethod(IsDeterministic=true, IsPrecise=true)]
public System.Data.SqlTypes.SqlDouble Lat { get; }
Run Code Online (Sandbox Code Playgroud)
适当的价值
sql双精度
指定纬度的 SqlDouble 值。