aMapLBS

概述

注意:应工信部要求,自本原生插件1.2.0版本起首次调用本原生插件前必须先弹出隐私协议,详情参考SDK合规使用方案。之后需先调用 updateLocationPrivacy,否则定位接口都无效。

随着移动互联网飞速发展,人与手机成为了形影不离的好伙伴,围绕位置提供服务成为可能。LBS(location based service)应运而生,成为了各类APP的标配。

而定位则是实现一切LBS的基础——因为只有获取到用户的位置,才能围绕位置,为用户提供各类服务。

大家应该都有类似的经历,第一次打开一个APP,会弹出对话框,寻问是否可以使用您当前的位置。这就是我们通常说的定位功能。

定位能做什么?

1、获取用户实时位置信息,以便为其提供“附近”优质服务;

2、获取用户实时位置信息,设置地理围栏,实现信息的精准推送;

3、获得用户分布情况,通过位置大数据分析,实现高效的资源配置。

4、实时监测工作人员(专车、货运、快递、外卖等)的位置及运动轨迹,实现运力及人力的高效调度。

什么场景会用到定位?

移动互联时代,定位无处不在,任何一个应用,只要想知晓用户位置,就一定会用到定位(不管是为用户提供服务,还是用于用户分析)。 高德定位深植于各类APP中,出行、社交、O2O、P2P、旅游、新闻、天气……

1、定位可以配合地图一起使用

适用于需要定位用户当前位置,及周边人车、商户位置,并将其展示在地图上的应用,典型案例:美团、神州专车

2、定位也可以独立使用

适用于只需定位用户位置,或计算两个或多个位置间距离,无需在地图上展示的应用,典型案例:陌陌、58到家

定位的实现原理

据专家透露:同时打开手机自身的GPS定位,并开启WiFi开关(无需连接到WiFi),可以很好的提高定位精度。

小课堂:科普定位原理

为什么这样就可以提高定位精度?来,我们先来弄明白定位的原理吧!

目前,主流的手机定位方式大致分为三类:

1、GPS定位:通过手机中的GPS原生插件获取位置

2、基站定位:通过运营商的电信基站(2g、3g、4g等)进行定位

3、混合定位(也有叫wifi定位):GPS+基站+wifi的混合定位方式

混合定位最为精确,高德采用的就是混合定位的方式。

我的APP如何实现定位功能呢?

定位对于APP,既然这么厉害且必须,那怎么才能在自己的APP中实现定位功能呢?

我们的 Yonbuilder移动开发平台已经将高德定位的 SDK 封装成了原生插件,开发者只需按照下述文档中所说的操作,简单几行代码即可实现负责的定位功能。

原生插件概述

aMapLBS 封装了高德定位的 SDK。高德定位 SDK 是为移动端应用提供的一套简单易用的LBS定位服务接口,专注于为广大开发者提供最好的综合定位服务,通过使用高德定位 SDK,开发者可以轻松为应用程序实现智能、精准、高效的定位功能。

使用插件前,请先注册高德开放平台账号。

申请 API Key

用户在使用本原生插件之前需要获取高德地图API Key,Key 申请的具体流程请参照 申请Key。本原生插件需要的 key 可以和 aMap、aMapLocation 、aMapNavigation 、aMapReportLocation 原生插件的 key 共用。

配置 config 文件

申请到 高德地图 API Key 后,需要配置在 config.xml 文件内。配置方法如下:

  • 名称:aMapLBS
  • 参数:apiKey
  • 配置示例:
  <feature name="aMapLBS">
    <param name="android_api_key" value="f7Is0dWLom2q6rV3ZfFPZ1aa" />
    <param name="ios_api_key" value="dd5343be258aa304698e42cd0fc761cd" />
  </feature>
  • 字段描述:

    android_api_key:在高德地图开放平台申请的 android 版 ak

    ios_api_key:在高德地图开放平台申请的 iOS 版 ak

注意:

在 iOS 平台上,若要支持后台定位需配置 config.xml 文件的 location 字段。

从1.1.4版本起,iOS 端 SDK 更新为高德最新版本SDK,最新版本的SDK包含 IDFA 相关功能。所以 iOS 端提交 AppStore 时必须认真阅读 提交AppStore必读,以及如何解决因获取 IDFA 被 AppStore 拒绝的问题?

原生插件接口

updateLocationPrivacy

设置定位类隐私权限

updateLocationPrivacy({params})

params

privacyAgree:

  • 类型:字符串
  • 描述:(可选项)用户同意隐私状态
  • 默认值:didAgree
  • 取值范围:
    • didAgree:已同意
    • notAgree;不同意
    • unknow:未知

privacyShow:

  • 类型:字符串
  • 描述:(可选项)显示隐私弹窗状态
  • 默认值:didShow
  • 取值范围:
    • didShow:已显示
    • notShow;未显示
    • unknow:未知

containStatus:

  • 类型:字符串
  • 描述:(可选项) 集成SDK隐私信息状态
  • 默认值:didContain
  • 取值范围:
    • didContain:已集成
    • notContain;未集成
    • unknow:未知

示例代码

var aMap = api.require('aMapLBS');
aMap.updateLocationPrivacy({
    privacyAgree:'didAgree',
    privacyShow:'didShow',
    containStatus:'didContain'
});

可用性

iOS系统,Android系统

可提供的1.2.0及更高版本

configManager

