【发布时间】:2010-10-11 06:18:57
【问题描述】:
我正在使用 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 做到这一点吗?
【问题讨论】:
-
我只想说这是一段令人印象深刻的 SQL。
-
我不认为更改为 PostGIS 而不是 MySQL 是一种选择?
标签: php mysql google-maps geocoding