☰
上海市12.5米DEM数字高程模型与shp边界数据处理全攻略
2026/10/14 6:08:58 网站建设 项目流程

简介:本资源为面向GIS初学者与城市规划、环境分析从业者的高精度地理空间数据包,提供上海市全域12.5米分辨率DEM数字高程模型及配套行政边界矢量数据,支撑地形分析、坡度坡向计算、淹没模拟、三维可视化等典型GIS应用。压缩包共15个文件(48.05MB),包含核心.tif栅格高程影像及其附属.aux.xml、.tfw、.ovr、.prj等元数据与金字塔文件,确保ArcGIS/QGIS中可直接加载并正确投影;另含.shp/.shx/.dbf格式的上海市行政边界矢量数据,具备完整属性结构与WGS84坐标定义,便于空间裁剪与区域统计。已有803人学习下载,数据组织规范、开箱即用——无需额外配准或格式转换,可立即用于教学演示、课程设计或科研建模,尤其适合需结合行政区划开展地表过程分析的实践场景。 拿到这套上海市DEM数字高程12.5m数据的时候,我第一反应是终于不用再拿30米的分辨率硬扛城区分析了。这套数据配套了上海市范围的shp边界文件,对于做测绘、规划、城市研究或者GIS开发的人来说,属于那种"看似不起眼、实际能省一天工作量"的基础数据。简单说,DEM数字高程模型记录的是地表每个像元的高程值,12.5m分辨率意味着每隔12.5米就有一个高程采样点,配合shp矢量边界可以直接裁剪、统计、做坡度坡向分析。这篇文章就把这套数据的来龙去脉、处理流程和实操中踩过的坑一次性讲清楚,适合需要用上海区域做地形分析的从业者、学生和科研人员参考。

1. 这套上海市12.5米DEM数据到底能用来干什么

1.1 12.5米分辨率的定位:比30米精细,比1米轻量

先说个结论:12.5米分辨率在城市尺度分析里是一个性价比极高的档位。

很多人第一次接触DEM都是从SRTM 30米或者ASTER 30米开始的,这类数据覆盖全球、免费开源,做个省级地形起伏分析绰绰有余。但一旦把镜头拉到上海这种高度城市化、地势又比较平坦的区域,30米分辨率就显得有点力不从心。上海平均海拔只有4米左右,中心城区大量的人工地形——高架路基、滨江防汛墙、填海造地、河道疏浚形成的微地貌,在30米格网下很容易被平均掉,看上去就是一块平坦到没有细节的色块。

反观1米或0.5米的LiDAR数据,精度确实感人,但数据量也感人。一套覆盖上海市全域的1米DEM,处理起来动辄几十个GB,普通笔记本跑个坡度分析能卡到怀疑人生。12.5米刚好卡在中间:既能识别出城市尺度的地形纹理——比如黄浦江两岸的岸线高差、外环线附近的地势起伏,又能保证文件大小和计算开销可控,普通配置的电脑完全带得动。

我做过的实际案例里,用12.5m数据做整个崇明岛的汇水分析、做临港片区的视域分析、做过青浦新城的地块坡度分级,结果都够用。它不会告诉你某栋楼的确切高度,但能告诉你这块地整体是南高北低还是中间低洼,这对选址分析、排水规划、土方量初步估算来说,已经足够了。

1.2 配套shp边界文件的真正价值

这套数据里真正让我觉得贴心的是附带了上海市范围的shp文件。如果是单买DEM数据,拿到手往往是一大块覆盖范围超出上海的栅格图(因为卫星影像的条带范围通常是固定的矩形),这时候你得自己找边界去裁剪。不然数据分析范围不准确,统计出来的高程均值、坡度分布都会带着江苏浙江的地形干扰。

