【发布时间】:2021-01-31 09:41:43
【问题描述】:
我在使用 python 和 gdal 导出 GeoTIFF 文件时遇到问题。 我想要做的是将 NumPy 数组转换为 GeoTIFF 文件。 有参考 GeoTIFF 文件,所以我想确保生成的 GeoTIFF 文件具有正确的几何坐标。
问题是tiff文件好像生成了,但是里面包含的值不好。 我尝试使用 QGIS 查看文件,但图像的外观完全是黑色的。除了图像外观的问题外,值也从原始的 NumPy 数组发生了变化。比如NumPy数组的最大值是149,但是QGIS说文件里没有这个值。
这个问题的原因是什么,我该如何解决?
代码在这里。
#Check the metadata of the reference file.
with rio.open('/content/drive/My Drive/Colab Notebooks/satellite_data/MCD12Q1/MCD12Q1.A2019001.IGBP.Buryat.geotiff.tif') as filename : filename.bounds
filename.meta["transform"]
#Output=> {'count': 1,'crs': CRS.from_epsg(4326),'driver': 'GTiff','dtype': 'uint8','height': 1920, 'nodata': None, 'transform': Affine(0.00416666, 0.0, 97.99955519999997, 0.0, -0.00416666, 58.0000512),
'width': 4800}
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
#Set some parameters
xsize=filename.meta["width"]
ysize=filename.meta["height"]
band=1
dtype = gdal.GDT_UInt16
output = gdal.GetDriverByName('GTiff').Create('/content/drive/My Drive/Colab Notebooks/outputs/output.tif', xsize, ysize, band, dtype)
output.SetGeoTransform((filename.meta["transform"][0],filename.meta["transform"][1],filename.meta["transform"][2],filename.meta["transform"][3],filename.meta["transform"][4],filename.meta["transform"][5]))
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
output.SetProjection(srs.ExportToWkt())
output.GetRasterBand(1).WriteArray(NumOfFiresExpanded["2019"]) #The "NumOfFireExpanded["2019"] is the target numpy array.
output.FlushCache()
output = None
【问题讨论】:
-
您的代码实际上是这样缩进的吗?另外,你为什么要使用
rasterio和gdal。你可以很容易地坚持使用rasterio(或gdal) -
感谢您的评论!我想制作一个与参考图像具有相同坐标和投影的 GeoTiff 文件。但是,部分代码是从其他来源复制的,所以我还没有完全理解代码在做什么......我将使用 rasterio,因为它对我来说似乎更容易使用。
-
但是要写光栅,你使用
gdal。您只能使用rasterio来执行您需要的所有操作 -
好的,谢谢!由于我是 rasterio 包的新手,因此我将寻找一些有用的材料,用于使用 rasterio 进行地理空间分析。
-
Rasterio hast very good documentation 了解如何打开栅格进行读写。