📄 las2txt.cpp
字号:
}
else if (i == argc - 1 && file_name_in && file_name_out == 0)
{
file_name_out = argv[i];
}
}
// open input file
FILE* file_in;
if (ilas)
{
// output from stdin
file_in = stdin;
}
else
{
if (file_name_in)
{
if (strstr(file_name_in, ".gz"))
{
#ifdef _WIN32
file_in = fopenGzipped(file_name_in, "rb");
#else
fprintf(stderr, "ERROR: no support for gzipped input\n");
exit(1);
#endif
}
else
{
file_in = fopen(file_name_in, "rb");
}
if (file_in == 0)
{
fprintf(stderr, "ERROR: could not open '%s' for read\n",file_name_in);
exit(1);
}
}
else
{
fprintf(stderr, "ERROR: no input file specified\n");
usage();
}
}
LASreader* lasreader = new LASreader();
if (lasreader->open(file_in) == false)
{
fprintf (stderr, "ERROR: lasreader open failed for '%s'\n", file_name_in);
}
// open output file
FILE* file_out;
if (otxt)
{
// output to stdout
file_out = stdout;
}
else
{
// create output file name if needed
if (file_name_out == 0)
{
if (file_name_in == 0)
{
fprintf(stderr, "ERROR: no output file specified\n");
usage();
}
int len = strlen(file_name_in);
file_name_out = strdup(file_name_in);
if (file_name_out[len-3] == '.' && file_name_out[len-2] == 'g' && file_name_out[len-1] == 'z')
{
len = len - 4;
}
while (len > 0 && file_name_out[len] != '.')
{
len--;
}
file_name_out[len] = '.';
file_name_out[len+1] = 't';
file_name_out[len+2] = 'x';
file_name_out[len+3] = 't';
file_name_out[len+4] = '\0';
}
// open output file
file_out = fopen(file_name_out, "w");
// fail if output file does not open
if (file_out == 0)
{
fprintf(stderr, "ERROR: could not open '%s' for write\n",file_name_out);
exit(1);
}
}
// output header info
if (verbose)
{
LASheader* header = &(lasreader->header);
fprintf(stderr, "file signature: '%s'\n", header->file_signature);
fprintf(stderr, "file source ID: %d\n", header->file_source_id);
fprintf(stderr, "reserved: %d\n", header->reserved);
fprintf(stderr, "project ID GUID data 1-4: %d %d %d '%s'\n", header->project_ID_GUID_data_1, header->project_ID_GUID_data_2, header->project_ID_GUID_data_3, header->project_ID_GUID_data_4);
fprintf(stderr, "version major.minor: %d.%d\n", header->version_major, header->version_minor);
fprintf(stderr, "system_identifier: '%s'\n", header->system_identifier);
fprintf(stderr, "generating_software: '%s'\n", header->generating_software);
fprintf(stderr, "file creation day/year: %d/%d\n", header->file_creation_day, header->file_creation_year);
fprintf(stderr, "header size %d\n", header->header_size);
fprintf(stderr, "offset to point data %d\n", header->offset_to_point_data);
fprintf(stderr, "number var. length records %d\n", header->number_of_variable_length_records);
fprintf(stderr, "point data format %d\n", header->point_data_format);
fprintf(stderr, "point data record length %d\n", header->point_data_record_length);
fprintf(stderr, "number of point records %d\n", header->number_of_point_records);
fprintf(stderr, "number of points by return %d %d %d %d %d\n", header->number_of_points_by_return[0], header->number_of_points_by_return[1], header->number_of_points_by_return[2], header->number_of_points_by_return[3], header->number_of_points_by_return[4]);
fprintf(stderr, "scale factor x y z "); lidardouble2string(printstring, header->x_scale_factor, header->y_scale_factor, header->z_scale_factor, true); fprintf(stderr, printstring);
fprintf(stderr, "offset x y z "); lidardouble2string(printstring, header->x_offset, header->y_offset, header->z_offset, true); fprintf(stderr, printstring);
fprintf(stderr, "min x y z "); lidardouble2string(printstring, header->min_x, header->min_y, header->min_z, true); fprintf(stderr, printstring);
fprintf(stderr, "max x y z "); lidardouble2string(printstring, header->max_x, header->max_y, header->max_z, true); fprintf(stderr, printstring);
}
if (header_comment_sign)
{
LASheader* header = &(lasreader->header);
fprintf(file_out, "%c file signature: '%s'\012", header_comment_sign, header->file_signature);
fprintf(file_out, "%c file source ID: %d\012", header_comment_sign, header->file_source_id);
fprintf(file_out, "%c reserved: %d\012", header_comment_sign, header->reserved);
fprintf(file_out, "%c project ID GUID data 1-4: %d %d %d '%s'\012", header_comment_sign, header->project_ID_GUID_data_1, header->project_ID_GUID_data_2, header->project_ID_GUID_data_3, header->project_ID_GUID_data_4);
fprintf(file_out, "%c version major.minor: %d.%d\012", header_comment_sign, header->version_major, header->version_minor);
fprintf(file_out, "%c system_identifier: '%s'\012", header_comment_sign, header->system_identifier);
fprintf(file_out, "%c generating_software: '%s'\012", header_comment_sign, header->generating_software);
fprintf(file_out, "%c file creation day/year: %d/%d\012", header_comment_sign, header->file_creation_day, header->file_creation_year);
fprintf(file_out, "%c header size %d\012", header_comment_sign, header->header_size);
fprintf(file_out, "%c offset to point data %d\012", header_comment_sign, header->offset_to_point_data);
fprintf(file_out, "%c number var. length records %d\012", header_comment_sign, header->number_of_variable_length_records);
fprintf(file_out, "%c point data format %d\012", header_comment_sign, header->point_data_format);
fprintf(file_out, "%c point data record length %d\012", header_comment_sign, header->point_data_record_length);
fprintf(file_out, "%c number of point records %d\012", header_comment_sign, header->number_of_point_records);
fprintf(file_out, "%c number of points by return %d %d %d %d %d\012", header_comment_sign, header->number_of_points_by_return[0], header->number_of_points_by_return[1], header->number_of_points_by_return[2], header->number_of_points_by_return[3], header->number_of_points_by_return[4]);
fprintf(file_out, "%c scale factor x y z ", header_comment_sign); lidardouble2string(printstring, header->x_scale_factor, header->y_scale_factor, header->z_scale_factor, true); fprintf(file_out, printstring);
fprintf(file_out, "%c offset x y z ", header_comment_sign); lidardouble2string(printstring, header->x_offset, header->y_offset, header->z_offset, true); fprintf(file_out, printstring);
fprintf(file_out, "%c min x y z ", header_comment_sign); lidardouble2string(printstring, header->min_x, header->min_y, header->min_z, true); fprintf(file_out, printstring);
fprintf(file_out, "%c max x y z ", header_comment_sign); lidardouble2string(printstring, header->max_x, header->max_y, header->max_z, true); fprintf(file_out, printstring);
}
double xyz[3];
// read and convert the points to ASCII
while (lasreader->read_point(xyz))
{
i = 0;
while (true)
{
switch (parse_string[i])
{
case 'x': // the x coordinate
lidardouble2string(printstring, xyz[0]); fprintf(file_out, printstring);
break;
case 'y': // the y coordinate
lidardouble2string(printstring, xyz[1]); fprintf(file_out, printstring);
break;
case 'z': // the z coordinate
lidardouble2string(printstring, xyz[2]); fprintf(file_out, printstring);
break;
case 't': // the gps-time
lidardouble2string(printstring,lasreader->gps_time); fprintf(file_out, printstring);
break;
case 'i': // the intensity
fprintf(file_out, "%d", lasreader->point.intensity);
break;
case 'a': // the scan angle
fprintf(file_out, "%d", lasreader->point.scan_angle_rank);
break;
case 'r': // the number of the return
fprintf(file_out, "%d", lasreader->point.return_number);
break;
case 'c': // the classification
fprintf(file_out, "%d", lasreader->point.classification);
break;
case 'u': // the user data
fprintf(file_out, "%d", lasreader->point.user_data);
break;
case 'n': // the number of returns of given pulse
fprintf(file_out, "%d", lasreader->point.number_of_returns_of_given_pulse);
break;
case 'p': // the point source ID
fprintf(file_out, "%d", lasreader->point.point_source_ID);
break;
case 'e': // the edge of flight line flag
fprintf(file_out, "%d", lasreader->point.edge_of_flight_line);
break;
case 'd': // the direction of scan flag
fprintf(file_out, "%d", lasreader->point.scan_direction_flag);
break;
}
i++;
if (parse_string[i])
{
fprintf(file_out, "%c", separator_sign);
}
else
{
fprintf(file_out, "\012");
break;
}
}
}
// close the reader
lasreader->close();
// close the input file
fclose(file_in);
// close the output file
fclose(file_out);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -