aMapLBS
来自于:官方立即使用
configManager singleLocation singleAddress startLocation stopUpdatingLocation
概述
随着移动互联网飞速发展,人与手机成为了形影不离的好伙伴,围绕位置提供服务成为可能。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中实现定位功能呢?
我们的 APICloud 平台已经将高德定位的 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 字段。
模块接口
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 zzz
altitude: 200 //数字类型;当前设备所处的海拔信息
}
示例代码
var aMapLBS = api.require('aMapLBS');
aMapLBS.singleLocation({
timeout: 10
}, function(ret, err) {
if (ret.status) {
alert(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: '' //字符串类型;所属兴趣点名称
}
}
示例代码
var aMapLBS = api.require('aMapLBS');
aMapLBS.singleAddress({
timeout: 10
}, function(ret, err) {
if (ret.status) {
alert(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 zzz
altitude: 200 //数字类型;当前设备所处的海拔信息
}
示例代码
var aMapLBS = api.require('aMapLBS');
aMapLBS.startLocation(function(ret, err) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
stopUpdatingLocation
停止连续定位,调用此方法会cancel掉所有的单次定位请求,可以用来取消单次定位
stopUpdatingLocation()
示例代码
var aMapLBS = api.require('aMapLBS');
aMapLBS.stopUpdatingLocation();
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本