我正在处理一项任务,作为项目的一部分,该项目找到特定(纬度,长度)点的特定距离内的位置。我知道如何获得表格中单行的结果,该行具有(纬度,经度)点和相应的距离(在我的情况下由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”距离内的所有位置的集合。
我需要为表格中的每一行重复此操作。
最后,我想最终得到表格中每个(纬度,长度)点(每一行)的位置列表。
任何帮助都将受到高度赞赏。
答案 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英里范围内的所有帐户。