OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimSrtmElevationDatabase.h
Go to the documentation of this file.
1 //---
2 //
3 // License: MIT
4 //
5 //---
6 // $Id$
7 
8 #ifndef ossimSrtmElevationDatabase_HEADER
9 #define ossimSrtmElevationDatabase_HEADER 1
10 
14 #include <mutex>
15 
17 {
18 public:
19  typedef std::vector<ossimRefPtr<CellInfo> > DirectMap; // 360x180 cell grid
20 
22 
24 
25  virtual ~ossimSrtmElevationDatabase();
26 
27  virtual ossimObject* dup() const;
28 
29  virtual bool open(const ossimString& connectionString);
30  bool getAccuracyInfo(ossimElevationAccuracyInfo& info, const ossimGpt& /*gpt*/) const;
31  virtual bool pointHasCoverage(const ossimGpt& gpt) const
32  {
33  ossimFilename filename;
34  createFullPath(filename, gpt);
35 
36  return filename.exists();
37  }
38  virtual double getHeightAboveMSL(const ossimGpt&);
39  virtual double getHeightAboveEllipsoid(const ossimGpt& gpt);
40  virtual ossim_uint64 createId(const ossimGpt& pt)const
41  {
42  ossim_uint64 y = static_cast<ossim_uint64>(ossim::wrap(pt.latd(), -90.0, 90.0)+90.0);
43  ossim_uint64 x = static_cast<ossim_uint64>(ossim::wrap(pt.lond(),-180.0,180.0)+180.0);
44  // map the extreme edge to the same ID ax the 179 west cell and the same for the 89
45  // degree north cell.
46  //
47  x = x==360?359:x;
48  y = y==180?179:y;
49  // Srtm databases are 1x1 degree cells and we will use a world
50  // grid for id generation.
51  //
52  return (y*360+x);
53  }
54  virtual bool loadState(const ossimKeywordlist& kwl, const char* prefix = 0);
55  virtual bool saveState(ossimKeywordlist& kwl, const char* prefix = 0)const;
56 
57 protected:
58  bool openSrtmDirectory(const ossimFilename& dir);
59  void createRelativePath(ossimFilename& file, const ossimGpt& gpt)const;
60  void createFullPath(ossimFilename& file, const ossimGpt& gpt)const
61  {
62  ossimFilename relativeFile;
63  createRelativePath(relativeFile, gpt);
64  file = ossimFilename(m_connectionString).dirCat(relativeFile);
65  }
66 
68 
69  TYPE_DATA
70 };
71 #endif
ossim_uint32 x
virtual double getHeightAboveMSL(const ossimGpt &)=0
Height access methods:
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
virtual ossimRefPtr< ossimElevCellHandler > createCell(const ossimGpt &)
double lond() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:97
Represents serializable keyword/value map.
ossim_uint32 y
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
T wrap(T x, T a, T b)
Definition: ossimCommon.h:180
void createFullPath(ossimFilename &file, const ossimGpt &gpt) const
double latd() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:87
virtual bool getAccuracyInfo(ossimElevationAccuracyInfo &, const ossimGpt &) const
bool exists() const
#define TYPE_DATA
Definition: ossimRtti.h:339
unsigned long long ossim_uint64
std::vector< ossimRefPtr< CellInfo > > DirectMap
virtual bool pointHasCoverage(const ossimGpt &gpt) const
METHOD: pointHasCoverage(gpt) Returns TRUE if coverage exists over gpt:
#define OSSIM_DLL
ossimFilename dirCat(const ossimFilename &file) const
virtual ossim_uint64 createId(const ossimGpt &pt) const
virtual ossimObject * dup() const =0
virtual double getHeightAboveEllipsoid(const ossimGpt &)
virtual bool open(const ossimString &connectionString)=0
Open a connection to a database.