shp是shapefile的简称,是GIS领域最通用的矢量数据格式。和普通文件不一样,一个完整的shp不是一个文件,而是一组文件的集合:.shp(几何信息)、.shx(索引)、.dbf(属性表)、.prj(坐标系信息)、.sbn/.sbx(空间索引)等。这套数据带的shp文件中,通常包含上海市的行政边界,可能还细分到各区县边界,具体要看打包时的层级。

拿到shp以后,能做的事就多了:按行政区划提取DEM统计值、把DEM裁成分区栅格分发给不同项目组、把高程极值区域叠加上地类数据做综合判断。如果没有这个shp,光靠自己手动在ArcGIS里画上海边界,熟悉的人也得折腾半天,不熟悉的可能画出来的边界跟实际行政区划差出几公里。

提示:收到shp文件后第一件事不是急着打开,而是检查有没有缺文件。只拷贝了.shp单个文件,其余配套文件全漏掉,这是最常见的"数据损坏"假象。

2. DEM数据从哪儿来:开源数据源梳理与选型

2.1 主流开源DEM数据一览

在聊12.5m数据之前,值得把市面上能免费拿到的DEM数据整体盘点一遍,这样你在不同场合就能快速判断"该用哪个"。我做了一张对照表方便收藏:

数据源分辨率覆盖范围发布方特点说明
SRTM 30m约30米全球北纬60°至南纬56°NASA / NGA2000年航天飞机雷达测绘,早年用得最多,内陆山区表现尚可
SRTM 90m约90米全球NASA / NGA老牌低精度,适合宏观区域,城市分析基本不考虑
ASTER GDEM 30m约30米全球METI / NASA覆盖比SRTM更完整,但局部存在空洞和异常值
ALOS PALSAR 12.5m约12.5米全球JAXA目前能和SRTM匹敌的高分辨率开源数据,本次主题的主角
Copernicus GLO-30约30米全球欧空局2020年前后发布,基于TanDEM-X任务,精度和现势性都好
NASADEM 30m约30米全球NASASRTM的再处理版本,修复了部分空洞和噪声

这里面要特别提一下Copernicus GLO-30,它虽然也是30米,但因为是较新的雷达任务生成的,整体质量比老SRTM高不少。如果你对12.5m数据没有特别需求,Copernicus GLO-30是省事的默认选择。而ALOS PALSAR 12.5m的出现,让开源DEM在城市尺度分析上往前迈了一大步。

2.2 为什么ALOS 12.5m是上海区域的最优平衡点

回到这套12.5m数据,它的原始出处大概率就是JAXA(日本宇宙航空研究开发机构)的ALOS PALSAR卫星数据。ALOS卫星搭载了L波段合成孔径雷达,L波段的一个优势是对地表植被有一定穿透能力,在地形测绘中能得到更接近真实地面的高程值。后续经过一系列干涉处理和地形校正,最终发布了全球12.5米分辨率的免费DEM产品。

这个数据放到上海来说,有点"量身定做"的意思。上海的地形特征是"整体平坦、局部有料"——全球定位看就是长江三角洲冲积平原的一部分,高差极小,但人工改造地形丰富。12.5m格网能识别出的最小地物大概有一个篮球场大小,能反映的道路路基、河流岸坡、园区堆土,正好是做城市规划分析需要关注的那些要素。

同时它又不会"信息过载"。如果拿1m LiDAR来做同样的分析,建筑物轮廓、树木冠层、车辆全都会混进高程数据里,反而不利于从宏观角度判断地块的自然地形走势。12.5m在相当程度上平滑掉了这些"微噪声",剩下的地形骨架刚好够用。

我个人的体会是,如果你在上海做的是区级或街道级规划、地块初步评价、海绵城市潜力分析、洪水淹没影响评估,直接用ALOS 12.5m就对了,没必要一上来非要搞LiDAR,成本和效率完全不划算。

2.3 DSM与DEM的区别:从"dsm生成dem"说开去

这里有个很多人容易忽略的技术细节:ALOS PALSAR 12.5m数据严格来说其实是DSM(数字表面模型),而不是真正的DEM(数字高程模型)。

