确定球体上的纬线圆和圆是否重叠

时间:2009-03-04 13:14:44

标签: php mysql google-maps geocoding

我正在创建一个具有Geo Proximity Search功能的应用程序,使用PHP作为服务器脚本语言,MySQL作为Databse。

考虑一下情况:

我们有一组具有与各个物体相关的纬度和经度位置的物体。在指定国家和/或城市等位置详细信息以及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公里(服务范围为10公里)。

现在的问题是,如果我正在从国家/城市中心点寻找10公里范围内的物体,那么具有10公里服务范围的物体(距国家/城市中心点15公里)也应包括在搜索中

我怎样才能成功?我有国家/城市中心lat,长坐标,范围/半径(我们必须找到对象)和具有交付半径的对象(例如10 KM)及其相应的坐标。

你能指导我如何使用PHP,MySQL吗?

1 个答案:

答案 0 :(得分:3)

使用MySQL空间扩展 http://dev.mysql.com/doc/refman/5.1/en/spatial-extensions.html

另一方面,如果您只想识别与给定圆相交的其他圆,则它们将是所有这些圆,其中圆之间的距离小于半径之和。换句话说,假设您的原始点和范围由三元组给出( x 0 y 0 r 0 ),你需要所有( x n y n r n

√(( x 0 - x n )²+( y 0 - y n )²)≤ r 0 + r n