移动端地图技术分享

拖欠篇属于<简书 — 刘小壮>原创,转载请注明:

<简书 — 刘小壮>
http://www.jianshu.com/p/41179be5893a


我现就职于国内有地图导航公司,这首文章是自前段时间在企业集体技能分享的一个PPT,文章内容也主要出于这个PPT的始末为主,通过这篇文章可充分好的协助您打探地图导航者行当之连锁技术。

PPT内容要概括地图相关专业知识、百度和高德SDK整体框架、数据来自、行业概览等构成。其中有关地图引擎相关的技术知识,我于企业地图引擎开发同事求证过,这个PPT也为他们拘禁了,也拉指出了间的片问题。

旋即篇稿子主要用来分享,其中要生什么问题,还请多指出,谢谢!


地图开发专业知识

经纬度

经纬度

由此纬度是一致栽地理坐标系统,主要为此来代表地球之球面坐标系,经纬度可以一定地球的其余一个岗位。南北方向的称纬度,东西方向称为经度

纬度:赤道纬度周长最丰富,离赤道越远纬度周长越短,也便一发接近南北极。赤道以南称为南纬,赤道以北称为北纬纬度取值范围是0-90,赤道纬度最小为0,两级最可怜。

经度:经度为叫子午线,任意两长达经线长度等,起始点都在南北极。经度盖本初子午线为分,以东称为东经,以西称为西经东经为正数,西经为负数。经度取值范围以0-180,本初子午线为0。东经180度过为不怕是西经180度就是白令海峡,白令海峡就是国际换日线,日期去一天。

按照经度,地球被分成24单时区,每个时区又有分,分以带有秒。

投影

投影

投影

做地图,投影的定义非常重大。我们的球是圈的,地球的坐标是一个球面坐标,球面坐标是三维坐标(x、y、z),而我们的地形图是是二维的(x、y),需要拿球面的老三维坐标转换为面的老二维坐标。

坐标转换久用到了投影的概念,常用的投影有:圆柱投影圆锥投影方位投影,而于咱们地图导航中动用墨卡托投影

墨卡托影

墨卡托影

百度、高德、Google都使用墨卡托投影墨卡托投影生一个那个挺的弊病,就是于青出于蓝纬度(南纬北纬)地区发生巨大的变形。变形比较严重的地方在俄罗斯、格林兰岛、非洲、南极洲相当于高纬度地区。

墨卡托影子

点五独国各自是:俄罗斯、澳大利亚、中国、巴西、加拿大
咱以立即五只国在一个纬度,来比较及时五个国家,发现距离并无顶非常。但是倘若身处上面那张图中,俄罗斯交好几独中国大小。

海外开发者开发了一个网站,这个网站可以以不同国度拉至同一个纬度,这时候就会显得出真比例之国度面积。
网站地址:http://thetruesize.com/

古德投影

古德投影

古德投影足避地图变形的问题,这种投影将地图分为几单部分,然后沿着赤道将几只有连接在齐。我们发现上面的格林兰岛已经让分为两组成部分,这种投影连无相符用来开发,而且看起效果啊无太尴尬。

金字塔型

金字塔型

把同布置世界地图显示到手机里是匪容许的,所以就算引入了金字塔模型的概念(也就是比例尺),我们可依据不同之缩放比例,显示不同之分辨率。

当地形图应用中,我们就此指尖缩放和放开地图,地图显示大小的变换,都是冲金字塔模型来团瓦片图的。

瓦片坐标系

瓦片坐标系

金字塔模型相当使用的就是是瓦片坐标系,在不同的缩放等级下,同一片区域瓦片个数也是匪等同的。

瓦片尤为多便象征立即同区域显示更加详细,缩放比例也即更老。瓦片坐标系在2D以及3D的情景下都见面让利用,我们当网不好的事态下足观看地图瓦片的加载过程和瓦片的大小、位置。

