欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

GEE:探索北运河流域水体面积 30 年来的变化 [逐年变化

最编程 2024-06-30 11:34:52
...

目录

  • 前言
  • 一、分析步骤
  • 二、python代码
    • 1、加载流域范围
    • 2、影像截取与合成
    • 3、NDWI计算与水面提取
    • 4、统计分析
  • 三、对比分析
  • 四、小结与讨论


前言

使用GEE分析流域内水体面积变化特征,以北运河流域为例

同区域分析参见:
GEE:北运河流域土地利用的重分类

分析区域如下:
在这里插入图片描述


一、分析步骤

主要分析步骤:

分析流域
提取流域年度影像
NDWI计算
水面提取
面积计算
统计制图

二、python代码

1、加载流域范围

python代码如下

# 添加显示底图,选取高德地图
Map = geemap.Map()
Map.add_basemap('HYBRID')

# 导入流域范围
basin_shp = '../world_basins/byh.shp'
basin_bj = geemap.shp_to_ee(basin_shp)
roi = basin_bj.geometry()
# 添加显示
Map.addLayer(ee.Image().paint(roi, 0, 2), {'palette':'red'}, 'roi')
Map.centerObject(basin_bj)
Map

结果如下:
在这里插入图片描述

2、影像截取与合成

  • geemap.landsat_timeseries()

python代码如下:

# 导入影像数据,年度合成
images = geemap.landsat_timeseries(roi=roi,
                                    start_year=1984,
                                    end_year=2020,
                                    start_date='01-01',
                                    end_date='12-31')
# 查看影像波段
first = images.first()
first.bandNames().getInfo()
# ['Blue', 'Green', 'Red', 'NIR', 'SWIR1', 'SWIR2', 'pixel_qa', 'NBR']
# 添加显示
Map.addLayer(first, {'bands':['SWIR2', 'SWIR1', 'Green'], 'min':0, 'max':3000}, 'first image')

结果如下:
在这里插入图片描述

3、NDWI计算与水面提取

  • normalizedDifference()

  • ee.Image.pixelArea()
    在这里插入图片描述 - ee.Image.reduceRegion()
    在这里插入图片描述

python代码如下:

def ndwi_cac(image):
    ndwi_image = image.normalizedDifference(['Green', 'SWIR1']).rename('ndwi')
    return ndwi_image.gt(0).selfMask()
    
# 获得水面
ndwi_water = images.map(ndwi_cac)
Map.addLayer(ndwi_water.first(), {'palette':'blue'}, 'first water')

# 计算水面面积,单位按照km2计
def cal_area(image):
    pixel_area = image.multiply(ee.Image.pixelArea()).divide(1e6)
    img_area = pixel_area.reduceRegion(**{
        'reducer':ee.Reducer.sum(),
        'geometry':roi,
        'scale':30,
        'maxPixels':1e13
    })
    return image.set({'water_area':img_area})

water_areas = ndwi_water.map(cal_area)
water_stats = water_areas.aggregate_array('water_area').getInfo()
water_stats

结果如下:
[{‘ndwi’: 35.52171285398048},
{‘ndwi’: 49.82769552462259},
{‘ndwi’: 95.52709095289183},
{‘ndwi’: 88.0812142082916},
{‘ndwi’: 93.93069886911051},
{‘ndwi’: 80.60827039904903},
{‘ndwi’: 136.78296227087307},
{‘ndwi’: 108.33794441999756},
{‘ndwi’: 171.22477916253243},
{‘ndwi’: 127.52933278774321},
{‘ndwi’: 86.3748384304267},
{‘ndwi’: 112.22821871601487},
{‘ndwi’: 101.4823960050295},
{‘ndwi’: 89.49672596974511},
{‘ndwi’: 295.2877416742835},
{‘ndwi’: 80.7449547841241},
{‘ndwi’: 120.11593294853824},
{‘ndwi’: 134.62668476349447},
{‘ndwi’: 149.84151247550966},
{‘ndwi’: 236.29430841558016},
{‘ndwi’: 158.22021181601244},
{‘ndwi’: 70.20089856972656},
{‘ndwi’: 97.93744088662496},
{‘ndwi’: 108.04200576387466},
{‘ndwi’: 107.22519927537127},
{‘ndwi’: 63.4901824073373},
{‘ndwi’: 85.06409974042677},
{‘ndwi’: 74.55227930805393},
{‘ndwi’: 221.75472506976308},
{‘ndwi’: 85.00424085790755},
{‘ndwi’: 60.99660440626263},
{‘ndwi’: 68.4423834487381},
{‘ndwi’: 67.66773335986407},
{‘ndwi’: 84.48483915371168},
{‘ndwi’: 76.99267855924732},
{‘ndwi’: 58.5695615691552},
{‘ndwi’: 87.93523549212745}]

4、统计分析

python代码如下:

# 时间序列变化柱状图显示
import matplotlib.pyplot as plt

x = list(range(1984, 2021))
y = [item.get('ndwi') for item in water_stats]

plt.bar(x, y, align='center', alpha=0.5)
plt.ylabel('Area hm2')
plt.title('surface water dynamics in BYH')
plt.show()

在这里插入图片描述


三、对比分析

拟采用JRC数据直接对水面变化进行分析,其python代码如下:
【有待分析。。。】


结果如下:
二者计算结果的差异比较分析:

  1. 可以看出,

四、小结与讨论

  1. 分析了北运河流域长时间序列水面变化特征
  2. 有待探索的问题,可考虑不同分区的水面变化,分布不同行政区或者流域上下游区域的水面时空变化

参考:
  • https://geemap.org/notebooks/tn_surface_water/
  • https://developers.google.com/earth-engine/apidocs/ee-image-pixelarea?hl=en