⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 las2txt.cpp

📁 Lidar数据处理时
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    }
    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 + -