从gdal_calc.py的源文件中可以看到:
""" Perform raster calculations with numpy syntax. Use any basic arithmetic supported by numpy arrays such as +-*\ along with logical operators such as >. Note that all files must have the same dimensions, but no projection checking is performed. Keyword arguments: [A-Z]: input files [A_band - Z_band]: band to use for respective input file Examples: add two files together: Calc("A+B", A="input1.tif", B="input2.tif", outfile="result.tif") average of two layers: Calc(calc="(A+B)/2", A="input1.tif", B="input2.tif", outfile="result.tif") set values of zero and below to null: Calc(calc="A*(A>0)", A="input.tif", A_Band=2, outfile="result.tif", NoDataValue=0)
我尝试将像素值0和以下设置为nodata,例如-10000。 从这个意义上说,我尝试以下操作:
cmd1 = 'gdal_calc -A ' + a_tif + ' --outfile=' + new_tif + ' --calc="A*(A>0)" --NoDataValue=-10000 --type="Float32" --overwrite'
os.system(cmd1)
据我了解,我声明输出将仅包含来自A波段(第一个)的像素,该像素> 0,因此其余部分将被视为无数据像素,因此分配了我想要的-10000值拥有。
在结果输出中,我想成为nodata和-10000的所有像素现在的值为0。但是它知道nodatavalues为-10000。
一个重要方面是输入栅格没有设置nodatavalues,因为它是2波段alpha合成。因此,gdal_calc.py可能无法将这些未设置的像素理解为任何东西,而是将它们设置为默认的0值,而无需事先使它们成为无数据像素。
除了变通办法之外,当然还有哪个,这里的问题是什么?有解决办法吗?