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

📄 lasdiff.cpp

📁 Lidar数据处理时
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
===============================================================================

  FILE:  lasdiff.cpp

  CONTENTS:

    This tool reads two LIDAR files in LAS format and checks whether they are
    identical. Both the standard header, the variable header, and all points
    are checked.

  PROGRAMMERS:

    martin isenburg@cs.unc.edu

  COPYRIGHT:

    copyright (C) 2007  martin isenburg@cs.unc.edu

    This software is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

  CHANGE HISTORY:

    11 July 2007 -- added more complete reporting about differences
    23 February 2007 -- created just before getting ready for the cabin trip

===============================================================================
*/

#include "lasreader.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef _WIN32
extern "C" FILE* fopenGzipped(const char* filename, const char* mode);
#endif

void usage()
{
  fprintf(stderr,"usage:\n");
  fprintf(stderr,"lasdiff lidar1.las lidar2.las\n");
  fprintf(stderr,"lasdiff lidar1.las lidar1.las.lz\n");
  fprintf(stderr,"lasdiff -i lidar1.las -i lidar1.laz\n");
  fprintf(stderr,"lasdiff -h\n");
  exit(1);
}

static int lidardouble2string(char* string, double value0, double value1)
{
  int len;
  len = sprintf(string, "%f", value0) - 1;
  while (string[len] == '0') len--;
  if (string[len] != '.') len++;
  len += sprintf(&(string[len]), " %f", value1) - 1;
  while (string[len] == '0') len--;
  if (string[len] != '.') len++;
  string[len] = '\0';
  return len;
}

int main(int argc, char *argv[])
{
  int i;
  char* file_name_in1 = 0;
  char* file_name_in2 = 0;

  for (i = 1; i < argc; i++)
  {
    if (strcmp(argv[i],"-i") == 0)
    {
      i++;
      if (file_name_in1) file_name_in2 = argv[i];
      else file_name_in1 = argv[i];
    }
    else if (i == argc - 2 && file_name_in1 == 0 && file_name_in2 == 0)
    {
      if (file_name_in1) file_name_in2 = argv[i];
      else file_name_in1 = argv[i];
    }
    else if (i == argc - 1 && file_name_in1 && file_name_in2 == 0)
    {
      if (file_name_in1) file_name_in2 = argv[i];
      else file_name_in1 = argv[i];
    }
    else
    {
      usage();
    }
  }

  FILE* file_in1;
  if (file_name_in1)
  {
    if (strstr(file_name_in1, ".gz"))
    {
#ifdef _WIN32
      file_in1 = fopenGzipped(file_name_in1, "rb");
#else
      fprintf(stderr, "ERROR: no support for gzipped input\n");
      exit(1);
#endif
    }
    else
    {
      file_in1 = fopen(file_name_in1, "rb");
    }
    if (file_in1 == 0)
    {
      fprintf (stderr, "ERROR: could not open file '%s'\n", file_name_in1);
      usage();
    }
  }
  else
  {
    fprintf (stderr, "ERROR: no input specified\n");
    usage();
  }

  LASreader* lasreader1 = new LASreader();
  if (lasreader1->open(file_in1,false) == false)
  {
    fprintf (stderr, "ERROR: lasreader open failed for '%s'\n", file_name_in1);
    usage();
  }

  FILE* file_in2;
  if (file_name_in2)
  {
    if (strstr(file_name_in2, ".gz"))
    {
#ifdef _WIN32
      file_in2 = fopenGzipped(file_name_in2, "rb");
#else
      fprintf(stderr, "ERROR: no support for gzipped input\n");
      exit(1);
#endif
    }
    else
    {
      file_in2 = fopen(file_name_in2, "rb");
    }
    if (file_in2 == 0)
    {
      fprintf (stderr, "ERROR: could not open file '%s'\n", file_name_in2);
      usage();
    }
  }
  else
  {
    fprintf (stderr, "ERROR: no input specified\n");
    usage();
  }

  LASreader* lasreader2 = new LASreader();
  if (lasreader2->open(file_in2,false) == false)
  {
    fprintf (stderr, "ERROR: lasreader open failed for '%s'\n", file_name_in2);
    usage();
  }

  // check header

  if (memcmp((const void*)&(lasreader1->header), (const void*)&(lasreader2->header), sizeof(LASheader)))
  {
    char printstring[128];

    fprintf(stderr, "header is different\n");

    LASheader* lasheader1 = &(lasreader1->header);
    LASheader* lasheader2 = &(lasreader2->header);

    bool fatal_difference = false;

    if (strncmp(lasheader1->file_signature, lasheader2->file_signature, 4))
    {
      fprintf(stderr, "  file_signature: %s %s\n", lasheader1->file_signature, lasheader2->file_signature);
    }
    if (lasheader2->file_source_id != lasheader2->file_source_id)
    {
      fprintf(stderr, "  file_source_id: %d %d\n", lasheader1->file_source_id, lasheader2->file_source_id);
    }
    if (lasheader1->reserved != lasheader2->reserved)
    {
      fprintf(stderr, "  reserved: %d %d\n", lasheader1->reserved, lasheader2->reserved);
    }
    if (lasheader1->project_ID_GUID_data_1 != lasheader2->project_ID_GUID_data_1)
    {
      fprintf(stderr, "  project_ID_GUID_data_1: %d %d\n", lasheader1->project_ID_GUID_data_1, lasheader2->project_ID_GUID_data_1);
    }
    if (lasheader1->project_ID_GUID_data_2 != lasheader2->project_ID_GUID_data_2)
    {
      fprintf(stderr, "  project_ID_GUID_data_2: %d %d\n", lasheader1->project_ID_GUID_data_2, lasheader2->project_ID_GUID_data_2);
    }
    if (lasheader1->project_ID_GUID_data_3 != lasheader2->project_ID_GUID_data_3)
    {
      fprintf(stderr, "  project_ID_GUID_data_3: %d %d\n", lasheader1->project_ID_GUID_data_3, lasheader2->project_ID_GUID_data_3);
    }
    if (strncmp(lasheader1->project_ID_GUID_data_4, lasheader2->project_ID_GUID_data_4, 8))
    {
      fprintf(stderr, "  project_ID_GUID_data_4: %s %s\n", lasheader1->project_ID_GUID_data_4, lasheader2->project_ID_GUID_data_4);
    }
    if (lasheader1->version_major != lasheader2->version_major || lasheader1->version_minor != lasheader2->version_minor)
    {
      fprintf(stderr, "  version: %d.%d %d.%d\n", lasheader1->version_major, lasheader1->version_minor, lasheader2->version_major, lasheader2->version_minor);
    }
    if (strncmp(lasheader1->system_identifier, lasheader2->system_identifier, 32))
    {
      fprintf(stderr, "  system_identifier: %s %s\n", lasheader1->system_identifier, lasheader2->system_identifier);
    }
    if (strncmp(lasheader1->generating_software, lasheader2->generating_software, 32))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -