在GDAL中制作的GeoTIFF在Arc / QGIS中加载时没有最小/最大范围


11

我正在使用GeoTIFF驱动程序在GDAL中创建一些浮点栅格。当我将生成的图像加载到QGIS或Arc中时,默认的符号系统将最小值设置为-3.40282e38,将最大值设置为3.40282e38,因此栅格看起来完全是灰色的。有没有一种方法可以直接将实际范围写入GeoTIFF,以便在将其加载到GIS程序中时自动很好地缩放直方图?我尝试过创建默认的直方图,如下所示:

rasterMin, rasterMax = raster.GetRasterBand(1).ComputeRasterMinMax()
raster.GetRasterBand(1).SetDefaultHistogram(rasterMin, rasterMax, 255)

但是我收到一个看起来像是绑定问题的错误:

  File "/usr/lib/python2.6/dist-packages/osgeo/gdal.py", line 846, in SetDefaultHistogram
    return _gdal.Band_SetDefaultHistogram(self, *args)
TypeError: not a sequence

关于我该怎么办,或者如果我做错了什么建议?

Answers:


8

如果要生成数据,则可以随时跟踪最小值和最大值。如果您无法直接控制源数据,例如说要合成现有数据,则可以使用ComputeRasterMinMax(0)

无论哪种方式,在获得最小值和最大值之后,都应调用SetStatistics()该带,并确保将数据集设置为None完成后才能确保将所有数据都写入磁盘。

另外,dataset.GetRasterBand(1).<some band function>由于GDAL Python处理波段引用的方式,我脑海中隐隐地告诉我使用将无法正常工作。我不记得详细信息,但是前段时间GDALDev邮件列表中包含一些内容。因此,最好显式创建一个band变量:band = dataset.GetRasterBand(1),然后调用band.SetStatistics(min, max, mean, stddev)


谢谢,这可以解决问题,并感谢上下文。顺便说一句,我能够嵌套带参考,而没有任何临时变量,没有问题。
丰富

请注意,band.ComputeStatistics(0)它还存储统计信息。这是一条简单的1行代码。
Mike T

1

我不知道使用GDAL的方法,但是您可以使用python调用Arc中的“计算统计信息”工具。


2
嗨,赛勒斯,欢迎来到GIS.se :)正确的答案不太可能吸引投票,原因有两个。arcpy计算统计信息工具将统计信息存储在外部.aux文件中,发布者要求“直接输入到Geotiff中”。其次,尽管标题中提到了Arcgis,但问题的正文及其标签表明张贴者实际上对gdal / qgis解决方案更感兴趣。无论如何,感谢您的贡献,请继续努力。开始时需要学习一些弯路,但是随着时间的流逝,我发现您会发现自己付出的努力会有所回报。
马特·威尔基
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.