24 #include "base/Optionpk.h"
25 #include "imageclasses/ImgReaderOgr.h"
26 #include "pkdumpogr.h"
28 int main(
int argc,
char *argv[])
31 Optionpk<string> layer_opt(
"ln",
"lname",
"Layer name(s) in sample (leave empty to select all)");
33 Optionpk<string> attribute_opt(
"n",
"name",
"names of the attributes to select. Each attribute is stored in a separate band. Default is ALL: write all attributes",
"ALL");
34 Optionpk<bool> pos_opt(
"pos",
"pos",
"include position (x and y)",
false);
35 Optionpk<bool> transpose_opt(
"t",
"transpose",
"transpose output (does not work for -n ALL ",
false);
36 Optionpk<short> verbose_opt(
"v",
"verbose",
"verbose (Default: 0)", 0,2);
40 doProcess=input_opt.retrieveOption(argc,argv);
41 layer_opt.retrieveOption(argc,argv);
42 output_opt.retrieveOption(argc,argv);
43 attribute_opt.retrieveOption(argc,argv);
44 pos_opt.retrieveOption(argc,argv);
45 transpose_opt.retrieveOption(argc,argv);
46 verbose_opt.retrieveOption(argc,argv);
48 catch(
string predefinedString){
49 std::cout << predefinedString << std::endl;
54 cout <<
"Usage: pkdumpogr -i input.txt [-o output]" << endl;
56 std::cout <<
"short option -h shows basic options only, use long option --help to show all options" << std::endl;
60 assert(input_opt.size());
63 imgReader.open(input_opt[0]);
65 catch(
string errorstring){
66 cerr << errorstring << endl;
70 outputFile.open(output_opt[0].c_str(),ios::out);
75 int nlayerRead=inputReader.getDataSource()->GetLayerCount();
77 cout <<
"number of layers: " << nlayerRead << endl;
79 for(
int ilayer=0;ilayer<nlayerRead;++ilayer){
80 OGRLayer *readLayer=inputReader.getLayer(ilayer);
81 string currentLayername=readLayer->GetName();
83 if(find(layer_opt.begin(),layer_opt.end(),currentLayername)==layer_opt.end())
86 cout <<
"processing layer " << currentLayername << endl;
88 cout <<
" --lname " << currentLayername;
90 if(attribute_opt[0]!=
"ALL"){
91 vector<double> xvector;
92 vector<double> yvector;
93 if(inputReader.getGeometryType()==wkbPoint)
94 inputReader.readXY(xvector,yvector);
96 for(
int ifield=0;ifield<attribute_opt.size();++ifield){
98 cout <<
"field: " << ifield << endl;
99 theData[ifield].clear();
100 inputReader.readData(theData[ifield],OFTReal,attribute_opt[ifield],ilayer,verbose_opt[0]);
103 std::cout <<
"number of fields: " << theData.size() << std::endl;
104 std::cout <<
"number of samples: " << theData[0].size() << std::endl;
106 if(transpose_opt[0]){
107 if(pos_opt[0]&&(inputReader.getGeometryType()==wkbPoint)){
108 if(output_opt.size()){
109 outputFile <<
"X" <<
" ";
110 for(
int isample=0;isample<xvector.size();++isample){
111 outputFile << xvector[isample];
112 if(isample<xvector.size()-1)
115 outputFile << std::endl;
117 outputFile <<
"Y" <<
" ";
118 for(
int isample=0;isample<yvector.size();++isample){
119 outputFile << yvector[isample];
120 if(isample<yvector.size()-1)
123 outputFile << std::endl;
127 std::cout <<
"X" <<
" ";
128 for(
int isample=0;isample<xvector.size();++isample){
129 std::cout << xvector[isample];
130 if(isample<xvector.size()-1)
133 std::cout << std::endl;
135 std::cout <<
"Y" <<
" ";
136 for(
int isample=0;isample<yvector.size();++isample){
137 std::cout << yvector[isample];
138 if(isample<yvector.size()-1)
141 std::cout << std::endl;
145 for(
int ifield=0;ifield<theData.size();++ifield){
146 if(output_opt.size()){
147 outputFile << ifield <<
" ";
148 for(
int isample=0;isample<theData[0].size();++isample){
149 outputFile << theData[ifield][isample];
150 if(isample<theData[0].size()-1)
153 outputFile << std::endl;
157 std::cout << ifield <<
" ";
158 for(
int isample=0;isample<theData[0].size();++isample){
159 std::cout << theData[ifield][isample];
160 if(isample<theData[0].size()-1)
163 std::cout << std::endl;
169 for(
int isample=0;isample<theData[0].size();++isample){
170 if(output_opt.size()){
171 outputFile << isample <<
" ";
173 outputFile << xvector[isample] <<
" " << yvector[isample] <<
" ";
174 for(
int ifield=0;ifield<theData.size();++ifield){
175 outputFile << theData[ifield][isample];
176 if(ifield<theData.size()-1)
179 outputFile << std::endl;
183 std::cout << isample <<
" ";
185 std::cout << xvector[isample] <<
" " << yvector[isample] <<
" ";
186 for(
int ifield=0;ifield<theData.size();++ifield){
187 std::cout << theData[ifield][isample];
188 if(ifield<theData.size()-1)
191 std::cout << std::endl;
196 if(output_opt.size())
200 if(output_opt.size()){
201 ofstream outputFile(output_opt[0].c_str(),ios::out);
202 outputFile << imgReader;
206 std::cout << imgReader;