OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimElevManager.h
Go to the documentation of this file.
1 //*****************************************************************************
2 // FILE: ossimElevManager.h
3 //
4 // License: See top level LICENSE.txt file.
5 //
6 // DESCRIPTION:
7 // Contains declaration of class ossimElevManager. This object provides a
8 // single interface to an imaging chain for accessing multiple elevation
9 // sources. This object owns one or more elevation sources in an ordered
10 // list. When queried for an elevation at a particular point, it searches
11 // the available sources for the best result, instantiating new sources if
12 // necessary.
13 //
14 // SOFTWARE HISTORY:
15 //>
16 // 13Apr2001 Oscar Kramer
17 // Initial coding.
18 //<
19 //*****************************************************************************
20 #ifndef ossimElevManager_HEADER
21 #define ossimElevManager_HEADER
22 
23 #include <vector>
28 #include <mutex>
29 
31 {
32 public:
33  typedef std::vector<ossimRefPtr<ossimElevationDatabase> > ElevationDatabaseListType;
34 
36  {
37  public:
39  virtual ossimRefPtr<ossimVisitor> dup()const{return new ConnectionStringVisitor(*this);}
40  const ossimString& getConnectionString()const{return m_connectionString;}
41  virtual void visit(ossimObject* obj);
42  ossimElevationDatabase* getElevationDatabase(){return m_database.get();}
43 
44  protected:
47  };
48 
49  virtual ~ossimElevManager();
50 
55  static ossimElevManager* instance();
56 
57  virtual double getHeightAboveEllipsoid(const ossimGpt& gpt);
58  virtual double getHeightAboveMSL(const ossimGpt& gpt);
59  virtual bool pointHasCoverage(const ossimGpt&) const;
60 
66  virtual double getMeanSpacingMeters() const;
67 
68  virtual bool getAccuracyInfo(ossimElevationAccuracyInfo& info, const ossimGpt& gpt) const;
69 
71  {
72  return (ossim_uint32) m_dbRoundRobin[0].size();
73  }
75  {
76  return m_dbRoundRobin[0][idx].get();
77  }
79  {
80  return m_dbRoundRobin[0][idx].get();
81  }
82 
87  void addDatabase(ossimElevationDatabase* database, bool set_as_first=false);
88 
94  bool loadElevationPath(const ossimFilename& path, bool set_as_first=false);
95 
96  void setDefaultHeightAboveEllipsoid(double meters) {m_defaultHeightAboveEllipsoid=meters;}
97  void setElevationOffset(double meters) {m_elevationOffset=meters;}
98  double getElevationOffset() const { return m_elevationOffset; }
99 
100  void getOpenCellList(std::vector<ossimFilename>& list) const;
101 
114  void getCellsForBounds( const std::string& connectionString,
115  const ossim_float64& minLat,
116  const ossim_float64& minLon,
117  const ossim_float64& maxLat,
118  const ossim_float64& maxLon,
119  std::vector<ossimFilename>& cells,
120  ossim_uint32 maxNumberOfCells=0 );
121 
137  void getCellsForBounds( const ossim_float64& minLat,
138  const ossim_float64& minLon,
139  const ossim_float64& maxLat,
140  const ossim_float64& maxLon,
141  std::vector<ossimFilename>& cells,
142  ossim_uint32 maxNumberOfCells=0 );
143  void getCellsForBounds( const ossimGrect& bounds,
144  std::vector<ossimFilename>& cells,
145  ossim_uint32 maxNumberOfCells=0 );
146 
147  void setUseGeoidIfNullFlag(bool flag) { m_useGeoidIfNullFlag = flag; }
148  bool getUseGeoidIfNullFlag() const { return m_useGeoidIfNullFlag; }
149  void setRoundRobinMaxSize(ossim_uint32 size);
150 
151  void clear();
156  virtual bool saveState(ossimKeywordlist& kwl, const char* prefix=0) const;
157 
162  virtual bool loadState(const ossimKeywordlist& kwl, const char* prefix=0);
163 
164  virtual void accept(ossimVisitor& visitor);
165 
166  virtual std::ostream& print(std::ostream& out) const;
167 
168 protected:
169  virtual ossimObject* dup() const { return 0; } // required to implement but not permitted to call
170 
172  void loadStandardElevationPaths();
173 
174  ElevationDatabaseListType& getNextElevDbList() const; // for multithreading
175 
176  //static ossimElevManager* m_instance;
177  mutable std::vector<ElevationDatabaseListType> m_dbRoundRobin;
181 
182  // if an elevation is returned that's null for ellipsoid then use the geoid manager to calculate a shift
185 
187 
193  mutable std::mutex m_mutex;
194 };
195 
196 #endif
ossimElevationDatabase * getElevationDatabase()
virtual void visit(ossimObject *obj)
ossim_float64 m_elevationOffset
double getElevationOffset() const
Represents serializable keyword/value map.
void setUseGeoidIfNullFlag(bool flag)
std::ostream & print(H5::H5File *file, std::ostream &out)
Print method.
Definition: ossimH5Util.cpp:41
ossim_uint32 m_maxRoundRobinSize
ossim_uint32 getNumberOfElevationDatabases() const
double ossim_float64
virtual ossimObject * dup() const
ossimRefPtr< ossimElevationDatabase > m_database
yy_size_t size
std::vector< ossimRefPtr< ossimElevationDatabase > > ElevationDatabaseListType
unsigned int ossim_uint32
std::mutex m_mutex
I have tried the readwrite lock interfaces but have found it unstable.
virtual ossimRefPtr< ossimVisitor > dup() const
const ossimElevationDatabase * getElevationDatabase(ossim_uint32 idx) const
const ossimString & getConnectionString() const
bool getUseGeoidIfNullFlag() const
#define OSSIM_DLL
void setDefaultHeightAboveEllipsoid(double meters)
void setElevationOffset(double meters)
ossim_float64 m_defaultHeightAboveEllipsoid
std::vector< ElevationDatabaseListType > m_dbRoundRobin
ossim_uint32 m_currentDatabaseIdx
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
ossimElevationDatabase * getElevationDatabase(ossim_uint32 idx)