网站建设策划书附录,wordpress菜单页面定位,男装商城网站建设,wordpress侧边栏加图片【移远QuecPython】EC800M物联网开发板调用网络API#xff08;使用SIM卡联网并调用高德地图API的定位坐标转换#xff09;
高德API使用方法#xff1a; 文章目录 API相关配置SIM卡联网网络操作API调用 高德地图API产品介绍适用场景使用限制使用说明坐标转换 附录#xff…【移远QuecPython】EC800M物联网开发板调用网络API使用SIM卡联网并调用高德地图API的定位坐标转换
高德API使用方法 文章目录 API相关配置SIM卡联网网络操作API调用 高德地图API产品介绍适用场景使用限制使用说明坐标转换 附录列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 API相关配置
SIM卡联网
首先得联网 我是用的sim卡 sim卡可以通过
import sim
sim.status()获取sim卡状态
为1表示正常
def SIM_Init():if sim.getStatus()1:print(SIM init OK)else:print(SIM init failed,sim.getStatus())网络操作
这里用的库是request 类似Python的requests库 但略有不同
get 文本
import requestresponse request.get(http://httpbin.org/get)
for i in response.text:print(i)
get json
import requestresponse request.get(http://httpbin.org/get)
data response.json()
print(data)
测试效果
{url: http://httpbin.org/get, headers: {X-Amzn-Trace-Id: Root1-65470fd8-1c1a52d30ad8b5d82256ca49, Host: httpbin.org}, args: {}, origin: 114.85.210.18}与requests不同的是 request库不能直接对response.text进行打印 否则返回一个状态值 如
Response object at 7e32f730另外 对于get 到的文本 并不能用json.loads函数获取值 此处的json库对应import ujson
所以 推荐采用response.json()方法来获取值
API调用
一般来说 很多API都是直接通过get来获取json文本 所以需要进行一个转换
r requests.get(url).text
r json.loads(r)但是这个方法用不了 所以得换成
r requests.get(url).json()调用高德地图API的函数
#高德地图API
def location_to_GCJ02(lon,lat,coordsys):url https://restapi.amap.com/v3/assistant/coordinate/convert?key你的keyslocationsstr(lon),str(lat)coordsysstr(coordsys)r requests.get(url).json()print(r)return r[locations]调用方法 lon114.304569lat30.593354print(location_to_GCJ02(lon,lat,gps))转换结果
{locations: 114.310011664497,30.590942382813, status: 1, infocode: 10000, info: ok}
114.310011664497,30.590942382813在我的高德API里面也能看到被使用的次数
高德地图API
API申请
lbs.amap.com/api/webservice/guide/api/convert/产品介绍
坐标转换是一类简单的HTTP接口能够将用户输入的非高德坐标GPS坐标、mapbar坐标、baidu坐标转换成高德坐标。
使用前您需先申请Key。若无高德地图API账号需要先申请账号。
适用场景
为了使用高德服务用户需要将非高德坐标转换为高德坐标。
使用限制
服务调用量的限制请点击这里查阅。
使用说明
第一步申请”Web服务API”密钥Key
第二步拼接HTTP请求URL第一步申请的Key需作为必填参数一同发送
第三步接收HTTP请求返回的数据JSON或XML格式解析数据。
如无特殊声明接口的输入参数和输出数据编码全部统一为UTF-8。
坐标转换
坐标转换API服务地址
URL
restapi.amap.com/v3/assistant/coordinate/convert?parameters请求方式
GET
parameters代表的参数包括必填参数和可选参数。所有参数均使用和号字符()进行分隔。下面的列表枚举了这些参数及其使用规则。 运行 在Python中 需要用到requests库 另外json库用于将json文本转换为字典
import requests
import jsondef location_to_GCJ02(lon,lat,coordsys):url https://restapi.amap.com/v3/assistant/coordinate/convert?key你的keylocationsstr(lon),str(lat)coordsysstr(coordsys)r requests.get(url).textr json.loads(r)return r[locations]lon114.304569
lat30.593354
print(location_to_GCJ02(lon,lat,gps))
运行结果
附录列表的赋值类型和py打包
列表赋值
BUG复现
闲来无事写了个小程序 代码如下
# -*- coding: utf-8 -*-Created on Fri Nov 19 19:47:01 2021author: 16016
a_list [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
#print(len(a_list))
#b_list [,,,,,,,,,,,,,,,]
c_list [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
#for i in range(16):
if len(a_list):for j in range(16):a_list[j]str(a_list[j])_str(j)print(序号:,j)print(a_list:\n,a_list)c_list[j]a_listprint(c_list[0]:\n,c_list[0])print(\n)
# b_list[j]a_list[7],a_list[8]
# print(b_list[j])# 写入到Excel
#print(c_list,\n) 我在程序中 做了一个16次的for循环 把列表a的每个值后面依次加上_和循环序号 比如循环第x次 就是把第x位加上_x 这一位变成x_x 我在输出测试中 列表a的每一次输出也是对的 循环16次后列表a应该变成[‘0_0’, ‘1_1’, ‘2_2’, ‘3_3’, ‘4_4’, ‘5_5’, ‘6_6’, ‘7_7’, ‘8_8’, ‘9_9’, ‘10_10’, ‘11_11’, ‘12_12’, ‘13_13’, ‘14_14’, ‘15_15’] 这也是对的
同时 我将每一次循环时列表a的值 写入到空列表c中 比如第x次循环 就是把更改以后的列表a的值 写入到列表c的第x位 第0次循环后 c[0]的值应该是[‘0_0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘10’, ‘11’, ‘12’, ‘13’, ‘14’, ‘15’] 这也是对的 但是在第1次循环以后 c[0]的值就一直在变 变成了c[x]的值 相当于把c_list[0]变成了c_list[1]…以此类推 最后得出的列表c的值也是每一项完全一样 我不明白这是怎么回事 我的c[0]只在第0次循环时被赋值了 但是后面它的值跟着在改变
如图 第一次老出bug 赋值以后 每次循环都改变c[0]的值 搞了半天都没搞出来 无论是用appen函数添加 还是用二维数组定义 或者增加第三个空数组来过渡 都无法解决
代码改进
后来在我华科同学的指导下 突然想到赋值可以赋的是个地址 地址里面的值一直变化 导致赋值也一直变化 于是用第二张图的循环套循环深度复制实现了
代码如下
# -*- coding: utf-8 -*-Created on Fri Nov 19 19:47:01 2021author: 16016
a_list [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
#print(len(a_list))
#b_list [,,,,,,,,,,,,,,,]
c_list [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
#for i in range(16):
if len(a_list):for j in range(16):a_list[j]str(a_list[j])_str(j)print(序号:,j)print(a_list:\n,a_list)for i in range(16):c_list[j].append(a_list[i])print(c_list[0]:\n,c_list[0])print(\n)
# b_list[j]a_list[7],a_list[8]
# print(b_list[j])# 写入到Excel
print(c_list,\n) 解决了问题 优化
第三次是请教了老师 用copy函数来赋真值
代码如下
# -*- coding: utf-8 -*-Created on Fri Nov 19 19:47:01 2021author: 16016
a_list [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
#print(len(a_list))
#b_list [,,,,,,,,,,,,,,,]
c_list [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
#for i in range(16):
if len(a_list):for j in range(16):a_list[j]str(a_list[j])_str(j)print(序号:,j)print(a_list:\n,a_list)c_list[j]a_list.copy()print(c_list[0]:\n,c_list[0])print(\n)
# b_list[j]a_list[7],a_list[8]
# print(b_list[j])# 写入到Excel
#print(c_list,\n) 同样能解决问题 最后得出问题 就是指针惹的祸
a_list指向的是个地址 而不是值 a_list[i]指向的才是单个的值 copy()函数也是复制值而不是地址
如果这个用C语言来写 就直观一些了 难怪C语言是基础 光学Python不学C 遇到这样的问题就解决不了
C语言yyds Python是什么垃圾弱智语言
总结
由于Python无法单独定义一个值为指针或者独立的值 所以只能用列表来传送 只要赋值是指向一个列表整体的 那么就是指向的一个指针内存地址 解决方法只有一个 那就是将每个值深度复制赋值子列表内的元素提取出来重新依次连接 或者用copy函数单独赋值
如图测试 部分代码
# -*- coding: utf-8 -*-Created on Sat Nov 20 16:45:48 2021author: 16016
def text1():A[1,2,3]B[[],[],[]]for i in range(len(A)):A[i]A[i]iB[i]Aprint(B)def text2():A[1,2,3]B[[],[],[]]A[0]A[0]0B[0]Aprint(B)A[1]A[1]1B[1]Aprint(B)A[2]A[2]2B[2]Aprint(B)if __name__ __main__:text1()print(\n)text2()py打包
Pyinstaller打包exe包括打包资源文件 绝不出错版
依赖包及其对应的版本号
PyQt5 5.10.1 PyQt5-Qt5 5.15.2 PyQt5-sip 12.9.0
pyinstaller 4.5.1 pyinstaller-hooks-contrib 2021.3
Pyinstaller -F setup.py 打包exe
Pyinstaller -F -w setup.py 不带控制台的打包
Pyinstaller -F -i xx.ico setup.py 打包指定exe图标打包
打包exe参数说明
-F打包后只生成单个exe格式文件
-D默认选项创建一个目录包含exe文件以及大量依赖文件
-c默认选项使用控制台(就是类似cmd的黑框)
-w不使用控制台
-p添加搜索路径让其找到对应的库
-i改变生成程序的icon图标。
如果要打包资源文件 则需要对代码中的路径进行转换处理 另外要注意的是 如果要打包资源文件 则py程序里面的路径要从./xxx/yy换成xxx/yy 并且进行路径转换 但如果不打包资源文件的话 最好路径还是用作./xxx/yy 并且不进行路径转换
def get_resource_path(relative_path):if hasattr(sys, _MEIPASS):return os.path.join(sys._MEIPASS, relative_path)return os.path.join(os.path.abspath(.), relative_path)
而后再spec文件中的datas部分加入目录 如
a Analysis([cxk.py],pathex[D:\\Python Test\\cxk],binaries[],datas[(root,root)],hiddenimports[],hookspath[],hooksconfig{},runtime_hooks[],excludes[],win_no_prefer_redirectsFalse,win_private_assembliesFalse,cipherblock_cipher,noarchiveFalse)而后直接Pyinstaller -F setup.spec即可
如果打包的文件过大则更改spec文件中的excludes 把不需要的库写进去但是已经在环境中安装了的就行
这些不要了的库在上一次编译时的shell里面输出 比如 然后用pyinstaller --clean -F 某某.spec