OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimRsmpia.cpp
Go to the documentation of this file.
1 //---
2 // File: ossimRsmpia.cpp
3 //
4 // License: MIT
5 //
6 // See LICENSE.txt file in the top level directory for more details.
7 //---
8 
11 #include <ossim/base/ossimNotify.h>
13 
14 static std::string IID_KW = "iid";
15 static std::string EDITION_KW = "edition";
16 
17 static std::string R0_KW = "r0";
18 static std::string RX_KW = "rx";
19 static std::string RY_KW = "ry";
20 static std::string RZ_KW = "rz";
21 
22 static std::string RXX_KW = "rxx";
23 static std::string RXY_KW = "rxy";
24 static std::string RXZ_KW = "rxz";
25 
26 static std::string RYY_KW = "ryy";
27 static std::string RYZ_KW = "ryz";
28 static std::string RZZ_KW = "rzz";
29 
30 static std::string C0_KW = "c0";
31 static std::string CX_KW = "cx";
32 static std::string CY_KW = "cy";
33 static std::string CZ_KW = "cz";
34 
35 static std::string CXX_KW = "cxx";
36 static std::string CXY_KW = "cxy";
37 static std::string CXZ_KW = "cxz";
38 
39 static std::string CYY_KW = "cyy";
40 static std::string CYZ_KW = "cyz";
41 static std::string CZZ_KW = "czz";
42 
43 static std::string RNIS_KW = "rnis";
44 static std::string CNIS_KW = "cnis";
45 static std::string TNIS_KW = "tnis";
46 
47 static std::string RSSIZ_KW = "rssiz";
48 static std::string CSSIZ_KW = "cssiz";
49 
51  :
52  m_iid(),
53  m_edition(),
54 
55  m_r0(0.0),
56  m_rx(0.0),
57  m_ry(0.0),
58  m_rz(0.0),
59 
60  m_rxx(0.0),
61  m_rxy(0.0),
62  m_rxz(0.0),
63 
64  m_ryy(0.0),
65  m_ryz(0.0),
66  m_rzz(0.0),
67 
68  m_c0(0.0),
69  m_cx(0.0),
70  m_cy(0.0),
71  m_cz(0.0),
72 
73  m_cxx(0.0),
74  m_cxy(0.0),
75  m_cxz(0.0),
76 
77  m_cyy(0.0),
78  m_cyz(0.0),
79  m_czz(0.0),
80 
81  m_rnis(0),
82  m_cnis(0),
83  m_tnis(0),
84 
85  m_rssiz(0.0),
86  m_cssiz(0.0)
87 {
88 }
89 
91  :
92  m_iid( obj.m_iid ),
93  m_edition( obj.m_edition ),
94 
95  m_r0( obj.m_r0 ),
96  m_rx( obj.m_rx ),
97  m_ry( obj.m_ry ),
98  m_rz( obj.m_rz ),
99 
100  m_rxx( obj.m_rxx ),
101  m_rxy( obj.m_rxy ),
102  m_rxz( obj.m_rxz ),
103 
104  m_ryy( obj.m_ryy ),
105  m_ryz( obj.m_ryz ),
106  m_rzz( obj.m_rzz ),
107 
108  m_c0( obj.m_c0 ),
109  m_cx( obj.m_cx ),
110  m_cy( obj.m_cy ),
111  m_cz( obj.m_cz ),
112 
113  m_cxx( obj.m_cxx ),
114  m_cxy( obj.m_cxy ),
115  m_cxz( obj.m_cxz ),
116 
117  m_cyy( obj.m_cyy ),
118  m_cyz( obj.m_cyz ),
119  m_czz( obj.m_czz ),
120 
121  m_rnis( obj.m_rnis ),
122  m_cnis( obj.m_cnis ),
123  m_tnis( obj.m_tnis ),
124 
125  m_rssiz( obj.m_rssiz ),
126  m_cssiz( obj.m_cssiz )
127 {
128 }
129 
131 {
132  if (this != &rhs)
133  {
134  m_iid = rhs.m_iid;
135  m_edition = rhs.m_edition;
136 
137  m_r0 = rhs.m_r0;
138  m_rx = rhs.m_rx;
139  m_ry = rhs.m_ry;
140  m_rz = rhs.m_rz;
141 
142  m_rxx = rhs.m_rxx;
143  m_rxy = rhs.m_rxy;
144  m_rxz = rhs.m_rxz;
145 
146  m_ryy = rhs.m_ryy;
147  m_ryz = rhs.m_ryz;
148  m_rzz = rhs.m_rzz;
149 
150  m_c0 = rhs.m_c0;
151  m_cx = rhs.m_cx;
152  m_cy = rhs.m_cy;
153  m_cz = rhs.m_cz;
154 
155  m_cxx = rhs.m_cxx;
156  m_cxy = rhs.m_cxy;
157  m_cxz = rhs.m_cxz;
158 
159  m_cyy = rhs.m_cyy;
160  m_cyz = rhs.m_cyz;
161  m_czz = rhs.m_czz;
162 
163  m_rnis = rhs.m_rnis;
164  m_cnis = rhs.m_cnis;
165  m_tnis = rhs.m_tnis;
166 
167  m_rssiz = rhs.m_rssiz;
168  m_cssiz = rhs.m_cssiz;
169  }
170  return *this;
171 }
172 
174  const std::string& prefix ) const
175 {
176  std::string pfx = prefix + std::string("rsmpia.");
177 
178  kwl.add(pfx.c_str(), IID_KW.c_str(), m_iid.c_str());
179  kwl.add(pfx.c_str(), EDITION_KW.c_str(), m_edition.c_str());
180 
181  kwl.add(pfx.c_str(), R0_KW.c_str(), m_r0);
182  kwl.add(pfx.c_str(), RX_KW.c_str(), m_rx);
183  kwl.add(pfx.c_str(), RY_KW.c_str(), m_ry);
184  kwl.add(pfx.c_str(), RZ_KW.c_str(), m_rz);
185 
186  kwl.add(pfx.c_str(), RXX_KW.c_str(), m_rxx);
187  kwl.add(pfx.c_str(), RXY_KW.c_str(), m_rxy);
188  kwl.add(pfx.c_str(), RXZ_KW.c_str(), m_rxz);
189 
190  kwl.add(pfx.c_str(), RYY_KW.c_str(), m_ryy);
191  kwl.add(pfx.c_str(), RYZ_KW.c_str(), m_ryz);
192  kwl.add(pfx.c_str(), RZZ_KW.c_str(), m_rzz);
193 
194  kwl.add(pfx.c_str(), C0_KW.c_str(), m_c0);
195  kwl.add(pfx.c_str(), CX_KW.c_str(), m_cx);
196  kwl.add(pfx.c_str(), CY_KW.c_str(), m_cy);
197  kwl.add(pfx.c_str(), CZ_KW.c_str(), m_cz);
198 
199  kwl.add(pfx.c_str(), CXX_KW.c_str(), m_cxx);
200  kwl.add(pfx.c_str(), CXY_KW.c_str(), m_cxy);
201  kwl.add(pfx.c_str(), CXZ_KW.c_str(), m_cxz);
202 
203  kwl.add(pfx.c_str(), CYY_KW.c_str(), m_cyy);
204  kwl.add(pfx.c_str(), CYZ_KW.c_str(), m_cyz);
205  kwl.add(pfx.c_str(), CZZ_KW.c_str(), m_czz);
206 
207  kwl.add(pfx.c_str(), RNIS_KW.c_str(), m_rnis);
208  kwl.add(pfx.c_str(), CNIS_KW.c_str(), m_cnis);
209  kwl.add(pfx.c_str(), TNIS_KW.c_str(), m_tnis);
210 
211  kwl.add(pfx.c_str(), RSSIZ_KW.c_str(), m_rssiz);
212  kwl.add(pfx.c_str(), CSSIZ_KW.c_str(), m_cssiz);
213 
214 } // End: ossimRsmpia::saveState( ... )
215 
217  const std::string& prefix )
218 {
219  std::string pfx = prefix + std::string("rsmpia.");
220  std::string key;
221  std::string value;
222 
223  bool result = false; // Set to true on last key.
224 
225  while( 1 ) // Break out on error.
226  {
227  key = IID_KW;
228  value = kwl.findKey( pfx, key );
229  if ( value.size() )
230  {
231  m_iid = value;
232  }
233  else
234  {
235  break;
236  }
237 
238  key = EDITION_KW;
239  value = kwl.findKey( pfx, key );
240  if ( value.size() )
241  {
242  m_edition = value;
243  }
244  else
245  {
246  break;
247  }
248 
249  key = R0_KW;
250  value = kwl.findKey( pfx, key );
251  if ( value.size() )
252  {
253  m_r0 = ossimString(value).toFloat64();
254  }
255  else
256  {
257  break;
258  }
259 
260  key = RX_KW;
261  value = kwl.findKey( pfx, key );
262  if ( value.size() )
263  {
264  m_rx = ossimString(value).toFloat64();
265  }
266  else
267  {
268  break;
269  }
270 
271  key = RY_KW;
272  value = kwl.findKey( pfx, key );
273  if ( value.size() )
274  {
275  m_ry = ossimString(value).toFloat64();
276  }
277  else
278  {
279  break;
280  }
281 
282  key = RZ_KW;
283  value = kwl.findKey( pfx, key );
284  if ( value.size() )
285  {
286  m_rz = ossimString(value).toFloat64();
287  }
288  else
289  {
290  break;
291  }
292 
293  key = RXX_KW;
294  value = kwl.findKey( pfx, key );
295  if ( value.size() )
296  {
297  m_rxx = ossimString(value).toFloat64();
298  }
299  else
300  {
301  break;
302  }
303 
304  key = RXY_KW;
305  value = kwl.findKey( pfx, key );
306  if ( value.size() )
307  {
308  m_rxy = ossimString(value).toFloat64();
309  }
310  else
311  {
312  break;
313  }
314 
315  key = RXZ_KW;
316  value = kwl.findKey( pfx, key );
317  if ( value.size() )
318  {
319  m_rxz = ossimString(value).toFloat64();
320  }
321  else
322  {
323  break;
324  }
325 
326  key = RYY_KW;
327  value = kwl.findKey( pfx, key );
328  if ( value.size() )
329  {
330  m_ryy = ossimString(value).toFloat64();
331  }
332  else
333  {
334  break;
335  }
336 
337  key = RYZ_KW;
338  value = kwl.findKey( pfx, key );
339  if ( value.size() )
340  {
341  m_ryz = ossimString(value).toFloat64();
342  }
343  else
344  {
345  break;
346  }
347 
348  key = RZZ_KW;
349  value = kwl.findKey( pfx, key );
350  if ( value.size() )
351  {
352  m_rzz = ossimString(value).toFloat64();
353  }
354  else
355  {
356  break;
357  }
358 
359  key = C0_KW;
360  value = kwl.findKey( pfx, key );
361  if ( value.size() )
362  {
363  m_c0 = ossimString(value).toFloat64();
364  }
365  else
366  {
367  break;
368  }
369 
370  key = CX_KW;
371  value = kwl.findKey( pfx, key );
372  if ( value.size() )
373  {
374  m_cx = ossimString(value).toFloat64();
375  }
376  else
377  {
378  break;
379  }
380 
381  key = CY_KW;
382  value = kwl.findKey( pfx, key );
383  if ( value.size() )
384  {
385  m_cy = ossimString(value).toFloat64();
386  }
387  else
388  {
389  break;
390  }
391 
392  key = CZ_KW;
393  value = kwl.findKey( pfx, key );
394  if ( value.size() )
395  {
396  m_cz = ossimString(value).toFloat64();
397  }
398  else
399  {
400  break;
401  }
402 
403  key = CXX_KW;
404  value = kwl.findKey( pfx, key );
405  if ( value.size() )
406  {
407  m_cxx = ossimString(value).toFloat64();
408  }
409  else
410  {
411  break;
412  }
413 
414  key = CXY_KW;
415  value = kwl.findKey( pfx, key );
416  if ( value.size() )
417  {
418  m_cxy = ossimString(value).toFloat64();
419  }
420  else
421  {
422  break;
423  }
424 
425  key = CXZ_KW;
426  value = kwl.findKey( pfx, key );
427  if ( value.size() )
428  {
429  m_cxz = ossimString(value).toFloat64();
430  }
431  else
432  {
433  break;
434  }
435 
436  key = CYY_KW;
437  value = kwl.findKey( pfx, key );
438  if ( value.size() )
439  {
440  m_cyy = ossimString(value).toFloat64();
441  }
442  else
443  {
444  break;
445  }
446 
447  key = CYZ_KW;
448  value = kwl.findKey( pfx, key );
449  if ( value.size() )
450  {
451  m_cyz = ossimString(value).toFloat64();
452  }
453  else
454  {
455  break;
456  }
457 
458  key = CZZ_KW;
459  value = kwl.findKey( pfx, key );
460  if ( value.size() )
461  {
462  m_czz = ossimString(value).toFloat64();
463  }
464  else
465  {
466  break;
467  }
468 
469  key = RNIS_KW;
470  value = kwl.findKey( pfx, key );
471  if ( value.size() )
472  {
473  m_rnis = ossimString(value).toUInt32();
474  }
475  else
476  {
477  break;
478  }
479 
480  key = CNIS_KW;
481  value = kwl.findKey( pfx, key );
482  if ( value.size() )
483  {
484  m_cnis = ossimString(value).toUInt32();
485  }
486  else
487  {
488  break;
489  }
490 
491  key = TNIS_KW;
492  value = kwl.findKey( pfx, key );
493  if ( value.size() )
494  {
495  m_tnis = ossimString(value).toUInt32();
496  }
497  else
498  {
499  break;
500  }
501 
502  key = RSSIZ_KW;
503  value = kwl.findKey( pfx, key );
504  if ( value.size() )
505  {
506  m_rssiz = ossimString(value).toUInt32();
507  }
508  else
509  {
510  break;
511  }
512 
513  key = CSSIZ_KW;
514  value = kwl.findKey( pfx, key );
515  if ( value.size() )
516  {
517  m_cssiz = ossimString(value).toUInt32();
518  }
519  else
520  {
521  break;
522  }
523 
524  // If we get here we're good, so set the status for downstream code.
525  result = true;
526 
527  // Final break from while forever loop.
528  break;
529 
530  } // Matches: while( FOREVER )
531 
532  if ( result == false )
533  {
534  // Find on key failed...
536  << "ossimRsmpia::loadState WARNING:\n"
537  << "Error encountered parsing the following required keyword: "
538  << "<" << key << ">. Check the keywordlist for proper syntax."
539  << std::endl;
540  }
541 
542  return result;
543 
544 } // End: ossimRsmpia::loadState( ... )
545 
547 {
548  bool status = false;
549 
550  if ( rsmpiaTag )
551  {
552  m_iid = rsmpiaTag->getIid().trim().string();
553  m_edition = rsmpiaTag->getEdition().trim().string();
554 
555  m_r0 = rsmpiaTag->getR0().toFloat64();
556  m_rx = rsmpiaTag->getRx().toFloat64();
557  m_ry = rsmpiaTag->getRy().toFloat64();
558  m_rz = rsmpiaTag->getRz().toFloat64();
559 
560  m_rxx = rsmpiaTag->getRxx().toFloat64();
561  m_rxy = rsmpiaTag->getRxy().toFloat64();
562  m_rxz = rsmpiaTag->getRxz().toFloat64();
563 
564  m_ryy = rsmpiaTag->getRyy().toFloat64();
565  m_ryz = rsmpiaTag->getRyz().toFloat64();
566  m_rzz = rsmpiaTag->getRzz().toFloat64();
567 
568  m_c0 = rsmpiaTag->getC0().toFloat64();
569  m_cx = rsmpiaTag->getCx().toFloat64();
570  m_cy = rsmpiaTag->getCy().toFloat64();
571  m_cz = rsmpiaTag->getCz().toFloat64();
572 
573  m_cxx = rsmpiaTag->getCxx().toFloat64();
574  m_cxy = rsmpiaTag->getCxy().toFloat64();
575  m_cxz = rsmpiaTag->getCxz().toFloat64();
576 
577  m_cyy = rsmpiaTag->getCyy().toFloat64();
578  m_cyz = rsmpiaTag->getCyz().toFloat64();
579  m_czz = rsmpiaTag->getCzz().toFloat64();
580 
581  m_rnis = rsmpiaTag->getRnis().toUInt32();
582  m_cnis = rsmpiaTag->getCnis().toUInt32();
583  m_tnis = rsmpiaTag->getTnis().toUInt32();
584 
585  m_rssiz = rsmpiaTag->getRssiz().toFloat64();
586  m_cssiz = rsmpiaTag->getCssiz().toFloat64();
587 
588  status = true;
589 
590  } // Matches: if ( rsmpiaTag )
591 
592  return status;
593 
594 } // End: ossimRsmpia::initializeModel( rsmpiaTag )
ossimString getRx() const
std::string m_edition
Definition: ossimRsmpia.h:62
Represents serializable keyword/value map.
const std::string & findKey(const std::string &key) const
Find methods that take std::string(s).
ossimString getEdition() const
void saveState(ossimKeywordlist &kwl, const std::string &prefix) const
saveState Saves state to keyword list.
ossim_float64 m_cy
Definition: ossimRsmpia.h:79
ossim_uint32 m_rnis
Definition: ossimRsmpia.h:90
ossim_uint32 m_tnis
Definition: ossimRsmpia.h:92
const ossimRsmpia & operator=(const ossimRsmpia &rhs)
assignment operator
ossim_uint32 toUInt32() const
ossimString getRxy() const
ossim_float64 m_cxy
Definition: ossimRsmpia.h:83
ossimString getRz() const
ossimString getRy() const
ossim_float64 m_rz
Definition: ossimRsmpia.h:67
ossimString getRssiz() const
ossimString getCz() const
ossim_float64 m_ryy
Definition: ossimRsmpia.h:73
bool loadState(const ossimKeywordlist &kwl, const std::string &prefix)
loadState Loads state from keyword list.
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
ossim_uint32 m_cssiz
Definition: ossimRsmpia.h:95
ossimString getCxy() const
ossim_float64 m_cz
Definition: ossimRsmpia.h:80
ossim_float64 m_r0
Definition: ossimRsmpia.h:64
ossimString getIid() const
ossimString getCzz() const
ossimString getRnis() const
ossimString getR0() const
ossim_float64 m_cxz
Definition: ossimRsmpia.h:84
ossimString getCnis() const
ossimString trim(const ossimString &valueToTrim=ossimString(" \\)) const
this will strip lead and trailing character passed in.
ossim_float64 toFloat64() const
ossim_float64 m_rzz
Definition: ossimRsmpia.h:75
ossimRsmpia()
default constructor
Definition: ossimRsmpia.cpp:50
ossimString getRxz() const
ossimString getCxz() const
std::string m_iid
Definition: ossimRsmpia.h:61
ossim_uint32 m_rssiz
Definition: ossimRsmpia.h:94
ossim_float64 m_ry
Definition: ossimRsmpia.h:66
ossimString getRxx() const
return status
ossimString getCssiz() const
ossimString getRyz() const
ossim_float64 m_czz
Definition: ossimRsmpia.h:88
ossimString getCx() const
ossimString getCxx() const
ossimString getRzz() const
ossimString getTnis() const
ossim_float64 m_cyy
Definition: ossimRsmpia.h:86
ossim_float64 m_rxx
Definition: ossimRsmpia.h:69
ossim_float64 m_cx
Definition: ossimRsmpia.h:78
ossim_float64 m_ryz
Definition: ossimRsmpia.h:74
ossim_float64 m_cxx
Definition: ossimRsmpia.h:82
ossim_uint32 m_cnis
Definition: ossimRsmpia.h:91
ossimString getCyz() const
ossim_float64 m_rxy
Definition: ossimRsmpia.h:70
bool initialize(const ossimNitfRsmpiaTag *rsmpiaTag)
initialize Initializes from nitf rsmpia tag.
ossim_float64 m_c0
Definition: ossimRsmpia.h:77
ossimString getCyy() const
ossim_float64 m_cyz
Definition: ossimRsmpia.h:87
ossim_float64 m_rxz
Definition: ossimRsmpia.h:71
ossimString getRyy() const
ossim_float64 m_rx
Definition: ossimRsmpia.h:65
ossimString getC0() const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
ossimString getCy() const
const std::string & string() const
Definition: ossimString.h:414