使用Python中的shapefile多边形从NetCDF中提取数据[重复]


11

我需要使用特定的shapefile从NetCDF子集数据。数据是1/4度分辨率下的海面温度和海洋颜色。我有4个描述美国的多边形。东北大陆架大型海洋生态系统及其提取数据所需的子组件。我正在处理1982-2014年的每月复合文件,因此此数据提取例程需要自动化。文件已被子集为[35、45,-80,-60]的近似工作区域网格。

在此处输入图片说明

以前,我们将HDF5数据文件转换为R中的栅格并以这种方式进行处理,但是这种方法的效率很低,我相信使用当前NetCDF文件在Python中有更好的解决方案。

到目前为止,我一直在使用GDAL和Fiona读取shapefile,并使用NetCDF4加载数据文件。我不确定如何对数据进行子集。我找到了这个:

GDAL for Python:从NetCDF文件提取子域吗?

但是我不知道如何使用除简单边界框以外的任何东西来对NetCDF文件进行子集化,这些多边形最肯定不是。

多边形例程中的点可能需要花很长时间才能工作,但是也许我可以使用较小的边界框将数据子集化,使其旋转以适合如下所示的这些形状作为初始起点,然后进行多边形点搜索:

使用lon / lat边界框对曲线netCDF文件(ROMS模型输出)进行子设置。

有任何想法吗?

编辑1:

我刚刚遇到了OpenClimateGIS软件包,它似乎很适合该法案...我将继续研究它是否可以正常工作:http//ncpp.github.io/ocgis/examples。 html#advanced-subsetting


您在编辑1中的最后一个链接似乎已失效。这似乎是最好的替代方法:earthsystemcog.org/projects/openclimategis
亚伦

Answers:


1

可能适合您的需求。

如果您不介意从python调用命令行,则可以执行gdalwarp -cutline clip.shp -cl clip -crop_to_cutline input_raster output_raster_clipped.tif-cwhere并且-csql可能是更合适的gdalwarp选项,用于选择四个多边形之一进行裁剪。


1

看看这个:https//stackoverflow.com/questions/34585582/how-to-mask-the-specific-array-data-based-on-the-shapefile

您要记住的是,一旦加载了NetCDF,就可以使用NumPy数组。

您想输出什么?基于多边形区域的摘要统计信息?

无论如何,这是我要做的:

  1. 加载shapefile并将区域设置为受支持的格式(上面链接中的matplotlib遮罩过程听起来不错)
  2. 加载您的NetCDF文件并将数据放入单个X,Y,T numpy数组中
  3. 使用多边形遮罩该数组(一次遮罩一次?)
  4. 导出您的摘要统计信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.