很多场景都用到了互联网地图定位,极大的方便了人们的生活,有很多人在感慨互联网技术带动人类进步的同时又对其背后的实现机制表示好奇,本篇文章将带着大家的好奇心走进地图定位,简单聊一聊背后的原理以及几个典型的应用场景。
1、定位原理
螺丝钉只有找到恰当的螺丝母才能体现自己的价值,定位也是一样,坐标只有找到适合的坐标系才能准确定位。是的, 坐标系很多种,目前使用的主要有三种。
坐标系
WGS84
World Geodetic System世界通用坐标系,和GPS配套使用,大陆外地区都在使用的坐标系。高德地图、百度地图、google地图国外部分使用此坐标系。
GJC-02
Guo Jia Cehui ju 中国国家测绘局制定的一套大地坐标系,是一种在WGS84之上根据经纬度随机加密后的坐标系。国家测绘局规定国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行一次加密。高德地图和google地图大陆、港澳部分使用是此坐标系。
BD09
百度坐标系,即在GJC-02之上再次加密的坐标系,只适合百度相关地图系统,百度地图大陆、港澳部分使用此坐标系。
经纬度
有了坐标系,定位具体的位置还需要经纬度,有了经纬度就可以根据坐标系找到合适的位置。那么都有哪些方式可以得到经纬度呢?�目前主流的有3种。
- 基站
一个手机在有电话信号的地方,就可以通过系统的接口得到基站ID。通过基站ID可以锁定唯一基站,同时在库中我们保存了该基站的位置,从而推算出设备的位置,通常在基站信号的范围内。基站定位的优点是对于环境要求低,有基站信号的地方就可以定位,但是精度较低,通常几百米,个别情况会几公里。通常作为其他定位方式的候补策略。
- WIFI
每个WIFI路由器,对应了一个唯一的MAC地址,我们在库中维护了全球WIFI的具体位置,当手机扫描到周边WIFI信号时,即可以根据WIFI信号强度和WIFI列表的具体内容,推算出设备的位置。WIFI定位的精度通常比较高,几米到几十米不等,但是在设备位移的过程中,会出现一定的误差。通常比较理想的环境是城市内,位移不频繁的情况。
- GPS
在室外无遮挡的条件下,基于GPS信号的定位技术被普遍采用。通过GPS信号可以得知手机与具体某一颗卫星的距离,从而计算出手机的具体位置。以上过程通过设备本身GPS芯片即可完成计算,通过手机系统接口可以获得定位结果。由于GPS定位本身的特点,可以看出GPS定位更适合在导航等户外场景中的使用。
如果用户快速移动,其实定位会更加精确,因为在导航模式下,算法会根据用户的速度和方向来不断纠正产生的误差,这就是为什么开车的时候如果开启导航就会把车子准确的定位在道路上的原因。
2、开发
App开发者怎么使用呢,一般使用地图厂商SDK,拿某德 Android SDK举例。
Android定位SDK,使用混合定位技术。支持开发者自由设置定位模式,同时封装了逆地理信息,以及地理围栏等实用功能。Android定位SDK包含GPS和网络定位(Wi-Fi和基站定位)两种能力。定位SDK将GPS、网络定位能力进行了封装,以三种定位模式对外开放,SDK默认选择使用高精度定位模式。
- 高精度定位模式:会同时使用网络定位和GPS定位,优先返回最高精度的定位结果,以及对应的地址描述信息。
- 低功耗定位模式:不会使用GPS和其他传感器,只会使用网络定位(Wi-Fi和基站定位);
- 仅用设备定位模式:不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位,自v2.9.0 版本支持返回地址描述信息。
开发者可以根据自身的场景,选择合适的定位模式。
3、一些注意事项
由于IOS系统使用的坐标系和使用手机所处的位置有关,如果手机当前在大陆,那么就使用GJC-02坐标系,在国外,就使用WGS84坐标。所以手机在大陆的时候看国外的地图就可能存在一些坑,例如,搜索曼谷的"曼谷亚洲摩天轮",如果数据库只存了"曼谷亚洲摩天轮"的WGS84坐标系对象POI坐标,那么搜到的位置就有会偏移。如果在国外搜索国内的POI也会有同样的问题,解决方法之一就是POI即存GJC-02坐标系坐标又存WGS84坐标系坐标,然后判断是否在国内取得不同的坐标即可。
4、 典型的场景
位置共享、导航、附近相关等等,以某基于LBS社交的一款APP举例。
下一篇文章会继续讨论GIS相关:『地球二维化』。知道《三体》『二向箔』的懂.., 请大家保持关注哦.