PHP附近地理位置搜索实现详解.doc_第1页
PHP附近地理位置搜索实现详解.doc_第2页
PHP附近地理位置搜索实现详解.doc_第3页
PHP附近地理位置搜索实现详解.doc_第4页
PHP附近地理位置搜索实现详解.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,获取经纬度 注意有3中经纬度的表示方法经纬度以度数表示,一般可直接以小数点表示,但亦可把度数的小数点分为角分(1角分等于六十分之一度),和秒(一秒等于六十分之一分)。表示经纬度有多样模式,以下是其中一些例子。度分秒表示(度:分:秒)493000-123d30m00s度分表示(度:分)4930.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进行计算,就是:Example123/$lat 已知点的纬度$dlng= 2 * asin(sin($distance/ (2 * EARTH_RADIUS) /cos(deg2rad($lat);$dlng= rad2deg($dlng);/转换弧度然后是纬度范围的查询,在haversin公式中令 = 0,可得在PHP中进行计算,就是:Example12$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.900032AND m_lat 121.581848AND m_lng 121.631244LIMIT 0 , 306,参考资料附近地点搜索初探:http:/blog.charlee.li/location-search/经纬度的表示与转换:/link?url=y0gLBwaj3ullJzfI-jERpBkyoBA0vcJIe53SlKElgYeTbPEuxrY4xReMKqZf0_HpcKGElif1jHE3KKAA9cH_WvXVqnjJdbTh-ChYV6JIB7CGPS经纬度的表示方法与转换:/s/blog_3d955ce60100ymz9.htmlPHP,Mysql-根据一个给定的经纬度的店,进行附近地点查询-合理利用算法,效率提高2125倍:http:/di

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论