22 #include "base/Optionpk.h"
24 #include "imageclasses/ImgWriterGdal.h"
28 int main(
int argc,
char *argv[])
32 Optionpk<string> dataType_opt(
"ot",
"otype",
"Data type for output image ({Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/CInt16/CInt32/CFloat32/CFloat64}). Empty string: inherit type from input image",
"Byte");
33 Optionpk<string> imageType_opt(
"of",
"oformat",
"image type string (see also gdal_translate)",
"GTiff");
34 Optionpk<string> option_opt(
"co",
"co",
"Creation option for output file. Multiple options can be specified.");
35 Optionpk<double> ulx_opt(
"ulx",
"ulx",
"Upper left x value bounding box (in geocoordinates if georef is true)", 0.0);
36 Optionpk<double> uly_opt(
"uly",
"uly",
"Upper left y value bounding box (in geocoordinates if georef is true)", 0.0);
39 Optionpk<string> projection_opt(
"a_srs",
"a_srs",
"Override the projection for the output file");
40 Optionpk<string> colorTable_opt(
"ct",
"ct",
"color table (file with 5 columns: id R G B ALFA (0: transparent, 255: solid)");
41 Optionpk<string> description_opt(
"d",
"description",
"Set image description");
46 doProcess=input_opt.retrieveOption(argc,argv);
47 output_opt.retrieveOption(argc,argv);
48 dataType_opt.retrieveOption(argc,argv);
49 imageType_opt.retrieveOption(argc,argv);
50 option_opt.retrieveOption(argc,argv);
51 ulx_opt.retrieveOption(argc,argv);
52 uly_opt.retrieveOption(argc,argv);
53 dx_opt.retrieveOption(argc,argv);
54 dy_opt.retrieveOption(argc,argv);
55 colorTable_opt.retrieveOption(argc,argv);
56 projection_opt.retrieveOption(argc,argv);
57 description_opt.retrieveOption(argc,argv);
58 verbose_opt.retrieveOption(argc,argv);
60 catch(
string predefinedString){
61 std::cout << predefinedString << std::endl;
66 cout <<
"Usage: pkascii2img -i input.txt -o output" << endl;
68 std::cout <<
"short option -h shows basic options only, use long option --help to show all options" << std::endl;
72 assert(input_opt.size());
73 assert(output_opt.size());
75 ifstream ifile(input_opt[0].c_str(),ios::in);
81 string interleave=
"BAND";
82 vector< vector<double> > data;
86 while(getline(ifile,line)){
89 istringstream ist(line);
99 for(
int icol=0;icol<row.size();++icol)
100 cout << row[icol] <<
" ";
109 cout <<
"nrow: " << nrow << endl;
110 cout <<
"ncol: " << ncol << endl;
113 catch(
string theError){
114 cout << theError << endl;
117 GDALDataType dataType=GDT_Unknown;
119 cout <<
"possible output data types: ";
120 for(
int iType = 0; iType < GDT_TypeCount; ++iType){
122 cout <<
" " << GDALGetDataTypeName((GDALDataType)iType);
123 if( GDALGetDataTypeName((GDALDataType)iType) != NULL
124 && EQUAL(GDALGetDataTypeName((GDALDataType)iType),
125 dataType_opt[0].c_str()))
126 dataType=(GDALDataType) iType;
131 if(dataType==GDT_Unknown)
132 cout <<
"Unknown output pixel type: " << dataType_opt[0] << endl;
134 cout <<
"Output pixel type: " << GDALGetDataTypeName(dataType) << endl;
137 imgWriter.open(output_opt[0],ncol,nrow,1,dataType,imageType_opt[0],option_opt);
138 if(description_opt.size())
139 imgWriter.setImageDescription(description_opt[0]);
140 if(projection_opt.size()){
141 assert(dx_opt.size());
142 assert(dy_opt.size());
144 cout << output_opt[0] <<
" is georeferenced." << endl;
152 imgWriter.setGeoTransform(gt);
153 imgWriter.setProjectionProj4(projection_opt[0]);
157 cout << output_opt[0] <<
" is not georeferenced." << endl;
158 assert(!imgWriter.isGeoRef());
160 if(colorTable_opt.size()){
161 assert(imgWriter.getDataType()==GDT_Byte);
162 imgWriter.setColorTable(colorTable_opt[0]);
164 assert(data.size()==nrow);
165 for(irow=0;irow<nrow;++irow)
166 imgWriter.writeData(data[irow],GDT_Float64,irow);