☰
从1980到2018:全国30米土地利用型数据与长时序应用指南
2026/10/13 12:32:30 网站建设 项目流程

说实话,我在这行干了这么多年,带过不少做土地利用变化分析的新人。每次他们跑过来问我"想研究长时间序列的土地利用变化,但不知道用什么数据",我第一个想到的就是这类长时序中分辨率土地利用数据集。

这次要聊的"1980-2018年全国30米土地利用类型样例数据",名字拆开看很直白,但背后牵扯的东西一点都不少。它横跨近四十年,空间分辨率做到30米,覆盖全国范围。对于做地表过程研究、国土空间分析、碳储量估算的人来说,这套数据几乎是绕不开的基础底图。更关键的是,它以"样例数据"的形式对外提供,意味着我们可以先用小范围数据跑通分析流程、检验数据质量,再决定是否引入完整数据做正式研究。这篇文章我从数据定位、生产逻辑、预处理操作、变化分析到踩坑经验,一层层拆开来讲,希望能帮正在接触这套数据的朋友少走弯路。

1. 为什么这套30米土地利用数据会成为工作台常备数据集

1.1 从时间尺度和空间尺度看它的定位

先解决一个基础问题:土地利用类型数据到底是干什么用的?简单来说,就是把地球表面按照人类利用方式分门别类,比如这部分是耕地、那片是林地、那块建了工厂和住宅、那边是河流湖泊,最后形成一张栅格图,每个像元都带一个类别编码。有了连续年份的分类结果,我们就能回答"建设用地扩了多大""森林减少了多少""耕地是否在流失"这类问题。

尺度是理解这套数据价值的钥匙。30米分辨率是什么概念?它对应的是Landsat系列卫星的多光谱波段原始分辨率。30米意味着地面上30米乘以30米的正方形区域,在图上只是一个像元。这个尺度比MODIS那种250米、500米分辨率的全球土地产品精细得多,能看清村镇尺度上的建设扩展、农田地块边界,又不像亚米级商业影像那样数据量巨大、处理复杂。做区域尺度的长时序分析,30米是性价比极高的中间档。

时间跨度更值得琢磨。1980年到2018年,接近40年,正好覆盖了我国地表格局变化最剧烈的时期。这套数据通常不是每年都出,而是选择若干代表年份(例如1980、1990、1995、2000、2005、2010、2015、2018等)形成时间切片。每一个切片都对应当时地表覆盖的"快照",把这些切片串起来看,才能真正理解城市蔓延、退耕还林、围湖造田这些宏观过程的走向。没有这种时间深度的单期数据,做长时序趋势分析就是无米之炊。

1.2 样例数据与完整数据的关系:先用起来再谈精度

"样例数据"这四个字值得认真对待。它通常不是全国一张完整无缝的大图直接打包给你,而是抽取若干典型区域、若干代表年份的子集,用来展示数据的组织方式、分类编码、波段结构、坐标系统和基本质量。它的价值在于:让你在不承担完整数据下载和处理成本的前提下,先验证数据格式能不能被你的工具链读取,分类体系跟你的研究需求匹不匹配,统计出来的面积量级是否符合常识。

我有一个很深的体会:很多新手拿到样例数据的第一反应是"就这点范围,能干啥?"——这个想法我特别理解,但恰恰是本末倒置。做任何长时序研究,正式分析前都应该有一个"数据体检"阶段。样例数据就是做体检的最佳材料。比如你可以先用一个案例区样例跑通"读取-投影转换-面积统计-逐年对比"这套流程,确认每个环节输出合理,再上完整数据层。这样既练熟了技术路径,也能提前暴露数据兼容性问题,避免大范围跑完才发现参数全错。

2. 数据生产的底层逻辑:分类体系与解译流程

2.1 分类体系怎么定,一级类与二级类怎么划分

明白数据怎么来的,用起来才踏实。土地利用数据的生产,第一步是定义分类体系。不同来源的数据分类标准并不完全一致,但大多数中国国产30米土地利用数据会采用类似的一级类框架:

一级类典型含义常见二级类举例
耕地种植农作物的土地水田、旱地
林地生长乔木、灌木的土地有林地、灌木林、疏林地
草地以草本植物为主的土地高覆盖草地、中覆盖草地、低覆盖草地
水域河流、湖泊、水库等河渠、湖泊、水库、滩涂
建设用地人类活动建成区域城镇用地、农村居民点、工矿交通用地
未利用地利用程度较低的土地沙地、戈壁、盐碱地、裸地

一级类能支撑宏观格局分析,二级类则用于更细致的资源调查。比如研究粮食安全,光看"耕地"总面积还不够,要把水田和旱地分开,因为两者的产量潜力、对灌溉的依赖差异很大。分类体系一旦确定,后续所有年份都要沿用同一套标准,否则年份之间无法比较。这也是我后来踩坑最多的地方,后面专门用一个章节讲。

