ArcMap加载天地图WMTS服务全攻略:从Key申请到坐标系配置与报错排查

发布时间:2026/9/20 17:19:45
ArcMap加载天地图WMTS服务全攻略:从Key申请到坐标系配置与报错排查
1. 为什么要在ArcMap里折腾天地图干GIS这行的底图这件事几乎绕不开。你打开ArcMap默认的底图要么是空白的要么得连Esri自己的在线服务但那个加载速度、那个中文标注的缺失做国内项目的时候是真的难受。尤其是做国土空间规划、自然资源调查、应急测绘这类活儿甲方动不动就要求“底图用天地图”因为天地图是国家地理信息公共服务平台审图的时候认这个。天地图提供了地形图、矢量底图、影像底图、全球境界这几套WMTS服务覆盖范围全、更新频率也还行关键是免费。但问题来了——ArcMap原生并不直接支持把天地图当底图用你得手动配置WMTS连接。很多人第一次搞的时候卡在坐标系、卡在Key、卡在服务地址格式折腾半天加载出来是空白或者报301001非法Key。这篇东西就是把我自己反复踩坑之后总结出来的一套流程写清楚。从服务地址怎么拼、Key怎么申请、坐标系怎么对、缓存怎么调到加载出来之后标注不显示、影像偏移这些破事怎么排查全部按实际操作顺序讲一遍。不管你是刚装完ArcGIS 10.2的新手还是用了好几年10.8的老手照着走一遍基本都能把天地图挂上去。注意天地图的服务调用需要申请Key而且不同服务类型对应的地址不一样拼错一个字符就是301001。2. 天地图WMTS服务的基础认知2.1 天地图到底提供了哪几套服务天地图对外发布的WMTS服务常用的就四类矢量底图vec、矢量注记cva、影像底图img、影像注记cia再加上地形底图ter和地形注记cta以及全球境界ibo。每一类都是一个独立的WMTS服务端点地址格式是固定的你只需要把Key替换成自己申请的那个就行。具体来说矢量底图的地址是http://t0.tianditu.gov.cn/vec_c/wmts?tk你的KEY影像底图是http://t0.tianditu.gov.cn/img_c/wmts?tk你的KEY地形底图是http://t0.tianditu.gov.cn/ter_c/wmts?tk你的KEY全球境界是http://t0.tianditu.gov.cn/ibo_c/wmts?tk你的KEY注意这里的_c后缀代表的是经纬度投影EPSG:4326也就是常说的WGS84地理坐标系。如果你用的是Web墨卡托投影EPSG:3857那后缀要换成_w比如vec_w、img_w。这个细节很多人不注意结果加载出来位置偏到太平洋去了。2.2 为什么ArcMap加载天地图容易出问题ArcMap对WMTS的支持其实是通过“添加WMTS服务器”这个功能实现的但它对服务的能力文档GetCapabilities解析有时候不太灵光。天地图的服务能力文档返回的XML里图层名称、矩阵集、TileMatrix这些信息都有但ArcMap在解析的时候可能会把某些参数读错导致你选完图层之后加载不出来。另一个坑是坐标系。ArcMap的Data Frame坐标系如果和服务的坐标系不一致它会尝试动态投影但WMTS这种瓦片服务动态投影的效果很差经常出现瓦片错位或者干脆不显示。所以正确做法是先把Data Frame的坐标系设成和天地图服务一致的再去加载。还有一个常见问题是Key的权限。天地图申请Key的时候要选服务类型如果你只勾了“矢量地图”那加载影像的时候就会报301001。这个错误码的意思就是“非法Key”但实际原因可能是Key没权限、Key过期、或者地址拼错了。2.3 申请Key的正确姿势打开天地图官网注册账号进控制台创建应用。创建的时候会让你选应用类型一般选“浏览器端”就行。然后关键的一步是勾选服务权限——把“矢量地图”、“影像地图”、“地形地图”、“全球境界”这几个都勾上别省这一步。很多人只勾了默认的矢量后面加载影像就报错。Key申请完之后复制出来先别急着往ArcMap里填。拿浏览器直接访问一下拼接好的地址比如http://t0.tianditu.gov.cn/vec_c/wmts?tk你的KEYserviceWMTSrequestGetCapabilities如果浏览器返回一大段XML说明Key没问题。如果返回的是{code:301001,msg:非法Key}那就得回去检查Key是不是复制错了或者权限没勾全。实操心得天地图的Key有时候会有延迟刚申请完可能等几分钟才生效。如果确认信息都没错但还是报301001等五分钟再试。3. 在ArcMap中配置天地图WMTS服务的完整流程3.1 准备工作确认版本和坐标系ArcMap 10.2及以上版本都支持WMTS但10.2和10.8在界面细节上略有差异。我下面以10.8为例10.2的操作路径基本一样。先打开ArcMap新建一个空白地图文档。然后在内容列表里右键“图层”选“属性”在“坐标系”选项卡里把Data Frame的坐标系设成WGS 1984地理坐标系。这一步很关键因为天地图的_c服务就是WGS84经纬度投影。如果你后面要加载_w的服务那就把Data Frame设成WGS 1984 Web Mercator (Auxiliary Sphere)。总之Data Frame的坐标系必须和服务一致否则瓦片对不上。3.2 添加WMTS服务器的具体步骤在ArcMap的Catalog窗口里找到“GIS Servers”节点双击“Add WMTS Server”。弹出来的对话框里URL那一栏填http://t0.tianditu.gov.cn/vec_c/wmts?tk你的KEY注意这里不要加serviceWMTSrequestGetCapabilities这些参数ArcMap会自动补。填完之后点“Get Layers”如果Key没问题下面会列出这个服务里包含的图层。通常会有“vec”、“cva”这些。选一个点OK。这时候Catalog里会出现一个新的WMTS服务器连接。把它展开把里面的图层拖到地图里。如果一切正常你应该能看到矢量底图加载出来了。但实际往往没那么顺利。常见的情况是拖进去之后地图是空白的或者只显示了一部分。这时候先检查Data Frame的坐标系再检查服务的坐标系。如果服务是_c经纬度Data Frame也必须是经纬度。3.3 分别加载地形、矢量、影像、全球境界矢量底图加载完之后注记图层cva要单独加。因为天地图把底图和注记分成了两个独立的服务你得再添加一个WMTS服务器地址换成http://t0.tianditu.gov.cn/cva_c/wmts?tk你的KEY然后把注记图层拖进来叠在矢量底图上面。这样地名、道路名才会显示出来。影像底图同理地址换成img_c注记换成cia_c。地形底图是ter_c注记是cta_c。全球境界是ibo_c这个图层比较特殊它只有境界线没有填充适合叠加在影像或者矢量上面。我一般会建一个图层组把底图和注记放一起方便管理。比如“天地图矢量”组里放vec和cva“天地图影像”组里放img和cia。这样切换底图的时候直接开关组就行。3.4 缓存与性能调优天地图的服务是瓦片服务ArcMap加载的时候会按需请求瓦片。如果你网络不太好加载会很慢。可以在WMTS服务器属性里调整缓存设置。右键那个WMTS连接选“Properties”在“Cache”选项卡里把缓存目录设到一个本地空间比较大的盘缓存大小设大一点比如2GB。另外ArcMap默认的瓦片请求超时时间比较短网络慢的时候容易失败。可以在注册表里改但更简单的办法是先把地图缩放到一个比较小的比例尺等瓦片加载完了再放大。或者用“Full Extent”按钮先看全局再逐步放大。注意天地图的瓦片有级别限制一般到18级。如果你缩放到19级可能就没有瓦片了显示空白是正常的。4. 常见报错与排查技巧实录4.1 301001非法Key的几种可能这个错误码是最常见的。原因无非几种Key复制的时候多了空格、Key没勾选对应服务的权限、Key过期了、或者地址里的tk参数拼错了。排查的时候先把拼接好的GetCapabilities地址放到浏览器里试如果浏览器能返回XML说明Key没问题那就是ArcMap这边的问题。如果浏览器也报301001那就是Key本身的问题。还有一种情况是Key被限制了指纹。天地图的Key可以绑定域名或者IP如果你在ArcMap里用没有域名这个概念所以申请的时候不要绑定域名选“不限制”或者“浏览器端”就行。4.2 加载出来是空白或者瓦片错位空白的原因通常是坐标系不匹配。检查Data Frame的坐标系检查服务的_c还是_w后缀。如果坐标系对了还是空白看看是不是图层顺序问题——注记图层要放在底图上面但有时候注记图层会挡住底图把注记的透明度调一下或者调整顺序。瓦片错位一般是动态投影导致的。ArcMap在Data Frame坐标系和服务坐标系不一致的时候会尝试动态投影但WMTS瓦片不支持这个。解决办法就是让两者一致或者用“Project Raster”把数据投影到和服务一样的坐标系。4.3 注记不显示或者显示不全注记图层cva、cia是独立的服务必须单独加载。很多人只加了vec没加cva然后说“怎么没有地名”。另外注记的显示比例尺是有限制的缩得太小或者太大都可能不显示。在图层属性里把“Scale Range”设成“Show at all scales”试试。还有一个坑是字体问题。天地图的注记用的是特定字体如果你的系统里没有可能会显示成方块。这个一般出现在中文注记上解决办法是安装对应的字体或者换用英文注记服务。4.4 服务连接超时或者加载特别慢天地图的服务节点有t0到t7可以轮换着用。如果你用t0特别慢换成t1、t2试试。在WMTS服务器地址里把t0改成t1就行。另外ArcMap的瓦片请求是串行的加载大范围的时候会慢。可以先用小范围测试确认没问题再放大范围。如果公司网络有防火墙可能会拦截天地图的请求。这时候得找网管开白名单把*.tianditu.gov.cn加进去。5. 进阶技巧用Python脚本批量加载天地图服务5.1 为什么用脚本而不是手动点手动添加WMTS服务器一次只能加一个服务而且每次新建地图文档都要重新加一遍。如果你经常做项目每次都要重复这个操作很烦。用Python脚本可以一次性把所有服务都加进去还能自动设置图层顺序和比例尺范围。ArcMap的Python窗口支持arcpy但WMTS服务器的添加其实是通过ArcObjects实现的arcpy本身没有直接的方法。不过你可以用AddDataFromPath或者直接操作IMap接口。更简单的办法是写一个.pyt工具箱里面用arcpy.mapping来添加WMTS图层。5.2 一个可复用的脚本模板下面这个脚本是我自己用的把Key替换成你自己的就行。它会依次添加矢量底图、矢量注记、影像底图、影像注记并设置好图层顺序。import arcpy key 你的KEY services [ (http://t0.tianditu.gov.cn/vec_c/wmts?tk key, vec), (http://t0.tianditu.gov.cn/cva_c/wmts?tk key, cva), (http://t0.tianditu.gov.cn/img_c/wmts?tk key, img), (http://t0.tianditu.gov.cn/cia_c/wmts?tk key, cia), ] mxd arcpy.mapping.MapDocument(CURRENT) df arcpy.mapping.ListDataFrames(mxd)[0] for url, name in services: result arcpy.mapping.Layer(url) result.name name arcpy.mapping.AddLayer(df, result, AUTO_ARRANGE) arcpy.RefreshActiveView()这个脚本在ArcMap 10.8的Python 2.7环境下测试通过。注意arcpy.mapping.Layer直接传URL有时候会失败如果不行就先用Catalog手动加一次然后把那个图层文件保存成.lyr脚本里加载.lyr文件。5.3 脚本的局限性和替代方案ArcMap的Python 2.7已经停止维护了很多新库用不了。如果你经常需要批量处理建议考虑ArcGIS Pro它用的是Python 3而且对WMTS的支持更好。ArcGIS Pro里可以直接通过“Add Data”里的“WMTS Server”添加也可以用arcpy.mp来操作。不过ArcGIS Pro的界面和ArcMap差别很大很多人不习惯。如果你只是偶尔用一下手动加也不麻烦。脚本适合那种每天都要开新文档、每次都要加底图的场景。6. 坐标系与投影的深度解析6.1 经纬度投影和Web墨卡托的区别天地图的_c服务用的是EPSG:4326也就是WGS84经纬度单位是度。_w服务用的是EPSG:3857也就是Web墨卡托单位是米。两者的瓦片划分方式不一样_c的瓦片是正方形的经纬度网格_w的瓦片是正方形的墨卡托网格。在ArcMap里如果你的Data Frame是经纬度加载_c服务没问题。但如果你的Data Frame是投影坐标系比如UTM或者高斯克吕格加载_c服务就会动态投影效果很差。这时候要么把Data Frame改成经纬度要么用_w服务。6.2 如何判断该用哪个服务简单来说做全国范围的小比例尺地图用_c就行因为经纬度投影在高纬度地区变形小。做城市级别的大比例尺地图用_w更好因为Web墨卡托在局部区域变形小而且和大多数在线地图比如高德、百度的投影一致。如果你要叠加自己的矢量数据那得看你的数据是什么坐标系。如果数据是WGS84经纬度用_c最方便。如果数据是Web墨卡托用_w。如果数据是其他投影建议先投影到WGS84或者Web墨卡托再加载天地图。6.3 投影转换的实操步骤在ArcMap里用“Project”工具可以把数据从一个坐标系转到另一个。比如你的数据是西安80高斯克吕格想转成WGS84经纬度就用“Project”工具输出坐标系选WGS 1984。转换的时候要注意基准面转换参数国内常用的是“WGS_1984_(ITRF00)_To_Beijing_1954”之类的但具体用哪个得看你的数据精度要求。如果只是做底图展示精度要求不高直接用默认参数就行。如果要做面积量算或者空间分析那就得用七参数或者四参数这个得找测绘部门要。实操心得天地图的影像底图本身就有一定的偏移这是历史原因造成的。如果你发现影像和你的矢量数据对不上先检查是不是影像本身的偏移而不是坐标系的问题。7. 天地图与其他在线地图的对比7.1 天地图 vs 高德 vs 百度高德和百度的在线地图在ArcMap里加载比较麻烦因为它们用的是GCJ-02或者BD-09坐标系和WGS84有偏移。天地图用的是CGCS2000和WGS84基本一致所以叠加的时候不需要做额外的纠偏。这是天地图最大的优势。另外天地图是国家平台数据权威性高审图的时候认。高德和百度的数据虽然更新快但用于正式项目的时候甲方不一定认。7.2 天地图 vs Esri在线底图Esri的在线底图在ArcMap里加载很方便直接选“Add Basemap”就行。但Esri的底图在国内的加载速度不稳定而且中文标注不全。天地图的加载速度在国内很快中文标注也完整。不过Esri的底图样式更多有地形、影像、街道、暗色等多种风格。天地图的样式相对单一主要是矢量、影像、地形三种。7.3 什么时候该用天地图做国内项目尤其是政府项目、自然资源项目优先用天地图。做国际项目或者对底图样式要求高的可以用Esri。做互联网应用高德和百度更合适因为它们有丰富的POI和路网数据。8. 实际项目中的经验总结8.1 出图时的注意事项用天地图做底图出图的时候要注意版权问题。天地图的服务条款里写了使用的时候要标注数据来源。一般在图廓外或者图例里加一行“底图来源天地图”就行。另外出图的分辨率要调高。天地图的瓦片默认是256x256出图的时候如果分辨率设成300dpi瓦片会模糊。可以在图层属性里把“Resampling”设成“Bilinear”或者“Cubic”这样放大之后会平滑一些。8.2 数据叠加的偏移问题天地图的矢量底图和影像底图之间有时候会有偏移这是正常的因为两者的数据来源不一样。如果你要精确叠加建议用影像底图因为影像的几何精度更高。矢量底图主要用于示意不适合做精确量算。如果你发现自己的矢量数据和天地图对不上先检查自己的数据坐标系。如果数据是CGCS2000那和天地图基本一致。如果数据是WGS84那也基本一致。如果数据是北京54或者西安80那就得做基准面转换。8.3 长期使用的维护建议天地图的Key有有效期一般是长期有效但如果你的应用访问量特别大可能会被限流。建议定期检查Key的状态如果发现加载变慢或者报错先去天地图控制台看看。另外天地图的服务地址偶尔会变虽然不频繁但最好关注一下官方公告。如果地址变了ArcMap里的WMTS连接也得跟着改。注意不要把Key硬编码在公开的脚本或者文档里尤其是要分享给别人的时候。Key泄露了可能会被别人盗用导致你的配额被耗尽。9. 常见问题速查表问题现象可能原因解决方法报301001非法KeyKey错误、权限不足、地址拼错浏览器测试GetCapabilities检查Key权限加载空白坐标系不匹配Data Frame坐标系改成WGS84或Web墨卡托瓦片错位动态投影统一Data Frame和服务坐标系注记不显示未加载注记服务单独添加cva或cia服务加载特别慢网络问题或节点问题换t1-t7节点检查防火墙影像偏移数据本身偏移用影像底图做基准检查矢量数据坐标系缩放后空白超出瓦片级别缩放到18级以内字体显示方块缺少字体安装对应字体或换英文注记这个表是我自己遇到问题的时候整理的基本上覆盖了90%的情况。剩下的10%可能是ArcMap本身的bug重启一下或者换个版本试试。10. 最后的个人体会天地图在ArcMap里的加载说难不难说简单也不简单。核心就三件事Key要对、坐标系要对、服务地址要对。这三件事搞定了剩下的就是耐心等瓦片加载。我刚开始用的时候光Key就折腾了一下午后来发现是权限没勾全。还有一次是坐标系设错了加载出来一片空白以为是服务挂了结果是Data Frame设成了投影坐标系。这些坑踩过一遍之后现在基本上五分钟就能配好。如果你经常做项目建议把配置好的地图文档存成模板下次直接打开就能用。或者写个脚本一键加载所有服务。这样能省不少时间。另外ArcGIS Pro现在越来越普及了它对天地图的支持比ArcMap好很多。如果你还在用ArcMap可以考虑慢慢过渡到Pro。不过Pro的硬件要求高一些老电脑可能跑不动。最后再分享一个小技巧天地图的服务地址里t0到t7是等价的但不同节点的响应速度可能不一样。如果你发现某个节点特别慢换一个就行。这个在批量加载的时候特别有用可以写个循环自动切换节点。