【发布时间】: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
对上述查询的解释如下:
- sin(radians(
latitude)), cos(radians(latitude)) -- 这里的纬度是每个用户在users表中的列名纬度 - cos(radians(
longitude) -- 这里的经度是用户表中每个用户的列名经度 -
查询末尾的
50是我要创建雷达的 50 公里半径。
【问题讨论】:
-
不确定你想要什么。所有 A 和 B(删除重复项)只有 A 和 B 中的那些?
-
所有雷达的半径都一样吗?
-
对评论 1 的回答: 1. 我需要在 A 的雷达范围内的所有用户(我已经得到) 2. 我还需要雷达与 A 的雷达相交的用户,例如用户 B对评论 2 的回答:不,不一定,每个用户的雷达可能不同,这是一个问题吗?
标签: php google-maps-api-3 distance google-places-api haversine