1

如何Location在 C# 中获取两个之间的距离?如果我有设备的罗盘值,那么获得两个位置之间的方向也会非常好。

有没有这方面的api?

4

1 回答 1

1

这取决于。你所说的位置是什么意思?

案例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
于 2013-02-15T15:46:26.877 回答