两者区别在于"表面"二字。DEM记录的是裸地的高程,也就是把房子扒掉、把树砍掉之后的地面高度;DSM记录的则是地表所有物体的顶部高程,建筑屋顶、树冠都在里面。你在DSM上看陆家嘴,三件套那一片会隆起明显的高值。而在真实的DEM里,那个位置就只是黄浦江边一块平地。

雷达遥感获取的高程天然更接近DSM,因为雷达信号首先接触到的是树冠和屋顶。虽然L波段有一定穿透力,但城市密集区域的建筑物效应依旧存在。

所以问题来了:做分析和出图时,到底该用哪个?我的判断标准是——如果做的是坡度、坡向、水文分析、土方量估算这类依赖"地表真实形态"的工作,DSM带来的建筑高程污染会产生误差。比如在DSM里,一栋30米高的楼在坡度分析中会变成一道陡峭的"悬崖",导致该区域的坡度值严重失真。

这时候就需要做"DSM转DEM"的滤波处理。一种简单可操作的方法是在ArcGIS里用焦点统计(Focal Statistics)计算邻域最小值或中位数,然后用原始DSM减去地面趋势,把高出局部趋势的像元判定为地物点并压低。更专业的做法是用渐进形态学滤波或者点云分类,但那些需要专门的软件和参数调试,不适合快速预处理。

如果你手头只有这一个12.5m数据源,又必须做"裸地DEM"分析,建议至少跑一遍低通滤波或者焦点统计下的最小值滤波来削弱建筑物影响。如果只是做视域分析、城市景观分析这种本来就不排斥建筑物的场景,直接用原数据也没问题。

3. 拿到数据后的第一步:ArcGIS中打开shp的正确方式

3.1 ArcGIS打开shp的几种路径

打开shp文件这件事看起来简单,但每次都有人问,因为方法其实不止一种。

最直接的方式是直接拖拽:打开ArcMap或ArcGIS Pro,在Windows资源管理器里找到.shp文件,按住鼠标左键拖进地图窗口。ArcGIS会自动识别并加载进来,不需要做任何多余操作。这个方式简单、直观,适合日常快速查看。

第二种是通过"添加数据"按钮。在ArcMap的标准工具栏上有个黄色加号图标,点击后在弹出的对话框里导航到shp所在目录选中即可。ArcGIS Pro则在"地图"选项卡下的"添加数据"里,逻辑类似。

第三种是事先建立文件夹连接。在Catalog窗口里右键"文件夹连接",把shp所在的上级目录添加进去,以后浏览和管理就方便很多,尤其是在处理大量数据时。

无论用哪种方式,有一点必须强调:shp的存放路径最好全英文,文件夹名和文件名里不要带中文、空格和特殊符号。之前我处理一个项目时,数据放在"新建文件夹(2)"里,结果ArcGIS反复报错找不到数据源,改成纯英文路径后一切正常。ArcGIS对中文路径的支持一直不够友好,这是多年来绕不过去的坑。

3.2 坐标系检查与投影转换

打开shp后别急着开始分析,先花十秒钟确认坐标系。右键图层选择"属性"或"图层属性",在"源"选项卡里可以看到坐标系信息。如果是地理坐标系,常见的是WGS84或CGCS2000(EPSG:4326);如果是投影坐标系,上海经常会碰到Gauss-Kruger投影、CGCS2000 3 Degree GK CM 120E(也就是中央经线120度、三度分带),或者CGCS2000 / 3-degree Gauss-Kruger zone 38、39这样的配置。

为什么要关注坐标系?因为如果你的DEM是WGS84地理坐标系(单位是度),而shp边界是CGCS2000投影坐标系(单位是米),两者叠加时要么位置对不上,要么分析结果完全错乱。

