Skip to content

pemila/GeoPosition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

LBS:经纬度地址编码GeoHash

基于位置服务(Location Based Services,LBS)是指围绕地理位置数据而展开的服务,其由移动终端使用无线通信网络(或卫星定位系统),基于空间数据库,获取用户的地理位置坐标信息并与其他信息集成以向用户提供所需的与位置相关的增值服务。

服务提供商获得移动对象的位置以后,用户可以进行与该位置相关的查询。LBS是将移动通信技术和定位技术相结合而提供与位置有关的一种增值服务,用户通过使用移动设备的定位技术来获得自身的地理位置,LBS并根据用户的位置信息和查询信息以及通过网络为用户提供与位置相关的各种服务。

目前比较常见的应用实现:

  • 微信:附近的人

  • 共享单车:查看附近可用的车、虚拟停车位

  • 百度地图/高德地图:探索附近

  • 打车软件:平台向用户分配距离最近的司机

经纬度说明

1

地球的近似展开

2

GeoHash算法

经度+纬度形成的坐标系可以近似精确的描述人或者物在地球上的位置。GeoHash是位置坐标生成的hash值。

GeoHash不是一个精确的地标,而是一个区域,hash值越长代表的区域越小,描述的位置越精确。

基本原理

将地球平面图分为4个象限,每个象限再平分为4个象限,无限细分,这样地图将被分为若干个区域,每个区域根据算法生成一个Hash值。Hash值越相似就代表两个区域的位置越近。

3

详细过程

以数字出版基地坐标 [108.840014,34.217209]为例

纬度计算
  1. 将维度范围(-90,90)平分成两个区间(-90,0)、(0,90)
  2. 目标维度在前一个范围内时编码为0,后一个范围内编码为1,34.217209属于(0,90),因此编码为1
  3. 将(0,90) 分成(0,45)、(45,90)两个区间,34.217209位于(0,45),编码为0
  4. 依次类推,直到精度符合要求,可得当前纬度编码为 [1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1]
当前纬度编码
-90.0 0.0 90.0 1
0.0 45.0 90.0 0
0.0 22.5 45.0 1
22.5 33.75 45.0 1
33.75 39.375 45.0 0
33.75 36.5625 39.375 0
33.75 35.15625 36.5625 0
33.75 34.453125 35.15625 0
33.75 34.1015625 34.453125 1
... ... ... ...
计算经度

经度计算方式与纬度相同,可获取到当前经度编码为 [1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]

当前经度编码
-180.0 0.0 180.0 1
0.0 90.0 180.0 1
90.0 135.0 180.0 0
90.0 112.5 135.0 0
90.0 101.25 112.5 1
101.25 106.875 112.5 1
106.875 109.6875 112.5 0
106.875 108.28125 109.6875 1
108.28125 108.984375 109.6875 0
... ... ... ...
经纬度合并

将经度和纬度的编码合并,奇数位是纬度,偶数位是经度。

经度:108.840014 = [1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]

维度:34.217209 = [1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1]

合并后结果:

[1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1]

进制转换
  1. 定义一个32进制的基准

    0 1 2 3 4 5 6 7 8 9 b c d e f g
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    h j k m n p q r s t u v w x y z
    16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
  2. 将获取到的二进制数转换为32进制

    [1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1]

    =》

    wqj6stnc

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages