+-
使用GDAL w / Python裁剪光栅文件
编辑:部分解决方案

在命令行中使用gdal_translate似乎可以解决问题,即使Python绑定不起作用.

这样可以裁剪GeoTiff,从顶部和左侧移除300像素填充,并保留下一个2000×2000像素.
gdal_translate -srcwin 300 300 2000 2000 input.tif output.tif

原始问题

我花了很长时间才想弄明白这一点.

我有一系列GEOTiff格式的卫星图像.每个图像都有一个300像素的缓冲区,它与旁边的图像重叠.

目标:我试图从每个图像中裁掉300像素的缓冲区,然后用作GDAL的栅格.

约束:
1)我需要保留与文件关联的所有元数据和坐标系统信息
2)我想在Python中完全执行此操作(无命令行)

我尝试过的失败了:

1)使用gdal.translate的srcWin函数:

raster_data = gdal.Open('image.tif')
x_size = raster_data.RasterXSize
y_size = raster_data.RasterYSize
raster_data_unpadded = gdal.Translate('temp.tif', raster_data,
                                       srcWin = [padding,padding, 
                                       x_size - padding*2, 
                                       y_size-padding*2])

问题:这会产生没有数据的黑色图像

2)使用PIL裁剪图像,然后保存为TIF

 from PIL import Image
 img = Image.open(image.tif)
 x_size, y_size = img.size
 box = (padding, padding, x_size-padding, y_size - padding)
 img_unpadded = img.crop(box)
 img_unpadded.save('unpadded_image.tif')

问题:PIL无法保存文件.它只是挂起.尝试保存为“.tiff”文件会产生错误“编码器错误-9”

3)使用Rasterio

with rasterio.open("image.tif") as src:

    out_image, out_transform = mask(src, geoms, crop=True)

out_meta = src.meta.copy()

问题:Rasterio似乎不接受像素格式的掩码(例如300像素).仅在文件的坐标系中采用几何,如多边形.我不知道如何在像素和坐标之间进行转换.

最佳答案
似乎PIL不支持旧的.tif扩展.
您是否尝试使用PIL将文件保存为.tiff而不是.tif?

img_unpadded.save('unpadded_image.tiff')
点击查看更多相关文章

转载注明原文:使用GDAL w / Python裁剪光栅文件 - 乐贴网