如何解决GDAL 的 GetProjection() 和 GetGeoTransform() 的 Rasterio 等价物?
我有一个 GeoTIFF,我在 OpenCV 中做了很多处理。处理后,它丢失了空间信息,因此我需要将其重新插入。在 GDAL 中,我只会在处理前从原始图像中提取它,然后将其与经过后处理的图像一起推回:
#open original geotiff
original_img = gdal.Open('/path-to-file/original_img.tif',1)
crs = original_img.GetProjection()
gt = original_img.GetGeoTransform()
del original_ds
#open cv processes here....write post-processed file
# open processed raster and set the projection and geotransform
img = gdal.Open('/path-to-file/processed_img.tif',1)
img.SetProjection(crs)
img.SetGeoTransform(gt)
有没有办法在 Rasterio 中做到这一点?
解决方法
根据RasterIO documentation,您可以简单地访问开放数据集上的crs
和transform
属性,以分别获得投影和地理变换。然后您可以将它们传递回输出图像文件 on opening。
示例:
# Open original Geotiff
original_img = rasterio.open("path/to/input.tif")
# Extract spatial metadata
input_crs = original_img.crs
input_gt = original.transform
# Do your processing. For this example,just read first band of input dataset
processed_img = original_img.read(1)
# Prepare output geotiff file. We give crs and gt read from input as spatial metadata
with rasterio.open(
'path/to/output.tif','w',driver = 'GTiff',count = 1,height = processed_img.shape[0],width = processed_img.shape[1],dtype = processed_img.dtype,crs = input_crs,transform = input_gt
) as output:
output.write(processed_img,1)
上面例子的注释:
- 假设在处理时保留图像尺寸。如果没有,您必须相应地推导出空间变换。
- 假设单波段数据集
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。