Skip to content
Snippets Groups Projects
Commit b206d155 authored by Emmanuel Christophe's avatar Emmanuel Christophe
Browse files

ENH: add the reading of image size from the Data file

parent 449afb57
No related branches found
No related tags found
No related merge requests found
//----------------------------------------------------------------------------
//
// "Copyright Centre National d'Etudes Spatiales"
// "Copyright Centre for Remote Imaging, Sensing and Processing"
//
// License: LGPL
//
// See LICENSE.txt file in the top level directory for more details.
//
//----------------------------------------------------------------------------
// $Id$
#include <AlosSarData.h>
#include <AlosSarRecordHeader.h>
#include <AlosSarDataFileDescriptor.h>
#include <ossim/base/ossimTrace.h>
#include <ossim/base/ossimKeywordlist.h>
#include <ossim/base/ossimKeywordNames.h>
// Static trace for debugging
static ossimTrace traceDebug("ossimAlosSarData:debug");
namespace ossimplugins
{
const int AlosSarData::AlosSarDataFileDescriptorID = 1;
AlosSarData::AlosSarData()
{
}
AlosSarData::~AlosSarData()
{
ClearRecords();
}
std::ostream& operator<<(std::ostream& os, const AlosSarData& data)
{
std::map<int, AlosSarRecord*>::const_iterator it = data._records.begin();
while(it != data._records.end())
{
(*it).second->Write(os);
++it;
}
return os;
}
std::istream& operator>>(std::istream& is, AlosSarData& data)
{
data.ClearRecords();
AlosSarRecordHeader header;
bool eof = false;
while(!eof)
{
is>>header;
if(is.eof())
{
eof = true;
}
else
{
AlosSarRecord* record = new AlosSarDataFileDescriptor;
if (record != NULL)
{
record->Read(is);
data._records[header.get_rec_seq()] = record;
}
else
{
char* buff = new char[header.get_length()-12];
is.read(buff, header.get_length()-12);
delete buff;
}
}
}
return is;
}
AlosSarData::AlosSarData(const AlosSarData& rhs)
{
std::map<int, AlosSarRecord*>::const_iterator it = rhs._records.begin();
while(it != rhs._records.end())
{
_records[(*it).first] = (*it).second->Clone();
++it;
}
}
AlosSarData& AlosSarData::operator=(const AlosSarData& rhs)
{
ClearRecords();
std::map<int, AlosSarRecord*>::const_iterator it = rhs._records.begin();
while(it != rhs._records.end())
{
_records[(*it).first] = (*it).second->Clone();
++it;
}
return *this;
}
void AlosSarData::ClearRecords()
{
std::map<int, AlosSarRecord*>::const_iterator it = _records.begin();
while(it != _records.end())
{
delete (*it).second;
++it;
}
_records.clear();
}
bool AlosSarData::saveState(ossimKeywordlist& kwl,
const char* prefix) const
{
static const char MODULE[] = "AlosSarData::saveState";
if (traceDebug())
{
ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
}
bool result = true;
char name[64];
kwl.add(prefix, ossimKeywordNames::TYPE_KW, "ossimAlosSarModel", true);
/*
* Adding metadata necessary to the sensor model in the keywordlist
*/
const AlosSarDataFileDescriptor *datafiledesc = get_AlosSarDataFileDescriptor();
if (leaderfiledesc != NULL)
{
kwl.add(prefix, "num_lines",datafiledesc->get_num_lines(),true);
kwl.add(prefix, "num_pix_in_line", datafiledesc->get_num_pix_in_line(),true);
}
else
{
result = false;
}
return result;
}
const AlosSarFileDescriptor * AlosSarData::get_AlosSarDataFileDescriptor() const
{
return dynamic_cast<const AlosSarFileDescriptor*>(_records.find(AlosSarDataFileDescriptorID)->second);
}
}
//----------------------------------------------------------------------------
//
// "Copyright Centre National d'Etudes Spatiales"
// "Copyright Centre for Remote Imaging, Sensing and Processing"
//
// License: LGPL
//
// See LICENSE.txt file in the top level directory for more details.
//
//----------------------------------------------------------------------------
// $Id$
#ifndef AlosSarData_h
#define AlosSarData_h
#include <iostream>
#include "AlosSarFileDescriptor.h"
#include "AlosSarDataSetSummary.h"
#include "AlosSarMapProjectionData.h"
#include "AlosSarPlatformPositionData.h"
#include "AlosSarFacilityData.h"
#include <map>
class ossimKeywordlist;
namespace ossimplugins
{
class AlosSarPlatformPositionData;
class AlosSarMapProjectionData;
class AlosSarDataSetSummary;
class AlosSarFileDescriptor;
class AlosSarFacilityData;
/**
* @ingroup AlosSarDataFile
* @brief This class is able to read the Leader file of the AlosSar file structure
*/
class AlosSarData
{
public:
/**
* @brief Constructor
*/
AlosSarData();
/**
* @brief Destructor
*/
~AlosSarData();
/**
* @brief This function write the AlosSarData in a stream
*/
friend std::ostream& operator<<(std::ostream& os, const AlosSarData& data);
/**
* @brief This function read a AlosSarData from a stream
*/
friend std::istream& operator>>(std::istream& is, AlosSarData& data);
/**
* @brief Copy constructor
*/
AlosSarData(const AlosSarData& rhs);
/**
* @brief Copy operator
*/
AlosSarData& operator=(const AlosSarData& rhs);
/**
* @brief Remove all the previous records from the AlosSarData
*/
void ClearRecords();
/**
* @brief Method to save object state to a keyword list.
* @param kwl Keyword list to save to.
* @param prefix added to keys when saved.
* @return true on success, false on error.
*/
virtual bool saveState(ossimKeywordlist& kwl,
const char* prefix=0) const;
const AlosSarFileDescriptor * get_AlosSarDataFileDescriptor() const;
protected:
typedef std::map<int, AlosSarRecord*> RecordType;
RecordType _records;
static const int AlosSarDataFileDescriptorID;
private:
};
}
#endif
//----------------------------------------------------------------------------
//
// "Copyright Centre National d'Etudes Spatiales"
// "Copyright Centre for Remote Imaging, Sensing and Processing"
//
// License: LGPL
//
// See LICENSE.txt file in the top level directory for more details.
//
//----------------------------------------------------------------------------
// $Id$
#include <AlosSarDataFileDescriptor.h>
namespace ossimplugins
{
AlosSarDataFileDescriptor::AlosSarDataFileDescriptor() : AlosSarRecord("sar_desc_rec")
{
}
AlosSarDataFileDescriptor::~AlosSarDataFileDescriptor()
{
}
std::ostream& operator<<(std::ostream& os, const AlosSarDataFileDescriptor& data)
{
os<<"_num_lines:"<<data._num_lines<<std::endl;
os<<"_num_lines:"<<data._num_lines<<std::endl;
return os;
}
std::istream& operator>>(std::istream& is, AlosSarDataFileDescriptor& data)
{
char buf6[7];
buf6[6] = '\0';
char buf180[181];
buf180[180] = '\0';
is.read(buf180,180);
is.read(buf6,6);
data._num_lines = atoi(buf6);
is.read(buf6,6);
data._num_pix_in_line = atoi(buf6);
char buf528[528];
buf528[528] = '\0';
is.read(buf528,528);
return is;
}
AlosSarDataFileDescriptor::AlosSarDataFileDescriptor(const AlosSarDataFileDescriptor& rhs):
AlosSarRecord(rhs),
_num_lines(rhs._num_lines),
_num_pix_in_line(rhs._num_pix_in_line)
{
}
AlosSarDataFileDescriptor& AlosSarDataFileDescriptor::operator=(const AlosSarDataFileDescriptor& rhs)
{
_num_lines = rhs._num_lines;
_num_pix_in_line = rhs._num_pix_in_line;
return *this;
}
}
//----------------------------------------------------------------------------
//
// "Copyright Centre National d'Etudes Spatiales"
// "Copyright Centre for Remote Imaging, Sensing and Processing"
//
// License: LGPL
//
// See LICENSE.txt file in the top level directory for more details.
//
//----------------------------------------------------------------------------
// $Id$
#ifndef AlosSarDataFileDescriptor_h
#define AlosSarDataFileDescriptor_h
#include<iostream>
#include <cstdlib>
#include <AlosSarRecordHeader.h>
#include <AlosSarRecord.h>
namespace ossimplugins
{
/**
* @ingroup SARLeaderAlosSarDataFileDescriptorRecord
* @brief This class is able to read the SAR leader file descriptor record of the leader file
*/
class AlosSarDataFileDescriptor : public AlosSarRecord
{
public:
/**
* @brief Constructor
*/
AlosSarDataFileDescriptor();
/**
* @brief Destructor
*/
~AlosSarDataFileDescriptor();
/**
* @brief This function write the AlosSarDataFileDescriptor in a stream
*/
friend std::ostream& operator<<(std::ostream& os, const AlosSarDataFileDescriptor& data);
/**
* @brief This function read a AlosSarDataFileDescriptor from a stream
*/
friend std::istream& operator>>(std::istream& is, AlosSarDataFileDescriptor& data);
/**
* @brief Copy constructor
*/
AlosSarDataFileDescriptor(const AlosSarDataFileDescriptor& rhs);
/**
* @brief Copy operator
*/
AlosSarDataFileDescriptor& operator=(const AlosSarDataFileDescriptor& rhs);
/**
* @brief This function is able to create a new instance of the class
*/
AlosSarRecord* Instanciate()
{
return new AlosSarDataFileDescriptor();
};
/**
* @brief This function is able to create a new instance of the class initialised with the data of the calling instance
*/
AlosSarRecord* Clone()
{
return new AlosSarDataFileDescriptor(*this);
};
/**
* @brief Read the class data from a stream
*/
void Read(std::istream& is)
{
is>>*this;
};
/**
* @brief Write the class to a stream
*/
void Write(std::ostream& os)
{
os<<*this;
};
int get_num_pix_in_line()
{
return _num_pix_in_line;
};
int get_num_lines()
{
return _num_lines;
};
protected:
/**
* @brief num_pix_in_line
*/
int _num_pix_in_line;
/**
* @brief num_lines
*/
int _num_lines;
private:
};
}
#endif
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <ossim/base/ossimTrace.h> #include <ossim/base/ossimTrace.h>
#include <otb/RefPoint.h> #include <otb/RefPoint.h>
#include <AlosPalsar/AlosSarLeader.h> #include <AlosPalsar/AlosSarLeader.h>
#include <AlosPalsar/AlosSarData.h>
#include <otb/SensorParams.h> #include <otb/SensorParams.h>
#include <otb/PlatformPosition.h> #include <otb/PlatformPosition.h>
#include <ossim/base/ossimKeywordNames.h> #include <ossim/base/ossimKeywordNames.h>
...@@ -692,4 +693,14 @@ ossimFilename ossimAlosPalsarModel::findAlosPalsarLeader(const ossimFilename& fi ...@@ -692,4 +693,14 @@ ossimFilename ossimAlosPalsarModel::findAlosPalsarLeader(const ossimFilename& fi
return file; return file;
} }
bool ossimAlosPalsarModel::isAlosPalsarData(const ossimFilename& file) const
{
//FIXME
}
ossimFilename ossimAlosPalsarModel::findAlosPalsarData(const ossimFilename& file) const
{
//FIXME
}
} // namespace ossimplugins } // namespace ossimplugins
...@@ -31,6 +31,8 @@ class PlatformPosition; ...@@ -31,6 +31,8 @@ class PlatformPosition;
class SensorParams; class SensorParams;
class RefPoint; class RefPoint;
class AlosSarLeader; class AlosSarLeader;
class AlosSarData;
/** /**
* @brief This class is able to direct localisation and indirect localisation using the AlosPalsar sensor model * @brief This class is able to direct localisation and indirect localisation using the AlosPalsar sensor model
* *
...@@ -116,11 +118,17 @@ private: ...@@ -116,11 +118,17 @@ private:
*/ */
AlosSarLeader *theAlosSarLeader; AlosSarLeader *theAlosSarLeader;
/**
* @brief List of metadata contained in the Data file
*/
AlosSarData *theAlosSarData;
virtual bool isAlosPalsarLeader(const ossimFilename& file) const; virtual bool isAlosPalsarLeader(const ossimFilename& file) const;
virtual ossimFilename findAlosPalsarLeader(const ossimFilename& file) const; virtual ossimFilename findAlosPalsarLeader(const ossimFilename& file) const;
virtual bool isAlosPalsarData(const ossimFilename& file) const;
virtual ossimFilename findAlosPalsarData(const ossimFilename& file) const;
TYPE_DATA TYPE_DATA
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment