コード例 #1
0
ファイル: build_dem.c プロジェクト: glshort/MapReady
static int asf_mosaic_utm(char **files, char *outfile, int zone,
                          double lat_lo, double lat_hi,
                          double lon_lo, double lon_hi,
                          double background_val)
{
    project_parameters_t pp;
    projection_type_t projection_type = UNIVERSAL_TRANSVERSE_MERCATOR;

    pp.utm.zone = zone;

    // force calculation of these values
    pp.utm.lon0 = MAGIC_UNSET_DOUBLE;
    pp.utm.lat0 = MAGIC_UNSET_DOUBLE;

    int force = TRUE;
    resample_method_t resample = RESAMPLE_BILINEAR;
    double height = 0;
    datum_type_t datum = WGS84_DATUM;
    spheroid_type_t spheroid = WGS84_SPHEROID;
    double ps = -1;
    char overlap[25]="OVERLAY";

    return asf_mosaic(&pp, projection_type, force, resample, height,
	datum, spheroid, ps, TRUE, 0, files, outfile, background_val,
        lat_lo, lat_hi, lon_lo, lon_hi, overlap, FALSE);
}
コード例 #2
0
ファイル: mosaic.c プロジェクト: DavinSimmons/ASF_MapReady
int main(int argc, char *argv[])
{
    handle_common_asf_args(&argc, &argv, ASF_NAME_STRING);
    if (argc>1 && (strcmp(argv[1], "-help")==0 || strcmp(argv[1],"--help")==0))
        help();
    if (argc<3) usage();

    projection_type_t projection_type;
    datum_type_t datum;
    spheroid_type_t spheroid;
    double pixel_size, average_height, background_val;
    resample_method_t resample_method;
    int force_flag;
    char band_id[256]="";

    project_parameters_t *pp
      = get_geocode_options (&argc, &argv, &projection_type, &average_height,
			     &pixel_size, &datum, &spheroid, &resample_method,
			     &force_flag, band_id);

    if (!pp)
      usage();

    extract_double_options(&argc, &argv, &background_val, "--background",
                          "-background", NULL);
    if (ISNAN(background_val)) background_val = DEFAULT_NO_DATA_VALUE;

    char *outfile = argv[1];
    int i, n_inputs = argc - 2;

    asfSplashScreen(argc, argv);

    asfPrintStatus("Projection: ");
    switch (projection_type)
      {
      case UNIVERSAL_TRANSVERSE_MERCATOR:
	asfPrintStatus("Universal Transverse Mercator\n");
	break;
      case POLAR_STEREOGRAPHIC:
	asfPrintStatus("Polar Stereographic\n");
	break;
      case ALBERS_EQUAL_AREA:
	asfPrintStatus("Albers Conical Equal Area\n");
	break;
      case LAMBERT_AZIMUTHAL_EQUAL_AREA:
	asfPrintStatus("Lambert Azimuthal Equal Area\n");
	break;
      case LAMBERT_CONFORMAL_CONIC:
	asfPrintStatus("Lambert Conformal Conic\n");
	break;
      case EQUI_RECTANGULAR:
	asfPrintStatus("Equirectangular\n");
	break;
      default:
	break;
      }

    asfPrintStatus("Output file: %s\n", outfile);

    //char **infiles = &argv[2];
    //asfPrintStatus("Input files:\n");
    //for (i = 0; i < n_inputs; ++i)
    //    asfPrintStatus("   %d: %s\n", i+1, infiles[i]);

    // form array for asf_mosaic
    char **files = MALLOC(sizeof(char*)*(n_inputs+1));
    for (i = 0; i < n_inputs; ++i) {
      int n = argc-i-1;
      files[i] = MALLOC(sizeof(char)*(strlen(argv[n])+2));
      //printf("File #%d: %s\n", i+1, argv[n]);
      strcpy(files[i], argv[n]);
    }
    files[n_inputs] = NULL;

    char *outfile_full = appendExt(outfile, ".img");

    double lat_min = -999, lon_min = -999;
    double lat_max = 999, lon_max = 999;

    int multiband = 1;
    int band_num = 0;
    // FIXME: Overlap should be an option. Hardwired for now.
    char overlap[25]="OVERLAY";

    asf_mosaic(pp, projection_type, force_flag, resample_method,
	       average_height, datum, spheroid, pixel_size, multiband, 
	       band_num, files, outfile, background_val, lat_min, lat_max, 
	       lon_min, lon_max, overlap, FALSE);

    free(outfile_full);
    for (i=0; i<n_inputs; ++i)
      FREE(files[i]);
    FREE(files);

    asfPrintStatus("Done.\n");
    return 0;
}
コード例 #3
0
int main(int argc, char *argv[])
{
  char inFile[512], outFile[512], *projFile=NULL, type[10];
  const int pid = getpid();
  extern int logflag, quietflag;
  int quiet_f;  /* log_f is a static global */
  int proj_f, pixel_f, list_f, ii, file_count, list=FALSE;
  char **import_files;
  double pixel_size = -99;

  logflag = quietflag = FALSE;
  log_f = quiet_f = FLAG_NOT_SET;

  // Begin command line parsing ***********************************************
  if (   (checkForOption("--help", argc, argv) != FLAG_NOT_SET)
      || (checkForOption("-h", argc, argv) != FLAG_NOT_SET)
      || (checkForOption("-help", argc, argv) != FLAG_NOT_SET) ) {
      print_help();
  }
  get_asf_share_dir_with_argv0(argv[0]);
  handle_license_and_version_args(argc, argv, ASF_NAME_STRING);

  // Check which options were provided
  log_f    = checkForOption("-log", argc, argv);
  quiet_f  = checkForOption("-quiet", argc, argv);
  proj_f   = checkForOption("-proj", argc, argv);
  pixel_f  = checkForOption("-pixel-size", argc, argv);
  list_f   = checkForOption("-list", argc, argv);

  // We need to make sure the user specified the proper number of arguments
  int needed_args = 3 + REQUIRED_ARGS; // command & REQUIRED_ARGS
  int num_flags = 0;
  if (log_f != FLAG_NOT_SET) {needed_args += 2; num_flags++;} // option & param
  if (quiet_f != FLAG_NOT_SET) {needed_args += 1; num_flags++;} // option
  if (proj_f != FLAG_NOT_SET) {needed_args += 2; num_flags++;} // option & param
  if (pixel_f != FLAG_NOT_SET) {needed_args += 2; num_flags++;} // option & param
  if (list_f != FLAG_NOT_SET) {needed_args += 1; num_flags++;} // option
  
  // Make sure we have the right number of args
  if(argc != needed_args) {
    print_usage();
  }

  // Make sure all options occur before the config file name argument
  if (num_flags == 1 &&
      (log_f   > 1 ||
       quiet_f > 1))
  {
    print_usage();
  }
  else if (num_flags > 1 &&
	   (log_f   >= argc - REQUIRED_ARGS - 1 ||
            quiet_f >= argc - REQUIRED_ARGS - 1))
  {
    print_usage();
  }

  if (proj_f != FLAG_NOT_SET) {
    projFile = (char *) MALLOC(sizeof(char)*512);
    strcpy(projFile, argv[proj_f+1]);
  }
  if (pixel_f != FLAG_NOT_SET) {
    pixel_size = atof(argv[pixel_f+1]);
  }
  if (list_f != FLAG_NOT_SET) {
    list = TRUE;
  }
  if (log_f != FLAG_NOT_SET) {
    strcpy(logFile, argv[log_f+1]);
  }
  else {
    // default behavior: log to tmp<pid>.log
    sprintf(logFile, "tmp%i.log", pid);
  }
  logflag = TRUE;
  fLog = FOPEN(logFile, "a");
  // Set old school quiet flag (for use in our libraries)
  quietflag = quiet_f != FLAG_NOT_SET;

  // Fetch required arguments
  strcpy(inFile, argv[argc-3]);
  strcpy(outFile, argv[argc-2]);
  strcpy(type, argv[argc-1]);

  // Report the command line
  asfSplashScreen(argc, argv);

  char *tmp_dir = (char *) MALLOC(sizeof(char)*512);
  char *tmpFile = (char *) MALLOC(sizeof(char)*512);
  if (projFile || list ||
      (strcmp_case(type, "ASTER") == 0 &&
       strcmp_case(findExt(inFile), ".ZIP") == 0)) {
    strcpy(tmp_dir, "tmp_dem-");
    strcat(tmp_dir, time_stamp_dir());
    create_clean_dir(tmp_dir);
    sprintf(tmpFile, "%s%cimport", tmp_dir, DIR_SEPARATOR);
    import_dem(inFile, list, tmpFile, type, tmp_dir, 
	       &import_files, &file_count);
  }
  else {
    strcpy(tmp_dir, "./");
    import_dem(inFile, list, outFile, type, tmp_dir, 
	       &import_files, &file_count);
  }
  if (projFile) {
    project_parameters_t pps;
    projection_type_t proj_type; 
    datum_type_t datum;
    spheroid_type_t spheroid;
    if (fileExists(projFile))
      read_proj_file(projFile, &pps, &proj_type, &datum, &spheroid);
    else {
      projFile = get_proj_file(projFile);
      read_proj_file(projFile, &pps, &proj_type, &datum, &spheroid);
    }
    if (file_count > 1)
      asf_mosaic(&pps, proj_type, FALSE, RESAMPLE_BILINEAR, 0.0, datum, 
		 spheroid, pixel_size, FALSE, 0, import_files, outFile, 0.0, 
		 -999, 999, -999, 999, "OVERLAY", FALSE);
    else 
      asf_geocode(&pps, proj_type, FALSE, RESAMPLE_BILINEAR, 0.0, datum, 
		  pixel_size, NULL, tmpFile, outFile, 0.0, FALSE);
  }
  else if (strlen(tmp_dir) > 2) {
    /*
    char *imgFile = (char *) MALLOC(sizeof(char)*512);
    char *metaFile = (char *) MALLOC(sizeof(char)*512);
    for (ii=0; ii<file_count; ii++) {
      sprintf(imgFile, "%s.img", get_basename(import_files[ii]));
      fileCopy(import_files[ii], imgFile);
      sprintf(metaFile, "%s.meta", get_basename(import_files[ii]));
      sprintf(tmpFile, "%s%c%s.meta", 
	      tmp_dir, DIR_SEPARATOR, get_basename(import_files[ii]));
      fileCopy(tmpFile, metaFile);
    }
    FREE(imgFile);
    FREE(metaFile);
    */
    combine(import_files, file_count, outFile);
  }
  for (ii=0; ii<file_count; ii++)
    FREE(import_files[ii]);
  FREE(import_files);
  if (strlen(tmp_dir) > 2)
    remove_dir(tmp_dir);
  FREE(tmp_dir);
  FREE(tmpFile);

  asfPrintStatus("\nSuccessful completion!\n\n");

  FCLOSE(fLog);
  remove(logFile);

  return(EXIT_SUCCESS);

}