搞GIS和城市规划的朋友应该都有过这种经历项目做到一半领导或者甲方突然要一张坡度分级图或者要一份各城市的平均坡度数据用于横向对比。这个时候最头疼的不是分析本身而是去找一份口径统一、范围完整、拿来就能用的数据。市面上单城市的DEM和坡度数据不难找但全国几百个城市放在一起、坐标系和字段都帮你处理好的确实不多。我这次分享的就是这么一份现成的资源中国371个城市的坡度矢量数据以及配套的Excel统计表格。矢量数据可以在ArcGIS、QGIS里直接加载做裁剪、重分类、出图都没问题Excel表格则适合不熟悉GIS软件、只想查某个城市坡度数值、或者要做统计分析的场景。两套文件配合着用既能满足专业制图和空间分析的需求也能兼顾快速查询和表格处理的效率。这篇博文我会详细拆解这批数据的格式、字段含义、适用场景和实际用法还会附上一些我自己处理这类数据时踩过的坑和总结下来的经验。1. 项目核心思路拆解为什么这份数据值得收藏1.1 坡度数据在城市研究里的分量坡度这个指标在城市规划、建筑工程、交通路线选线、农业区划、地质灾害评估这些领域属于最基础的底图数据之一。一个城市的建设用地方向、道路走向、管道铺设方案甚至小区景观设计里的排水组织都要先看坡度。坡度过大的区域开发成本会成倍上升也容易引发水土流失和滑坡风险所以前期用坡度数据做限制性分析是极其常规的操作。但问题在于很多人拿到的坡度数据都是栅格格式的比如从SRTM或者ASTER GDEM这种公开DEM数据里提取出来的。栅格数据在制图时确实直观但要做分区统计、按城市边界汇总、和Excel表格里的经济人口数据做关联分析就麻烦一些。矢量化的坡度数据或者说坡度分级后的矢量面数据在这一步就体现出优势了——每个面都有独立的属性记录可以直接做空间连接和属性计算。1.2 “矢量Excel”双格式的设计逻辑很多人会问既然矢量数据能直接在GIS里用为什么还要单独提供一份Excel表格这个问题的答案我在实际项目中体会特别深。一方面不是所有需要用到坡度数据的人都会用GIS软件。规划局的朋友、做研究报告的人、搞投拓分析的人很多时候只是想快速知道宁波市区的平均坡度是多少、深圳市域内坡度大于25度的面积占比有多大。这种需求用Excel打开筛选一下就能看到完全不需要打开ArcGIS等重型软件。另一方面Excel数据可以方便地和统计年鉴数据、人口普查数据做匹配分析比如分析城市平均坡度与建设用地扩张速度的关系这种时候表格数据反而比矢量数据更顺手。所以这份资源的思路很清晰矢量数据服务空间分析场景Excel数据服务统计查询场景。两套数据描述同一个对象但各有侧重。矢量数据给你的是空间位置和几何边界Excel表格给你的是结构化属性两者通过城市名称或者行政区划代码可以一一对应起来这就在实际操作上留了充足的灵活性。1.3 371个城市的覆盖范围中国目前地级行政区划大概是333个左右的地级市、30个左右的自治州和地区加上直辖市和部分省直辖县级市编制上能够对上371个这个数量。我在使用中大致核对了下这份数据很大程度上是按全国的地级行政区划和部分重要的县级市来覆盖的主要城区和市域范围都包含了。对于需要做全国尺度横向对比的研究来说这个覆盖度基本是够用的。2. 数据结构详解字段含义与格式说明2.1 矢量数据的基本格式与字段先讲矢量部分。拿到手之后建议直接用QGIS或者ArcGIS打开数据格式如果是Shapefile会包含.shp、.dbf、.shx、.prj等一系列文件这几个文件必须放在同一个文件夹里而且不要改文件名否则GIS软件会提示缺少文件打不开。打开之后属性表里你会看到几个核心字段城市名称中文城市名比如“北京市”“杭州市”。行政区划码这是最关键的关联字段12位的行政区划代码前四位是地级市编码后六位可以对应到区县。用这个字段去和Excel表做关联效率最高不怕重名。坡度等级有些分级的矢量数据会直接给一个字段标记是“平缓坡”“中等坡”“陡坡”等。面积每个面要素对应的面积单位通常是平方米或者公顷。平均坡度这个面单元内的平均坡度值单位是度。如果你打开之后发现坐标系是WGS84或者CGCS2000地理坐标系那说明数据源没有做投影转换。做面积计算或者长度量测之前请务必先投影到Albers等积投影或UTM投影不然算出来的面积会差得离谱。这是一个特别容易踩的坑我在第四节里专门讲。2.2 Excel表格的统计口径与含义Excel表格这份数据相对简洁通常包含以下字段字段名含义说明使用提示城市名称371个城市的全称与矢量数据的名称字段对应但偶尔存在新旧名称更替建议用代码关联行政区划码国家标准的行政区划代码唯一标识做匹配时就是这个字段最靠谱平均坡度城市范围内的平均坡度单位度值越大说明地形起伏越明显最大坡度城市范围内的最大坡度值主要用于判断是否存在极陡地形最小坡度城市范围内的最小坡度值通常接近0但可以排除水域和异常值干扰标准差坡度的统计离散程度数值大说明高差悬殊、地形破碎度高很多朋友拿到Excel之后直接拿平均坡度排序查城市这个习惯其实没什么问题但要注意一点这个平均坡度是全行政区范围内参与计算的平均值不代表建成区的平均坡度。市域范围内如果有大面积的山地和林地平均值会被拉得很高比如丽水、张家界这些城市平均坡度数值会明显高于实际人口集中的城区。所以如果你要做的是城市建设适宜性评价最好用矢量数据和建成区边界做空间裁剪后再统计。2.3 栅格转矢量的生产流程参考从技术角度看把坡度栅格数据矢量化并统计成Excel表格大致需要这么几个步骤获取DEM数据。常用的免费数据源有SRTM 30米分辨率、ASTER GDEM 30米分辨率还有ALOS 12.5米分辨率。分辨率越高地形细节保留越好但数据量也越大处理全国范围的数据时对电脑配置要求比较高。在GIS软件中使用“坡度”工具从DEM提取坡度栅格输出单位为度。对坡度栅格做重分类。如果任务需要做分级统计就按照一定的阈值比如0-5度、5-8度、8-15度、15-25度、25度以上分成几级。把重分类后的栅格数据转为矢量面数据然后用“消除”工具合并碎面。把矢量面和城市行政区划边界做相交分析再用“分区统计”功能算出各个城市范围内的平均坡度、最大坡度、最小值等统计值。最后导出属性表到Excel整理字段。这套流程是通用的你有兴趣的话用网上公开的DEM数据也完全可以自己复现一份。不过受限于原始数据和坐标参数选择的不同复现出来的数值可能会和这份分享数据存在一定的差异这个属于正常情况。3. 实操指南从打开数据到跑通分析3.1 用QGIS打开矢量数据并完成基础设置我个人的习惯是QGIS作为主力查看工具因为它免费、跨平台而且启动速度比ArcGIS快不少。拿到.shp文件后操作流程如下在图层管理器中点击“数据源管理器”选择“矢量”找到存放.shp文件的文件夹选中文件加载。加载后如果显示的范围不对或者图层位置偏了优先检查.prj文件是否存在。如果坐标参考显示“未知”说明.prj丢了需要手动给图层指定坐标系。右键图层查看属性表确认字段名和内容是否符合预期。在“图层属性-符号化”里选择“已分类”用“坡度等级”字段做渲染颜色可以选一套从绿到红的渐变色系绿色代表平缓区域红色代表高坡度区域。这样出图的时候视觉冲击力强方便汇报演示。如果你用的是ArcGIS流程类似ArcToolbox里找到“添加数据”加载Shapefile然后通过图层属性的符号系统做分类渲染。关键是坐标系的问题两边是一样的。3.2 关于投影坐标系的选择这里要单独强调一下。打开原始数据查看没问题但一旦涉及面积计算比如统计某个坡级面积占城市总面积的比例就一定要把数据投影到等积投影下再操作。全国尺度的分析我推荐CGCS2000的Albers等积投影也就是我们国家基本比例尺地形图使用的投影参数。标准纬线通常设为25°N和47°N中央经线105°E这个组合能较好控制全国范围内的面积变形。操作路径在QGIS里是“处理工具箱”-“矢量通用工具”-“重投影图层”选择目标坐标系为EPSG:4528或者其他适合你所在区域的分带投影。重投影之后再用“字段计算器”新建一个面积字段公式设为$area计算出来的面积单位是平方米需要除以10000转成公顷或者除以1000000转成平方千米。3.3 Excel数据的清洗与使用技巧Excel表格这部分数据拿到手后强烈建议做以下几件事第一件事把“城市名称”列和“行政区划码”列复制一份到新工作表做备份。下一步合并其他数据表的时候以行政区划码为关联键不要用城市名称。原因很简单名称可能重复代码不会。第二件事检查数字列的格式。如果单元格左上角出现绿色的小三角这说明该列被Excel识别为了文本格式需要全选该列用“分列”功能或者“转换为数字”功能处理一下否则后面用SUMIFS、AVERAGEIFS这些函数统计的时候会漏算。第三件事用条件格式做快速可视化。选中平均坡度列在“开始-条件格式-色阶”里选一套颜色渐变方案。这样你不需要做任何计算公式就能一眼看出哪些城市坡度高、哪些低。第四件事做数据验证避免后续误操作。在“数据-数据验证”里设置允许值为小数范围限定在0到90之间防止有人不小心录入超过合理范围的值。3.4 城市代码匹配的实战VLOOKUP和XLOOKUP在Excel里做城市代码匹配关联时很多朋友还在用VLOOKUP。VLOOKUP确实能用但它有两个问题第一个是必须把查找列放在数据区域的第一列容易受表格结构限制第二个是匹配过程中如果查找列有重复值它默认只能返回第一条记录还不报错。我这两年更推荐的是XLOOKUP函数。比如你要把“人口数据表”里的常住人口匹配到这份坡度表里公式这样写XLOOKUP(A2, 人口表[行政区划码], 人口表[常住人口], 未找到)第一个参数是当前表中要查找的代码第二个参数是人口表里的代码列第三个是人口表的数值列第四个是找不到时返回的提示文本。XLOOKUP的好处是不用管列的先后顺序只要指定了查找列和返回列就行数据更新时公式也不容易出问题。如果你的Excel版本比较老没有XLOOKUP那就用VLOOKUP的替代写法VLOOKUP(A2, 人口表!$A:$C, 3, 0)这里$A:$C是人口表的查找范围3表示返回第三列0表示精确匹配。注意我这里回了0而不是FALSE两种写法效果一样但0更简洁也不会因为大小写问题报错。3.5 多条件统计的核心SUMIFS与FILTER组合坡度数据和降雨、人口、GDP等数据放在一起之后会需要做多条件统计。比如你想统计“浙江省所有城市中平均坡度大于15度的城市数量”SUMPRODUCT((省份浙江)*(平均坡度15)*1)SUMPRODUCT这个函数在处理多条件计数时非常好用不用按CtrlShiftEnter直接回车就出结果。如果你想提取符合条件的城市名单可以让Excel 365里使用FILTER函数FILTER(城市名称, (省份浙江)*(平均坡度15), 无匹配)筛选结果会动态溢出到相邻单元格数据更新之后结果会自动变化非常方便。如果你只是想在原有的表上操作也可以用“数据-筛选”功能加条件但数据量大的时候还是函数一劳永逸。3.6 渗透式应用数据透视表快速汇总还有一个工具我必须得推荐就是数据透视表。对于这份坡度Excel数据你可以把“坡度等级”拖到行区域把“面积”拖到值区域设置值字段为“求和”10秒钟就能得到不同坡度的面积占比。操作路径是全选数据源点击“插入-数据透视表”在字段列表中勾选相应字段拖拽到对应区域即可。透视表的最大好处是交互性强领导问“把坡度大于25度的区域总面积拿出来”你直接在透视表里点一下筛选结果就出来了。4. 典型应用场景与实战案例4.1 城乡规划选址中的坡度限制分析在规划方案比选阶段坡度是排第一位的刚性限制条件。一般来说坡度小于5度的区域适合大规模开发建设5到15度的区域开发成本上升用于居住和公共建筑需要做台地处理大于15度原则上不安排集中建设大于25度基本属于禁止建设区。拿到这份坡度矢量数据后你可以按这个分级标准做重分类然后和城市现状建设用地叠加看看现状建成区占用了多少不宜建设土地。这个结果做出来的图在规划评审会上特别有说服力因为它是纯客观数据计算出来的不是拍脑袋。具体操作上用QGIS打开坡度矢量数据使用“按表达式选择”输入坡度等级 高陡坡选中后右键导出选中要素为新的图层。再把导出的图层和你的方案地块做叠加分析用“相交”工具属性表里就能看到每个方案地块里陡坡的面积占比。这个占比如果超过了一定比例直接说明这块地不适合开发或者需要调整用地布局。4.2 地质灾害风险初判地质灾害风险排查虽然是专业地质部门的活但在前期做潜在地质灾害易发性分析时坡度是核心指标之一。根据经验滑坡多发区的坡度一般在15到45度之间岩质边坡和土质边坡的失稳坡度阈值还有差异。把坡度数据、地层岩性数据和降雨量数据做一个简单的加权叠加就能得到一张初步的易发性分区图。这份数据的价值在这里是底线数据的作用——它不是一个完整的灾害评价结果但如果你连坡度底图都没有后面的工作寸步难行。有了城市尺度的坡度矢量数据至少可以快速圈出哪些区县需要重点排查、哪些区县整体比较安全。实操中我一般还会叠加断层带缓冲区数据和历史灾害点数据。这三个图层叠加之后高风险区域基本能圈出个八九不离十。做这类分析时QGIS里的“栅格计算器”或者“字段计算器”都够用不需要额外写代码。4.3 科研教学中的可视化与统计如果你是在校学生写毕业论文或者做大创项目这份数据也很实用。比如研究“城市地形复杂度对城市热岛效应的影响”坡度是地形复杂度的关键指标你可以用Excel先做城市平均坡度和地表温度的散点图观察相关性再用矢量数据做空间可视化把坡度分布和热岛强度分布图并排展示论文的论证逻辑就非常清晰了。还有一个特别常用的场景是制作教学地图。用QGIS把坡度数据加载进来叠加省界线、河流、城市驻地等基础要素规范出图后直接作为课程实习的底图比让学生自己从DEM开始提取省事太多。设置时不要忘了在“打印布局”里添加图例、比例尺和指北针出图效果会更专业。4.4 Excel端的分析实践Excel端配合这份数据做分析也有很多玩法。举例来说你可以把所有城市按照平均坡度从高到低排序取前二十名发现基本都是山地丘陵为主的城市再取后二十名基本都是平原城市。用“方差”函数检查一下标准差列还能看出一些城市虽然平均坡度不高但区县之间差异极大这类城市地形上的“破碎度”高规划布局时要特别注意基础设施造价的分化问题。再有就是用Excel做坡度“城市群”对比。把长三角、珠三角、成渝城市群的城市筛选出来分别统计平均坡度中位数。用“MEDIAN”函数而不是“AVERAGE”因为中位数不容易被极端值带偏。这个统计结果在区域发展战略分析里用得上尤其是在对比不同城市群的建设用地潜力时。5. 常见问题与排查技巧实录5.1 Excel里复制粘贴失效的怪问题这个标题下我想专门聊一个特别普遍但很多人搞不懂的问题——Excel表格无法复制粘贴。分享的Excel数据你下载下来想复制到别的汇总表里结果复制之后粘贴没反应或者只能粘贴一次第二次就失效气到想砸电脑。我排查过的原因大概就这么几种第一种是Excel卡死的假象。有时候数据量太大Excel在后台计算界面看起来没反应。解决办法是按一下Esc键取消当前输入状态再试复制粘贴多半能恢复正常。第二种是剪贴板被占用。打开了一些截图工具、翻译软件或者远程控制软件它们会监控剪贴板导致Excel的复制操作被系统拦掉。退出这些软件的后台进程问题就消除了。第三种是单元格处于编辑状态。你在一个单元格里双击进入编辑模式又没按回车退出这个时候复制粘贴是完全失灵的菜单是灰的。原因很简单……Excel认为你还在编辑没空理别的操作。按回车或者Esc退出编辑就能解决。第四种是加载项干扰。如果你安装了第三方Excel插件尤其是某些财务软件或数据采集工具的插件偶尔会导致复制粘贴失灵。在“开发工具-COM加载项”里把可疑的加载项取消勾选重启Excel试试。第五种是Excel本身卡了或者文件损坏。实在不行就另存为新文件有时候一个工作簿内部结构乱了新建文件重新粘贴就好了。5.2 从Excel导入数据库时的格式坑很多做项目的人不止于在Excel里看数据还想把371个城市的数据导入PostgreSQL或者MySQL做更复杂的SQL查询。这个场景下最容易碰到的问题是Excel里的文本型数字在导入时变成空值或者科学计数法。解决办法其实很朴素在导出为CSV之前先选中行政区划码列分列转换成文本格式然后用“另存为-CSV UTF-8”导出。文本文件里再打开检查一下确认没有变成4.1E11这种格式再执行数据库导入。如果你用的是Navicat这类工具导入不要直接选Excel文件而是选CSV文件匹配的时候指定目标字段类型为VARCHAR这样能避免很多潜在的坑。5.3 矢量数据的投影与属性乱码ArcGIS和QGIS对Shapefile的属性编码兼容性不太一样。有时候在ArcGIS里打开正常但在QGIS里打开属性表中文全部乱码这个是因为Shapefile的.dbf文件默认编码不是UTF-8。解决办法是选择正确的编码重新加载在QGIS里打开数据源时在“编码”选项里选UTF-8或GBK。如果你不想每次手动选也可以使用QGIS中的“处理工具箱-修复Shapefile编码”工具批量处理。投影上的问题前文提到过但这里还是要再一次强调所有计算面积、距离的操作都必须在投影坐标系下进行。如果你在原地理坐标系下直接算得到的结果不是真实的地表面积QGIS会警告ArcGIS甚至直接在“计算几何”选项里把平方米改成“度经纬度”很多初学者没注意就用了错误的结果。5.4 数据使用边界与合理预期最后还有一点必须说清楚。这份371个城市的数据分辨率在30米或者90米量级做城市级别的宏观分析是没问题的但如果你的项目需要精确到某个村、某个地块的坡度分析这份数据的精度是不够的——这时候你该去下载原始DEM针对项目范围重新计算坡度。另外数据统计的是全行政区范围的平均坡度等指标如果想看某个具体区县的数据可以用矢量数据和区县级边界做空间连接操作提取。不要拿Excel里的全市平均值去代表某一个区县那在空间逻辑上站不住脚。我自己实际使用的时候一般会把Excel表当索引表发现感兴趣的数值异常时回头到GIS软件里去查具体的分布位置两种格式结合使用效率最高。6. 数据深度应用与扩展方向6.1 从Excel走向SQL查询的进阶玩法如果你手头的Excel数据量越攒越多比如把371个城市的坡度、降水量、GDP、人口、建设用地面积全都放进去这个时候用Excel的筛选和函数已经有些吃力了。我的建议是把这几个CSV导入SQLite或者PostgreSQL把SQL语句当成数据分析的利器。比如查“平均坡度大于15度、且人均GDP低于全国平均水平的城市”一行SQL就能出结果SELECT 城市名称, 平均坡度, 人均GDP FROM 坡度数据 JOIN 经济数据 USING(行政区划码) WHERE 平均坡度 15 AND 人均GDP 8 ORDER BY 平均坡度 DESC;这种多表关联的查询在Excel里要去VLOOKUP拼表在数据库里就是一条SELECT的事。而且数据库查完之后可以直接导出CSV再回到Excel里做图表两条腿走路效率翻倍。6.2 与全国乡镇级、村界矢量数据配合的进阶场景热词里出现了“全国乡镇级矢量数据”和“全国村界矢量数据”的搜索需求说明很多人在城市尺度的坡度数据之外还想进一步细化到乡镇和村尺度。如果你有乡镇级的行政边界矢量数据完全可以和这份坡度数据做空间叠加计算出每个乡镇范围内的平均坡度和陡坡占比再融合乡镇人口数据做出“高坡度高人口密度”的风险预警地图这个对于山区防灾和基层规划非常有用。操作上依然是QGIS里的“相交”工具这一步需要注意数据量提升之后电脑内存占用会明显增加最好用64位系统并且有16G以上内存。如果你的电脑配置跟不上可以考虑先用QGIS的“Select by location”恰当地缩减范围再处理。6.3 图表呈现用Excel做一张坡度城市排行榜数据拿在手里不做出几张直观的图表就太可惜了。我个人的习惯是做一个“城市坡度排行榜”的横向条形图在Excel里筛选出平均坡度最大的20个城市。选择“插入-条形图-簇状条形图”。右键坐标轴选择“逆序类别”让坡度最大的城市排在最上面效果更符合阅读习惯。添加数据标签可以直接看到具体数值。把标题改成“中国主要城市平均坡度TOP20”。这张图发到工作群里或者放进季度报告里一下子就能抓住眼球比放一张大表格有效得多。同理“平均坡度最小的20个城市”也做一张图两张图一对比平原城市和山地城市的差异一目了然。这种可视化工作人人都能做用这份Excel数据做起来尤其顺手根本用不到GIS。7. 最后的操作心得与建议分享数据不是目的把数据用起来才是重点。我拿到这份371个城市的坡度数据之后做的第一件事就是核对数据的统计口径和坐标系确认无误后导入本地PostGIS空间数据库和其他的经济、人口、土地利用数据放在一起做联合分析。坦白说这种全国尺度、城市粒度、统一字段结构的数据在平时可遇不可求——很多网站上可以零散地下载单城市数据但打包整理好并且附带Excel表格的少之又少这样的资源就需要格外珍惜。实际使用中我的体会是这份数据最大的优势并不是精度有多高而是为多城市横向对比提供了一个完全一致的计算口径。坡度数据一旦口径不一致不同城市之间的比较就没有意义了所以提醒你在自己复现数据流程时尽量用同一套DEM源、同一套投影参数、同一套分级标准做到结果的横向可比。最后再分享一个操作小技巧拿到Excel数据后不要只用一张工作表堆着全部内容可以顺手做成几个Sheet——“原始数据”“筛选统计”“图表数据”。这样以后你和同事共享文件的时候大家都不会迷路。数据工作做得好不好有时候不拼技术拼的就是这种对细节的把控。希望这份数据的分享能让你的工作和研究少走一些弯路。
