airlbs - airlbs 定位服务(收费服务,需自行联系销售申请)
作者:王城钧 | 最后修改:2026-04-24
一、概述
airlbs 扩展库是专为高精度需求设计的收费定位服务,其优势在于更高定位精度或额外功能,但需申请授权。免费替代方案为 lbsloc2,定位精度不高。
为了更清晰地了解这两个库的特点,下表对比了它们的主要特性:
| 区别项 | airlbs(付费版) | lbsloc2(免费版) |
|---|---|---|
| 定位原理 | 多基站/Wi-Fi混合定位,上报多个基站或Wi-Fi信息,通过三角定位法计算坐标 | 单基站定位,上报单一基站信息,服务器根据存储的基站经纬度直接返回位置 |
| 定位精度 | 10-300米(城市环境),郊区/农村可能更低,但显著优于单基站定位 | 1.5公里内,误差较大,适用于粗略区域定位 |
| 请求频率限制 | 可在套餐内选择:合宙数据库:1.每小时12次每台年费1元 2.每小时24次每台年费2元 3.每小时60次每台年费5元 4.每小时240次每台年费10元 高德数据库:1.每小时12次每台年费10元 2.每小时24次每台年费20元 3.每小时60次每台年费50元 | 2分钟最多1次,超过频次会返回定位失败 |
| 功能特性 | 支持多基站和Wi-Fi混合定位,定位精度高;适用于对精度要求较高的场景 | 仅支持单基站定位,无Wi-Fi定位功能;适用于对精度要求不高的场景 |
相较于 lbsloc2,airlbs 的优势在于更高的定位精度,更高的请求频率。基于此在进行项目开发的时候可以根据定位精度以及项目费用预算自行选择。
合宙 lbsloc、lbsloc2、airlbs 三个库介绍:
-- lbsloc 是异步回调接口,
-- lbsloc2 是是同步接口。
-- lbsloc比lbsloc2多了一个请求地址文本的功能。
-- lbsloc 和 lbsloc2 都是免费LBS定位的实现方式;
-- airlbs 扩展库是收费 LBS 的实现方式。
二、核心示例
1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;
2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;
3、更加完整和详细的 demo,请参考 LuatOS 仓库 中各个产品目录下的 demo/airlbs
local function airlbs_multi_cells_task_func ()
while true do
local result ,data = airlbs.request({
project_id = airlbs_project_id,--项目ID需根据实际修改
project_key = airlbs_project_key,--项目密钥需根据实际修改
timeout = 10000, --可自由设定超时时间
adapter = nil--选填网络适配器,若不填则默认是平台自带的网络协议栈
})
if result then
log.info("airlbs多基站定位返回的经纬度数据为", json.encode(data))
end
else
log.warn("请检查project_id和project_key")
end
--获取具体地址
local result, address = airlbs.get_address({
lat = data.lat,
lng = data.lng
})
if result then
log.info("airlbs.get_address", address)
else
log.info("airlbs.get_address失败", address)
end
sys.wait(20000) -- 循环20S一次多基站定位
end
end
sys.taskInit(airlbs_multi_cells_task_func)
----日志输出内容示例:
--airlbs多基站定位返回的经纬度数据为 {"lat":31.1354542,"lng":121.5423279}
三、常量详解
airlbs 扩展库没有常量。
四、函数详解
airlbs.request(param)
功能
多基站 +wifi 混合定位,获取定位数据
参数
param
参数含义:请求airlbs定位的项目id,项目秘钥,超时时间以及网络适配器选择。 { 参数含义:项目id,在https://iot.openluat.com/lbs/project-list中获取; 数据类型:string; 取值范围:无特别限制; 是否必选:必须传入此参数; 注意事项:暂无; 参数示例:"lblKo3"; 参数名称: param.project_id
参数含义:项目秘钥。; 数据类型:string; 取值范围:无特别限制; 是否必选:可选传入此参数; 注意事项:暂无; 参数示例:"DKqM6sHJkHV23WCzgzTbk7QW7HYGCJxp"; 参数名称: param.project_key
参数含义:表示从发送请求到读取到服务器响应整个过程的超时时间; 数据类型:number/nil; 取值范围:无特别限制; 是否必选:可选传入此参数; 注意事项:暂无; 参数示例:15000; 参数名称: param.timeout
参数含义:上网使用的网卡ID; 数据类型:number或者nil; 取值范围:number类型时,取值范围参考socket api中的常量详解; 是否必选:可选传入此参数; 注意事项:如果没有传入此参数,内核固件会自动选择当前时间点其他功能模块设置的默认网卡; 除非你airlbs请求时,一定要使用某一种网卡,才设置此参数; 如果没什么特别要求,不要设置此参数,使用系统中设置的默认网卡即可 ; 一般来说,LuatOS的网络应用demo中都会有netdrv_device功能模块设置默认网卡; 所以建议不要设置此参数,直接使用netdrv_device设置的默认网卡就行; 参数示例:socket.LWIP_GP表示使用4G网卡; 参数名称: param.adapter
参数含义:WiFi网络信息列表,用于WiFi定位; 数据类型:table或者nil; 取值范围:无特别限制; 是否必选:可选传入此参数; 注意事项:暂无; 参数示例:["24:32:AE:04:E1:67", -86]; 参数名称: param.wifi_info }
数据类型:table; 取值范围:无特别限制; 是否必选:暂无; 注意事项:暂无; 参数示例: { project_id = "lblKo3", project_key = "DKqM6sHJkHV23WCzgzTbk7QW7HYGCJxp", timeout = 15000, adapter = nil wifi_info = { {bssid = "24:32:AE:04:E1:67", rssi = -86}, {bssid = "AA:BB:CC:DD:EE:FF", rssi = -65}, {bssid = "11:22:33:44:55:66", rssi = -70} } }
返回值
local result,data = airlbs.request(param)
有两个返回值 result,data
result
含义说明:成功返回true,失败会返回false;
数据类型:boolean;
取值范围:true或者false;
注意事项:暂无;
返回示例:true;
data
含义说明:表示返回的经纬度数据;
数据类型:table或者nil;
取值范围:如果result为true返回的是table类型,如果result为false返回的是nil类型;
注意事项:暂无;
返回示例:airlbs多基站定位返回的经纬度数据为 {"lat":31.1354542,"lng":121.5423279};
示例
local result, data =
airlbs.request(
{
project_id = airlbs_project_id,
project_key = airlbs_project_key,
timeout = 10000,
adapter = nil,
wifi_info = {
{bssid = "24:32:AE:04:E1:67", rssi = -86},
{bssid = "AA:BB:CC:DD:EE:FF", rssi = -65},
{bssid = "11:22:33:44:55:66", rssi = -70}
}
}
)
if result then
log.info("airlbs多基站定位返回的经纬度数据为", json.encode(data))
end
----日志输出内容示例:
--airlbs多基站定位返回的经纬度数据为 {"lat":31.1354542,"lng":121.5423279}
airlbs.get_address(param)
功能
根据经纬度获取地址信息,只能在task中调用
参数
param
参数含义:请求地址信息的参数配置,包含经纬度、超时时间以及网络适配器选择。
{
参数含义:纬度;
数据类型:number;
取值范围:无特别限制;
是否必选:必须传入此参数;
注意事项:暂无;
参数示例:31.1354542;
参数名称: param.lat参数含义:经度;
数据类型:number;
取值范围:无特别限制;
是否必选:必须传入此参数;
注意事项:暂无;
参数示例:121.5423279;
参数名称: param.lng参数含义:表示从发送请求到读取到服务器响应整个过程的超时时间;
数据类型:number/nil;
取值范围:无特别限制;
是否必选:可选传入此参数;
注意事项:暂无;
参数示例:10000;
参数名称: param.timeout参数含义:上网使用的网卡ID;
数据类型:number或者nil;
取值范围:number类型时,取值范围参考socket api中的常量详解;
是否必选:可选传入此参数;
注意事项:如果没有传入此参数,内核固件会自动选择当前时间点其他功能模块设置的默认网卡;
除非你airlbs请求时,一定要使用某一种网卡,才设置此参数;
如果没什么特别要求,不要设置此参数,使用系统中设置的默认网卡即可 ;
一般来说,LuatOS的网络应用demo中都会有netdrv_device功能模块设置默认网卡;
所以建议不要设置此参数,直接使用netdrv_device设置的默认网卡就行;
参数示例:socket.LWIP_GP表示使用4G网卡;
参数名称: param.adapter
}数据类型:table;
取值范围:无特别限制;
是否必选:必须传入此参数;
注意事项:暂无;
参数示例:
{
lat = 34.8141899,
lng = 114.3100739,
timeout = 10000,
adapter = socket.LWIP_GP
}
返回值
local result, address = airlbs.get_address(param)
有两个返回值 result, address
result
含义说明:成功返回true,失败会返回false;
数据类型:boolean;
取值范围:true或者false;
注意事项:暂无;
返回示例:true;
address
含义说明:表示返回的地址信息,编码为UTF-8编码格式;
数据类型:string或者nil;
取值范围:如果result为true返回的是string类型的地址信息,如果result为false返回的是nil类型;
注意事项:暂无;
返回示例:河南省开封市龙亭区金耀路辅路;
示例
local result, address = airlbs.get_address({
lat = 34.8141899,
lng = 114.3100739,
timeout = 10000,
adapter = socket.LWIP_GP
})
if result then
log.info("airlbs.get_address", address)
else
log.info("airlbs.get_address失败", address)
end
----日志输出内容示例:
--airlbs.get_address 河南省开封市龙亭区金耀路辅路
五、产品支持说明
合宙主流模组均支持 airlbs 扩展库