mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
fix histogram and stats compute (set bapprox=false) for gdal provider ; fix histogram display for non-Byte data
This commit is contained in:
parent
3c13f3c93b
commit
e74a28b37b
@ -1300,8 +1300,7 @@ void QgsRasterLayerProperties::refreshHistogram()
|
||||
|
||||
if ( ! computeHistogram( false ) )
|
||||
{
|
||||
// TODO - check raster min/max and min/max of default histogram
|
||||
QgsDebugMsg( QString( "raster does not have cached histo" ) );
|
||||
QgsDebugMsg( QString( "raster does not have cached histogram" ) );
|
||||
stackedWidget2->setCurrentIndex( 2 );
|
||||
return;
|
||||
}
|
||||
@ -1419,6 +1418,8 @@ void QgsRasterLayerProperties::refreshHistogram()
|
||||
bool myFirstIteration = true;
|
||||
/* get selected band list, if mHistoShowBands != ShowAll */
|
||||
QList< int > mySelectedBands = histoSelectedBands();
|
||||
double myBinXStep = 1;
|
||||
double myBinX = 0;
|
||||
|
||||
for ( int myIteratorInt = 1;
|
||||
myIteratorInt <= myBandCountInt;
|
||||
@ -1442,15 +1443,28 @@ void QgsRasterLayerProperties::refreshHistogram()
|
||||
QVector<double> myX2Data;
|
||||
QVector<double> myY2Data;
|
||||
#endif
|
||||
// calculate first bin x value and bin step size if not Byte data
|
||||
if ( mRasterLayer->dataProvider()->srcDataType( myIteratorInt ) != QgsRasterDataProvider::Byte )
|
||||
{
|
||||
myBinXStep = myRasterBandStats.range / BINCOUNT;
|
||||
myBinX = myRasterBandStats.minimumValue + myBinXStep / 2.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
myBinXStep = 1;
|
||||
myBinX = 0;
|
||||
}
|
||||
|
||||
for ( int myBin = 0; myBin < BINCOUNT; myBin++ )
|
||||
{
|
||||
int myBinValue = myRasterBandStats.histogramVector->at( myBin );
|
||||
#if defined(QWT_VERSION) && QWT_VERSION>=0x060000
|
||||
data << QPointF( myBin, myBinValue );
|
||||
data << QPointF( myBinX, myBinValue );
|
||||
#else
|
||||
myX2Data.append( double( myBin ) );
|
||||
myX2Data.append( double( myBinX ) );
|
||||
myY2Data.append( double( myBinValue ) );
|
||||
#endif
|
||||
myBinX += myBinXStep;
|
||||
}
|
||||
#if defined(QWT_VERSION) && QWT_VERSION>=0x060000
|
||||
mypCurve->setSamples( data );
|
||||
@ -1472,9 +1486,10 @@ void QgsRasterLayerProperties::refreshHistogram()
|
||||
// for x axis use band pixel values rather than gdal hist. bin values
|
||||
// subtract -0.5 to prevent rounding errors
|
||||
// see http://www.gdal.org/classGDALRasterBand.html#3f8889607d3b2294f7e0f11181c201c8
|
||||
// fix x range for non-Byte data
|
||||
mpPlot->setAxisScale( QwtPlot::xBottom,
|
||||
mHistoMin - 0.5,
|
||||
mHistoMax + 0.5 );
|
||||
mHistoMin - myBinXStep / 2,
|
||||
mHistoMax + myBinXStep / 2 );
|
||||
|
||||
mpPlot->replot();
|
||||
|
||||
@ -1982,7 +1997,6 @@ void QgsRasterLayerProperties::histoActionTriggered( QAction* action )
|
||||
// Load actions
|
||||
else if ( actionName.left( 5 ) == "Load " )
|
||||
{
|
||||
QgsRasterBandStats myRasterBandStats;
|
||||
QVector<int> myBands;
|
||||
double minMaxValues[2];
|
||||
bool ok = false;
|
||||
|
@ -371,6 +371,8 @@ const QgsRasterBandStats QgsRasterLayer::bandStatistics( int theBandNo )
|
||||
return myNullReturnStats;
|
||||
}
|
||||
|
||||
// TODO this is buggy - because the stats might have changed (e.g. theIgnoreOutOfRangeFlag in populateHistogram())
|
||||
// should have a pointer to the stats instead
|
||||
QgsRasterBandStats myRasterBandStats = mRasterStatsList[theBandNo - 1];
|
||||
myRasterBandStats.bandNumber = theBandNo;
|
||||
|
||||
@ -384,6 +386,7 @@ const QgsRasterBandStats QgsRasterLayer::bandStatistics( int theBandNo )
|
||||
QgsDebugMsg( "adding stats to stats collection at position " + QString::number( theBandNo - 1 ) );
|
||||
//add this band to the class stats map
|
||||
mRasterStatsList[theBandNo - 1] = myRasterBandStats;
|
||||
|
||||
emit drawingProgress( mHeight, mHeight ); //reset progress
|
||||
QgsDebugMsg( "Stats collection completed returning" );
|
||||
return myRasterBandStats;
|
||||
@ -1422,7 +1425,7 @@ QPixmap QgsRasterLayer::paletteAsPixmap( int theBandNumber )
|
||||
}
|
||||
|
||||
/*
|
||||
* @param theBandNoInt - which band to compute the histogram for
|
||||
* @param theBandNoInt - which band to find out if has a cached histogram
|
||||
* @param theBinCountInt - how many 'bins' to categorise the data into
|
||||
*/
|
||||
bool QgsRasterLayer::hasCachedHistogram( int theBandNo, int theBinCount )
|
||||
|
@ -1426,24 +1426,25 @@ bool QgsGdalProvider::hasCachedHistogram( int theBandNo, int theBinCount )
|
||||
if ( ! myGdalBand )
|
||||
return false;
|
||||
|
||||
// get default histo
|
||||
// get default histogram with force=false to see if there is a cached histo
|
||||
double myMinVal, myMaxVal;
|
||||
QgsRasterBandStats theBandStats = bandStatistics( theBandNo );
|
||||
double myerval = ( theBandStats.maximumValue - theBandStats.minimumValue ) / theBinCount;
|
||||
myMinVal = theBandStats.minimumValue - 0.1*myerval;
|
||||
myMaxVal = theBandStats.maximumValue + 0.1*myerval;
|
||||
int *myHistogramArray=0;
|
||||
CPLErr myError = GDALGetDefaultHistogram( myGdalBand, &myMinVal, &myMaxVal,
|
||||
&theBinCount, &myHistogramArray, false,
|
||||
NULL, NULL );
|
||||
if( myHistogramArray )
|
||||
int myBinCount;
|
||||
int *myHistogramArray = 0;
|
||||
CPLErr myError = GDALGetDefaultHistogram( myGdalBand, &myMinVal, &myMaxVal,
|
||||
&myBinCount, &myHistogramArray, false,
|
||||
NULL, NULL );
|
||||
if ( myHistogramArray )
|
||||
VSIFree( myHistogramArray );
|
||||
|
||||
// if there was any error/warning assume the histogram is not valid or non-existent
|
||||
if ( myError != CE_None )
|
||||
return false;
|
||||
return true;
|
||||
|
||||
// make sure the cached histo has the same number of bins than requested
|
||||
if ( myBinCount != theBinCount )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void QgsGdalProvider::populateHistogram( int theBandNo, QgsRasterBandStats & theBandStats, int theBinCount, bool theIgnoreOutOfRangeFlag, bool theHistogramEstimatedFlag )
|
||||
@ -1460,34 +1461,58 @@ void QgsGdalProvider::populateHistogram( int theBandNo, QgsRasterBandStats & the
|
||||
theIgnoreOutOfRangeFlag != theBandStats.isHistogramOutOfRange ||
|
||||
theHistogramEstimatedFlag != theBandStats.isHistogramEstimated )
|
||||
{
|
||||
QgsDebugMsg( "Computing histogram" );
|
||||
theBandStats.histogramVector->clear();
|
||||
theBandStats.isHistogramEstimated = theHistogramEstimatedFlag;
|
||||
theBandStats.isHistogramOutOfRange = theIgnoreOutOfRangeFlag;
|
||||
int *myHistogramArray = new int[theBinCount];
|
||||
|
||||
#if 0
|
||||
CPLErr GDALRasterBand::GetHistogram(
|
||||
double dfMin,
|
||||
double dfMax,
|
||||
int nBuckets,
|
||||
int * panHistogram,
|
||||
int bIncludeOutOfRange,
|
||||
int bApproxOK,
|
||||
GDALProgressFunc pfnProgress,
|
||||
void * pProgressData
|
||||
)
|
||||
#endif
|
||||
|
||||
QgsGdalProgress myProg;
|
||||
myProg.type = ProgressHistogram;
|
||||
myProg.provider = this;
|
||||
double myerval = ( theBandStats.maximumValue - theBandStats.minimumValue ) / theBinCount;
|
||||
|
||||
#if 0 // this is the old method
|
||||
|
||||
double myerval = ( theBandStats.maximumValue - theBandStats.minimumValue ) / theBinCount;
|
||||
GDALGetRasterHistogram( myGdalBand, theBandStats.minimumValue - 0.1*myerval,
|
||||
theBandStats.maximumValue + 0.1*myerval, theBinCount, myHistogramArray,
|
||||
theIgnoreOutOfRangeFlag, theHistogramEstimatedFlag, progressCallback,
|
||||
&myProg ); //this is the arg for our custom gdal progress callback
|
||||
|
||||
#else // this is the new method, which gets a "Default" histogram
|
||||
|
||||
// calculate min/max like in GDALRasterBand::GetDefaultHistogram, but don't call it directly
|
||||
// because there is no bApproxOK argument - that is lacking from the API
|
||||
double myMinVal, myMaxVal;
|
||||
const char* pszPixelType = GDALGetMetadataItem( myGdalBand, "PIXELTYPE", "IMAGE_STRUCTURE" );
|
||||
int bSignedByte = ( pszPixelType != NULL && EQUAL( pszPixelType, "SIGNEDBYTE" ) );
|
||||
|
||||
if ( GDALGetRasterDataType( myGdalBand ) == GDT_Byte && !bSignedByte )
|
||||
{
|
||||
myMinVal = -0.5;
|
||||
myMaxVal = 255.5;
|
||||
}
|
||||
else
|
||||
{
|
||||
CPLErr eErr = CE_Failure;
|
||||
double dfHalfBucket = 0;
|
||||
eErr = GDALGetRasterStatistics( myGdalBand, TRUE, TRUE, &myMinVal, &myMaxVal, NULL, NULL );
|
||||
if ( eErr != CE_None )
|
||||
return;
|
||||
dfHalfBucket = ( myMaxVal - myMinVal ) / ( 2 * theBinCount );
|
||||
myMinVal -= dfHalfBucket;
|
||||
myMaxVal += dfHalfBucket;
|
||||
}
|
||||
|
||||
CPLErr myError = GDALGetRasterHistogram( myGdalBand, myMinVal, myMaxVal,
|
||||
theBinCount, myHistogramArray,
|
||||
theIgnoreOutOfRangeFlag, theHistogramEstimatedFlag, progressCallback,
|
||||
&myProg ); //this is the arg for our custom gdal progress callback
|
||||
if ( myError != CE_None )
|
||||
return;
|
||||
|
||||
#endif
|
||||
|
||||
for ( int myBin = 0; myBin < theBinCount; myBin++ )
|
||||
{
|
||||
if ( myHistogramArray[myBin] < 0 ) //can't have less than 0 pixels of any value
|
||||
@ -2063,7 +2088,8 @@ QgsRasterBandStats QgsGdalProvider::bandStatistics( int theBandNo )
|
||||
{
|
||||
GDALRasterBandH myGdalBand = GDALGetRasterBand( mGdalDataset, theBandNo );
|
||||
QgsRasterBandStats myRasterBandStats;
|
||||
int bApproxOK = true;
|
||||
// int bApproxOK = true;
|
||||
int bApproxOK = false; //as we asked for stats, don't get approx values
|
||||
double pdfMin;
|
||||
double pdfMax;
|
||||
double pdfMean;
|
||||
@ -2072,16 +2098,6 @@ QgsRasterBandStats QgsGdalProvider::bandStatistics( int theBandNo )
|
||||
myProg.type = ProgressHistogram;
|
||||
myProg.provider = this;
|
||||
|
||||
// double myerval =
|
||||
// GDALComputeRasterStatistics (
|
||||
// myGdalBand, bApproxOK, &pdfMin, &pdfMax, &pdfMean, &pdfStdDev,
|
||||
// progressCallback, &myProg ) ;
|
||||
// double myerval =
|
||||
// GDALGetRasterStatistics ( myGdalBand, bApproxOK, TRUE, &pdfMin, &pdfMax, &pdfMean, &pdfStdDev);
|
||||
// double myerval =
|
||||
// GDALGetRasterStatisticsProgress ( myGdalBand, bApproxOK, TRUE, &pdfMin, &pdfMax, &pdfMean, &pdfStdDev,
|
||||
// progressCallback, &myProg );
|
||||
|
||||
// try to fetch the cached stats (bForce=FALSE)
|
||||
CPLErr myerval =
|
||||
GDALGetRasterStatistics( myGdalBand, bApproxOK, FALSE, &pdfMin, &pdfMax, &pdfMean, &pdfStdDev );
|
||||
|
164
tests/testdata/landsat.tif.aux.xml
vendored
164
tests/testdata/landsat.tif.aux.xml
vendored
@ -1,164 +0,0 @@
|
||||
<PAMDataset>
|
||||
<PAMRasterBand band="1">
|
||||
<Histograms>
|
||||
<HistItem>
|
||||
<HistMin>121.996875</HistMin>
|
||||
<HistMax>130.003125</HistMax>
|
||||
<BucketCount>256</BucketCount>
|
||||
<IncludeOutOfRange>1</IncludeOutOfRange>
|
||||
<Approximate>0</Approximate>
|
||||
<HistCounts>22|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|377|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|2878|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|10013|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|13500|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|9834|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|2936|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|409|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|31</HistCounts>
|
||||
</HistItem>
|
||||
</Histograms>
|
||||
<Metadata>
|
||||
<MDI key="STATISTICS_MAXIMUM">130</MDI>
|
||||
<MDI key="STATISTICS_MEAN">126.001725</MDI>
|
||||
<MDI key="STATISTICS_MINIMUM">122</MDI>
|
||||
<MDI key="STATISTICS_STDDEV">1.1294343825018</MDI>
|
||||
</Metadata>
|
||||
</PAMRasterBand>
|
||||
<PAMRasterBand band="2">
|
||||
<Histograms>
|
||||
<HistItem>
|
||||
<HistMin>132.994140625</HistMin>
|
||||
<HistMax>148.005859375</HistMax>
|
||||
<BucketCount>256</BucketCount>
|
||||
<IncludeOutOfRange>1</IncludeOutOfRange>
|
||||
<Approximate>0</Approximate>
|
||||
<HistCounts>4|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|17|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|138|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|503|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1565|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|3906|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|6565|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|8690|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|7881|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|5463|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|3195|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1462|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|482|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|106|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|21|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|2</HistCounts>
|
||||
</HistItem>
|
||||
</Histograms>
|
||||
<Metadata>
|
||||
<MDI key="STATISTICS_MAXIMUM">148</MDI>
|
||||
<MDI key="STATISTICS_MEAN">140.388625</MDI>
|
||||
<MDI key="STATISTICS_MINIMUM">133</MDI>
|
||||
<MDI key="STATISTICS_STDDEV">1.8804376111365</MDI>
|
||||
</Metadata>
|
||||
</PAMRasterBand>
|
||||
<PAMRasterBand band="3">
|
||||
<Histograms>
|
||||
<HistItem>
|
||||
<HistMin>50.952734375</HistMin>
|
||||
<HistMax>172.047265625</HistMax>
|
||||
<BucketCount>256</BucketCount>
|
||||
<IncludeOutOfRange>1</IncludeOutOfRange>
|
||||
<Approximate>0</Approximate>
|
||||
<HistCounts>1|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|1|0|2|0|1|0|1|0|2|0|3|0|1|0|1|0|0|0|0|3|0|2|0|2|0|4|0|8|0|6|0|8|0|14|0|0|9|0|19|0|30|0|23|0|65|0|67|0|80|0|107|0|0|153|0|181|0|276|0|326|0|392|0|465|0|587|0|697|0|865|0|0|1031|0|1131|0|1382|0|1470|0|1650|0|1769|0|1998|0|2165|0|2312|0|0|2291|0|2360|0|2243|0|2105|0|1994|0|1736|0|1556|0|1296|0|1028|0|0|822|0|666|0|509|0|426|0|367|0|240|0|211|0|163|0|134|0|0|103|0|84|0|66|0|62|0|41|0|37|0|25|0|29|0|0|12|0|15|0|12|0|7|0|11|0|10|0|7|0|3|0|4|0|0|2|0|0|0|3|0|2|0|1|0|2|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1</HistCounts>
|
||||
</HistItem>
|
||||
</Histograms>
|
||||
<Metadata>
|
||||
<MDI key="STATISTICS_MAXIMUM">172</MDI>
|
||||
<MDI key="STATISTICS_MEAN">111.602125</MDI>
|
||||
<MDI key="STATISTICS_MINIMUM">51</MDI>
|
||||
<MDI key="STATISTICS_STDDEV">7.6436882775512</MDI>
|
||||
</Metadata>
|
||||
</PAMRasterBand>
|
||||
<PAMRasterBand band="4">
|
||||
<Histograms>
|
||||
<HistItem>
|
||||
<HistMin>57.981640625</HistMin>
|
||||
<HistMax>105.018359375</HistMax>
|
||||
<BucketCount>256</BucketCount>
|
||||
<IncludeOutOfRange>1</IncludeOutOfRange>
|
||||
<Approximate>0</Approximate>
|
||||
<HistCounts>1|0|0|0|0|1|0|0|0|0|1|0|0|0|0|0|2|0|0|0|0|3|0|0|0|0|0|2|0|0|0|0|8|0|0|0|0|0|38|0|0|0|0|84|0|0|0|0|0|190|0|0|0|0|471|0|0|0|0|895|0|0|0|0|0|1395|0|0|0|0|2048|0|0|0|0|0|2621|0|0|0|0|3435|0|0|0|0|0|4108|0|0|0|0|4718|0|0|0|0|0|4965|0|0|0|0|4372|0|0|0|0|3563|0|0|0|0|0|2417|0|0|0|0|1651|0|0|0|0|0|1027|0|0|0|0|679|0|0|0|0|0|420|0|0|0|0|314|0|0|0|0|0|205|0|0|0|0|128|0|0|0|0|90|0|0|0|0|0|50|0|0|0|0|30|0|0|0|0|0|25|0|0|0|0|17|0|0|0|0|0|6|0|0|0|0|8|0|0|0|0|0|5|0|0|0|0|4|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1</HistCounts>
|
||||
</HistItem>
|
||||
</Histograms>
|
||||
<Metadata>
|
||||
<MDI key="STATISTICS_MAXIMUM">105</MDI>
|
||||
<MDI key="STATISTICS_MEAN">75.515425</MDI>
|
||||
<MDI key="STATISTICS_MINIMUM">58</MDI>
|
||||
<MDI key="STATISTICS_STDDEV">3.6036803506104</MDI>
|
||||
</Metadata>
|
||||
</PAMRasterBand>
|
||||
<PAMRasterBand band="5">
|
||||
<Histograms>
|
||||
<HistItem>
|
||||
<HistMin>60.97578125</HistMin>
|
||||
<HistMax>123.02421875</HistMax>
|
||||
<BucketCount>256</BucketCount>
|
||||
<IncludeOutOfRange>1</IncludeOutOfRange>
|
||||
<Approximate>0</Approximate>
|
||||
<HistCounts>1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|4|0|0|0|1|0|0|0|2|0|0|0|0|0|0|0|0|1|0|0|0|4|0|0|0|0|0|0|0|6|0|0|0|9|0|0|0|26|0|0|0|47|0|0|0|0|93|0|0|0|165|0|0|0|258|0|0|0|466|0|0|0|699|0|0|0|982|0|0|0|1172|0|0|0|1420|0|0|0|0|1775|0|0|0|2063|0|0|0|2429|0|0|0|2881|0|0|0|3461|0|0|0|3775|0|0|0|3876|0|0|0|0|3583|0|0|0|2963|0|0|0|2312|0|0|0|1619|0|0|0|1198|0|0|0|753|0|0|0|583|0|0|0|403|0|0|0|0|281|0|0|0|202|0|0|0|145|0|0|0|97|0|0|0|70|0|0|0|41|0|0|0|39|0|0|0|27|0|0|0|0|19|0|0|0|18|0|0|0|6|0|0|0|9|0|0|0|7|0|0|0|3|0|0|0|2|0|0|0|1|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1</HistCounts>
|
||||
</HistItem>
|
||||
</Histograms>
|
||||
<Metadata>
|
||||
<MDI key="STATISTICS_MAXIMUM">123</MDI>
|
||||
<MDI key="STATISTICS_MEAN">89.83205</MDI>
|
||||
<MDI key="STATISTICS_MINIMUM">61</MDI>
|
||||
<MDI key="STATISTICS_STDDEV">4.7830003969789</MDI>
|
||||
</Metadata>
|
||||
</PAMRasterBand>
|
||||
<PAMRasterBand band="6">
|
||||
<Histograms>
|
||||
<HistItem>
|
||||
<HistMin>77.9578125</HistMin>
|
||||
<HistMax>186.0421875</HistMax>
|
||||
<BucketCount>256</BucketCount>
|
||||
<IncludeOutOfRange>1</IncludeOutOfRange>
|
||||
<Approximate>0</Approximate>
|
||||
<HistCounts>1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|1|0|0|3|0|1|0|1|0|0|2|0|0|0|3|0|0|0|0|0|0|0|3|0|0|0|1|0|0|1|0|2|0|3|0|0|7|0|6|0|0|8|0|16|0|37|0|0|41|0|75|0|73|0|0|129|0|155|0|214|0|0|246|0|326|0|0|397|0|564|0|699|0|0|814|0|971|0|988|0|0|1090|0|1230|0|0|1451|0|1523|0|1814|0|0|2028|0|2271|0|2477|0|0|2556|0|2631|0|2627|0|0|2346|0|2013|0|0|1788|0|1458|0|1034|0|0|844|0|630|0|501|0|0|411|0|296|0|0|234|0|200|0|153|0|0|119|0|92|0|81|0|0|67|0|43|0|0|49|0|30|0|28|0|0|19|0|22|0|16|0|0|7|0|8|0|3|0|0|2|0|8|0|0|3|0|1|0|2|0|0|1|0|1|0|1|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1</HistCounts>
|
||||
</HistItem>
|
||||
</Histograms>
|
||||
<Metadata>
|
||||
<MDI key="STATISTICS_MAXIMUM">186</MDI>
|
||||
<MDI key="STATISTICS_MEAN">129.161825</MDI>
|
||||
<MDI key="STATISTICS_MINIMUM">78</MDI>
|
||||
<MDI key="STATISTICS_STDDEV">7.2030887589545</MDI>
|
||||
</Metadata>
|
||||
</PAMRasterBand>
|
||||
<PAMRasterBand band="7">
|
||||
<Histograms>
|
||||
<HistItem>
|
||||
<HistMin>91.9453125</HistMin>
|
||||
<HistMax>232.0546875</HistMax>
|
||||
<BucketCount>256</BucketCount>
|
||||
<IncludeOutOfRange>1</IncludeOutOfRange>
|
||||
<Approximate>0</Approximate>
|
||||
<HistCounts>1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|2|0|2|0|1|0|1|0|0|1|0|2|0|1|0|0|0|0|1|0|0|0|0|0|0|0|2|0|3|2|0|2|0|2|0|4|0|3|0|2|3|0|5|0|6|0|18|0|13|0|19|33|0|43|0|63|0|64|0|73|92|0|126|0|173|0|187|0|240|0|288|338|0|428|0|509|0|566|0|651|0|675|839|0|817|0|946|0|992|0|1091|0|1203|1292|0|1395|0|1595|0|1697|0|1902|0|1971|2068|0|2110|0|2154|0|2004|0|1897|1657|0|1403|0|1220|0|962|0|798|0|648|505|0|412|0|280|0|253|0|200|0|152|150|0|115|0|100|0|99|0|64|0|58|51|0|38|0|26|0|37|0|29|28|0|18|0|10|0|14|0|11|0|6|8|0|5|0|4|0|2|0|7|0|0|1|0|3|0|2|0|1|0|1|0|0|0|0|0|0|1|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1</HistCounts>
|
||||
</HistItem>
|
||||
</Histograms>
|
||||
<Metadata>
|
||||
<MDI key="STATISTICS_MAXIMUM">232</MDI>
|
||||
<MDI key="STATISTICS_MEAN">161.523</MDI>
|
||||
<MDI key="STATISTICS_MINIMUM">92</MDI>
|
||||
<MDI key="STATISTICS_STDDEV">9.0533955508417</MDI>
|
||||
</Metadata>
|
||||
</PAMRasterBand>
|
||||
<PAMRasterBand band="8">
|
||||
<Histograms>
|
||||
<HistItem>
|
||||
<HistMin>121.948046875</HistMin>
|
||||
<HistMax>255.051953125</HistMax>
|
||||
<BucketCount>256</BucketCount>
|
||||
<IncludeOutOfRange>1</IncludeOutOfRange>
|
||||
<Approximate>0</Approximate>
|
||||
<HistCounts>1|0|0|2|0|0|0|0|0|0|0|0|0|0|0|1|0|1|0|0|0|0|0|0|0|0|0|1|0|0|1|0|1|0|0|0|1|0|2|0|0|0|3|0|0|0|1|0|0|0|0|0|1|0|0|0|0|1|0|1|0|0|0|1|0|1|0|3|0|3|0|2|0|3|0|2|0|0|2|0|5|0|3|0|4|0|1|0|6|0|3|0|7|0|9|0|6|0|7|0|7|0|10|17|0|11|0|11|0|13|0|18|0|24|0|31|0|36|0|36|0|40|0|41|0|51|0|70|79|0|89|0|91|0|140|0|165|0|195|0|202|0|275|0|304|0|419|0|442|0|587|0|632|766|0|864|0|1038|0|1153|0|1290|0|1328|0|1404|0|1577|0|1730|0|1807|0|1955|0|1907|0|1947|1949|0|1822|0|1852|0|1666|0|1509|0|1285|0|1066|0|954|0|722|0|636|0|557|0|439|0|362|286|0|269|0|209|0|177|0|149|0|149|0|130|0|97|0|94|0|86|0|65|0|69|0|58|53|0|48|0|33|0|43|0|27|0|19|0|21|0|34|0|27|0|18|0|20|0|17|0|9|8|0|78</HistCounts>
|
||||
</HistItem>
|
||||
</Histograms>
|
||||
<Metadata>
|
||||
<MDI key="STATISTICS_MAXIMUM">255</MDI>
|
||||
<MDI key="STATISTICS_MEAN">212.86295</MDI>
|
||||
<MDI key="STATISTICS_MINIMUM">122</MDI>
|
||||
<MDI key="STATISTICS_STDDEV">10.068851339527</MDI>
|
||||
</Metadata>
|
||||
</PAMRasterBand>
|
||||
<PAMRasterBand band="9">
|
||||
<Histograms>
|
||||
<HistItem>
|
||||
<HistMin>97.93984374999999</HistMin>
|
||||
<HistMax>252.06015625</HistMax>
|
||||
<BucketCount>256</BucketCount>
|
||||
<IncludeOutOfRange>1</IncludeOutOfRange>
|
||||
<Approximate>0</Approximate>
|
||||
<HistCounts>1|1|0|0|0|1|0|0|0|0|0|1|0|1|0|1|1|0|1|0|0|0|0|0|0|1|2|0|1|0|0|2|0|1|0|0|0|0|1|0|0|1|0|1|1|0|1|0|4|4|0|6|0|5|3|0|3|0|5|5|0|7|0|11|12|0|6|0|21|15|0|19|0|15|20|0|20|0|39|47|0|52|0|44|55|0|96|0|83|126|0|142|0|190|235|0|340|0|450|599|0|688|0|902|1121|0|1310|0|1513|1795|0|1956|0|2050|2184|0|2251|0|2322|2330|0|2343|0|2075|1992|0|1713|0|1451|1277|0|1015|869|0|730|0|569|460|0|364|0|287|250|0|216|0|169|159|0|126|0|108|91|0|83|0|63|65|0|65|0|47|40|0|34|0|35|26|0|21|0|14|15|0|17|0|14|11|0|13|0|6|6|0|9|0|3|3|0|4|0|1|2|0|3|0|3|1|0|2|0|1|1|0|0|0|0|1|0|0|0|2|1|0|1|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1</HistCounts>
|
||||
</HistItem>
|
||||
</Histograms>
|
||||
<Metadata>
|
||||
<MDI key="STATISTICS_MAXIMUM">252</MDI>
|
||||
<MDI key="STATISTICS_MEAN">169.351675</MDI>
|
||||
<MDI key="STATISTICS_MINIMUM">98</MDI>
|
||||
<MDI key="STATISTICS_STDDEV">8.2822852941912</MDI>
|
||||
</Metadata>
|
||||
</PAMRasterBand>
|
||||
</PAMDataset>
|
Loading…
x
Reference in New Issue
Block a user