2.2 遥感解译质量控制的几个关键环节

有了分类体系,接下来就是从遥感影像中提取类别。这套数据的基础影像是Landsat系列,早期是Landsat 5的TM传感器,后期涉及Landsat 7 ETM+、Landsat 8 OLI。生产流程大致包括影像选取、几何校正、大气校正、分类解译、人工检查和修正。

分类解译本身是个"脏活累活"。自动分类算法(比如随机森林、最大似然法、支持向量机)能把大部分区域分对,但在山区阴影、水体边界、城市与裸地混杂的地方,机器分错是常态。所以成熟的数据生产流程必须有大量人工目视解译修正环节。一个熟练的解译员盯着屏幕,对照影像纹理和形状,一点点修正错分像元。

质量控制的好坏,直接决定了数据的可信度。判断一套土地利用数据好不好,不能只看它的标题和说明书,更实在的办法是抽几个你研究区内熟悉的点位,叠加上高分辨率影像进行目视检查,看看边界是否合理、类别是否准确。我对这套样例数据做过抽查,在平原农业区和水体边界上的表现是比较稳的,但在城乡结合部这种光谱混杂区,难免有碎斑和错分,这是30米遥感数据的天然局限,使用时要心里有数。

3. 拿到数据后的第一件事:格式、投影与面积统计

3.1 用GDAL快速读取与概览数据

样例数据大多以GeoTIFF或IMG格式存储,每个波段记录一个分类结果。建议拿到数据后不要急着扔进ArcGIS或QGIS里点点点,先写几行Python代码,把数据的基本信息摸清楚。

用GDAL读取是最直接的方式,代码如下:

from osgeo import gdal ds = gdal.Open("landuse_2018_sample.tif") print("投影:", ds.GetProjection()) print("影像尺寸:", ds.RasterXSize, "x", ds.RasterYSize) print("波段数:", ds.RasterCount) # 读取分类栅格 band = ds.GetRasterBand(1) arr = band.ReadAsArray() # 查看类别和像元数量 import numpy as np unique, counts = np.unique(arr, return_counts=True) for cls, cnt in zip(unique, counts): print("类别编码:{} 像元数:{}".format(cls, cnt))

这一步能快速回答三个核心问题:坐标系是什么、数据范围多大、类别分布合不合理。我遇到过不少朋友,下载数据后直接在软件里"添加数据",发现图层是黑的或者色带不正常,其实大概率是没设置好分类色带,不代表数据有问题。先通过代码输出类别编码和像元数,心里就有底了。

3.2 面积统计的正确打开方式

统计各类土地面积是使用这套数据最频繁的操作,但这里有个极其容易出错的知识点:投影坐标系的选择。

如果数据本身是地理坐标系(经纬度,WGS84),那么每个像元的"面积"随着纬度变化是不同——赤道附近一个30米像元投影到平面上,和北纬50度的同一个像元,在地理坐标下对应的实际地表面积并不相同。直接用经纬度坐标下的像元数乘以一个固定值来计算面积,结果必然失真。

正确做法是先把数据投影到等面积投影坐标系下,再做面积统计。对全国尺度的分析,我习惯使用Albers等积圆锥投影(中央经线设为105°E,双标准纬线设为25°N和47°N);做省级或更小区域时,也可以根据当地情况选择合适的高斯-克里格投影或UTM分区投影。

以下是投影转换和面积统计的示例:

from osgeo import gdal, osr src = gdal.Open("landuse_2018_sample.tif") src_srs = osr.SpatialReference() src_srs.ImportFromWkt(src.GetProjection()) # 定义Albers等积投影 dst_srs = osr.SpatialReference() dst_srs.ImportFromProj4( "+proj=aea +lat_1=25 +lat_2=47 +lat_0=0 +lon_0=105 " "+x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs" ) warp = gdal.Warp( "landuse_2018_albers.tif", src, dstSRS=dst_srs, resampleAlg="nearest", # 分类数据必须用最邻近,不能做双线性插值 )

转换后每个像元在投影坐标下的面积为30乘以30等于900平方米。这样统计面积才准确:

ds = gdal.Open("landuse_2018_albers.tif") band = ds.GetRasterBand(1) arr = band.ReadAsArray() pixel_area = 30 * 30 # 900平方米 counts = {} for cls in np.unique(arr): counts[cls] = (arr == cls).sum() * pixel_area / 10000 # 转公顷 for cls, area_ha in sorted(counts.items()): print("类别编码:{} 面积:{:.2f} 公顷".format(cls, area_ha))

3.3 投影选择对面积统计的影响

