OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Ephemeris.cpp
Go to the documentation of this file.
1 //----------------------------------------------------------------------------
2 //
3 // "Copyright Centre National d'Etudes Spatiales"
4 //
5 // License: LGPL
6 //
7 // See LICENSE.txt file in the top level directory for more details.
8 //
9 //----------------------------------------------------------------------------
10 // $Id$
11 
12 #include <otb/Ephemeris.h>
13 #include <ossim/base/ossimDpt3d.h>
15 #include <ossim/base/ossimNotify.h>
16 #include <ossim/base/ossimString.h>
17 
18 namespace ossimplugins
19 {
20 
21 
22 static const char PREFIX[] = "ephemeris.";
23 static const char DATE_JULIAN_KW[] = "date.julian";
24 static const char DATE_SECOND_KW[] = "date.second";
25 static const char DATE_DECIMAL_KW[] = "date.decimal";
26 static const char POSITION_KW[] = "position";
27 static const char VELOCITY_KW[] = "velocity";
28 
30 {
31  _position[0] = 0.0;
32  _position[1] = 0.0;
33  _position[2] = 0.0;
34  _speed[0] = 0.0;
35  _speed[1] = 0.0;
36  _speed[2] = 0.0;
37 }
38 
40 {
41 }
42 
43 Ephemeris::Ephemeris(JSDDateTime date, double pos[3], double speed[3]):
44  _date(date)
45 {
46  _position[0] = pos[0];
47  _position[1] = pos[1];
48  _position[2] = pos[2];
49  _speed[0] = speed[0];
50  _speed[1] = speed[1];
51  _speed[2] = speed[2];
52 }
53 
55  _date(rhs._date)
56 {
57  _position[0] = rhs._position[0];
58  _position[1] = rhs._position[1];
59  _position[2] = rhs._position[2];
60  _speed[0] = rhs._speed[0];
61  _speed[1] = rhs._speed[1];
62  _speed[2] = rhs._speed[2];
63 }
64 
66 {
67  _position[0] = rhs._position[0];
68  _position[1] = rhs._position[1];
69  _position[2] = rhs._position[2];
70  _speed[0] = rhs._speed[0];
71  _speed[1] = rhs._speed[1];
72  _speed[2] = rhs._speed[2];
73  _date = rhs._date;
74 
75  return *this;
76 }
77 
78 bool Ephemeris::saveState(ossimKeywordlist& kwl, const char* prefix) const
79 {
80  std::string pfx;
81  if (prefix)
82  {
83  pfx = prefix;
84  }
85  pfx += PREFIX;
86 
87  ossimDpt3d pos(_position[0], _position[1], _position[2]);
88  ossimDpt3d vit(_speed[0], _speed[1], _speed[2]);
90 
91  kwl.add(pfx.c_str(), DATE_JULIAN_KW, jd.get_julianDate());
92  kwl.add(pfx.c_str(), DATE_SECOND_KW, _date.get_second());
93  kwl.add(pfx.c_str(), DATE_DECIMAL_KW, _date.get_decimal());
94  kwl.add(pfx.c_str(), POSITION_KW, pos.toString(15).c_str());
95  kwl.add(pfx.c_str(), VELOCITY_KW, vit.toString(15).c_str());
96 
97  return true;
98 }
99 
100 bool Ephemeris::loadState(const ossimKeywordlist& kwl, const char* prefix)
101 {
102  static const char MODULE[] = "Ephemeris::loadState";
103 
104  bool result = true;
105 
106  std::string pfx;
107  if (prefix)
108  {
109  pfx = prefix;
110  }
111  pfx += "ephemeris.";
112 
113  const char* lookup = 0;
114  ossimString s;
115  double d;
116 
117  lookup = kwl.find(pfx.c_str(), DATE_JULIAN_KW);
118  if (lookup)
119  {
120  s = lookup;
121  d = s.toDouble();
122  JulianDate jd(d);
123  _date.set_day0hTU(jd);
124  }
125  else
126  {
128  << MODULE << " Keyword not found: " << DATE_JULIAN_KW << "\n";
129 
130  result = false;
131  }
132 
133  lookup = kwl.find(pfx.c_str(), DATE_SECOND_KW);
134  if (lookup)
135  {
136  s = lookup;
137  d = s.toDouble();
138  _date.set_second(d);
139  }
140  else
141  {
143  << MODULE << " Keyword not found: " << DATE_SECOND_KW << "\n";
144  result = false;
145  }
146 
147  lookup = kwl.find(pfx.c_str(), DATE_DECIMAL_KW);
148  if (lookup)
149  {
150  s = lookup;
151  d = s.toDouble();
152  _date.set_decimal(d);
153  }
154  else
155  {
157  << MODULE << " Keyword not found: " << DATE_DECIMAL_KW << "\n";
158  result = false;
159  }
160 
161  lookup = kwl.find(pfx.c_str(), POSITION_KW);
162  if (lookup)
163  {
164  std::string ps = lookup;
165 
166  ossimDpt3d pt;
167  pt.toPoint(ps);
168 
169  _position[0] = pt.x;
170  _position[1] = pt.y;
171  _position[2] = pt.z;
172  }
173  else
174  {
176  << MODULE << " Keyword not found: " << POSITION_KW << "\n";
177  result = false;
178  }
179 
180  lookup = kwl.find(pfx.c_str(), VELOCITY_KW);
181  if (lookup)
182  {
183  std::string ps = lookup;
184 
185  ossimDpt3d pt;
186  pt.toPoint(ps);
187 
188  _speed[0] = pt.x;
189  _speed[1] = pt.y;
190  _speed[2] = pt.z;
191  }
192  else
193  {
195  << MODULE << " Keyword not found: " << VELOCITY_KW << "\n";
196  result = false;
197  }
198 
199  return result;
200 }
201 }
void toPoint(const std::string &s)
Initializes this point from string.
Definition: ossimDpt3d.cpp:92
bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save object state to a keyword list.
Definition: Ephemeris.cpp:78
double get_julianDate() const
Definition: JulianDate.h:70
Represents serializable keyword/value map.
const char * find(const char *key) const
void set_day0hTU(JulianDate day)
Definition: JSDDateTime.h:86
std::string toString(ossim_uint32 precision=15) const
To string method.
Definition: ossimDpt3d.cpp:55
Ephemeris()
Constructor.
Definition: Ephemeris.cpp:29
void set_second(double second)
Definition: JSDDateTime.h:91
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
This class represents a date in the julian referential.
Definition: JulianDate.h:27
This class represents an ephemeris.
Definition: Ephemeris.h:28
double z
Definition: ossimDpt3d.h:145
bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of the object from a keyword list.
Definition: Ephemeris.cpp:100
JulianDate get_day0hTU() const
Definition: JSDDateTime.h:71
void set_decimal(double decimal)
Definition: JSDDateTime.h:96
double toDouble() const
double get_second() const
Definition: JSDDateTime.h:76
double get_decimal() const
Definition: JSDDateTime.h:81
double x
Definition: ossimDpt3d.h:143
virtual ~Ephemeris()
Destructor.
Definition: Ephemeris.cpp:39
double y
Definition: ossimDpt3d.h:144
This class represents a date.
Definition: JSDDateTime.h:30
Ephemeris & operator=(const Ephemeris &rhs)
Affectation operator.
Definition: Ephemeris.cpp:65
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)