Exemplo n.º 1
0
int isCEOS(const char *dataFile, char **error)
{
  char **inBandName = NULL, **inMetaName = NULL, tmp[1024], *message = NULL;
  char baseName[512];
  int ret = TRUE, nBands, trailer;
  ceos_metadata_ext_t metadata_ext;
  ceos_data_ext_t     data_ext;

  if (strlen(dataFile) <= 0)
    return FALSE;

  char *dirName = (char *) MALLOC(sizeof(char)*1024);
  char *fileName = (char *) MALLOC(sizeof(char)*1024);
  split_dir_and_file(dataFile, dirName, fileName);
  metadata_ext = get_ceos_metadata_name(dataFile, &inMetaName, &trailer);
  data_ext = get_ceos_data_name(dataFile, baseName, &inBandName, &nBands);
  if (data_ext == NO_CEOS_DATA) {
    message = (char *) MALLOC(sizeof(char)*1024);
    strcpy(message, "");
    sprintf(tmp, "Data file%s of original data (%s) missing.\n",
	    (nBands>1) ? "s" : "", fileName);
    strcat(message, tmp);
    ret = FALSE;
  }    
  if (metadata_ext == NO_CEOS_METADATA) {
    if (!message) {
      message = (char *) MALLOC(sizeof(char)*1024);
      strcpy(message, "");
    }
    sprintf(tmp, "Metadata file of original data (%s) missing.\n", fileName);
    strcat(message, tmp);
    ret = FALSE;
  }

  *error = message;
  FREE(dirName);
  FREE(fileName);
  free_ceos_names(inBandName, inMetaName);
  return ret;
}
Exemplo n.º 2
0
/***************************************************************
 * meta_read:
 * Reads a meta file and returns a meta structure filled with
 * both old backward compatability and new fields filled in.
 * Note that the appropriate extension is appended to the given
 * base name automagically if needed.  */
meta_parameters *meta_read(const char *inName)
{
  char              *meta_name      = appendExt(inName,".meta");
  char              *ddr_name       = appendExt(inName,".ddr");
  meta_parameters   *meta           = raw_init(); /* Allocate and initialize basic structs */
  char **junk=NULL;
  int junk2, ii;

  /* Read file with appropriate reader for version.  */
  if ( !fileExists(meta_name) && fileExists(ddr_name)) {

    meta_read_only_ddr(meta, ddr_name);
/*    printf("WARNING: * Unable to locate '%s';\n"
           "         * Using only '%s' for meta data;\n"
           "         * Errors due to lack of meta data are very likely.\n",
     meta_name, ddr_name);*/
  }
  else if ( fileExists(meta_name) ) {
    if ( !meta_is_new_style(meta_name) ) {
      meta_read_old(meta, meta_name);
    }
    else {
      parse_metadata(meta, meta_name);
    }
  }
  // Generate metadata if CEOS files could be detected
  else if (require_ceos_metadata(inName,&junk,&junk2) != NO_CEOS_METADATA) {
    ceos_init(inName, meta, REPORT_LEVEL_STATUS);
  }

  /* Remember the name and location of the meta struct */
  //add_meta_ddr_struct(inName, meta, NULL);
  
  // Add latlon block if data has a data has lat/lon bands
  // Currently only SMAP data has that kind of arrangement
  int lat_band = 
    get_band_num(meta->general->bands, meta->general->band_count, "LAT");
  int lon_band =
    get_band_num(meta->general->bands, meta->general->band_count, "LON");
  if (strcmp_case(meta->general->sensor, "SMAP") == 0 && 
      lat_band > 0 && lon_band > 0) {
    char *data_name = appendExt(inName, ".img");
    if (fileExists(data_name)) {
      meta->latlon = meta_latlon_init(meta->general->line_count, 
				      meta->general->sample_count);
      FILE *fp = FOPEN(data_name, "rb");
      get_band_float_lines(fp, meta, lat_band, 0, meta->general->line_count,
			   meta->latlon->lat);
      get_band_float_lines(fp, meta, lon_band, 0, meta->general->line_count,
			   meta->latlon->lon);
      FCLOSE(fp);
    }
    FREE(data_name);
  }

  FREE(ddr_name);
  FREE(meta_name);
  free_ceos_names(NULL, junk);

  return meta;
}