在土地利用研究中,我们常常需要统计不同类型的用地面积,例如耕地、森林、草地、水体等。今天,我们用Python计算研究区内不同土地利用类型的面积。
一、运行结果
print研究区每一种土地利用类型的面积,如下图所示。
二、代码
本次我们以武汉大学的CLCD土地利用数据为例,其空间分辨率为30m,采用Albers_Conic_Equal_Area坐标系,分类系统详见下图。
先将数据掩膜到研究区,保存为tif文件,替换路径,运行即可。
import rasterio
import numpy as np
# 读取四川土地利用数据
raster_path = r"E:\数据都在这里\四川\area\四川.tif"
with rasterio.open(raster_path) as src:
land_use = src.read(1) # 读取第一波段
pixel_size = src.res[0] # 获取像元大小(应为 30m)
unique_classes, counts = np.unique(land_use, return_counts=True)
# 计算像元面积(平方千米)
pixel_area_km2 = (pixel_size ** 2) / 1e6 # 30m * 30m / 1,000,000 = 0.0009 km²
# 定义土地类型对应表
land_use_types = {
1: "Cropland",
2: "Forest",
3: "Shrub",
4: "Grassland",
5: "Water",
6: "Snow/Ice",
7: "Barren",
8: "Impervious",
9: "Wetland"
}
# 计算每个类别的面积
area_results = {}
for cls, count in zip(unique_classes, counts):
if cls in land_use_types:
area_km2 = count * pixel_area_km2
area_results[land_use_types[cls]] = area_km2
# 输出结果
for land_type, area in area_results.items():
print(f"{land_type}: {area:.2f} km²")