【问题标题】:Return results depending on radius latitude and longitude根据半径经纬度返回结果
【发布时间】:2015-04-27 20:05:13
【问题描述】:

在我的数据库中,我目前有所有国家/州和城市,每个城市都有自己的纬度和经度,我使用reverse geocodingvia google 设法获得。

当特定用户访问该网站并在 20 公里半径范围内说“好的,请告诉我所有在澳大利亚、维多利亚州内并居住在菲茨罗伊市的人”,我就会知道菲茨罗伊的纬度和经度但我不确定如何获取当前不在 Fitzroy 但确实落入 20 公里半径范围内的其他用户。

我确实遇到了这个线程,它对我来说看起来很有前途Calculating Distance between two Latitude and Longitude,不同之处在于我将过滤很多记录,根据半径和位置,如果不是更多的话,可能会达到 10k。我正在寻求实施一个解决方案,它不仅能给我想要的结果,而且还考虑到性能。无论是在 MVC 控制器中还是在存储过程中完成。

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

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

【问题讨论】:

    标签: c# search asp.net-mvc-5.2


    【解决方案1】:

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

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

    一个纬度等于 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))

    计算完纬度和经度的最小值和最大值后,您将能够对数据库进行查询。它会是这样的:

    "SELECT FROM ... WHERE (latitude = minX) & (longitude = minY)"

    【讨论】:

    • 我不确定我是否按照您的建议进行操作,您能否了解更多细节
    【解决方案2】:

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

    试试这个展示基础知识的博文:http://weblog.west-wind.com/posts/2012/Jun/21/Basic-Spatial-Data-with-SQL-Server-and-Entity-Framework-50

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 2023-03-15
      • 2012-02-16
      • 1970-01-01
      • 2012-08-15
      相关资源
      最近更新 更多