下载瓦片的python脚本
更新时间: 2025-07-07 11:51:18
# 前端调用脚本并传参
前端给python脚本传的参数,第一个是每个层级需要下载的瓦片范围,第二个是下载的文件夹目录
async function runPython(list) {
try {
const args = [JSON.stringify(list), folderPath.value]
result.value = await window.api.runPythonSteam(args)
} catch (error) {
result.value = { error: String(error) }
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# python脚本
# 接收参数
import sys
import os
import json
import requests
def main():
# 获取参数
# sys.argv是一个列表,包含了运行Python脚本时命令行输入的所有参数
# sys.argv[0]是脚本本身的文件名
# sys.argv[1:]表示从第1个参数开始到最后,也就是去掉脚本名后的所有参数
args = sys.argv[1:]
# 地图层级和下载范围
levelAndRange = json.loads(args[0])
# 下载文件夹地址
folderPath = args[1].replace('\\','/')
if __name__ == "__main__":
main()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 统计下载瓦片的总数
# 总数
totalImgSize = 0
# 成功数量
successImgSize = 0
# 百分比
percent = 0
for item in levelAndRange:
totalImgSize += ((item['maxX'] + 1) - (item['minX'])) * ((item['maxY'] + 1) - (item['minY']))
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 下载瓦片
# 第一层循环地图层级
for item in levelAndRange:
z = item['level']
# 第二层循环X的范围
for x in range(item['minX'], item['maxX'] + 1):
# 第三层循环Y的范围
for y in range(item['minY'], item['maxY'] + 1):
# 这是分析百度地图js代码和实践后得到的地址
url = f"https://maponline0.bdimg.com/tile/?qt=vtile&x={x}&y={y}&z={z}&styles=pl&scaler=1&from=jsapi3_0"
# 请求瓦片
response = requests.get(url)
if response.status_code == 200:
# 创建文件夹
os.makedirs(f"{folderPath}/{z}", exist_ok=True)
# 写入瓦片
with open(f"{folderPath}/{z}/{x}_{y}.png", "wb") as f:
f.write(response.content)
# 计算百分比
successImgSize += 1
percent = round((successImgSize / totalImgSize) * 100, 2)
# print的内容都会传给前端
print(json.dumps({"status":'success', "path": f"{folderPath}/{z}/{x}_{y}.png","x":x, "y":y, "z":z, "percent": percent}), flush=True)
else:
print(json.dumps({"status":'error', "path": f"{folderPath}/{z}/{x}_{y}.png","x":x, "y":y, "z":z, "percent": percent }), flush=True)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
然后前端就可以根据这个返回知道当前下载到哪个瓦片,进度如何