[pktools] 219/375: debug ilayer in ogrWriter, copyFields should have two layers: one for read, one for write
Bas Couwenberg
sebastic at xs4all.nl
Wed Dec 3 21:54:15 UTC 2014
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 <kempenep at 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
More information about the Pkg-grass-devel
mailing list