利用nc文件裁剪nc并转为tif的python代码

import pandas as pd
import xarray as xr
import numpy as np
import rasterio
from rasterio.transform import from_origin
from rasterio.enums import Resampling

# 尝试用nc裁剪多图层nc,并转为tiff
# 20240103 9:49 YMJ


# 被裁减的nc文件和掩膜nc文件,被裁减的nc文件有480个图层
nc_file_path = 'D:\\YRB\\Ma_ETa\\Ea_1982_2017_CR.nc'
mask_file_path = 'D:\\CMFD\\Data_ancillary\\mask_CMFD_V0106_B-01_010deg.nc'

ds = xr.open_dataset(nc_file_path)
mask_ds = xr.open_dataset(mask_file_path)

# 获取掩膜数据
mask_data = mask_ds["mask"].values  # 替换成实际的变量名

# 遍历每个时间步
for time_idx in range(len(ds["time"])):
    # 获取当前时间步的数据
    data = ds["Ea"].isel(time=time_idx).values  # 替换成实际的变量名

    # 应用掩膜
    masked_data = np.where(mask_data == 1, data, np.nan)

    # 获取时间信息
    time_info = pd.to_datetime(ds["time"].isel(time=time_idx).values)

    # 保存为TIFF文件
    output_path = "D:\\YRB\\Ma_ETa\\"
    # tiff_filename = f"{output_path}{time_info.strftime('%Y%m%d')}.tif"
    tiff_filename = f"{output_path}{time_info.strftime('%Y%m')}.tif"

    # 删除维度为 1 的维度
    masked_data = np.squeeze(masked_data)

    # 设置TIFF文件的元数据
    transform = from_origin(mask_ds.lon.min(), mask_ds.lat.min(), ds.lon[1] - ds.lon[0], ds.lat[0] - ds.lat[1])
    # print(transform)

    with rasterio.open(tiff_filename, 'w', driver='GTiff', height=masked_data.shape[0], width=masked_data.shape[1],
                       count=1, dtype=str(masked_data.dtype), crs='EPSG:4326', transform=transform) as dst:
        dst.write(masked_data, 1)
        # print(dst)

# 关闭数据集
ds.close()
mask_ds.close()

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Python中的netCDF4库来读取nc文件,并使用GDAL库将其转换为tif格式。下面是一个示例代码: ```python import netCDF4 as nc from osgeo import gdal # 定义输入和输出文件路径 input_folder = 'D:/OneDrive/data/GPCC_AI/inputNC' output_folder = 'D:/OneDrive/data/GPCC_AI/output' # 读取nc文件 nc_file = nc.Dataset(input_folder + '/your_nc_file.nc') # 获取nc文件中的变量 variable = nc_file.variables\['your_variable_name'\] # 获取变量的维度 dimensions = variable.dimensions # 获取变量的数据 data = variable\[:\] # 创建tif文件 driver = gdal.GetDriverByName('GTiff') output_file = driver.Create(output_folder + '/your_tif_file.tif', dimensions\[1\].size, dimensions\[0\].size, 1, gdal.GDT_Float32) # 将数据写入tif文件 output_file.GetRasterBand(1).WriteArray(data) # 设置地理参考信息 output_file.SetGeoTransform(nc_file.geospatial_lat_lon_extent) output_file.SetProjection(nc_file.geospatial_projection) # 关闭文件 output_file = None nc_file.close() ``` 请注意,你需要根据你的实际情况修改文件路径和变量名称。此外,你还需要安装netCDF4和GDAL库。 #### 引用[.reference_title] - *1* *2* [python批量读取nc气象数据并转为tif](https://blog.csdn.net/wlh2067/article/details/127920090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python处理nc数据转换为tif格式](https://blog.csdn.net/kkkyyyxxx/article/details/126279935)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值