unsigned char LandsatGeotiffImporter::getFileAffinity(const std::string& filename) { if (filename.empty()) { return CAN_NOT_LOAD; } bool originallyTiff = false; std::string metadataFile = determineMetadataFile(filename, &originallyTiff); bool readMetadata = false; FactoryResource<DynamicObject> pImageMetadata = Landsat::parseMtlFile(metadataFile, readMetadata); if (!readMetadata) { return CAN_NOT_LOAD; } std::string spacecraft = dv_cast<std::string>( pImageMetadata->getAttributeByPath("LANDSAT_MTL/L1_METADATA_FILE/PRODUCT_METADATA/SPACECRAFT_ID"), ""); if (spacecraft != "Landsat5" && spacecraft != "Landsat7") { return CAN_NOT_LOAD; } if (originallyTiff) { return CAN_LOAD + 5; //override normal tiff importers } return CAN_LOAD; }
std::vector<ImportDescriptor*> LandsatGeotiffImporter::getImportDescriptors(const std::string& filename) { mErrors.clear(); mWarnings.clear(); std::vector<ImportDescriptor*> descriptors; if (filename.empty()) { return descriptors; } std::string metadataFile = determineMetadataFile(filename); bool readMetadata = false; FactoryResource<DynamicObject> pImageMetadata = Landsat::parseMtlFile(metadataFile, readMetadata); if (!readMetadata) { return descriptors; } std::string spacecraft = dv_cast<std::string>( pImageMetadata->getAttributeByPath("LANDSAT_MTL/L1_METADATA_FILE/PRODUCT_METADATA/SPACECRAFT_ID"), ""); if (spacecraft != "Landsat5" && spacecraft != "Landsat7") { return descriptors; } std::vector<ImportDescriptor*> vnirDescriptors = createImportDescriptors(metadataFile, pImageMetadata.get(), Landsat::LANDSAT_VNIR); std::vector<ImportDescriptor*> panDescriptors = createImportDescriptors(metadataFile, pImageMetadata.get(), Landsat::LANDSAT_PAN); std::vector<ImportDescriptor*> tirDescriptors = createImportDescriptors(metadataFile, pImageMetadata.get(), Landsat::LANDSAT_TIR); std::copy(vnirDescriptors.begin(), vnirDescriptors.end(), std::back_inserter(descriptors)); std::copy(panDescriptors.begin(), panDescriptors.end(), std::back_inserter(descriptors)); std::copy(tirDescriptors.begin(), tirDescriptors.end(), std::back_inserter(descriptors)); return descriptors; }