Python 使用多边形剖切线裁剪numpy阵列中的栅格

Python 使用多边形剖切线裁剪numpy阵列中的栅格,python,numpy,gis,gdal,Python,Numpy,Gis,Gdal,如何裁剪存储在带有多边形的numpy阵列中的光栅?您不需要将其保存在磁盘中,可以将其用作临时对象。您可以简单地使用“Mem”格式: 如果你有一个numpy数组,它会更棘手,因为你需要知道该numpy数组的geotransform参数。我的建议是将这个numpy数组发送回gdal对象,然后您可以使用gdal.warp()执行此操作。您尝试了什么?问题是;我的一个学院编写了一些python脚本,生成插值贴图,现在有一个使用剪切线裁剪图像的请求。我一直在考虑这个解决方案:但我必须像tiff一样临时存储

如何裁剪存储在带有多边形的numpy阵列中的光栅?

您不需要将其保存在磁盘中,可以将其用作临时对象。您可以简单地使用“Mem”格式:


如果你有一个numpy数组,它会更棘手,因为你需要知道该numpy数组的geotransform参数。我的建议是将这个numpy数组发送回gdal对象,然后您可以使用gdal.warp()执行此操作。

您尝试了什么?问题是;我的一个学院编写了一些python脚本,生成插值贴图,现在有一个使用剪切线裁剪图像的请求。我一直在考虑这个解决方案:但我必须像tiff一样临时存储数据,这在我准备好将数据存储在numpy数组时有点尴尬。
from osgeo import gdal, gdal_array as gdarr

input_raster = "path/to/rgb.tif" 
# or if the input is already a gdal raster object you can use that gdal object
input_raster=gdal.Open("path/to/rgb.tif")
input_kml = "path/to/cropline.kml" # or any other format

ds = gdal.Warp('',
              input_raster,
              format = 'Mem',
              cutlineDSName = input_kml, # or any other file format
              cutlineLayer = 'extent', # if cutline is a shapefile no need for this cutlineLayer 
              dstNodata = -9999) # select your no data value
#do stuff with ds object, it is your cropped dataset
#for example convert it to numpy array
npDs=ds.gdarr.DatasetReadAsArray(ds, 0, 0, ds.RasterXSize, ds.RasterYSize)
print(npDs.shape)