/*********************************************************** * meta_create: * Constructs a new meta_parameters record from CEOS, ARDOP * inputs, etc-- whatever it can find.*/ meta_parameters *meta_create(const char *fName) { meta_parameters *meta = raw_init(); //int success=FALSE; char **junk=NULL; int junk2; if (require_ceos_metadata(fName,&junk,&junk2) != NO_CEOS_METADATA) { ceos_init(fName, meta, REPORT_LEVEL_STATUS); //success=TRUE; FREE(junk[0]); FREE(junk[1]); FREE(junk); } if (extExists(fName,".in")) { ardop_init(fName,meta); //success=TRUE; } //if (success) meta_new2old(meta); return meta; }
/*************************************************************** * 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; }