一,高德SDK的使用
使用模块aMap,使用基本流程参照Apicloud操作文档https://docs.apicloud.com/Client-API/Open-SDK/aMap 申请key 流程,
对应apicloud控制台基本信息
申请完毕将得到的key填写config文件
<feature name="aMap">
<param name="android_api_key" value="f7Is0dWLom2q6rV3ZfFPZ1aa" />
<param name="ios_api_key" value="81qz3dBYB5q2nGji4IYrawr1" />
</feature>
在代码调用时会出现各种神奇问题,比如正常 open 正常,但 getLocation 却报networkerror或其他报错,一般来说比较通用的方法是讲代码进行云编译,位置权限都勾上(默认是勾上的,所以我没管),生成apk后安装,再去自定义loader编译,安装,再去执行基本就可以解决了。
二,关于经纬度
关于坐标系
我们通常用经纬度来表示一个地理位置,但是由于一些原因,我们从不同渠道得到的经纬度信息可能并不是在同一个坐标系下。
- 高德地图、腾讯地图以及谷歌中国区地图使用的是GCJ-02坐标系
- 百度地图使用的是BD-09坐标系
- 底层接口(HTML5 Geolocation或ios、安卓API)通过GPS设备获取的坐标使用的是WGS-84坐标系
不同的坐标系之间可能有几十到几百米的偏移,所以在开发基于地图的产品,或者做地理数据可视化时,我们需要修正不同坐标系之间的偏差。
WGS-84 - 世界大地测量系统
WGS-84(World Geodetic System, WGS)是使用最广泛的坐标系,也是世界通用的坐标系,GPS设备得到的经纬度就是在WGS84坐标系下的经纬度。通常通过底层接口得到的定位信息都是WGS84坐标系。
GCJ-02 - 国测局坐标
GCJ-02(G-Guojia国家,C-Cehui测绘,J-Ju局),又被称为火星坐标系,是一种基于WGS-84制定的大地测量系统,由中国国测局制定。此坐标系所采用的混淆算法会在经纬度中加入随机的偏移。
国家规定,中国大陆所有公开地理数据都需要至少用GCJ-02进行加密,也就是说我们从国内公司的产品中得到的数据,一定是经过了加密的。绝大部分国内互联网地图提供商都是使用GCJ-02坐标系,包括高德地图,谷歌地图中国区等。
导航电子地图在公开出版、销售、传播、展示和使用前,必须进行空间位置技术处理。— GB 20263―2006《导航电子地图安全处理技术基本要求》,4.1
BD-09 - 百度坐标系
BD-09(Baidu, BD)是百度地图使用的地理坐标系,其在GCJ-02上多增加了一次变换,用来保护用户隐私。从百度产品中得到的坐标都是BD-09坐标系。
以上关于坐标系的原文及更详细的信息请见地址:https://www.imooc.com/article/23512
如果使用的是高德SDK去获取位置信息,是和原始GPS位置信息不一样的,那有些项目需要用到原始GPS位置,那么可以利用“底层接口(HTML5 Geolocation或ios、安卓API)通过GPS设备获取的坐标使用的是WGS-84坐标系”这条特性,用HTML5 Geolocation的方法来获取。
navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
function successCallback(position) {
// showInfo.innerHTML = "纬度: " + position.coords.latitude +
// "<br>经度: " + position.coords.longitude +
// "<br>位置精度:" + position.coords.accuracy +
// "<br>海拔:" + position.coords.altitude +
// "<br>海拔精度:" + position.coords.altitudeAccuracy
}
function errorCallback(error) {
// switch (error.code) {
// case error.PERMISSION_DENIED:
// showInfo.innerHTML = "用户拒绝对外提供地理位置";
// break;
// case error.POSITION_UNAVAILABLE:
// showInfo.innerHTML = "位置信息不可用";
// break;
// case error.TIMEOUT:
// showInfo.innerHTML = "请求用户地理位置超时";
// break;
// default :
// showInfo.innerHTML = "未知错误";
// break;
// }
}
getCurrentPosition() 方法
使用 getCurrentPosition() 方法来获得用户的位置信息,若获取成功,则 getCurrentPosition() 方法返回对象,始终会返回 latitude(维度)、longitude(精度) 以及 accuracy(位置精度) 属性。如果可用,则还可能会返回其属性:
属性 描述
coords.latitude 十进制数的纬度
coords.longitude 十进制数的经度
coords.accuracy 位置精度,单位 m
coords.altitude 海拔,海平面以上以米计
coords.altitudeAccuracy 位置的海拔精度,单位 m
coords.heading 方向,从正北开始以度计
coords.speed 速度,以米/每秒计
timestamp 响应的日期/时间
更详细信息请见getCurrentPosition原文地址:HTML5 Geolocation(地理定位)_蚩尤后裔的博客-CSDN博客_html5geolocation