坐标加密
  • CLLocationManager蒙之经纬度加密(WGS-84)
  • MKMapView遇的中纬度加密(GCJ-02)
  • 高德SDK中之经纬度加密(GCJ-02)
  • 百度SDK中的中纬度加密(使用GCJ-02复加密,叫做BD-09)

根据中国律规定,地图提供商要对地图经纬度进行偏移,国测局制定了一如既往仿照加密标准,就是常用的GCJ-02经纬度坐标加密根本出三三两两栽格式,GPS坐标系
(WGS-84) 和火星坐标系 (GCJ-02) ,加密算法是开源的,可以搜寻到。

国际经纬度坐标标准吗WGS-84,国内必须至少用国测局制定的GCJ-02,对地理位置展开首不行加密。由于每家导航SDK提供方加密都非合并,所以百度、高德、谷歌多寒地图数据并无联合,需要再次展开转移。

地图定位

地图定位

移步端稳法根本出三栽:GPSWi-Fi基站,但是androidiOS还非极端一致,android好让用户挑选和设置那种定位法,但是iOS举凡由于系统为咱选择的,我们没有操作定位法的权杖。iOS无容许发生第三着定位,所以现在地图应用都是指向网定点进行的包。如果发生GPS信号,iOS系会先选项GPS方法固定,然后是Wi-Fi定位,如果Wi-Fi信号不好就见面挑基站定位。

以一定被精确度最高的凡GoogleGoogle应用大数目解析,记录每一样蹩脚采用Google地图的原则性。下次重新定位时,直接冲Mac地址等信息进行辨析,提高一定精确度。

比较悲催的一个问题即使,有部分比一直的iOS机器,没有GPS恒定模块,例如有些镇版本iPad,这种设施以尚未Wi-Fi的状态下是力不从心稳定的。

地理编码和逆地理编码

示范图片

地理编码:即地理解析,由详细的结构化地址得到相应的中纬度信息,例如北京市海淀区中关村南大街27号的地址,就得赢得到一个唯一的经纬度信息。

逆地理编码:即逆地理解析,由一个经纬度信息获得一个结构化地址信息,例如lng:116.31985,lat:39.959836经纬度,就得获到接近于面的地理信息。

iOS网API、高德SDK、百度SDK中,都为我们提供了地理编码逆地理编码API,但是用留意通过纬度的变换,不同地图SDK返回的中纬度加密方法不同,我们以传经纬度参数与接纳经纬度参数时,都亟需举行转换。

地图数据来源于

高德

四维图新

境内比较活泼的数量采集商主要是高德和四维图新两寒,百度没有数搜集资质(最近收购了道道通),所以数据要靠让四维图新。

四维图新及国度测绘局合作比较密切,数据来源于至关重要是国家测绘局提供,也生部分自己测绘的数。高德测绘和航拍能力还不易,主要自己测绘数据,部分数据吧负国测局提供。数据测绘单位互相之间还有合作,会相互购买好从不的多寡。

在中华,谷歌地图或苹果地图等地图开发商,数据来源于几乎都是马上简单家店铺。

POI数据

POI

POI数据是均等种植矢量数据,包括美食、商店、银行、加油站等都是POI数码,在地图及一般都以气泡或大头针表示。

数据收集可以通过车载GPS摄影机采集,或于服务性互联网商家抓取或市,由于百度和高德提供了对外的SDK,通过用户用地图SDK也堪抱有数码。

百度的地图数据主要靠让四维图新与道道通,高德地图主要归因于自采为主。一般这些数据也会暨民众点评、携程、口碑等互联网服务商购买,相互之间也会见市POI数据。

栅格-2D地图

珊格图

珊格图

2D景象:轻地图应用,简单的岗位分享、兴趣点标注、线路展示等。2D模型显效果不绝好,在缩放比例比较小的状况下,看起较模糊(缩放比例非常组成部分扣起清晰度还可以)。

