开发指南
WZLocation SDK for uni-app 能够使得开发者准确快速的获取用户的位置信息。根据以下步骤,便可以得到用户的经纬度坐标,逆地理、正地理、poi 搜索等接口的快速使用。 uni-sdk 支持打包成 H5,web,微信小程序, app。
创建应用和key
- 通过官网至LOTBoard 注册账号:https://lothub.newayz.com/
- 注册账号后,并申请应用,获取 APP 的 accesskey
- 从官方网站按照需求下载开发包并解压。解压后,将本文件导入到项目目录下,建议放到 utils 目录下。
- HBuilder X 请升级到 4.4 以上
集成SDK
前往uni插件平台下载插件:uni-WiFi

从官方网站按照需求下载开发包,解压后,将本文件导入到项目目录下,建议放到
utils目录下。在工程 manifest.json 的App权限配置中添加WIFI相关权限
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
- 导入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
在您的页面中导入定位包,并初始化sdk。根据您的业务需求和使用场景配置参数,参数配置如下:
字段 类型 是否必填 说明 appKey String 是 从官网申请的应用的accesskey deviceId String 是 用户唯一ID isLocateOnce Boolean 是 是否单次定位,默认单次定位 interval Number 否 定位频率,默认 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
方法参数:
| 字段 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| success | function | 是 | 定位成功回调,返回参数详见下方 |
| error | function | 是 | 定位成功失败,返回参数详见下方 |
成功返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| longitude | Number | 经度 |
| latitude | Number | 纬度 |
| accuracy | Number | 定位结果的精度值,单位:米 |
| spatialReference | string | 坐标点的空间坐标系,默认 "gcj02"。可选wgs84/bd09 |
| timestamp | Number | 定位请求的时间戳,单位:毫秒 |
| address | Address | 结构化地址信息 |
| place | Place | 定位 POI信息 |
Address
| 字段 | 类型 | 说明 |
|---|---|---|
| name | String | 当前定位地址的格式化全称 |
| context | Array<Context> | 格式化地址的组成部分 |
Context
| 字段 | 类型 | 说明 |
|---|---|---|
| code | String | 格式化地址层级对应的代码 |
| name | String | 格式化地址层级对应的名称 |
| type | String | 格式化地址层级对应的类型,可能的值包括 :"Country","Province","City","District" ,"Township","Road","Housenumber","Boundingarea","Building" |
Place
| 字段 | 类型 | 说明 |
|---|---|---|
| name | String | 对应的 POI名称 |
| type | String | 当前场景的属性信息,例如:"Entity" 等 |
| distance | Distance | 距离 |
Distance
| 字段 | 类型 | 说明 |
|---|---|---|
| line | Number | 定位结果坐标点到 poi 坐标点的直线距离 |
失败返回
| 字段 | 类型 | 说明 |
|---|---|---|
| code | Number | 错误码 |
| msg | String | 错误信息 |
调用示例:
// 参数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 仅保证两次有效定位上报间隔 ≥ 配置的时间间隔,无法严格对齐设定间隔精准回调。定位回调由手机系统、宿主应用自主调度,网络波动、硬件定位采样频次都会拉长实际间隔,实际间隔大于配置间隔值属于正常业务现象。
方法参数:
| 字段 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| need | Boolean | 是 | true 开启间隔控制,false 关闭(默认) |
说明:
- 时间间隔仅在持续定位模式(
isLocateOnce = false)下生效,单次定位不受影响 - 各平台
onLocationChange的回调频率由底层系统管理,开发者无权限固定回调周期,SDK 仅做上报拦截,不干预系统定位采样。
调用示例:
// 开启间隔控制,假设 initOption 中 interval 配置为 10000ms
wzLocation.needObeyInterval(true)
// ... 开始持续定位 ...
// 关闭间隔控制,每次系统回调都会发起请求
wzLocation.needObeyInterval(false)
停止定位
方法名:wzLocation.stopLocation
调用 stopLocation 即可停止定位,此方法无需提供回调。
调用示例:
wzLocation.stopLocation()
逆地理
方法名:wzLocation.getReverseCode
方法参数:
| 字段 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| longitude | Number | 是 | 经度 |
| latitude | Number | 是 | 纬度 |
| spatialReference | String | 是 | 坐标点所属的空间坐标系 |
成功返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| source | String | 定位源信息,如:"Entity" 等 |
| timestamp | String | 定位结果时间戳 |
| longitude | Number | 经度 |
| latitude | Number | 纬度 |
| accuracy | Number | 定位精度 |
| spatialReference | String | 坐标系 |
| address | String | 地址信息 |
| place | Place | 定位 POI信息 |
Place字段如下
| 字段 | 类型 | 必须 | 说明 |
|---|---|---|---|
| name | String | 是 | 对应的 POI名称 |
| type | String | 是 | 当前场景的属性信息,如:"Entity" 等 |
| Distance{ line } | Number | 否 | 定位结果坐标点到 poi 坐标点的直线距离 |
返回失败
| 字段 | 类型 | 说明 |
|---|---|---|
| code | Number | 错误码 |
| msg | String | 错误信息 |
调用示例:
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
方法参数:
| 字段 | 类型 | 说明 |
|---|---|---|
| name | String | 搜索 KEY 关键词 |
| city | String | 城市 |
调用示例:
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
方法参数:
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
| searchkey | String | 是 | - | 搜索关键词(如 “天安门”“星巴克”“科技园”,支持中文、英文及数字组合) |
| city | String | 是 | - | 搜索城市(如 “北京”“上海”“广州”,支持直辖市、省会城市、地级市名称) |
| page_index | Number | 否 | 1 | 分页页码,从 1 开始,用于获取多页搜索结果 |
| page_size | Number | 否 | 20 | 单页结果条数 |
调用示例:
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
方法参数:
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
| keyword | String | 是 | - | 搜索关键词(如 “餐厅”“加油站”“公园”) |
| category | String | 否 | - | POI 分类筛选(如 “餐饮服务”“旅游景点”“交通设施”,需符合地图服务分类编码) |
| location | String | 是 | - | 定位坐标,格式为 纬度,经度(如 39.9042,116.4074,需通过定位接口获取有效坐标) |
| radius | Number | 否 | 5000 | 搜索半径(单位:米),取值范围 100-20000(20 公里) |
| orderby | String | 否 | 'distance_score' | 按距离排序 |
| page_index | Number | 否 | 1 | 分页页码,从 1 开始 |
| page_size | Number | 否 | 20 | 单页结果条数 |
调用示例:
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_sprf | String | 是 | 返回坐标系格式默认gcj02,三种格式(gcj02,wgs84,bd09) |
| success | function | 是 | 定位成功回调,返回参数同wzLocation.getLocation |
| error | function | 是 | 定位成功失败,返回参数同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);
}
);
打包不同平台
打包成浏览器
不支持 chrome 浏览器(chrome 连接的是国外服务,故无法定位),浏览器只支持 GPS 或是 IP 定位。
打包成应用 Android 与 IOS
直接打包即可。
打包成微信小程序
打包成小程序之后,需在 app.json 中添加 "requiredPrivateInfos": ["getLocation"] 权限。不支持连续后台定位,后台定位需申请小程序的 background 定位接口。
常见错误码
| 错误码 | 参数说明 |
|---|---|
| 1001 | 定位权限未开 |
| 1002 | WIFI 开关未开 |
| 1003 | 您尚未配置 appKey |
| 1004 | option 参数未配置 |
| 1005 | option 参数非法, 需提供设备 ID |
| 1006 | WIFI 开启失败 |
| 10010 | 定位服务返回失败 |
| 10012 | 定位坐标系不支持,请使用gcj02/wgs84/bd09 |
| 10015 | 【定位异常】经纬度为空或无效值 |
| 2001 | 特殊异常 |
