如何Location
在 C# 中获取两个之间的距离?如果我有设备的罗盘值,那么获得两个位置之间的方向也会非常好。
有没有这方面的api?
如何Location
在 C# 中获取两个之间的距离?如果我有设备的罗盘值,那么获得两个位置之间的方向也会非常好。
有没有这方面的api?
这取决于。你所说的位置是什么意思?
案例1:当位置是地理点(纬度,经度)
你需要通过球面几何。实际上,您应该对球体(或椭圆体或其他球体)进行一些计算。但是避免进行这种复杂计算的最好方法是使用Microsoft.SqlServer.Types.dll
(v.10 或 v.11)。如果您的系统上安装了 SQL Server 2012(或 2008),您可以在这样的地方找到它(否则您可以从网上下载):
"C:\Program Files\Microsoft SQL Server\110\Shared\Microsoft.SqlServer.Types.dll"
然后使用这个dll,你可以声明两种SqlGeography
类型并调用STDistance()
方法,一切都会正确完成。(记住这里没有问题,我不会比这更复杂)。这是代码:
SqlGeography p1 =
SqlGeography.STPointFromText(new System.Data.SqlTypes.SqlChars("POINT( lat1, long1)"), 4326); // SRID of WGS84: 4326
SqlGeography p2 =
SqlGeography.STPointFromText(new System.Data.SqlTypes.SqlChars("POINT( lat2, long2)"), 4326); // SRID of WGS84: 4326
double distance = p1.STDistance(p2).Value;
案例 2:当位置是平面上的简单局部 2D 点 (x, y)
在这种情况下,您可以使用著名的公式来计算距离:
double distance = Math.Sqrt(dx*dx + dy*dy); //dx and dy are the difference of the x and y of the two points