使用MySQL查找特定距离内的位置

时间:2016-03-15 13:37:46

标签: mysql sql gis distance

我正在处理一项任务,作为项目的一部分,该项目找到特定(纬度,长度)点的特定距离内的位置。我知道如何获得表格中单行的结果,该行具有(纬度,经度)点和相应的距离(在我的情况下由Coverage_Norm_10km给出)。

我的数据库表(Sorted_Range_Cap_Data)具有以下形式:

地点,人口,纬度,经度,海拔高度,Bandwidth_Required,Coverage_Range,Throughput_Range,Coverage_Norm_10km,Throughput_10km

SELECT
  Place, (
   6371 * acos (
    cos ( radians(17.741150) )
    * cos( radians(Latitude) )
    * cos( radians(Longitude) - radians(73.149712) )
    + sin ( radians(17.741150) )
    * sin( radians(Latitude) )
   )
 ) AS Coverage_Norm_10km
 FROM Sorted_Range_Cap_Data
 HAVING Coverage_Norm_10km < (The current row's "Coverage_Norm_10km" value)
 ORDER BY Coverage_Norm_10km
 LIMIT 0, 20;

(资料来源:https://gis.stackexchange.com/questions/31628/find-points-within-a-distance-using-mysql

这里,(17.741150,73.149712)是我数据库表第一行中的(lat,long)点。我想找到距离(纬度,长度)点“Coverage_Norm_10km”距离内的所有位置的集合。

我需要为表格中的每一行重复此操作。

最后,我想最终得到表格中每个(纬度,长度)点(每一行)的位置列表。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

我在nodejs中使用Haversine公式做了类似的事情,这是我的原始查询:

var query = "SELECT id, name, latitude, longitude, ( 3959 * acos( cos( radians(" + req.query.latitude + ") ) * cos( radians( latitude ) ) " +
        " * cos( radians( longitude ) - radians(" + req.query.longitude + ") ) + sin( radians(" + req.query.latitude + ") ) * sin(radians(latitude)) ) ) AS distance " +
        " FROM account " +
        " HAVING distance < 10 " +
        " ORDER BY distance " +
        " LIMIT 0 , 20;";

我的帐户表存储了每个记录的纬度/经度。这将返回我请求的lat / lng 10英里范围内的所有帐户。