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,开发者可以轻松为应用程序实现智能、精准、高效的定位功能。

aMapLBS - 图1

申请 API Key

用户在使用本模块之前需要获取高德地图API Key,Key 申请的具体流程请参照 申请Key。本模块需要的 key 可以和 aMapaMapLocationaMapNavigationaMapReportLocation 模块的 key 共用。

配置 config 文件

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

  • 名称:aMapLBS
  • 参数:apiKey
  • 配置示例:
  1. <feature name="aMapLBS">
  2. <param name="android_api_key" value="f7Is0dWLom2q6rV3ZfFPZ1aa" />
  3. <param name="ios_api_key" value="dd5343be258aa304698e42cd0fc761cd" />
  4. </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 对象
  • 内部字段:
  1. {
  2. status:true //布尔类型;操作成功状态值
  3. }

示例代码

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

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

singleLocation

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

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

params

timeout:

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

callback(ret)

ret:

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

示例代码

  1. var aMapLBS = api.require('aMapLBS');
  2. aMapLBS.singleLocation({
  3. timeout: 10
  4. }, function(ret, err) {
  5. if (ret.status) {
  6. alert(JSON.stringify(ret));
  7. }
  8. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

singleAddress

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

singleAddress({params}, callback(ret))

params

timeout:

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

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status:true, //布尔类型;操作成功状态值
  3. address: {
  4. formattedAddress: '', //字符串类型;格式化地址
  5. country: '', //字符串类型;国家
  6. province: '', //字符串类型;省/直辖市
  7. city: '', //字符串类型;市
  8. district: '', //字符串类型;区
  9. township: '', //字符串类型;乡镇(android不支持),已废弃,建议用aMap模块的getNameFromCoords接口获取
  10. neighborhood: '', //字符串类型;社区(android不支持),已废弃,建议用aMap模块的getNameFromCoords接口获取
  11. building: '', //字符串类型;建筑(android不支持),已废弃,建议用aMap模块的getNameFromCoords接口获取
  12. citycode: '', //字符串类型;城市编码
  13. adcode: '', //字符串类型;区域编码
  14. street: '', //字符串类型;街道名称
  15. number: '', //字符串类型;门牌号
  16. POIName: '', //字符串类型;兴趣点名称
  17. AOIName: '' //字符串类型;所属兴趣点名称
  18. }
  19. }

示例代码

  1. var aMapLBS = api.require('aMapLBS');
  2. aMapLBS.singleAddress({
  3. timeout: 10
  4. }, function(ret, err) {
  5. if (ret.status) {
  6. alert(JSON.stringify(ret));
  7. }
  8. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

startLocation

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

startLocation(callback(ret))

callback(ret)

ret:

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

示例代码

  1. var aMapLBS = api.require('aMapLBS');
  2. aMapLBS.startLocation(function(ret, err) {
  3. if (ret.status) {
  4. alert(JSON.stringify(ret));
  5. }
  6. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

stopUpdatingLocation

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

stopUpdatingLocation()

示例代码

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

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本