ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

GlobeLand30中国区域裁剪与面积统计实操指南

GlobeLand30中国区域裁剪与面积统计实操指南 拿到一套覆盖全国、精度到 30 米、分类标准统一的土地利用数据GlobeLand30 基本是绕不开的名字。它由国内权威机构牵头研制对外提供 GeoTIFF 格式栅格文件从 2000 年、2010 年、2020 年三期公开版本到目前正在陆续更新的 2025 期都用同一套 10 大类分类体系。对国内做国土空间规划、生态评估、农林监测、双碳研究的团队来说最常用的形态就是中国区域提取版把全球分幅数据按中国边界裁出来统一成一份干净、可直接入库分析的 TIFF 底图。这篇文章会把数据本身的来龙去脉讲清楚重点说中国区域提取时的边界处理、坐标系与像素值细节再用 GDAL 命令行、Python rasterio、QGIS 三种方式完整走一遍裁剪和面积统计流程。最后把大家问得最多的 TIFF 打开全黑、统计面积偏大、以及最近很多人踩的 HALCON write_image 保存 TIFF 问题一并梳理清楚。无论你是刚入门遥感的学生还是处理过多年栅格数据的老手第三节的脚本建议直接存一份后面每期新数据发布都能复用。1. GlobeLand30 数据整体认知与设计思路1.1 这套数据到底什么来头GlobeLand30 是由国家基础地理信息中心牵头、多家科研单位联合研制的全球地表覆盖数据产品。它最早在 2014 年前后发布了 2000 期和 2010 期之后 2020 期上线2025 期也在逐步发布中。数据生产主要基于 Landsat 系列多光谱影像辅以国产卫星数据采用自动化分类加上人机交互解译的方式再用全球各个站点的实测样本做精度验证。公开测评的综合精度大约在 85% 左右这个数字放在全球同类产品里属于第一梯队。为什么大家愿意用这套数据一个很重要的原因是它把权威性和可用性平衡得比较好。分类体系由官方主导制定有明确的定义和编码规则不是某个研究组自己拍脑袋定的同时产品又完全开放下载全球范围内都能拿到原始分幅这对于做跨国对比、长时序分析的项目来说非常友好。国内很多部委的标配底图、高校的课程作业、竞赛的指定数据集用的都是它。1.2 为什么 30 米分辨率是个分水岭接触过遥感产品的人都知道地表覆盖数据的分辨率从几百米到几米都有。拿几个常见的对比一下数据源空间分辨率特点MODIS 土地覆盖产品250m / 500m覆盖全球、更新快但城市边界、小地块完全看不出来Landsat 系列30m经典光学影像GlobeLand30 就是以它为底图生产的Sentinel-210m更精细但全球尺度的分类产品还不够成熟FROM-GLC30m清华大学发布分类体系不同更新节奏不稳定GlobeLand3030m官方体系、三期以上连续、全球统一分类标准30 米这个尺度恰好能看清一个村庄、一片小型林地、一条较宽的河流又不会让全国范围的数据量大到没法处理。对省级、国家级的研究来说30 米是性价比最高的选择。你用 10 米数据做全国分析存储和计算压力会陡增但结论未必比 30 米精细多少毕竟很多区域的自然边界本来就不是光滑曲线。另外要注意GlobeLand30 官方标称的 30 米是指实地分辨率不是严格的投影坐标格网。实际交付的 WGS84 经纬度坐标下像素尺寸大约是 0.00027 度。这个细节很多人容易忽略后面算面积时会出事我在第三节会专门演示处理方式。1.3 10 大类分类体系的少而精逻辑GlobeLand30 的 10 类分类体系是基于联合国土地覆盖分类体系LCCS设计的每一类都有明确的定义和像素值编码像素值类别简要说明10耕地水田、旱地、园地及轮作农田20林地乔木覆盖的林地含落叶林、常绿林、混交林30草地草本植物覆盖含草甸、草原40灌木地灌木为主的灌丛50湿地沼泽、滩涂、盐沼等水陆过渡区域60水体河流、湖泊、水库、海洋等70苔原高寒地带的冻原、苔藓地衣植被80人造地表城市、乡镇、工矿、道路等人工硬化地表90裸地裸土、沙地、戈壁、岩石等100冰川和永久积雪常年冰雪覆盖的区域为什么是 10 类而不是像 IGBP 那样 17 类因为对于绝大多数规划和宏观研究把耕地、林地、草地这些大类分清楚就足够支撑结论类别越多跨区域的一致性越难保证错分率也会上升。官方做成 10 类等于帮你做了取舍保证分类可靠同时能满足九成以上的应用需求。如果你要更细的二级地类比如把耕地细分成水田和旱地那需要结合其他数据继续做GlobeLand30 只负责把第一层底盘打好。2. 中国区域提取版范围、投影与数据规格2.1 全球分幅与中国区域怎么对应GlobeLand30 的原始产品按经纬度分幅组织每幅覆盖 5 度纬度 × 6 度经度文件名里带着图幅编号类似 N30E110 这种形式。中国区域大致在东经 70 多度到 135 度、北纬 15 度到 55 度之间算下来涉及的图幅有几十幅其中一部分是纯海洋区域。下载的时候有个经验如果你只需要中国大陆加沿海岛屿建议先按经纬度范围筛一遍图幅列表把 N50E070、N30E110 这类真正落在国境内的图幅选出来别把几百幅全球数据全下下来。官方网站在线浏览地图里能直接看到每个图幅的覆盖情况手动点选比盲目全选要高效得多。2.2 中国区域提取的边界处理要点拿到原始分幅后中国区域提取版这个动作的核心就是两个字裁剪。但裁剪用的边界矢量必须讲究不能随便拿一个 Google 上下载的低精度边框。我的习惯是使用带有审图号的标准行政边界数据坐标系统一到 WGS84并且把沿海岛屿都包含进去。如果只用一个大矩形范围去切海南岛、舟山群岛这些沿海岛屿很可能被切掉数据明显不完整。裁剪之前可以先在 QGIS 里把边界矢量叠加到影像上看一眼确认边界精度、岛屿层级没问题再进处理流程。对大部分分析任务来说这一步做到位后面统计各类面积才不会被边界问题带偏。2.3 TIFF 文件内部结构与元数据GlobeLand30 的 TIFF 是单波段栅格像素类型一般为无符号整型像元值就是上表里的 10、20、30 一直到 100背景和无效区域为 0。它不像普通遥感影像有多个波段不需要做波段合成拿到手直接按分类数据使用即可。每个图幅压缩包内除了主 TIFF 文件一般还有对应的元数据 XML、快速预览图以及图例样式文件。XML 里记录了投影坐标系、像素尺寸、生产日期、版本号等信息正式归档前建议保留图例样式文件可以导入 QGIS、ArcGIS让显示颜色和官方发布图完全一致。下载后可以先跑一句 gdalinfo 看一下文件头信息确认坐标系和像素尺寸符合预期再进入正式处理。3. 数据获取、中国区域裁剪与转换实操3.1 官方下载与目录组织GlobeLand30 的官方发布平台是 globeland30.org注册后可以按年份、按图幅选择下载。目前 2000、2010、2020 三期完整公开2025 期部分区域已经上线具体以官网发布状态为准。我的建议是把下载好的图幅按年份归档目录结构类似这样GlobeLand30/ ├── shp/ │ └── china_4326.shp ├── tiles_2010/ │ ├── N30E110_LC_2010.tif │ └── ... ├── tiles_2020/ │ └── ... └── output/这样做的好处是后续每期数据都能走同一套脚本只需要把年份参数换掉。别把所有年份的图幅堆在一个文件夹里不然到时候 VRT 拼接容易混数据我见过不止一次同学把 2010 和 2020 的图幅拼到一起分析半天发现结果不对。3.2 GDAL 命令行拼接加国界裁剪一次搞定GDAL 是处理栅格数据的标准工具集很多 Python 库底层也是它。命令行方式适合批量操作和脚本化处理全国数据非常稳。以下是完整流程cd tiles_2020 # 第一步把 2020 年所有分幅拼接成 VRT 虚拟栅格不实际拷贝数据 gdalbuildvrt -overwrite globeland30_2020.vrt *.tif # 第二步按国界矢量裁剪输出带压缩的 GeoTIFF gdalwarp -cutline ../shp/china_4326.shp -crop_to_cutline \ -dstnodata 0 -of GTiff -co COMPRESSDEFLATE -co TILEDYES \ globeland30_2020.vrt globeland30_2020_china.tif # 第三步重投影到等积投影方便后续面积统计 gdalwarp -t_srs projaea lat_125 lat_247 lat_00 lon_0105 ellpsGRS80 unitsm no_defs \ -tr 30 30 -r near -dstnodata 0 -overwrite \ globeland30_2020_china.tif globeland30_2020_china_albers.tif逐个解释一下参数含义。-cutline指定国界矢量-crop_to_cutline表示严格按矢量边界裁剪矢量外的像素直接去掉。-dstnodata 0把背景值设为 0保持和原始分类编码一致。-co COMPRESSDEFLATE是压缩选项全国范围的数据不压缩可能几个 GB压缩后能小一半以上-co TILEDYES让数据以瓦片方式存储后续做局部读取时会更快。第三步的重投影是关键它把经纬度坐标转成 Albers 等积投影。这一步不是可选项而是面积统计的前提原因我后面会展开说。3.3 Python rasterio 裁剪与面积统计完整代码如果不想依赖命令行Python 的 rasterio 可以直接读完并裁剪程序里还能顺便做统计。以下代码完成国界裁剪并输出新 TIFFimport geopandas as gpd import rasterio from rasterio.mask import mask # 读取国界矢量统一到 WGS84 gdf gpd.read_file(shp/china_4326.shp).to_crs(EPSG:4326) with rasterio.open(tiles_2020/globeland30_2020.vrt) as src: out_img, out_transform mask(src, gdf.geometry, cropTrue, nodata0) profile src.profile.copy() profile.update( heightout_img.shape[1], widthout_img.shape[2], transformout_transform, nodata0, ) with rasterio.open(output/globeland30_2020_china.tif, w, **profile) as dst: dst.write(out_img)这段代码先把 VRT 打开再用边界几何裁剪cropTrue会缩小到边界外接矩形nodata0保持背景值一致。写文件时把空间参考、变换信息原样保留输出后的 TIFF 可以直接在 GIS 软件里打开。统计面积前必须先保证栅格在等积投影下。原因很简单原始 WGS84 经纬度坐标下一个像素在经度方向的实地宽度会随纬度变化纬度越高越窄。直接在原投影用 30 乘 30 算面积在低纬度误差不大到了黑龙江、新疆结果会明显偏大这种错误很容易出现在论文数据里。投影转换建议直接用命令行gdalwarp -t_srs projaea lat_125 lat_247 lat_00 lon_0105 ellpsGRS80 unitsm no_defs \ -tr 30 30 -r near -dstnodata 0 \ output/globeland30_2020_china.tif output/globeland30_2020_china_albers.tif转换完成后再用以下脚本统计各类面积import numpy as np import rasterio name_map { 10: 耕地, 20: 林地, 30: 草地, 40: 灌木地, 50: 湿地, 60: 水体, 70: 苔原, 80: 人造地表, 90: 裸地, 100: 冰川和永久积雪, } with rasterio.open(output/globeland30_2020_china_albers.tif) as src: data src.read(1) pixel_area 30 * 30 # 等积投影下每个像素实地面积单位平方米 for cls, count in zip(*np.unique(data, return_countsTrue)): if cls 0: continue area_km2 count * pixel_area / 1e6 print(f{cls:3d} {name_map.get(cls, 未知):10s} {area_km2:12.2f} km²)注意np.unique会统计整幅影像所有像素背景值 0 必须过滤掉否则面积会被凭空放大一大截。输出结果可以直接用于报告或再加工成图表。3.4 QGIS 图形界面五步完成裁剪不熟悉命令行的朋友用 QGIS 操作也很快本质是同样一套逻辑只是图形界面化。第一步把下载的分幅 TIFF 全部拖进 QGIS 图层列表。第二步依次点击栅格—杂项—构建虚拟栅格把当前加载的图幅全部选中生成 VRT 虚拟拼接这一步不会生成大文件速度很快。第三步加载国界矢量点击栅格—提取—按掩膜图层裁剪栅格输入图层选 VRT掩膜图层选国界勾选裁剪到掩膜范围点击运行。第四步在输出图层上右键属性选择单波段伪彩色按官方像素值 10 到 100 设置颜色和标签。第五步如果要做面积统计使用栅格—投影—重投影工具目标坐标系选择 Albers 等积投影像素大小设为 30 米然后打开属性表就能看到各类别像元数量。QGIS 的好处是每一步都能直观看到结果适合第一次处理这类数据时排查边界和颜色问题。但数据一多、需要反复处理时我还是推荐优先用脚本毕竟三期加未来 2025 期同一套流程跑四遍人工操作很容易出错。4. TIFF 栅格处理的常见坑与排查实录4.1 打开全黑、颜色和官方图例对不上很多人在 QGIS 里第一次打开 GlobeLand30 的 TIFF看到的是一片黑或者灰蒙蒙的图第一反应是数据坏了。其实不是问题出在显示方式上。这类分类栅格是单波段整数值域只有 0 到 100GIS 软件默认按灰度拉伸显示0 附近的背景和 10 的耕地差异很小肉眼根本分不出来。解决办法也不是调拉伸而是把符号化改成单波段伪彩色然后手动给每个像素值指定颜色。最省事的做法是直接下载官方发布的 QGIS 样式文件导入后颜色、分类标签、图例一次性全到位。别自己随便填颜色不同机构图幅之间颜色不统一后期制图很麻烦。4.2 用 30×30 算面积为什么翻车这个问题我在第三节强调过但值得再单独说一次。GlobeLand30 交付的 TIFF 是 WGS84 经纬度
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进