使用QGIS分区统计工具实现栅格分类数据的分区计算面积——GlobeLand30地表覆盖数据为例

在栅格分析中,常常碰到使用分类后的栅格数据按照特定分区统计面积的需求,今天,我将使用QGIS的分区统计工具,演示地表覆盖数据按照地表分类分区域统计面积的过程,希望能给有这方面需求的朋友提供参考。

 01 数据获取

本文选择GlobeLand30提供的2020年地表覆盖数据作为演示数据。30米全球地表覆盖数据GlobeLand30是中国研制的30米空间分辨率全球地表覆盖数据,目前,GlobeLand30最新数据为 2020版。

打开Global官网下载研究区域数据,网址为:http://www.globallandcover.com/defaults.html?src=/Scripts/map/defaults/download.html&head=download&type=data

下载界面有分幅图层,并显示图幅编号,可以根据图幅号、坐标选取或者直接在地图勾画想要下载的数据范围。点击【确定】按钮后,在下方的结果列表将看到的数据列表,确认无误即可点击【提交下载申请】按钮,填写使用基本信息后得到对应数据。

 02 GlobalLand30数据预处理

  • 使用研究区域边界裁剪栅格数据

启动QGIS,找到并打开下载的数据,本文使用的是图幅N49_35_2020lc030.tif,加载研究区域边界,确定二者投影一致。

 

点击菜单【栅格】->【提取】->【按掩膜图层裁剪栅格】,弹出设置对话框,参数如下:

输入图层:n49_35_2020lc030;

掩膜图层:boundary;

已裁剪(掩膜):任意保存路径\ clip_to_boundary.tif。

其他参数保持默认,点击【运行】将地表覆盖数据裁剪到研究区域。

 

点击【图层】面板的【打开图层样式面板】按钮,使用“调色板/唯一值”渲染。数据自带的颜色表有很多冗余,直接点击下方的【分类】按钮,将重新计算栅格数据的值,如下图:

 

根据GlobalLand30的数据说明,本次裁剪出来的研究区域地表覆盖包括耕地(10)、林地(20)、草地(30)、湿地(50)、水体(60)和人造地表(80)六种地表覆盖类型。

  • 分类提取覆盖

目前,QGIS的分区统计将分区内的像元视为单一值进行统计,即不能统计像元分类属性,因此,本文采用分类提取覆盖类型的方式,将同一覆盖类型提取为单独的图层,再进行分区统计。

以提取耕地为例,点击菜单【栅格】->【栅格计算器】,打开栅格计算器,设置如下参数:

栅格计算表达式:"clip_to_boundary@1" = 10;

输出图层:任意文件保存路径\ extract_class10.tif。

其他参数保持默认,点击【OK】按钮,完成提取耕地。

 

按照上述表达式,结果栅格图层将由0和1组成:原地类为10的像元,结果图层对应的像元为1,其他的分类结果图层的像元为0。返回QGIS地图窗口,查看输出结果:

 

用同样的方式提取出林地、草地、湿地、水体和人造地表。至此,得到按分类存储的地表覆盖图层数据,为分区统计做准备。

 03 矢量区域生成

分区统计中,所使用的分区一般分为:现有行政区划分区和规则网格分区。

  • 行政区划作为统计区域

即按照现有行政区划对栅格数据进行分区统计,行政区划的级别可以是国家/地区级、省级、地市级、县级、乡镇级等。分区统计的研究区域范围越大,算法运行的时间越长。

例如下图为山西省地市级的区划界线。

  • 规则格网(grid)作为统计区域

按照规则格网进行面积分区统计是另一种常见的统计方式。QGIS中提供规则格网的生成工具,点击菜单【地理处理】->【工具箱】,在打开的【工具箱】面板搜索框中输入“grid”,双击“矢量创建”分类下的“创建网格”算法。

 

在弹出的【创建网格】对话框中,设置参数如下:

网格类型:矩形(面);

网格范围:点击右边的【…】按钮,从下拉菜单中选择“extract_class10”图层;

水平间隔:1200;

垂直间隔:1200;

输出文件:任意文件存储路径\grid_1200m.shp。

其他参数保持默认,点击【运行】按钮,生成1200*1200米的规则网格。

 

如果矢量规则网格的大小设置为栅格数据分辨率的整数倍,例如本例中1200米为30米的整数倍,则每个矢量网格的边界将正好与像元的边界重合,否则网格边界将可能出现与像元部分重合的情况,在分区统计中需要注意边界像元的归属。返回QGIS地图主窗口,查看生成的网格效果:

 

接下来,我们使用该网格对耕地做分区统计,并计算耕地面积。

 04 分区统计

  • 分区统计

点击菜单【处理工具箱】->【工具箱】,在工具箱面板中找到“栅格分析”->“分区统计”工具,双击打开设置对话框,设置参数如下:

输入图层:此处指的是分区图层,即grid_1200m;

栅格图层:被统计的栅格图层,设置为extract_class10;

输出列的前缀:统计结果将作为属性值存储在分区统计图层中,本文设置属性字段的前缀为“g10_”,表示GlobalLand30中分类代码为10的地类统计信息(前缀可依据需要指定)。

要计算的统计信息:根据需要勾选要计算的统计信息,可统计如下取值:计数、总和、均值、中值、标准差、最大值、最小值、极差(最大值和最小值之差)、寡数(出现次数最少的数)、众数(出现次数最多的数)、变异度(唯一的数量)、方差。本例中选择统计计数和总和,其他不需要的选项取消勾选即可。

分区统计输出:任意文件存储路径\zonal_result.shp。

其他参数保持默认,点击【运行】按钮,计算统计值。

 

返回QGIS窗口,可在【图层】面板中看到结果图层zonal_result,几何图形与grid_1200m一样,右键点击该图层,从弹出菜单中选择【打开属性表】,即可看到统计生成的结果存储在“g10_count”和“g10_sum”两个字段中,分别代表计数和总和。

 

选择一些具有代表性的区域初步观察统计结果,例如下面区域中,统计为1600个像元,其中15个像元为耕地。

 

  • 计算面积

点击【字段计算器】按钮,新建面积字段“Area”,设置数据类型为“小数(实型)”,在表达式输入框中输入如下表达式即可得到以平方千米为单位的分区统计面积:

"g10_sum" *(30*30)/1000000

上述表达式中,g10_sum为每个区域像元数量,30*30为每个像元的面积,单位为平方米,除以1000000即可将单位换算为平方千米。

用相同的方法可计算出林地、草地、灌木、湿地等分类的面积。

 05 小结

分区统计工具是QGIS内置的栅格分析算法,使用简单方便,缺点是不能按照栅格分类取值进行统计,因此在使用分区统计工具前,需要先将栅格按照分类提取为独立的图层。统计的结果需要将图层的属性字段进行合并,或者借助于Excel等外部工具进行数据最后成果整理。

关于栅格数据按分类计算面积,还有其他的实现思路,例如栅格数据矢量化后与统计区域做空间叠加等,各个方法的处理效率和结果误差并不相同。

大家平时都是用什么方法做栅格数据分区计算面积呢?欢迎分享您的经验~


版权声明

本文欢迎转载,转载时请注明出处。

猜你喜欢

转载自blog.csdn.net/QGISClass/article/details/111051081