GDAL:GetMaximum和GetMinimum不返回值

2024-09-27 21:22:25 发布

您现在位置:Python中文网/ 问答频道 /正文

tifi文件的最小像素和最大值。在

我使用的是GetMaximum()和GetMinimum()方法,但是它们没有返回任何结果,因此我得到的错误是: TypeError: unsupported operand type(s) for -: 'NoneType' and 'NoneType'

in文件是用于测试的小型tif光栅。我确实得到了同样的错误,其他光栅实际上只是在几天前工作。在

这就是我一直在尝试的:

from osgeo import gdal

driver = gdal.GetDriverByName('GTiff')
in_file = gdal.Open("L8_field.tif")
band1 = in_file.GetRasterBand(1)
barray = band1.ReadAsArray()

# Getting the interval value and setting the classes
max_value = band1.GetMaximum()
min_value = band1.GetMinimum()

tot_classes = 5
class_1 = class_x + min_value
class_x = (max_value - min_value) / tot_classes
class_2 = (class_x * 2) + min_value
class_3 = (class_x * 3) + min_value
class_4 = (class_x * 4) + min_value
class_5 = max_value
...

我用这个来分类光栅。所以有更多的代码对它进行了分类。这个片段是为了获取相等的间隔。在

我错过了什么?在


Tags: and文件invalue光栅错误minmax
2条回答

我不知道为什么RasterBand.GetMaximum()和{}返回{}。也许在GTiff可以动态访问该值之前,需要计算光栅属性表?在

您可以对numpy.ndarray变量barray执行类似的操作。在

import numpy as np
# ...
max_value = np.amax(barray)
min_value = np.amin(barray)

这里明显的问题是如果nodata值是min或max,在这种情况下,它将返回给您不满意的结果。陆地卫星的nodata=0。在

您可以通过创建一个掩码数组并使用掩码数组的minmax方法来解决这个问题。在

^{pr2}$

为了让gdal的.GetMinimum()&;.GetMaximum()返回值,首先必须计算频带上的统计信息。否则,它将显示为“无”。至少,这是我对Sentine1雷达图像和干涉图的经验。
一些示例代码。

raster = gdal.Open('YourRasterFile.tiff') # open raster file
band = raster.GetRasterBand(1) # get data into varialbe 'band' so we can actually look at it. 

band.GetMetadata()
if band.GetMinimum is None or band.GetMaximum() is None:
    print("\nGDAL thinks this file has no values: ", file)
    print("[ MAX ] =", band.GetMaximum())
    print("[ MIN ] =", band.GetMinimum())

if band.GetMinimum() is None or band.GetMaximum() is None:
    band.ComputeStatistics(0)

band.GetMetadata()
if band.GetMinimum is None or band.GetMaximum() is None:
    print("\nBollucks to this: ", file)
    print("[ MAX ] =", band.GetMaximum())
    print("[ MIN ] =", band.GetMinimum())
else: 
    print("\nHey, it worked.")
    print("[ MAX ] =", band.GetMaximum())
    print("[ MIN ] =", band.GetMinimum())

相关问题 更多 >

    热门问题