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; }
/*************************************************************** * 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; }