投影选不对,统计结果差多少?我拿一个中等尺度案例区实际测过。同样的分类栅格,直接在WGS84经纬度坐标下统计面积,结果比Albers投影下统计的结果偏差大约百分之三到五。3%到5%,放在总量研究里可能勉强能接受,但如果拆到二级类,某个小类别面积本来就不大,偏差可能放大到百分之十几,这个误差在研究结论里就完全不可接受了。

所以我的习惯是:在项目开始前就统一约定好投影坐标系,所有年份数据的投影转换一次性完成,后续分析全部基于转换后的数据。不要在中间环节混用不同投影的文件,否则后面做时间对比时,错位问题会让你欲哭无泪。

4. 长时序变化分析:从单期制图到动态监测

4.1 变化检测的思路:同一位置不同年份的对比

做土地利用变化研究,最朴素的思路就是逐像元比较两个年份的分类结果。同一位置,1980年编码是耕地,2018年编码变成长设用地,说明这一个像元发生了从农业到建设的转变。把所有发生变化的像元找出来、统计归类,就能得到一张完整的变化图。

实际操作时,我用一个通用的分析流程:

  1. 将1980年和2018年两个年份的栅格进行投影统一和坐标对齐。
  2. 确保两者的行列数完全一致,如果网格对不上,需要用最近邻重采样对齐到同一个网格。
  3. 逐像元比较分类编码,输出"变化前类别-变化后类别"的编码结果。
  4. 统计不同类型的转换像元数,生成转移矩阵。
  5. 绘制变化空间分布图,找出变化热点区域。

这里最容易出错的是第2步。不同年份的数据可能来自不同批次的拼接和裁剪,网格原点、行列数很可能存在细微差异。我建议在分析前用gdal.Warp统一指定输出网格的参考范围、分辨率,把两个年份数据强制对齐到同一网格。很多看似"数据错了"的问题,追到最后都是网格没对齐。

4.2 转移矩阵计算与热点区域识别

转移矩阵是变化分析的核心成果,它是一张交叉表,行是初始年份的类别,列是末年份的类别,对角线上的数值表示没有变化的面积,非对角线元素则代表各类别之间的转换量。

1980\2018耕地林地草地水域建设用地未利用地
耕地1012.356.230.512.189.74.2
林地22.1800.665.32.415.63.8
草地41.558.91203.55.210.326.8
水域8.91.23.7180.24.12.0
建设用地5.62.31.80.9132.40.5
未利用地9.46.845.23.12.5500.1

(单位为平方公里,此处为演示数据)

从这张表里能读出很多故事。比如你可以看到耕地转为建设用地的面积,就是城市扩张最直接的量化证据;林地与草地之间的双向转换,往往跟生态工程、放牧压力有关;水域转未利用地,则可能提示湖泊萎缩或滩涂出露。

有了转移矩阵,再叠加空间位置信息,就能定位热点区域。我常用一个简单有效的办法:计算每个像元的土地利用变化次数,或者用滑动窗口统计某一窗口内建设用地的增长密度,生成热点图。对某东部案例区的分析结果,我印象很深:1980年代建设用地的扩张相当零散,外围的居民点像亮点一样散布在各处;到2000年之后,明显看到连片大规模的集中扩张,围着主城区逐步向外蔓延。这种空间过程从时间序列数据里看是最直观的,也是30米分辨率数据对比粗分辨率产品最占优的地方。

5. 实际使用中绕不开的坑与处理经验

5.1 分类体系前后调整导致的不连续

长时序数据最大的隐性风险,是不同年份之间分类体系不一致。这个坑我踩过一次,说起来都是泪。某次我在分析中把早期某个类别编码当成了林地,但实际数据在某一年把编码规则调整成了灌木林归入草地,导致那一年之后统计的林地面积突然断崖式下降。如果没发现这个调整,很容易得出一个完全错误的"生态退化"结论。

避免的办法,说穿了就是两个字:检查。每接入一个新年份的数据,先对全图的类别编码做一次频数统计,跟上一个年份比对;对异常突变的类别,抽样切出影像叠上去看。分类体系的一致性是一切长时序分析的前提,这一步省了,后面所有统计都可能翻车。我在实际工作中还会专门整理一份"数据字典"笔记,记录每个年份的编码含义、投影信息、处理版本,这比把信息留在脑子里可靠得多。

5.2 拼接与边界融合问题

全国数据的生产,通常是分幅分区域分别解译再拼接。这就会带来一个常见问题:区域接边处的类别突变。尤其是在两个省的交界地带,由于原始影像时相不同、解译人员不同,可能出现同一土地利用类型在边界两侧被分成不同类别的情况。

