apicloud 地图、定位等汇总及心得

发布于:2023-02-02 ⋅ 阅读:(731) ⋅ 点赞:(0)

 一,高德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


 


网站公告

今日签到

点亮在社区的每一天
去签到