C# 以DB为单位,查找在横向和纵向半径内的所有点

C# 以DB为单位,查找在横向和纵向半径内的所有点,c#,.net,distance,C#,.net,Distance,我在DB SQL Server中已将点保存在两个字段中-lat和long 我得到了点,我想从我的数据库中找到所有点,半径为步行5分钟 最好的方法是什么 我读到有一种方法可以用GeoDanjo做到这一点。但我知道它不适用于SQL Server 如果您以地理类型保存数据,也有其他方法可以做到这一点,但它也不相关。选择您的字段,其中sqrt((lat-lat1)^2+(long-long1)^2)

我在DB SQL Server中已将点保存在两个字段中-lat和long

我得到了点,我想从我的数据库中找到所有点,半径为步行5分钟

最好的方法是什么

我读到有一种方法可以用GeoDanjo做到这一点。但我知道它不适用于SQL Server

如果您以地理类型保存数据,也有其他方法可以做到这一点,但它也不相关。

选择您的字段,其中sqrt((lat-lat1)^2+(long-long1)^2)<您的距离;
SELECT your-fields WHERE sqrt ( ( lat - lat1 )^2 + ( long - long1 )^2 ) < your-distance;
其中,lat1和long1是参考点值


非常粗略地近似短距离(正如有人在评论中指出的那样)。

我不知道这是否是最好的方法,但是,如果你忽略地球的曲率(5分钟的步行不够精确,不相关),你可以使用毕达哥拉斯。我们应该用哪种类型来写距离?对不起,我过于简化了。。。您需要将角度转换为距离。不过,使用SQL查询的原理是相同的。我认为MySQL有地理空间数据类型和按半径进行的邻近查找,这正是您想要的。也许值得研究一下在MySQL中是如何实现的,因为我觉得上面的方法非常粗暴,而且可能需要大量的处理。为了性能,您可能希望在已经选择了abs(lat-lat1)