【问题标题】:A convoluted/modified Haversine algorithm issue一个复杂/修改过的 Haversine 算法问题
【发布时间】:2015-06-11 17:56:14
【问题描述】:

使用Haversine 算法并使用链接here 我找到了一半的解决方案。那么问题来了:

站在“拿撒勒”的用户 A 周围有 50 公里的雷达,我可以使用上面链接的算法找到该范围内的所有其他用户。现在我的问题是,站在 B 点(纽瓦克附近的用户)的用户也有 50 公里的雷达,与用户 A 的雷达相交。

因此,除了我能够获取的落在用户 A 的 50 公里雷达范围内的结果外,使用上述算法,我还想包括雷达相交的所有用户(如用户 B)。

我不确定这是否是要使用的正确算法,或者我是否应该对我的这个查询采取完全不同的方法。

以下是我编写的查询,用于获取用户 A 的 50 公里雷达范围内的所有用户,我得到了最准确的结果,这是问题的第一部分。

SELECT 
    *
FROM 
    users     
WHERE 
    acos(sin(".$user_location_A['latitude'].") * sin(radians(latitude)) + 
cos(".$user_location_A['latitude'].") * cos(radians(latitude)) * cos(radians(longitude) - 
(".$user_location_A['longitude']."))) * 6371 <= 50

对上述查询的解释如下:

  1. sin(radians(latitude)), cos(radians(latitude)) -- 这里的纬度是每个用户在users表中的列名纬度
  2. cos(radians(longitude) -- 这里的经度是用户表中每个用户的列名经度
  3. 查询末尾的50 是我要创建雷达的 50 公里半径。

【问题讨论】:

  • 不确定你想要什么。所有 A 和 B(删除重复项)只有 A 和 B 中的那些?
  • 所有雷达的半径都一样吗?
  • 对评论 1 的回答: 1. 我需要在 A 的雷达范围内的所有用户(我已经得到) 2. 我还需要雷达与 A 的雷达相交的用户,例如用户 B对评论 2 的回答:不,不一定,每个用户的雷达可能不同,这是一个问题吗?

标签: php google-maps-api-3 distance google-places-api haversine


【解决方案1】:

如果所有雷达的半径为 50 公里,那么任何中心在 A 100 公里以内的雷达都会与它相交。如果它们的半径不同,则感兴趣的距离为 50 公里(A 的半径)+R 公里(其中 R 是 B 的雷达半径)。

【讨论】:

    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多