简介:广州地形数据.rar是一份面向GIS从业者、城市规划人员及环境研究者的地形数据包,内容涵盖广州地区边界、水系、道路等基础要素,可作为数字高程模型(DEM)和数字地形模型(DTM)的数据来源,用于坡度分析、地表形态解读和空间规划。压缩包共16个文件,以adf栅格数据、nit索引文件、dat属性数据及log记录文件为主,整体仅4.45MB,轻量紧凑但结构完整,便于分发和直接使用。已有178人浏览学习,适合城市地形分析、交通线路选址、灾害风险评价与土地利用规划等场景,也可作为生态保护与气候研究的基础图层。借助shp等通用格式,读者可在ArcGIS、QGIS等主流GIS软件中直接导入、叠加与可视化,快速提取海拔、坡度、起伏度等关键地形指标,并生成等高线图、剖面图、坡度图等可视化成果,为科研与工程实践节省前期数据准备时间,也便于教学演示与学术研究。
1. 拿到“广州地形数据.rar”,你真正要处理的是坐标系和压缩包两层问题
一个.rar文件本身没什么好说的,真正让从业者卡住的,是这三点:第一,压缩包可能设有密码,而很多测绘数据在传递时习惯性加密,一旦交接文档丢了,解压就成了第一道坎;第二,解压之后你会拿到一堆 GDAL 能读、但普通预览软件打不开的栅格文件,.tif、.img、.dem混在一起,不知道哪个是主数据;第三,也是最容易被忽视的,广州地区的公开地形数据大概率不是标准的 WGS-84 经纬度,你需要先确认坐标系再谈裁剪、拼接和出图——否则后处理全是白做。
这篇文章就围绕这条链路展开:先讲怎么安全地解开 RAR 压缩包并处理加密文件,再讲用gdalinfo识别广州地形数据的真实格式与坐标系,然后给出用rasterio和 GDAL 做裁剪、镶嵌、投影和坡度分析的完整套路,最后收在数据体积与可视化验证这个容易被忽略的环节上。适合 GIS 开发、测绘内业和做城市分析的数据工程师。
2. 广州地形数据的常见形态与坐标系,先用 gdalinfo 摸底再动手
很多新人拿到压缩包,解压后第一反应是双击.tif看能不能打开。这一步没错,但远不够。地形数据和其他数据不同,它的价值不仅在于“有海拔值”,还在于投影信息是否完整、像元大小是否一致、波段解释是否正确。任何一个环节出错,后面做等高线或坡度分析的结果都不可信。
2.1 DEM 栅格与等高线矢量:分清你手里的数据类型
广州地形数据的常见载体有两类。第一类是数字高程模型(DEM),表现为单波段栅格,每个像元记录一个高程值,常见格式有 GeoTIFF、IMG(ERDAS Imagine)、DTED和 Esri Grid。第二类是等高线矢量,表现为SHP或DWG,用线要素表示不同海拔的等高位置。两者的处理工具完全不同,栅格走 GDAL,矢量走 Fiona / Shapely 或 CAD 平台。
判断一个文件是栅格还是矢量,不需要打开软件,在命令行里用资源管理器看扩展名就够了。.tif、.img、.dem几乎都是栅格,.shp是矢量。但有一种容易误判的情况:DEM 文件可能以.asc(ASCII Grid)形式存在,而.asc也能被文本编辑器打开,很多人会误以为它是普通文档。注意,ArcGIS ASCII Grid 是专门的地形数据交换格式,第一行ncols和nrows是它的标志性开头。
广州的地形数据,如果是公开来源(如 SRTM、ASTER GDEM、ALOS AW3D30),通常是 WGS-84 地理坐标系下的 GeoTIFF;如果是国土或规划部门的分发成果,更可能是 CGCS2000 或西安 1980 坐标系的IMG或 File Geodatabase。这直接影响你后续用哪个投影做面积和坡度计算——地理坐标系的坡度结果单位是度,投影坐标系的坡度才是无量纲百分比或真坡度,这个区别在低纬度地区尤其明显。
2.2 用 gdalinfo 读取文件头,确认范围、像元和坐标系
拿到任何地形栅格,第一件事不是急着转格式,而是读它的元数据。GDAL 自带的gdalinfo是最快的工具,Linux 和 Windows 都可以用 OSGeo4W Shell 或 conda 环境里的 GDAL 直接调用。
gdalinfo guangzhou_dem.tif输出里重点关注这几项。
Driver: GTiff/GeoTIFF Files: guangzhou_dem.tif Size is 3601, 3601 Coordinate System is: GEOGCRS["WGS 84", DATUM["World Geodetic System 1984"], PRIMEM["Greenwich"], UNIT["degree"]] Origin = (112.950000000000000,23.950000000000000) Pixel Size = (0.000277777777778,-0.000277777777778)Size字段表示栅格的列数和行数,Origin是左上角坐标,Pixel Size是像元分辨率。上面这个示例是 WGS-84 下的 1 弧秒数据(约 30 米),如果你做的是广州市中心区域的精细分析,这个精度勉强够看地形大势,但不足以支撑建筑尺度的坡度分级。
如果Coordinate System显示Unknown或Local,说明这个栅格文件的地理参考信息丢了。这种情况下不能直接使用,需要用gdal_edit.py手动赋予坐标系——但前提是你知道它的原始坐标系。不知道就老老实实把数据发回给数据提供方确认,别猜。广州用的投影带常见为 CGCS2000 / 3-degree Gauss-Kruger zone 38(中央经线 114°E),EPSG 代码是 4547;如果是 WGS-84 / UTM zone 49N,则对应 EPSG 32649。
| 数据集来源 | 典型分辨率 | 坐标系 | 使用建议 |
|---|---|---|---|
| SRTM 1 Arc-Second | 30 m | WGS-84 | 区域地形分析,够用 |
| ASTER GDEM V3 | 30 m | WGS-84 | 山区细节略差,平缓区可用 |
| ALOS AW3D30 | 30 m | WGS-84 | 精度优于前两者,推荐 |
| 省级测绘成果 DEM | 5 m/10 m | CGCS2000 | 工程级分析首选,需申请 |
3. RAR 解压与加密文件处理,命令行比图形界面更可控
RAR 格式本身是 WinRAR 的专有格式,虽然解压算法已经公开,但压缩和解压的完整实现仍然依赖unrar或7-Zip。在自动化处理地形数据的场景里,命令行解压是唯一可靠的方式——它支持批量解压、保留目录结构、处理分卷包,还能把错误信息输出到日志里。
3.1 unrar 与 7z 的常用解压参数
Linux 下安装unrar-free或unrar皆可,macOS 用 Homebrew 安装unrar,Windows 下推荐装 7-Zip 并把7z.exe的路径加入系统 PATH。以下是我处理地形数据压缩包的常用命令。
# 解压整个包,保留原目录结构,覆盖时不询问 unrar x -o+ guangzhou_dem.rar ./output/ # 只解压其中的 TIF 文件,排除 SHP 文件夹 unrar e guangzhou_dem.rar ./output/ *.tif # 用 7z 解压,自动处理分卷包(.rar、.r00、.r01) 7z x guangzhou_dem.rar -o./output -yx参数表示保留路径解压,e表示把所有文件解压到同一目录(不管原路径)。地形数据往往带规范的目录结构,比如按行政区划分文件夹,所以我一般用x而不是e。-o+是 unrar 的覆盖参数,表示覆盖已存在文件;-y是 7z 的全局自动确认参数,跳过所有交互提示。
解压中文文件名时有一个高频坑:Windows 上用 WinRAR 压的包,文件名是 GBK 编码,Linux 下的 unrar 有时会解出乱码文件名。解决方式是先检查系统 locale,在解压命令前加上LANG=zh_CN.UTF-8,或者用 Python 的rarfile库配合charset参数处理。
3.2 加密 RAR 的合法处理路径
热词里有不少关于查看 RAR 密码的内容。先说技术事实:RAR 加密使用的是 AES-256,而且对文件头和文件体采取不同策略。新版 WinRAR 默认加密文件头,这意味着你连文件名都看不到;暴力破解在密码长度超过 10 位时计算成本会迅速上升到不可接受的水平。16 进制编辑器查看 RAR 密码这个说法只对早期 RAR 2.0 格式有理论意义,现代 RAR5 格式下,密码信息不在文件中。
合法可靠的路径是这四条。第一,检查原始邮件或下载站的备注页,很多数据分发的密码就写在页面上,只是被忽略了。第二,问数据提供方要交接说明。第三,如果密码是自己之前设置的,尝试用密码管理器的历史记录找回。第四,如果数据来源合法且你有权使用,但密码确实丢失,可以联系数据供应商重新分发。自行暴力破解既不道德,对长密码也几乎不可行,这条路不要费时间。
# 如果压缩包只是文件体加密但文件名可见(老格式常见) unrar l guangzhou_dem.rarl参数列出压缩包内容。如果你能看到文件名但解压时提示密码错误,说明是文件体加密;如果连列表都弹密码框,就是文件头加密了。对于前者,有些文件可以用 7z 尝试读取元数据来判断文件数量。
4. 地形数据的裁剪、拼接和投影转换,用 rasterio 与 GDAL 落地
解压完成、确认坐标系之后,就进入真正的数据处理环节。广州的地形数据往往覆盖整个珠三角范围,而你要的可能只是天河区或白云山周边,这时候需要裁剪;如果数据是分幅存储的,还需要把多个瓦片拼接起来。这个环节我用 Python 的rasterio做原型,复杂批量任务直接用gdalwarp。
4.1 按行政边界裁剪 DEM,用 GeoJSON 做掩膜
裁剪有矩形裁剪和掩膜裁剪两种。矩形裁剪适合你只要一个经纬度边界框的场景,掩膜裁剪适合按行政区划、流域或自绘多边形切出不规则形状。无论哪种,操作都是先读取边界矢量,再用rio.clip完成。
import rasterio from rasterio.mask import mask import geopandas as gpd import json # 读取广州某个区的边界(假设已有 guangzhou_district.shp) gdf = gpd.read_file("guangzhou_district.shp") gdf = gdf.to_crs("EPSG:4326") geoms = gdf.geometry.values # 用边界裁剪 DEM with rasterio.open("guangzhou_dem.tif") as src: out_image, out_transform = mask( src, geoms, crop=True, nodata=src.nodata ) out_meta = src.meta.copy() out_meta.update({ "driver": "GTiff", "height": out_image.shape[1], "width": out_image.shape[2], "transform": out_transform }) with rasterio.open("guangzhou_clipped.tif", "w", **out_meta) as dst: dst.write(out_image)mask函数的前两个参数分别是数据源和边界几何对象,crop=True表示自动计算外接矩形并裁掉多余区域。注意gdf.to_crs("EPSG:4326")这一步很关键——如果矢量是 CGCS2000 而你直接拿去裁剪 WGS-84 的栅格,裁剪结果不会有物理错误,但边界位置会偏移。确保矢量和栅格在同一个坐标系下再做掩膜。
4.2 多幅地形瓦片镶嵌与投影转换
广州的地形数据如果来自 SRTM,通常按照经纬度分幅存储,需要用gdalwarp合并成一个文件。gdalwarp同时也能完成投影转换,两件事可以一次做完。
# 把分幅 DEM 镶嵌并重投影到 CGCS2000 高斯投影 gdalwarp -t_srs EPSG:4547 -r cubic -tr 10 10 \ -co COMPRESS=DEFLATE -co TILED=YES \ tile_*.tif guangzhou_merged_10m.tif-t_srs EPSG:4547是 CGCS2000 / 3-degree Gauss-Kruger zone 38,这是珠三角工程测量的常用投影;-r cubic指定重采样方法为三次卷积,适合 DEM 这类连续表面数据;-tr 10 10把输出像素设为 10 米,如果源数据是 30 米,这个操作用来量化到目标分辨率。-co COMPRESS=DEFLATE -co TILED=YES是无损压缩加瓦片存储,GDAL 读大文件时的性能会好很多。
4.3 坡度、坡向与山体阴影计算
地形数据最常见的衍生分析是坡度。用gdaldem一条命令就能出结果,但参数含义要理解到位。
# 计算坡度,输出单位是度 gdaldem slope guangzhou_merged_10m.tif guangzhou_slope.tif \ -p -s 111120 # 生成山体阴影,默认只给黑白效果 gdaldem hillshade guangzhou_merged_10m.tif guangzhou_hillshade.tif \ -z 1.0 -az 315 -alt 45-p表示输出百分比坡度,不写-p输出度;-s 111120是关键参数,它表示水平与垂直方向的比例因子。当 DEM 是经纬度坐标系时,一个纬度的水平距离约 111120 米,如果没有-s参数,坡度会被严重高估。-z是垂直拉伸倍数,-az是太阳方位角,-alt是太阳高度角。
5. 检查裁剪成果,用可视化验证数据质量与纹理细节
处理完的数据不能直接拿去用,图形化的检查比数字检查更直观。我通常把成果叠加在 QGIS 里,配上 GEBCO 色带,快速查看阴影覆盖和异常高程点,重点验证像元的比例是否合理、广州主城区是否有明显的数据空洞。
5.1 把结果转成 Pyramid TIFF 并生成缩略图
DEM 动辄几百 MB,直接用 QGIS 打开会很卡。先构建金字塔,再生成一个低分辨率缩略图,用来在网页端或报表里快速预览。
# 构建金字塔 gdaladdo -r average guangzhou_merged_10m.tif 2 4 8 16 32 64 # 输出一个低分辨率 PNG 缩略图 gdal_translate -outsize 1024 0 -of PNG \ guangzhou_merged_10m.tif guangzhou_preview.pnggdaladdo对大型 DEM 的效果立竿见影,QGIS 里缩放时的卡顿感会明显下降。-r average指定重采样方法为均值,对连续表面的 DEM 来说比最近邻平滑得多。gdal_translate的-outsize 1024 0表示宽度 1024 像素、高度按比例自适应,适合生成预览图。
5.2 检查高程范围与无效值,清理数据坑
数据质量问题经常出在无效值上。SRTM 原始数据的水域部分高程值为 0,ASTER 数据则可能有负值异常斑块,这些在坡度分析中会被放大成假的峭壁和凹陷。用gdalinfo -stats快速查看每波段的最小值、最大值和无效值标记。
gdalinfo -stats guangzhou_merged_10m.tif如果发现 min 值是异常负数,比如-32768,那代表有未处理的 NoData 空洞。修复方式是用gdal_fillnodata,它会用周围有效像素插值填充。
gdal_fillnodata -md 20 guangzhou_merged_10m.tif \ guangzhou_filled.tif-md 20表示搜索半径,单位是像元。20 个像元对应 200 米范围的插值,对地形数据来说已经足够平滑。再大就会把真实地形细节一起抹掉,不建议盲目加大。
5.3 最后的压轴技巧:用 COG 转换提升分发与远程读取效率
如果这份广州地形数据要共享给团队或嵌入 Web GIS,不要直接发原始 TIFF。把它转成 Cloud Optimized GeoTIFF,服务端才能支持 HTTP Range 请求,只传输你当前视野范围内的数据块。
gdal_translate guangzhou_filled.tif guangzhou_cog.tif \ -of COG -co COMPRESS=LERC \ -co BLOCKSIZE=512 -co OVERVIEW_RESAMPLING=AVERAGELERC 压缩对浮点 DEM 的压缩比远超 DEFLATE,而且支持有损压缩模式,对高程数据的精度损失基本不可感知。BLOCKSIZE=512与常见的 Web 瓦片请求尺寸匹配,OVERVIEW_RESAMPLING=AVERAGE保证缩小时地形纹理不丢失。转换完成后用gdalinfo guangzhou_cog.tif确认输出包含COG字样,再用浏览器打开 QGIS 远程数据源测试一下拖动缩放,没问题就可以发布了。
本文还有配套的精品资源,点击获取