开发指南

WZLocation SDK for uni-app 能够使得开发者准确快速的获取用户的位置信息。根据以下步骤,便可以得到用户的经纬度坐标,逆地理、正地理、poi 搜索等接口的快速使用。 uni-sdk 支持打包成 H5,web,微信小程序, app。

创建应用和key

  1. 通过官网至LOTBoard 注册账号:https://lothub.newayz.com/
  2. 注册账号后,并申请应用,获取 APP 的 accesskey
  3. 从官方网站按照需求下载开发包并解压。解压后,将本文件导入到项目目录下,建议放到 utils 目录下。
  4. HBuilder X 请升级到 4.4 以上

集成SDK

  1. 前往uni插件平台下载插件:uni-WiFi

    创建应用截图

  2. 从官方网站按照需求下载开发包,解压后,将本文件导入到项目目录下,建议放到 utils 目录下。

  3. 在工程 manifest.json 的App权限配置中添加WIFI相关权限

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
  1. 导入sdk。在需要使用定位功能的界面导入wz_sdk_uniapp.js。示例如下(后续api展示中我们将以wzLocation演示):
<script>
  import * as wzLocation from '@/utils/wz_sdk_uniapp.js';
</script>

备注:示例代码中我们是将插件文件放在根目录的utils目录下,所以我们导入的路径为@/utils/wz_sdk_uniapp.js。在实际集成过程中,如果为了方便管理第三方sdk,也可以放在其他目录。比如根目录的libs目录下,导入时需要将@/utils/wz_sdk_uniapp.js替换成@/libs/wz_sdk_uniapp.js

  1. 在您的页面中导入定位包,并初始化sdk。根据您的业务需求和使用场景配置参数,参数配置如下:

    字段类型是否必填说明
    appKeyString从官网申请的应用的accesskey
    deviceIdString用户唯一ID
    isLocateOnceBoolean是否单次定位,默认单次定位
    intervalNumber定位频率,默认 5 秒定位一位,单位毫秒
<script>
  import * as wzLocation from '@/utils/wz_sdk_uniapp.js';

  onLoad(){
    // 参数1 官网申请应用的appKey, 参数2 用户设备唯一ID, 参数3 是否单次定位, 参数4 定位 频率(单次定位时此参数不生效)
    wzLocation.initOption("abcde","12345", true, 0)
    ...
  }
</script>

API 文档

单次定位

方法名:wzLocation.getLocation

方法参数:

字段类型是否必填说明
successfunction定位成功回调,返回参数详见下方
errorfunction定位成功失败,返回参数详见下方

成功返回参数

字段类型说明
longitudeNumber经度
latitudeNumber纬度
accuracyNumber定位结果的精度值,单位:米
spatialReferencestring坐标点的空间坐标系,默认 "gcj02"。可选wgs84/bd09
timestampNumber定位请求的时间戳,单位:毫秒
addressAddress结构化地址信息
placePlace定位 POI信息

Address

字段类型说明
nameString当前定位地址的格式化全称
contextArray<Context>格式化地址的组成部分

Context

字段类型说明
codeString格式化地址层级对应的代码
nameString格式化地址层级对应的名称
typeString格式化地址层级对应的类型,可能的值包括 :"Country","Province","City","District" ,"Township","Road","Housenumber","Boundingarea","Building"

Place

字段类型说明
nameString对应的 POI名称
typeString当前场景的属性信息,例如:"Entity" 等
distanceDistance距离

Distance

字段类型说明
lineNumber定位结果坐标点到 poi 坐标点的直线距离

失败返回

字段类型说明
codeNumber错误码
msgString错误信息

调用示例:

// 参数1 官网申请应用的appKey, 参数2 用户设备唯一ID, 参数3 是否单次定位, 参数4 定位 频率(单次定位时此参数不生效)
wzLocation.initOption("abcde","12345", true, 0)
wzLocation.getLocation(
	res => {
		console.log("index success", res);
		res.timestamp = new Date(res.timestamp).toLocaleString()
		this.wzLocation = res;
	},
	fail => {
		console.log("fail" + fail.code + fail.msg);
	}
);

