diff --git a/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx b/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx index 36550717ca0ade79935fad796beb91624afdf008..6063915cfb4996895de1371735454092f81368d7 100644 --- a/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx +++ b/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx @@ -287,60 +287,15 @@ ReadGeometryFromImage(const std::string& filename, bool checkRpcTag) } /**********************************************************/ - /* Third try : look for external geom file and RPC tags */ + /* Third try : look for RPC tags */ /**********************************************************/ - if (!hasMetaData) + if (!hasMetaData && checkRpcTag) { - // If still no metadata, try the ".geom" file - ossimFilename ossimGeomFile = ossimFilename(filename).setExtension(".geom"); - otb_kwl = ReadGeometryFromGEOMFile(ossimGeomFile); - - // also check any RPC tags - ImageKeywordlist rpc_kwl; - if (checkRpcTag) - { - rpc_kwl = ReadGeometryFromRPCTag(filename); - } - - if (otb_kwl.HasKey("type")) - { - // external geom has a "type" keyword - std::string geomType(otb_kwl.GetMetadataByKey("type")); - ossimProjection *testProj = ossimProjectionFactoryRegistry::instance() - ->createProjection(ossimString(geomType)); - if (dynamic_cast<ossimSensorModel*>(testProj)) - { - // "type" keyword corresponds to a sensor model : don't erase it - if (rpc_kwl.GetSize() > 0) - { - rpc_kwl.ClearMetadataByKey("type"); - } - - ossimKeywordlist ossim_test_kwl; - otb_kwl.convertToOSSIMKeywordlist(ossim_test_kwl); - testProj = ossimProjectionFactoryRegistry::instance() - ->createProjection(ossim_test_kwl); - if (testProj) - { - // external geom contains a valid sensor geometry - hasMetaData = true; - } - } - } + // check any RPC tags + otb_kwl = ReadGeometryFromRPCTag(filename); - // copy keywords found in RPC tags if the external geom is not valid - if (!hasMetaData && rpc_kwl.GetSize() > 0) + if (!otb_kwl.Empty()) { - const ImageKeywordlist::KeywordlistMap &kwlMap = rpc_kwl.GetKeywordlist(); - for (ImageKeywordlist::KeywordlistMap::const_iterator it = kwlMap.begin(); - it != kwlMap.end(); - ++it) - { - if (it->second != "") - { - otb_kwl.AddKey(it->first , it->second); - } - } hasMetaData = true; } } diff --git a/Modules/IO/ImageIO/include/otbImageFileReader.txx b/Modules/IO/ImageIO/include/otbImageFileReader.txx index 98a37bf87b51b5caade4258ab231a45b1f39c87a..8a6fe7a5884a17b4b494832e25c7ba7119978bd7 100644 --- a/Modules/IO/ImageIO/include/otbImageFileReader.txx +++ b/Modules/IO/ImageIO/include/otbImageFileReader.txx @@ -398,18 +398,33 @@ ImageFileReader<TOutputImage, ConvertPixelTraits> { std::string lFileNameOssimKeywordlist = GetDerivedDatasetSourceFileName(m_FileName); + std::string extension = itksys::SystemTools::GetFilenameLastExtension(lFileNameOssimKeywordlist); + std::string attachedGeom = lFileNameOssimKeywordlist.substr( + 0, + lFileNameOssimKeywordlist.size() - extension.size()) + std::string(".geom"); // Update otb Keywordlist ImageKeywordlist otb_kwl; - if (!m_FilenameHelper->ExtGEOMFileNameIsSet()) + + // Case 1: external geom supplied through extended filename + if (m_FilenameHelper->ExtGEOMFileNameIsSet()) { - otb_kwl = ReadGeometryFromImage(lFileNameOssimKeywordlist,!m_FilenameHelper->GetSkipRpcTag()); - otbMsgDevMacro(<< "Loading internal kwl"); + otb_kwl = ReadGeometryFromGEOMFile(m_FilenameHelper->GetExtGEOMFileName()); + otbMsgDevMacro(<< "Loading external kwl"); } + // Case 2: attached geom (if present) + else if (itksys::SystemTools::FileExists(attachedGeom)) + { + otb_kwl = ReadGeometryFromGEOMFile(attachedGeom); + otbMsgDevMacro(<< "Loading attached kwl"); + } + // Case 3: find an ossimPluginProjection + // Case 4: find an ossimProjection + // Case 5: find RPC tags in TIF else { - otb_kwl = ReadGeometryFromGEOMFile(m_FilenameHelper->GetExtGEOMFileName()); - otbMsgDevMacro(<< "Loading external kwl"); + otb_kwl = ReadGeometryFromImage(lFileNameOssimKeywordlist,!m_FilenameHelper->GetSkipRpcTag()); + otbMsgDevMacro(<< "Loading internal kwl"); } // Don't add an empty ossim keyword list