`
xc_wangwang
  • 浏览: 41179 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转)LBS附近地点搜索算法资料集合

 
阅读更多

方法一:基于球面距离搜索附近地点

    点评:需要使用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 }
复制代码

 

分享到:
评论

相关推荐

    LBS位置隐私保护

    ### LBS位置隐私保护 #### 一、引言与背景 随着移动设备和社交网络的快速发展,位置服务(Location-Based Services, LBS)已经成为我们日常生活中不可或缺的一部分。用户可以通过智能手机或平板电脑下载各种位置...

    打包发布收集的LBS开发技术资料

    本资料包集合了关于LBS的全方位信息,包括基础概念、技术原理、市场分析以及运营策略,旨在帮助读者深入理解这一领域的核心内容。 首先,我们来探讨LBS的基础概念。LBS主要通过获取移动设备的地理位置信息,为用户...

    基于位置服务的多对象聚集问题

    1. **社交应用中的聚会组织**:通过LBS技术,应用可以实时显示参与者的当前位置,帮助用户规划最佳的集合地点和时间,甚至可以预测交通状况,提供最优的出行建议。 2. **智慧物流配送**:多对象聚集问题在物流领域...

    LBS-源码.rar

    【描述】描述中提到的"LBS-源码.rar",表明这是一个关于LBS技术的源代码集合,可能是用某种编程语言(如Java、Python、C++或JavaScript)编写的,用于开发和实现LBS功能。开发者可以借此学习LBS的实现原理,或者直接...

    基于位置语义和查询概率的假位置选择算法.docx

    《基于位置语义和查询概率的假位置选择算法》探讨的是如何在保护用户位置隐私的前提下,有效使用基于位置的服务(LBS)。随着移动智能设备的普及,LBS为用户提供诸如导航、周边信息查询等便利,但同时也带来隐私泄露...

    根据当前坐标(经纬度)计算附近位置-java版本

    例如类似于滴滴打车实现查找附近车辆业务逻辑和贝壳找房根据指定位置筛选出附近房源,上述两场场景应用可借鉴代码中两种方法予以解决,当然如果技术允许可以参照使用mongoDb数据库,内置了geohash算法。

    手机地图软件介绍PPT学习教案.pptx

    以上功能结合了地理位置信息服务(LBS)、数据检索技术、地图渲染技术以及算法优化,使得手机地图软件成为日常生活和旅行的重要助手。无论是寻找餐馆、酒店,还是规划公共交通出行,手机地图软件都能提供准确、便捷...

    垂直搜索-您不知道的秘密 -solr中国-风雨V1.1

    - **词典**:包含了大量词汇或短语的集合,用于提高搜索准确性。 - **相关度**:衡量搜索结果与用户查询关键词之间的匹配程度。 - **文档(Doc)**:类似于数据库中的一条记录,代表搜索索引中的一个基本单位。 - **...

    SPHLU:一种处理不确定数据上的PRkNN查询的高效算法

    ### SPHLU:一种处理不确定数据上的PRkNN查询的高效算法 #### 摘要与背景 在近年来,随着位置服务(Location-Based Services, LBS)的发展,针对不确定数据的查询引起了广泛关注。然而,目前关于不确定数据上的...

    12-3+旅行场景下搜索技术应用与创新.pdf

    在旅行场景下,搜索技术是在线旅游平台如阿里飞猪的核心功能,旨在为用户提供高效、精准的旅游信息检索服务。本文主要围绕“猪搜”这一全局搜索系统展开,讨论其重要性、架构以及面临的挑战,并深入探讨了在基础建设...

    基于道路网络不确定移动对象的连续概率Skyline查询

    Skyline查询是基于位置服务LBS的一项重要操作,其目的是发现数据集中不被其它点支配的点的集合。对道路网络环境下移动对象的连续概率Skyline查询进行了研究。在对道路网络和移动对象建模的基础上,定义了基于道路网络...

    阿里巴巴大数据竞赛 多个赛事的ppt收集

    阿里巴巴大数据竞赛是业界备受瞩目的活动,旨在挖掘...这些赛事的PPT资料集合,无疑是学习和研究这些主题的重要资源,它们将详细阐述各赛事的背景、数据集介绍、解决方案和最佳实践,对于提升大数据分析能力极具价值。

    道路网络上的可扩展Top-k空间图像搜索

    道路网络上的可扩展Top-k空间图像搜索是一个专注于在道路网络上执行空间图像搜索的课题,目的在于能够高效地检索出与给定查询相关的Top-k幅图像。本文将详细分析和讨论该技术涉及的关键概念和方法。 首先,道路网络...

    Redis面试题,来自工作笔记

    - LBS服务中的最近地点查询,如寻找附近的餐厅。 - 交通路况预测,如预测某条路线上的拥堵程度。 ### Redis 分布式缓存策略 - **数据分布**: 通过分片机制将不同的键值对存储在不同的Redis实例上。 - **一致性**:...

    INSQ:基于影响邻居集的移动kNN查询处理系统

    此外,INS算法在设计时考虑了多个数据对象的静态集合,并能够处理查询对象的动态移动。由于现代智能移动设备的普及,LBS变得更加流行,因此对于移动查询处理效率的提升显得尤为重要。INSQ系统通过减少重计算的频率,...

Global site tag (gtag.js) - Google Analytics