修改gdal python 程序 ,增加无值区域的判断

是这样的,在栅格运算过程中,要对每一块像元处理,因为有的像元不存在值,项目背景是,获取的为海洋区域的温度、盐度、风场等信息,因此陆地部分无值,海洋中被云层遮挡部分无值,所以,要将所有的无值区域不参与计算。


ENVI中打开,看到海洋区域中明显的黑点,显示为-999.

栅格运算中,-999需要剔除掉,才能和其他像元点计算,栅格计算重要用到了一个python脚本(需要用到的可以去我的资源页下载)。

下面介绍掩膜方法增加无值区域的判定,并在最终结果影像中显示无值区域为-999,这一部分是原生gdal python没有的。

            # create empty buffer to mark where nodata occurs
            myNDVs=numpy.zeros(myBufSize)
            myNDVs.shape=(nYValid,nXValid)

	    my999=numpy.zeros(myBufSize)
            my999.shape=(nYValid,nXValid)

myNDVs是原始无值区域掩膜,其用处是将所有无值的区域标注出来,用来以后无值区域的判定。

在这里增加了my999数组,初始值为0,大小为栅格图像的大小。

            for i,Alpha in enumerate(myAlphaList):

                # populate lettered arrays with values
                myval=BandReadAsArray(myFiles[i].GetRasterBand(myBands[i]),
                                      xoff=myX, yoff=myY,
                                      win_xsize=nXValid, win_ysize=nYValid)

                # fill in nodata values
                myNDVs=1*numpy.logical_or(myNDVs==1, myval==myNDV[i])
                my999=1*numpy.logical_or(my999==1, myval==-999)
				
                # create an array of values for this block
                exec("%s=myval" %Alpha)
                myval=None

my999是一个0值数组,遍历影像过程中,将值为-999的数字设置为1,这里用到了numpy 的逻辑或语句,满足:my999=1或者myval=-999的像元即为1,而为1的像元是要记录下来的。

            # propogate nodata values 
            # (set nodata cells to zero then add nodata value to these cells)
            myResult = ((1*(myNDVs==0))*myResult) + (myOutNDV*myNDVs)
	    myResult = ((1*(my999==0))*myResult) + (-999*my999)

myResult是结果影像数组,这是用来将其输出的,my999为1的区域,要加-999*my999,这样就在结果影像中将所有的无值区域设置为-999了。

关键思想:掩膜。

自己体悟去吧。

猜你喜欢

转载自blog.csdn.net/baidu_31933141/article/details/80656402