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 28599c1e6e9dd4cad18ca37bf0a70768044db258
Author: Pieter Kempeneers <kempe...@gmail.com>
Date:   Mon Mar 31 23:01:06 2014 +0200

    debug ilayer in ogrWriter, copyFields should have two layers: one for read, 
one for write
---
 src/apps/pkann.cc                | 22 ++++++++++++----------
 src/apps/pkextract.cc            | 39 ++++++++++++++++++++-------------------
 src/apps/pksvm.cc                | 22 ++++++++++++----------
 src/imageclasses/ImgWriterOgr.cc | 19 +++++++++----------
 src/imageclasses/ImgWriterOgr.h  |  2 +-
 5 files changed, 54 insertions(+), 50 deletions(-)

diff --git a/src/apps/pkann.cc b/src/apps/pkann.cc
index fc8104d..52324f5 100644
--- a/src/apps/pkann.cc
+++ b/src/apps/pkann.cc
@@ -979,18 +979,20 @@ int main(int argc, char *argv[])
        if(verbose_opt[0])
          std::cout << "opening img writer and copying fields from img reader" 
<< output_opt[ivalidation] << std::endl;
        imgWriterOgr.open(output_opt[ivalidation],imgReaderOgr);
-       if(verbose_opt[0])
-         std::cout << "creating field class" << std::endl;
-       if(classValueMap.size())
-         imgWriterOgr.createField("class",OFTInteger);
-       else
-         imgWriterOgr.createField("class",OFTString);
       }
       if(verbose_opt[0])
        cout << "number of layers in input ogr file: " << 
imgReaderOgr.getLayerCount() << endl;
       for(int ilayer=0;ilayer<imgReaderOgr.getLayerCount();++ilayer){
        if(verbose_opt[0])
          cout << "processing input layer " << ilayer << endl;
+       if(output_opt.size()){
+         if(verbose_opt[0])
+           std::cout << "creating field class" << std::endl;
+         if(classValueMap.size())
+           imgWriterOgr.createField("class",OFTInteger,ilayer);
+         else
+           imgWriterOgr.createField("class",OFTString,ilayer);
+       }
        unsigned int nFeatures=imgReaderOgr.getFeatureCount(ilayer);
        unsigned int ifeature=0;
        progress=0;
@@ -1005,11 +1007,11 @@ int main(int argc, char *argv[])
          }
          OGRFeature *poDstFeature = NULL;
          if(output_opt.size()){
-           poDstFeature=imgWriterOgr.createFeature();
+           poDstFeature=imgWriterOgr.createFeature(ilayer);
            if( poDstFeature->SetFrom( poFeature, TRUE ) != OGRERR_NONE ){
              CPLError( CE_Failure, CPLE_AppDefined,
                        "Unable to translate feature %d from layer %s.\n",
-                       poFeature->GetFID(), 
imgWriterOgr.getLayerName().c_str() );
+                       poFeature->GetFID(), 
imgWriterOgr.getLayerName(ilayer).c_str() );
              OGRFeature::DestroyFeature( poFeature );
              OGRFeature::DestroyFeature( poDstFeature );
            }
@@ -1094,10 +1096,10 @@ int main(int argc, char *argv[])
          }
          CPLErrorReset();
          if(output_opt.size()){
-           if(imgWriterOgr.createFeature( poDstFeature ) != OGRERR_NONE){
+           if(imgWriterOgr.createFeature(poDstFeature,ilayer) != OGRERR_NONE){
              CPLError( CE_Failure, CPLE_AppDefined,
                        "Unable to translate feature %d from layer %s.\n",
-                       poFeature->GetFID(), 
imgWriterOgr.getLayerName().c_str() );
+                       poFeature->GetFID(), 
imgWriterOgr.getLayerName(ilayer).c_str() );
              OGRFeature::DestroyFeature( poDstFeature );
              OGRFeature::DestroyFeature( poDstFeature );
            }
diff --git a/src/apps/pkextract.cc b/src/apps/pkextract.cc
index fa16986..b79cc2c 100644
--- a/src/apps/pkextract.cc
+++ b/src/apps/pkextract.cc
@@ -769,17 +769,19 @@ int main(int argc, char *argv[])
     }
       
     //support multiple layers
