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

来源:学生作业帮助网 编辑:作业帮 时间:2024/10/03 01:43:02
已知一点坐标(经纬度),如何判断其方圆500米的范围?用PHP如何写?
xVRG~\پTşA ƪ Qх(r R3/^!gvLS5U3]}7Υx¿5P_N.٩z%YLj|YB}cWķU?3 xܽ諯N&7>um:zd},M_ W<¯oK?RIoZci!c8{yj} leKD}-x܅'֒xbn\㫋v<7׫+W|uy{w~7es(; eJCP_\<˩|P.̛]0/od!w*D2B(W`J2S4\H#QdD"%CledbPG"@"f .ov)p ` h(G!;!) gɝѵe QU[Ź4#OUE!+t~HیɗrP)*mօ-BSM2+O+ '(/L,%{ lhq_VJ}Qɼ%Y߼}e/";ԋ LX B3B!!p! L4Ž"!1( Bic>z9DRKM9: tZεDX;欕xKY"iiGj;$U)Ǚ !YB!ZdhX Cg T0r`rE>eN)! V&08E@Rg:IJCj<ïUŗ/?AY)~Cqe^M?L6Y[SooمNۡA(HT3ØX.A)HLt䴦 `-EA #\'mDL2,Tiƙ4L),ˇD` ޯՒWZ|7W~}:]k?ؚ[mxi2k͑6~]i /L!+&g#xt%CtJE9x"ac

已知一点坐标(经纬度),如何判断其方圆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毫秒,啧啧,效率妥妥的!