haas506 2.0开发教程-example-lbs
最新案例教程点击下方链接跳转,CSDN已停止更新
点
击
跳
转
1、LBS (围绕地理位置数据而展开的服务)
案例说明:
- 通过高德开放平台获取当前设备的详细位置信息。
- LBS基于位置服务(Location Based Services,LBS)是指围绕地理位置数据而展开的服务,其由移动终端使用无线通信网络(或卫星定位系统),基于空间数据库,获取用户的地理位置坐标信息并与其他信息集成以向用户提供所需的与位置相关的增值服务。
2、实现步骤
(1)注册账号
在高德开放平台(https://lbs.amap.com/)注册账号(智能硬件需要注册企业版)
(2)创建新应用
在控制台的应用管理选择我的应用,点击“创建新应用”
填写新建应用的“应用名称”和“应用类型”,创建应用
(3)添加key
点击这个应用的“添加”,添加key(智能硬件需要升级到企业版)
(4)程序烧写
复制所得到的key到lbs.py代码的指定位置
- mian.py
import utime as time
import network
from lbs import LBS
g_connect_status = False
def on_4g_cb(args):
global g_connect_status
pdp = args[0]
netwk_sta = args[1]
if netwk_sta == 1:
g_connect_status = True
else:
g_connect_status = False
def connect_network():
global net,on_4g_cb,g_connect_status
net = network.NetWorkClient()
g_register_network = False
if net._stagecode is not None and net._stagecode == 3 and net._subcode == 1:
g_register_network = True
else:
g_register_network = False
if g_register_network:
net.on(1,on_4g_cb)
net.connect(None)
else:
print('network register failed')
while True:
if g_connect_status:
print('network register successed')
break
time.sleep_ms(20)
if __name__ == '__main__':
connect_network()
getlbs = LBS()
lbstr = getlbs.get_lbs()
print(lbstr)
- lbs.py
# -*- coding: UTF-8 -*-
from modem import net
import http
import ujson
import utime
#等待30s确保获取基站信息
utime.sleep(30)
class LBS():
def __init__(self):
self.requesturl = ''
self.url = 'http://apilocate.amap.com/position'
self.accesstype = 0
#write your key
self.key = '***************'
self.cdma = 0
self.output = 'json'
self.bts = ''
self.nearbts = ''
self.htp = http.client()
pass
def get_lbs(self):
nbrinfo = net.getCellInfo()
srvinfo = net.getState()
#gsm
if len(srvinfo[0]) > 0:
pass
if len(srvinfo[1]) > 0:
pass
#lte
if len(srvinfo[2]) > 0:
srv = srvinfo[2]
self.bts = str(hex(srv[2]))[2:] + ',' + str(srv[3]) +','+ str(srv[6])+ ',' + str(srv[1]) + ',' + str(srv[7])
pass
if len(nbrinfo[0]) > 0:
pass
if len(nbrinfo[1]) > 0:
pass
if len(nbrinfo[2]) > 0:
nbr = nbrinfo[2]
print(nbr,nbrinfo,len(nbr))
for i in range(len(nbr)):
self.nearbts += str(hex(nbr[i][2]))[2:] + ',' + str(nbr[i][3]) + ',' + str(nbr[i][6]) + ',' + str(nbr[i][1]) + ',' + str(nbr[i][7])
if i != (len(nbr) - 1):
self.nearbts += '|'
pass
self.requesturl += self.url + '?' + 'accesstype=' + str(self.accesstype) + '&key=' + self.key + '&cdma=' + str(self.cdma) + '&output=' + self.output + '&bts=' + self.bts + '&nearbts=' + self.nearbts
print(self.requesturl)
ret = self.htp.get(self.requesturl)
if ret < 0:
return None
retstr = self.htp.get_response()
self.htp.close()
locationstr = None
lat = None
lon = None
try:
retdict = ujson.loads(retstr)
try:
if int(retdict['infocode']) != 10000:
return None
try:
locationstr = retdict['result']['location']
tmpstr = locationstr.split(',')
lon = tmpstr[0]
lat = tmpstr[1]
print('content:',retdict)
except KeyError:
return None
finally:
return lon,lat
except KeyError:
return None
finally:
return lon,lat
except ValueError:
return None
finally:
return lon,lat
(5)日志输出
network register successed
content: {'result': {'citycode': '0512', 'type': '4', 'city': '苏州市', 'poi': '中国工商银行(苏州独墅湖支行)',
'desc': '江苏省 苏州市 虎丘区 仁爱路 靠近中国工商银行(苏州独墅湖支行)', 'adcode': '320505',
'street': '仁爱路', 'radius': '550', 'location': '120.7394987,31.2744203',
'road': '仁爱路', 'country': '中国', 'province': '江苏省'}, 'status': '1', 'infocode': '10000', 'info': 'OK'}
('120.7394987', '31.2744203')
3.总结
本节介绍了如何使用Haas506实现LBS定位,需要注意的是,个人所注册的高德开放平台账号无法获取的设备的地理位置信息。需要使用公司企业版账号。