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 7d058c217ab8681910aa4723b57214245e7eb3f6 Author: Pieter Kempeneers <kempe...@gmail.com> Date: Sat Dec 28 14:34:11 2013 +0100 adfgeotransform gt[5]=-dy in pkcrop and pkmosaic --- ChangeLog | 7 +++ src/apps/pkclassify_nn.cc | 2 +- src/apps/pkclassify_svm.cc | 2 +- src/apps/pkcrop.cc | 2 +- src/apps/pkinfo.cc | 35 ++++++++++----- src/apps/pkmosaic.cc | 7 ++- src/apps/pkndvi.cc | 95 +++++++++++++++++++-------------------- src/apps/pkreclass.cc | 8 +++- src/apps/pkstatascii.cc | 24 ++++++---- src/apps/pkstatogr.cc | 16 +++++-- src/imageclasses/ImgReaderGdal.cc | 2 +- 11 files changed, 118 insertions(+), 82 deletions(-) diff --git a/ChangeLog b/ChangeLog index e859223..a30d37e 100755 --- a/ChangeLog +++ b/ChangeLog @@ -220,6 +220,13 @@ version 2.5 renamed mask to nodata - pkinfo hist: corrected nan when min=max + min and max changed to src_min and src_max (limit source values for histogram) + support for options -min and -max in addition to minmax (-mm): show min and max independently + - pkstatascii + min and max changed to src_min and src_max (limit source values for histogram) + support for options -min and -max in addition to minmax (-mm): show min and max independently - pkfilter corrected bug in 2d wavelet transform forward and inverse renamed mask to nodata + - pkndvi + changed minmax option to min and max. Min and max values now apply to scaled values diff --git a/src/apps/pkclassify_nn.cc b/src/apps/pkclassify_nn.cc index 5f56f2a..147d259 100644 --- a/src/apps/pkclassify_nn.cc +++ b/src/apps/pkclassify_nn.cc @@ -212,7 +212,7 @@ int main(int argc, char *argv[]) else totalSamples=trainingReaderBag.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); if(trainingMap.size()<2){ - string errorstring="Error: could not read at least two classes from training file"; + string errorstring="Error: could not read at least two classes from training file, did you provide class labels in training sample (see option label)?"; throw(errorstring); } trainingReaderBag.close(); diff --git a/src/apps/pkclassify_svm.cc b/src/apps/pkclassify_svm.cc index 95c6f8a..96ee9e1 100644 --- a/src/apps/pkclassify_svm.cc +++ b/src/apps/pkclassify_svm.cc @@ -254,7 +254,7 @@ int main(int argc, char *argv[]) else totalSamples=trainingReaderBag.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); if(trainingMap.size()<2){ - string errorstring="Error: could not read at least two classes from training file"; + string errorstring="Error: could not read at least two classes from training file, did you provide class labels in training sample (see option label)?"; throw(errorstring); } trainingReaderBag.close(); diff --git a/src/apps/pkcrop.cc b/src/apps/pkcrop.cc index a05dfa1..b812ae8 100644 --- a/src/apps/pkcrop.cc +++ b/src/apps/pkcrop.cc @@ -364,7 +364,7 @@ int main(int argc, char *argv[]) gt[2]=0; gt[3]=cropuly; gt[4]=0; - gt[5]=dy; + gt[5]=-dy; imgWriter.setGeoTransform(gt); if(projection_opt.size()){ if(verbose_opt[0]) diff --git a/src/apps/pkinfo.cc b/src/apps/pkinfo.cc index 2aa9b6f..60f7d90 100644 --- a/src/apps/pkinfo.cc +++ b/src/apps/pkinfo.cc @@ -38,15 +38,17 @@ int main(int argc, char *argv[]) Optionpk<bool> dx_opt("dx", "dx", "Gets resolution in x (in m)", false,0); Optionpk<bool> dy_opt("dy", "dy", "Gets resolution in y (in m)", false,0); Optionpk<bool> minmax_opt("mm", "minmax", "Shows min and max value of the image ", false,0); + Optionpk<bool> min_opt("min", "min", "Shows min value of the image ", false,0); + Optionpk<bool> max_opt("max", "max", "Shows max value of the image ", false,0); Optionpk<bool> stat_opt("stat", "stat", "Shows statistics (min,max, mean and stdDev of the image)", false,0); - Optionpk<double> min_opt("min", "min", "Sets minimum for histogram (does not calculate min value: use -mm instead)"); - Optionpk<double> max_opt("max", "max", "Sets maximum for histogram (does not calculate min value: use -mm instead)"); + Optionpk<double> src_min_opt("src_min", "src_min", "Sets minimum for histogram (does not calculate min value: use -mm instead)"); + Optionpk<double> src_max_opt("src_max", "src_max", "Sets maximum for histogram (does not calculate min value: use -mm instead)"); Optionpk<bool> relative_opt("rel", "rel", "Calculates relative histogram in percentage", false,0); Optionpk<bool> projection_opt("a_srs", "a_srs", "Shows projection of the image ", false,0); Optionpk<bool> geo_opt("geo", "geo", "Gets geotransform ", false,0); Optionpk<bool> interleave_opt("il", "interleave", "Shows interleave ", false,0); Optionpk<bool> filename_opt("f", "filename", "Shows image filename ", false,0); - Optionpk<bool> cover_opt("cov", "cover", "Print filename to stdout if current image covers the provided coordinates via bounding box, (x y) coordinates or extent of vector file", false,0); + Optionpk<bool> cover_opt("cover", "cover", "Print filename to stdout if current image covers the provided coordinates via bounding box, (x y) coordinates or extent of vector file", false,0); Optionpk<double> x_opt("x", "xpos", "x pos"); Optionpk<double> y_opt("y", "ypos", "y pos"); Optionpk<bool> read_opt("r", "read", "Reads row y (in projected coordinates if geo option is set, otherwise in image coordinates, 0 based)",false,0); @@ -78,9 +80,11 @@ int main(int argc, char *argv[]) dx_opt.retrieveOption(argc,argv); dy_opt.retrieveOption(argc,argv); minmax_opt.retrieveOption(argc,argv); - stat_opt.retrieveOption(argc,argv); min_opt.retrieveOption(argc,argv); max_opt.retrieveOption(argc,argv); + stat_opt.retrieveOption(argc,argv); + src_min_opt.retrieveOption(argc,argv); + src_max_opt.retrieveOption(argc,argv); relative_opt.retrieveOption(argc,argv); projection_opt.retrieveOption(argc,argv); geo_opt.retrieveOption(argc,argv); @@ -262,7 +266,7 @@ int main(int argc, char *argv[]) std::cout << "--min " << minValue << " --max " << maxValue << " --mean " << meanValue << " --stdDev " << stdDev << " "; } - if(minmax_opt[0]){ + if(minmax_opt[0]||min_opt[0]||max_opt[0]){ assert(band_opt[0]<imgReader.nrOfBand()); if((ulx_opt.size()||uly_opt.size()||lrx_opt.size()||lry_opt.size())&&(imgReader.covers(ulx_opt[0],uly_opt[0],lrx_opt[0],lry_opt[0]))){ double uli,ulj,lri,lrj; @@ -272,7 +276,14 @@ int main(int argc, char *argv[]) } else imgReader.getMinMax(minValue,maxValue,band_opt[0],true); - std::cout << "--min " << minValue << " --max " << maxValue << " "; + if(minmax_opt[0]) + std::cout << "--min " << minValue << " --max " << maxValue << " "; + else{ + if(min_opt[0]) + std::cout << "--min " << minValue << " "; + if(max_opt[0]) + std::cout << "--max " << maxValue << " "; + } } if(relative_opt[0]) hist_opt[0]=true; @@ -285,10 +296,10 @@ int main(int argc, char *argv[]) //todo: optimize such that getMinMax is only called once... imgReader.getMinMax(minValue,maxValue,band_opt[0]); - if(min_opt.size()) - minValue=min_opt[0]; - if(max_opt.size()) - maxValue=max_opt[0]; + if(src_min_opt.size()) + minValue=src_min_opt[0]; + if(src_max_opt.size()) + maxValue=src_max_opt[0]; unsigned long int nsample=imgReader.getHistogram(output,minValue,maxValue,nbin,band_opt[0]); std::cout.precision(10); for(int bin=0;bin<nbin;++bin){ @@ -312,11 +323,11 @@ int main(int argc, char *argv[]) } else{ int minCol,minRow; - if(min_opt.size()){ + if(src_min_opt.size()){ assert(band_opt[0]<imgReader.nrOfBand()); std::cout << "--min " << imgReader.getMin(minCol, minRow,band_opt[0]); } - if(max_opt.size()){ + if(src_max_opt.size()){ assert(band_opt[0]<imgReader.nrOfBand()); assert(band_opt[0]<imgReader.nrOfBand()); std::cout << "--max " << imgReader.getMax(minCol, minRow,band_opt[0]); diff --git a/src/apps/pkmosaic.cc b/src/apps/pkmosaic.cc index 4be22b3..d2aa332 100644 --- a/src/apps/pkmosaic.cc +++ b/src/apps/pkmosaic.cc @@ -382,7 +382,10 @@ int main(int argc, char *argv[]) } else nwriteBand=(file_opt[0])? bands.size()+1:bands.size(); - assert(output_opt.size()); + if(output_opt.empty()){ + std::cerr << "No output file provided (use option -o). Use --help for help information" << std::endl; + exit(0); + } if(verbose_opt[0]) cout << "open output image " << output_opt[0] << " with " << nwriteBand << " bands" << endl << flush; try{ @@ -401,7 +404,7 @@ int main(int argc, char *argv[]) gt[2]=0; gt[3]=maxULY; gt[4]=0; - gt[5]=dy; + gt[5]=-dy; imgWriter.setGeoTransform(gt); // imgWriter.setGeoTransform(minULX,maxULY,dx,dy,0,0); if(projection_opt.size()){ diff --git a/src/apps/pkndvi.cc b/src/apps/pkndvi.cc index bb989fc..3cf338f 100644 --- a/src/apps/pkndvi.cc +++ b/src/apps/pkndvi.cc @@ -36,10 +36,13 @@ int main(int argc, char *argv[]) Optionpk<int> nodata_opt("nodata", "nodata", "Flag value to put in image if not valid (0)", 0); Optionpk<string> colorTable_opt("ct", "ct", "color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)"); Optionpk<string> description_opt("d", "description", "Set image description"); - Optionpk<double> minmax_opt("m", "minmax", "minimum and maximum values for ndvi (limit all values smaller/larger to min/max", 0); + Optionpk<double> min_opt("min", "min", "minimum value for ndvi after scaling (set all values smaller than min to min)", 0); + Optionpk<double> max_opt("max", "max", "maximum value for ndvi after scaling (limit all values to max)"); Optionpk<double> eps_opt("e", "eps", "epsilon, contraint division by zero", 0); - Optionpk<double> scale_opt("s", "scale", "scale[0] is used for input, scale[1] is used for output: DN=scale[1]*ndvi+offset[1]", 1); - Optionpk<double> offset_opt("off", "offset", "offset[0] is used for input, offset[1] is used for output (see also scale option", 0); + Optionpk<double> src_scale_opt("src_s", "src_scale", "scale used for input, scale[1] is used for output: DN=scale[1]*ndvi+offset[1]", 1); + Optionpk<double> dst_scale_opt("dst_s", "src_scale", "scale used for output: DN=dst_s*ndvi+dst_offset", 1); + Optionpk<double> src_offset_opt("src_o", "src_offset", "offset used for input", 0); + Optionpk<double> dst_offset_opt("dst_o", "dst_offset", "offset is used for output: DN=dst_s*ndvi+dst_offset", 0); Optionpk<string> otype_opt("ot", "otype", "Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image", "Byte"); Optionpk<string> oformat_opt("of", "oformat", "Output image format (see also gdal_translate). Empty string: inherit from input image", "GTiff"); Optionpk<string> option_opt("co", "co", "Creation option for output file. Multiple options can be specified."); @@ -55,10 +58,13 @@ int main(int argc, char *argv[]) nodata_opt.retrieveOption(argc,argv); colorTable_opt.retrieveOption(argc,argv); description_opt.retrieveOption(argc,argv); - minmax_opt.retrieveOption(argc,argv); + min_opt.retrieveOption(argc,argv); + max_opt.retrieveOption(argc,argv); eps_opt.retrieveOption(argc,argv); - scale_opt.retrieveOption(argc,argv); - offset_opt.retrieveOption(argc,argv); + src_scale_opt.retrieveOption(argc,argv); + src_offset_opt.retrieveOption(argc,argv); + dst_scale_opt.retrieveOption(argc,argv); + dst_offset_opt.retrieveOption(argc,argv); otype_opt.retrieveOption(argc,argv); oformat_opt.retrieveOption(argc,argv); option_opt.retrieveOption(argc,argv); @@ -73,26 +79,15 @@ int main(int argc, char *argv[]) exit(0);//help was invoked, stop processing } - assert(input_opt.size()); - assert(output_opt.size()); - - if(scale_opt.size()<2){ - if(input_opt.size()<2) - scale_opt.push_back(1); - else - scale_opt.push_back(scale_opt[0]); + if(input_opt.empty()){ + std::cerr << "No input file provided (use option -i). Use --help for help information" << std::endl; + exit(0); } - if(verbose_opt[0]) - std::cout << scale_opt; - if(offset_opt.size()<2){ - if(input_opt.size()<2) - offset_opt.push_back(0); - else - offset_opt.push_back(offset_opt[0]); + if(output_opt.empty()){ + std::cerr << "No output file provided (use option -o). Use --help for help information" << std::endl; + exit(0); } - if(verbose_opt[0]) - std::cout << offset_opt; int reqBand=0; if(rule_opt[0]=="scale") reqBand=1; @@ -205,7 +200,7 @@ int main(int argc, char *argv[]) } assert(invalid_opt.size()==nodata_opt.size()); for(icol=0;icol<inputReader[0].nrOfCol();++icol){ - double ndvi=minmax_opt[0]; + double ndvi=min_opt[0]; double flagValue=nodata_opt[0]; bool valid=true; for(int iflag=0;valid&&iflag<invalid_opt.size();++iflag){ @@ -232,43 +227,43 @@ int main(int argc, char *argv[]) //Normalized Pigment Chlorophyll index (NPCI Penuelas1994): b0=R_430, b1=R_680 //Structure Intensive Pigment index (SIPI Penuelas 1995): b0=R_450, b1=R_800 //Lichtenthaler index 1 (Lic1 Lichtenthaler1996): b0=R_680, b2=R_800 - denom=(lineInput[1][icol]-offset_opt[0])/scale_opt[0]-(lineInput[0][icol]-offset_opt[0])/scale_opt[0]; - nom=(lineInput[1][icol]-offset_opt[0])/scale_opt[0]+(lineInput[0][icol]-offset_opt[0])/scale_opt[0]; + denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]; + nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]; } else if(rule_opt[0]=="ndvi2"){//normalized difference with different wavelengths used in denom and nom //Example of indices addressed by ndvi2 //Structure Intensive Pigment index (SIPI Penuelas 1995): b0=R_450, b1=R_800, b2=R_650, b=R_800 //Vogelmann index 2 (Vog2 Vogelmann1993): b0=R_747, b1=R_735, b2=R_715, b3=R_726 //Vogelmann index 3 (Vog3 Vogelmann1993): b0=R_747, b1=R_734, b2=R_715, b3=R_720 - denom=(lineInput[1][icol]-offset_opt[0])/scale_opt[0]-(lineInput[0][icol]-offset_opt[0])/scale_opt[0]; - nom=(lineInput[2][icol]-offset_opt[0])/scale_opt[0]+(lineInput[3][icol]-offset_opt[0])/scale_opt[0]; + denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]; + nom=(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[3][icol]-src_offset_opt[0])/src_scale_opt[0]; } else if(rule_opt[0]=="gvmi"){ - denom=((lineInput[0][icol]-offset_opt[0])/scale_opt[0]+0.1)-((lineInput[1][icol]-offset_opt[0])/scale_opt[0]+0.02); - nom=((lineInput[0][icol]-offset_opt[0])/scale_opt[0]+0.1)+((lineInput[1][icol]-offset_opt[0])/scale_opt[0]+0.02); + denom=((lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]+0.1)-((lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+0.02); + nom=((lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]+0.1)+((lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+0.02); } else if(rule_opt[0]=="vari"){ - denom=(lineInput[1][icol]-offset_opt[0])/scale_opt[0]-(lineInput[2][icol]-offset_opt[0])/scale_opt[0]; - nom=(lineInput[1][icol]-offset_opt[0])/scale_opt[0]+(lineInput[2][icol]-offset_opt[0])/scale_opt[0]-(lineInput[0][icol]-offset_opt[0])/scale_opt[0]; + denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]; + nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]; } else if(rule_opt[0]=="osavi"){//structural index (Rondeaux1996): //b0=R_670, b1=R_800 - denom=(1.0+0.16)*(lineInput[1][icol]-offset_opt[0])/scale_opt[0]-(lineInput[0][icol]-offset_opt[0])/scale_opt[0]; - nom=(lineInput[1][icol]-offset_opt[0])/scale_opt[0]+(lineInput[0][icol]-offset_opt[0])/scale_opt[0]+0.16; + denom=(1.0+0.16)*(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]; + nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]+(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]+0.16; } else if(rule_opt[0]=="mcari"){//chlorophyll index (Daughtry2000): b0=R_550, b1=R_670, b2=R_700 - denom=((lineInput[2][icol]-offset_opt[0])/scale_opt[0]-(lineInput[1][icol]-offset_opt[0])/scale_opt[0]-0.2*((lineInput[2][icol]-offset_opt[0])/scale_opt[0]-(lineInput[0][icol]-offset_opt[0])/scale_opt[0]))*(lineInput[2][icol]-offset_opt[0])/scale_opt[0]; - nom=(lineInput[1][icol]-offset_opt[0])/scale_opt[0]; + denom=((lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-0.2*((lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]))*(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]; + nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]; } else if(rule_opt[0]=="tcari"){//chlorophyll index (Haboudane2002): b0=R_550, b1=R_670, B2=R_700 - denom=3*((lineInput[1][icol]-offset_opt[0])/scale_opt[0]*(lineInput[2][icol]-offset_opt[0])/scale_opt[0]-(lineInput[1][icol]-offset_opt[0])/scale_opt[0]-0.2*((lineInput[2][icol]-offset_opt[0])/scale_opt[0]-(lineInput[0][icol]-offset_opt[0])/scale_opt[0])*(lineInput[2][icol]-offset_opt[0])/scale_opt[0]); - nom=(lineInput[1][icol]-offset_opt[0])/scale_opt[0]; + denom=3*((lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]*(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-0.2*((lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0])*(lineInput[2][icol]-src_offset_opt[0])/src_scale_opt[0]); + nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]; } else if(rule_opt[0]=="diff"){ - denom=(lineInput[1][icol]-offset_opt[0])/scale_opt[0]-(lineInput[0][icol]-offset_opt[0])/scale_opt[0]; + denom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]-(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]; nom=1.0; } else if(rule_opt[0]=="scale"){ - denom=(lineInput[0][icol]-offset_opt[0])/scale_opt[0]; + denom=(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]; nom=1.0; } else if(rule_opt[0]=="ratio"){ @@ -285,8 +280,8 @@ int main(int argc, char *argv[]) //Vogelmann index 1 (Vog1 Vogelmann1993): b0=R_740, b1=R_720 //Gitelson and Merzlyak 1 (GM1 Gitelson1997): b0=R_750 b1=R_550 //Gitelson and Merzlyak (GM2 Gitelson1997) b0=R_750 b1=R_700 - denom=(lineInput[0][icol]-offset_opt[0])/scale_opt[0]; - nom=(lineInput[1][icol]-offset_opt[0])/scale_opt[0]; + denom=(lineInput[0][icol]-src_offset_opt[0])/src_scale_opt[0]; + nom=(lineInput[1][icol]-src_offset_opt[0])/src_scale_opt[0]; } else{ std::cout << "Error: rule " << rule_opt[0] << " not supported" << std::endl; @@ -294,24 +289,24 @@ int main(int argc, char *argv[]) } if(nom>eps_opt[0]||nom<-eps_opt[0]) ndvi=denom/nom; - if(ndvi<minmax_opt[0]) - ndvi=minmax_opt[0]; - else if(minmax_opt.size()>1){ - if(ndvi>minmax_opt[1]) - ndvi=minmax_opt[1]; - } switch(theType){ case(GDT_Byte): case(GDT_Int16): case(GDT_UInt16): case(GDT_UInt32): case(GDT_Int32): - lineOutput[icol]=static_cast<int>(0.5+ndvi*scale_opt[1]+offset_opt[1]); + lineOutput[icol]=static_cast<int>(0.5+ndvi*dst_scale_opt[0]+dst_offset_opt[0]); break; default: - lineOutput[icol]=ndvi*scale_opt[1]+offset_opt[1]; + lineOutput[icol]=ndvi*dst_scale_opt[0]+dst_offset_opt[0]; break; } + if(lineOutput[icol]<min_opt[0]) + lineOutput[icol]=min_opt[0]; + else if(max_opt.size()){ + if(lineOutput[icol]>max_opt[0]) + lineOutput[icol]=max_opt[0]; + } } else lineOutput[icol]=flagValue; diff --git a/src/apps/pkreclass.cc b/src/apps/pkreclass.cc index 71cd8f2..2247a2a 100644 --- a/src/apps/pkreclass.cc +++ b/src/apps/pkreclass.cc @@ -71,8 +71,12 @@ int main(int argc, char *argv[]) std::cout << "short option -h shows basic options only, use long option --help to show all options" << std::endl; exit(0);//help was invoked, stop processing } - if(input_opt.empty()||output_opt.empty()){ - std::cout << "input or output files are missing, provide input (-i) and output (-o) files. Use -h or --help for more help information" << std::endl; + if(input_opt.empty()){ + std::cerr << "No input file provided (use option -i). Use --help for help information" << std::endl; + exit(0); + } + if(output_opt.empty()){ + std::cerr << "No output file provided (use option -o). Use --help for help information" << std::endl; exit(0); } diff --git a/src/apps/pkstatascii.cc b/src/apps/pkstatascii.cc index 6d6643d..7e9a233 100644 --- a/src/apps/pkstatascii.cc +++ b/src/apps/pkstatascii.cc @@ -48,8 +48,10 @@ int main(int argc, char *argv[]) Optionpk<bool> stdev_opt("stdev","stdev","calculate standard deviation",false); Optionpk<bool> sum_opt("sum","sum","calculate sum of column",false); Optionpk<bool> minmax_opt("mm","minmax","calculate minimum and maximum value",false); - Optionpk<double> min_opt("min","min","set minimum value",0); - Optionpk<double> max_opt("max","max","set maximum value",0); + Optionpk<bool> min_opt("min","min","calculate minimum value",false); + Optionpk<bool> max_opt("max","max","calculate maximum value",false); + Optionpk<double> src_min_opt("src_min","src_min","start reading source from this minimum value",0); + Optionpk<double> src_max_opt("src_max","src_max","stop reading source from this maximum value",0); Optionpk<bool> histogram_opt("hist","hist","calculate histogram",false); Optionpk<bool> histogram2d_opt("hist2d","hist2d","calculate 2-dimensional histogram based on two columns",false); Optionpk<short> nbin_opt("nbin","nbin","number of bins to calculate histogram",0); @@ -84,6 +86,8 @@ int main(int argc, char *argv[]) minmax_opt.retrieveOption(argc,argv); min_opt.retrieveOption(argc,argv); max_opt.retrieveOption(argc,argv); + src_min_opt.retrieveOption(argc,argv); + src_max_opt.retrieveOption(argc,argv); histogram_opt.retrieveOption(argc,argv); histogram2d_opt.retrieveOption(argc,argv); nbin_opt.retrieveOption(argc,argv); @@ -125,8 +129,8 @@ int main(int argc, char *argv[]) asciiReader.setMaxRow(range_opt[1]); asciiReader.readData(dataVector,col_opt); assert(dataVector.size()); - double minValue=min_opt[0]; - double maxValue=max_opt[0]; + double minValue=src_min_opt[0]; + double maxValue=src_max_opt[0]; if(histogram_opt[0]){ if(nbin_opt[0]<1){ std::cerr << "Warning: number of bins not defined, calculating bins from min and max value" << std::endl; @@ -135,10 +139,10 @@ int main(int argc, char *argv[]) nbin_opt[0]=maxValue-minValue+1; } } - double minX=min_opt[0]; - double minY=(min_opt.size()==2)? min_opt[1] : min_opt[0]; - double maxX=max_opt[0]; - double maxY=(max_opt.size()==2)? max_opt[1] : max_opt[0]; + double minX=src_min_opt[0]; + double minY=(src_min_opt.size()==2)? src_min_opt[1] : src_min_opt[0]; + double maxX=src_max_opt[0]; + double maxY=(src_max_opt.size()==2)? src_max_opt[1] : src_max_opt[0]; if(histogram2d_opt[0]){ assert(col_opt.size()==2); if(nbin_opt[0]<1){ @@ -181,6 +185,10 @@ int main(int argc, char *argv[]) cout << "min value column " << col_opt[icol] << ": " << stat.min(dataVector[icol]) << endl; cout << "max value column " << col_opt[icol] << ": " << stat.max(dataVector[icol]) << endl; } + if(min_opt[0]) + cout << "min value column " << col_opt[icol] << ": " << stat.min(dataVector[icol]) << endl; + if(max_opt[0]) + cout << "max value column " << col_opt[icol] << ": " << stat.max(dataVector[icol]) << endl; if(histogram_opt[0]){ //todo: support kernel density function and estimate sigma as in practical estimate of the bandwith in http://en.wikipedia.org/wiki/Kernel_density_estimation double sigma=0; diff --git a/src/apps/pkstatogr.cc b/src/apps/pkstatogr.cc index 81d8ec1..a088185 100644 --- a/src/apps/pkstatogr.cc +++ b/src/apps/pkstatogr.cc @@ -30,8 +30,10 @@ int main(int argc, char *argv[]) Optionpk<std::string> input_opt("i", "input", "Input shape file", ""); Optionpk<std::string> fieldname_opt("n", "fname", "fields on which to calculate statistics", ""); Optionpk<bool> minmax_opt("mm","minmax","calculate minimum and maximum value",false); - Optionpk<double> min_opt("min","min","set minimum value",0); - Optionpk<double> max_opt("max","max","set maximum value",0); + Optionpk<bool> min_opt("min","min","calculate minimum value",0); + Optionpk<bool> max_opt("max","max","calculate maximum value",0); + Optionpk<double> src_min_opt("min","min","set minimum value",0); + Optionpk<double> src_max_opt("max","max","set maximum value",0); Optionpk<bool> histogram_opt("hist","hist","calculate histogram",false); Optionpk<short> nbin_opt("nbin", "nbin", "number of bins", 0); Optionpk<bool> relative_opt("rel","relative","use percentiles for histogram to calculate histogram",false); @@ -48,6 +50,8 @@ int main(int argc, char *argv[]) minmax_opt.retrieveOption(argc,argv); min_opt.retrieveOption(argc,argv); max_opt.retrieveOption(argc,argv); + src_min_opt.retrieveOption(argc,argv); + src_max_opt.retrieveOption(argc,argv); histogram_opt.retrieveOption(argc,argv); nbin_opt.retrieveOption(argc,argv); relative_opt.retrieveOption(argc,argv); @@ -85,8 +89,8 @@ int main(int argc, char *argv[]) theData.clear(); inputReader.readData(theData,OFTReal,fieldname_opt[ifield],0,verbose_opt[0]); std::vector<double> binData; - double minValue=min_opt[0]; - double maxValue=max_opt[0]; + double minValue=src_min_opt[0]; + double maxValue=src_max_opt[0]; if(histogram_opt[0]){ if(nbin_opt[0]<1){ if(maxValue<=minValue) @@ -116,6 +120,10 @@ int main(int argc, char *argv[]) std::cout << " -min " << stat.min(theData); std::cout << " -max " << stat.max(theData); } + if(min_opt[0]) + std::cout << " -min " << stat.min(theData); + if(max_opt[0]) + std::cout << " -max " << stat.max(theData); if(median_opt[0]) std::cout << " -median " << stat.median(theData); if(size_opt[0]) diff --git a/src/imageclasses/ImgReaderGdal.cc b/src/imageclasses/ImgReaderGdal.cc index f7d970a..9d0a9a9 100644 --- a/src/imageclasses/ImgReaderGdal.cc +++ b/src/imageclasses/ImgReaderGdal.cc @@ -143,7 +143,7 @@ std::string ImgReaderGdal::getGeoTransform() const double gt[6];// { 444720, 30, 0, 3751320, 0, -30 }; m_gds->GetGeoTransform(gt); std::ostringstream s; - s << "[" << gt[0] << "," << gt[1] << "," << gt[2] << "," << gt[3] << "," << gt[4] << "," << -gt[5] << "]"; + s << "[" << gt[0] << "," << gt[1] << "," << gt[2] << "," << gt[3] << "," << gt[4] << "," << gt[5] << "]"; return(s.str()); // if(!isGeoRef()) // return(""); -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pktools.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel