我正在使用 PHP 作为服务器脚本语言和 MySQL 作为数据库创建一个具有地理邻近搜索功能的应用程序。
考虑一种情况:
我们有特定的一组对象,这些对象具有与各个对象相关联的纬度和经度位置。在指定位置详细信息(如国家和/或城市)以及 KM 中的范围/半径时,我们使用 MySQL 查询获取位于该半径/范围内的对象,例如:
SELECT [columns]
FROM [column]
WHERE 1=1
AND 3963.191 *
ACOS(
(SIN(PI() * [latitude] / 180) * SIN(PI() * [column].latitude / 180)) +
(COS(PI() * [latitude] /180) * cos(PI() * [column].latitude / 180) * COS(PI() * [column].longitude / 180 - PI() * [longitude] / 180)) )
<= 10
以上计算将给出距离地球上国家/城市中心点 10 公里范围内的对象。
现在假设我有一个对象(带有纬度和经度)不在这 10 公里的区域内,但例如距离地球上的国家/城市中心点 15 公里。该对象的服务范围为 10 KM(提供服务范围为 10 KM 区域)。
现在的问题是,如果我正在寻找距国家/城市中心点 10 公里范围内的对象,那么服务范围为 10 公里的对象(距国家/城市中心点 15 公里)也应包括在搜索中。
我怎样才能使它成为可能?我有国家/城市中心纬度、长坐标、范围/半径(我们必须在其中找出对象)和具有交付半径的对象(例如 10 公里)及其相应的坐标。
你能指导我如何使用 PHP、MySQL 做到这一点吗?