如何将生成的唯一坐标对列表接入循环以批量下载Nearmap影像数据
如何将生成的唯一坐标对列表接入循环以批量下载Nearmap影像数据
看起来你已经走完了最关键的步骤——成功生成了所有需要的坐标对组合,现在就差把这些组合和下载逻辑串起来就行!我来一步步帮你整合:
核心思路
我们要遍历你生成的combinations列表里的每一个(x, y)元组,把x、y分别替换到下载代码里的myVal1、myVal2位置,重复执行下载流程即可。
整合后的完整代码
首先把所有逻辑按顺序梳理,注意将依赖导入放在最顶部,然后把下载逻辑嵌套到组合遍历的循环中:
import requests # 依赖导入只需要执行一次,放在最开头 # 1. 生成目标坐标范围与所有唯一组合 range1 = range(634797, 634876) range2 = range(776458, 776512) # 生成所有(x,y)坐标对组合(你原有的嵌套循环写法完全有效) combinations = [] for x in range1: for y in range2: combinations.append((x, y)) # 【可选优化】用itertools.product简化组合生成,代码更简洁 # from itertools import product # combinations = list(product(range1, range2)) print(f"待下载的坐标对总数:{len(combinations)}") # 2. 遍历坐标对,批量执行下载 API_KEY = "MYKEY" # 你的API密钥,注意保密 SAVE_DIR = "/arcgis/home/nearmap/" # 文件保存的基础路径 for x, y in combinations: # 动态构建请求URL与保存文件名 url = f"https://api.nearmap.com/tiles/v3/surveys/6e33c960-4310-11ee-90f9-b3c1b4806389/North/21/{x}/{y}.jpg?apikey={API_KEY}" save_file = f"{SAVE_DIR}{x}_{y}.jpg" # 用下划线分隔坐标,文件名更清晰易读 try: # 发送下载请求 headers = {"accept": "image/*"} response = requests.get(url, headers=headers) response.raise_for_status() # 请求失败时直接抛出异常,避免无效文件写入 # 写入文件 with open(save_file, 'wb') as myImage: myImage.write(response.content) print(f"✅ 成功下载:{save_file}") except Exception as e: print(f"❌ 坐标对({x},{y})下载失败:{str(e)}")
关键修改点说明
- 结构优化:把所有逻辑按执行顺序整合,
import requests仅需一次,放在代码最开头更规范。 - 组合遍历:用
for x, y in combinations:直接解构每个坐标元组,自动完成变量赋值,无需手动处理索引,代码更直观。 - 动态参数:用Python f-string构建URL和文件名,比传统字符串拼接可读性更强,也不容易出错。
- 错误处理:新增
try-except块和response.raise_for_status(),即使某几个坐标对下载失败(比如网络波动、无效坐标),程序也会继续处理剩余任务,不会直接崩溃。 - 冗余代码清理:你原来写的
table_data测试代码和后续逻辑无关,如果不需要测试打印表格,可以直接删除,让代码更简洁。
备注:内容来源于stack exchange,提问作者Stephen Washburn
相关产品推荐
相关产品推荐

