使用geemap进行全球土地覆盖数据可视化与分析
前言
geemap是一个基于Google Earth Engine (GEE)的Python库,它提供了丰富的功能来简化GEE数据的使用和分析。本文将重点介绍如何使用geemap对全球土地覆盖数据进行可视化和分析。
准备工作
安装geemap
首先需要安装geemap库:
pip install geemap
导入必要的库
import ee
import geemap
初始化GEE
geemap.ee_initialize()
可视化全球土地覆盖数据
创建Dynamic World土地覆盖合成图
Dynamic World是一个近实时的全球土地覆盖数据集,提供9种土地覆盖类型的高分辨率分类。
# 创建地图
Map = geemap.Map()
Map.add_basemap("HYBRID")
# 设置感兴趣区域
region = ee.Geometry.BBox(-89.7088, 42.9006, -89.0647, 43.2167)
Map.centerObject(region)
# 设置日期范围
start_date = "2021-01-01"
end_date = "2022-01-01"
# 创建Dynamic World土地覆盖合成图
landcover = geemap.dynamic_world(region, start_date, end_date, clip=True, return_type="class")
# 定义可视化参数
dwVisParams = {
"min": 0,
"max": 8,
"palette": [
"#419BDF", # 水体
"#397D49", # 树木
"#88B053", # 草地
"#7A87C6", # 湿地
"#E49635", # 建筑
"#DFC35A", # 裸地
"#C4281B", # 农田
"#A59B8F", # 冰雪
"#B39FE1", # 云层
],
}
# 添加图层
Map.addLayer(landcover, dwVisParams, "Land Cover Class")
Map.add_legend(title="Dynamic World Land Cover", builtin_legend="Dynamic_World")
Map
比较不同全球土地覆盖数据集
ESA全球土地覆盖数据
ESA WorldCover提供10米分辨率的全球土地覆盖数据。
Map = geemap.Map()
esa = ee.ImageCollection("ESA/WorldCover/v200").first()
esa_vis = {"bands": ["Map"]}
Map.addLayer(esa, esa_vis, "ESA LC 2021")
Map.add_legend(title="ESA Land Cover", builtin_legend="ESA_WorldCover")
Map
ESRI全球土地覆盖数据
ESRI提供10米分辨率的全球土地覆盖时间序列数据。
Map = geemap.Map()
esri = ee.ImageCollection("projects/sat-io/open-datasets/landcover/ESRI_Global-LULC_10m_TS").filterDate(start_date, end_date).mosaic()
esri_vis = {
"min": 1,
"max": 11,
"palette": [
"#1A5BAB", # 水体
"#358221", # 树木
"#000000", # 草地
"#87D19E", # 湿地
"#FFDB5C", # 农田
"#000000", # 灌木
"#ED022A", # 建筑
"#EDE9E4", # 裸地
"#F2FAFF", # 冰雪
"#C8C8C8", # 云层
"#C6AD8D", # 其他
],
}
Map.addLayer(esri, esri_vis, "ESRI LC 2021")
Map.add_legend(title="ESRI Land Cover", builtin_legend="ESRI_LandCover_TS")
Map
创建Dynamic World时间序列
Map = geemap.Map()
Map.add_basemap("HYBRID")
# 设置时间范围
start_date = "2017-01-01"
end_date = "2023-01-01"
# 创建时间序列
images = geemap.dynamic_world_timeseries(region, start_date, end_date, frequency="year", return_type="class")
# 添加时间序列检查器
Map.ts_inspector(images, left_vis=dwVisParams, date_format="YYYY")
Map.add_legend(title="Dynamic World Land Cover", builtin_legend="Dynamic_World")
Map
分析全球土地覆盖数据
计算各类土地覆盖面积
# 计算ESA土地覆盖各类型面积
df = geemap.image_area_by_group(
esa, scale=1000, denominator=1e6, decimal_places=4, verbose=True
)
# 添加类别名称
esa_dict = {
"10 Trees": "006400",
"20 Shrubland": "ffbb22",
"30 Grassland": "ffff4c",
"40 Cropland": "f096ff",
"50 Built-up": "fa0000",
"60 Barren / sparse vegetation": "b4b4b4",
"70 Snow and ice": "f0f0f0",
"80 Open water": "0064c8",
"90 Herbaceous wetland": "0096a0",
"95 Mangroves": "00cf75",
"100 Moss and lichen": "fae6a0",
}
df["class"] = list(esa_dict.keys())
# 绘制柱状图
geemap.bar_chart(
df,
x="class",
y="area",
x_label="Land Cover Type",
y_label="Area (km2)",
)
# 绘制饼图
geemap.pie_chart(df, names="class", values="area", height=500)
按国家统计土地覆盖数据
# 加载国家边界数据
countries = ee.FeatureCollection(geemap.examples.get_ee_path("countries"))
Map.addLayer(countries, {}, "Countries")
# 按国家统计土地覆盖数据
geemap.zonal_stats_by_group(
esa,
countries,
"esa_2021_country.csv",
stat_type="SUM",
denominator=1e6,
scale=1000,
)
# 可视化各国森林面积
geemap.bar_chart(
"esa_2021_country.csv",
x="NAME",
y="Class_10",
max_rows=30,
x_label="Country",
y_label="Forest Area (km2)",
)
总结
本文介绍了如何使用geemap对全球土地覆盖数据进行可视化和分析,包括:
- 可视化Dynamic World、ESA和ESRI等不同来源的土地覆盖数据
- 创建土地覆盖时间序列动画
- 计算各类土地覆盖的面积
- 按国家统计土地覆盖数据并可视化
geemap提供了简单易用的接口,使得在Python环境中处理GEE数据变得更加高效和便捷。通过这些工具,研究人员可以更轻松地进行全球土地覆盖变化的监测和分析。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考