如何计算一个位置和另一个位置之间的距离/接近度(c#)

如何计算一个位置和另一个位置之间的距离/接近度(c#),c#,asp.net,math,windows-phone-7,geolocation,C#,Asp.net,Math,Windows Phone 7,Geolocation,嗨,我想知道当一个用户接近另一个指定的位置,比如说30英尺,可能有许多指定的位置,那么最好的方法是什么 *示例场景;移动应用程序用户移动到其应用程序之一的多个指定位置的距离(30英尺)(我如何计算两个位置(即移动用户和其他位置)之间的距离) 提前感谢最好的方法是使用“空间启用”数据结构来存储要测试的位置列表。距离本身是使用网络上随处可见的著名公式计算的(,…) 最简单的这种结构是:它允许存储一组坐标并快速找到离给定位置最近的点。它的结构很容易掌握,操作也很容易编程(你甚至可以找到一个实现所有这些

嗨,我想知道当一个用户接近另一个指定的位置,比如说30英尺,可能有许多指定的位置,那么最好的方法是什么

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


提前感谢

最好的方法是使用“空间启用”数据结构来存储要测试的位置列表。距离本身是使用网络上随处可见的著名公式计算的(,…)

最简单的这种结构是:它允许存储一组坐标并快速找到离给定位置最近的点。它的结构很容易掌握,操作也很容易编程(你甚至可以找到一个实现所有这些功能的库),而且速度足够快,可以满足移动设备的需要

除了kd树,您的问题将解决为最近邻搜索,即。您会发现有大量的数据结构来存储您的位置,并搜索最近的位置


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

回到我高中的数学知识,你可以用它来获得距离。取a点和b点,将它们平方并相加。然后取平方根

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

为了进一步说明Kon的回答,这正是我目前正在开发的一个应用程序所要做的。这可能是使用相对较少的航路点的最佳方式

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


编辑我现在还要查看Adrien Plisson的NNS链接,看看这是否会进一步帮助我。:)

最简单的方法是使用GeoCoordinate类,该类有一个方法,该方法接受另一个方法并返回两者之间的数据。

可能无法真正理解这个问题。你有用户坐标和“有趣的东西”坐标吗?我想你要求的不仅仅是“我如何计算两点之间的距离”?它有点像带gps wp7的标签、多功能手机。。上传到azure的玩家和位置列表会在服务器和其他玩家手机上不断更新。。当前用户从azure服务获取这些玩家位置的列表,我想根据返回的位置计算距离,如果用户距离另一台手机20或30英尺以内,我希望做一些事情。如果我有多个位置,是否需要一个列表,这将有多大的效率?