方法一:基于球面距离搜索附近地点
点评:需要使用2个字段进行查询,查询效率差,适用于数据量较少的小型应用。
维基百科推荐使用 Haversine 公式计算球面距离
方法二:基于Geohash算法搜索附近地点
点评:精度可控,使用单字段字符串前缀查询,查询效率较高,适用于大数据的应用。
其它方法:
PHP源代码
1 // 2 // 使用 Haversine 公式计算两个地理坐标点之间的球面距离。 3 // 4 // 参数说明: 5 // $lat1 点1的纬度值,单位:degree 6 // $lng1 点1的经度值,单位:degree 7 // $lat2 点2的纬度值,单位:degree 8 // $lng2 点2的经度值,单位:degree 9 // 10 // 返回值:两点之间的球面距离,单位: km 11 // 12 function haversine_distance($lat1, $lng1, $lat2, $lng2) { 13 $EARTH_RADIUS = 6371.00; // 地球平均半径,6371km 14 15 // 角度转换成弧度 16 $rlat1 = deg2rad($lat1); 17 $rlng1 = deg2rad($lng1); 18 $rlat2 = deg2rad($lat2); 19 $rlng2 = deg2rad($lng2); 20 21 $rlat_diff = abs($rlat1 - $rlat2); 22 $rlng_diff = abs($rlng1 - $rlng2); 23 24 $h = pow(sin($rlat_diff/2), 2) + cos($rlat1) * cos($rlat2) * pow(sin($rlng_diff/2), 2); 25 return 2 * $EARTH_RADIUS * asin(sqrt($h)); 26 } 27 28 // 29 // 根据到中心点的距离计算东西两侧的经度边界范围,采用 Haversine 公式计算。 30 // 31 // 参数说明: 32 // $lat 中心点的纬度,单位:degree 33 // $lng 中心点的经度,单位:degree 34 // $distance 到中心点的距离,单位:km 35 // 36 // 返回值: array($lat_diff, $lng_diff) 37 // $lat_diff 到中心点的纬度边界范围,单位: degree 38 // $lng_diff 到中心点的纬度边界范围,单位: degree 39 // 40 function lbs_haversine_diff($lat, $lng, $distance) { 41 $EARTH_RADIUS = 6371.00; // 地球平均半径,6371km 42 43 // 纬度边界 44 $rlat_diff = $distance / $EARTH_RADIUS; 45 $dlat_diff = rad2deg($rlat_diff); 46 47 // 经度边界 48 $rlat = deg2rad($lat); 49 $rlng_diff = 2 * asin( sin($distance / (2 * $EARTH_RADIUS)) / cos($rlat) ); 50 $dlng_diff = rad2deg($rlng_diff); 51 52 return array($dlat_diff, $dlng_diff); 53 }
相关推荐
本文提供了一种算法:找一个点集中与给定点距离最近的点,时间复杂度O(n)无法接受,希望对你的工作有帮助。
百度lbs云实现查找附近的人
基于百度LBS的云搜索功能。搜索附近加盟店,或者商家等。可以自定义商家名称,图片,位置等等。功能强大 [注:本内容来自网络,在此分享仅为帮助有需要的网友,如果侵犯了您的权利,麻烦联系我,我会第一时间删除,...
LBS轨迹平滑播放示例,还有用到的TimeLineLite.min.js
百度地图LBS移动版学习资料,最全最权威的学习资料。
基于百度LBS的云搜索功能。搜索附近加盟店,或者商家等。可以自定义商家名称,图片,位置等等。功能强大。 详细可见我的博客: http://www.cnblogs.com/shoneworn/p/baidulbs.html
【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 ... 【项目质量】: 所有源码都经过严格测试,...
基于LBS终端GPS信息的准无损压缩算法,是位置服务平台比较重要的算法之一
前端技术: ... CSS :用于设计网页外观和样式的样式表语言。 JavaScript:用于在网页上实现交互性和动态效果的脚本语言。 React:一个流行的JavaScript库,用于构建用户界面。 Angular:一个用于构建Web应用的前端框架...
计算机类毕业设计、课程作业,系统源码!!! 计算机类毕业设计、课程作业,系统源码!!! 计算机类毕业设计、课程作业,系统源码!!!
社交网络中位置服务(LBS)中的位置隐私保护。
基于安卓的LBS开发应用-基于安卓的LBS推荐系统研究
陌陌触顶求变:弃陌生人概念 转型LBS社区.docx
针对其面临的各种隐私安全威胁及安全需求,基于匿名通信原理和可计算加密思想设计了一种支持真实身份、实体位置和服务内容等LBS隐私保护的安全模型,提出采用Onion Routing算法和全同态加密算法实现该模型。...
LBS 地图LBS 地图LBS 地图LBS 地图LBS 地图LBS 地图LBS 地图
LBS开发的可以参考参考,基本原理和概念讲解比较清楚。
百度地图Api开发源码,包括地图初始化,百度地图和GPS坐标之间的转换,以及通过GET请求获取云端的详细数据,添加自定义图层并自定义点击标签事件
LBS之百度地图实例,大家可以看看,相互交流
这是一个开发二维码的文档,非常好的文档,不错的选择 二维码已经在物流、金融、交通、制造业、电子商务、传媒、旅游等领域都得到了应用。特别是在商业流通领域,二维码技术正在引发一场商业模式革命。...
说明:数据库采用mysql,在数据库中添加经纬度和地点信息后,在模拟器或者真机中输入对应的经纬度,就能准确显示地点,并进行签到。 LBS_FOR_SISE功能简介: LBS_FOR_SISE是一款地理位置服务软件,此软件...