From 49d5d5d9c07e1b554a77f5b11857e640ef6a2180 Mon Sep 17 00:00:00 2001 From: Howard Butler Date: Thu, 29 Mar 2012 09:41:09 -0500 Subject: [PATCH] get the nitf reader with the metadata program --- include/pdal/drivers/nitf/Reader.hpp | 4 ---- src/drivers/nitf/NitfFile.cpp | 26 +++++++++++++------------- src/drivers/nitf/NitfFile.hpp | 9 +++++---- src/drivers/nitf/Reader.cpp | 2 +- test/unit/NitfReaderTest.cpp | 6 ++++-- 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/include/pdal/drivers/nitf/Reader.hpp b/include/pdal/drivers/nitf/Reader.hpp index 4879d20f18..1b9b408ebe 100644 --- a/include/pdal/drivers/nitf/Reader.hpp +++ b/include/pdal/drivers/nitf/Reader.hpp @@ -82,8 +82,6 @@ class PDAL_DLL Reader : public pdal::Reader return false; } - const std::vector& getMetadatums() const { return m_metadatums; } - pdal::StageSequentialIterator* createSequentialIterator(PointBuffer& buffer) const; // for dumping @@ -94,8 +92,6 @@ class PDAL_DLL Reader : public pdal::Reader StreamFactory* m_streamFactory; pdal::drivers::las::Reader* m_lasReader; - std::vector m_metadatums; - Reader& operator=(const Reader&); // not implemented Reader(const Reader&); // not implemented diff --git a/src/drivers/nitf/NitfFile.cpp b/src/drivers/nitf/NitfFile.cpp index cef435c618..09d4332385 100644 --- a/src/drivers/nitf/NitfFile.cpp +++ b/src/drivers/nitf/NitfFile.cpp @@ -122,15 +122,15 @@ void NitfFile::getLasPosition(boost::uint64_t& offset, boost::uint64_t& length) } -void NitfFile::extractMetadata(std::vector& metadatums) +void NitfFile::extractMetadata(pdal::Metadata& ms) { // // file header fields and TREs // { - processMetadata(m_file->papszMetadata, metadatums, "FH"); + processMetadata(m_file->papszMetadata, ms, "FH"); - processTREs(m_file->nTREBytes, m_file->pachTRE, metadatums, "FH"); + processTREs(m_file->nTREBytes, m_file->pachTRE, ms, "FH"); } // @@ -143,9 +143,9 @@ void NitfFile::extractMetadata(std::vector& metadatums) throw pdal_error("NITFImageAccess failed"); } - processMetadata(imageSegment->papszMetadata, metadatums, "IM"); + processMetadata(imageSegment->papszMetadata, ms, "IM"); - processTREs(imageSegment->nTREBytes, imageSegment->pachTRE, metadatums, "IM"); + processTREs(imageSegment->nTREBytes, imageSegment->pachTRE, ms, "IM"); NITFImageDeaccess(imageSegment); } @@ -160,9 +160,9 @@ void NitfFile::extractMetadata(std::vector& metadatums) throw pdal_error("NITFDESAccess failed"); } - processMetadata(dataSegment->papszMetadata, metadatums, "DES"); + processMetadata(dataSegment->papszMetadata, ms, "DES"); - processTREs_DES(dataSegment, metadatums, "IM"); + processTREs_DES(dataSegment, ms, "IM"); NITFDESDeaccess(dataSegment); } @@ -261,7 +261,7 @@ int NitfFile::findLIDARASegment() } -void NitfFile::processTREs(int nTREBytes, const char *pszTREData, std::vector& metadatums, const std::string& parentkey) +void NitfFile::processTREs(int nTREBytes, const char *pszTREData, pdal::Metadata& ms, const std::string& parentkey) { char* szTemp = new char[nTREBytes]; @@ -286,7 +286,7 @@ void NitfFile::processTREs(int nTREBytes, const char *pszTREData, std::vector(value); - metadatums.push_back(m); + ms.addMetadata(m); pszTREData += nThisTRESize + 11; nTREBytes -= (nThisTRESize + 11); @@ -298,7 +298,7 @@ void NitfFile::processTREs(int nTREBytes, const char *pszTREData, std::vector& metadatums, const std::string& parentkey) +void NitfFile::processTREs_DES(NITFDES* dataSegment, pdal::Metadata& ms, const std::string& parentkey) { char* pabyTREData = NULL; int nOffset = 0; @@ -315,7 +315,7 @@ void NitfFile::processTREs_DES(NITFDES* dataSegment, std::vector(value); - metadatums.push_back(m); + ms.addMetadata(m); nOffset += 11 + nThisTRESize; @@ -326,7 +326,7 @@ void NitfFile::processTREs_DES(NITFDES* dataSegment, std::vector& metadatums, const std::string& parentkey) +void NitfFile::processMetadata(char** papszMetadata, pdal::Metadata& ms, const std::string& parentkey) { int cnt = CSLCount(papszMetadata); for (int i=0; i(value); - metadatums.push_back(m); + ms.addMetadata(m); } return; diff --git a/src/drivers/nitf/NitfFile.hpp b/src/drivers/nitf/NitfFile.hpp index 63df9089be..a087e77593 100644 --- a/src/drivers/nitf/NitfFile.hpp +++ b/src/drivers/nitf/NitfFile.hpp @@ -45,6 +45,7 @@ namespace pdal { + class Metadata; namespace metadata { class Entry; } @@ -67,7 +68,7 @@ class PDAL_DLL NitfFile void getLasPosition(boost::uint64_t& offset, boost::uint64_t& length) const; - void extractMetadata(std::vector&); + void extractMetadata(pdal::Metadata& m); private: std::string getSegmentIdentifier(NITFSegmentInfo* psSegInfo); @@ -75,9 +76,9 @@ class PDAL_DLL NitfFile int findIMSegment(); int findLIDARASegment(); - static void processTREs(int nTREBytes, const char *pszTREData, std::vector& metadatums, const std::string& parentkey); - static void processTREs_DES(NITFDES*, std::vector& metadatums, const std::string& parentkey); - static void processMetadata(char** papszMetadata, std::vector&, const std::string& parentkey); + static void processTREs(int nTREBytes, const char *pszTREData, pdal::Metadata& m, const std::string& parentkey); + static void processTREs_DES(NITFDES*, pdal::Metadata& m, const std::string& parentkey); + static void processMetadata(char** papszMetadata, pdal::Metadata& m, const std::string& parentkey); const std::string m_filename; NITFFile* m_file; diff --git a/src/drivers/nitf/Reader.cpp b/src/drivers/nitf/Reader.cpp index ef8498b31f..28daa9aa4f 100644 --- a/src/drivers/nitf/Reader.cpp +++ b/src/drivers/nitf/Reader.cpp @@ -139,7 +139,7 @@ void Reader::initialize() nitf.getLasPosition(offset, length); - nitf.extractMetadata(m_metadatums); + nitf.extractMetadata(getMetadataRef()); nitf.close(); } diff --git a/test/unit/NitfReaderTest.cpp b/test/unit/NitfReaderTest.cpp index 9d279f2973..ea0b300b9a 100644 --- a/test/unit/NitfReaderTest.cpp +++ b/test/unit/NitfReaderTest.cpp @@ -69,10 +69,12 @@ BOOST_AUTO_TEST_CASE(test_one) // check metadata { - const std::vector& metadatums = nitf_reader.getMetadatums(); + pdal::Metadata metadata = nitf_reader.getMetadata(); /////////////////////////////////////////////////BOOST_CHECK_EQUAL(metadatums.size(), 80u); - const metadata::Entry& m = metadatums[4]; + + pdal::metadata::Entry const& m = metadata.getMetadata("FDT", "drivers.nitf.reader.FH"); + BOOST_CHECK_EQUAL(m.getName(), "FDT"); BOOST_CHECK_EQUAL(m.getNamespace(), "drivers.nitf.reader.FH");