- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PHP附近地理位置有哪些信誉好的足球投注网站实现详解.doc
1,获取经纬度
注意有3中经纬度的表示方法
经纬度以度数表示,一般可直接以小数点表示,但亦可把度数的小数点分为角分(1角分等于六十分之一度),和秒(一秒等于六十分之一分)。表示经纬度有多样模式,以下是其中一些例子。
度分秒表示(度:分:秒)-49°3000-123d30m00s
度分表示(度:分)-49°30.0-123d30.0m
度数表示-49.5000°-123.5000d(一般会有四位小数)。
这里的经纬度是用度数表示的,在有些公式的计算中,是需要把角度转换为弧度的,注意他们的转换
经纬度转换的函数:
deg2rad — 将角度转换为弧度
rad2deg() - 将弧度数转换为相应的角度数
2,数据库中存储经纬度
保存类型float(10,6)
创建 MySQL 表时,您应当特别注意 lat 和 lng 属性。鉴于 Google Maps 目前的缩放能力,您只需要精确到小数点后六位数。为了让表占用的存储空间降至最低,您可以将 lat 和 lng 属性指定为大小是 (10,6) 的浮点数。这样,这些字段将会存储小数点后 6 位数以及小数点前最多 4 位数,如 -123.456789 度。
3,实现算法(基于一定范围内)
在庞大的地理数据库中有哪些信誉好的足球投注网站地点,索引是很重要的。但是,我们的需求是有哪些信誉好的足球投注网站附近地点, 例如,坐标(39.91, 116.37)附近500米内有什么地点?有哪些信誉好的足球投注网站条件是地点坐标与当前坐标之间的距离, 显然是无法应用索引的。
那么换个思路:首先算出“给定坐标附近500米”这个范围的坐标范围。 虽然它是个圆,但我们可以先求出该圆的外接正方形,然后拿正方形的经纬度范围去有哪些信誉好的足球投注网站数据库。
先算出该点周围的矩形的四个点,然后使用经纬度去直接匹配数据库中的记录。
红色部分为要求的有哪些信誉好的足球投注网站范围,绿色部分我们能间接得到的结果范围
参考wiki百科上的一些球面计算公式:
Great-circle distance
Haversine formula
假设已知点的经纬度分别为$lng, $lat先实现经度范围的查询,在haversin公式中令φ1 = φ2,可得:用PHP进行计算,就是:
Example 1
2
3 //$lat 已知点的纬度
$dlng= 2 * asin(sin($distance/ (2 * EARTH_RADIUS)) /cos(deg2rad($lat)));
$dlng= rad2deg($dlng);//转换弧度 然后是纬度范围的查询,在haversin公式中令 Δλ = 0,可得在PHP中进行计算,就是:
Example 1
2 $dlat=$distance/EARTH_RADIUS;//EARTH_RADIUS地球半径
$dlat= rad2deg($dlat);//转换弧度
在lat和lng列上建立索引,能从一定程度上提高范围查询的效率。
不过,这样查询到的地点是正方形范围内的地点,一些结果与当前点的距离可能会超出给定的距离。 如果要求严格,可以遍历结果并计算与当前点之间的距离,并过滤掉不符合要求的结果。
4,由近到远进行排序显示
基于第3步的范围内进行计算距离
5,详细代码实现过程
根据用户的经纬度获取有哪些信誉好的足球投注网站范围的经纬度:
public function googleTest()
{
$distance = 0.2;//单位是10KM
$radius = 6371.393;//代为是KM
//用户当前的地理位置(经纬度的第三种表示方法)
$lng = 121.606546;
$lat = 29.918017;
//计算偏移的角度并转化为弧度
$dlng = rad2deg(2*asin(sin($distance/(2*$radius))/cos($lat)));
$dlat = rad2deg($distance*10/$radius);
//计算实际有哪些信誉好的足球投注网站的四边形的四个边界范围
$lng_left = round($lng-$dlng,6);
$lng_right = round($lng+$dlng,6);
$lat_top = round($lat+$dlat,6);
$lat_bottom= round($lat - $dlat,6);
}
将上述获取的边界范围带入到sql语句中用于查询:
SELECT * FROM `t_store` WHERE m_lat 29.
文档评论(0)