你可以先算出该点周围的矩形的四个点,然后使用经纬度去直接匹配数据库中的记录;如下图
参考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毫秒,啧啧,效率妥妥的!
计算方法
在地球上任何地点,只要有只表,有根竹竿,一根卷尺,就可知道当地经纬度。但表必须与该国标准时校对。
方法如下:
1、先算两分日
比如在中国某地,杆影最短时是中午13点20分,且杆长与影长之比为1,则可知该地是北纬45°(tgα=1),东经100°(从120°里1小时减15°,4分钟减1°)杆长与影长之比需查表求α,这里用了特殊角。
2、再算两至日经度的算法不变 纬度在北半球冬至α+23.5°,夏至α-23.5°在任意一天加减修正值即可。
3、修正值算法:就是距两分或两至日的天数差乘以94/365。 比如2013年2月17日,2013年3月22日春分差33天,即太阳直射点在南纬
33×94/365=8.5°
所以今天正午时得到的纬度是(arctgα+8.5)°
tgα= 杆长/影长
可以去H5edu看看,HTML5课程融合了HTML5开发基础课程、CSS3基础课程和移动前端交互JavaScript+JQuery+Ajex,还有 开发课程等