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 655c1250cc1e51903af0b25395382bdf33d4a69c
Author: Pieter Kempeneers <kempe...@gmail.com>
Date:   Sat Mar 29 23:02:51 2014 +0100

    support layer name in read training data in ogr
---
 ChangeLog                                       |  2 +-
 doc/{faq_pkcomposit.dox => faq_pkcomposite.dox} |  0
 src/apps/pkann.cc                               | 18 ++++++++++--------
 src/apps/pkfsann.cc                             | 18 ++++++++++--------
 src/apps/pkfssvm.cc                             | 16 +++++++++-------
 src/apps/pkoptsvm.cc                            | 16 +++++++++-------
 src/apps/pksvm.cc                               | 18 ++++++++++--------
 src/imageclasses/ImgReaderOgr.cc                | 14 ++++++++++++--
 src/imageclasses/ImgReaderOgr.h                 | 24 +++++++++++++-----------
 9 files changed, 74 insertions(+), 52 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d0ef20a..2d4767b 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -278,7 +278,7 @@ version 2.5.2
        removed underscore for QProcess in Windows
  - pkopt_svm -> pkoptsvm
        removed underscore for QProcess in Windows
- - pkmosaic -> pkcomposit
+ - pkmosaic -> pkcomposite
        name was confusing as also compositing is supported (unlike 
gdal_merge.py and gdalwarp)
  - version control for libraries
        thanks to suggestion of Francesco Paolo Lovergine
diff --git a/doc/faq_pkcomposit.dox b/doc/faq_pkcomposite.dox
similarity index 100%
rename from doc/faq_pkcomposit.dox
rename to doc/faq_pkcomposite.dox
diff --git a/src/apps/pkann.cc b/src/apps/pkann.cc
index b3cdb16..15c1464 100644
--- a/src/apps/pkann.cc
+++ b/src/apps/pkann.cc
@@ -39,8 +39,9 @@ int main(int argc, char *argv[])
   
   //--------------------------- command line options 
------------------------------------
   Optionpk<string> input_opt("i", "input", "input image"); 
-  Optionpk<string> training_opt("t", "training", "training shape file. A 
single shape 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> label_opt("label", "label", "identifier for class label in 
training shape file.","label"); 
+  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> 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);
   Optionpk<int> minSize_opt("min", "min", "if number of training pixels is 
less then min, do not take this class into account (0: consider all classes)", 
0);
@@ -83,6 +84,7 @@ int main(int argc, char *argv[])
   try{
     doProcess=input_opt.retrieveOption(argc,argv);
     training_opt.retrieveOption(argc,argv);
+    tlayer_opt.retrieveOption(argc,argv);
     label_opt.retrieveOption(argc,argv);
     balance_opt.retrieveOption(argc,argv);
     random_opt.retrieveOption(argc,argv);
@@ -137,7 +139,7 @@ int main(int argc, char *argv[])
     if(mask_opt.size())
       cout << "mask filename: " << mask_opt[0] << endl;
     if(training_opt.size()){
-      cout << "training shape file: " << endl;
+      cout << "training vector file: " << endl;
       for(int ifile=0;ifile<training_opt.size();++ifile)
         cout << training_opt[ifile] << endl;
     }
@@ -207,13 +209,13 @@ int main(int argc, char *argv[])
       trainingMap.clear();
       trainingPixels.clear();
       if(verbose_opt[0]>=1)
-        cout << "reading imageShape file " << training_opt[0] << endl;
+        cout << "reading imageVector file " << training_opt[0] << endl;
       try{
        ImgReaderOgr trainingReaderBag(training_opt[ibag]);
         if(band_opt.size())
-          
totalSamples=trainingReaderBag.readDataImageShape(trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]);
+          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
         else
-          
totalSamples=trainingReaderBag.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]);
+          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],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);
@@ -962,9 +964,9 @@ int main(int argc, char *argv[])
       classImageBag.close();
     classImageOut.close();
   }
