使用geemap进行全球土地覆盖数据可视化与分析

使用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对全球土地覆盖数据进行可视化和分析,包括:

  1. 可视化Dynamic World、ESA和ESRI等不同来源的土地覆盖数据
  2. 创建土地覆盖时间序列动画
  3. 计算各类土地覆盖的面积
  4. 按国家统计土地覆盖数据并可视化

geemap提供了简单易用的接口,使得在Python环境中处理GEE数据变得更加高效和便捷。通过这些工具,研究人员可以更轻松地进行全球土地覆盖变化的监测和分析。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

<think>好的,用户问的是如何使用geemap的addLayer功能来获取图层的面积。首先,我需要确认用户的问题具体是什么。geemap是一个基于GEE的Python库,用于地理空间分析可视化。addLayer通常用于将GEE图层添加到地图中,但用户可能误解了addLayer的功能,以为它能直接计算面积。 接下来,我应该思考如何正确计算图层面积。在GEE中,计算面积通常需要先获取图像的区域,然后使用reduceRegion或者reduceArea等方法。可能用户需要的是在添加图层后,如何计算该图层覆盖的面积,并将结果显示出来。 然后,我需要考虑用户可能的背景。可能用户不熟悉GEE的数据处理流程,或者对geemap的某些功能不熟悉。需要分步骤解释:先添加图层,再计算面积,可能需要将矢量数据转换为区域,或者处理栅格数据的像素统计。 还需要检查可能的错误点,比如确保数据是二值化的(如分类后的土地覆盖类型),或者矢量数据的几何是否正确。此外,面积计算需要考虑投影和单位转换,例如将平方米转换为平方公里或公顷。 最后,我应该提供一个清晰的步骤示例,包括导入库、初始化地图、加载数据、添加图层、计算面积的方法,并解释每个步骤的作用和注意事项。同时提醒用户可能需要根据具体数据类型调整代码,比如使用clip限制区域或处理分类结果。</think>在geemap中,使用addLayer()直接获取图层面积需要结合Google Earth Engine(GEE)的计算方法。以下是获取图层面积的完整步骤: 1. **基础地图初始化** ```python import geemap Map = geemap.Map() Map ``` 2. **加载数据示例** ```python # 示例:加载全球夜间灯光数据 ntl = ee.Image('NOAA/VIIRS/DNB/MONTHLY_V1/VCMSLCFG/202101').select('avg_rad') ``` 3. **添加图层并计算面积** ```python # 定义阈值创建二值掩膜 threshold = 5 mask = ntl.gt(threshold) # 值大于5的像素设为1,其他为0 # 计算亮区面积(单位:平方米) area = mask.multiply(ee.Image.pixelArea()) # 每个有效像素乘以面积 stats = area.reduceRegion( reducer=ee.Reducer.sum(), geometry=Map.user_roi, # 需要先绘制感兴趣区域 scale=1000, maxPixels=1e13 ) # 转换为平方公里 area_sqkm = ee.Number(stats.get('avg_rad')).divide(1e6).getInfo() print(f"亮区面积:{area_sqkm:.2f} 平方公里") ``` 4. **可视化叠加** ```python # 添加原始图层 Map.addLayer(ntl, {'min': 0, 'max': 60}, 'Night Lights') # 叠加显示亮区掩膜 Map.addLayer(mask.updateMask(mask), {'palette': ['red']}, 'Bright Areas (>5μW/cm²/sr)') ``` **关键参数说明:** - `ee.Image.pixelArea()`:自动计算每个像素的真实面积(考虑投影变形) - `reduceRegion()`:需要指定计算范围和空间分辨率 - 建议通过`Map.draw_features`先绘制计算区域 **注意事项:** 1. 适用于栅格数据(如分类结果、阈值提取区域) 2. 矢量数据面积计算应使用`geometry.area()` 3. 全球计算时建议设置合适的scale参数(通常为数据原始分辨率) 4. 复杂区域建议先执行`.clip(geometry)`限制计算范围 完整案例可参考geemap官方示例:https://geemap.org/notebooks/23_zonal_stats/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭蔷意Ward

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值