@@ -3017,9 +3017,13 @@ def writeArrayBlock(self, gdalRaster, bandNumber, dataArray, pixelStartColumn, p
30173017 b = None
30183018
30193019 # write an array to band
3020- def writeRasterBlock (self , gdalRaster , bandNumber , dataArray , pixelStartColumn , pixelStartRow , nodataValue = None ):
3020+ def writeRasterBlock (self , gdalRaster , bandNumber , dataArray , pixelStartColumn , pixelStartRow , nodataValue = None , scale = None , offset = None , outputNoData = None ):
30213021 b = gdalRaster .GetRasterBand (bandNumber )
30223022 y , x = dataArray .shape
3023+ if scale is not None or offset is not None :
3024+ dataArray = cfg .np .subtract (dataArray / scale , offset / scale )
3025+ b .SetScale (scale )
3026+ b .SetOffset (offset )
30233027 #b.WriteRaster(pixelStartColumn, pixelStartRow, x, y, dataArray.tostring())
30243028 b .WriteArray (dataArray , pixelStartColumn , pixelStartRow )
30253029 if nodataValue is not None :
@@ -3107,7 +3111,7 @@ def createRasterFromReferenceMultiprocess(self, raster, bandNumber, outputRaster
31073111 return outputRasterList
31083112
31093113 # create raster from another raster
3110- def createRasterFromReference (self , gdalRasterRef , bandNumber , outputRasterList , nodataValue = None , driver = 'GTiff' , format = 'Float32' , previewSize = 0 , previewPoint = None , compress = 'No' , compressFormat = 'DEFLATE21' , projection = None , geotransform = None , constantValue = None ):
3114+ def createRasterFromReference (self , gdalRasterRef , bandNumber , outputRasterList , nodataValue = None , driver = 'GTiff' , format = 'Float32' , previewSize = 0 , previewPoint = None , compress = 'No' , compressFormat = 'DEFLATE21' , projection = None , geotransform = None , constantValue = None , scale = None , offset = None ):
31113115 oRL = []
31123116 if format == 'Float64' :
31133117 format = cfg .gdalSCP .GDT_Float64
@@ -3117,6 +3121,8 @@ def createRasterFromReference(self, gdalRasterRef, bandNumber, outputRasterList,
31173121 format = cfg .gdalSCP .GDT_Int32
31183122 elif format == 'Int16' :
31193123 format = cfg .gdalSCP .GDT_Int16
3124+ elif format == 'UInt16' :
3125+ format = cfg .gdalSCP .GDT_UInt16
31203126 elif format == 'Byte' :
31213127 format = cfg .gdalSCP .GDT_Byte
31223128 for o in outputRasterList :
@@ -3180,6 +3186,16 @@ def createRasterFromReference(self, gdalRasterRef, bandNumber, outputRasterList,
31803186 b = oR .GetRasterBand (x )
31813187 b .Fill (constantValue )
31823188 b = None
3189+ if scale is not None :
3190+ for x in range (1 , bandNumber + 1 ):
3191+ b = oR .GetRasterBand (x )
3192+ b .SetScale (scale )
3193+ b = None
3194+ if offset is not None :
3195+ for x in range (1 , bandNumber + 1 ):
3196+ b = oR .GetRasterBand (x )
3197+ b .SetOffset (offset )
3198+ b = None
31833199 # logger
31843200 cfg .utls .logCondition (str (__name__ ) + '-' + str (cfg .inspectSCP .stack ()[0 ][3 ])+ ' ' + cfg .utls .lineOfCode (), 'raster ' + str (outputRasterList ))
31853201 return oRL
@@ -3722,7 +3738,7 @@ def calculateRaster(self, gdalBandList, rasterSCPArrayfunctionBand, columnNumber
37223738 f = f .replace (i , ' rasterSCPArrayfunctionBand[::, ::,' + str (b ) + '] ' )
37233739 b = b + 1
37243740 # replace numpy operators
3725- f = cfg .utls .replaceNumpyOperators (f )
3741+ f = cfg .utls .replaceNumpyOperators (f )
37263742 # logger
37273743 cfg .utls .logToFile (str (__name__ ) + '-' + str (cfg .inspectSCP .stack ()[0 ][3 ])+ ' ' + cfg .utls .lineOfCode (), 'f ' + str (f ))
37283744 cfg .utls .logToFile (str (__name__ ) + '-' + str (cfg .inspectSCP .stack ()[0 ][3 ])+ ' ' + cfg .utls .lineOfCode (), 'rasterSCPArrayfunctionBand shape' + str (rasterSCPArrayfunctionBand .shape ))
@@ -3734,7 +3750,14 @@ def calculateRaster(self, gdalBandList, rasterSCPArrayfunctionBand, columnNumber
37343750 o = eval (f )
37353751 # output raster
37363752 oR = cfg .gdalSCP .Open (outputRaster , cfg .gdalSCP .GA_Update )
3737- cfg .utls .writeRasterBlock (oR , int (outputBandNumber ), o , pixelStartColumn , pixelStartRow )
3753+ scale = gdalBandList [0 ]
3754+ offset = gdalBandList [1 ]
3755+ outputNoData = gdalBandList [2 ]
3756+ # logger
3757+ cfg .utls .logToFile (str (__name__ ) + '-' + str (cfg .inspectSCP .stack ()[0 ][3 ])+ ' ' + cfg .utls .lineOfCode (), 'or1 ' + str (o ))
3758+ # logger
3759+ cfg .utls .logToFile (str (__name__ ) + '-' + str (cfg .inspectSCP .stack ()[0 ][3 ])+ ' ' + cfg .utls .lineOfCode (), 'or2 ' + str (o ))
3760+ cfg .utls .writeRasterBlock (oR , int (outputBandNumber ), o , pixelStartColumn , pixelStartRow , scale = scale , offset = offset , outputNoData = outputNoData )
37383761 o = None
37393762 oR = None
37403763 return outputRaster
@@ -4900,7 +4923,7 @@ def processRasterDev(self, raster = None, signatureList = None, functionBand = N
49004923 if functionBand == 'No' :
49014924 # logger
49024925 cfg .utls .logToFile (str (__name__ ) + '-' + str (cfg .inspectSCP .stack ()[0 ][3 ])+ ' ' + cfg .utls .lineOfCode (), 'outputBandNumber ' + str (outputBandNumber ))
4903- oo = functionRaster (gdalBandList , array , nodataMask , bSY , x , y , outputArrayFile , functionBandArgument , functionVariable , outputBandNumber )
4926+ oo = functionRaster ([ scl , offs , outputNoData ] , array , nodataMask , bSY , x , y , outputArrayFile , functionBandArgument , functionVariable , outputBandNumber )
49044927 # logger
49054928 cfg .utls .logToFile (str (__name__ ) + '-' + str (cfg .inspectSCP .stack ()[0 ][3 ])+ ' ' + cfg .utls .lineOfCode (), 'oo ' + str (oo ))
49064929 if isinstance (oo , list ):
0 commit comments