OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimAlphaSensor.cpp
Go to the documentation of this file.
1 //*******************************************************************
2 //
3 // License: See top level LICENSE.txt file.
4 //
5 // Author: Dave Hicks
6 //
7 // Description: Alpha Sensor Base Class
8 //
9 //*******************************************************************
10 // $Id$
13 #include <ossim/base/ossimTrace.h>
14 #include <ossim/base/ossimLsrRay.h>
21 #include <ossim/matrix/newmatio.h>
22 
23 static ossimTrace traceExec ("ossimAlphaSensor:exec");
24 static ossimTrace traceDebug("ossimAlphaSensor:debug");
25 
26 RTTI_DEF1(ossimAlphaSensor, "ossimAlphaSensor", ossimSensorModel);
27 
28 enum
29 {
38 };
39 
41  :
42  m_rollBias(0.0),
43  m_pitchBias(0.0),
44  m_headingBias(0.0),
45  m_fov(0.0),
46  m_slitRot(0.0),
47  m_focalLength(0.0),
48  m_adjustedFocalLength(0.0)
49 {
50 
51  if (traceDebug())
52  {
54  << "ossimAlphaSensor::ossimAlphaSensor DEBUG:" << std::endl;
55  }
56  m_cam2Platform.ReSize(3,3);
57  m_cam2Platform = 0.0;
58 
60 }
61 
63  :
64  ossimSensorModel(src),
65  m_rollBias(src.m_rollBias),
66  m_pitchBias(src.m_pitchBias),
67  m_headingBias(src.m_headingBias),
68  m_fov(src.m_fov),
69  m_slitRot(src.m_slitRot),
70  m_focalLength(src.m_focalLength),
71  m_rollPoly(src.m_rollPoly),
72  m_pitchPoly(src.m_pitchPoly),
73  m_headingPoly(src.m_headingPoly),
74  m_lonPoly(src.m_lonPoly),
75  m_latPoly(src.m_latPoly),
76  m_altPoly(src.m_altPoly),
77  m_scanPoly(src.m_scanPoly),
78  m_cam2Platform(src.m_cam2Platform),
79  m_adjustedFocalLength(src.m_adjustedFocalLength)
80 {
81 }
82 
84 {
85  return new ossimAlphaSensor(*this);
86 }
87 
89  ossimGpt& worldPt) const
90 {
91  ossimEcefRay ray;
92  imagingRay(imagePoint, ray);
94 }
95 
97  const double& heightEllipsoid,
98  ossimGpt& worldPt) const
99 {
100  ossimEcefRay ray;
101  imagingRay(imagePoint, ray);
102  ossimEcefPoint pecf(ray.intersectAboveEarthEllipsoid(heightEllipsoid));
103  worldPt = ossimGpt(pecf);
104 
105  if (traceDebug())
106  {
108  << "ossimAlphaSensorHSI::lineSampleHeightToWorld DEBUG:" << std::endl;
109  ossimNotify(ossimNotifyLevel_DEBUG) << " imagePoint = " << imagePoint << std::endl;
110  ossimNotify(ossimNotifyLevel_DEBUG) << " heightEllipsoid = " << heightEllipsoid << std::endl;
111  ossimNotify(ossimNotifyLevel_DEBUG) << " ray = " << ray << std::endl;
112  ossimNotify(ossimNotifyLevel_DEBUG) << " worldPt = " << worldPt << std::endl;
113  }
114 }
115 
116 void ossimAlphaSensor::setFov(const double fov)
117 {
118  m_fov = fov;
120 }
121 
122 void ossimAlphaSensor::setRollBias(const double rollBias)
123 {
124  m_rollBias = rollBias;
125 }
126 
127 void ossimAlphaSensor::setPitchBias(const double pitchBias)
128 {
129  m_pitchBias = pitchBias;
130 }
131 
132 void ossimAlphaSensor::setHeadingBias(const double headingBias)
133 {
134  m_headingBias = headingBias;
135 }
136 
137 void ossimAlphaSensor::setSlitRot(const double slitRot)
138 {
139  m_slitRot = slitRot;
140 }
141 
142 void ossimAlphaSensor::setRollPoly(const std::vector< ossim_float64 > rollPoly)
143 {
144  m_rollPoly = rollPoly;
145 }
146 
147 void ossimAlphaSensor::setPitchPoly(const std::vector< ossim_float64 > pitchPoly)
148 {
149  m_pitchPoly = pitchPoly;
150 }
151 
152 void ossimAlphaSensor::setHeadingPoly(const std::vector< ossim_float64 > headingPoly)
153 {
154  m_headingPoly = headingPoly;
155 }
156 
157 void ossimAlphaSensor::setLonPoly(const std::vector< ossim_float64 > lonPoly)
158 {
159  m_lonPoly = lonPoly;
160 }
161 
162 void ossimAlphaSensor::setLatPoly(const std::vector< ossim_float64 > latPoly)
163 {
164  m_latPoly = latPoly;
165 }
166 
167 void ossimAlphaSensor::setAltPoly(const std::vector< ossim_float64 > altPoly)
168 {
169  m_altPoly = altPoly;
170 }
171 
172 void ossimAlphaSensor::setScanPoly(const std::vector< ossim_float64 > scanPoly)
173 {
174  m_scanPoly = scanPoly;
175 }
176 
178  ossimEcefPoint& pos,
179  NEWMAT::Matrix& cam2EcfRot) const
180 {
181  // Platform position
182  pos = getCameraPosition(line);
183 
184  // Local platform orientation
185  NEWMAT::Matrix platform2Local = getPlatform2LocalRot(line);
186 
187  // Form local<-ECF matrix
188  ossimGpt posG = ossimGpt(pos);
189  NEWMAT::Matrix local2Ecf = formLLAmat(posG.latr(), posG.lonr(), 0.0);
190 
191  // Form full ECF<-camera matrix
192  cam2EcfRot = local2Ecf.t() * platform2Local * m_cam2Platform;
193 }
194 
196 {
197  // Interpolate position at given line number
198  ossim_float64 lat = evalPoly(m_latPoly, line);
199  ossim_float64 lon = evalPoly(m_lonPoly, line);
200  ossim_float64 alt = evalPoly(m_altPoly, line);
201  ossimGpt cameraPositionEllipsoid(lat, lon, alt);
202 
203  // Update adjusted position
205  cameraPositionEllipsoid.metersPerDegree().y;
207  cameraPositionEllipsoid.metersPerDegree().x;
208 
209  ossimGpt adjustedCameraPosition = ossimGpt(cameraPositionEllipsoid.latd() + deltap,
210  cameraPositionEllipsoid.lond() + deltal,
211  cameraPositionEllipsoid.height() + computeParameterOffset(PARAM_ADJ_ALTITUDE_OFFSET));
212 
213  ossimEcefPoint pos(adjustedCameraPosition);
214 
215  return pos;
216 }
217 
218 NEWMAT::Matrix ossimAlphaSensor::getPlatform2LocalRot(const ossim_float64& line) const
219 {
220  // Interpolate orientation at given line number
221  ossim_float64 roll = evalPoly(m_rollPoly, line);
222  ossim_float64 pitch = evalPoly(m_pitchPoly, line);
223  ossim_float64 heading = evalPoly(m_headingPoly, line);
224 
225  // Form orientation matrix
226  NEWMAT::Matrix rmat = formHPRmat(-roll, -pitch, -heading);
227 
228  return rmat;
229 }
230 
231 ossim_float64 ossimAlphaSensor::evalPoly(const std::vector<ossim_float64>& polyCoef,
232  const ossim_float64& line) const
233 {
234  int nCoef = polyCoef.size();
235 
236  ossim_float64 result = polyCoef[nCoef-1];
237 
238  if (nCoef > 1)
239  {
240  for(int i=nCoef-2; i >= 0 ; --i)
241  result = result * line + polyCoef[i];
242  }
243 
244  return result;
245 }
246 
248 {
249  if (traceDebug())
250  {
252  << "ossimAlphaSensor::updateModel DEBUG:" << std::endl;
253  }
254 
255  // Apply bias corrections
259 
260  // Form bias rotation matrix
261  m_cam2Platform = formHPRmat(r, p, h);
262 
263  // Apply focal length correction
266 }
267 
269 {
270  if (traceExec())
271  ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimAlphaSensor::initAdjustableParameters: returning..." << std::endl;
273 
278 
283 
288 
293 
298 
303 
308 }
309 
310 bool ossimAlphaSensor::loadState(const ossimKeywordlist& kwl, const char* prefix)
311 {
312  if (traceDebug())
313  {
315  << "ossimAlphaSensor::loadState DEBUG:" << std::endl;
316  }
317 
318  theGSD.makeNan();
320  ossimSensorModel::loadState(kwl, prefix);
321 
322  ossimString fov = kwl.find(prefix, "fov");
323  ossimString number_samples = kwl.find(prefix, "number_samples");
324  ossimString number_lines = kwl.find(prefix, "number_lines");
325  ossimString rollBias = kwl.find(prefix, "roll_bias");
326  ossimString pitchBias = kwl.find(prefix, "pitch_bias");
327  ossimString headingBias = kwl.find(prefix, "heading_bias");
328  ossimString slitRot = kwl.find(prefix, "slit_rotation");
329 
330  ossim_uint32 pcount;
331  const char* lookup;
332 
333  // Roll polynomial
334  m_rollPoly.clear();
335  pcount = kwl.numberOf("roll_poly_coeff");
336  if (pcount>0)
337  {
338  ossim_uint32 found = 0;
339  ossim_uint32 count = 0;
340  while ( (found < pcount) && (count < 100) )
341  {
342  ossimString kw = "roll_poly_coeff";
343  kw += ossimString::toString(count);;
344  lookup = kwl.find(prefix, kw.c_str());
345  if (lookup)
346  {
347  ++found;
348  m_rollPoly.push_back(ossimString::toFloat64(lookup));
349  }
350  ++count;
351  }
352  }
353  else
354  {
355  if (traceDebug())
356  {
358  << "DEBUG ossimAlphaSensor::loadState() roll_poly_coeff lookup failure..."
359  << std::endl;
360  }
361  return false;
362  }
363 
364  // Pitch polynomial
365  m_pitchPoly.clear();
366  pcount = kwl.numberOf("pitch_poly_coeff");
367  if (pcount>0)
368  {
369  ossim_uint32 found = 0;
370  ossim_uint32 count = 0;
371  while ( (found < pcount) && (count < 100) )
372  {
373  ossimString kw = "pitch_poly_coeff";
374  kw += ossimString::toString(count);;
375  lookup = kwl.find(prefix, kw.c_str());
376  if (lookup)
377  {
378  ++found;
379  m_pitchPoly.push_back(ossimString::toFloat64(lookup));
380  }
381  ++count;
382  }
383  }
384  else
385  {
386  if (traceDebug())
387  {
389  << "DEBUG ossimAlphaSensor::loadState() pitch_poly_coeff lookup failure..."
390  << std::endl;
391  }
392  return false;
393  }
394 
395  // Heading polynomial
396  m_headingPoly.clear();
397  pcount = kwl.numberOf("heading_poly_coeff");
398  if (pcount>0)
399  {
400  ossim_uint32 found = 0;
401  ossim_uint32 count = 0;
402  while ( (found < pcount) && (count < 100) )
403  {
404  ossimString kw = "heading_poly_coeff";
405  kw += ossimString::toString(count);;
406  lookup = kwl.find(prefix, kw.c_str());
407  if (lookup)
408  {
409  ++found;
410  m_headingPoly.push_back(ossimString::toFloat64(lookup));
411  }
412  ++count;
413  }
414  }
415  else
416  {
417  if (traceDebug())
418  {
420  << "DEBUG ossimAlphaSensor::loadState() heading_poly_coeff lookup failure..."
421  << std::endl;
422  }
423  return false;
424  }
425 
426  // Latitude polynomial
427  m_latPoly.clear();
428  pcount = kwl.numberOf("lat_poly_coeff");
429  if (pcount>0)
430  {
431  ossim_uint32 found = 0;
432  ossim_uint32 count = 0;
433  while ( (found < pcount) && (count < 100) )
434  {
435  ossimString kw = "lat_poly_coeff";
436  kw += ossimString::toString(count);;
437  lookup = kwl.find(prefix, kw.c_str());
438  if (lookup)
439  {
440  ++found;
441  m_latPoly.push_back(ossimString::toFloat64(lookup));
442  }
443  ++count;
444  }
445  }
446  else
447  {
448  if (traceDebug())
449  {
451  << "DEBUG ossimAlphaSensor::loadState() lat_poly_coeff lookup failure..."
452  << std::endl;
453  }
454  return false;
455  }
456 
457  // Longitude polynomial
458  m_lonPoly.clear();
459  pcount = kwl.numberOf("lon_poly_coeff");
460  if (pcount>0)
461  {
462  ossim_uint32 found = 0;
463  ossim_uint32 count = 0;
464  while ( (found < pcount) && (count < 100) )
465  {
466  ossimString kw = "lon_poly_coeff";
467  kw += ossimString::toString(count);;
468  lookup = kwl.find(prefix, kw.c_str());
469  if (lookup)
470  {
471  ++found;
472  m_lonPoly.push_back(ossimString::toFloat64(lookup));
473  }
474  ++count;
475  }
476  }
477  else
478  {
479  if (traceDebug())
480  {
482  << "DEBUG ossimAlphaSensor::loadState() lon_poly_coeff lookup failure..."
483  << std::endl;
484  }
485  return false;
486  }
487 
488  // Altitude polynomial
489  m_altPoly.clear();
490  pcount = kwl.numberOf("alt_poly_coeff");
491  if (pcount>0)
492  {
493  ossim_uint32 found = 0;
494  ossim_uint32 count = 0;
495  while ( (found < pcount) && (count < 100) )
496  {
497  ossimString kw = "alt_poly_coeff";
498  kw += ossimString::toString(count);;
499  lookup = kwl.find(prefix, kw.c_str());
500  if (lookup)
501  {
502  ++found;
503  m_altPoly.push_back(ossimString::toFloat64(lookup));
504  }
505  ++count;
506  }
507  }
508  else
509  {
510  if (traceDebug())
511  {
513  << "DEBUG ossimAlphaSensor::loadState() alt_poly_coeff lookup failure..."
514  << std::endl;
515  }
516  return false;
517  }
518 
519  // Scan angle polynomial
520  m_scanPoly.clear();
521  pcount = kwl.numberOf("scan_poly_coeff");
522  if (pcount>0)
523  {
524  ossim_uint32 found = 0;
525  ossim_uint32 count = 0;
526  while ( (found < pcount) && (count < 100) )
527  {
528  ossimString kw = "scan_poly_coeff";
529  kw += ossimString::toString(count);;
530  lookup = kwl.find(prefix, kw.c_str());
531  if (lookup)
532  {
533  ++found;
534  m_scanPoly.push_back(ossimString::toFloat64(lookup));
535  }
536  ++count;
537  }
538  }
539  else
540  {
541  if (traceDebug())
542  {
544  << "DEBUG ossimAlphaSensor::loadState() scan_poly_coeff lookup failure..."
545  << std::endl;
546  }
547  return false;
548  }
549 
550 
551  if(!number_samples.empty())
552  {
553  theImageSize = ossimIpt(number_samples.toDouble(), number_lines.toDouble());
556  }
558  {
560  }
561  if(theRefImgPt.hasNans())
562  {
564  }
565  if(!fov.empty())
566  {
567  m_fov = fov.toDouble();
568  }
569  if(!rollBias.empty())
570  {
571  m_rollBias = rollBias.toDouble();
572  }
573  if(!pitchBias.empty())
574  {
575  m_pitchBias = pitchBias.toDouble();
576  }
577  if(!headingBias.empty())
578  {
579  m_headingBias = headingBias.toDouble();
580  }
581  if(!slitRot.empty())
582  {
583  m_slitRot = slitRot.toDouble();
584  }
585 
586  updateModel();
587 
588  if (traceDebug())
589  {
591  << "ossimAlphaSensor::loadState complete..." << std::endl;
592  }
593 
594  return true;
595 }
596 
597 bool ossimAlphaSensor::saveState(ossimKeywordlist& kwl, const char* prefix)const
598 {
599  ossimSensorModel::saveState(kwl, prefix);
600  kwl.add(prefix, "roll_bias", ossimString::toString(m_rollBias), true);
601  kwl.add(prefix, "pitch_bias", ossimString::toString(m_pitchBias), true);
602  kwl.add(prefix, "heading_bias", ossimString::toString(m_headingBias), true);
603  kwl.add(prefix, "fov", ossimString::toString(m_fov) ,true);
604  kwl.add(prefix, "slit_rotation", ossimString::toString(m_slitRot) ,true);
605  kwl.add(prefix, "image_size", theImageSize.toString() ,true);
606 
607  ossim_uint32 i;
608  for (i = 0; i < m_rollPoly.size(); ++i)
609  {
610  ossimString kw = "roll_poly_coeff";
611  kw += ossimString::toString(i);
612  kwl.add(prefix, kw, m_rollPoly[i]);
613  }
614  for (i = 0; i < m_pitchPoly.size(); ++i)
615  {
616  ossimString kw = "pitch_poly_coeff";
617  kw += ossimString::toString(i);
618  kwl.add(prefix, kw, m_pitchPoly[i]);
619  }
620  for (i = 0; i < m_headingPoly.size(); ++i)
621  {
622  ossimString kw = "heading_poly_coeff";
623  kw += ossimString::toString(i);
624  kwl.add(prefix, kw, m_headingPoly[i]);
625  }
626  for (i = 0; i < m_lonPoly.size(); ++i)
627  {
628  ossimString kw = "lon_poly_coeff";
629  kw += ossimString::toString(i);
630  kwl.add(prefix, kw, m_lonPoly[i]);
631  }
632  for (i = 0; i < m_latPoly.size(); ++i)
633  {
634  ossimString kw = "lat_poly_coeff";
635  kw += ossimString::toString(i);
636  kwl.add(prefix, kw, m_latPoly[i]);
637  }
638  for (i = 0; i < m_altPoly.size(); ++i)
639  {
640  ossimString kw = "alt_poly_coeff";
641  kw += ossimString::toString(i);
642  kwl.add(prefix, kw, m_altPoly[i]);
643  }
644  for (i = 0; i < m_scanPoly.size(); ++i)
645  {
646  ossimString kw = "scan_poly_coeff";
647  kw += ossimString::toString(i);
648  kwl.add(prefix, kw, m_scanPoly[i]);
649  }
650 
651  return true;
652 }
653 
654 
655 // Form ARINC 705 standard {heading/pitch/roll} rotation matrix
656 // Rotates local<-body
658  const ossim_float64& p,
659  const ossim_float64& h)const
660 {
661  ossim_float64 cp = cos(p);
662  ossim_float64 sp = sin(p);
663  ossim_float64 ch = cos(h);
664  ossim_float64 sh = sin(h);
665  ossim_float64 cr = cos(r);
666  ossim_float64 sr = sin(r);
667 
668  NEWMAT::Matrix rollM = ossimMatrix3x3::create( 1, 0, 0,
669  0, cr,-sr,
670  0, sr, cr);
671 
672  NEWMAT::Matrix pitchM = ossimMatrix3x3::create( cp, 0, sp,
673  0, 1, 0,
674  -sp, 0, cp);
675 
676  NEWMAT::Matrix hdgM = ossimMatrix3x3::create( ch,-sh, 0,
677  sh, ch, 0,
678  0, 0, 1);
679 
680  NEWMAT::Matrix body2LocalRot = hdgM * pitchM * rollM;
681 
682  return body2LocalRot;
683 }
684 
685 
686 // Form local <- ECF rotation matrix
687 NEWMAT::Matrix ossimAlphaSensor::formLLAmat(const ossim_float64& lat,
688  const ossim_float64& lon,
689  const ossim_float64& az)const
690 {
691  ossim_float64 cp = cos(lat);
692  ossim_float64 sp = sin(lat);
693  ossim_float64 cl = cos(lon);
694  ossim_float64 sl = sin(lon);
695  ossim_float64 ca = cos(az);
696  ossim_float64 sa = sin(az);
697 
698  NEWMAT::Matrix ecf2LocalRot(3,3);
699  ecf2LocalRot(1,1) = -sl*sa - sp*cl*ca;
700  ecf2LocalRot(1,2) = cl*sa - sp*sl*ca;
701  ecf2LocalRot(1,3) = cp*ca;
702  ecf2LocalRot(2,1) = sl*ca - sp*cl*sa;
703  ecf2LocalRot(2,2) = -cl*ca - sp*sl*sa;
704  ecf2LocalRot(2,3) = cp*sa;
705  ecf2LocalRot(3,1) = cp*cl;
706  ecf2LocalRot(3,2) = cp*sl;
707  ecf2LocalRot(3,3) = sp;
708 
709  return ecf2LocalRot;
710 }
ossimString toString() const
Definition: ossimIpt.cpp:139
void setParameterDescription(ossim_uint32 idx, const ossimString &descrption)
virtual void initAdjustableParameters()
void setFov(const double fov)
ossim_uint32 numberOf(const char *str) const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
double lond() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:97
ossimEcefPoint intersectAboveEarthEllipsoid(const double &heightAboveEllipsoid, const ossimDatum *aDatum=ossimDatumFactory::instance() ->wgs84()) const
#define DEG_PER_RAD
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Represents serializable keyword/value map.
NEWMAT::Matrix m_cam2Platform
bool intersectRay(const ossimEcefRay &ray, ossimGpt &gpt, double defaultElevValue=0.0)
METHOD: intersectRay()
const char * find(const char *key) const
void setSlitRot(const double slitRot)
double y
Definition: ossimDpt.h:165
void setHeadingBias(const double headingBias)
std::vector< ossim_float64 > m_rollPoly
ossim_float64 m_slitRot
static ossimString toString(bool aValue)
Numeric to string methods.
NEWMAT::Matrix formHPRmat(const ossim_float64 &roll, const ossim_float64 &pitch, const ossim_float64 &heading) const
void setPitchPoly(const std::vector< ossim_float64 > pitchPoly)
static ossimElevManager * instance()
METHOD: instance() Implements singelton pattern.
void setAltPoly(const std::vector< ossim_float64 > altPoly)
std::vector< ossim_float64 > m_latPoly
std::vector< ossim_float64 > m_altPoly
double latd() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:87
void setScanPoly(const std::vector< ossim_float64 > scanPoly)
virtual ossimObject * dup() const
ossimEcefPoint getCameraPosition(const ossim_float64 &line) const
void setHeadingPoly(const std::vector< ossim_float64 > headingPoly)
std::vector< ossim_float64 > m_lonPoly
double ossim_float64
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
void setLatPoly(const std::vector< ossim_float64 > latPoly)
ossim_float64 m_pitchBias
RTTI_DEF1(ossimAlphaSensor, "ossimAlphaSensor", ossimSensorModel)
double degreesToRadians(double x)
Definition: ossimCommon.h:258
NEWMAT::Matrix formLLAmat(const ossim_float64 &lat, const ossim_float64 &lon, const ossim_float64 &az) const
ossim_float64 m_fov
double lonr() const
Returns the longitude in radian measure.
Definition: ossimGpt.h:76
unsigned int ossim_uint32
double height() const
Definition: ossimGpt.h:107
double toDouble() const
ossim_float64 toFloat64() const
NEWMAT::Matrix getPlatform2LocalRot(const ossim_float64 &line) const
void setParameterUnit(ossim_uint32 idx, ossimUnitType unit)
static NEWMAT::Matrix create()
virtual void imagingRay(const ossimDpt &image_point, ossimEcefRay &image_ray) const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
bool hasNans() const
Definition: ossimDrect.h:396
bool hasNans() const
Definition: ossimDpt.h:67
void setPitchBias(const double pitchBias)
void setLonPoly(const std::vector< ossim_float64 > lonPoly)
ossimDrect theImageClipRect
void setRollBias(const double rollBias)
ossimDpt midPoint() const
Definition: ossimDrect.h:817
virtual void setAdjustableParameter(ossim_uint32 idx, double value, bool notify=false)
ossim_int32 y
Definition: ossimIpt.h:142
std::vector< ossim_float64 > m_headingPoly
std::vector< ossim_float64 > m_pitchPoly
ossim_float64 evalPoly(const std::vector< ossim_float64 > &polyCoef, const ossim_float64 &line) const
double x
Definition: ossimDpt.h:164
ossim_float64 m_headingBias
void resizeAdjustableParameterArray(ossim_uint32 numberOfParameters)
virtual void updateModel()
double latr() const
latr().
Definition: ossimGpt.h:66
ossim_float64 m_rollBias
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
bool empty() const
Definition: ossimString.h:411
void getPositionOrientation(const ossim_float64 &line, ossimEcefPoint &pos, NEWMAT::Matrix &cam2EcfRot) const
void setRollPoly(const std::vector< ossim_float64 > rollPoly)
ossimDpt metersPerDegree() const
Definition: ossimGpt.cpp:498
ossim_int32 x
Definition: ossimIpt.h:141
virtual void lineSampToWorld(const ossimDpt &image_point, ossimGpt &worldPoint) const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
std::vector< ossim_float64 > m_scanPoly
virtual void lineSampleHeightToWorld(const ossimDpt &image_point, const double &heightEllipsoid, ossimGpt &worldPoint) const
ossim_float64 m_adjustedFocalLength
ossim_float64 m_focalLength
void setParameterSigma(ossim_uint32 idx, double value, bool notify=false)
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
void makeNan()
Definition: ossimDpt.h:65