栅格模型于有一个地方的描述,是透过群重合图片叠加成的,每层代表不跟信息(例如道路)。栅格模型诚如都见面先渲染一个底图,然后是在底图的基本功及折加路况、POI等图层。

珊格图都是于服务器预处理的图样,从服务器下载处理好的图纸及地头开展拼接即可,由于下充斥至本地是图,本地未可知重复指向图层进行改动。对于性达到的话,服务器进行图片合成性能消耗比较生,但是客户端性能消耗比较粗,内存占用呢比小,用起会比较流畅。

矢量-3D地图

矢量地图

矢量地图

3D场景:重地图应用,以LBS也中心功能,需要离线地图、更好的渲染效果、app内导航的。比如打车用、出行导航类应用,3D模型渲染后底职能较好,一般采取导航功能还必须用这3D模型

矢量数据是自服务器将地图数据下载下来,然后于客户端进行合成绘制的,所以我们可针对地图的显示进行支配,可定制性更胜。矢量图在押起重可以清晰,渲染效果比好。但是矢量图对手机特性消耗大厉害,手机内存占用比较强,CPUGPU消耗都不行可怜。对于服务器性能消耗就比2D场景性能小部分,因为服务器就是加载原始数据和往客户端进行传输,将合成绘制等这些图层渲染之绘图处理交给客户端来做。提高了客户端灵活性与另行好之效果,牺牲了客户端的性,有利有弊。

三维地图

三维地图

三维地图大凡坐三维地图数据为底蕴开发之,三维地图关押起重新佳立体化,地图上得表现出立体建筑以及影子的效用,而且地图随着用户的操作,楼宇的角度、阴影等作用也会见随着发生变化。

三维地图连片进程被,也油然而生了假三维地图。这种地图只能进展平面平移,不可知开展盘操作,是数据平面地图三维地图通的结果。

海外地图

海外地图

百度地图目前早就足以支持部分国的海外地图服务,例如新加坡、韩国、日本、泰国相当国家。可以于新型的百度地图app上一直翻、搜索这些国家的有POI,以及利用导航等作用。

目前为止只来百度一下支撑海外地图服务,高德暂时无支持这项服务。在百度和高德不支持的地方,由于服务器并未数,所以无见面开渲染,看起白白的平等切开。

实景地图

实景地图

实景地图最开头是Google研发的,这项技艺需要软件以及硬件相互的匹配,以及大量之数额处理才会得。

征集实景需要各式实景采集工具,包括汽车采集、自行车采集、人力采集等,这重大是由于需要应各种采集地点。采集时拿数据实时绑定GPS职位,这样尽管了解是在谁岗位采集的。

数码收集后要工程师将数据开展复杂处理,才能够形成我们看的实景数据。实景数据一般还是静态的,而且免是实时更新的。实景数据为保护于采集人的用户隐私,需要对关键部位进行模糊处理,例如脸、车牌照等。

室内地图

室内地图

室内定位凡一致种植组成3D定位的一定模式,这种稳定好当室内进行固化。室内定位一直定位某个商铺在几乎楼的某部位置,而且得选取楼层。

以人情的原则性中,楼内由是多重叠,会导致定位重叠的题材,而且楼内GPS信号吧未极端好还是无。所以出现了片新技巧来促成楼内一定:AGPS(辅助全球卫星定位系统)、Wi-Fi指纹定位、zigbee芯片定位、RFID智能标签技术、以及苹果推出的ibeacon,其中高德以的凡Wi-Fi指纹定位技术。

百度热力图

百度热力图

率先是出于百度率先支持热力图功能,热力图功能预示着十分数量时代更加接近。热力图是因百度地图移动客户端与SDK在这些地带的使用状态测算出来的,这些推断数据可以是网要、打开次数等于,通过这些多少测算出人员分布。通过前百度在CCTV的报道来拘禁,通过这些多少还是足以预计景区人山人海,防止大型踩踏等群体性事件。