这类问题在样例数据中可能不明显,因为样例通常抽取的是局部完整区域,不太会暴露接边。但一旦你扩展到大范围分析,接边处的差异会直接影响局部统计结果。处理思路是:分析前先把研究区按行政区或自然区划切出来,观察研究区内部是否有沿边界线的条带状异常,如果有,考虑剔除异常条带或者以某一边为标准进行人工修正。接边问题不可能完全避免,但至少要意识到它的存在,并且不要为了追求"拼接漂亮"而随意修改分类结果,真正的处理依据始终是原始影像。

5.3 样例数据用于预实验的边界

必须说清楚:样例数据不等于完整数据。它的定位是"体验版""试用版",能支撑流程验证和初步探索,但绝不能直接把样例数据统计结果当作正式研究结论来发表或上报。

我之前带一个分析任务,对方用样例数据的范围做了一版某区域的土地利用结构统计,发现河流面积占比明显偏低,一度怀疑数据错了。排查后发现,样例数据抽取的区域本身就不包括那条河的全部河段,统计结果当然不完整。这是"样例数据"和"分析数据"的边界问题,不是数据质量问题。用这套数据做预实验,跑通方法、验证思路完全没问题;正式出结果,必须替换为完整版本数据,并且重新验证数据覆盖范围与研究区一致。

5.4 预处理时的分类栅格重采样禁忌

这个坑单独提一下,因为它太隐蔽了。分类栅格和连续变量栅格在重采样时的处理逻辑完全不同。对气温、高程这类连续变量,双线性插值或三次卷积插值是合理的;但对分类编码,比如11代表水田、12代表旱地,插值运算会插出一个"12.3"之类的数字,完全没有物理意义。

统一网格时,分类数据只能使用最邻近法(nearest)重采样。我在前面示例代码里也特别标注了这一点。另一个容易忽略的问题是,面积统计必须在重采样之前还是之后?答案是:如果你用最邻近法重采样,面积基本不受影响,因为每个像元的取值只是从原始像元中继承;但如果用了任何插值方法,类别的面积比例可能被扭曲。所以规范操作是先重采样到统一网格,再做面积统计,前提是重采样参数必须正确。

6. 这套数据的应用延伸与后续扩展

6.1 结合社会经济数据做驱动因素分析

土地利用变化很少是纯自然过程,更多时候是社会经济发展的空间投影。把这套土地利用数据和人口、GDP、交通路网数据叠加起来,就能做驱动因素分析。比如某区域建设用地扩张快,它旁边的路网密度、经济增速是否也显著高?林地减少的区域,是不是和人口密度增长高度相关?

这种分析在实践中有成熟套路:把研究区分成若干格网,在每个格网里统计土地利用变化面积、人口增长率、夜间灯光亮度均值、到最近主要道路的距离等变量,然后做相关性分析或回归建模。操作不复杂,但结论的故事性很强。我记得一个案例中,把夜光数据和建设用地变化叠到同一张图上,扩张热点和灯光亮带几乎是完全重合的,这种直观的可视化效果,比任何文字都更有说服力。

6.2 与更高分辨率数据衔接

有些研究课题做着做着,就能感到30米分辨率不够用了。比如要识别城中村内部形态、要区分单块农田的具体作物类型,30米数据只能提供一个底图层,无法支撑精细到地块的判读。这个时候,合理的技术策略是:用这套30米长时序数据做趋势判断和大格局分析,然后选取典型区,结合2米、1米或0.5米的高分辨率影像做局部精细化补充。

这样"粗细搭配"的做法,比一上来就全部用高分辨率数据更务实。一方面,高分辨率影像的历史积累有限,很难覆盖1980年代;另一方面,全区域高分辨率解译的成本极其高昂。用30米数据锁定格局和趋势,用高分辨率数据锚定精度和细节,是当前区域土地利用研究比较成熟的工作模式。我也见过把30米分类结果作为先验样本,去训练高分辨率影像的深度学习分类模型,效果比从零标注好不少。

这让我想到一个趋势:随着遥感影像解译技术不断进步,这类长时序中分辨率产品的更新频率会越来越快。以前做一个十年间隔的分类更新已经算高频了,现在更常见的需求是每年更新、动态监测。这套1980到2018年数据打下的方法基础,完全可以迁移到后续年份的扩展分析中。还是那句话:数据会更新,工具会升级,但"理解分类体系、校准投影、对齐网格、逐像元比较"这套基本功,永远是土地利用分析的地基。

在实际操作中我的经验是,每接一批新数据,先把这套基本功完整走一遍——读数据、查投影、对编码、做统计、画变化图——哪怕结论已经能猜个大概,这个过程也绝不能跳。地表覆盖的世界,看起来就是一张张花花绿绿的图,但每张图背后都有一套语义逻辑,弄懂它,数据才会真正为你所用。

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

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

立即咨询