我正在尝试平铺较大的图像(.img格式,但可以是geotiff),但是我已经使用rasterio mask裁剪了图像,该图像返回一个蒙版数组和一个单独的Affine对象。
from rasterio import mask
import fiona
image = rasterio.open(image_path)
with fiona.open(shapefile_path, 'r') as shapefile:
cropping_polygon = [polygon['geometry'] for polygon in shapefile]
smaller_image, smaller_image_affine = mask.mask(image, cropping_polygon, crop=True)
现在,我想将
smaller_image
拆分为固定大小的图块。我已经看过光栅窗口化的读写,但这似乎依赖于具有image.affine
属性的图像,以便不丢失地理参考。是否可以平铺蒙版数组并为每个平铺产生新的仿射?
最佳答案
我认为您正在寻找rasterio.windows.transform
。
tile_window = rasterio.windows.Window(0, 0, 256, 256)
tile_affine = rasterio.windows.transform(tile_window, smaller_image_affine)
tile_image = smaller_image[(slice(None),) + tile_window.toslices()]
然后,使用
tile_image
和tile_affine
拥有将其写入新文件所需的全部内容。