
做GIS这十几年影像底图有个毛病一直让我很难受——它会失忆。你今天打开一张在线卫星底图看到的是这个区域最新的样子等到下个月底图更新了之前那一期影像就被覆盖掉再也找不回来。想做城市扩张分析、耕地变化核查、灾后评估、违建取证只能靠自己一期一期地手动截图存档时间一长硬盘里躺着几百个命名混乱的图片文件夹谁也说不清哪张是哪张。天地图2024版这次正式启用首次开放了多时相影像专题可以直接在网页上查看同一区域的历史影像这件事对做地理信息、遥感应用、城乡规划、工程勘察的人来说算是一个实打实的改变。这篇文章我不打算念新闻稿想从一个天天跟影像和地图服务打交道的人的角度把这个功能到底解决了什么问题、普通用户怎么用、开发者怎么调、桌面端怎么接、以及那些第一次上手一定会踩的坑一条一条讲清楚。1. 影像底图只会记得今天这件事到底卡了谁1.1 一张永远在覆盖自己的底图大部分人对在线地图的理解是打开就能看但对做分析的人来说在线影像底图最大的问题不是清晰度而是它只提供一个时间切片。影像服务的运维逻辑是拿最新的正射影像去替换掉上一版切片因为存储和带宽都是成本不可能无限堆历史。结果就是你去年看到的那片空地今年打开已经变成了工地而你想调出去年那一期的图对不起服务端已经没有这个瓦片了。我自己做过的项目里遇到过好几次这种情况。有一回需要核实一个地块在过去三年里的地表变化翻遍手头的存档只找到两期对比的截图中间的年份完全空白。最后只能去翻商业遥感数据走了采购流程周期长、成本高而这本来只是想做一个初步的判断。这种数据就在天上但你拿不到历史切片的割裂感是所有做时空分析的人都懂的痛点。1.2 多时相专题把时间维度补了回来多时相影像这个词听着学术说白了就是同一块地方多个时间点的影像集合。以前它是一个专业遥感平台才有的概念需要你去下载、配准、成图现在天地图把它做成了一个可以直接浏览的专题用户在同一张底图上切换时间就能看到不同年份、不同期次的地表状况。这个变化的意义在于它把时间序列分析的门槛从专业遥感工程师降到了会用浏览器的人。从技术实现上看多时相专题背后是一套按时间组织瓦片的服务结构。传统WMTS服务只有一个图层名比如img影像底图你请求到的永远是最新切片而多时相服务会在图层维度上再叠加一个时间维或者干脆为不同期次提供不同的图层标识前端根据用户选择的时间去请求对应的瓦片。理解了这一点后面在ArcGIS或代码里接入时就不会懵——你不是在调一个普通底图你是在调一个带时间参数的图层集合。1.3 谁最需要这套东西我把这个功能的适用人群列一下你可以对照自己的情况判断值不值得花时间研究。城市研究与规划看建成区边界怎么一年年往外推判断某个片区的发展节奏做汇报时拿得出连续的影像对比图比任何文字都有说服力。自然资源与耕地核查核查某块地是不是在某个时间点之后被硬化、被占用历史影像是很直接的佐证材料。应急与灾后评估灾害发生前后的影像对比能快速圈出受影响范围为后续处置提供参考。工程勘察与施工监测看场地从征地、平整、开工到建成的全过程判断施工进度和周边环境变化。历史影像取证与科普教育老城区、老厂区、河道变迁的影像拿来做地理课素材或者城市记忆记录都很好用。提醒一句多时相影像能解决看得到过去的问题但它不能替代正式的测绘成果和权威数据源做法律层面的判定。做核查类工作时历史影像适合用来发现疑点和辅助判断最终结论还是要走规范流程。2. 网页端翻历史影像入口在哪操作怎么走哪里最容易点错2.1 专题入口和图层组织方式天地图网页端的影像专题通常是在地图或专题图层里给出一个影像类的入口进入之后可以选择影像底图再切换到多时相对比的功能区。我不打算在这里写死具体的按钮位置因为页面布局会随版本调整写了反而误导。更稳妥的做法是进官网地图页后先找图层切换或专题类的入口找到影像相关的图层组多时相的选项一般就挂在这里。从图层组织角度看这套东西一般是底图 时间选择 叠加层的结构。底图负责铺满屏幕时间选择负责决定调哪一期瓦片叠加层可能是注记、行政边界、道路网用来帮助你定位。理解了这三层你操作的时候就不会乱——时间切换只影响影像本身注记层一般是不变的。2.2 对比查看的实际操作路径我在实际操作里总结出一条比较顺的流程你按这个顺序来基本不会迷路先定位区域用搜索框输入地名或经纬度把视野缩到你关心的范围别一上来就在全国尺度下切时间那样看不出任何细节。打开影像底图确认当前底图是影像而不是矢量否则你切时间也不会有变化。进入多时相模式在影像图层下找到时间或期次的选择控件。逐期浏览按时间顺序一格一格看先整体感受变化再放大到具体地块。叠加辅助层把行政边界或注记打开方便你把变化对应到具体的权属或地名上。记录关键信息看到有价值的时间点及时记录期次信息和你观察到的坐标后面要用。第6步很多人会忽略结果是看完就忘回头写报告又要重新找一遍。我的习惯是边看边在文档里记期次 大概位置 变化描述几行字的事后面省大力气。2.3 时间标尺怎么读别把入库时间当成成像时间这是最容易产生误解的地方也是我要重点强调的坑。多时相影像上标注的时间你要分清楚它到底是成像时间还是数据入库/发布时间。影像从获取到处理、入库、发布中间可能有延迟两者并不总是同一个日期。做粗略的宏观对比无所谓但如果你要做某年某月某日之前这块地是否已硬化这种精确判断就必须看清楚时间标注的含义。另外一个坑是期次覆盖不完整。多时相专题不可能对每一寸国土都给出十几个连续时间点实际覆盖是分区域、分批次、有时间间隔的。有的地方可能只有三个年份的影像有的地方间隔两三年才有一期。所以在正式分析前先把你关心的区域有哪些可用期次摸清楚别默认它一定有连续的年度数据。我的做法是先做一个期次清单把该区域可选的影像时间全列出来再决定用哪几期做对比。3. 开发者视角天地图API接入的完整链路和Key的那些坑3.1 tk、key到底什么关系接触天地图API的人第一个会遇到的概念就是tk也叫 key它本质上就是调用凭证你请求任何瓦片或服务接口都要把这个凭证带上。申请流程一般是在官网注册账号、进入开发者控制台、创建应用、拿到 tk。这里有几个决定成败的细节应用类型要选对。浏览器端调用的和后台服务端调用的适用的校验方式不同。你在网页里用前端方式去请求却拿了一个只适用于服务端场景的凭证很容易被拦。域名白名单。前端调用通常需要绑定来源域名或IP如果你本地调试或者部署到没登记的域名上会直接被拒绝。配额限制。免费额度是有上限的超了会返回错误。做压测或者高频批量抓瓦片之前先想清楚会不会触发限制。3.2 WMTS和XYZ两种加载方式天地图的影像服务是标准的WMTS服务同时也可以用XYZ瓦片模板的方式去加。两种方式各有适用场景我做个对比方式特点适用场景WMTS参数规范支持切片矩阵集与OGC标准对齐ArcGIS、QGIS等桌面软件接入需要严格坐标对齐XYZ模板直接用{z}/{x}/{y}拼URL简洁前端Leaflet、OpenLayers、Mapbox快速出图WMTS里有个关键参数是切片矩阵集影像底图常见的有w球面墨卡托对应Web Mercator和c经纬度对应CGCS2000。选错了瓦片要么加载不出来要么位置偏得离谱。用Leaflet加影像底图大概是这个写法const map L.map(map).setView([39.9042, 116.4074], 10); L.tileLayer( https://t{s}.tianditu.gov.cn/img_w/wmts?SERVICEWMTSREQUESTGetTileVERSION1.0.0 LAYERimgSTYLEdefaultTILEMATRIXSETwFORMATtiles TILEMATRIX{z}TILEROW{y}TILECOL{x}tk你的tk, { subdomains: [0, 1, 2, 3, 4, 5, 6, 7], maxZoom: 18, attribution: 影像底图 } ).addTo(map);注意subdomains这一段天地图用多个数字域名来分流配上它能明显提升瓦片并发加载速度。少了它地图滚动时会有一卡一卡的感觉。用Python直接拉一张瓦片验证服务是否通可以这样import requests tk 你的tk url https://t0.tianditu.gov.cn/img_w/wmts params { SERVICE: WMTS, REQUEST: GetTile, VERSION: 1.0.0, LAYER: img, STYLE: default, TILEMATRIXSET: w, FORMAT: tiles, TILEMATRIX: 10, TILEROW: 388, TILECOL: 843, tk: tk, } r requests.get(url, paramsparams, timeout10) print(r.status_code, r.headers.get(Content-Type))如果返回的是图片类型说明服务通了如果返回一段JSON或者XML那多半是出错了把内容打印出来看错误码。做多时相接入时思路是一样的只是把图层标识换成对应期次的图层或者按服务文档在请求里带上时间相关的参数。具体的多时相图层名和参数一定要以官方接口文档里给出的服务列表为准我这里给的是通用调用骨架别直接照搬图层名。3.3 code 301001 非法key一份能直接照着排查的清单301001是接入天地图时返回频率最高的错误之一字面意思是key不合法但真正的原因有好几种得一项一项排。可能原因表现排查动作tk写错或复制带了空格任何请求都报错检查字符串首尾有无空白重新复制tk未激活或已过期一开始能用后来突然报错登录控制台确认状态和有效期应用类型与实际调用场景不符前端能用、后端报错或相反核对创建应用时选定的类型域名/IP白名单没配换环境后立刻报错把部署域名或出口IP加进白名单引用了不存在的图层或服务部分请求正常、部分报错逐个服务验证确认图层名拼写配额超限高峰期频繁失败看控制台用量评估是否需提升配额排查顺序我建议这样走先拿一张最简单的瓦片请求验证凭证本身是否有效如果这张都失败问题就在key如果这张成功、换个服务失败问题在服务或参数。把凭证问题和参数问题分开验证能省掉大量来回试错的时间。我见过很多人一遇到301001就去反复申请新key结果发现是URL里多了一个括号白折腾半天。注意调试阶段容易把真实tk写进公开的代码仓库一旦泄露别人用你的配额甚至导致你的应用被封。养成用环境变量或者配置文件管理tk的习惯提交代码前检查一遍。4. 桌面端落地ArcGIS Pro、ArcMap和QGIS加载天地图4.1 ArcGIS Pro接入WMTS服务的完整步骤ArcGIS Pro对WMTS的支持比较规范流程大致如下打开插入选项卡找到连接下的服务器里的新建WMTS服务器。在URL栏填入服务地址注意要带上tk参数否则连上也是空的。连接成功后在目录面板里展开该服务器找到影像图层。把图层拖进地图视图如果位置不对先别急着调多半是坐标系问题见下节。需要离线复用或者提高加载速度的可以把常用范围缓存成切片包。第5步是实战里很实用的技巧。天地图瓦片按需加载网络抖动时会看到一块块白格如果你要做演示或者长时间分析提前缓存关心区域的瓦片体验会好很多。4.2 ArcMap的坐标系陷阱偏移往往不是软件的问题ArcMap这类老工具加载在线底图时最常见的抱怨是叠不上、偏了。这个现象九成不是软件坏了而是坐标系不匹配。天地图影像底图是CGCS2000系的球面墨卡托切片对应Web Mercator。你的工程数据可能是西安80、北京54或者别的投影直接叠上去必然错位。处理思路有两条把工程坐标系设成与底图一致Web Mercator 或 CGCS2000对应的地理坐标系先保证原始数据的定位正确再考虑出图投影。如果确实需要在别的投影下出图先做一次投影转换别指望软件自动帮你纠偏。自动纠偏在小范围里可能看着差不多一放大就露馅。我在项目里踩过一次坑某次做成果图底图和数据看着对得上出图后一量距离总是差那么一点。查了半天发现是数据本身没有正确定义坐标系软件就用默认的来渲染肉眼看着差不多实际偏差在米级。所以我现在的习惯是加载任何数据前先看一下它的坐标系定义是不是完整缺定义的数据先补上。4.3 QGIS里的更省事办法QGIS加载天地图有两条路一是用XYZ Tiles手工加一个连接填瓦片模板URL二是装一个国内开发者做的在线底图插件里面往往已经预置了影像、矢量、注记等图层选一下填个tk就能用。前者的好处是透明可控后者胜在省事、图层齐全。用XYZ方式加的时候编码选好、缩放级别范围设对基本就能正常显示。QGIS里图层顺序很好调把注记层放在影像层上面地名就能压住底图看着清楚。做历史影像对比时可以开两个地图视图一个放旧期、一个放新期并排看变化这个比在一个视图里来回切效率高得多。5. 坐标拾取、投影转换和叠加分析里的实测经验5.1 坐标拾取工具的精度和常见误用天地图官网提供的坐标拾取工具是获取点位经纬度的常用手段。用法很简单点地图读坐标。但有两个地方要留意。第一读出来的是哪个坐标系下的坐标。如果不明确拿去别的地方用就可能偏。第二拾取精度受当前缩放级别影响放得越大越准在很小的比例尺下点击误差可能几百米。做批量点位处理时我的建议是先在拾取工具里确认基准再在正式的数据里统一转换到项目需要的坐标系。不要一边拾取、一边手动换算、一边入表混着来很容易出错。养成先统一、后使用的习惯比事后纠错省事。5.2 不同坐标系混用时的偏移现象怎么判断偏移这件事有个比较直观的判断方法找一个你确知位置的地物比如一个路口、一座桥看你的数据点和影像上的实际位置差多少。如果整体有一个方向一致的偏移通常是坐标系基准不同导致的如果偏移量在各个位置都不一样、还有旋转那可能是配准或投影参数出了问题。常见的处理路径是这样确认影像底图所用的坐标系。确认你的数据坐标系的定义是否完整、正确。如果两者基准不同做一次基准转换而不是简单平移。转换后在多个位置抽样验证别只看一个点。这四步做下来绝大多数偏移问题都能定位到原因。跳过第4步是最常见的失误只验一个点就下结论换个位置又不对了。6. 历史影像怎么看判读技巧和那些容易误读的地方6.1 时间序列上的关键节点识别拿到一组历史影像不要从头到尾平铺直叙地看那样效率低。更聪明的做法是先确定变化剧烈的时段重点看那几个节点。比如一个新区往往是某一年突然开始大规模动土这一年就是关键节点前后各取一期对比变化特征最明显。再比如河道汛期前后的影像差异可能比年度差异还大那就要结合季节来判断。我自己整理变化序列时习惯做一个简单的时间轴表把每期的影像时间、可观察到的关键变化记下来几行字就能把一段历史理清楚。期次影像时间主要观察第一期较早年份以农用地为主无明显建筑第二期中间年份出现施工便道场地平整第三期较晚年份建筑主体成型道路网出现有了这样一张表写报告、做汇报的时候思路就非常清楚不用在影像上反复来回找。6.2 影像本身的局限云、季节和成像角度历史影像不是完美的证据它有一堆天然局限用的时候心里得有数。云和雾。某期影像如果刚好赶上多云关键区域被挡住那一期基本没法用来做判读。这也是为什么多时相覆盖越密越好——总有几期是晴天。季节差异。植被茂盛和枯黄的时候同一个地方的影像色彩差别很大容易把正常的物候变化误判成地表变化。成像角度和阴影。侧视角拍摄时高层建筑会有明显阴影阴影覆盖的区域可能被误读成空地。分辨率和成像质量。不同期次的影像分辨率和清晰度可能不一样早期影像往往更糊做细节判断时要谨慎。我的经验是对同一个变化点尽量找两到三期互相印证不要只凭一期影像下结论。孤证在影像判读里是很危险的一个阴影、一片云、一季绿色都可能把你的判断带偏。7. 把多时相影像用起来的几个实在建议我把自己这段时间用下来的体会归一下。首先先摸清覆盖再规划分析别默认历史影像年年都有、处处都有花十分钟把可用期次和范围列清楚能省掉后面大量返工。其次坐标系这件事一次做对从拾取、录入到加载、出图每个环节都确认一遍基准这是所有地理信息工作里最容易被忽视、又最容易出连锁问题的地方。第三tk当敏感信息对待用配置文件或环境变量管理别硬编码进公开代码。还有一点是很多人会忽略的历史影像的价值不在于新而在于连续。一套只有两期的对比说服力有限一套能看出节奏和拐点的序列价值就完全不同。所以如果你在做长期项目从现在开始就养成按时间归档影像和记录期次的习惯等到需要回溯的时候你会感谢现在的自己。天地图开放多时相专题是一件好事但它也只是把能看历史这件事变得容易了一点真正把时间维度用出价值还是得靠方法和对数据的谨慎态度。