我正在创建一个具有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吗?

有帮助吗?

解决方案

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

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

&#8730;(( x 0 - x n )&#178; +(< em> y 0 - y n )&#178;)&#8804; r 0 + r n

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top