1.lbs定位
- 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 -*-
import net
import http
import ujson
class LBS():
def __init__(self):
self.requesturl = ''
self.url = 'http://apilocate.amap.com/position'
self.accesstype = 0
#write your key
self.key = 'your-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
- 日志输出
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')
- 实现步骤
(1)在高德开放平台(https://lbs.amap.com/)注册账号
(2)在控制台的应用管理选择我的应用,点击“创建新应用”
(3)填写新建应用的“应用名称”和“应用类型”,创建应用
(4)点击这个应用的“编辑”,添加key
(5) 复制所得到的key到代码的指定位置
(6) 烧录和验证
2.总结
本节介绍了如何使用Haas506实现LBS定位,需要注意的是,个人所注册的高德开放平台账号无法获取的设备的地理位置信息。需要使用公司账号。