
简介面向地理研究、教育教学与区域规划等场景这份中国高程标准地图数据集整合了全国高分辨率高程TIF、全球矢量SHP、全国多级行政区划SHP、南海诸岛SHP及标准成图MXD模板可满足从精细化地形分析到跨区域对比、南海专题制图的完整需求。压缩包内含71个文件主要涵盖TIF高程栅格、SHP矢量要素、MXD工程模板以及配套的PRJ投影、DBF属性表等辅助文件合计约190.68MB结构清晰便于直接调用。目前已有744人学习浏览适用于需要快速构建中国高程专题图或进行地理空间分析的GIS使用者。借助预设的图例、比例尺和方向指示用户可基于MXD模板直接生成规范地图同时结合全球行政边界与九段线数据为国际对比和南海区域展示提供可靠底图是一套兼顾数据完整性与制图效率的实用地理资源。1. “中国高程标准地图”不是给你下载是给你少踩一遍底图的坑很多人第一次做GIS项目不是倒在模型精度上而是倒在最基础的“底图不统一”上省界SHP下载下来投影五花八门高程TIF只当普通影像在看南海诸岛在图上几乎永远是空缺最后要交图时才发现版式还得从头排。所谓“中国高程标准地图”这套数据是把全球SHP、全国行政区划SHP、南海诸岛SHP、全国高程TIF和标准出图MXD打包成一套可直接开工的底图模板。它解决的是坐标系不统一、要素不完整、出图样式没有基准这三个最耽搁事的点。拿到手以后你只需要往工程里加业务图层不必从头为了底图消耗工期。适合刚入门ArcGIS的从业者也适合每个项目都要重复配置底图的老手。2. 先拆包SHP、TIF、MXD各自是什么为什么要凑成一套标题里列出的几种格式不是随意堆在一起。SHP管边界矢量TIF管地表形态MXD管成图样式三者各司其职缺一个后面的出图流程就会多出不少手工作业。先弄清楚每个文件的本质再谈怎么用。2.1 SHP不是“一个文件”从dwg转shp到shp转txt都要知道的事SHP的全称是Shapefile1998年由ESRI公开的矢量数据交换格式。它最大的特点是“多文件组成”而不是单文件最少包含三个.shp保存几何坐标.shx保存几何索引.dbf保存属性表。工程里经常出现只拷贝了.shp换台电脑打开后图斑全部消失的情况就是因为.shx和.dbf没有一起拷贝。比这三个文件更重要的是.prj和.cpg.prj写坐标系.cpg写字符编码。缺少.prj时ArcMap会把它当未知坐标系加载当前数据框如果是WGS84它就会被拉到经纬度零点附近和行政边界完全错开。所以拿到任何SHP数据第一件事是看同一目录里有没有完整的.shp、.shx、.dbf、.prj四个文件这是最基本的数据体检。再说一个实操中非常高频的转换需求dwg转shp。很多规划、地籍和交通设计的原始资料还在CAD里而GIS项目要求把DWG要素导入到SHP中才能做空间分析。我用过ArcMap快速导入和FME两种路线翻车点大体相同。第一CAD里的多段线转成SHP后往往不闭合后续算面积时要么用“面转线”结果相加要么直接算不出准确面积口径全乱。第二CAD属性基本带不过来实体在转出前最好先在CAD里按图层分好或给每个实体附加扩展属性否则到SHP里只剩几何。想省事可以在CAD里先使用PEDIT把所有多段线批量闭合再把图层按用途命名好然后一次性导入ArcMap。这套中国高程数据最常被拿来配合作业的场景之一就是和CAD原始图叠合检查地类变化。反向的shp转txt也经常遇到主要是给外部系统做数据交换。常见做法是用ogr2ogr导出CSV或者用Python的Fiona遍历Feature把几何转成GeoJSON或WKT写到文本。注意Shapefile的字段名中文通常会被截断导出前建议先在属性表里把中文字段名改成英文别名。2.2 高程TIF不是图片里面的像素值是海拔而不是颜色全国高程TIF本质上是一个栅格DEM。表面上看后缀是.tif但它和平时处理的照片完全是两类数据。照片记录每个像素的RGB颜色而DEM记录每个像素的地理位置和高度。ArcMap中打开一个正确的DEM内容列表里显示的拉伸类型通常是“标准差”或“最小-最大值”而不是RGB复合。加载时如果发现它自动按RGB显示了或者看上去像一张灰白图像十有八九是软件没识别出它是单波段浮点数据需要手动去“符号系统”里改成拉伸渲染。判断一个TIF是不是DEM可以在图层属性 → 源标签里看波段数和像素类型。DEM通常是单波段16位整型或32位浮点影像底图通常是3个或4个波段8位无符号整型。全国性DEM常见的来源是SRTM、ASTER GDEM以及国内测绘部门发布的30米或90米高程数据。分辨率决定了后面坡度、坡向的计算精度30米和90米在山区地形的细节差异明显用的时候要根据项目需求选不要盲目追求高分辨率因为存储和计算开销会翻几倍。我处理省域范围时一般用30米全国范围或大流域分析用90米就够。把全国范围的90米数据硬换成30米栅格数量会让后续任何操作都变得极其漫长这是花钱买罪受。2.3 MXD是“成图”的关键图层关系和版面都是提前排好的MXD是ArcMap的工程文档后缀.mxd。它本身不存数据只存图层引用、符号化配置、数据框坐标系、页面布局和比例尺图例。这套中国高程标准地图里带一个标准成图MXD等于把制图规范的常规动作先跑了一遍行政区划用什么边界线宽、公里网怎么显示、南海诸岛的小图框放在哪个位置、标题栏和比例尺摆在哪都已经落在版面上。你打开MXD后的第一感觉应该是“所见即所得”所有底图要素加载完、符号化完可以直接往上加业务图层调整顺序就能出图。但要注意MXD是ArcMap时代的工程格式ArcGIS Pro主推的是.aprx两者不能直接相互打开。如果你用的是ArcGIS Pro可以用工具箱里的“导入ArcMap文档”工具或者干脆忽略MXD按它的版面布局手动建一次APRX。从这套数据的角度说MXD更大的价值在于提供布局参考它告诉你一张规范的中国地图应该包含哪些图层、南海诸岛小图框在哪个位置、指北针和图例默认放在哪。即使你换了软件照着这个版式把图层组合出来出的图纸也不会太走样。3. 把四个核心数据放进ArcMap加载顺序、符号化和模板整理数据打包得再整齐也得在软件里正确加载才能用。这里按我实际项目经验给出最稳妥的一遍操作。3.1 先加载全国行政SHP再叠加业务图层南海诸岛要单独开数据框加载顺序不是随手拖拽它决定图层绘制优先级和默认范围。我一般先加载“全国行政SHP”作为底图让数据框自动缩放到全国范围再叠加载“全球SHP”作为外围参考最后裁入业务图层。这样打开工程时默认视野就是全国不会出现只显示一个角落的情况。全国行政SHP通常按省、市、县三级分图层如果只要县域边界可以直接双击图层打开符号系统 → 类别 → 唯一值把省名或县名作为值展示快速切换行政级别。县域行政区划边界SHP是热搜里很常见的词实际上就是同一套数据的县界图层很多项目用它做抽样、分级统计或生态区划。南海诸岛SHP在全中国范围出图时永远是小图框里的独立数据框也就是ArcMap里的“系列小图框”。不要把它和大图数据放在同一个数据框里否则出图时南海诸岛会出现在大陆旁边或者被挤到图幅外。正确做法是在布局视图里安排一个专门的数据框把南海诸岛SHP放进去设好比例尺和投影再放到底图的右下方或预留位置。类似的还要单独检查图中其他敏感岛屿要素是否与行政SHP边界对应避免缩放时出现缺口。3.2 高程TIF的符号化分级数和色带直接决定图的观感DEM加载进来通常默认是灰色渐变没法直接用。要调成看得惯的地形效果右键图层 → 属性 → 符号系统 → 分类选“分类”渲染分类数我一般设在6到8类之间。分类方法优先选“自然间断点分级”或“相等间隔”。自然间断点更适合山区多、高程差异明显的地形如果只是做一个全国范围的示意底图用相等间隔更平滑。色带方面从低海拔到高海拔可以用从深绿到浅绿、黄、棕、白或者经典的高程从蓝到绿到棕到白。参数上要留意“类别数”和“颜色带”之间的对应关系类别太少会丢失地形层次太多地图上会显得斑驳。另一个常用的设置是“拉伸”对32位浮点DEM用标准差拉伸可以自动避开NoData和极值带来的突兀色块。全国高程TIF往往覆盖范围很大开了栅格符号化后会卡顿。解决方式是先把“高质量”模式关掉或者生成概览视图金字塔。在图层属性 → 高级 → 构建金字塔里可以设置重采样方式一般选“双线性”或“三次卷积”以保证显示平滑。数据量太大时还可以用定义查询按经纬度范围只显示当前视野但定义查询对栅格不直接生效所以更常用的是构建金字塔和概览让ArcMap自己抽稀显示。3.3 把MXD当成模板图层组、命名和出图样式只做好一次标准MXD文件里通常会创建图层组把“边界”“高程”“注记”分开管理。拿到手的MXD如果已按组排好我建议不要真接往里塞原始数据先复制出一个工作版本只改数据源路径保留图层组结构。打开MXD后如果底图层显示感叹号说明数据源路径断了右键图层 → 数据 → 设置数据源指向实际存放SHP或TIF的目录即可。这里有个很容易被忽略的点MXD记录的是绝对路径换目录后稍有不慎就是一连串感叹号。我每次更换项目目录都会用“数据驱动页面”重新定位一遍数据源或者干脆用Python脚本批量改图层连接避免手工点十几次。图层命名也要遵循可读性。我习惯的命名格式是“类型_区域_分辨率_日期”例如“SHP_全国_县级_20240101”和“DEM_全国_30m_20240101”。这样做的好处是两个月之后再打开工程不用逐个点图层属性就能知道数据口径和时效。出图样式方面行政边界线宽默认用0.4磅到0.6磅县级边界比省级边界细一档公里网用“格网”功能生成间隔按比例尺设置比如1:100万时用1度格网。这套东西在MXD里都定义好你就不用再对着白纸去调参考线。4. 用面图层裁剪DEM掩膜提取与栅格裁剪两种做法的取舍高程TIF是全国范围但实际项目几乎都是拿到某个县或某个流域去分析。这就一定要“用面图层裁剪DEM”。ArcMap里主要有两个工具按掩膜提取Extract by Mask和栅格裁剪Clip Raster。工具名称相近得到的结果表面也类似但底层行为差别很大。4.1 按掩膜提取边界精确但注意NoData的扩展按掩膜提取在工具箱里的路径是Spatial Analyst工具 → 提取分析 → 按掩膜提取。输入栅格选全国DEM输入掩膜数据选行政边界面图层输出路径自己写一个合理的栅格存储位置。它的工作原理是以面实体的边界为裁剪范围将范围以外的像元直接置为NoData范围内的像元保留原值。因此输出的栅格范围就是面的形状。我平时给它加一个环境设置在“环境”选项卡里把“掩膜”设置为面图层并勾选“将NoData指定为背景值”。这个勾选项会影响后续分析——如果你裁剪完直接做坡度或等高线NoData区域会扩展到面边界向外半个像元导致边缘产生一圈无效值。更好的做法是裁剪后先重分类把NoData重分类为0或其他固定值再做表面分析。实际项目里很多初学者不知道这两步差异裁完的DEM边界看起来锯齿状很重然后以为是数据问题其实是NoData在渲染时被显示成了背景色。一个可以复用的批量操作是在ArcMap里写一小段Python脚本对多个面文件循环执行掩膜提取。脚本中用arcpy.env.snapRaster把输出对齐到原始DEM的像元网格避免不同面文件裁剪结果之间出现半个像元的偏移。代码如下import arcpy from arcpy.sa import ExtractByMask arcpy.env.workspace rD:\gis_data arcpy.env.snapRaster rD:\gis_data\dem_30m.tif # 对齐到DEM格网 arcpy.env.extent rD:\gis_data\dem_30m.tif arcpy.env.mask rD:\gis_data\city_500m.shp out_dir rD:\delivery fields [county, name] # 按县域面裁剪DEM with arcpy.da.SearchCursor(rD:\data\county.shp, fields) as cursor: for row in cursor: county row[0] where_clause f{fields[0]} {county} arcpy.Select_analysis(rD:\data\county.shp, fmemory\\{county}, where_clause) out_raster f{out_dir}\\dem_{county}.tif ExtractByMask(rD:\data\dem_30m.tif, fmemory\\{county}, out_raster) print(f完成: {county})这里的核心参数有三个env.snapRaster强制输出栅格像元对齐到全球DEM的网格env.extent限制分析范围避免内存溢出env.mask则给所有后续空间分析统一套上一层裁剪。county字段名在实际数据里一般是“县区”或“NAME”用之前先在ArcMap属性表看一眼避免字段名不匹配报错。4.2 栅格裁剪矩形裁剪的“所见即所得”配合作业更高效栅格裁剪工具的路径是数据管理工具 → 栅格 → 栅格处理 → 裁剪。它的默认行为是对矩形范围进行裁剪并不按面的形状收缩。使用时有三个参数很关键输入栅格、输出范围、以及“使用输入要素作为裁剪几何”复选框。如果只是快速取一个矩形范围的DEM比如编一个城市建成区周边矩形高程图直接指定输出范围即可工具会用一个矩形框去切。如果想用面图层形状裁剪必须勾选“使用输入要素作为裁剪几何”并且把面的要素类选入否则即便选了面图层输出还是会保持那个面的最小外接矩形。另外还有一个容易误导人的选项“保持裁剪范围外部的NoData”默认勾选时矩形边框外的区域会保留原DEM数据栅格边缘就不会出现黑洞但如果你是想做“保留边界内部数据”的分析就要取消勾选让框外数据全部被删除。这两种行为差异和4.1里的NoData扩展是同一个底层逻辑很多人习惯性保留NoData导致后面统计面积时多出来一大圈无效像元。栅格裁剪的批量处理比4.1更高效因为它不用逐个选面只要在批处理对话框里把多个面文件输入进去即可。但缺点是和掩膜提取相比栅格裁剪生成的NoData边界不够精确在山区县界交界处容易出现拉丝效应。所以我实际项目里的判断标准是如果裁完只做底图显示或报告配图用栅格裁剪就够了如果裁完还要做坡度、坡向、汇水面积计算那就老老实实使用按掩膜提取。4.3 到底怎么选一个“按需求挑工具”的决策规则很多搜索“arcmap中依靠面图层裁剪dem栅格tif文件”的人最后都卡在“用哪个工具”上面。我总结过一套实际可用的判断规则如果是做展示底图目标是把DEM裁成某个行政区显示用栅格裁剪并把“使用输入要素作为裁剪几何”勾上速度最快文件也小。只考虑一个输出不考虑后面分析。如果要做定量分析比如计算各县平均海拔、坡度分级面积、日照时数那就用按掩膜提取。它可以保证输出栅格像元对齐、边界完整还能通过环境设置把NoData一起带入后续工具分析结果一致性好。如果是对几十个县域批量处理比如把全国DEM切到各县我建议优先用掩膜提取写循环脚本而不是逐一手工框选因为手工框选容易让不同县的文件之间出现重叠边界而脚本里设置snapRaster能保证每个县文件的像元网格完全对齐后续做数据合并时不用再纠正。5. 这套数据最容易翻车的5个坑坐标系、编码、性能和成图细节数据包本身可能整理好了但到具体项目里仍然可能翻车。这5条是我实际遇到过、如果能提前知道就不用折腾的事情。5.1 坑一全国SHP和高程TIF坐标系不是一个体系拿到数据包先不要急着拖进ArcMap。打开图层的属性 → 源 → 空间参考把SHP和TIF各自的坐标系记下来。很多自带“全球SHP”的包用的是WGS_1984地理坐标系国内测绘部门发布的行政SHP可能使用CGCS2000或Krasovsky_1940_Albers高程TIF则可能是GCS_WGS_1984也可能是UTM投影。三者混在一个工程里只要数据框坐标系统一平移一两百公里是常有的事。解决办法是在数据框属性里把坐标系统一设置为你项目需要的那个比如全国项目常用“CGCS2000_3_Degree_Gauss_Zone_26”再勾选数据框属性里的“在图层上执行坐标变换”让ArcMap在渲染时自动做投影转换。如果是要做面积量算尽量统一到Albers等积投影如果只要出图用地理坐标系也无妨。还有一个容易被忽略的环节当SHP的.prj缺失时系统会把它当作未知坐标此时应该在ArcMap里用“定义投影”工具先指派坐标而不是在数据框属性里强行改坐标系。5.2 坑二属性表中文字段乱码打开省界SHP的属性表发现字段名和值全是乱码属于很典型的编码问题。SHP的.dbf属性文件本身没有声明编码标准.cpg文件才保存编码标识。如果.cpg写的是UTF-8而ArcMap默认按GBK读取或者反过来就会乱码。解决方法有三种。第一种用记事本或Notepad打开.cpg文件手动把编码改成“UTF-8”保存后重新加载图层。第二种在ArcMap的工具 → 选项 → 常规里设置“对于Shapefile使用系统本地语言环境”让软件按GBK读取中文。第三种用GDAL把SHP统一转成UTF-8编码命令是ogr2ogr -lco ENCODINGUTF-8 output.shp input.shp参数里的-lco是“创建选项”的意思ENCODINGUTF-8告诉GDAL在输出时把属性编码写成UTF-8。这样做的好处是不仅解决ArcMap的显示问题也能兼容QGIS等软件。不过我强烈建议在拿到数据包的当天就把所有SHP统一转成UTF-8编码因为.dbf的编码问题会在日后做字段连接操作时扩大成影响几何和面积量的大问题那时候再来改会比现在麻烦得多。5.3 坑三全国SHP和高程TIF加载后ArcMap卡死全国范围SHP动辄几十万面要素高程TIF哪怕90米分辨率也有几百万像元加载后出现“正在等待后台处理”是常态。解决方向有三个一是右键图层 → 属性 → “显示”里把“比例依赖符号”关闭只保留“变量”与“简化显示”勾选二是在要用的图层上添加“定义查询”按省或区域过滤数据只显示需要的部分避免全图参与渲染三是对于栅格构建金字塔和概览视图。ArcMap第一次加载时会弹窗提示构建金字塔选择“是”。如果没有在数据管理工具 → 栅格 → 金字塔中手工创建。懒一点也可以用等大的面做“渔网分割”把一次加载全国变成只加载几个渔网单元格但终究不如定义查询省心。实际项目的血泪经验是不要直接双击打开全国SHP也别用“数据加载工具”把整个全国幅面一次拖进来。把全国SHP当作基础参照图层符号系统里只显示省界和主要水系区县级边界需要再看时只加定义查询显示当前视野范围内的县。另外一个容易忽略的性能杀手是导出PDF时的印刷分辨率默认300 DPI已经够用非要选600 DPI时ArcMap会把所有图层按矢量重绘DEM显示时间可能长达十几分钟。这些都算不上数据包的问题却是使用这套底图时最现实的耗时点。5.4 坑四南海诸岛小图框的比例尺和插花出图时南海诸岛要有一个独立数据框并且与主图比例尺协调。常见的问题包括主图用1:1000万小图框也用1:1000万但因为范围太小放大后看不到关键要素或者小图框用了不同的坐标系导致等比例尺下南海诸岛的形状与主图不一致。我的建议是在主图和南海诸岛数据框里分别设置相同的地图投影比如都用“Asia_North_Albers_Equal_Area_Conic”小图框的比例尺可以再放大到主图的3到5倍比如主图1:1000万时小图框用1:3000万。这样既不显得突兀又保持了形状的连贯性。另外在布局视图里小图框外沿建议加一个细黑边框放图例注明“南海诸岛”四个字。这是地图制图规范的基本要求也是很多审图员特别留意的地方。5.5 坑五SHP导出WKT时“断线”和“丢失”有热搜词提到“shp格式矢量数据导出为wkt”这种导出在给外部系统对接或做数据入库时经常用。常见翻车点是ArcMap里用“导出数据”选成“仅要素”而不是“带坐标系”结果WKT字符串里只有坐标没有空间参考或者SHP里的线要素被显示优化后看起来平滑一导出就发现被拆成无数条短线。用ArcGIS工具箱中的“要素转JSON”可以完整保留几何与坐标参考把JSON转成文本也可靠。Python里的写法from osgeo import ogr ds ogr.Open(rD:\data\county.shp) layer ds.GetLayer(0) with open(rD:\data\county.wkt, w) as f: for feat in layer: geom feat.GetGeometryRef().ExportToWkt() f.write(geom \n)参数上需要注意ogr.Open的第一个参数是数据源路径第二参数0表示只读ExportToWkt输出的是WKT字符串默认丢弃坐标系信息所以如果对方要求带投影需要沿用.shp的.prj文件再做后处理。还有如果线要素是MultiLineString导出的WKT会带括号接收方如果不支持Multi几何要在导出前先执行“多部分转单部分”。这一步虽小但对对接进度的影响真的很大。6. 再往前走一步用这套底图提取等高线或者把SHP转成3D Tiles底图只是基础。把DEM和SHP联动起来做二次产品才是这套数据的更大价值所在。6.1 从DEM提取等高线ArcToolbox → 3D分析工具 → 栅格表面 → 等高线是最直接的路线。参数上最关键的是等高线间距山地地形用50米或100米间距平原地形用5米或10米间距全国范围用500米间距才不会让线条糊成一片。还有一个“等高线范围”参数可以只对某个高程区间提取。生成后如果线条太碎可以在符号系统中用排除表达式把长度小于某个阈值的线删除只保留主要山脊和山谷的轮廓这一步本质上就是“arcgis从dem提分文件提取shp”的常规解法。用GDAL在命令行里也能做关键参数是-a指定高程字段-i指定间距gdal_contour -a elev -i 100 dem_30m.tif contour_100m.shp6.2 SHP转3D Tiles要做三维可视化常见做法是先把SHP转成GeoJSON再通过CesiumLab或ArcGIS Pro的3D Tiles工具转换。流程不复杂但要注意在转之前统一SHP坐标系因为3D Tiles的全球纹理底图通常基于WGS84或CGCS2000如果原始SHP是Web墨卡托投影叠加时会整片偏移。转出后我用Cesium的预览页面快速检查两个数据行政边界的底部是否贴地DEM的高程是否“浮”在半空。如果贴地不对最可能是SHP字段缺少高度信息需要先做属性连接把DEM的高程属性挂到SHP上。转GeoJSON的命令可以这样写ogr2ogr -f GeoJSON county.shp county.geojson6.3 我的一点工作习惯每次拿到这类标准化底图我现在习惯的第一步不再是把所有图层拖进来。先在QGIS里快速巡检一遍用图层信息把每个文件的坐标系、要素个数和面积范围过一遍再用ArcMap打开MXD做正式出图。这样既能在软件之间互检也能提前判断哪个文件需要做编码或投影修复。我吃过的最痛的一次亏是用旧MXD直接出图没有检查数据源路径结果输出PDF以后才发现省界是上一个项目的残留数百张图纸全部重导。从那以后我总会给MXD的数据源设置“相对路径”而不是“绝对路径”项目从一台电脑挪到另一台时打开工程再也不会出现断链。希望这点经验也能帮到你。本文还有配套的精品资源点击获取