图解百度地图反地理编码系统

前言


我们在约会的时候常常会碰到一个问题,约定地址范围太大找不到对方?怎样才能在一个较大范围内借助相对参照物快速找到彼此?百度地图反地理编码服务——将坐标转换为标准地址正好能够帮你解决这一问题。


1 莲化池公园和丰台区园林绿化局示意图


小亮和小莲相约一起去莲花池公园,在找不到对方的情况下,小亮打开百度地图,客户端根据小亮当前的经纬度得到“在丰台区园林绿化局附近”,此时小莲打电话说她“在莲花池公园里”,小亮根据地图选择在两人中间位置——莲花池南门见面,两人轻松找到对方。


反地理编码服务主要使用到点、线、面三种类型的数据,图上的丰台区园林绿化局、莲花池南路、莲花池公园分别代表这三种类型的数据。


数以万计的应用都在使用百度的反地理编码服务,该服务采用网格空间索引技术支撑了每日几百亿次的调用。如图2所示,整个地图被切分成了一个个方格,任何一个坐标都会映射到某个方格中。我们将方格编号,“莲花池公园”会映射到一系列方格中(2, 3, 4, 8, 9, 10, 11, 14, 15, 16, 17),“丰台区园林绿化局”会映射到一个方格中(20)。


2 莲花池公园和丰台区园林绿化局的网格映射

我们将表示“莲花池公园” 的格子(2, 3, 4, 8, 9, 10, 11, 14, 15, 16, 17)和表示“丰台区园林绿化局”的格子(20)分别存入图3(1)和图3(2)的表格中。查询图3(1)中的表格,小莲的坐标(8号格子)指向“莲花池公园”,发现小莲“在莲花池公园里”。在小亮周围有20、21号等格子,查询图3(2)中的表格,发现20号格子有“丰台区园林绿化局”且离小亮最近,显示小亮“在丰台区园林绿化局附近”。

3 数据检索原理


反地理编码服务将包含名称和经纬度等信息的点、线、面数据映射到编好号的格子中,然后以格子编号为 Key 生成索引文件。检索时,通过传入的坐标所在的格子快速查出该坐标附近的数据。然而一次完整的数据更新周期比较长,为了方便数据快速更新,我们增加了轻量“增量索引”的设计。


【系统架构】


如图4所示,我们可以在WEB页面上编辑数据后提交到“数据更新服务”,数据更新服务会将该数据存入数据库,数据定期从数据库更新到增量索引库中。检索时,检索服务同时检索本地索引库和增量索引库,新增的数据便能检索出来了。


4 通过增量库实现快速添加数据


图5进一步说明了增量索引库的生成过程。当地图上缺少“莲花池公园”时,我们通过Web页面在地图上加工出这条数据,然后提交给“数据更新服务”,数据更新服务生成莲花池公园对应的所有格子的编号,并将该条数据和编号一起存入数据库中。检索服务定期从数据库中获取到增量数据,并以格子的编号为key建立增量索引库。


5 增量索引库生成过程


数据库中的数据很容易添加和删除,而存储在数据库中的数据已经生成了小方格的编码,因此检索服务更新增量索引库的速度很快。


 【新系统特点】


  1. 高可用性:服务可用性长期稳定在99.999%以上

  2. 支持高效的地理空间索引,QPS每秒上万

  3. 支持用户个性化数据,可以对定位点提供个性化的位置描述信息。

  4. 数据问题可以快速修正沉淀。


【本文版权归“百度地图开放平台”所有,转载请与百度地图开放平台取得联系】


猜你喜欢

转载自blog.csdn.net/baidumap2018/article/details/80053687