热力图趁同一区域的凝聚程度变化,颜色就转移大。但是由统计办法的表征,统计的数码并无极端可靠,例如白天和夜间即使发生异常酷分别,只是作为参考。


地图SDK架构

高德SDK结构

高德SDK结构

Annotation:单点标注,继承自UIView,可以采用UIView的部分基础属性,引入了录取机制(百度也是一致的贯彻,包括有打车软件之小车,都是动Annotation实现)。

Overlay:多点标注,引擎直接渲染,可以透过SDK的API自定义UI,多触及标注用于标识路线或某个一个区域。

Other:云搜索,地理编码和逆地理编码,导航路径设计,定位,POI搜索等。

MapKit和高德SDK区别

对比

下手图片的高德logo是黑色,并且亮在右边下角,这是iOS系统的MapKit.framework

左手图片的高德logo是蓝色,并且亮在左下角,这是高德自己的SDK。

苹果的MapKit只是用了高德的数目,但是API是苹果好开之。

百度地图SDK框架

百度地图SDK框架

跳平台引擎:
  • 百度地图的地形图引擎使用openGLES绘制
  • 可知运转为支持C++的无绳电话机系统平台
  • 不同平台对应用层保持一致的API接口
  • 供力所能及满足应用层的根底数据结构
  • 尽量少之因系统接口,提高可移植性
  • 圆滑和可扩展性

百度地图对于高德地图来说,增加了部分实用性的功用,例如热力图、骑行、个性化地图等。这些职能都是高德所没有底,当然高德为产生局部深是的效能,两者各有可取。

百度地图及高德地图还有2D以及3D功能,2D纯粹平面展示,没有楼宇拔高效果。

百度地图SDK框架

百度地图SDK框架

百度SDK主要模块划分:

  • 地图(基础力量,地图显示和操作及各种覆盖物图层)
  • 检索(POI,地理编码、路径设计相当)
  • 恒定必发bifa88手机客服端(提供单身稳定模块,经纬度根据国测局二差加密)
  • 工具(调用百度客户端,坐标转换等)
  • 广雷达(检索用户信息,查找附近的人口,主要用于社交)
  • LBS云(区域搜索,百度服务器存储数据,可以协调操作,属于开发者自生数量)

百度SDK分为六个坏之模块,可以依照需求下载对应之模块,这样只要下载下来的SDK体积变小。

百度鉴权认证策略:用户可经过个别种方法及百度开放云进行交互,包括认证方式匿名方式。在SDK中众多地方还因此到了鉴权认证,例如加载地图时证实不经非会见来得地图,百度比较厚SDK的鉴权

贪图层渲染

贪图层渲染

百度地图渲染分为多只图层渲染,每个图层渲染的靶子吧无平等,地图及打定义标注和遮住物统称为地图覆盖物,多单图层叠加起来形成矢量图。百度地图SDK地图等时呢19级,可以依据缩放等级的不比渲染建筑物、道路、河流、学校、公园等情节。

百度地图支持多沾触摸、双击放大、多点缩小、旋转等手势操作。并且支持画点、折线、圆、多边形等操作,并且可以由定义热力图瓦片图等。

百度个性化地图

百度个性化地图

百度地图在16年1月份生产了个性化地图,SDK提供了只性化地图模版,通过地图模版更改底图颜色和体裁。从百度开发者平台下充斥到模版,通过地图模版可以修改本地、水系、草地、道路、铁路、地铁、POI等颜色和样式,然后调用SDK提供的计读博该模版即可。


地图产业链

地图产业链

生龙活虎统计

率先摆放图是一样客14年的统计报告,这卖统计报告统计不极端周到,部分导航应用尚未吃含有在内。

每当马上卖统计报告受到,我们发现高德是唯一一个遮盖整条产业链的店家,在产业链的每个环节都有高德的人影。

2014年4月,阿里针对高德就了15亿美元的收购,高德成为阿里旗产均资子公司。

相关文章