如何计算一个位置与另一个位置之间的距离/距离(c#)

嗨,我想知道如何非常准确地计算当用户接近30英尺的另一个指定位置,可能有许多指定的位置,那么最好的方法是什么?

*示例场景; 移动应用程序用户移动到其应用程序的许多指定位置附近(30英尺)..(我如何计算2个位置之间的距离,即移动用户和其他位置)

提前致谢

最好的方法是使用“空间启用”数据结构来存储要测试的位置列表。 距离本身是使用网上到处记录的众所周知的公式计算的( 大圆距离 , 地理距离 , 文森公式 …)

最简单的结构是kd-tree :它允许存储一组坐标并快速找到到给定位置的最近点。 该结构易于掌握,操作非常容易编程(您甚至可以找到一个可以完成所有这些操作的库),并且它足够快速满足移动需求。

除了kd-tree之外,你的问题解决了最近邻搜索, 维基百科上有详细记录 。 您会发现有足够的数据结构来存储您的位置,并搜索最近的位置。

在任何情况下,请勿执行完整搜索(将当前位置与整个存储位置集进行比较)。 这种算法的时间复杂性在很大程度上取决于您测试的位置数量,您所做的比较越少,您找到解决方案的速度就越快。 全搜索涉及太多的比较,如果位置数量与设备的处理能力相比太高,您将使移动设备在找到最近的位置之前爬下来停止。

回到我的高中数学知识,你可以使用毕达哥拉斯定理来获得那个距离。 取点a和b,将它们平方并加在一起。 然后取平方根。

var distance = Math.Sqrt(a*a + b*b); 

为了扩展Kon上面的答案,这正是我开始为我正在处理的应用程序所做的事情。 这可能是使用相对较少数量的航路点的最佳方式。

然而,在我的应用程序中,我可以有数以万计的航点进行比较,而不是一遍又一遍地进行数学运算,我稍微扩展了这个想法。 由于所有的点都在英国境内,我选择了三个固定点(在我的情况下,苏格兰北部的一个点,康沃尔的一个点,以及多佛附近的英吉利海峡的一点)当我保存一个新的航路点时,我计算了到达的距离。这些固定点中的每一个。 如果我需要拉出靠近另一个已知位置的点,我可以在数据库中相当简单地比较这些路点的距离,并且只能拉回那些接近的点。 通过使用三角测量,所涉及的数学是微不足道的,我看到了显着的速度增加。

编辑我现在还要查看Adrien Plisson的NNS链接,看看这是否会对我有所帮助。 🙂

最简单的方法是使用GeoCoordinate类,该类具有GetDistanceTo方法,该方法采用另一种方法并返回两者之间的实例。