获取地理坐标附近的地方

时间:2014-08-17 10:46:40

标签: php mysql geolocation

我有一个填充了地理坐标(DB 2)的数据库,如45.062792,8.892737,另一个有其他坐标(DB 1)。

我想使用DB 1的一个坐标然后我想在用户给出的半径(例如10 km,5 km,500 mt)中计算DB 2中所有在先前给出的半径内的行。

我想在没有(例如)谷歌地图或其他在线地图的情况下计算所有结果,因为对使用情况有限制,我希望能够通过我的服务器上的php代码管理结果。

1 个答案:

答案 0 :(得分:2)

使用纬度/经度坐标和半径作为输入使用Haversine公式。 (我假设您将坐标存储为单独的lat和lon列。)

您的查询大致如下所示:

SELECT *, 3956 * 2 * ASIN(SQRT(POWER(SIN((@orig_lat - abs(tablename.lat)) * pi()/180 / 2),2) + COS(@orig_lat * pi()/180 ) * COS( 
abs
(tablename.lat) *  pi()/180) * POWER(SIN((@orig_lon – tablename.lon) *  pi()/180 / 2), 2) ))
as distance
FROM tablename
HAVING distance < @radius
ORDER BY distance 
LIMIT 10;

将@orig_lat替换为给定的lat值,将@orig_lon替换为给定的lon值,将@radius替换为以km为单位的值。

这将根据您在给定半径内的DB1坐标返回DB2中的所有坐标。

此处有更多信息:http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL