焦作市30m DEM数据使用指南:坐标系校验、裁剪与坡度分析

发布时间:2026/10/7 15:12:54
焦作市30m DEM数据使用指南:坐标系校验、裁剪与坡度分析 简介河南省焦作市数字高程模型数据压缩包面向GIS学习者和地理空间分析人员内含焦作市全境三十米分辨率数字高程数据并附带市级行政区划边界矢量文件。数据可直接用于地形分析、流域划分、坡度坡向计算、可视性分析与区域规划等场景是理解豫西北山地与平原过渡地带地貌特征的基础资料。压缩包共十二个文件大小约十一点七九兆字节核心为高程栅格数据文件同时配有边界矢量文件及其属性表、投影信息、空间索引、坐标配准文件与元数据说明等辅助文件。各文件协同使用可在常见地理信息系统软件中完整显示、叠加与编辑无需额外转换即可开展后续分析。已有六百四十九人学习下载。数据属于中等分辨率适合宏观地形研究、灾害风险评估、水资源管理和基础设施规划等应用。附带的市级边界便于按行政区划裁切统计或与人口经济等属性数据连接是一份可直接上手、兼顾教学练习与实际项目的地理信息数据资源。1. 焦作市30m DEM数据包先看这里再动手拿到这个河南省焦作市DEM数字高程数据30m含市级范围shp文件.zip你大概率是要做地形分析、选址评估或者出图。先说结论里面那一份30米分辨率的DEM栅格数据配合市级边界的shp矢量文件是你在ArcGIS或QGIS里能直接用的标准组合。30米分辨率意味着每个像元代表30米的地面真实尺寸做市域尺度的坡度、坡向、流域分析足够但你要是想看清一条沟的细节就得换5米或1米的数据。这个包适合谁做规划、测绘、环境工程的从业者或者刚入门的GIS学生需要焦作市范围的高程底图做分析不想再满网找数据。常见做法是先解压、验证坐标系、再用shp裁剪DEM最后生成坡度坡向。这篇文章就把这条链路拆开讲透。2. 解压后先别急着开图文件清单、坐标系统和分辨率的核实2.1 先确认DEM和shp是不是同一套坐标系解压zip后你可能会看到一堆文件dem栅格通常是tif格式shp矢量则是.dbf、.prj、.shp、.shx一整套。很多人犯的第一个错是直接把tif拖进ArcMap再把shp拖进来结果两者对不上——一个在河南一个漂到海里。这不是数据坏了多半是坐标系不认识对方。先用ArcCatalog或者QGIS的图层属性面板查看投影信息。在ArcMap里右键图层打开属性切到源选项卡看空间参考下拉。常见有两种情况一种是GCGCS2000_3_Degree_GK_Zone_39这是经纬度的投影坐标版本另一种是WGS_1984_UTM_Zone_49N把地球按6度带切开。焦作市位于东经112°到113°附近投影带一般是39带或49带。如果shp和DEM坐标系不一致先别急着裁剪需要做投影转换。一句经验如果是CGCS2000的经纬度坐标你直接在ArcMap里用定义投影强改但不要乱选。正确做法是用投影工具Data Management Tools → Projections and Transformations → Feature → Project把shp或DEM统一到一个坐标系。栅格投影用投影栅格Project Raster会重采样注意选双线性或三次卷积保留高程精度别用最近邻。2.2 用ArcMap或QGIS目视验证范围是否对齐坐标系确认过后把DEM和shp一起加载进去。一般能看到shp边界正好压在DEM的范围内。如果边界和栅格有明显偏移哪怕几百米说明数据源本身有问题——比如shp是焦作市最新的行政边界但DEM是基于旧版本拼接的两者边界有偏差。这时候不要硬来先看shp范围是否超出DEM覆盖区。我在实际项目里遇到过DEM覆盖的是焦作市全境但shp里多了一块示范区或高新区飞地。这时你需要用shp去裁剪DEM但裁剪前确认shp是否包含多个要素。用按属性选择看看Feature有多少。如果shp有几十个面要素裁剪时是否要合并边界通常市级范围shp是一个整体面偶尔也会有separate岛屿。2.3 用gdalinfo快速读取元数据如果你装了QGIS或GDAL环境命令行里一条gdalinfo就能看到所有关键信息。打开cmd或终端输入gdalinfo D:/jiaozuo_dem_30m/dem30.tif输出里重点关注这几行Size is 1620, 1080行列数、Pixel Size (30.0000000, -30.0000000)分辨率、Origin (112.0000000, 36.2000000)左上角起点、Coordinate System is坐标系。Pixel Size必须是正的负号表示行方向是向下这是正常的。如果Pixel Size出现30.0006之类的小数说明数据做过重采样或拼接不是原生严格30米后续坡度计算有一定误差但市域尺度能接受。对于shp可以用ogrinfo查看。例如ogrinfo D:/jiaozuo_dem_30m/jiaozuo.shp -al -so这条命令会列出shp的要素数量、几何类型Polygon、投影信息。如果显示ERROR: Unable to open datasource说明shp文件不完整——缺少.dbf或.shx。这时别急着骂数据很多时候是zip解压时丢文件重新解压到全英文路径下问题就没了。3. 用市级范围shp裁剪DEM面图层裁剪与掩码提取的正确姿势3.1 常规裁剪工具和掩码提取到底什么区别这是很多人混淆的点。ArcToolbox里有两个工具最常用裁剪Clip和按掩膜提取Extract by Mask。前者在数据管理工具 → 栅格 → 栅格处理 → 裁剪后者在空间分析工具 → 提取分析 → 按掩膜提取。区别在于裁剪工具的速度快且允许你在勾选使用输入要素裁剪几何时保留输入栅格范围外的区域其实那样等于没裁。它只做矩形裁剪如果shp是圆形或不规则形状裁出来的栅格仍然是矩形只是范围被shp的包围盒限制边界外的像元并不是空值而是保留原始值所以需要后续再做一步设为空值或设置背景色透明。而按掩膜提取则直接用shp的几何边界把边界外的像元变成NoData裁出来的栅格边缘就是shp的形状。这一点在出图时尤其重要——你不想整个矩形边界盖住焦作市外的区域地图上会出现一块白板。如果你只是想把数据范围缩小到焦作市周边用普通裁剪就行但要生成沿市界形状的DEM必须用按掩膜提取。下面我以ArcMap 10.8为例操作。3.2 ArcMap里的按掩膜提取参数怎么设打开Spatial Analyst工具箱找到按掩膜提取双击。输入栅格选DEM输入掩膜数据选shp输出栅格填一个路径比如D:/jiaozuo_dem_30m/dem_clip_utm.tif。这时有个关键参数NoData值和提取范围。工具默认提取范围是输入栅格数据与掩膜数据交集一般不用改。但注意如果shp有多个不相连的面工具会按每个面元素分别裁剪中间部分自动变成NoData。你要的是整个市域连成一块所以最好在裁剪前用融合Dissolve工具把shp合并成一个要素。操作是打开数据管理工具 → 要素类 → 融合输入shp融合字段随便选一个比如NAME或FID生成jiaozuo_dissolve.shp然后用这个融合后的shp做掩膜。如果你命令行更顺手可以用GDAL的gdalwarp来做一步到位。比如gdalwarp -cutline D:/jiaozuo_dem_30m/jiaozuo_dissolve.shp -crop_to_cutline -dstnodata -9999 -tr 30 30 D:/jiaozuo_dem_30m/dem30.tif D:/jiaozuo_dem_30m/dem_clip.tif这里-cutline指定shp-crop_to_cutline表示裁到shp边界-dstnodata -9999把原背景值设为NoData-tr 30 30强制输出分辨率30米。注意如果原图坐标系是投影坐标输出会保持原投影如果原图是地理坐标经纬度-tr 30 30代表30度而不是30米这时要写-tr 0.000277 0.000277约等于30米。更稳妥的方式是在gdalwarp里加-t_srs EPSG:32649先把坐标系转到UTM再设置分辨率。3.3 用arcpy批量跑多个行政区如果你手头有多个县的shp比如要按山阳区、解放区分别裁可以在ArcMap的Python窗口里用arcpy循环。代码如下# -*- coding: utf-8 -*- import arcpy arcpy.env.workspace rD:/jiaozuo_dem_30m arcpy.env.outputCoordinateSystem arcpy.SpatialReference(WGS 1984 UTM Zone 49N) dem rD:/jiaozuo_dem_30m/dem30.tif city_shp rD:/jiaozuo_dem_30m/county.shp out_dir rD:/jiaozuo_dem_30m/clip_result # 先融合避免多个小面碎? 这里直接用county.shp要素字段为XZQMC fields [XZQMC] with arcpy.da.SearchCursor(city_shp, fields) as cursor: for row in cursor: name row[0] out_tif out_dir / name _dem.tif arcpy.gp.ExtractByMask(dem, city_shp, out_tif) print(name done)这段代码遍历shp的行政区名称字段对每个行政区生成一个裁剪后的DEM。注意ExtractByMask里掩膜是shp字段的全部要素不是当前循环的单个要素——如果你按属性选择需要先用arcpy.MakeFeatureLayer加SelectLayerByAttribute。上面这个写法其实会把整个市域裁到每个县只是文件名不同是个坑。正确做法是import arcpy arcpy.env.workspace rD:/jiaozuo_dem_30m dem rD:/jiaozuo_dem_30m/dem30.tif county_shp rD:/jiaozuo_dem_30m/county.shp out_dir rD:/jiaozuo_dem_30m/clip_result with arcpy.da.SearchCursor(county_shp, [XZQMC]) as cursor: for row in cursor: name row[0] where_clause XZQMC {}.format(name) temp_layer lyr_ name arcpy.MakeFeatureLayer_management(county_shp, temp_layer, where_clause) out_tif out_dir / name _dem.tif # 掩膜提取使用单个县图层 arcpy.gp.ExtractByMask(dem, temp_layer, out_tif) print(name done)参数说明where_clause是按名称筛选MakeFeatureLayer生成一个临时图层只包含当前县范围ExtractByMask输出结果就只有一个县的边界形状。这样批量操作时每个县的高程范围都能准确裁出。4. 数据落地时的四个高频坑避坑排查手册4.1 现象裁剪出的DEM边缘发黑像一圈黑框原因原始DEM有不少NoData区或背景值0值裁剪后NoData被渲染成黑色。尤其在ArcMap默认拉伸符号里NoData通常显示为黑色。解决在图层属性的符号系统里把NoData颜色的勾选去掉或者设置成白色背景。如果背景值不是NoData而是0需要用栅格计算器把0值改为NoData# 在ArcMap栅格计算器里输入 Con(dem_clip.tif 0, -9999, dem_clip.tif)把0变成-9999再使用SetNull或直接在图层属性中设置。注意焦作市范围内海拔最低也有几十米不可能有0值所以0通常是无效背景。如果计算坡度时黑边干扰了分析一定要先做这一步。4.2 现象shp和DEM套在一起shp跑到栅格外边几百米原因两个数据不是同一套投影。我见过最典型的情况是shp用的是CGCS2000 / 3-degree Gauss-Kruger CM 114E而DEM用的是WGS 84 UTM 49N两者虽然都是米制但中央经线和椭球体不同水平偏移能达到几百米。解决用投影工具把shp转换到DEM的坐标系。在ArcToolbox里选择数据管理工具 → 投影和变换 → 要素 → 投影输入shp输出坐标系选择DEM的坐标系。转换方法选PROJCS里的已有方法不要选默认。转换后重新加载边界就能对上。如果你发现DEM是地理坐标度shp是投影坐标思考一下通常DEM不会以地理坐标存30米分辨率因为30米在纬度上是约0.000277度在经度上会根据纬度缩放不利于分析。这种情况大概率是DEM的数据说明写错了先检查gdalinfo里的Coordinate System is。4.3 现象裁剪出来的DEM范围比shp边界大沿边界有一圈台地原因栅格像元是按行规则排列的掩膜提取虽然把外部变为NoData但边界像元只要有一部分落在shp内部就会被保留导致边界呈锯齿状边缘往外扩半个像元15米。解决这是栅格数据固有的像元对齐问题。要减小误差可以在裁剪前使用重采样工具把像元对齐到shp边界的精确网格。更简单的方法是接受这15米的误差市域尺度分析无伤大雅。真正要命的是如果你用边界做高程剖面剖面线正好压在边界上会出现阶梯状跳变。这时可以给shp做一点点内缩Buffer负值比如-15米再裁剪。但这个方法会把边界偏移不推荐。更好的是在gdalwarp时使用-crop_to_cutline同时配合对齐gdalwarp -cutline jiaozuo.shp -crop_to_cutline -tr 30 30 -tap dem30.tif dem_clip.tif-tap参数会让输出栅格网格对齐到shp边界减少锯齿。注意-tap需要原始DEM的投影坐标和裁剪目标一致。4.4 现象zip解压后shp加载报错找不到.dbf原因你用某些国产解压软件解压时把长文件名截断了或者漏解出.dbf。shp文件通常由多个附加文件组成少一个.dbf属性表就空了ArcMap直接报错。解决重新解压解压到英文路径比如D:\data\jiaozuo不要放在桌面或中文目录下。如果还是报错用ogrinfo测试shp是否能打开。能打开说明只是ArcMap缓存问题重启软件打不开说明shp本身就缺文件。需要向数据提供方重新索要。这里特别提醒如果你准备只拷贝shp给别人必须把同名的.shp、.shx、.dbf、.prj四个文件一起拷缺一不可。很多数据包坏了其实是拷贝时漏了.prj导致坐标系信息丢失。5. 让30米DEM真正可用坡度、坡向、山体阴影的派生参数5.1 在ArcGIS里计算坡度和坡向参数别选错有了裁剪后的DEM下一步通常要做坡度分析。在ArcMap中打开Spatial Analyst工具箱 → 表面分析 → 坡度。输入栅格选DEM输出单位选度DegreeZ因子Z factor到底填多少是个玄学。Z因子是在X、Y单位与Z单位不一致时用来换算高程比例的参数。如果你的DEM是UTM投影单位为米高程也是米Z因子设1就够了。但如果你用的DEM是地理坐标系经纬度那么X、Y单位是度高程单位是米Z因子不能直接设为1。标准做法是先定义投影Project Raster到UTM再计算坡度。否则一个纬度约等于111公里你的坡度值会小得离谱。如果非要用经纬度DEM算坡度常见做法是把Z因子设为111320每度对应约111.32公里但这只适用赤道附近焦作在纬度35°左右cos(35°)约为0.819实际每度经度对应约91公里更准确的是设Z因子为111320 * 0.819。所以我一般强烈建议先投影再算坡度别在Z因子上省事。坡向工具Aspect默认输出0-360度0代表北90代表东。它输出的是一个浮点型栅格你可以在唯一值里看到平地区域-1。计算后别忘了用重分类把坡向分成9类北、东北、东、东南、南、西南、西、西北、平地方便后面做光照分析或土地利用。5.2 用GDAL生成山体阴影和彩色地形如果你不想开ArcGISQGIS和GDAL同样能出效果很好的地形图。GDAL自带一个gdaldem命令专治DEM可视化。先裁剪再生成山体阴影gdaldem hillshade D:/jiaozuo_dem_30m/dem_clip.tif D:/jiaozuo_dem_30m/shade.tif -az 315 -alt 45 -z 1.2参数解释-az是太阳方位角315度表示西北方向来光这是地形图默认-alt是太阳高度角45度比较自然-z是垂直拉伸系数可以放大起伏焦作北部有太行山如果你觉得山体阴影太平把-z调到2效果立刻立体起来。然后用color-relief给DEM上色先准备一个色带文件color.txt300 153 204 255 600 204 255 204 900 255 255 153 1200 255 204 153 1500 204 153 102第一列是海拔后三列是RGB颜色。执行gdaldem color-relief D:/jiaozuo_dem_30m/dem_clip.tif color.txt D:/jiaozuo_dem_30m/color_dem.tif最后在QGIS里加载shade.tif和color_dem.tif把彩色DEM放在上层把山体阴影放在下层设置混合模式为叠加就能得到一张像卫星影像一样的地形图。这招在做项目汇报时特别好用领导通常以为你花了很久做效果图其实就是两条GDAL命令。5.3 坡度分级和面积统计用表格验证数据是否合理算出坡度后通常需要统计不同坡度级的面积占比。比如做建设用地适宜性评价坡度5%是平坦地5%-15%是缓坡25%不适合建设。在ArcGIS里用重分类把坡度分成3级再用栅格转面工具转成矢量最后用计算几何算出每个级别的面积。这里有一个需要注意的点面积要用投影坐标系下的栅格来算如果你用经纬度DEM直接算面积会严重失真。具体参数重分类时要确定临界值。焦作市北部太行山区坡度普遍大于25%南部平原坡度小于5%中间的丘陵地带在10%-20%之间。你可以先做坡度再用栅格计算器统计百分比。用Python的arcpy也能直接算import arcpy from arcpy.sa import * arcpy.env.workspace rD:/jiaozuo_dem_30m dem rD:/jiaozuo_dem_30m/dem_clip.tif slope Slope(dem, DEGREE, 1) # 重分类0-5, 5-15, 15-25, 25以上 reclass Reclassify(slope, Value, RemapRange( [[0, 5, 1], [5, 15, 2], [15, 25, 3], [25, 90, 4]]), NODATA) reclass.save(rD:/jiaozuo_dem_30m/slope_reclass.tif)这里RemapRange的每一行是[起始值, 结束值, 新值]注意区间是左闭右开包含下界不包含上界所以5度会进到第一级还是第二级取决于你写的数字。如果想让0-5包含5应该写[0, 5.0001, 1]避免浮点数临界。这个坑我踩过多次一度以为分类结果错位其实是被浮点精度坑了。6. 最后一步用shp范围验证DEM边界和导出KML的取舍这一章给你一个收尾技巧用shp转KML在手机上快速核对DEM覆盖范围。具体做法是在ArcMap的转换工具里选择转为KML输入shp输出一个.kmz文件用手机上的奥维地图或Google Earth打开就能看到焦作市的边界。但这个操作有个前提shp必须已经在WGS84经纬度坐标系下否则转出来的KML位置会偏移。如果你的shp是CGCS2000投影坐标先投影转换成WGS84再转KML。对于DEM本身个人习惯是最后做一次检验用DEM在焦作市市区范围内随便取一个点测一下高程。焦作市市区海拔大约在80-110米之间如果你量出来是1000米数据源肯定有问题。还有一个更实用验证方法把DEM加载到ArcScene里垂直拉伸3倍看北部太行山的山脊线和山脚线是否符合常识。如果山脊线看起来像网格状说明数据在拼接时用了低质量的重采样需要谨慎使用。最后分享一个教训以前我拿DEM做流域分析直接用了未投影的经纬度DEM结果汇水面积差了将近30%后来才意识到是坡度计算里的投影问题。从那以后我拿到DEM的第一件事永远是gdalinfo看坐标再决定要不要投影。你手里的焦作市DEM如果shp和DEM坐标系不一致别怕按第3章的方法先统一坐标系再裁剪后面所有分析都会顺畅很多。希望帮到你。本文还有配套的精品资源点击获取