我试图用gdal_calc.py
减去两个Landsat8乐队如下:
gdal_calc.py -A LC8_B4.TIF -B LC8_B5.TIF --outfile="$pathout"/B5minusB4.tif --type='Int16' --calc="B-A"
很明显输出是带符号的数字(即Int16
),但是我从来没有得到负值,当减法后我认为值为负值时,我得到值32767.有没有办法在--calc
表达式中修复此问题?这是计算L8的NDVI的第一步。
答案 0 :(得分:1)
您可以使用astype()
的{{1}}方法来解决此问题,numpy.ndarray
是A
表达式中B
和calc
所代表的数据类型。< / p>
--calc="B.astype(int16) - A.astype(int16)"
这些int16
实际上是numpy.int16
,但计算表达式发生在numpy
命名空间内。
gdal_calc.py -A LC8_B4.TIF -B LC8_B5.TIF \
--outfile="$pathout"/B5minusB4.tif --type='Int16' \
--calc="B.astype(int16) - A.astype(int16)"
如果您事先为输入栅格设置NoDataValue,那么更好的是什么。这将确保栅格的良好部分内的计算零NDVI值不被标记为NoData,因为它们具有与0 - 0
&#34; NDVI&#34;相同的值。来自NoData空间。
gdal_edit.py -a_nodata 0 LC8_B4.TIF
gdal_edit.py -a_nodata 0 LC8_B5.TIF
# gdal_calc.py ...