-    int nlayer=sampleReaderOgr.getDataSource()->GetLayerCount();
+    int nlayerRead=sampleReaderOgr.getDataSource()->GetLayerCount();
+    int ilayerWrite=0;
     if(verbose_opt[0])
-      std::cout << "number of layers: " << nlayer << endl;
+      std::cout << "number of layers: " << nlayerRead << endl;
       
-    for(int ilayer=0;ilayer<nlayer;++ilayer){
+    for(int ilayer=0;ilayer<nlayerRead;++ilayer){
       OGRLayer *readLayer=sampleReaderOgr.getLayer(ilayer);
       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;
@@ -805,21 +807,19 @@ int main(int argc, char *argv[])
       }
       if(verbose_opt[0])
        std::cout << "copy fields from layer " << ilayer << std::flush << 
std::endl;
-      ogrWriter.copyFields(sampleReaderOgr,ilayer);
+      ogrWriter.copyFields(sampleReaderOgr,ilayer,ilayerWrite);
 
-      //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;
-       ogrTestWriter.copyFields(sampleReaderOgr,ilayer);
+       ogrTestWriter.copyFields(sampleReaderOgr,ilayer,ilayerWrite);
       }
-      vector<std::string> fieldnames;
-      if(verbose_opt[0])
-       std::cout << "get fields" << std::flush << std::endl;
-      sampleReaderOgr.getFields(fieldnames);
-      assert(fieldnames.size()==ogrWriter.getFieldCount(ilayer));
-      map<std::string,double> pointAttributes;
+      // vector<std::string> fieldnames;
+      // if(verbose_opt[0])
+      //       std::cout << "get fields" << std::flush << std::endl;
+      // sampleReaderOgr.getFields(fieldnames);
+      // assert(fieldnames.size()==ogrWriter.getFieldCount(ilayerWrite));
+      // map<std::string,double> pointAttributes;
 
       switch(ruleMap[rule_opt[0]]){
        // switch(rule_opt[0]){
@@ -828,7 +828,7 @@ int main(int argc, char *argv[])
        for(int iclass=0;iclass<class_opt.size();++iclass){
          ostringstream cs;
          cs << class_opt[iclass];
-         ogrWriter.createField(cs.str(),fieldType,ilayer);
+         ogrWriter.createField(cs.str(),fieldType,ilayerWrite);
        }
        break;
       }
@@ -837,9 +837,9 @@ int main(int argc, char *argv[])
       case(rule::maximum):
       case(rule::maxvote):
        assert(class_opt.size());
-      ogrWriter.createField(label_opt[0],fieldType,ilayer);
+      ogrWriter.createField(label_opt[0],fieldType,ilayerWrite);
       if(test_opt.size())
-       ogrTestWriter.createField(label_opt[0],fieldType,ilayer);
+       ogrTestWriter.createField(label_opt[0],fieldType,ilayerWrite);
       break;
       case(rule::point):
       case(rule::mean):
@@ -860,9 +860,9 @@ int main(int argc, char *argv[])
              if(verbose_opt[0]>1)
                std::cout << "creating field " << fs.str() << std::endl;
 
-             ogrWriter.createField(fs.str(),fieldType,ilayer);
+             ogrWriter.createField(fs.str(),fieldType,ilayerWrite);
              if(test_opt.size())
-               ogrTestWriter.createField(fs.str(),fieldType,ilayer);
+               ogrTestWriter.createField(fs.str(),fieldType,ilayerWrite);
            }
          }
        }
@@ -884,7 +884,7 @@ int main(int argc, char *argv[])
       //   std::string fieldname="fid";//number of the point
       //   if(verbose_opt[0]>1)
       //     std::cout << "creating field " << fieldname << std::endl;
-      //   //       ogrWriter.createField(fieldname,OFTInteger,ilayer);
+      //   //       ogrWriter.createField(fieldname,OFTInteger,ilayerWrite);
       //   boxWriter.createField(fieldname,OFTInteger,ilayer);
       // }
       progress=0;
@@ -2418,6 +2418,7 @@ int main(int argc, char *argv[])
       //   boxWriter.close();
       progress=1.0;
       pfnProgress(progress,pszMessage,pProgressArg);
