利用Sentinel2 L2A数据提取水体

Posted by WT on April 8, 2024

问题

江河湖泊中的水体提取

思路

哨兵2数据从时空分辨率、易获取性方面均有优势,选择该数据的另一个原因是在github上找到了相关能用的算法和代码。
文章
代码
这个github用户还有一些数据下载以及水相关的算法代码,比如:Sentinel1 flood finderGEES2DownloaderWaterDetect algorithm for the Microsoft Planetary Computer

步骤

运行环境:Python 3.6.13

下载Sentinel L2A 数据

本文使用了以前下载的北京的1景(2023-08-22)和3景乐山(2023-04-01 2023-05-16 2023-08-22)S2数据

安装waterdetect包

安装WaterDetect前需要安装Python GDAL包

> pip install waterdetect

监测水体

将S2的压缩包解压放在一个目录下,并新建一个输出目录。
启动Anaconda的waterdetect虚拟环境,在命令行中打开。
输入一下命令

>  M:\WT\water>waterdetect -i M:/WT/water/waterleshan2 -o M:/WT/waterresult -p S2_S2COR

-i 输入目录,程序会遍历目录下的文件逐个计算 -o 输出目录
-p 有三种格式,数据来自ESA官方,所以使用 S2_S2COR

如果出现 无坐标系的错误,就是proj.db不同版本的冲突,以前写过一篇文章 Python 中的Rasterio与Postgresql冲突,可以卸载软件,也可以把系统变量中的PROJ_LIB变量的名字修改了.

GIS数据可视化

SNAP软件可以直接打开Sentinel 2数据,导出RGB时建议使用Raster–>subset 中的band subset提取原始数据RGB到新的数据集,然后将新的数据集使用File–>export导出。在RGB可视化窗口右键导出tif没有坐标系。
北京20230822提取结果

run1
run1

乐山20230401提取结果
run1 乐山20230516提取结果
run1
乐山20230708提取结果
run1