一般情况下,处理流程是先把DEM和shp统一到同一个投影坐标系。对于上海区域,我通常选择把数据投影到CGCS2000 / 3-degree Gauss-Kruger CM 120E,因为120度经线正好穿过上海附近,投影变形很小,单位也是米,后续算面积、算坡度都方便。投影转换的工具在ArcToolbox里的"数据管理工具"→"投影和变换"→"栅格"→"投影栅格"(或"要素"→"投影"),输入数据、选择输出坐标系,点确定即可。

注意:投影转换后会生成一份新数据,原始文件不会被覆盖。建议转换完先对比一下范围是否合理,再删除临时文件,避免误操作丢失原数据。

3.3 DEM叠加shp裁剪的两种方法

坐标系检查没问题之后,就可以做裁剪了。ArcGIS中最常用的有两种方式:

第一种是按掩膜提取(Extract by Mask),在ArcToolbox的"Spatial Analyst工具"→"提取分析"里。输入栅格选DEM,输入掩膜数据选shp边界,输出路径设好,运行即可。这个工具的好处是能严格按照shp的几何形状裁剪,不规则边界也处理得很好。它的输出范围会精确贴合shp边界,边界外的像元变成NoData。

第二种是栅格裁剪(Clip),在"数据管理工具"→"栅格"→"栅格处理"里。这个工具用法类似,但有一个"使用输入要素的几何"复选框。勾选后按shp的实际形状裁剪,不勾则按shp的外接矩形范围裁剪。如果你只是想快速切一个矩形区域看看效果,不勾选更省事,处理也更快;但最终成果如果要发布或做精确统计,一定要按要素几何来。

以这套上海12.5m DEM为例,我实际操作时是先用按掩膜提取做了全市域的裁剪,再进一步按区分区裁。切完之后的栅格范围跟shp完全一致,统计出来的高程分布才真正代表上海本身的特征,不会混入周边省份的地形数据。

4. 数据裁剪、拼接与导出:12.5m DEM的完整处理流程

4.1 按区裁剪DEM的实操步骤

拿到带有区界的shp文件后,最常见需求是"把上海16个区分别切开,各算各的"。这里分享一个批量处理的方法。

首先打开ArcToolbox里的"Spatial Analyst工具"→"提取分析"→"按掩膜提取"。输入栅格选12.5m DEM,输入掩膜数据选区界shp。如果区界shp里包含多个区,直接运行得到的是整片按所有区范围裁剪后的DEM,各区仍然在一个栅格里。

要拆分到单独区,有两个思路。最简单的办法是先在shp属性表里选中某一个区,然后右键图层→"数据"→"导出数据",导出成单独一个区的shp,再对每个区跑一次按掩膜提取。缺点是操作繁琐,16个区要搞16遍。

更高效的方案是用"分割栅格"工具(Split Raster),或者用模型构建器做一个循环。模型构建器的思路是:用区界shp的属性字段作为迭代条件,每循环到一个区就执行一次按掩膜提取,自动生成以区名命名的DEM文件。这样一次设置,后面全部自动化,适合经常要处理分区域数据的人。

如果是基础的项目交付,我更推荐先按全市范围裁好,再在ArcGIS Pro里用"按属性分割"功能一次完成。在Pro的地图视图里右键图层→"数据"→"分割By属性",选择区分字段,输出到文件夹,一个工具解决所有分区。

4.2 DEM预处理:填洼、坡度、坡向一条龙

拿到裁剪后的DEM别急着做分析,先做一遍质量检查。用"栅格计算器"或"属性"里查看最小值和最大值,如果出现明显的负值(比如低于-20米),要看看是不是海边的数据异常或者NoData值没设置好。上海市域范围内有沿海滩涂区域,正常的高程值应该是接近0甚至略微有负值,但如果大面积出现异常负值,需要检查数据下载和转换过程中是否出错。

