方法一:基于球面距离搜索附近地点
点评:需要使用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 }
相关推荐
2. **计算熵值**:对于每个可能的虚拟位置集合,计算其熵值,选择熵值最高的集合作为最终的虚拟位置。 3. **分布优化**:增强版DLS算法通过调整虚拟位置之间的距离,使得它们尽可能均匀地分布在用户周围,以扩大隐藏...
本资料包集合了关于LBS的全方位信息,包括基础概念、技术原理、市场分析以及运营策略,旨在帮助读者深入理解这一领域的核心内容。 首先,我们来探讨LBS的基础概念。LBS主要通过获取移动设备的地理位置信息,为用户...
1. **社交应用中的聚会组织**:通过LBS技术,应用可以实时显示参与者的当前位置,帮助用户规划最佳的集合地点和时间,甚至可以预测交通状况,提供最优的出行建议。 2. **智慧物流配送**:多对象聚集问题在物流领域...
《基于位置语义和查询概率的假位置选择算法》探讨的是如何在保护用户位置隐私的前提下,有效使用基于位置的服务(LBS)。随着移动智能设备的普及,LBS为用户提供诸如导航、周边信息查询等便利,但同时也带来隐私泄露...
【描述】描述中提到的"LBS-源码.rar",表明这是一个关于LBS技术的源代码集合,可能是用某种编程语言(如Java、Python、C++或JavaScript)编写的,用于开发和实现LBS功能。开发者可以借此学习LBS的实现原理,或者直接...
例如类似于滴滴打车实现查找附近车辆业务逻辑和贝壳找房根据指定位置筛选出附近房源,上述两场场景应用可借鉴代码中两种方法予以解决,当然如果技术允许可以参照使用mongoDb数据库,内置了geohash算法。
- **词典**:包含了大量词汇或短语的集合,用于提高搜索准确性。 - **相关度**:衡量搜索结果与用户查询关键词之间的匹配程度。 - **文档(Doc)**:类似于数据库中的一条记录,代表搜索索引中的一个基本单位。 - **...
以上功能结合了地理位置信息服务(LBS)、数据检索技术、地图渲染技术以及算法优化,使得手机地图软件成为日常生活和旅行的重要助手。无论是寻找餐馆、酒店,还是规划公共交通出行,手机地图软件都能提供准确、便捷...
在旅行场景下,搜索技术是在线旅游平台如阿里飞猪的核心功能,旨在为用户提供高效、精准的旅游信息检索服务。本文主要围绕“猪搜”这一全局搜索系统展开,讨论其重要性、架构以及面临的挑战,并深入探讨了在基础建设...
因此,在搜索算法中加入时间因素,即时间-空间搜索(spatio-temporal search),能够提供更为准确和有用的结果。 根据本文内容,Scalable Top-k Spatial Image Search on Road Networks一文的作者们可能探讨了如何...
### SPHLU:一种处理不确定数据上的PRkNN查询的高效算法 #### 摘要与背景 在近年来,随着位置服务(Location-Based Services, LBS)的发展,针对不确定数据的查询引起了广泛关注。然而,目前关于不确定数据上的...
Skyline查询是基于位置服务LBS的一项重要操作,其目的是发现数据集中不被其它点支配的点的集合。对道路网络环境下移动对象的连续概率Skyline查询进行了研究。在对道路网络和移动对象建模的基础上,定义了基于道路网络...
阿里巴巴大数据竞赛是业界备受瞩目的活动,旨在挖掘...这些赛事的PPT资料集合,无疑是学习和研究这些主题的重要资源,它们将详细阐述各赛事的背景、数据集介绍、解决方案和最佳实践,对于提升大数据分析能力极具价值。
- LBS服务中的最近地点查询,如寻找附近的餐厅。 - 交通路况预测,如预测某条路线上的拥堵程度。 ### Redis 分布式缓存策略 - **数据分布**: 通过分片机制将不同的键值对存储在不同的Redis实例上。 - **一致性**:...
此外,INS算法在设计时考虑了多个数据对象的静态集合,并能够处理查询对象的动态移动。由于现代智能移动设备的普及,LBS变得更加流行,因此对于移动查询处理效率的提升显得尤为重要。INSQ系统通过减少重计算的频率,...