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 009288c132afd04b5b2c76c832f101c544482672
Author: Pieter Kempeneers <kempe...@gmail.com>
Date:   Mon Mar 31 10:33:46 2014 +0200

    support of layer names
---
 src/apps/pkann.cc                |  6 +++---
 src/apps/pkextract.cc            | 12 ++++++++++--
 src/apps/pkfsann.cc              | 10 +++++-----
 src/apps/pkfssvm.cc              | 10 +++++-----
 src/apps/pkoptsvm.cc             | 10 +++++-----
 src/apps/pksvm.cc                |  6 +++---
 src/imageclasses/ImgReaderOgr.cc | 30 +++++++++++++++---------------
 src/imageclasses/ImgReaderOgr.h  | 22 +++++++++++-----------
 8 files changed, 57 insertions(+), 49 deletions(-)

diff --git a/src/apps/pkann.cc b/src/apps/pkann.cc
index 15c1464..fc8104d 100644
--- a/src/apps/pkann.cc
+++ b/src/apps/pkann.cc
@@ -40,7 +40,7 @@ int main(int argc, char *argv[])
   //--------------------------- command line options 
------------------------------------
   Optionpk<string> input_opt("i", "input", "input image"); 
   Optionpk<string> training_opt("t", "training", "training vector file. A 
single vector file contains all training features (must be set as: B0, B1, 
B2,...) for all classes (class numbers identified by label option). Use 
multiple training files for bootstrap aggregation (alternative to the bag and 
bsize options, where a random subset is taken from a single training file)"); 
-  Optionpk<string> tlayer_opt("tln", "tln", "training layer name","");
+  Optionpk<string> tlayer_opt("tln", "tln", "training layer name(s)");
   Optionpk<string> label_opt("label", "label", "identifier for class label in 
training vector file.","label"); 
   Optionpk<unsigned int> balance_opt("bal", "balance", "balance the input data 
to this number of samples for each class", 0);
   Optionpk<bool> random_opt("random", "random", "in case of balance, randomize 
input data", true);
@@ -213,9 +213,9 @@ int main(int argc, char *argv[])
       try{
        ImgReaderOgr trainingReaderBag(training_opt[ibag]);
         if(band_opt.size())
-          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
+          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);
         else
-          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
+          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);
         if(trainingMap.size()<2){
           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);
diff --git a/src/apps/pkextract.cc b/src/apps/pkextract.cc
index 889faf4..fa16986 100644
--- a/src/apps/pkextract.cc
+++ b/src/apps/pkextract.cc
@@ -44,6 +44,7 @@ int main(int argc, char *argv[])
 {
   Optionpk<string> image_opt("i", "image", "Input image file");
   Optionpk<string> sample_opt("s", "sample", "Input sample vector file or 
class file (e.g. Corine CLC) if class option is set");
+  Optionpk<string> layer_opt("ln", "ln", "layer name(s) in sample (leave empty 
to select all)");
   Optionpk<string> mask_opt("m", "mask", "Mask image file");
   Optionpk<int> msknodata_opt("msknodata", "msknodata", "Mask value where 
image is invalid. If a single mask is used, more nodata values can be set. If 
more masks are used, use one value for each mask.", 1);
   Optionpk<int> class_opt("c", "class", "Class(es) to extract from input 
sample image. Leave empty to extract all valid data pixels from sample file");
@@ -72,6 +73,7 @@ int main(int argc, char *argv[])
   try{
     doProcess=image_opt.retrieveOption(argc,argv);
     sample_opt.retrieveOption(argc,argv);
+    layer_opt.retrieveOption(argc,argv);
     mask_opt.retrieveOption(argc,argv);
     msknodata_opt.retrieveOption(argc,argv);
     class_opt.retrieveOption(argc,argv);
@@ -773,7 +775,11 @@ int main(int argc, char *argv[])
       
     for(int ilayer=0;ilayer<nlayer;++ilayer){
       OGRLayer *readLayer=sampleReaderOgr.getLayer(ilayer);
-      cout << "processing layer " << readLayer->GetName() << endl;
+      string currentLayername=readLayer->GetName();
+      if(layer_opt.size())
+       
if(find(layer_opt.begin(),layer_opt.end(),currentLayername)==layer_opt.end())
+         continue;
+      cout << "processing layer " << currentLayername << endl;
       readLayer->ResetReading();
       OGRLayer *writeLayer;
       OGRLayer *writeTestLayer;
@@ -798,9 +804,11 @@ int main(int argc, char *argv[])
        }
       }
       if(verbose_opt[0])
-       std::cout << "copy fields" << std::flush << std::endl;
+       std::cout << "copy fields from layer " << ilayer << std::flush << 
std::endl;
       ogrWriter.copyFields(sampleReaderOgr,ilayer);
 
+      //hiero test: todo does not work
+      cout << "debug0" << endl;
       if(test_opt.size()){
        if(verbose_opt[0])
          std::cout << "copy fields test writer" << std::flush << std::endl;
diff --git a/src/apps/pkfsann.cc b/src/apps/pkfsann.cc
index b115dcb..44ddc5e 100644
--- a/src/apps/pkfsann.cc
+++ b/src/apps/pkfsann.cc
@@ -198,7 +198,7 @@ int main(int argc, char *argv[])
   //--------------------------- command line options 
------------------------------------
   Optionpk<string> input_opt("i", "input", "input test set (leave empty to 
perform a cross validation based on training only)"); 
   Optionpk<string> training_opt("t", "training", "training vector file. A 
single vector file contains all training features (must be set as: B0, B1, 
B2,...) for all classes (class numbers identified by label option). Use 
multiple training files for bootstrap aggregation (alternative to the bag and 
bsize options, where a random subset is taken from a single training file)"); 
-  Optionpk<string> tlayer_opt("tln", "tln", "training layer name","");
+  Optionpk<string> tlayer_opt("tln", "tln", "training layer name(s)");
   Optionpk<string> label_opt("\0", "label", "identifier for class label in 
training vector file.","label"); 
   Optionpk<unsigned short> maxFeatures_opt("n", "nf", "number of features to 
select (0 to select optimal number, see also ecost option)", 0);
   Optionpk<unsigned int> balance_opt("\0", "balance", "balance the input data 
to this number of samples for each class", 0);
@@ -310,18 +310,18 @@ int main(int argc, char *argv[])
   try{
     ImgReaderOgr trainingReader(training_opt[0]);
     if(band_opt.size()){
-      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=trainingReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
+       
totalTestSamples=trainingReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);
        inputReader.close();
       }
     }
     else{
-      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=trainingReader.readDataImageOgr(testMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
+       
totalTestSamples=trainingReader.readDataImageOgr(testMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);
        inputReader.close();
       }
     }
diff --git a/src/apps/pkfssvm.cc b/src/apps/pkfssvm.cc
index 4dcf05b..ed7f282 100644
--- a/src/apps/pkfssvm.cc
+++ b/src/apps/pkfssvm.cc
@@ -222,7 +222,7 @@ int main(int argc, char *argv[])
   //--------------------------- command line options 
------------------------------------
   Optionpk<string> input_opt("i", "input", "input test set (leave empty to 
perform a cross validation based on training only)"); 
   Optionpk<string> training_opt("t", "training", "training vector file. A 
single vector file contains all training features (must be set as: B0, B1, 
B2,...) for all classes (class numbers identified by label option)."); 
-  Optionpk<string> tlayer_opt("tln", "tln", "training layer name","");
+  Optionpk<string> tlayer_opt("tln", "tln", "training layer name(s)");
   Optionpk<string> label_opt("\0", "label", "identifier for class label in 
training vector file.","label"); 
   Optionpk<unsigned short> maxFeatures_opt("n", "nf", "number of features to 
select (0 to select optimal number, see also ecost option)", 0);
   Optionpk<unsigned int> balance_opt("\0", "balance", "balance the input data 
to this number of samples for each class", 0);
@@ -348,18 +348,18 @@ int main(int argc, char *argv[])
   try{
     ImgReaderOgr trainingReader(training_opt[0]);
     if(band_opt.size()){
-      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
+       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);
        inputReader.close();
       }
     }
     else{
-      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
+       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);
        inputReader.close();
       }
     }
diff --git a/src/apps/pkoptsvm.cc b/src/apps/pkoptsvm.cc
index ce77a17..44b2940 100644
--- a/src/apps/pkoptsvm.cc
+++ b/src/apps/pkoptsvm.cc
@@ -232,7 +232,7 @@ int main(int argc, char *argv[])
   vector<int> vreclass;
   Optionpk<string> input_opt("i", "input", "input image"); 
   Optionpk<string> training_opt("t", "training", "training vector file. A 
single vector file contains all training features (must be set as: B0, B1, 
B2,...) for all classes (class numbers identified by label option)."); 
-  Optionpk<string> tlayer_opt("tln", "tln", "training layer name","");
+  Optionpk<string> tlayer_opt("tln", "tln", "training layer name(s)");
   Optionpk<string> label_opt("\0", "label", "identifier for class label in 
training vector file.","label"); 
   // Optionpk<unsigned short> reclass_opt("\0", "rc", "reclass code (e.g. 
--rc=12 --rc=23 to reclass first two classes to 12 and 23 resp.).", 0);
   Optionpk<unsigned int> balance_opt("\0", "balance", "balance the input data 
to this number of samples for each class", 0);
@@ -357,18 +357,18 @@ int main(int argc, char *argv[])
   try{
     ImgReaderOgr trainingReader(training_opt[0]);
     if(band_opt.size()){
-      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
+       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);
        inputReader.close();
       }
     }
     else{
-      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
+       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);
        inputReader.close();
       }
       trainingReader.close();
diff --git a/src/apps/pksvm.cc b/src/apps/pksvm.cc
index 38e835f..9e396ed 100644
--- a/src/apps/pksvm.cc
+++ b/src/apps/pksvm.cc
@@ -50,7 +50,7 @@ int main(int argc, char *argv[])
   //--------------------------- command line options 
------------------------------------
   Optionpk<string> input_opt("i", "input", "input image"); 
   Optionpk<string> training_opt("t", "training", "training vector file. A 
single vector file contains all training features (must be set as: B0, B1, 
B2,...) for all classes (class numbers identified by label option). Use 
multiple training files for bootstrap aggregation (alternative to the bag and 
bsize options, where a random subset is taken from a single training file)");
-  Optionpk<string> tlayer_opt("tln", "tln", "training layer name","");
+  Optionpk<string> tlayer_opt("tln", "tln", "training layer name(s)");
   Optionpk<string> label_opt("label", "label", "identifier for class label in 
training vector file.","label"); 
   Optionpk<unsigned int> balance_opt("bal", "balance", "balance the input data 
to this number of samples for each class", 0);
   Optionpk<bool> random_opt("random", "random", "in case of balance, randomize 
input data", true);
@@ -255,9 +255,9 @@ int main(int argc, char *argv[])
       try{
        ImgReaderOgr trainingReaderBag(training_opt[ibag]);
         if(band_opt.size())
-          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
+          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt,verbose_opt[0]);
         else
-          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],tlayer_opt[0],label_opt[0],verbose_opt[0]);
+          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt,verbose_opt[0]);
         if(trainingMap.size()<2){
           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);
diff --git a/src/imageclasses/ImgReaderOgr.cc b/src/imageclasses/ImgReaderOgr.cc
index 8472796..db5d7cc 100644
--- a/src/imageclasses/ImgReaderOgr.cc
+++ b/src/imageclasses/ImgReaderOgr.cc
@@ -218,11 +218,11 @@ std::ostream& operator<<(std::ostream& theOstream, 
ImgReaderOgr& theImageReader)
 // }
 
 unsigned int 
ImgReaderOgr::readDataImageOgr(std::map<std::string,Vector2d<float> > 
&mapPixels, //[classNr][pixelNr][bandNr],
-                                             std::vector<std::string>& fields,
-                                             const std::vector<short>& bands,
-                                             const std::string& label,
-                                             const std::string& layername,
-                                             int verbose)
+                                           std::vector<std::string>& fields,
+                                           const std::vector<short>& bands,
+                                           const std::string& label,
+                                           const std::vector<std::string>& 
layers,
+                                           int verbose)
 {
   mapPixels.clear();
   int nsample=0;
@@ -232,8 +232,8 @@ unsigned int 
ImgReaderOgr::readDataImageOgr(std::map<std::string,Vector2d<float>
     std::cout << "reading shape file " << m_filename  << std::endl;
   for(int ilayer=0;ilayer<getLayerCount();++ilayer){
     std::string currentLayername=getLayer(ilayer)->GetName();
-    if(!layername.empty())
-      if(currentLayername!=layername)
+    if(layers.size())
+      if(find(layers.begin(),layers.end(),currentLayername)==layers.end())
        continue;
     try{
       //only retain bands in fields
@@ -301,12 +301,12 @@ unsigned int 
ImgReaderOgr::readDataImageOgr(std::map<std::string,Vector2d<float>
 }
 
 unsigned int 
ImgReaderOgr::readDataImageOgr(std::map<std::string,Vector2d<float> > 
&mapPixels, //[classNr][pixelNr][bandNr],
-                                             std::vector<std::string>& fields,
-                                             double start,
-                                             double end,
-                                             const std::string& label,
-                                             const std::string& layername,
-                                             int verbose)
+                                           std::vector<std::string>& fields,
+                                           double start,
+                                           double end,
+                                           const std::string& label,
+                                           const std::vector<std::string>& 
layers,
+                                           int verbose)
 {
   mapPixels.clear();
   int nsample=0;
@@ -316,8 +316,8 @@ unsigned int 
ImgReaderOgr::readDataImageOgr(std::map<std::string,Vector2d<float>
     std::cout << "reading shape file " << m_filename  << std::endl;
   for(int ilayer=0;ilayer<getLayerCount();++ilayer){
     std::string currentLayername=getLayer(ilayer)->GetName();
-    if(!layername.empty())
-      if(currentLayername!=layername)
+    if(layers.size())
+      if(find(layers.begin(),layers.end(),currentLayername)==layers.end())
        continue;
     try{
       //only retain bands in fields
diff --git a/src/imageclasses/ImgReaderOgr.h b/src/imageclasses/ImgReaderOgr.h
index 12e48c4..f15f905 100644
--- a/src/imageclasses/ImgReaderOgr.h
+++ b/src/imageclasses/ImgReaderOgr.h
@@ -49,19 +49,19 @@ public:
   template <typename T> int readData(std::map<int,Vector2d<T> >& data, const 
OGRFieldType& fieldType, std::vector<std::string>& fields, const std::string& 
label, int layer=0, bool pos=false, bool verbose=false);//default layer 0 and 
no pos information in data
   template <typename T> int readData(std::map<std::string,Vector2d<T> >& data, 
const OGRFieldType& fieldType, std::vector<std::string>& fields, const 
std::string& label, int layer=0, bool pos=false, bool verbose=false);//default 
layer 0 and no pos information in data
   unsigned int readDataImageOgr(std::map<std::string,Vector2d<float> > 
&mapPixels, //[classNr][pixelNr][bandNr],
-                                 std::vector<std::string>& fields,
-                                 const std::vector<short>& bands,
-                                 const std::string& label,
-                                 const std::string& layername=std::string(),
-                                 int verbose=false);
+                               std::vector<std::string>& fields,
+                               const std::vector<short>& bands,
+                               const std::string& label,
+                               const std::vector<std::string>& layers,
+                               int verbose=false);
 
   unsigned int readDataImageOgr(std::map<std::string,Vector2d<float> > 
&mapPixels, //[classNr][pixelNr][bandNr],
-                                 std::vector<std::string>& fields,
-                                 double start,
-                                 double end,
-                                 const std::string& label,
-                                 const std::string& layername=std::string(),
-                                 int verbose=false);
+                               std::vector<std::string>& fields,
+                               double start,
+                               double end,
+                               const std::string& label,
+                               const std::vector<std::string>& layers,
+                               int verbose=false);
 
   void shape2ascii(std::ostream& theOstream, const std::string& pointname, int 
layer=0, bool verbose=false);
   unsigned long int getFeatureCount(int layer=0) const;

-- 
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

Reply via email to