C# 根据半径、纬度和经度返回结果

C# 根据半径、纬度和经度返回结果,c#,search,asp.net-mvc-5.2,C#,Search,Asp.net Mvc 5.2,在我的数据库中,我目前拥有所有国家/州和城市,每个城市都有自己的纬度和经度,我通过谷歌反向地理编码 当某个特定的用户访问该网站并说“好的,告诉我在澳大利亚维多利亚州,住在菲茨罗伊市的每个人”在20公里半径范围内,我有菲茨罗伊的纬度和经度,但我不确定如何获得目前不在菲茨罗伊但在20公里半径范围内的其他用户 我确实遇到了这个线程,对我来说它看起来非常有希望,不同的是我将过滤很多记录,这些记录可能是10k,如果不是更多的话,取决于半径和位置。我希望实现一个解决方案,它不仅能给我期望的结果,还考虑到性能

在我的数据库中,我目前拥有所有国家/州和城市,每个城市都有自己的纬度和经度,我通过谷歌
反向地理编码

当某个特定的用户访问该网站并说“好的,告诉我在澳大利亚维多利亚州,住在菲茨罗伊市的每个人”在20公里半径范围内,我有菲茨罗伊的纬度和经度,但我不确定如何获得目前不在菲茨罗伊但在20公里半径范围内的其他用户

我确实遇到了这个线程,对我来说它看起来非常有希望,不同的是我将过滤很多记录,这些记录可能是10k,如果不是更多的话,取决于半径和位置。我希望实现一个解决方案,它不仅能给我期望的结果,还考虑到性能。无论是在MVC控制器中还是在存储过程中

我想知道有没有人做过类似的事情?他们能和我分享他们的知识吗。我不熟悉这种类型的搜索,因此任何信息/链接都将是有益的


请注意,我不希望您为我编写代码,我自己完全有能力做到这一点。

我认为,可能的解决方案是计算所需城市和半径的纬度和经度范围。在这种情况下,您将能够使用简单的WHERE-sql查询获取此范围内的所有用户

例如,您必须找到城市周围N km范围内纬度为X、经度为Y的所有用户。我的想法是,您应该计算满足此条件的纬度和经度的最小值和最大值

一个纬度等于111.3公里。因此,纬度的最小值和最大值可以这样计算:

minX=X-N/111.3

maxX=X+N/111.3

一个经度等于111.3*cos(X),因此:

mixY=Y-N/(111.3*cos(X))

maxY=Y+N/(111.3*cos(X))

在计算了纬度和经度的最小值和最大值之后,您将能够向数据库组成一个查询。它将类似于:


“从…中选择(纬度=minX)和(经度=minY)”

由于您使用的是MVC,所以我假设您使用的是SQL Server数据库。如果是这种情况,那么您可以尝试利用此框架和实体框架中提供的空间数据支持,而不是尝试自己完成所有工作


试试这篇介绍基本知识的博文:

我不确定我是否遵循了你的建议。你能再详细一点吗