-  else{//classify shape file
+  else{//classify vector file
     cm.clearResults();
-    //notice that fields have already been set by readDataImageShape (taking 
into account appropriate bands)
+    //notice that fields have already been set by readDataImageOgr (taking 
into account appropriate bands)
     for(int ivalidation=0;ivalidation<input_opt.size();++ivalidation){
       if(output_opt.size())
         assert(output_opt.size()==input_opt.size());
diff --git a/src/apps/pkfsann.cc b/src/apps/pkfsann.cc
index 777925d..b115dcb 100644
--- a/src/apps/pkfsann.cc
+++ b/src/apps/pkfsann.cc
@@ -197,8 +197,9 @@ 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 shape file. A 
single shape 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> label_opt("\0", "label", "identifier for class label in 
training shape file.","label"); 
+  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> 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);
   Optionpk<bool> random_opt("random","random", "in case of balance, randomize 
input data", true);
@@ -218,6 +219,7 @@ int main(int argc, char *argv[])
     doProcess=input_opt.retrieveOption(argc,argv);
     training_opt.retrieveOption(argc,argv);
     maxFeatures_opt.retrieveOption(argc,argv);
+    tlayer_opt.retrieveOption(argc,argv);
     label_opt.retrieveOption(argc,argv);
     balance_opt.retrieveOption(argc,argv);
     random_opt.retrieveOption(argc,argv);
@@ -261,7 +263,7 @@ int main(int argc, char *argv[])
   if(input_opt.size())
     cv_opt[0]=0;
   if(verbose_opt[0]>=1)
-    std::cout << "training shape file: " << training_opt[0] << std::endl;
+    std::cout << "training vector file: " << training_opt[0] << std::endl;
 
   unsigned int totalSamples=0;
   unsigned int totalTestSamples=0;
@@ -304,22 +306,22 @@ int main(int argc, char *argv[])
   map<string,Vector2d<float> > trainingMap;
   map<string,Vector2d<float> > testMap;
   if(verbose_opt[0]>=1)
-    std::cout << "reading imageShape file " << training_opt[0] << std::endl;
+    std::cout << "reading imageVector file " << training_opt[0] << std::endl;
   try{
     ImgReaderOgr trainingReader(training_opt[0]);
     if(band_opt.size()){
-      
totalSamples=trainingReader.readDataImageShape(trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=trainingReader.readDataImageShape(testMap,fields,band_opt,label_opt[0],verbose_opt[0]);
+       
totalTestSamples=trainingReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
        inputReader.close();
       }
     }
     else{
-      
totalSamples=trainingReader.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=trainingReader.readDataImageShape(testMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]);
+       
totalTestSamples=trainingReader.readDataImageOgr(testMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
        inputReader.close();
       }
     }
diff --git a/src/apps/pkfssvm.cc b/src/apps/pkfssvm.cc
index f1bcc61..4dcf05b 100644
--- a/src/apps/pkfssvm.cc
+++ b/src/apps/pkfssvm.cc
@@ -221,8 +221,9 @@ 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 shape file. A 
single shape file contains all training features (must be set as: B0, B1, 
B2,...) for all classes (class numbers identified by label option)."); 
-  Optionpk<string> label_opt("\0", "label", "identifier for class label in 
training shape file.","label"); 
+  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> 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);
   Optionpk<bool> random_opt("random","random", "in case of balance, randomize 
input data", true);
@@ -240,6 +241,7 @@ int main(int argc, char *argv[])
     doProcess=input_opt.retrieveOption(argc,argv);
     training_opt.retrieveOption(argc,argv);
     maxFeatures_opt.retrieveOption(argc,argv);
+    tlayer_opt.retrieveOption(argc,argv);
     label_opt.retrieveOption(argc,argv);
     balance_opt.retrieveOption(argc,argv);
     random_opt.retrieveOption(argc,argv);
@@ -285,7 +287,7 @@ int main(int argc, char *argv[])
   if(verbose_opt[0]>=1){
     if(input_opt.size())
       std::cout << "input filename: " << input_opt[0] << std::endl;
-    std::cout << "training shape file: " << std::endl;
+    std::cout << "training vector file: " << std::endl;
     for(int ifile=0;ifile<training_opt.size();++ifile)
       std::cout << training_opt[ifile] << std::endl;
     std::cout << "verbose: " << verbose_opt[0] << std::endl;
@@ -346,18 +348,18 @@ int main(int argc, char *argv[])
   try{
     ImgReaderOgr trainingReader(training_opt[0]);
     if(band_opt.size()){
-      
totalSamples=trainingReader.readDataImageShape(trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=inputReader.readDataImageShape(testMap,fields,band_opt,label_opt[0],verbose_opt[0]);
+       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
        inputReader.close();
       }
     }
     else{
-      
totalSamples=trainingReader.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=inputReader.readDataImageShape(testMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]);
+       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
        inputReader.close();
       }
     }
diff --git a/src/apps/pkoptsvm.cc b/src/apps/pkoptsvm.cc
index e63f37d..ce77a17 100644
--- a/src/apps/pkoptsvm.cc
+++ b/src/apps/pkoptsvm.cc
@@ -231,8 +231,9 @@ int main(int argc, char *argv[])
   map<short,int> reclassMap;
   vector<int> vreclass;
   Optionpk<string> input_opt("i", "input", "input image"); 
-  Optionpk<string> training_opt("t", "training", "training shape file. A 
single shape file contains all training features (must be set as: B0, B1, 
B2,...) for all classes (class numbers identified by label option)."); 
-  Optionpk<string> label_opt("\0", "label", "identifier for class label in 
training shape file.","label"); 
+  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> 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);
   Optionpk<bool> random_opt("random","random", "in case of balance, randomize 
input data", true);
@@ -253,6 +254,7 @@ int main(int argc, char *argv[])
   try{
     doProcess=input_opt.retrieveOption(argc,argv);
     training_opt.retrieveOption(argc,argv);
+    tlayer_opt.retrieveOption(argc,argv);
     label_opt.retrieveOption(argc,argv);
     // reclass_opt.retrieveOption(argc,argv);
     balance_opt.retrieveOption(argc,argv);
@@ -301,7 +303,7 @@ int main(int argc, char *argv[])
   if(verbose_opt[0]>=1){
     if(input_opt.size())
       std::cout << "input filename: " << input_opt[0] << std::endl;
-    std::cout << "training shape file: " << std::endl;
+    std::cout << "training vector file: " << std::endl;
     for(int ifile=0;ifile<training_opt.size();++ifile)
       std::cout << training_opt[ifile] << std::endl;
     std::cout << "verbose: " << verbose_opt[0] << std::endl;
@@ -355,18 +357,18 @@ int main(int argc, char *argv[])
   try{
     ImgReaderOgr trainingReader(training_opt[0]);
     if(band_opt.size()){
-      
totalSamples=trainingReader.readDataImageShape(trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=inputReader.readDataImageShape(testMap,fields,band_opt,label_opt[0],verbose_opt[0]);
+       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
        inputReader.close();
       }
     }
     else{
-      
totalSamples=trainingReader.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]);
+      
totalSamples=trainingReader.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
       if(input_opt.size()){
        ImgReaderOgr inputReader(input_opt[0]);
-       
totalTestSamples=inputReader.readDataImageShape(testMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]);
+       
totalTestSamples=inputReader.readDataImageOgr(testMap,fields,start_opt[0],end_opt[0],label_opt[0],tlayer_opt[0],verbose_opt[0]);
        inputReader.close();
       }
       trainingReader.close();
diff --git a/src/apps/pksvm.cc b/src/apps/pksvm.cc
index cead84e..38e835f 100644
--- a/src/apps/pksvm.cc
+++ b/src/apps/pksvm.cc
@@ -49,8 +49,9 @@ int main(int argc, char *argv[])
   
   //--------------------------- command line options 
------------------------------------
   Optionpk<string> input_opt("i", "input", "input image"); 
-  Optionpk<string> training_opt("t", "training", "training shape file. A 
single shape 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> label_opt("label", "label", "identifier for class label in 
training shape file.","label"); 
+  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> 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);
   Optionpk<int> minSize_opt("min", "min", "if number of training pixels is 
less then min, do not take this class into account (0: consider all classes)", 
0);
@@ -99,6 +100,7 @@ int main(int argc, char *argv[])
   try{
     doProcess=input_opt.retrieveOption(argc,argv);
     training_opt.retrieveOption(argc,argv);
+    tlayer_opt.retrieveOption(argc,argv);
     label_opt.retrieveOption(argc,argv);
     balance_opt.retrieveOption(argc,argv);
     random_opt.retrieveOption(argc,argv);
@@ -174,7 +176,7 @@ int main(int argc, char *argv[])
       std::cout << "input filename: " << input_opt[0] << std::endl;
     if(mask_opt.size())
       std::cout << "mask filename: " << mask_opt[0] << std::endl;
-    std::cout << "training shape file: " << std::endl;
+    std::cout << "training vector file: " << std::endl;
     for(int ifile=0;ifile<training_opt.size();++ifile)
       std::cout << training_opt[ifile] << std::endl;
     std::cout << "verbose: " << verbose_opt[0] << std::endl;
@@ -249,13 +251,13 @@ int main(int argc, char *argv[])
       trainingMap.clear();
       trainingPixels.clear();
       if(verbose_opt[0]>=1)
-        std::cout << "reading imageShape file " << training_opt[0] << 
std::endl;
+        std::cout << "reading imageVector file " << training_opt[0] << 
std::endl;
       try{
        ImgReaderOgr trainingReaderBag(training_opt[ibag]);
         if(band_opt.size())
-          
totalSamples=trainingReaderBag.readDataImageShape(trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]);
+          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,band_opt,label_opt[0],tlayer_opt[0],verbose_opt[0]);
         else
-          
totalSamples=trainingReaderBag.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]);
+          
totalSamples=trainingReaderBag.readDataImageOgr(trainingMap,fields,start_opt[0],end_opt[0],tlayer_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, did you provide class labels in training sample (see option 
label)?";
           throw(errorstring);
@@ -960,9 +962,9 @@ int main(int argc, char *argv[])
       classImageBag.close();
     classImageOut.close();
   }
-  else{//classify shape file
+  else{//classify vector file
     cm.clearResults();
-    //notice that fields have already been set by readDataImageShape (taking 
into account appropriate bands)
+    //notice that fields have already been set by readDataImageOgr (taking 
into account appropriate bands)
     for(int ivalidation=0;ivalidation<input_opt.size();++ivalidation){
       if(output_opt.size())
        assert(output_opt.size()==input_opt.size());
diff --git a/src/imageclasses/ImgReaderOgr.cc b/src/imageclasses/ImgReaderOgr.cc
index 500dac9..8472796 100644
--- a/src/imageclasses/ImgReaderOgr.cc
+++ b/src/imageclasses/ImgReaderOgr.cc
@@ -217,10 +217,11 @@ std::ostream& operator<<(std::ostream& theOstream, 
ImgReaderOgr& theImageReader)
 //   }
 // }
 
-unsigned int 
ImgReaderOgr::readDataImageShape(std::map<std::string,Vector2d<float> > 
&mapPixels, //[classNr][pixelNr][bandNr],
+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)
 {
   mapPixels.clear();
@@ -230,6 +231,10 @@ unsigned int 
ImgReaderOgr::readDataImageShape(std::map<std::string,Vector2d<floa
   if(verbose)
     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)
+       continue;
     try{
       //only retain bands in fields
       getFields(fields,ilayer);
@@ -295,11 +300,12 @@ unsigned int 
ImgReaderOgr::readDataImageShape(std::map<std::string,Vector2d<floa
   return totalSamples;
 }
 
-unsigned int 
ImgReaderOgr::readDataImageShape(std::map<std::string,Vector2d<float> > 
&mapPixels, //[classNr][pixelNr][bandNr],
+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)
 {
   mapPixels.clear();
@@ -309,6 +315,10 @@ unsigned int 
ImgReaderOgr::readDataImageShape(std::map<std::string,Vector2d<floa
   if(verbose)
     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)
+       continue;
     try{
       //only retain bands in fields
       getFields(fields,ilayer);
diff --git a/src/imageclasses/ImgReaderOgr.h b/src/imageclasses/ImgReaderOgr.h
index 36653e6..12e48c4 100644
--- a/src/imageclasses/ImgReaderOgr.h
+++ b/src/imageclasses/ImgReaderOgr.h
@@ -48,18 +48,20 @@ public:
   template <typename T> int readData(Vector2d<T>& data, const OGRFieldType& 
fieldType, std::vector<std::string>& fields, 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<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 readDataImageShape(std::map<std::string,Vector2d<float> > 
&mapPixels, //[classNr][pixelNr][bandNr],
-                                                      
std::vector<std::string>& fields,
-                                                      const 
std::vector<short>& bands,
-                                                      const std::string& label,
-                                                      int verbose=false);
+  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);
 
-  unsigned int readDataImageShape(std::map<std::string,Vector2d<float> > 
&mapPixels, //[classNr][pixelNr][bandNr],
-                                                      
std::vector<std::string>& fields,
-                                                      double start,
-                                                      double end,
-                                                      const std::string& label,
-                                                      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);
 
   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