基于cordova-amap-location插件的高德地图定位实现

一、准备工作,申请高德地图key

1、登录高德开放平台(https://lbs.amap.com/)

     如果没有账号,需要注册账号;账号注册还需要进一步注册成为开发者

2、进入控制台

3、进入“应用管理-->我的应用”,执行添加操作:

1)获取调试版本的sha1

①F:\jdk\jdk1.8.0_211\bin\keytool -list -v -keystore C:\Users\eddy\.android\debug.keystore

【keytool是jdk自带的工具,具体请指向实际的目录;debug.keystore文件所在目录也请修改成自己机器上实际的目录】

②调试版本keystore的默认密码是:android

③执行结果如下:

基于cordova-amap-location插件的高德地图定位实现_第1张图片

2)获取发布版本的sha1

①F:\jdk\jdk1.8.0_211\bin\keytool -list -v -keystore D:\programe\emm\dist\app\build\NK-release.keystore

【keytool是jdk自带的工具,具体请指向实际的目录;NK-release.keystore文件所在目录也请修改成自己机器上实际的目录】

②发布版本keystore的密码是创建NK-release.keystore文件所指定的密码

③执行结果如下:

基于cordova-amap-location插件的高德地图定位实现_第2张图片

3)获取PackageName

    src-cordova\platforms\android\app\src\main\AndroidManifest.xml 配置文件package属性所对应的值。

将以上三个值分别填入下图中:

基于cordova-amap-location插件的高德地图定位实现_第3张图片

4、添加成功后,形成如下结果(得到android平台的key)

    重复以上步骤,得到IOS平台的KEY。(如果不需要IOS平台的地图定位,在申请时候可以随便填写sha1等信息,最后也会得到以上的KEY值)【注意:无论你是否有IOS平台地图定位的需求,andrioid、IOS另个平台的KEY都必须在这里申请下来】

【以上的申请的KEY,在所有高德地图的应用中都会用到,所以需要保管好】

二、插件安装

...\src-cordova>cordova plugin add cordova-amap-location --variable ANDROID_KEY=android的key  --variable IOS_KEY=ios的key  --save

【注意:以上两个variable缺一不可,否则不能成功安装插件】

   成功安装后,就可以在目录...\src-cordova\plugins\中多出了一个子目录:cordova-amap-location

三、插件使用

methods: {

  getPosition() {

         window.plugins.aMapLocationPlugin.getCurrentPosition((response) => {

                //成功定位的处理逻辑

                 console.log(response);

           }, (response) => {

                 //定位失败的处理

          });

    }

}

这是笔者执行后,Response的结果如下:

{

"locationType":5,  【定位类型:定位失败0、GPS定位结果1、前次定位结果2、缓存定位结果4、Wifi定位结果5、基站定位结果6】

"latitude":32.074172,                        【纬度】

"longitude":118.769733,                      【经度】

"accuracy":50,                              【精度信息,单位:米】

"speed":0,                                  【速度信息】

"bearing":0,                                【方向信息】

"date":"Wed Nov 04 19:56:57 GMT+08:00 2020",  【定位时间】

"address":"江苏省南京市鼓楼区虹桥靠近虹桥",  【地址详情】

"country":"中国",          【国家信息】

"province":"江苏省",      【省信息】

"city":"南京市",          【城市信息】

"district":"鼓楼区",        【城区信息】

"street":"虹桥",          【街道信息】

"streetNum":"200-2号院",  【街道门牌号】

"cityCode":"025",          【城市编码】

"adCode":"320106",        【地区编码】

"poiName":"虹桥",        【POI名称,信息点名称】

"aoiName":"南京工业大学虹桥校区宿舍区"  【AOI名称,多边形名称】

}

【注意,由于笔者是在房间内执行以上程序,所以插件自动采用的是wifi定位方法,误差50米,但据笔者分析坐标,真实误差应该200米以上。不过如果到室外,用GPS定位的话,误差应该会小很多吧】

四、总结

       cordova下的定位插件其实有很多:cordova-plugin-geolocation、cordova-plugin-bd-geolocation、cordova-plugin-baidumaplocation、cordova-plugin-geolocation-gaode、cordova-baidu-location、cordova-plugin-amap-location、cordova-amap-location......

     注明是cordova百度地图插件、cordova高德地图插件就有好多个,一开始笔者完全就搞晕了,同样的cordova高德地图插件怎么会有这么多个?后来才发现,这些插件并不是官方的,而是一些作者自己封装发布出来的。

     在此之前,笔者试过好几个插件,不知道是环境问题,还是插件本身就有问题:

     1、cordova-plugin-geolocation,出现“Only secure origins are allowed (see: https://goo.gl/Y0ZkNV)”错误,失败!

     2、cordova-plugin-baidumaplocation,执行定位命令没有响应,失败!

     3、cordova-plugin-bd-geolocation,速度倒是挺快,执行结果如下,完全就得不到地址和正确的坐标信息,失败!

      Position: {"timestamp":1604463557225,"coords":{"latitude":5e-324,"longitude":5e-324,"altitude":5e-324,"accuracy":0,"altitudeAccuracy":0,"heading":-1,"speed":0}}

      Extra:  {"type":162,"gpsAccuracyStatus":0}

    直到用cordova-amap-location时才一次性成功(就是开始申请key时有些小折腾),所以笔者将方法推荐给大家,以减少各位像我一样的重复折腾。

五、后续:补

    1、如果执行定位后出现定位失败(response=12),通过查https://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/可知,没有给这个应用开放定位权限,因此在移动终端上允许这个应用的定位权限即可。

    2、如果执行定位后出现KEY鉴权失败(response=7)【这个坑折腾我好长时间:( 】

    以上高德开发平台中的“发布版本安全码SHA1”配置,根据“创建app数字签名证书”如果采用第三种方式进行apk签名,由于数字签名证书采用的是jks文件,而不是本文以上介绍的keystore文件方式。因此“发布版本安全码SHA1”采用如下方式获得:

keytool -list -v -keystore 数字证书文件名.jks

     输入创建这个证书时配置的密码,即可得到发布版安全码SHA1。

你可能感兴趣的:(基于cordova-amap-location插件的高德地图定位实现)