已知一点坐标(经纬度),如何判断其方圆500米的范围?用PHP如何写?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/05 05:54:23
已知一点坐标(经纬度),如何判断其方圆500米的范围?用PHP如何写?

已知一点坐标(经纬度),如何判断其方圆500米的范围?用PHP如何写?
已知一点坐标(经纬度),如何判断其方圆500米的范围?
用PHP如何写?

已知一点坐标(经纬度),如何判断其方圆500米的范围?用PHP如何写?
你可以先算出该点周围的矩形的四个点,然后使用经纬度去直接匹配数据库中的记录;如下图

参考wiki百科上的一些球面计算公式:
 
Great-circle distance
Haversine formula
假设已知点的经纬度分别为$lng,$lat
先实现经度范围的查询,
在haversin公式中令φ1 = φ2,可得:


用PHP进行计算,就是:

然后是纬度范围的查询,
在haversin公式中令 Δλ = 0,可得


在PHP中进行计算,就是:

最后,就可以得出四个点的坐标:
left-top :(lat + dlat,lng – dlng)
right-top :(lat + dlat,lng + dlng)
left-bottom :(lat – dlat,lng – dlng)
right-bottom:(lat – dlat,lng + dlng)
我把以上方法写成了一个函数,综合起来就是:

在lat和lng上建立一个联合索引后,使用此项查询,每条记录的查询消耗平均为0.8毫秒,啧啧,效率妥妥的!