文章总结: 本文分享了自动化下载ESRI遥感历史影像的技术方案。通过抓包获取配置文件与图层ID,利用元数据查询API确定真实拍摄日期并去重,结合坐标转换构建瓦片URL导出GeoTIFF。文中详细解析了接口参数及避坑策略,为开发自主影像下载器提供了完整的实现路径与代码逻辑。 综合评分: 89 文章分类: 爬虫,安全工具,逆向分析
2025年末礼包:立省几千元!带你实现一个遥感历史影像下载器
原创
mapxiaotu
空天感知
2025年12月31日 08:35 新加坡
针对目标区域批量下载检索、下载遥感历史影像,通常这个功能只有在某些商业的地图下载软件才有,这两天研究了下,实现效果比较理想。
全网关于历史影像的下载,基本还停留在手动复制粘贴ESRI的wayback链接到arcgis/Global Mapper中,鲜有人提及怎么实现将历史影像的检索、下载以代码工具的方式实现,以进行自动化的下载。
本文专门做下公布,也是回馈下长期以来关注的读者朋友们。
本篇技术原理至少价值一个大几千元的地图下载器 😀😀😀
00 实现的效果
最近在做针对umbra及众多开源sar数据的管理,小伙伴提到要做对应的光学影像的查看、以及历史影像的浏览和下载,方便进一步做对比,以及再做标注等。
下图是我实现的结果,定位到目标地点,可以动态加载出该地有多少期历史影像,并且点选加载;
然后,通过“影像下载”可以对当前选择区域的影像进行下载,并输出geotiff文件,可以直接导入gis软件中进一步处理。
01 核心方法
整个逻辑其实就是抓包ESRI wayback的各个接口,分析数据交互,获取历史影像的检索、加载的全流程。
我目前暂时没精力取做Google影像的研究,本篇还是以ESRI的Wayback历史影像进行开发。
这个站是ESRI发布的可以公开浏览历史影像的站点。我们的工作也从对这个站点进行一些抓包等工作开始。
首先是从数据源头开始。通过分析网络请求,我找到了 ESRI Wayback 的核心配置文件。这个 JSON 掌控了所有历史图层的信息。
https://s3-us-west-2.amazonaws.com/config.maptiles.arcgis.com/waybackconfig.json
请求这个地址,你会得到一个巨大的 JSON 对象。这里的 Key(如 13192)就是我们后续下载瓦片必需的 layerId。
{“13192”: {“itemTitle”:”World Imagery (Wayback 2025-12-18)”,”layerIdentifier”:”WB_2025_R12″,”layerURL”:”https://wayback.maptiles.arcgis.com/…”, … } }
02 概念区分
需要明确LayerID的概念:
每个 Wayback 发布版本都有一个唯一的 Layer ID(数字),用于:
- 构建瓦片 URL
- 查询元数据
layerID:WB_2025_R12是用来构造影像瓦片URL的重要参数。
瓦片服务地址在下面给出:
https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/default028mm/MapServer/tile/{layerId}/{z}/{y}/{x}
参数:
- layerId: 图层 ID(如 13192)
- z: 缩放级别
- y: 瓦片行号
- x: 瓦片列号
看到这里,你是否认为遍历layerid然后构造url就形成不同期次的历史影像的xyz地址了呢?其实不然。
下面对ESRI的历史影像发布机制进行介绍:
ESRI 的更新机制是“增量发布”,同样有两个概念需要明确:
发布日期:JSON 里的 WB_2025_R12 代表 2025 年第 12 次发布。
拍摄日期:对于你要下载的那个区域,这次发布可能根本没更新影像,直接沿用了旧图。
我们要的不是“哪天发布的”,而是“哪天拍的”。这就需要用到第二个关键接口:Metadata Query API。
03 构造元数据查询
这是最难并且有很多坑的地方:
我们需要构造请求取查询:“在这个坐标区域,这层图到底是什么时候拍的?”
即:XX地点,缩放到15层级,有多少期可以查看的历史影像?
这个请求通过以下API完成:
https://metadata.maptiles.arcgis.com/arcgis/rest/services/World_Imagery_Metadata{identifier}/MapServer/{layer}/query
这里有三个必须动态替换的参数,也是最大的坑:
-
1. identifier 的格式
配置文件里给的是 WB_2024_R06,但在 API 里必须转成 小写且去掉 WB 的形式:_2024_r06。 如果直接用 WB_…,服务器会报 404。
-
2. layer 参数(不是 Zoom!)
这个参数决定了你查的是哪一层级的元数据。经过反复测试,其具备4、6、8、10等多种参数,代表不同的缩放层级。
-
3. 坐标转换(Web Mercator)
查询参数里需要传入 geometry,ESRI 不认经纬度(WGS84),只认 Web Mercator (EPSG:3857)。
以及查询参数如下:
- 查询参数: ?f=json &where=1%3D1 &outFields=SRC_DATE2 &returnGeometry=false &geometryType=esriGeometryPoint &spatialRel=esriSpatialRelIntersects &geometry={URL编码的GeoJSON点}
以上合起来,在python中的实现如下:
假设我们要查 2024 R06 版本,在坐标 x,y 处的信息base_url =”https://metadata.maptiles.arcgis.com/arcgis/rest/services/World_Imagery_Metadata_2024_r06/MapServer/8/query”params = {“f”:”json”,# 返回格式”where”:”1=1″,# 必填”outFields”:”SRC_DATE2″,# 我们只关心拍摄日期”returnGeometry”:”false”,”geometryType”:”esriGeometryPoint”,”geometry”:f'{{“x”:{x},”y”:{y},”spatialReference”:{{“wkid”:3857}}}}’# JSON格式的坐标}# 发送请求拿到 SRC_DATE2,就是真实的毫秒级拍摄时间戳
04 去重和瓦片拼接
当拿到所有版本的SRC_DATE2后,逻辑就清晰了:
分组:把同一个位置、所有版本的拍摄日期列出来。
去重:如果 10 个版本返回的拍摄时间戳都是 1672531200000,说明它们是同一张图,只保留最新的那个 layerId。
下载:最后一步,拼接瓦片下载地址。这个最简单,不再赘述。
05 注意事项
1、并发控制:config.json里有几百个图层,不要同时发几百个 Metadata 请求,ESRI 会封 IP。
2、Zoom< 12 查不到数据:如果你的业务需要看大尺度的国家级历史变迁,这个 API 可能不适合,它在低 Zoom 下返回空值。
读完本文,如果你熟悉瓦片数据的处理
再借助AI,几天时间就可以自己做一个历史影像下载器了
本文给出的很多接口信息还未看到有人公布
也都是笔者debug了很久才搞明白的
2025年最后一天,以此回馈下公众号读者~
感谢大家一路支持
企业内网、国产化研发环境,如何搭建一套
AI代码开发平台,为产研提质增效!
DeepSeek刷屏全网之下,别被流量带偏,理性实践才是硬道理
也说遥感共性产品,行业需要什么样的遥感产品?
看水利部水利遥感星座战略布局,机遇与挑战并存
Umbra开源雷达影像下载工具开发实践
NASA与微软联合推出“Earth Copilot”,“智能助手“或成为行业产品标配
欢迎交流
笔者长期从事人工智能、遥感、大模型等业务
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:空天感知 mapxiaotu《2025年末礼包:立省几千元!带你实现一个遥感历史影像下载器》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论