1. 这份坡度数据集到底包含什么
做城市规划、选址分析、农地评估、道路选线这些活儿的人,应该都经历过一个特别头疼的阶段:临时要找一份全国城市的坡度数据,网上翻半天,不是要注册下载版权受限的原始DEM,就是下载下来还要自己按行政区裁剪、算坡度、再转格式,一套流程下来半天就搭进去了。
我这边的做法是用公开的DEM数据源统一处理,把全国地级及以上城市(含部分省直辖县级行政单元)按行政区边界逐一裁剪、计算坡度,再整理成两套配套文件:一套是矢量数据,直接可以在ArcGIS、QGIS、SuperMap这类GIS软件里打开分析;另一套是Excel数据,方便不熟悉GIS或者只想快速看统计数据、做图表的同事直接使用。两者信息同源,字段结构基本一致,可以根据自己的工作习惯选择。
1.1 矢量格式和Excel格式分别怎么理解
很多人一听到“矢量数据”就发怵,其实可以简单理解成:矢量数据是一张带坐标的“地图图层”,里面每个要素都有明确的边界、位置和属性。
就拿这套坡度数据里的面要素来说,每一个面代表一个坡度分级区块,属性表里通常包含城市名称、行政代码、平均坡度、最小最大坡度、面积等字段。矢量格式最大的好处是能叠加做空间分析,比如你把某市的坡度面数据叠到土地规划图上,一眼就能看出哪些地块不适合开发建设。相比栅格数据,矢量数据在出图制图时也更干净,审图、汇报时不会出现一堆锯齿状的像素点。
Excel数据则相当于把矢量属性表“抽出来”做一个纯表格版。每一行是一条要素记录,列字段包括城市名、坡度等级、各等级面积占比等等。不会开GIS软件,或者只是想快速算一下全市坡度分级占比、做个统计报表的,直接打开Excel就行。两张表通过字段匹配后,也可以用于后续的数据透视、求和、做图表,非常直观。
1.2 371个城市的统计口径问题
这里必须提前说清楚一个容易踩坑的点:371这个数字不是拍脑袋定的。统计口径上,国内“城市”既可以指直辖市、地级市、地区、自治州、盟,也可以把省直辖县级市单独拿出来。如果只算传统地级行政区划,常规口径大约在330多个;但如果把部分省直辖县级市、直管县等独立行政单元也算进来,数量就会接近370上下。
所以你在收到这套数据后,第一件事不是去算坡度、做分析,而是先核对行政区名称和行政区划代码。建议拿最新的行政区划代码表做一个比对,确认你关心的城市在不在里面、对应的名称是否是最新版本。以前就碰到过同事拿着旧口径去核对新代码,结果对不上号,白白折腾了半天。这个细节在做跨部门汇报时尤其重要,数据口径错了,后面所有分析结论都可能被质疑。
2. 坡度数据的底层原理和生产流程
很多人只知道“坡度越大越陡”,但真要问坡度是怎么算出来的、用多少米的DEM数据生产比较合适,可能就说不清了。我简单梳理一下,这部分是数据使用的底层逻辑,也决定了你对数据精度的预期。
2.1 坡度的算法核心:最大坡降法
坡度在数字地形分析里,简单定义是地表某一点处高程变化率最大的方向上的角度。专业软件里通常用Horn算法,在DEM的3×3邻域窗口内,分别计算出东西方向和南北方向的高程变化率,再合成最大坡降方向,最后换算成坡度角。
公式写出来是这个样子:
- 东西方向变化率(dz/dx) ≈ ((c + 2f + i) − (a + 2d + g)) / (8 × cellsize)
- 南北方向变化率(dz/dy) ≈ ((g + 2h + i) − (a + 2b + c)) / (8 × cellsize)
- 坡度 = arctan(√((dz/dx)² + (dz/dy)²)) × 180 / π
其中a到i是3×3窗口内各像元的高程值,cellsize是DEM栅格分辨率。
说白了,坡度反映的是“这个像素点跟周围8个邻居相比,落差有多大”。所以DEM分辨率对结果影响非常大:30米分辨率下,一个像素点边长30米,坡度细节相对平滑;12.5米分辨率下,一些小的沟坎、边坡会被更细致地反映出来。做山地项目、灾害评估,最好选高分辨率;做城市尺度的大范围统计分析,30米足够。
2.2 DEM源数据怎么选:SRTM、ASTER GDEM还是ALOS
城市尺度项目里,最常用的DEM数据是以下三种:
| 数据源 | 分辨率 | 覆盖范围 | 优点 | 缺点 |
|---|---|---|---|---|
| SRTM DEM | 30m / 90m | 全球 | 开放获取、应用成熟、细节稳定 | 高山区部分区域有空洞 |
| ASTER GDEM | 30m | 全球 | 覆盖较全、更新相对好 | 某些区域噪点略多、局部有异常 |
| ALOS AW3D30 | 30m / 12.5m | 全球 | 精度高、阴影峡谷地区表现好 | 原始数据下载流程相对复杂 |
我自己做大量城市批量处理时,优先用SRTM 30米。原因很简单:开源、易获取、算法兼容性好,大多数二线以上城市的城区和近郊都有较干净的DEM覆盖。对于重点山区城市,或者要分析城区起伏剧烈区域时,可以单独用ALOS 12.5米重新计算一份,两者结果做横向对照。
这里有一个容易被忽视的细节:不同DEM源算出来的坡度分布是有差异的。各位拿到的这套数据如果标注了数据源,请务必在文档里保留来源信息。后续写论文、出报告时,审稿人或评审专家大概率会问一句“用的什么DEM、什么分辨率”,回答不上来就很尴尬。
3. 实操全流程:从DEM到矢量数据再到Excel
既然做了371个城市的批量生产,背后的流程必须清晰、可复用。下面这套步骤是经过多轮优化后的版本,你在本地只处理一个城市也能照搬。
3.1 前期准备和软件选择
工具方面,我推荐ArcGIS Pro或者QGIS。ArcGIS Desktop 10.x也能跑,但处理大范围批量数据时效略低;QGIS开源免费,功能不输商业软件,尤其适合预算有限的个人和小团队。
参数建议:
- 分析坐标系:统一使用CGCS2000或WGS84地理坐标系,面积统计时再投影到Albers等积投影,避免度数坐标导致面积失真。
- 栅格分辨率:30米。
- 坡度单位:度(degree)。
- 输出格式:矢量用Shapefile或GeoPackage,Excel用xlsx。
3.2 核心步骤:坡度提取、栅格转面、属性导出
我以ArcGIS Pro的操作界面为例,流程分成以下五步。
第一步,填充洼地(可选但推荐)。原始DEM里会有一些由于采样误差造成的伪洼地,直接算坡度容易在一个小坑里出现异常值。填洼工具用起来很简单,但要注意:如果是大江大河真实地形造成的凹陷,填洼后会把真实地形抹平。稳妥做法是先看一眼研究区整体地形,再决定是否填洼。城市建成区一般填洼影响不大。
第二步,坡度工具提取。在Spatial Analyst工具箱里选择“坡度”工具,输入DEM,设置输出单位为度,Z因子保持1.0。Z因子只在水平方向单位与垂直方向单位不一致时才需要修改,比如经纬度坐标系下就要根据纬度换算比例因子,投影坐标系下一般不需要动它。
第三步,重分类坡度等级。这个看项目需求。常见分法是平坡(0-5°)、缓坡(5-15°)、中坡(15-25°)、陡坡(25-35°)、急陡坡(>35°)。在栅格计算器里或者用重分类工具,分别赋值为1、2、3、4、5。分好类后栅格数据会大幅简化,为后续转矢量和统计做准备。
第四步,栅格转面。使用“栅格转面”工具,输入重分类后的栅格,勾选“简化面”选项。这里会得到一个矢量面图层,每个面要素的“网格代码”字段就对应坡度等级。需要注意:不勾简化时,面要素数量极其庞大,一个中等城市可能跑出几十万个碎面,后续导出Excel会很卡。简化后数量能减少大半,但也别期待它像手工数字化那么精确——这个尺度下追求边界完美不现实,重要的是面积统计和空间分布趋势。
第五步,面积计算加属性导出。在矢量面的属性表里,新增一个Area字段,用几何计算工具计算每个面的面积。然后右键属性表,选择Export,导出为dbf或xlsx文件。dbf文件在Excel里直接打开有时会乱码,我一般会在QGIS或Python里转成真正的xlsx,字段用中文也不怕出问题。
3.3 批量生产371个城市的脚本化思路
处理一个城市走一遍界面没问题,但371个城市靠手动点工具,手都会点废掉。现实做法是用Python借助ArcPy或者GDAL写脚本批量跑。
核心思路就三步循环:
- 遍历行政区划矢量文件中的每个城市要素;
- 用城市边界裁剪分幅DEM,再执行坡度、重分类、栅格转面;
- 输出矢量图层和Excel统计表,并汇总到统一文件夹。
脚本里注意设置环境的缓冲区范围,比如Extent设为城市边界外扩100米,避免裁剪边界处出现无值区域影响边缘像元的坡度计算。这个细节看起来小,但直接影响边界区域的数据质量,尤其是沿海城市或沿江城市,边界位置经常有一圈空白值。
4. Excel端的整理与应用技巧
Excel数据虽然只是矢量属性表的“降维版”,但很多人收到后在Excel里操作时依然会碰壁。我结合这些年被问得最多的问题,专门讲几个实操点。
4.1 用数据透视表快速完成坡度分级统计
拿到Excel数据的第一个高频需求:统计每个城市各坡度等级的面积和占比。
最快捷的办法是用数据透视表。把“城市名称”拖到行,把“坡度等级”拖到列,把“面积”拖到值区域,汇总方式选“求和”,一分钟就能得到一张“城市×等级”的交叉统计表。
如果还想算占比,可以在透视表外面加一个公式,也可以直接建立计算字段。个人建议不要在透视表里改太多,而是把透视结果复制成值,再到旁边用SUMIFS函数计算各等级占比。理由是透视表一旦刷新,手动加的公式容易错位,得不偿失。
这里结合一个常见需求说一句:如果表格里面积字段是文本格式(比如从某系统里导出时带了千分位逗号),SUMIFS会算不出来。这时候需要先把列格式改成“常规”,然后用“分列”功能或者用选择性粘贴里的“加零”方式把文本转数值。
4.2 Excel数据常见的复制粘贴和批量处理坑
做数据整理的人大概都遇到过类似场景:从GIS属性表复制几十行数据准备粘到Excel里,结果Excel要么没反应、要么粘贴出来全是合并成一格。
我总结下来,原因多半出在三个地方:
- 剪贴板被其他程序占用,特别是开了浏览器或网页版Excel;
- 原数据里包含特殊字符,如换行符、制表符,Excel会理解成多行多列,看着就像乱掉;
- Excel文件本身过大,程序卡顿导致粘贴无响应。
比较稳的解决办法是:先复制到记事本里“过一次水”,再从记事本复制到Excel。这样能过滤掉大部分不可见字符,粘贴成功率极高。如果还是不响应,就把Excel进程重启一遍,或者干脆用Python的openpyxl写个几行代码读取CSV再写进xlsx,十几万行数据几十秒就搞定。
4.3 大数据量下Excel的处理思路
371个城市的坡度矢量如果全要素导出,面数量可能是几百万行,普通Excel大概率扛不住。所以我在生成Excel数据时做了一层预聚合:只输出每个行政区的坡度分级面积、平均坡度、最大最小坡度这些统计指标,而不是把所有碎面逐条列出来。如果确实需要明细,再提供按重点城市拆分后的分城文件。
这个思路其实也适合你自己做数据处理时参考:能用统计解决的问题,不要强行塞明细。Excel再大也有瓶颈,但空间数据再大也照样能分析。两个工具各干各擅长的活,才是正确姿势。
5. 这套数据能拿来干什么:五大应用场景拆解
很多人拿到数据后的第一反应是“哦,坡度知道了”,但下一步就不清楚了。我举几个真实场景,帮大家把数据和业务场景连接起来。
5.1 城市规划中的建设用地适宜性评价
做城市总体规划或者控规前期研究时,坡度是最基础的自然限制因子之一。规范里一般建议建设用地坡度不宜过大,超过25%的坡地(约14度)开发成本会急剧上升。实际操作中,规划团队会把坡度重分类成“适宜建设”“限制建设”“禁止建设”,再叠加生态红线、基本农田、地质灾害易发区等图层,综合做多因子评价。
这套数据可以直接提供各城市的坡度等级面层,叠加之后能快速算出每个城市“适建区面积占比”。我见过一个做某三线城市的团队,用这类数据十分钟就筛出了几个适合做新城拓展的低丘缓坡区域,而在过去他们可能要现场踏勘加等高线人工判读好几天。
5.2 交通与市政选线
道路选线、管线走廊设计都离不开坡度。公路纵坡过大影响行车安全,排水管线坡度不足会造成污水沉积。虽然具体施工图设计阶段必须用高精度测量数据,但在项目可研和方案比选阶段,用全国统一的坡度数据做宏观分析,已经足够筛掉大批明显不可行的走廊带。
这个阶段的关键是把坡度面和线路缓冲区做叠加统计,算各方案中陡坡段的长度占比。如果你们手里还有全国乡镇级矢量数据或者村级边界数据,可以进一步把坡度统计表落到乡镇甚至村一级,分析结果会更有落地感。
5.3 农业与林业适宜性分析
坡度影响农机作业效率、水土流失风险和果园茶园建园成本。农业规划时,常用坡度数据判断哪些区域适合大规模机械化耕作,哪些区域更适合发展林果经济。例如某地计划推广高标准农田,可以先以坡度小于6度为主要筛选条件,再叠加土壤数据、灌区范围,形成候选地块清单。
5.4 地产开发与场地竖向设计
地产项目前期拿地测算时,地块坡度直接关系到土方工程量、边坡支护成本和地下室结构方案。两个看起来同样大小的地块,一个坡度3度、一个坡度8度,开发成本差距可能是千万级别的。这个时候,把城市尺度的坡度数据叠加在地块红线范围上,能很快得到地块内部的坡度分布,为初步投资测算提供依据。
5.5 气象与灾害风险区划
坡度因子在地质灾害危险性评估里的重要性不用多说,滑坡、泥石流的发生与坡度有很强相关性。气象部门做暴雨洪涝风险区划时也经常用坡度作为地表产汇流参数之一。这些应用对数据质量要求较高,建议使用高分辨率DEM生成的坡度成果,且最好用多个相邻像元做窗口滤波,消除单点噪声。
6. 踩坑记录与排查技巧实录
做这种全国性批量数据,不可能一点问题不遇到。我把几个最有代表性的坑写出来,帮大家省点时间。
6.1 常见问题速查表
| 问题表现 | 可能原因 | 解决办法 |
|---|---|---|
| 某个城市坡度数据大面积空白 | DEM原数据在边界存在无值区域 | 裁剪DEM时先外扩缓冲,再裁剪回原边界 |
| 面积统计结果与官方国土面积偏差大 | 使用了度数坐标系计算面积 | 投影到等积投影后再算面积 |
| Excel打开属性表乱码 | Shapefile的dbf编码问题 | 用UTF-8编码重新导出,或通过CSV中转 |
| 个别城市坡度值普遍偏高 | DEM原数据存在条带噪声 | 更换其他DEM源,或使用低通滤波处理 |
| 栅格转面后碎面太多 | 原栅格重分类类别多且像元碎 | 先进行“众数滤波”或“简化”处理再转面 |
| ArcGIS处理时内存溢出 | 数据范围过大 | 分城市逐个处理,并设置适当的内存和环境参数 |
6.2 一个典型修复案例:某沿江城市出现大片异常陡坡
我第一次批量处理到某沿江城市时,发现坡度分级结果里沿江区域出现了大片的“陡坡”,这明显不合理——江边应该是平缓滩地才对。
排查过程如下:先在ArcGIS里打开原始DEM,发现沿江部分的高程值出现了阶梯状突变,这是典型的SRTM数据在陡峭峡谷和宽阔水域边界处的伪值。简单处理办法是对像素值进行条件判断,把江面高程异常清除;更稳妥的做法是结合水体数据,把水域范围内的DEM像元做掩膜剔除,再对周边像元做插值填充。
这个案例提醒我:任何公开DEM都不是完美的,河流边界、地形阴影区是最容易出问题的位置。拿到成品数据后,最好抽几个典型城市看一眼空间分布,而不要只依赖Excel表格里的数值。
6.3 几个独家的实操心得
最后分享几个不太会写在正式文档里的经验。
第一,栅格转矢量之后,如果只是做面积占比统计,其实没必要转。直接在栅格属性表里统计像元个数,乘以单像元面积,得出的面积结果和转矢量后统计相差不到千分之一,但速度会快上几个数量级。所以,只有在需要做空间叠加、出专题图时才有必要转矢量。
第二,导出Excel前,尽量把面积字段单位统一成“公顷”或“平方千米”。不要说用平方米也行——一旦数据到了汇报场景,单位换算错误是我见过最多的低级失误。
第三,收到这类共享数据后,记得自己抽查3到5个城市,用在线地形图或者高程服务做一个目视比对。不用太复杂,把矢量坡度面叠加到卫星影像上,看看那些标为陡坡的区域是不是真的有山地、丘陵的形态。这一步能帮你提前发现数据中可能存在的系统性偏差,比拿到数据就闷头做分析稳妥得多。
我自己在处理这批371个城市的过程中,最大的体会是:数据共享的价值不仅在于数据本身,更在于让每一个拿到它的人都能少走弯路。哪怕省下的只是“找DEM、裁剪、算坡度”这一个小时的重复劳动,对赶项目的人来说也是实打实的帮助。后续如果有人需要,我打算再把乡镇级、村界级的坡度切片也整理出来,毕竟行政区划颗粒度越小,对基层项目的参考价值就越大。