配置定位信息

configManager({params}, callback(ret))

params

accuracy:

  • 类型:字符串
  • 描述:设定定位精度
  • 默认值:hundredMeters
  • 取值范围:
    • tenMeters:十米
    • hundredMeters:百米
    • kilometer:千米
    • threeKilometers:三千米
    • best:精确度最高

filter:

  • 类型:数字
  • 描述:位置更新所需最小距离(单位米)
  • 默认值:1.0

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true                //布尔类型;操作成功状态值
}

示例代码

var aMapLBS = api.require('aMapLBS');
aMapLBS.configManager({
    accuracy: 'hundredMeters',
    filter: 1
}, function(ret, err) {
    if (ret.status) {
        alert('定位管理器初始化成功!');
    }
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

singleLocation

单次地理定位,可以通过 stopUpdatingLocation 方法去取消正在进行的单次定位请求。如果当前正在连续定位,调用此方法将会失败

singleLocation({params}, callback(ret, err))

params

timeout:

  • 类型:数字
  • 描述:指定单次定位超时时间,单位为妙(s)。最小值是2s
  • 默认值:10

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true,               //布尔类型;操作成功状态值
    lon:116.213,               //数字类型;定位到的经度
    lat:39.213,                //数字类型;定位到的纬度
    accuracy: 65,              //数字类型;本次定位的精度,仅支持 iOS 平台
    time:'',                   //字符串类型;本次定位时间,格式为:yyyy-MM-dd HH:mm:ss 
    speed:'',
    bearing:'',  
    altitude: 200               //数字类型;当前设备所处的海拔信息
}

示例代码

var aMapLBS = api.require('aMapLBS');
aMapLBS.singleLocation({
    timeout: 10
}, function(ret, err) {
    if (ret.status) {
        api.alert({
            msg: JSON.stringify(ret)
        })
    }
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

singleAddress

单次逆地理定位,可以通过 stopUpdatingLocation 方法去取消正在进行的单次定位请求。如果当前正在连续定位,调用此方法将会失败

singleAddress({params}, callback(ret))

params

timeout:

  • 类型:数字
  • 描述:指定单次定位逆地理超时时间,单位为妙(s)。最小值是2s
  • 默认值:5

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true,               //布尔类型;操作成功状态值
    address: {
       formattedAddress: '',   //字符串类型;格式化地址
       country: '',            //字符串类型;国家
       province: '',           //字符串类型;省/直辖市
       city: '',               //字符串类型;市
       district: '',           //字符串类型;区
       township: '',           //字符串类型;乡镇(android不支持),已废弃,建议用aMap原生插件的getNameFromCoords接口获取
       neighborhood: '',       //字符串类型;社区(android不支持),已废弃,建议用aMap原生插件的getNameFromCoords接口获取
       building: '',           //字符串类型;建筑(android不支持),已废弃,建议用aMap原生插件的getNameFromCoords接口获取
       citycode: '',           //字符串类型;城市编码
       adcode: '',             //字符串类型;区域编码
       street: '',             //字符串类型;街道名称
       number: '',             //字符串类型;门牌号
       POIName: '',            //字符串类型;兴趣点名称
       AOIName: '',             //字符串类型;所属兴趣点名称
       speed:'',
       bearing:''
    }
}

示例代码

var aMapLBS = api.require('aMapLBS');
aMapLBS.singleAddress({
    timeout: 10
}, function(ret, err) {
    if (ret.status) {
        api.alert({
            msg: JSON.stringify(ret)
        })
    }
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

startLocation

开始连续定位,可以通过 stopUpdatingLocation 方法去取消。调用此方法会cancel掉所有的单次定位请求

startLocation(callback(ret))

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true,                //布尔类型;操作成功状态值
    lon:116.213,                //数字类型;经度
    lat:39.213,                 //数字类型;纬度
    accuracy: 65,               //数字类型;本次定位的精度,仅支持 iOS 平台
    time:'',                   //字符串类型;本次定位时间,格式为:yyyy-MM-dd HH:mm:ss
    speed:'',
    bearing:''
    altitude: 200               //数字类型;当前设备所处的海拔信息
}

示例代码

var aMapLBS = api.require('aMapLBS');
aMapLBS.startLocation(function(ret, err) {
    if (ret.status) {
        api.alert({
            msg: JSON.stringify(ret)
        })
    }
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

stopUpdatingLocation

停止连续定位,调用此方法会cancel掉所有的单次定位请求,可以用来取消单次定位

stopUpdatingLocation()

示例代码

var aMapLBS = api.require('aMapLBS');
aMapLBS.stopUpdatingLocation();

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

hasPermission

当前后台定位权限是否开启

hasPermission(callback(ret))

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true,                //布尔类型;后台定位权限是否已经开启
}

示例代码

var aMapLBS = api.require('aMapLBS');
aMapLBS.hasPermission(function(ret){
    alert(JSON.stringify(ret));
});

可用性

Android系统

可提供的1.2.5及更高版本

requestPermission

Android10及以上设备调用此接口申请后台定位权限。注意:调用该接口前应用必须已经开启访问位置信息的权限,否则调用没有反应。

requestPermission()

示例代码

var aMapLBS = api.require('aMapLBS');
aMapLBS.requestPermission();

可用性

Android系统

可提供的1.2.5及更高版本

是否仍需要帮助? 请保持联络!
最后更新于 2024/12/2