+      ++ilayerWrite;
     }
     ogrWriter.close();
     if(test_opt.size())
diff --git a/src/apps/pksvm.cc b/src/apps/pksvm.cc
index 9e396ed..9e3deaa 100644
--- a/src/apps/pksvm.cc
+++ b/src/apps/pksvm.cc
@@ -977,18 +977,20 @@ int main(int argc, char *argv[])
        if(verbose_opt[0])
          std::cout << "opening img writer and copying fields from img reader" 
<< output_opt[ivalidation] << std::endl;
        imgWriterOgr.open(output_opt[ivalidation],imgReaderOgr);
-       if(verbose_opt[0])
-         std::cout << "creating field class" << std::endl;
-       if(classValueMap.size())
-         imgWriterOgr.createField("class",OFTInteger);
-       else
-         imgWriterOgr.createField("class",OFTString);
       }
       if(verbose_opt[0])
        cout << "number of layers in input ogr file: " << 
imgReaderOgr.getLayerCount() << endl;
       for(int ilayer=0;ilayer<imgReaderOgr.getLayerCount();++ilayer){
        if(verbose_opt[0])
          cout << "processing input layer " << ilayer << endl;
+       if(output_opt.size()){
+         if(verbose_opt[0])
+           std::cout << "creating field class" << std::endl;
+         if(classValueMap.size())
+           imgWriterOgr.createField("class",OFTInteger,ilayer);
+         else
+           imgWriterOgr.createField("class",OFTString,ilayer);
+       }
        unsigned int nFeatures=imgReaderOgr.getFeatureCount(ilayer);
        unsigned int ifeature=0;
        progress=0;
@@ -1003,11 +1005,11 @@ int main(int argc, char *argv[])
          }
          OGRFeature *poDstFeature = NULL;
          if(output_opt.size()){
-           poDstFeature=imgWriterOgr.createFeature();
+           poDstFeature=imgWriterOgr.createFeature(ilayer);
            if( poDstFeature->SetFrom( poFeature, TRUE ) != OGRERR_NONE ){
              CPLError( CE_Failure, CPLE_AppDefined,
                        "Unable to translate feature %d from layer %s.\n",
-                       poFeature->GetFID(), 
imgWriterOgr.getLayerName().c_str() );
+                       poFeature->GetFID(), 
imgWriterOgr.getLayerName(ilayer).c_str() );
              OGRFeature::DestroyFeature( poFeature );
              OGRFeature::DestroyFeature( poDstFeature );
            }
