+-

编辑:部分解决方案
在命令行中使用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?
您是否尝试使用PIL将文件保存为.tiff而不是.tif?
img_unpadded.save('unpadded_image.tiff')
点击查看更多相关文章
转载注明原文:使用GDAL w / Python裁剪光栅文件 - 乐贴网