质量没问题后,下面的流程根据你的分析目标决定。如果要做水文分析(比如汇水区、河网提取),第一步必须是填洼(Fill)。12.5m的DEM里会有很多"洼地"——封闭的低洼像元,这些在真实地形中可能确实存在(比如人工湖、采石坑),但大多数是数据噪声或者插值误差造成的。不填洼的话,水文分析会把水"困"在这些假洼地里,生成的河网走向会乱七八糟。填洼工具在"Spatial Analyst工具"→"水文分析"里,默认参数大多数情况下够用。

如果是做坡度坡向分析,直接在"Spatial Analyst工具"→"表面分析"里选"坡度"或"坡向"即可。坡度输出单位可以选择度(DEGREE)或百分比(PERCENT),一般场地分析用度和百分比都常见,我习惯用度,直观。坡度分析的输出结果里,你会发现12.5m数据比30m数据生成的坡度图纹理更细碎,这是分辨率提升带来的正常现象——更小的格网更容易捕捉到局部起伏。

4.3 导出设置与格式选择:不用纠结,但要知道区别

处理完的DEM想发给同事、导入其他软件、或者存档,就要涉及导出问题。ArcGIS里栅格可以导出为很多格式,常见的有:GeoTIFF(.tif)、ERDAS Imagine(.img)、ESRI Grid(.grd)、ASCII(.txt)等。

我最推荐的是GeoTIFF,它把影像数据和地理坐标信息打包在一个文件里,几乎所有GIS软件都能打开,QGIS、Global Mapper、Python的rasterio都能直接读。导出时有几个选项要注意:NoData值建议设置成-9999或者0,压缩类型选LZW(无损压缩),这样文件体积能小不少,同时不损失精度。12.5m上海全境的单波段高程TIFF,LZW压缩后一般在几百MB量级,完全可接受。

如果只是做可视化出图,导出PNG或JPEG也可以,但那样会丢失高程数值,没法再做定量分析。这个区别一定要跟非GIS专业的人讲清楚,不然经常出现"你给我的图我放大就糊了"的情况。

4.4 cpg文件到底怎么回事:shp导出乱码的根源

这个坑值得单独拿出来讲,因为"shp文件导出的时候没有cpg文件"这个问题在GIS群里出现的频率实在太高了。

先解释一下cpg是什么。shp的属性信息存在.dbf文件里,而.dbf文件是dBase格式,它的字符编码不是固定的。cpg文件是一个极小的文本文件,内容只有一行,记录的是属性表的字符编码格式,比如UTF-8或者GBK。ArcGIS读取shp时会先找cpg文件,如果存在就按指定的编码读取;如果不存在,就会根据系统区域设置去猜,中文Windows系统下默认按GBK读取。

问题就在这个"猜"字上。有人在ArcGIS Pro(默认UTF-8)里新建shp数据并录入中文属性,导出后给同事在中文版ArcMap(默认GBK)里打开,又没有cpg文件,结果属性表里全是乱码。反过来也一样。

解决办法有三个:

  1. 在ArcGIS Pro里导出shp时,默认会自动生成cpg文件,但如果有旧数据升级过来的,可能缺失,所以每次导出后检查一下文件夹里有没有.cpg。
  2. 如果确实没有cpg,手动创建一个同名文本文件,后缀改成.cpg,内容单独一行写UTF-8,保存即可。操作简单,但编码内容必须跟属性表实际编码一致。
  3. 用QGIS导出shp时,可以在导出对话框的"字符编码"选项里指定UTF-8,同样能生成正确的cpg文件。

我的习惯是:凡是涉及shp的存储和拷贝,一律保留全部文件,不允许只拷单个.shp。因为缺少任何一个配套文件都会带来麻烦,特别是.prj(坐标系)和.cpg(编码),缺了后续处理全是坑。

5. 常见问题与排查技巧实录

5.1 DEM打开后是全黑或全灰怎么办

第一次打开12.5m DEM,发现整个画面黑漆漆一片或者灰蒙蒙什么都看不清,这种情况太常见了。别急着怀疑数据坏了,绝大多数原因是符号化显示的问题。

