initial upload
This commit is contained in:
196
archive/grid2xyz/main.cpp
Normal file
196
archive/grid2xyz/main.cpp
Normal file
@@ -0,0 +1,196 @@
|
||||
#include "headfile.h"
|
||||
#include "datatype.h"
|
||||
|
||||
void disp_help()
|
||||
{
|
||||
cout<<"grid2xyz 0.1 - convert various grid data into xyz file"<<endl<<endl
|
||||
<<"usage: grid2xyz <table-data> <data-format> [-n<nodata-value>] [-o<output-file>]"<<endl
|
||||
<<"data-format:"<<endl
|
||||
<<" 1. -arcgis_txt ArcGIS text grid"<<endl
|
||||
<<" 2. -surfer_txt Surfer text grid"<<endl
|
||||
<<" -n sign an alternative value for nodata point, default will put NaN for all nodata point"<<endl<<endl
|
||||
<<"example: data2xyz example.txt -arcgis_txt -n0.0 -oexample_out.xyz"<<endl;
|
||||
}
|
||||
int convert_arcgis_txt(char*,char*,double);
|
||||
int convert_surfer_txt(char*,char*);
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
char cmd_type[1024] = {0};
|
||||
char filename[1024] = {0};
|
||||
char out_filename[1024] = {0};
|
||||
char file_type[1024] = {0};
|
||||
double Nulldata = MAX;
|
||||
int table_type;
|
||||
|
||||
if (argc==1)
|
||||
{
|
||||
disp_help();
|
||||
}
|
||||
else
|
||||
{
|
||||
sscanf(argv[1],"%s",filename);
|
||||
//其他类型在此添加
|
||||
if(!strcmp(argv[2],ARCGIS_TXT)) table_type = 1;
|
||||
else if(!strcmp(argv[2],SURFER_TXT)) table_type = 2;
|
||||
else
|
||||
{
|
||||
cout<<BOLDRED<<"==> "<<RESET<<"no supported table format found "<<endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (int i = 3; i < argc; i++)
|
||||
{
|
||||
sscanf(argv[i],"%2s",cmd_type);
|
||||
if (!strcmp(cmd_type,NULLVALUE))
|
||||
{
|
||||
sscanf(argv[i],"%*2s%lf",&Nulldata);
|
||||
if (Nulldata == MAX)
|
||||
{
|
||||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||||
cout<<"Nodata point set to default"<<endl;
|
||||
}
|
||||
}
|
||||
else if (!strcmp(cmd_type,OUTPUT))
|
||||
{
|
||||
if (-1==sscanf(argv[i],"%*2s%s",out_filename))
|
||||
{
|
||||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else //未定义的命令符
|
||||
{
|
||||
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!strcmp(out_filename,""))
|
||||
{
|
||||
sscanf(argv[1],"%[^.]%s",out_filename,file_type);
|
||||
strcat(out_filename,".xyz");
|
||||
}
|
||||
|
||||
switch(table_type)
|
||||
{
|
||||
case 1: convert_arcgis_txt(filename,out_filename,Nulldata); break;
|
||||
case 2: convert_surfer_txt(filename,out_filename); break;
|
||||
default: cout<<BOLDRED<<"==> "<<RESET<<"table type outrange"<<endl; break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int convert_arcgis_txt(char* filename,char* outname,double Nullvalue)
|
||||
{
|
||||
ifstream filein(filename);
|
||||
if (!filein)
|
||||
{
|
||||
cout<<BOLDRED<<"==> "<<RESET<<"file not found: "<<filename<<endl;
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
arcgis_txt table1;
|
||||
string temp_str;
|
||||
|
||||
filein >> temp_str >> table1.ncols
|
||||
>> temp_str >> table1.nrows
|
||||
>> temp_str >> table1.xllcorner
|
||||
>> temp_str >> table1.yllcorner
|
||||
>> temp_str >> table1.cellsize
|
||||
>> temp_str >> table1.NODATA_value;
|
||||
table1.init_data_table();
|
||||
table1.set_data_table();
|
||||
for (int i = 0; i < table1.ncols*table1.nrows; i++)
|
||||
{
|
||||
filein >> table1.data_table[i];
|
||||
|
||||
}
|
||||
filein.close();
|
||||
|
||||
ofstream fileout(outname);
|
||||
for (int i = 0; i < table1.nrows; i++)
|
||||
{
|
||||
for (int j = 0; j < table1.ncols; j++)
|
||||
{
|
||||
if (table1.data_table[i*table1.ncols+j] == table1.NODATA_value)
|
||||
{
|
||||
if (Nullvalue == MAX)
|
||||
{
|
||||
fileout << table1.yllcorner + table1.nrows*table1.cellsize - i*table1.cellsize << " "
|
||||
<< table1.xllcorner + j*table1.cellsize << " "
|
||||
<< "NaN" << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
fileout << table1.yllcorner + table1.nrows*table1.cellsize - i*table1.cellsize << " "
|
||||
<< table1.xllcorner + j*table1.cellsize << " "
|
||||
<< Nullvalue << endl;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fileout << table1.yllcorner + table1.nrows*table1.cellsize - i*table1.cellsize << " "
|
||||
<< table1.xllcorner + j*table1.cellsize << " "
|
||||
<< table1.data_table[i*table1.ncols+j] << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
fileout.close();
|
||||
table1.clear_data_table();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int convert_surfer_txt(char* filename,char* outname)
|
||||
{
|
||||
double dx,dy,xtemp,ytemp;
|
||||
ifstream filein(filename);
|
||||
if (!filein)
|
||||
{
|
||||
cout<<BOLDRED<<"==> "<<RESET<<"file not found: "<<filename<<endl;
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
surfer_txt table1;
|
||||
string temp_str;
|
||||
|
||||
filein >> table1.headstr;
|
||||
if (table1.headstr != "DSAA")
|
||||
{
|
||||
cout<<BOLDRED<<"==> "<<RESET<<"file format is not correct: "<<filename<<endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
filein >> table1.ncols >> table1.nrows
|
||||
>> table1.xmin >> table1.xmax
|
||||
>> table1.ymin >> table1.ymax
|
||||
>> table1.zmin >> table1.zmax;
|
||||
table1.init_data_table();
|
||||
table1.set_data_table();
|
||||
for (int i = 0; i < table1.ncols*table1.nrows; i++)
|
||||
{
|
||||
filein >> table1.data_table[i];
|
||||
|
||||
}
|
||||
filein.close();
|
||||
|
||||
dx = (table1.xmax-table1.xmin)/table1.nrows+1;
|
||||
dy = (table1.ymax-table1.ymin)/table1.ncols+1;
|
||||
|
||||
ofstream fileout(outname);
|
||||
for (int i = 0; i < table1.ncols*table1.nrows; i++)
|
||||
{
|
||||
xtemp = (i%table1.ncols)*dx+table1.xmin;
|
||||
ytemp = (i/table1.ncols)*dy+table1.ymin;
|
||||
|
||||
fileout<<xtemp<<" "<<ytemp<<" "<<table1.data_table[i]<<endl;
|
||||
}
|
||||
fileout.close();
|
||||
table1.clear_data_table();
|
||||
return 0;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user