gpt4 book ai didi

python - 通过 shapefile 切割 NetCDF 文件

转载 作者:行者123 更新时间:2023-12-05 06:58:34 40 4
gpt4 key购买 nike

我有一个大型的全局 .nc 文件数据集,我正试图将它们裁剪到一个较小的区域。我将此区域存储为 .shp 文件。

我曾尝试使用 Qgis 中的 gdal,但需要通过转换每个变量来做到这一点,我必须为所有文件一个一个地选择每个变量和相同的形状,并且 400 个文件通过每个变量似乎不是最好的主意。此外,这会返回分隔的 .tiff 文件,而不是我想要的 .nc 文件。

我有这个小脚本,但它没有做我需要的

    import glob
import subprocess
import os

ImageList = sorted(glob.glob('*.nc'))
print('number of images to process: ', len(ImageList))

Shapefile = 'NHAF-250m.shp'

# Create output directory
OutDir = './Clipped_Rasters/'
if not os.path.exists(OutDir):
os.makedirs(OutDir)

for Image in ImageList:
print('Processing ' + Image)

OutImage = OutDir + Image.replace('.nc', '_BurnedArea_Clipped.tif') # Defines Output Image

# Clip image
subprocess.call('gdalwarp -q -cutline /Users/path/to/file/NHAF-250-vector/ -tr 0.25 0.25 -of GTiff NETCDF:'+Image+":burned_area "+OutImage, shell=True)


print('Done.' + '\n')

print('All images processed.')

提前致谢

最佳答案

我建议使用 xarray 来处理 netcdf 数据,使用 geopandas + rasterio 来处理你的 Shapefile。

import geopandas 
import xarray
import rasterio
import glob

shapefile = 'NHAF-250m.shp'

sf = geopandas.read_file(shapefile)
shape_mask = rasterio.features.geometry_mask(sf.iloc[0],
out_shape=(len(ndvi.y), len(ndvi.x)),
transform=ndvi.geobox.transform,
invert=True)
shape_mask = xarray.DataArray(shape_masj , dims=("y", "x"))

file_list = sorted(glob.glob('*.nc'))

for file in file_list:
nc_file = xarray.open_dataset(file)
# Then apply the mask
masked_netcdf_file = nc_file.where(shape_mask == True, drop=True)
# store again as netcdf or do what every you want with the masked array

关于python - 通过 shapefile 切割 NetCDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64580550/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com