DEM栅格默认加载时,如果软件没有自动计算合适的拉伸范围,就有可能把所有像元值映射到一两个色阶上,看起来就是纯色。解决方法是右键图层→"符号系统"(Symbology),把显示方式改成"拉伸"(Stretched),拉伸类型选"百分比截断"或"标准差",色带选一个从低到高有区分度的(比如从浅绿到棕色到白色)。这样高程的起伏立刻就能看出来。

另一个经典问题是NoData值没识别对。很多DEM的NoData值是-32768或-9999,如果软件把它当成有效值参与显示,会把大部分区域染成极端低值。这时要在图层属性的"NoData"设置里手动指定这个值,显示立刻恢复正常。用"栅格计算器"里的SetNull函数也可以,把NoData值转成真正的空值。

5.2 范围对不上、位置偏移怎么排查

做好的裁剪DEM和shp边界叠上去,发现边界线和高程数据的边缘明显错开,或者位置整体偏移了好几十米。这个问题的根源几乎都是坐标系不一致。

比如DEM是WGS84经纬度坐标系,而shp是CGCS2000的投影坐标系,两者虽然都描述地球表面,但一个用度、一个用米,直接叠加就等于把两个不同系统的数据硬拼在一起,偏移不可避免。

排查步骤分三步:第一步,分别查看DEM和shp的坐标系属性,确认是否一致。第二步,如果不一致,以shp为准,把DEM投影转换到shp的坐标系,转换后用"栅格计算器"或目视检查叠加效果。第三步,如果转换后仍然偏移,看一下是不是shp的坐标系本身定义有误——有些shp明明是WGS84的数据,却错误标注成了CGCS2000,这种问题需要用"定义投影"工具重新指定正确坐标系才能解决。

5.3 大区域计算卡顿、内存爆掉的解决思路

上海市域面积约6340平方公里,12.5m分辨率算下来大概是4000万左右的像元数。这个数据量对现代电脑来说其实不算恐怖,但如果直接在未裁剪的全图上跑复杂的空间分析,照样会卡得怀疑人生。

我的经验是三个字:先裁剪。一切分析都基于裁剪后的上海范围DEM,而不是原始大图。原始大图可能覆盖了整个长三角区域,像元数是上海范围的十几倍,你分析的范围明明只在浦东,却让软件白白处理嘉兴和苏州的数据,不卡才怪。

第二个优化是构建金字塔。在ArcGIS目录里右键栅格,选择"构建金字塔"(Build Pyramids),软件会生成.ovr文件,在缩放浏览时按不同级别加载,流畅度提升非常明显。这个步骤对TIFF格式尤其重要,强烈建议拿到数据后先做。

第三个优化是重采样降级。如果只是做宏观趋势查看或者写成汇报底图,完全可以把12.5m重采样成25m或30m再展示,视觉差异很小,处理速度却是数量级的提升。ArcGIS的"重采样"工具里选"双线性"或"三次卷积",前者速度更快,后者边缘更平滑。

写在最后的实操经验

项目做多了之后,我对数据资源的判断标准就四个字:够用就好。上海市12.5m DEM配合shp边界,在大多数规划分析场景里已经能给出足够可靠的结论,没必要一开始就追求1m LiDAR。这套数据的处理核心其实就三步:确认坐标系、按边界裁剪、按需求做表面分析。把这几个环节跑顺了,后面不管换到哪个城市、哪种分辨率的数据,流程都是通的。

最后分享一个我自己的小习惯:拿到任何一批数据,先写一个README文件,记录数据来源、分辨率、坐标系、下载日期、处理步骤。这看起来是个笨功夫,但在项目交接、几个月后回头复用数据时,能帮你少踩百分之八十的坑。毕竟再过半年,你大概率想不起来当初是怎么把那个坐标系转出来的。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询