连续定位

方法名:wzLocation.getLocation,与单次定位不同的是将initOption中第三个参数设置为false。

备注:成功返回和失败返回参数,同单次定位

调用示例:

// 参数1 官网申请应用的appKey, 参数2 用户设备唯一ID, 参数3 是否单次定位, 参数4 定位 频率(单次定位时此参数不生效)
wzLocation.initOption("abcde","12345", false, 10000)
wzLocation.getLocation(
	res => {
		console.log("index success", res);
		res.timestamp = new Date(res.timestamp).toLocaleString()
		this.wzLocation = res;
	},
	fail => {
		console.log("fail" + fail.code + fail.msg);
	}
);

控制定位时间间隔

方法名:wzLocation.needObeyInterval

受平台系统能力差异限制,部分平台无法限制定位回调触发频率:部分平台上SDK收到系统 onLocationChange 定位回调,就会直接向上游发起一次定位上报请求。若业务需要管控上报频次、节约接口调用配额、减轻服务端接收压力,可调用本接口开启 SDK 内置时间间隔拦截逻辑。开启间隔控制后,SDK 仅保证两次有效定位上报间隔 ≥ 配置的时间间隔,无法严格对齐设定间隔精准回调。定位回调由手机系统、宿主应用自主调度,网络波动、硬件定位采样频次都会拉长实际间隔,实际间隔大于配置间隔值属于正常业务现象。

方法参数:

字段类型是否必填说明
needBooleantrue 开启间隔控制,false 关闭(默认)

说明:

  • 时间间隔仅在持续定位模式isLocateOnce = false)下生效,单次定位不受影响
  • 各平台 onLocationChange 的回调频率由底层系统管理,开发者无权限固定回调周期,SDK 仅做上报拦截,不干预系统定位采样。

调用示例:

// 开启间隔控制,假设 initOption 中 interval 配置为 10000ms
wzLocation.needObeyInterval(true)
// ... 开始持续定位 ...
// 关闭间隔控制,每次系统回调都会发起请求
wzLocation.needObeyInterval(false)

停止定位

方法名:wzLocation.stopLocation

调用 stopLocation 即可停止定位,此方法无需提供回调。

调用示例:

wzLocation.stopLocation()

逆地理

方法名:wzLocation.getReverseCode

方法参数:

字段类型是否必填说明
longitudeNumber经度
latitudeNumber纬度
spatialReferenceString坐标点所属的空间坐标系

成功返回参数

字段类型说明
sourceString定位源信息,如:"Entity" 等
timestampString定位结果时间戳
longitudeNumber经度
latitudeNumber纬度
accuracyNumber定位精度
spatialReferenceString坐标系
addressString地址信息
placePlace定位 POI信息

Place字段如下

字段类型必须说明
nameString对应的 POI名称
typeString当前场景的属性信息,如:"Entity" 等
Distance{ line }Number定位结果坐标点到 poi 坐标点的直线距离

返回失败

字段类型说明
codeNumber错误码
msgString错误信息

调用示例:

getAddress() {
    // 设置官网申请应用的appKey
    wzLocation.setAk("key")
    // 参数1 经度, 参数2 纬度, 参数3 坐标系
    wzLocation.getReverseCode(107.191693, 27.945061, 'gcj02').then(
        (res) => {
            console.log("address : " + res.address.name);
        },
        (error) => {
            console.log("error : ", error);
        });
}

正地理接口调用

方法名:wzLocation.getGeoCode

方法参数:

字段类型说明
nameString搜索 KEY 关键词
cityString城市

调用示例:

