Landsat年度合成影像数据集(1985-2023)入门指南:从数据获取到分析实战

1次阅读
没有评论

共计 1911 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

1. 数据集价值与应用场景

Landsat 年度无云合成影像就像是地球的年度体检报告。1985 年至今的连续观测数据,在以下领域特别有用:

Landsat 年度合成影像数据集 (1985-2023) 入门指南:从数据获取到分析实战

  • 农业监测:通过 NDVI 指数追踪作物长势,辅助产量预估
  • 森林变化:检测非法砍伐或森林再生(比如巴西雨林变化)
  • 城市扩张:量化城镇化进程(参考深圳 1985vs2023 的对比)
  • 冰川退缩:阿拉斯加冰川每年后退几十米的清晰证据

2. 数据获取渠道对比

2.1 Google Earth Engine(GEE)

  • 优点
  • 直接调用 LANDSAT/LT05/C02/T1_L2 等数据集
  • 内置年度合成函数 median() 快速生成无云影像
  • 无需下载,云端计算省流量
# GEE 获取 2000 年合成影像示例代码
import ee
ee.Initialize()

collection = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2') \
    .filterDate('2000-01-01', '2000-12-31') \
    .median() \
    .select('SR_B.')  # 选择地表反射率波段

2.2 USGS EarthExplorer

  • 优点
  • 原始数据最全,包含 L1TP 级精密校正数据
  • 可批量下载整景影像
  • 缺点
  • 需要手动拼接和云过滤
  • 下载速度较慢(建议用 wget 批量下载)

3. 预处理全流程

3.1 辐射校正

关键两步:

  1. DN 值转 TOA 反射率(大气顶层)

    # rasterio 处理示例
    with rasterio.open('LT05_2000.tif') as src:
        dn = src.read(3)  # 读取红波段
        radiance = dn * 0.0003342 + 0.1  # Landsat5 的增益 / 偏置参数
        toa = radiance / np.cos(sun_zenith_rad)  # 太阳高度角校正

  2. 转地表反射率(SR) – 使用 LEDAPS 或 LaSRC 算法

3.2 云掩膜生成

推荐使用 QA 波段:

# 提取云掩膜(以 Landsat8 为例)qa = src.read(9)  # QA 波段
cloud_mask = (qa & 0b10000000) > 0  # 高位云标志
clean_data = np.where(cloud_mask, np.nan, toa)  # 云区置空

4. 典型分析实战

4.1 NDVI 计算

# 计算 2000 年 NDVI
with rasterio.open('LT05_2000_B3.tif') as red, \
     rasterio.open('LT05_2000_B4.tif') as nir:

    ndvi = (nir.read(1) - red.read(1)) / (nir.read(1) + red.read(1))

    # 保存结果
    profile = red.profile
    profile.update(dtype=rasterio.float32)
    with rasterio.open('ndvi_2000.tif', 'w', **profile) as dst:
        dst.write(ndvi.astype(np.float32), 1)

4.2 变化检测(2000vs2020)

# 计算植被减少区域
ndvi_diff = ndvi_2020 - ndvi_2000
loss_area = (ndvi_diff < -0.2).sum() * 30 * 30  # 30m 分辨率转面积㎡

5. 大数据优化技巧

5.1 分块处理

# 512x512 分块读取
block_shape = (512, 512)
for ji, window in rasterio.windows.WindowMethods.block_windows(src.transform, *block_shape):
    chunk = src.read(window=window)
    # 处理分块数据...

5.2 Dask 并行

import dask.array as da

data = da.from_zarr('landsat_stack.zarr', chunks=(256,256))
ndvi = (data[3] - data[2]) / (data[3] + data[2])  # 延迟计算
ndvi.compute(num_workers=4)  # 启动 4 核并行

6. 避坑指南

  • 坐标系陷阱 :WGS84 与 UTM 转换时注意gdal.Warp 的 resampling 方法
  • 异常值处理 :Landsat7 的 SLC-off 条带建议用focal_mean 插值
  • 内存溢出 :处理大区域时强制分块,避免numpy.memmap 崩溃

7. 进阶思考

  1. 如何利用时间序列检测季节性洪水模式?
  2. 城市热岛效应分析应该用哪个波段组合?
  3. 当需要处理 100+ 年份数据时,数据库存储方案如何设计?

小贴士:第一次处理建议从单景影像开始,熟悉流程后再扩展到大区域。USGS 提供的 M2L(Map-to-List)工具能帮助批量裁剪感兴趣区。

正文完
 0
评论(没有评论)