上海市12.5米DEM数字高程模型与shp边界数据处理全攻略 简介本资源为面向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或CGCS2000EPSG: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上海全境的单波段高程TIFFLZW压缩后一般在几百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文件结果属性表里全是乱码。反过来也一样。解决办法有三个在ArcGIS Pro里导出shp时默认会自动生成cpg文件但如果有旧数据升级过来的可能缺失所以每次导出后检查一下文件夹里有没有.cpg。如果确实没有cpg手动创建一个同名文本文件后缀改成.cpg内容单独一行写UTF-8保存即可。操作简单但编码内容必须跟属性表实际编码一致。用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文件记录数据来源、分辨率、坐标系、下载日期、处理步骤。这看起来是个笨功夫但在项目交接、几个月后回头复用数据时能帮你少踩百分之八十的坑。毕竟再过半年你大概率想不起来当初是怎么把那个坐标系转出来的。本文还有配套的精品资源点击获取