利用Python实现对葵花8号L1级反射率数据进行云格点剔除的操作实例

本文介绍了如何使用Python中的gdal库,针对葵花8号影像的L1级反射率数据,结合L2级云检测产品,通过云类型筛选剔除有云格点,最终将nc格式转换为tif格式存储。详细步骤包括读取数据、质量控制和结果保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、内容介绍

本文利用python下的gdal库,对葵花8号影像L1级反射率数据,基于L2级的云检测产品数据
(CLP)下的云类型对有云格点数据进行筛选,剔除操作,得到剔除云格点的反射率数据。
本文的反射率数据和云类型数据均为tif格式,需要将原始数据nc格式转为tif格式。

二、代码分块讲解

1、导入所需的库

import os
import numpy as np
from osgeo import gdal
import glob

2、输入与输出路径设置

AOD_file_path = r"F:\PM2.5反演代码\test_cloud\AOD"
cloud_file_path = r"F:\PM2.5反演代码\test_cloud\cloud_type"
out_put = r"F:\PM2.5反演代码\test_cloud\AOD_clear"

3、读取输入路径下的反射率数据和云类型数据,数据格式均为tif

AOD_file_list =  glob.glob(AOD_file_path + '/*.tif')
cloud_file_list = glob.glob(cloud_file_path + '/*.tif')

4、依据命名匹配对应反射率下的云类型数据

for AOD_file in AOD_file_list:   #循环读取
    AOD_name = AOD_file.split("\\")[-1].split("_")[0]

    for cd in cloud_file_list:
        cd_name = cd.split("\\")[-1].split("_")[0]
        if AOD_name in cd_name:
            AOD =  AOD_file
            cloud =  cd

5、读取反射率数据和云格点数据为矩阵格式

#AOT数据读取
AOD_raster = gdal.Open(AOD)
AOD_array = AOD_raster.ReadAsArray()
#cloud数据读取
cd_raster = gdal.Open(cloud)
cd_array = cd_raster.ReadAsArray()

6、对云格点数据进行剔除(葵花8号影像云格点数据clear = 0,其他为有云)

#质量筛选
AOD_result = np.where(cd_array != 0,np.nan,AOD_array)

7、读取影像参数

#影像参数读取
row = AOD_raster.RasterYSize
col = AOD_raster.RasterXSize
geotransform = AOD_raster.GetGeoTransform()
projection=AOD_raster.GetProjection()

8、保存结果

#保存结果
pos = out_put + os.sep + AOD_name + ".tif"
driver=gdal.GetDriverByName("Gtiff")
result = driver.Create(pos,row,col,1,gdal.GDT_Float32)
result.SetGeoTransform(geotransform)
result.SetProjection(projection)
result.GetRasterBand(1).WriteArray(AOD_result)
result.GetRasterBand(1).SetNoDataValue(eval("-32768"))
result.FlushCache()  # 将数据写入硬盘
del result  # 注意必须关闭tif文件

三、完整代码

import os
import numpy as np
from osgeo import gdal
import glob

AOD_file_path = r"F:\PM2.5反演代码\test_cloud\AOD"
cloud_file_path = r"F:\PM2.5反演代码\test_cloud\cloud_type"
out_put = r"F:\PM2.5反演代码\test_cloud\AOD_clear"

AOD_file_list =  glob.glob(AOD_file_path + '/*.tif')
cloud_file_list = glob.glob(cloud_file_path + '/*.tif')

for AOD_file in AOD_file_list:
    AOD_name = AOD_file.split("\\")[-1].split("_")[0]

    for cd in cloud_file_list:
        cd_name = cd.split("\\")[-1].split("_")[0]
        if AOD_name in cd_name:

            AOD =  AOD_file
            cloud =  cd

            #AOD数据读取
            AOD_raster = gdal.Open(AOD)
            AOD_array = AOD_raster.ReadAsArray()
            #cloud数据读取
            cd_raster = gdal.Open(cloud)
            cd_array = cd_raster.ReadAsArray()

            #影像参数读取
            row = AOD_raster.RasterYSize
            col = AOD_raster.RasterXSize
            geotransform = AOD_raster.GetGeoTransform()
            projection=AOD_raster.GetProjection()

            #质量筛选
            AOD_result = np.where(cd_array != 0,np.nan,AOD_array)

            #保存结果
            pos = out_put + os.sep + AOD_name + ".tif"
            driver=gdal.GetDriverByName("Gtiff")
            result = driver.Create(pos,row,col,1,gdal.GDT_Float32)
            result.SetGeoTransform(geotransform)
            result.SetProjection(projection)
            result.GetRasterBand(1).WriteArray(AOD_result)
            result.GetRasterBand(1).SetNoDataValue(eval("-32768"))
            result.FlushCache()  # 将数据写入硬盘
            del result  # 注意必须关闭tif文件

四、参考文章

https://www.cnblogs.com/fkxxgis/p/17147496.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值