getGeoCode(){
    wzLocation.setAk("key")
    wzLocation.getGeoCode("泛悦城", '武汉市').then(
        (res) => {
            let dataList =  res;
            console.log(dataList[0].geoPoint,dataList[0].address.name)
        },
        (error) => {
            console.log("error : ", error);
        });
}

poi 关键词搜索接口调用

方法名:wzLocation.poiSearch

方法参数:

参数名类型是否必填默认值说明
searchkeyString-搜索关键词(如 “天安门”“星巴克”“科技园”,支持中文、英文及数字组合)
cityString-搜索城市(如 “北京”“上海”“广州”,支持直辖市、省会城市、地级市名称)
page_indexNumber1分页页码,从 1 开始,用于获取多页搜索结果
page_sizeNumber20单页结果条数

调用示例:

poiSearch(){
    wzLocation.setAk("key")
    wzLocation.poiSearch("泛悦城T2", '武汉市').then(
        (res) => {
            let dataList =  res;
            console.log("poi搜索:",dataList[0].geoPoint,dataList[0].address.name)
        },
        (error) => {
            console.log("error : ", error);
        });
}

POI 附近搜索接口调用

方法名:wzLocation.poiNearbySearch

方法参数:

参数名类型是否必填默认值说明
keywordString-搜索关键词(如 “餐厅”“加油站”“公园”)
categoryString-POI 分类筛选(如 “餐饮服务”“旅游景点”“交通设施”,需符合地图服务分类编码)
locationString-定位坐标,格式为 纬度,经度(如 39.9042,116.4074,需通过定位接口获取有效坐标)
radiusNumber5000搜索半径(单位:米),取值范围 100-20000(20 公里)
orderbyString'distance_score'按距离排序
page_indexNumber1分页页码,从 1 开始
page_sizeNumber20单页结果条数

调用示例:

poiNearBySearch() {
    wzLocation.setAk("key")
    wzLocation.poiNearbySearch("乒乓球", "体育场馆", '120.59986,31.25979').then(
        (res) => {
            let dataList = res;
            console.log("poi搜索:", dataList[0].geoPoint, dataList[0].address.name)
        },
        (error) => {
            console.log("error : ", error);
        }
    );
}

指定定位返回经纬度坐标系

方法名:wzLocation.getLocationByCoordinate

场景说明:当需要定位接口返回指定坐标系的经纬度的时候,可以通过该方法实现。

方法参数:

字段类型是否必填说明
response_sprfString返回坐标系格式默认gcj02,三种格式(gcj02,wgs84,bd09)
successfunction定位成功回调,返回参数同wzLocation.getLocation
errorfunction定位成功失败,返回参数同wzLocation.getLocation

调用示例:

// 参数1 官网申请应用的appKey, 参数2 用户设备唯一ID, 参数3 是否单次定位, 参数4 定位 频率(单次定位时此参数不生效)
wzLocation.initOption("abcde","12345", true, 0)
wzLocation.getLocationByCoordinate(
  "bd09",
  res => {
    console.log("success", res);
  },
  fail => {
    console.log("fail" + fail.code + fail.msg);
  }
);

打包不同平台

  1. 打包成浏览器

    不支持 chrome 浏览器(chrome 连接的是国外服务,故无法定位),浏览器只支持 GPS 或是 IP 定位。

  2. 打包成应用 Android 与 IOS

    直接打包即可。

  3. 打包成微信小程序

    打包成小程序之后,需在 app.json 中添加 "requiredPrivateInfos": ["getLocation"] 权限。不支持连续后台定位,后台定位需申请小程序的 background 定位接口。

 

常见错误码

错误码参数说明
1001定位权限未开
1002WIFI 开关未开
1003您尚未配置 appKey
1004option 参数未配置
1005option 参数非法, 需提供设备 ID
1006WIFI 开启失败
10010定位服务返回失败
10012定位坐标系不支持,请使用gcj02/wgs84/bd09
10015【定位异常】经纬度为空或无效值
2001特殊异常