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