31 if ( ! theSrcCRS.
isValid() || ! theDestCRS.
isValid() || theSrcCRS == theDestCRS )
33 readBlock( bandNo, viewExtent, width, height, data );
40 double mMaxSrcXRes = 0;
41 double mMaxSrcYRes = 0;
49 QgsRasterProjector myProjector( theSrcCRS, theDestCRS, viewExtent, height, width, mMaxSrcXRes, mMaxSrcYRes,
extent() );
51 QgsDebugMsg( QString(
"create projector time (ms): %1" ).arg( time.elapsed() ) );
61 void *mySrcData = malloc( mySize * myProjector.
srcRows() * myProjector.
srcCols() );
67 QgsDebugMsg( QString(
"read not projected block time (ms): %1" ).arg( time.elapsed() ) );
75 for (
int r = 0; r < height; r++ )
77 for (
int c = 0; c < width; c++ )
79 myProjector.
srcRowCol( r, c, &mySrcRow, &mySrcCol );
80 mySrcOffset = mySize * ( mySrcRow * myProjector.
srcCols() + mySrcCol );
81 myDestOffset = mySize * ( r * width + c );
83 memcpy((
char* ) data + myDestOffset, (
char* )mySrcData + mySrcOffset, mySize );
86 QgsDebugMsg( QString(
"reproject block time (ms): %1" ).arg( time.elapsed() ) );
114 for (
size_t i = 0; stringList[i]; ++i )
116 strings.append( stringList[i] );
126 return "<p>\n" + value +
"</p>\n";
136 for ( QStringList::const_iterator i = values.begin();
156 QStringList abilitiesList;
162 abilitiesList += tr(
"Identify" );
167 abilitiesList += tr(
"Build Pyramids" );
170 QgsDebugMsg(
"Capability: " + abilitiesList.join(
", " ) );
172 return abilitiesList.join(
", " );
177 Q_UNUSED( thePoint );
193 char * data = ba.data();
205 uc = (
unsigned char )noval;
206 memcpy( data, &uc, size );
209 us = (
unsigned short )noval;
210 memcpy( data, &us, size );
214 memcpy( data, &s, size );
217 ui = (
unsigned int )noval;
218 memcpy( data, &ui, size );
222 memcpy( data, &i, size );
226 memcpy( data, &f, size );
230 memcpy( data, &d, size );
247 int myDataType =
dataType( theBandNo );
249 int myNXBlocks, myNYBlocks, myXBlockSize, myYBlockSize;
253 myNXBlocks = (
xSize() + myXBlockSize - 1 ) / myXBlockSize;
254 myNYBlocks = (
ySize() + myYBlockSize - 1 ) / myYBlockSize;
256 void *myData = CPLMalloc( myXBlockSize * myYBlockSize * (
dataTypeSize( theBandNo ) / 8 ) );
259 bool myFirstIterationFlag =
true;
261 int myBandXSize =
xSize();
262 int myBandYSize =
ySize();
263 for (
int iYBlock = 0; iYBlock < myNYBlocks; iYBlock++ )
265 for (
int iXBlock = 0; iXBlock < myNXBlocks; iXBlock++ )
267 int nXValid, nYValid;
268 readBlock( theBandNo, iXBlock, iYBlock, myData );
272 if (( iXBlock + 1 ) * myXBlockSize > myBandXSize )
273 nXValid = myBandXSize - iXBlock * myXBlockSize;
275 nXValid = myXBlockSize;
277 if (( iYBlock + 1 ) * myYBlockSize > myBandYSize )
278 nYValid = myBandYSize - iYBlock * myYBlockSize;
280 nYValid = myYBlockSize;
283 for (
int iY = 0; iY < nYValid; iY++ )
285 for (
int iX = 0; iX < nXValid; iX++ )
287 double myValue =
readValue( myData, myDataType, iX + ( iY * myXBlockSize ) );
295 myRasterBandStats.
sum += myValue;
298 if ( myFirstIterationFlag )
301 myFirstIterationFlag =
false;
329 for (
int iYBlock = 0; iYBlock < myNYBlocks; iYBlock++ )
331 for (
int iXBlock = 0; iXBlock < myNXBlocks; iXBlock++ )
333 int nXValid, nYValid;
335 readBlock( theBandNo, iXBlock, iYBlock, myData );
339 if (( iXBlock + 1 ) * myXBlockSize > myBandXSize )
340 nXValid = myBandXSize - iXBlock * myXBlockSize;
342 nXValid = myXBlockSize;
344 if (( iYBlock + 1 ) * myYBlockSize > myBandYSize )
345 nYValid = myBandYSize - iYBlock * myYBlockSize;
347 nYValid = myYBlockSize;
350 for (
int iY = 0; iY < nYValid; iY++ )
352 for (
int iX = 0; iX < nXValid; iX++ )
354 double myValue =
readValue( myData, myDataType, iX + ( iY * myXBlockSize ) );
362 myRasterBandStats.
sumOfSquares += static_cast <
double >
363 ( pow( myValue - myRasterBandStats.
mean, 2 ) );
370 myRasterBandStats.
stdDev = static_cast <
double >( sqrt( myRasterBandStats.
sumOfSquares /
374 QgsLogger::debug(
"************ STATS **************", 1, __FILE__, __FUNCTION__, __LINE__ );
375 QgsLogger::debug(
"VALID NODATA",
mValidNoDataValue, 1, __FILE__, __FUNCTION__, __LINE__ );
376 QgsLogger::debug(
"NULL",
noDataValue() , 1, __FILE__, __FUNCTION__, __LINE__ );
377 QgsLogger::debug(
"MIN", myRasterBandStats.
minimumValue, 1, __FILE__, __FUNCTION__, __LINE__ );
378 QgsLogger::debug(
"MAX", myRasterBandStats.
maximumValue, 1, __FILE__, __FUNCTION__, __LINE__ );
379 QgsLogger::debug(
"RANGE", myRasterBandStats.
range, 1, __FILE__, __FUNCTION__, __LINE__ );
380 QgsLogger::debug(
"MEAN", myRasterBandStats.
mean, 1, __FILE__, __FUNCTION__, __LINE__ );
381 QgsLogger::debug(
"STDDEV", myRasterBandStats.
stdDev, 1, __FILE__, __FUNCTION__, __LINE__ );
386 return myRasterBandStats;
397 return (
double )(( GByte * )data )[index];
400 return (
double )(( GUInt16 * )data )[index];
403 return (
double )(( GInt16 * )data )[index];
406 return (
double )(( GUInt32 * )data )[index];
409 return (
double )(( GInt32 * )data )[index];
412 return (
double )((
float * )data )[index];
415 return (
double )((
double * )data )[index];