Esempio n. 1
0
static char *findInArcList(char *acquisition_time, char *arclist)
{
    char line[1024];
    char *odr = NULL;

    // ODR files will be in the same directory as arclist
    char *dir = get_dirname(arclist);

    FILE *fp = FOPEN(arclist, "r");
    if (!fp) {
        asfPrintError("Failed to open: %s\n", arclist);
    }

    ymd_date ymd;
    hms_time hms;

    parse_DMYdate(acquisition_time, &ymd, &hms);

    // YYYYMMDD as an integer
    int scene_time = ymd.year * 10000 + ymd.month * 100 + ymd.day;

    while (fgets(line, 1024, fp) != NULL) {
        if (isdigit(line[0])) {
            int arc, start, end, junk, n;
            n = sscanf(line, "%d  %d %d:%d - %d %d:%d",
                       &arc, &start, &junk, &junk, &end, &junk, &junk);
            start = arclist_time_fudge(start);
            end = arclist_time_fudge(end);
            if (n == 7) {
                if (scene_time > start && scene_time < end) {
                    odr = MALLOC(sizeof(char)*(strlen(dir)+64));
                    sprintf(odr, "%sODR.%03d", dir, arc);
                    break;
                }
            }
        }
    }

    FCLOSE(fp);

    if (!odr)
        odr = STRDUP("");

    FREE(dir);
    return odr;
}
Esempio n. 2
0
static void sort_input_preference(char **infiles, int n_inputs, 
				  char *preference)
{
  int ii, kk;
  double lat[n_inputs], lon[n_inputs], sec[n_inputs], sorter[n_inputs];
  ymd_date date;
  hms_time time;
  julian_date jd;
  char **tmpfiles = (char **) MALLOC(sizeof(char *)*n_inputs);

  asfPrintStatus("Sort input images for preference: %s\n\n", preference);

  // Read in metadata
  for (ii=0; ii<n_inputs; ii++) {
    tmpfiles[ii] = (char *) MALLOC(sizeof(char)*50);
    meta_parameters *meta = meta_read(infiles[ii]);
    lat[ii] = meta->general->center_latitude;
    lon[ii] = meta->general->center_longitude;
    parse_DMYdate(meta->general->acquisition_date, &date, &time);
    date_ymd2jd(&date, &jd);
    sec[ii] = date2sec(&jd, &time);
    if (strcmp_case(preference, "north") == 0 ||
	strcmp_case(preference, "south") == 0)
      sorter[ii] = lat[ii];
    else if (strcmp_case(preference, "west") == 0 ||
	     strcmp_case(preference, "east") == 0)
      sorter[ii] = lon[ii];
    else if (strcmp_case(preference, "old") == 0 ||
	     strcmp_case(preference, "new") == 0)
      sorter[ii] = sec[ii];
    meta_free(meta);
  }
  
  // Get on with the sorting business
  if (strcmp_case(preference, "south") == 0 ||
      strcmp_case(preference, "west") == 0 ||
      strcmp_case(preference, "old") == 0)
    qsort(sorter, n_inputs, sizeof(double), compare_big_doubles);
  else
    qsort(sorter, n_inputs, sizeof(double), compare_small_doubles);

  // Apply the order to input file list
  for (ii=0; ii<n_inputs; ii++) {
    for (kk=0; kk<n_inputs; kk++) {
      if ((strcmp_case(preference, "north") == 0 ||
	   strcmp_case(preference, "south") == 0) &&
	  sorter[ii] == lat[kk])
	sprintf(tmpfiles[ii], "%s", infiles[kk]);
      else if ((strcmp_case(preference, "east") == 0 ||
		strcmp_case(preference, "west") == 0) &&
	       sorter[ii] == lon[kk])
	sprintf(tmpfiles[ii], "%s", infiles[kk]);
      else if ((strcmp_case(preference, "old") == 0 ||
		strcmp_case(preference, "new") == 0) &&
	       sorter[ii] == sec[kk])
	sprintf(tmpfiles[ii], "%s", infiles[kk]);
    }
  }
  for (ii=0; ii<n_inputs; ii++) {
    sprintf(infiles[ii], "%s", tmpfiles[ii]);
    //printf("Sorted file[%d]: %s\n", ii+1, infiles[ii]);
  }

  // Clean up
  for (ii=0; ii<n_inputs; ii++)
    FREE(tmpfiles[ii]);
  FREE(tmpfiles);
}