[pktools] 03/375: support for mask values in pkinfo min/max values
Bas Couwenberg
sebastic at xs4all.nl
Wed Dec 3 21:53:52 UTC 2014
This is an automated email from the git hooks/post-receive script.
sebastic-guest pushed a commit to branch upstream-master
in repository pktools.
commit 24cc89baa83c5017228f0ef605eb9b405e8771bf
Author: Pieter Kempeneers <kempenep at gmail.com>
Date: Thu Aug 23 18:49:27 2012 +0200
support for mask values in pkinfo min/max values
---
src/apps/pkinfo.cc | 2 +-
src/imageclasses/ImgReaderGdal.cc | 71 +++++++++++++++++++++++++++++----------
2 files changed, 54 insertions(+), 19 deletions(-)
diff --git a/src/apps/pkinfo.cc b/src/apps/pkinfo.cc
index 0e393e9..d3fa74e 100644
--- a/src/apps/pkinfo.cc
+++ b/src/apps/pkinfo.cc
@@ -266,7 +266,7 @@ int main(int argc, char *argv[])
if(minmax_opt[0]){
assert(band_opt[0]<imgReader.nrOfBand());
- imgReader.getMinMax(minValue,maxValue,band_opt[0]);
+ imgReader.getMinMax(minValue,maxValue,band_opt[0],true);
std::cout << "--min " << minValue << " --max " << maxValue << " ";
}
if(hist_opt[0]){
diff --git a/src/imageclasses/ImgReaderGdal.cc b/src/imageclasses/ImgReaderGdal.cc
index 047d9da..0456e74 100644
--- a/src/imageclasses/ImgReaderGdal.cc
+++ b/src/imageclasses/ImgReaderGdal.cc
@@ -308,37 +308,59 @@ bool ImgReaderGdal::covers(double ulx, double uly, double lrx, double lry) cons
double ImgReaderGdal::getMin(int& x, int& y, int band) const{
double minValue=0;
vector<double> lineBuffer(nrOfCol());
+ bool init=false;
for(int irow=0;irow<nrOfRow();++irow){
readData(lineBuffer,GDT_Float64,irow,band);
- if(!irow)//initialize
- minValue=lineBuffer[0];
for(int icol=0;icol<nrOfCol();++icol){
- if(minValue>lineBuffer[icol]){
- y=irow;
- x=icol;
- minValue=lineBuffer[icol];
+ bool valid=(find(m_noDataValues.begin(),m_noDataValues.end(),lineBuffer[icol])==m_noDataValues.end());
+ if(valid){
+ if(!init){
+ y=irow;
+ x=icol;
+ minValue=lineBuffer[icol];
+ init=true;
+ }
+ else if(minValue>lineBuffer[icol]){
+ y=irow;
+ x=icol;
+ minValue=lineBuffer[icol];
+ }
}
}
}
- return minValue;
+ if(init)
+ return minValue;
+ else
+ throw(static_cast<string>("Warning: not initialized"));
}
double ImgReaderGdal::getMax(int& x, int& y, int band) const{
double maxValue=0;
vector<double> lineBuffer(nrOfCol());
+ bool init=false;
for(int irow=0;irow<nrOfRow();++irow){
readData(lineBuffer,GDT_Float64,irow,band);
- if(!irow)//initialize
- maxValue=lineBuffer[0];
for(int icol=0;icol<nrOfCol();++icol){
- if(maxValue<lineBuffer[icol]){
- y=irow;
- x=icol;
- maxValue=lineBuffer[icol];
+ bool valid=(find(m_noDataValues.begin(),m_noDataValues.end(),lineBuffer[icol])==m_noDataValues.end());
+ if(valid){
+ if(!init){
+ y=irow;
+ x=icol;
+ maxValue=lineBuffer[icol];
+ init=true;
+ }
+ else if(maxValue<lineBuffer[icol]){
+ y=irow;
+ x=icol;
+ maxValue=lineBuffer[icol];
+ }
}
}
}
- return maxValue;
+ if(init)
+ return maxValue;
+ else
+ throw(static_cast<string>("Warning: not initialized"));
}
void ImgReaderGdal::getMinMax(double& minValue, double& maxValue, int band, bool exhaustiveSearch) const
@@ -357,15 +379,28 @@ void ImgReaderGdal::getMinMax(double& minValue, double& maxValue, int band, bool
maxValue=adfMinMax[1];
if(exhaustiveSearch){//force exhaustive search
vector<double> lineBuffer(nrOfCol());
+ bool init=false;
for(int irow=0;irow<nrOfRow();++irow){
readData(lineBuffer,GDT_Float64,irow,band);
for(int icol=0;icol<nrOfCol();++icol){
- if(minValue>lineBuffer[icol])
- minValue=lineBuffer[icol];
- if(maxValue<lineBuffer[icol])
- maxValue=lineBuffer[icol];
+ bool valid=(find(m_noDataValues.begin(),m_noDataValues.end(),lineBuffer[icol])==m_noDataValues.end());
+ if(valid){
+ if(!init){
+ minValue=lineBuffer[icol];
+ maxValue=lineBuffer[icol];
+ init=true;
+ }
+ else{
+ if(minValue>lineBuffer[icol])
+ minValue=lineBuffer[icol];
+ if(maxValue<lineBuffer[icol])
+ maxValue=lineBuffer[icol];
+ }
+ }
}
}
+ if(!init)
+ throw(static_cast<string>("Warning: not initialized"));
}
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pktools.git
More information about the Pkg-grass-devel
mailing list