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数据库。如果是这种情况,那么您可以尝试利用此框架和实体框架中提供的空间数据支持,而不是尝试自己完成所有工作
试试这篇介绍基本知识的博文:我不确定我是否遵循了你的建议。你能再详细一点吗