OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimSonomaSensor.cpp
Go to the documentation of this file.
1 //*******************************************************************
2 //
3 // License: See top level LICENSE.txt file.
4 //
5 // Author: Garrett Potts
6 //
7 // Description:
8 //
9 // Sonoma
10 //*******************************************************************
11 // $Id$
15 #include <ossim/base/ossimTrace.h>
16 #include <ossim/base/ossimLsrRay.h>
24 #include <ossim/matrix/newmatio.h>
25 
26 static ossimTrace traceDebug("ossimSonomaSensor:debug");
27 
28 RTTI_DEF1(ossimSonomaSensor, "ossimSonomaSensor", ossimSensorModel);
29 
31 {
33  theSensorID = "Sonoma";
37 }
38 
39 void ossimSonomaSensor::imagingRay(const ossimDpt& /* image_point */,
40  ossimEcefRay& /* image_ray */) const
41 {
42 #if 0
43  ossimColumnVector3d v(image_point.x,image_point.y,1.0);
44  ossimColumnVector3d v2(0,0,0);
45  v2 = m_compositeMatrix*v2;
47  ossimEcefVector vec = ossimEcefPoint(v[0], v[1], v[2]) - ossimEcefPoint(v2[0], v2[1], v2[2]); //ossimEcefPoint(v[0], v[1], v[2]) - m_ecefPlatformPosition;
48  vec.normalize();
49  image_ray.setOrigin(v2);
50  image_ray.setDirection(vec);
51 
52  std::cout << "image ====== " << image_point << std::endl;
53  std::cout << "V2 ====== " << v2 << std::endl;
54  std::cout << "v ====== " << v << std::endl;
55  std::cout << "platform ====== " << m_ecefPlatformPosition << std::endl;
56 #endif
57 #if 0
58  ossimDpt f1 ((image_point) - theRefImgPt);
59  f1.x *= m_pixelSize.x;
60  f1.y *= -m_pixelSize.y;
61  ossimDpt film (f1 - m_principalPoint);
62 
63 
64  ossimColumnVector3d cam_ray_dir (film.x,
65  film.y,
67 
68  ossimEcefVector ecf_ray_dir (m_compositeMatrix*m_mount*cam_ray_dir);
69  ecf_ray_dir = ecf_ray_dir*(1.0/ecf_ray_dir.magnitude());
70 
71  image_ray.setOrigin(m_ecefPlatformPosition);
72  image_ray.setDirection(ecf_ray_dir);
73 #endif
74 }
75 
77  const double& heightEllipsoid,
78  ossimGpt& worldPoint) const
79 {
80  if (!insideImage(image_point))
81  {
82  worldPoint.makeNan();
83  worldPoint = extrapolate(image_point, heightEllipsoid);
84  }
85  else
86  {
89  ossimDpt3d rayOrigin(origin[0], origin[1], origin[2]);
90  ossimDpt3d rayDirection(v[0]-origin[0],
91  v[1]-origin[1],
92  v[2]-origin[2]);
93  rayDirection = rayDirection/rayDirection.length();
94  ossimDpt3d result;
95  double h = heightEllipsoid;
96 
97  if(ossim::isnan(heightEllipsoid))
98  {
99  h = 0.0;
100  }
101 
102  intersectRayWithHeight(*(m_utmProjection.get()), result, rayOrigin, rayDirection, h);
103 
104  worldPoint = m_utmProjection->inverse(ossimDpt(result.x, result.y));
105  worldPoint.height(result.z);
106  //***
107  // First establish imaging ray from image point:
108  //***
109 // ossimEcefRay ray;
110 // imagingRay(image_point, ray);
111 // ossimEcefPoint Pecf (ray.intersectAboveEarthEllipsoid(heightEllipsoid));
112 // worldPoint = ossimGpt(Pecf);
113  }
114 
115 }
117  ossimGpt& gpt) const
118 {
119  if(image_point.hasNans())
120  {
121  gpt.makeNan();
122  return;
123  }
124 
127  ossimDpt3d rayOrigin(origin[0], origin[1], origin[2]);
128  ossimDpt3d rayDirection(v[0]-origin[0],
129  v[1]-origin[1],
130  v[2]-origin[2]);
131  rayDirection = rayDirection/rayDirection.length();
132  ossimDpt3d result;
133  // ossim_uint32 iterIdx = 0;
134  intersectRay(*(m_utmProjection.get()), result, rayOrigin, rayDirection);
135  gpt = m_utmProjection->inverse(ossimDpt(result.x, result.y));
136  gpt.height(result.z);
137 
138 #if 0
139  //***
140  // Determine imaging ray and invoke elevation source object's services to
141  // intersect ray with terrain model:
142  //***
143  ossimEcefRay ray;
144  imagingRay(image_point, ray);
146 
147  if (traceDebug())
148  {
149  ossimNotify(ossimNotifyLevel_DEBUG) << "image_point = " << image_point << std::endl;
150  ossimNotify(ossimNotifyLevel_DEBUG) << "ray = " << ray << std::endl;
151  ossimNotify(ossimNotifyLevel_DEBUG) << "gpt = " << gpt << std::endl;
152  }
153 #endif
154  if (traceDebug()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimSensorModel::lineSampleToWorld: returning..." << std::endl;
155  return;
156 
157 }
158 
160 {
163  double r = ossim::degreesToRadians(m_roll);
164  double p = ossim::degreesToRadians(-(90+m_pitch));
166 
167  NEWMAT::Matrix rollM = ossimMatrix4x4(cos(r), -sin(r), 0.0, 0.0,
168  sin(r), cos(r), 0.0, 0.0,
169  0.0, 0.0, 1.0, 0.0,
170  0.0, 0.0, 0.0, 1.0).getData();
171  NEWMAT::Matrix pitchM = ossimMatrix4x4(1.0, 0.0, 0.0, 0.0,
172  0.0, cos(p), -sin(p), 0.0,
173  0.0, sin(p), cos(p), 0.0,
174  0.0, 0.0, 0.0, 1.0).getData();
175  NEWMAT::Matrix headingM = ossimMatrix4x4(cos(y), -sin(y), 0.0, 0.0,
176  sin(y), cos(y), 0.0, 0.0,
177  0, 0, 1.0, 0.0,
178  0.0, 0.0, 0.0, 1.0).getData();
179 
184  0.0, 0.0,-1.0);
186 
189 
190 #if 0
193 
194  double r = ossim::degreesToRadians(m_roll);
195  double p = ossim::degreesToRadians(-(90+m_pitch));
197 
198  NEWMAT::Matrix rollM = ossimMatrix4x4(cos(r), -sin(r), 0.0, 0.0,
199  sin(r), cos(r), 0.0, 0.0,
200  0.0, 0.0, 1.0, 0.0,
201  0.0, 0.0, 0.0, 1.0).getData();
202  NEWMAT::Matrix pitchM = ossimMatrix4x4(1.0, 0.0, 0.0, 0.0,
203  0.0, cos(p), -sin(p), 0.0,
204  0.0, sin(p), cos(p), 0.0,
205  0.0, 0.0, 0.0, 1.0).getData();
206  NEWMAT::Matrix headingM = ossimMatrix4x4(cos(y), -sin(y), 0.0, 0.0,
207  sin(y), cos(y), 0.0, 0.0,
208  0, 0, 1.0, 0.0,
209  0.0, 0.0, 0.0, 1.0).getData();
210  ossimLsrSpace lsrSpace(m_ecefPlatformPosition);//,m_heading+computeParameterOffset(4));
211 
212 
213  NEWMAT::Matrix platformLsrMatrix4x4 = ossimMatrix4x4::createIdentity();
214 #endif
215 #if 0
216  // now lets create a UTM axis by creating a derivative at the center
217  // by shift over a few pixels and subtracting
218  //
219 
221  m_utmProjection.setHemisphere(m_platformPositionEllipsoid.latd()>=0.0?'N':'S');
222  m_utmProjection.setMetersPerPixel(ossimDpt(1.0,1.0));
224  ossimDpt rPt = midPt + ossimDpt(10, 0.0);
225  ossimDpt uPt = midPt + ossimDpt(0.0, 10.0);
226  ossimGpt wMidPt = m_utmProjection.inverse(midPt);
227  ossimGpt wRPt = m_utmProjection.inverse(rPt);
228  ossimGpt wUPt = m_utmProjection.inverse(uPt);
229 
230  ossimEcefPoint ecefMidPt = wMidPt;
231  ossimEcefPoint ecefRPt = wRPt;
232  ossimEcefPoint ecefUPt = wUPt;
233 
234  ossimEcefVector east = ecefRPt-ecefMidPt;
235  ossimEcefVector north = ecefUPt-ecefMidPt;
236  east.normalize();
237  north.normalize();
238 
239  // now use the lsr space constructors to construct an orthogonal set of axes
240  //
242  east,
243  north,
244  0);
245 #endif
246 
247 
248 #if 0
249  NEWMAT::Matrix platformLsrMatrix = lsrSpace.ecefToLsrRotMatrix();
250 
251  platformLsrMatrix4x4[0][0] = platformLsrMatrix[0][0];
252  platformLsrMatrix4x4[1][0] = platformLsrMatrix[1][0];
253  platformLsrMatrix4x4[2][0] = platformLsrMatrix[2][0];
254  platformLsrMatrix4x4[0][1] = platformLsrMatrix[0][1];
255  platformLsrMatrix4x4[1][1] = platformLsrMatrix[1][1];
256  platformLsrMatrix4x4[2][1] = platformLsrMatrix[2][1];
257  platformLsrMatrix4x4[0][2] = platformLsrMatrix[0][2];
258  platformLsrMatrix4x4[1][2] = platformLsrMatrix[1][2];
259  platformLsrMatrix4x4[2][2] = platformLsrMatrix[2][2];
260 
261  m_compositeMatrix = (rollM*pitchM*headingM*platformLsrMatrix4x4).i();
263 // m_compositeMatrix = ((rollM*pitchM*headingM)*platformLsrMatrix4x4).t()*m_mount;
264 // m_compositeMatrixInverse = m_compositeMatrix.i();
265 #endif
266 
267 #if 0
268  platformLsrMatrix4x4[0][0] = platformLsrMatrix[0][0];
269  platformLsrMatrix4x4[1][0] = platformLsrMatrix[1][0];
270  platformLsrMatrix4x4[2][0] = platformLsrMatrix[2][0];
271  platformLsrMatrix4x4[0][1] = platformLsrMatrix[0][1];
272  platformLsrMatrix4x4[1][1] = platformLsrMatrix[1][1];
273  platformLsrMatrix4x4[2][1] = platformLsrMatrix[2][1];
274  platformLsrMatrix4x4[0][2] = platformLsrMatrix[0][2];
275  platformLsrMatrix4x4[1][2] = platformLsrMatrix[1][2];
276  platformLsrMatrix4x4[2][2] = platformLsrMatrix[2][2];
280  m_compositeMatrix = m.i();
281  NEWMAT::Matrix pixelToCamera = NEWMAT::Matrix(3, 3);
282  double f = m_focalLength/m_pixelSize.x;
283  double w = theImageClipRect.width();
284  double h = theImageClipRect.height();
285  pixelToCamera << f << 0 << (-f*w/2.0) << 0 << -f << (f*h/2.0) << 0 << 0 <<-1;
286  pixelToCamera = pixelToCamera.t();
287  m_pixelToCamera = pixelToCamera;
288 #endif
290 #if 0
294  lineSampleToWorld(theImageClipRect.ul()+ossimDpt(-w2, -h2), gpt);
295 // std::cout << "gpt1 = " << gpt << std::endl;
296  theBoundGndPolygon[0] = gpt;
298 // std::cout << "gpt2 = " << gpt << std::endl;
299  theBoundGndPolygon[1] = gpt;
301  theBoundGndPolygon[2] = gpt;
302 // std::cout << "gpt3 = " << gpt << std::endl;
304  theBoundGndPolygon[3] = gpt;
305 #endif
306 // std::cout << "gpt4 = " << gpt << std::endl;
308 
309 
310 // ossimColumnVector3d v(0.0,0.0,1.0);
311 // v = m*(m_mountInverse*(m_pixelToCamera*v));
312 // ossimEcefVector vec = ossimEcefPoint(v[0], v[1], v[2]) - m_ecefPlatformPosition;
313 // vec.normalize();
314 
315 // ossimEcefRay image_ray;
316 
317 // image_ray.setOrigin(m_ecefPlatformPosition);
318 // image_ray.setDirection(vec);
319 // ossimEcefPoint Pecf (image_ray.intersectAboveEarthEllipsoid(0.0));
320 
321  computeGsd();
322 }
323 
325 {
327 
328  setAdjustableParameter(0, 0.0);
329  setParameterDescription(0, "x_offset");
330  setParameterUnit(0, "meters");
331 
332  setAdjustableParameter(1, 0.0);
333  setParameterDescription(1, "y_offset");
334  setParameterUnit(1, "meters");
335 
336  setAdjustableParameter(2, 0.0);
337  setParameterDescription(2, "roll");
338  setParameterUnit(2, "degrees");
339 
340  setAdjustableParameter(3, 0.0);
341  setParameterDescription(3, "pitch");
342  setParameterUnit(3, "degrees");
343 
344  setAdjustableParameter(4, 0.0);
345  setParameterDescription(4, "heading");
346  setParameterUnit(4, "degrees");
347 
348  setAdjustableParameter(5, 0.0);
349  setParameterDescription(5, "Altitude delta");
350  setParameterUnit(5, "meters");
351 
352  setAdjustableParameter(6, 0.0);
353  setParameterDescription(6, "focal length delta");
354  setParameterUnit(6, "meters");
355 
356  setParameterSigma(0, 10);
357  setParameterSigma(1, 10);
358  setParameterSigma(2, 1);
359  setParameterSigma(3, 1);
360  setParameterSigma(4, 5);
361  setParameterSigma(5, 100);
362  setParameterSigma(6, 50);
363 
364 }
365 
366 bool ossimSonomaSensor::loadState(const ossimKeywordlist& kwl, const char* prefix)
367 {
368  theGSD.makeNan();
370  ossimSensorModel::loadState(kwl, prefix);
372  {
374  }
375  if(theRefImgPt.hasNans())
376  {
378  }
379  ossimString mount = kwl.find(prefix, "mount");
380  ossimString pixel_size = kwl.find(prefix, "pixel_size");
381  ossimString principal_point = kwl.find(prefix, "principal_point");
382  ossimString focal_length = kwl.find(prefix, "focal_length");
383  ossimString roll;
384  ossimString pitch;
385  ossimString heading;
386  ossimString platform_position;
387  m_roll = 0;
388  m_pitch = 0;
389  m_heading = 0;
390  roll = kwl.find(prefix, "roll");
391  pitch = kwl.find(prefix, "pitch");
392  heading = kwl.find(prefix, "heading");
393  platform_position = kwl.find(prefix, "platform_position");
394  bool result = (!pixel_size.empty()&&
395  !principal_point.empty()&&
396  !focal_length.empty()&&
397  !platform_position.empty());
398  if(!mount.empty())
399  {
400  mount = mount.trim();
401  std::vector<ossimString> values;
402 
403  mount.split(values, " ");
404  bool valid = true;
405  if(values.size() == 9)
406  {
408  }
409  else if((values.size() == 16) ||
410  (values.size() == 12))
411  {
413  }
414  else
415  {
418  valid = false;
419  }
420 
421  if(valid)
422  {
423  ossim_uint32 idx = 0;
424  ossim_int32 row = -1;
425  for(idx = 0; idx < values.size(); ++idx)
426  {
427  if(idx%4 == 0) ++row;
428  m_mount[row][idx%4] = values[idx].toDouble();
429  }
430  m_mountInverse = m_mount.i();
431  }
432  }
433  if(!focal_length.empty())
434  {
435  m_focalLength = focal_length.toDouble();
436  }
437  if(!pixel_size.empty())
438  {
439  m_pixelSize.toPoint(pixel_size);
440  }
441  if(!roll.empty())
442  {
443  m_roll = roll.toDouble();
444  }
445  if(!pitch.empty())
446  {
447  m_pitch = pitch.toDouble();
448  }
449  if(!heading.empty())
450  {
451  m_heading = heading.toDouble();
452  }
453  if(!principal_point.empty())
454  {
455  m_principalPoint.toPoint(principal_point);
456  }
457  if(!platform_position.empty())
458  {
459  m_platformPosition.toPoint(platform_position);
462  if(!ossim::isnan(offset))
463  {
465  }
466  }
469 
470  updateModel();
471 
472  if(theGSD.isNan())
473  {
474  try
475  {
476  // This will set theGSD and theMeanGSD. Method throws ossimException.
477  computeGsd();
478  }
479  catch (const ossimException& e)
480  {
481  if (traceDebug())
482  {
484  << "ossimSonomaSensor::loadState Caught Exception:\n"
485  << e.what() << std::endl;
486  }
487  }
488  }
489 
490  return result;
491 }
492 
493 bool ossimSonomaSensor::saveState(ossimKeywordlist& kwl, const char* prefix)const
494 {
495  ossimSensorModel::saveState(kwl, prefix);
496 
497  ossimString mount;
498  ossim_int32 rowIdx = 0;
499  ossim_int32 colIdx = 0;
500 
501  for(rowIdx = 0; rowIdx < m_mount.Nrows(); ++rowIdx)
502  {
503  for(colIdx = 0; colIdx < m_mount.Ncols(); ++ colIdx)
504  {
505  mount += (ossimString::toString(m_mount[rowIdx][colIdx]) + " ");
506  }
507  }
508 
509  kwl.add(prefix, "mount", mount.trim(), true);
510  kwl.add(prefix, "roll", ossimString::toString(m_roll), true);
511  kwl.add(prefix, "pitch", ossimString::toString(m_pitch), true);
512  kwl.add(prefix, "heading", ossimString::toString(m_heading), true);
513  kwl.add(prefix, "principal_point", m_principalPoint.toString(), true);
514  kwl.add(prefix, "pixel_size", m_pixelSize.toString(), true);
515  kwl.add(prefix, "platform_position",m_platformPosition.toString() ,true);
516  kwl.add(prefix, "focal_length", ossimString::toString(m_focalLength) ,true);
517 
518  return true;
519 }
520 
521 
523 {
524  ossimPlane plane(0.0, 0.0, 1.0, 0.0);
525 
526  static const double CONVERGENCE_THRESHOLD = 0.0001; // meters
527  static const int MAX_NUM_ITERATIONS = 50;
528 
529  double h; // height above ellipsoid
530  bool intersected;
531  ossimDpt3d prev_intersect_pt (origin);
532  ossimDpt3d new_intersect_pt;
533  double distance;
534  bool done = false;
535  int iteration_count = 0;
536 
537  if(dir.hasNans())
538  {
539  result.makeNan();
540  return false;
541  }
542 
543  ossimGpt gpt = proj.inverse(ossimDpt(origin.x, origin.y));
544  //
545  // Loop to iterate on ray intersection with variable elevation surface:
546  //
547  do
548  {
549  //
550  // Intersect ray with ellipsoid inflated by h_ellips:
551  //
553 
554  if ( ossim::isnan(h) ) h = 0.0;
555  plane.setOffset(-h);
556  intersected = plane.intersect(new_intersect_pt, origin, dir);
557  if (!intersected)
558  {
559  result.makeNan();
560  done = true;
561  }
562  else
563  {
564  //
565  // Assign the ground point to the latest iteration's intersection
566  // point:
567  //
568  gpt = proj.inverse(ossimDpt(new_intersect_pt.x, new_intersect_pt.y));
569  gpt.height(new_intersect_pt.z);
570  result = new_intersect_pt;
571  //
572  // Determine if convergence achieved:
573  //
574  distance = (new_intersect_pt - prev_intersect_pt).length();
575  if (distance < CONVERGENCE_THRESHOLD)
576  {
577  done = true;
578  }
579  else
580  {
581  prev_intersect_pt = new_intersect_pt;
582  }
583  }
584 
585  iteration_count++;
586 
587  } while ((!done) && (iteration_count < MAX_NUM_ITERATIONS));
588 
589  return intersected;
590 }
591 
592 bool ossimSonomaSensor::intersectRayWithHeight(const ossimMapProjection& /* proj */, ossimDpt3d& result, ossimDpt3d& origin, ossimDpt3d& dir, double h)const
593 {
594  ossimPlane plane(0.0, 0.0, 1.0, -h);
595  bool intersected = plane.intersect(result, origin, dir);
596 
597 
598  return intersected;
599 }
600 
ossimString theSensorID
virtual void initAdjustableParameters()
ground to image faster (you don&#39;t need DEM) //TBC
void setParameterDescription(ossim_uint32 idx, const ossimString &descrption)
virtual ossimGpt inverse(const ossimDpt &eastingNorthing) const
Will take a point in meters and convert it to ground.
bool intersectRay(const ossimMapProjection &proj, ossimDpt3d &result, ossimDpt3d &origin, ossimDpt3d &dir) const
const NEWMAT::Matrix & getData() const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
ossim_float64 width() const
Definition: ossimDrect.h:522
static NEWMAT::Matrix createTranslationMatrix(double x, double y, double z)
Represents serializable keyword/value map.
ossim_uint32 y
NEWMAT::Matrix m_pixelToCamera
bool intersectRay(const ossimEcefRay &ray, ossimGpt &gpt, double defaultElevValue=0.0)
METHOD: intersectRay()
void lineSampleToWorld(const ossimDpt &image_point, ossimGpt &gpt) const
const char * find(const char *key) const
const ossimDpt & ul() const
Definition: ossimDrect.h:339
double y
Definition: ossimDpt.h:165
void makeNan()
Definition: ossimGpt.h:130
static ossimString toString(bool aValue)
Numeric to string methods.
double x() const
void split(std::vector< ossimString > &result, const ossimString &separatorList, bool skipBlankFields=false) const
Splits this string into a vector of strings (fields) using the delimiter list specified.
double magnitude() const
ossimEcefPoint m_ecefPlatformPosition
static ossimElevManager * instance()
METHOD: instance() Implements singelton pattern.
bool isNan() const
Definition: ossimDpt.h:72
virtual void imagingRay(const ossimDpt &image_point, ossimEcefRay &image_ray) const
double latd() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:87
virtual ossimGpt inverse(const ossimDpt &projectedPoint) const =0
Will take a point in meters and convert it to ground.
virtual ossimDpt forward(const ossimGpt &latLon) const
All map projections will convert the world coordinate to an easting northing (Meters).
NEWMAT::Matrix m_mount
double ossim_float64
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
bool intersect(ossimDpt3d &result, ossimDpt3d &origin, ossimDpt3d &ray)
bool hasNans() const
Definition: ossimDpt3d.h:63
NEWMAT::Matrix m_compositeMatrix
double z
Definition: ossimDpt3d.h:145
void computeGsd()
This method computes the ground sample distance(gsd) and sets class attributes theGSD and theMeanGSD ...
virtual void lineSampleHeightToWorld(const ossimDpt &image_point, const double &heightEllipsoid, ossimGpt &worldPoint) const
void toPoint(const std::string &s)
Initializes this point from string.
Definition: ossimGpt.cpp:116
double degreesToRadians(double x)
Definition: ossimCommon.h:258
virtual const char * what() const
Returns the error message.
virtual double getHeightAboveEllipsoid(const ossimGpt &gpt)
static NEWMAT::Matrix createRotationXMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
static NEWMAT::Matrix createRotationZMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
NEWMAT::Matrix m_compositeMatrixInverse
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
unsigned int ossim_uint32
ossimString trim(const ossimString &valueToTrim=ossimString(" \\)) const
this will strip lead and trailing character passed in.
void toPoint(const std::string &s)
Initializes this point from string.
Definition: ossimDpt.cpp:192
ossimPolygon theBoundGndPolygon
static ossimGeoidManager * instance()
Implements singelton pattern:
double height() const
Definition: ossimGpt.h:107
ossimGpt m_platformPositionEllipsoid
double toDouble() const
void makeNan()
Definition: ossimDpt3d.h:61
void setParameterUnit(ossim_uint32 idx, ossimUnitType unit)
static NEWMAT::Matrix create()
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
double length() const
Definition: ossimDpt3d.h:71
static ossim_int32 computeZone(const ossimGpt &gpt)
bool hasNans() const
Definition: ossimDpt.h:67
ossim_float64 height() const
Definition: ossimDrect.h:517
virtual ossimDpt extrapolate(const ossimGpt &gp) const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
RTTI_DEF1(ossimSonomaSensor, "ossimSonomaSensor", ossimSensorModel)
void setZone(const ossimGpt &ground)
ossimRefPtr< ossimUtmProjection > m_utmProjection
NEWMAT::Matrix ecefToLsrRotMatrix() const
bool intersectRayWithHeight(const ossimMapProjection &proj, ossimDpt3d &result, ossimDpt3d &origin, ossimDpt3d &dir, double h) const
virtual void updateModel()
ossimDrect theImageClipRect
ossimString toString(ossim_uint32 precision=15) const
Definition: ossimDpt.cpp:160
static NEWMAT::Matrix createIdentity()
double y() const
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
NEWMAT::Matrix m_mountInverse
static NEWMAT::Matrix createIdentity()
const ossimDpt & ur() const
Definition: ossimDrect.h:340
double x
Definition: ossimDpt.h:164
double x
Definition: ossimDpt3d.h:143
void resizeAdjustableParameterArray(ossim_uint32 numberOfParameters)
bool empty() const
Definition: ossimString.h:411
virtual ossimGpt origin() const
virtual bool insideImage(const ossimDpt &p) const
ossim_int32 x
Definition: ossimIpt.h:141
const ossimDpt & ll() const
Definition: ossimDrect.h:342
ossimString toString(ossim_uint32 precision=15) const
Definition: ossimGpt.cpp:78
void resize(ossim_uint32 newSize)
double y
Definition: ossimDpt3d.h:144
float distance(double lat1, double lon1, double lat2, double lon2, int units)
virtual double offsetFromEllipsoid(const ossimGpt &gpt)
const ossimDpt & lr() const
Definition: ossimDrect.h:341
void setHemisphere(const ossimGpt &ground)
double z() const
void setParameterSigma(ossim_uint32 idx, double value, bool notify=false)
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
void makeNan()
Definition: ossimDpt.h:65
int ossim_int32
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.
Definition: ossimCommon.h:91