@@ -1115,10 +1117,10 @@ int main(int argc, char *argv[])
          }
          CPLErrorReset();
          if(output_opt.size()){
-           if(imgWriterOgr.createFeature( poDstFeature ) != OGRERR_NONE){
+           if(imgWriterOgr.createFeature(poDstFeature,ilayer) != OGRERR_NONE){
              CPLError( CE_Failure, CPLE_AppDefined,
                        "Unable to translate feature %d from layer %s.\n",
-                       poFeature->GetFID(), 
imgWriterOgr.getLayerName().c_str() );
+                       poFeature->GetFID(), 
imgWriterOgr.getLayerName(ilayer).c_str() );
              OGRFeature::DestroyFeature( poDstFeature );
              OGRFeature::DestroyFeature( poDstFeature );
            }
diff --git a/src/imageclasses/ImgWriterOgr.cc b/src/imageclasses/ImgWriterOgr.cc
index d5e5de2..4f040cf 100644
--- a/src/imageclasses/ImgWriterOgr.cc
+++ b/src/imageclasses/ImgWriterOgr.cc
@@ -45,7 +45,7 @@ ImgWriterOgr::ImgWriterOgr(const std::string& filename, 
ImgReaderOgr& imgReaderO
   for(int ilayer=0;ilayer<nlayer;++ilayer){
     std::string layername = imgReaderOgr.getLayer(ilayer)->GetName();
     
createLayer(layername,imgReaderOgr.getProjection(),imgReaderOgr.getGeometryType(),NULL);
-    copyFields(imgReaderOgr,ilayer);
+    copyFields(imgReaderOgr,ilayer,ilayer);
   }
 }
 
@@ -58,7 +58,7 @@ ImgWriterOgr::ImgWriterOgr(const std::string& filename, 
ImgReaderOgr& imgReaderO
   for(int ilayer=0;ilayer<nlayer;++ilayer){
     std::string layername = imgReaderOgr.getLayer(ilayer)->GetName();
     
createLayer(layername,imgReaderOgr.getProjection(),imgReaderOgr.getGeometryType(),NULL);
-    copyFields(imgReaderOgr,ilayer);
+    copyFields(imgReaderOgr,ilayer,ilayer);
     if(copyData){
       OGRFeature *poFeature;
       while(true){// (poFeature = imgReaderOgr.getLayer()->GetNextFeature()) 
!= NULL ){
@@ -112,7 +112,7 @@ void ImgWriterOgr::open(const std::string& filename, 
ImgReaderOgr& imgReaderOgr)
   for(int ilayer=0;ilayer<nlayer;++ilayer){
     std::string layername = imgReaderOgr.getLayer(ilayer)->GetName();
     
createLayer(layername,imgReaderOgr.getProjection(),imgReaderOgr.getGeometryType(),NULL);
-    copyFields(imgReaderOgr,ilayer);
+    copyFields(imgReaderOgr,ilayer,ilayer);
   }
 }
 
@@ -262,16 +262,15 @@ int ImgWriterOgr::getFields(std::vector<OGRFieldDefn*>& 
fields, int layer) const
   return(fields.size());
 }
 
-void ImgWriterOgr::copyFields(const ImgReaderOgr& imgReaderOgr, int theLayer){
-  if(theLayer<0)
-    theLayer=m_datasource->GetLayerCount()-1;//get back layer
+void ImgWriterOgr::copyFields(const ImgReaderOgr& imgReaderOgr, int srcLayer, 
int targetLayer){
+  if(targetLayer<0)
+    targetLayer=m_datasource->GetLayerCount()-1;//get back layer
   //get fields from imgReaderOgr
   std::vector<OGRFieldDefn*> fields;
   
-  imgReaderOgr.getFields(fields,theLayer);
-//   OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
+  imgReaderOgr.getFields(fields,srcLayer);
   for(int iField=0;iField<fields.size();++iField){
-    if(m_datasource->GetLayer(theLayer)->CreateField(fields[iField]) != 
OGRERR_NONE ){
+    if(m_datasource->GetLayer(targetLayer)->CreateField(fields[iField]) != 
OGRERR_NONE ){
       std::ostringstream es;
       es << "Creating field " << fields[iField]->GetNameRef() << " failed";
       std::string errorString=es.str();
@@ -602,7 +601,7 @@ int ImgWriterOgr::addData(const ImgReaderGdal& imgReader, 
int theLayer, bool ver
   for(int iband=0;iband<imgReader.nrOfBand();++iband){
     std::ostringstream fs;
     fs << "band" << iband;
-    createField(fs.str(),OFTReal);
+    createField(fs.str(),OFTReal,theLayer);
   }
   OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
   int nfield=poFDefn->GetFieldCount();
diff --git a/src/imageclasses/ImgWriterOgr.h b/src/imageclasses/ImgWriterOgr.h
index 6d54a69..327b9a7 100644
--- a/src/imageclasses/ImgWriterOgr.h
+++ b/src/imageclasses/ImgWriterOgr.h
@@ -51,7 +51,7 @@ public:
   std::string getLayerName(int layer=0){return 
m_datasource->GetLayer(layer)->GetLayerDefn()->GetName();};
   int getFields(std::vector<std::string>& fields, int layer=0) const;
   int getFields(std::vector<OGRFieldDefn*>& fields, int layer=0) const;
-  void copyFields(const ImgReaderOgr& imgReaderOgr, int theLayer=0);//default: 
get back layer
+  void copyFields(const ImgReaderOgr& imgReaderOgr, int srcLayer=0, int 
targetLayer=0);//default: get back layer
   void addLineString(std::vector<OGRPoint*>& points, const std::string& 
fieldName, const std::string& theId, int layer=0);
   void addRing(std::vector<OGRPoint*>& points, const std::string& fieldName, 
int theId, int layer=0);
   void addLineString(std::vector<OGRPoint*>& points, const std::string& 
fieldName, int theId, int layer=0);

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