OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ossimSonomaSensor Class Reference

#include <ossimSonomaSensor.h>

Inheritance diagram for ossimSonomaSensor:
ossimSensorModel ossimProjection ossimOptimizableProjection ossimAdjustableParameterInterface ossimObject ossimErrorStatusInterface ossimReferenced

Classes

class  ossimPlane
 

Public Member Functions

 ossimSonomaSensor ()
 
 ossimSonomaSensor (const ossimSonomaSensor &src)
 
virtual ossimObjectdup () const
 
virtual void imagingRay (const ossimDpt &image_point, ossimEcefRay &image_ray) const
 
virtual void lineSampleHeightToWorld (const ossimDpt &image_point, const double &heightEllipsoid, ossimGpt &worldPoint) const
 
void lineSampleToWorld (const ossimDpt &image_point, ossimGpt &gpt) const
 
virtual void updateModel ()
 
void setRollPitchHeading (double r, double p, double y)
 
void setFocalLength (double value)
 
void setPlatformPosition (const ossimGpt &value)
 
void setPrincipalPoint (const ossimDpt &value)
 
void setPixelSize (const ossimDpt &value)
 
virtual bool useForward () const
 
virtual void initAdjustableParameters ()
 ground to image faster (you don't need DEM) //TBC More...
 
virtual bool loadState (const ossimKeywordlist &kwl, const char *prefix=0)
 
virtual bool saveState (ossimKeywordlist &kwl, const char *prefix=0) const
 
- Public Member Functions inherited from ossimSensorModel
 ossimSensorModel ()
 
 ossimSensorModel (const ossimSensorModel &copy_this)
 
 ossimSensorModel (const ossimKeywordlist &geom_kwl)
 
const ossimSensorModeloperator= (const ossimSensorModel &rhs)
 assignment operator More...
 
virtual ossimObjectgetBaseObject ()
 
virtual const ossimObjectgetBaseObject () const
 
virtual ossimGpt origin () const
 
virtual ossimDpt getMetersPerPixel () const
 
virtual const double & getNominalPosError () const
 Returns the estimated Absolute horizontal position error (CE90) of the sensor model. More...
 
virtual const double & getRelativePosError () const
 Returns the estimated RELATIVE horizontal position error (CE90) of the sensor model. More...
 
virtual void setNominalPosError (const double &ce90)
 Assigns the absolute image position error uncertainty (abs CE90) More...
 
virtual void setRelativePosError (const double &ce90)
 Assigns the relative image position error uncertainty (rel CE90) More...
 
virtual void worldToLineSample (const ossimGpt &world_point, ossimDpt &image_point) const
 
virtual std::ostream & print (std::ostream &out) const
 
void setRefImgPt (const ossimDpt &pt)
 Sets the center line sampe of the image. More...
 
void setRefGndPt (const ossimGpt &pt)
 Sets the center latitude, longitude, height of the image. More...
 
void setImageRect (const ossimDrect &imageRect)
 
void setGroundRect (const ossimGpt &ul, const ossimGpt &ur, const ossimGpt &lr, const ossimGpt &ll)
 
ossimDpt imageSize () const
 
void setImageSize (const ossimDpt &size)
 
virtual void adjustableParametersChanged ()
 
virtual bool insideImage (const ossimDpt &p) const
 
virtual bool operator== (const ossimProjection &proj) const
 
const ossimStringgetImageID () const
 Access methods: More...
 
const ossimDrectgetImageClipRect () const
 
virtual ossim_uint32 degreesOfFreedom () const
 
virtual bool needsInitialState () const
 needsInitialState() More...
 
virtual double optimizeFit (const ossimTieGptSet &tieSet, double *targetVariance=0)
 
virtual ossimDpt getForwardDeriv (int parmIdx, const ossimGpt &gpos, double hdelta=1e-11)
 
virtual ossimGpt getInverseDeriv (int parmIdx, const ossimDpt &ipos, double hdelta=1e-11)
 
virtual ossimSensorModel::CovMatStatus getObsCovMat (const ossimDpt &ipos, NEWMAT::SymmetricMatrix &Cov, const ossim_float64 defPointingSigma=0.5) const
 Gives 2X2 covariance matrix of observations. More...
 
virtual bool isAffectedByElevation () const
 Implementation of pure virtual ossimProjection::isAffectedByElevation method. More...
 
void computeGsd ()
 This method computes the ground sample distance(gsd) and sets class attributes theGSD and theMeanGSD by doing a lineSampleHeightToWorld on four points and calculating the distance from them. More...
 
virtual bool getImageGeometry (const ossimString &, const ossimString &, ossimKeywordlist &) const
 Extracts geometry info from a non-ossim key,value pair to an ossim keyword list. More...
 
- Public Member Functions inherited from ossimProjection
 ossimProjection ()
 
virtual ~ossimProjection ()
 
virtual ossimDpt forward (const ossimGpt &wp) const
 
virtual ossimGpt inverse (const ossimDpt &pp) const
 
virtual void getRoundTripError (const ossimDpt &imagePoint, ossimDpt &errorResult) const
 
virtual void getRoundTripError (const ossimGpt &groundPoint, ossimDpt &errorResult) const
 
virtual void getGroundClipPoints (ossimGeoPolygon &gpts) const
 
virtual bool isEqualTo (const ossimObject &obj, ossimCompareType compareType=OSSIM_COMPARE_FULL) const
 
virtual bool operator!= (const ossimProjection &projection) const
 
- Public Member Functions inherited from ossimObject
 ossimObject ()
 
virtual ~ossimObject ()
 
virtual ossimString getShortName () const
 
virtual ossimString getLongName () const
 
virtual ossimString getDescription () const
 
virtual ossimString getClassName () const
 
virtual RTTItypeid getType () const
 
virtual bool canCastTo (ossimObject *obj) const
 
virtual bool canCastTo (const RTTItypeid &id) const
 
virtual bool canCastTo (const ossimString &parentClassName) const
 
virtual void accept (ossimVisitor &visitor)
 
- Public Member Functions inherited from ossimReferenced
 ossimReferenced ()
 
 ossimReferenced (const ossimReferenced &)
 
ossimReferencedoperator= (const ossimReferenced &)
 
void ref () const
 increment the reference count by one, indicating that this object has another pointer which is referencing it. More...
 
void unref () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
void unref_nodelete () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
int referenceCount () const
 
- Public Member Functions inherited from ossimErrorStatusInterface
 ossimErrorStatusInterface ()
 
virtual ~ossimErrorStatusInterface ()
 
virtual ossimErrorCode getErrorStatus () const
 
virtual ossimString getErrorStatusString () const
 
virtual void setErrorStatus (ossimErrorCode error_status) const
 
virtual void setErrorStatus () const
 
virtual void clearErrorStatus () const
 
bool hasError () const
 
- Public Member Functions inherited from ossimOptimizableProjection
 ossimOptimizableProjection ()
 
 ossimOptimizableProjection (const ossimOptimizableProjection &source)
 
virtual ~ossimOptimizableProjection ()
 
virtual ossimOptimizableProjectionoperator= (const ossimOptimizableProjection &source)
 
virtual bool setupOptimizer (const ossimString &setup)
 setupFromString() Derived classes should implement as needed. Initialize parameters needed for optimizeFit and degreesOfFreedom More...
 
- Public Member Functions inherited from ossimAdjustableParameterInterface
 ossimAdjustableParameterInterface ()
 
 ossimAdjustableParameterInterface (const ossimAdjustableParameterInterface &rhs)
 
virtual ~ossimAdjustableParameterInterface ()
 
void newAdjustment (ossim_uint32 numberOfParameters=0)
 
void setAdjustmentDescription (const ossimString &description)
 
ossimString getAdjustmentDescription () const
 
ossimString getAdjustmentDescription (ossim_uint32 adjustmentIdx) const
 Returns adjustmentDescription of specific adjustmentInfo. More...
 
void setCurrentAdjustment (ossim_uint32 adjustmentIndex, bool notify=false)
 
bool setCurrentAdjustment (const ossimString &description, bool notify=false)
 Sets the current adjustment to the adjustment with a matching description. More...
 
void eraseAdjustment (bool notify)
 
void eraseAdjustment (ossim_uint32 idx, bool notify)
 
void resetAdjustableParameters (bool notify=false)
 
void copyAdjustment (ossim_uint32 idx, bool notify)
 
void copyAdjustment (bool notify=false)
 
void keepAdjustment (ossim_uint32 idx, bool createCopy)
 
virtual void keepAdjustment (bool createCopy=true)
 
const ossimAdjustableParameterInterfaceoperator= (const ossimAdjustableParameterInterface &rhs)
 
void removeAllAdjustments ()
 
ossim_uint32 getNumberOfAdjustableParameters () const
 
double getAdjustableParameter (ossim_uint32 idx) const
 
virtual void setAdjustableParameter (ossim_uint32 idx, double value, bool notify=false)
 
virtual void setAdjustableParameter (ossim_uint32 idx, double value, double sigma, bool notify=false)
 
double getParameterSigma (ossim_uint32 idx) const
 
void setParameterSigma (ossim_uint32 idx, double value, bool notify=false)
 
ossimUnitType getParameterUnit (ossim_uint32 idx) const
 
void setParameterUnit (ossim_uint32 idx, ossimUnitType unit)
 
void setParameterUnit (ossim_uint32 idx, const ossimString &unit)
 
void setParameterCenter (ossim_uint32 idx, double center, bool notify=false)
 
double getParameterCenter (ossim_uint32 idx) const
 
double computeParameterOffset (ossim_uint32 idx) const
 
void setParameterOffset (ossim_uint32 idx, ossim_float64 value, bool notify=false)
 
ossimString getParameterDescription (ossim_uint32 idx) const
 
void setParameterDescription (ossim_uint32 idx, const ossimString &descrption)
 
ossim_int32 findParameterIdxGivenDescription (ossim_uint32 adjustmentIdx, const ossimString &name) const
 
ossim_int32 findParameterIdxContainingDescription (ossim_uint32 adjustmentIdx, const ossimString &name) const
 
bool isParameterLocked (ossim_uint32 idx) const
 
void setParameterLockFlag (ossim_uint32 idxParam, bool flag)
 
bool getParameterLockFlag (ossim_uint32 idx) const
 
void lockAllParametersCurrentAdjustment ()
 
void unlockAllParametersCurrentAdjustment ()
 
void lockAllParameters (ossim_uint32 idxAdjustment)
 
void unlockAllParameters (ossim_uint32 idxAdjustment)
 
void resizeAdjustableParameterArray (ossim_uint32 numberOfParameters)
 
void setAdjustment (const ossimAdjustmentInfo &adj, bool notify=false)
 
void setAdjustment (ossim_uint32 idx, const ossimAdjustmentInfo &adj, bool notify=false)
 
void addAdjustment (const ossimAdjustmentInfo &adj, bool notify)
 
void getAdjustment (ossimAdjustmentInfo &adj) const
 
void getAdjustment (ossim_uint32 idx, ossimAdjustmentInfo &adj) const
 
ossim_uint32 getNumberOfAdjustments () const
 
ossim_uint32 getCurrentAdjustmentIdx () const
 
void setDirtyFlag (bool flag=true)
 
void setAllDirtyFlag (bool flag=true)
 
bool hasDirtyAdjustments () const
 
virtual void saveCurrentAdjustmentOnly (ossimKeywordlist &kwl, const ossimString &prefix=ossimString(""))
 Saves the current active adjustment to the KWL file. More...
 
bool saveAdjustments (ossimKeywordlist &kwl, const ossimString &prefix=ossimString("")) const
 Save all adjustments to the KWL file. More...
 
bool loadAdjustments (const ossimKeywordlist &kwl, const ossimString &prefix=ossimString(""))
 
std::ostream & print (std::ostream &out) const
 Dumps the currently active adjustment to ostream. More...
 

Protected Member Functions

bool intersectRay (const ossimMapProjection &proj, ossimDpt3d &result, ossimDpt3d &origin, ossimDpt3d &dir) const
 
bool intersectRayWithHeight (const ossimMapProjection &proj, ossimDpt3d &result, ossimDpt3d &origin, ossimDpt3d &dir, double h) const
 
- Protected Member Functions inherited from ossimSensorModel
virtual ~ossimSensorModel ()
 
virtual ossimDpt extrapolate (const ossimGpt &gp) const
 
virtual ossimGpt extrapolate (const ossimDpt &ip, const double &height=ossim::nan()) const
 
void buildNormalEquation (const ossimTieGptSet &tieSet, NEWMAT::SymmetricMatrix &A, NEWMAT::ColumnVector &residue, NEWMAT::ColumnVector &projResidue, double pstep_scale)
 
NEWMAT::ColumnVector getResidue (const ossimTieGptSet &tieSet)
 
NEWMAT::ColumnVector solveLeastSquares (NEWMAT::SymmetricMatrix &A, NEWMAT::ColumnVector &r) const
 
NEWMAT::Matrix invert (const NEWMAT::Matrix &m) const
 stable invert stolen from ossimRpcSolver More...
 
- Protected Member Functions inherited from ossimReferenced
virtual ~ossimReferenced ()
 
- Protected Member Functions inherited from ossimAdjustableParameterInterface
bool paramChanged (ossim_uint32 param_idx) const
 Returns true if specified parameter has been modified since last setAllChangeFlag(false) call. More...
 
void setAllChangeFlags (bool areChanged)
 Sets all the change flags to the boolean indicated to indicate parameters are changed (TRUE) or not (FALSE). More...
 
void initChangeFlags ()
 Initializes the change flags to TRUE. More...
 

Protected Attributes

ossimRefPtr< ossimUtmProjectionm_utmProjection
 
NEWMAT::Matrix m_compositeMatrix
 
NEWMAT::Matrix m_compositeMatrixInverse
 
NEWMAT::Matrix m_pixelToCamera
 
NEWMAT::Matrix m_mount
 
NEWMAT::Matrix m_mountInverse
 
double m_roll
 
double m_pitch
 
double m_heading
 
ossimDpt m_principalPoint
 
ossimDpt m_pixelSize
 
double m_focalLength
 
ossimEcefPoint m_ecefPlatformPosition
 
ossimGpt m_platformPosition
 
ossimGpt m_platformPositionEllipsoid
 
- Protected Attributes inherited from ossimSensorModel
ossimIpt theImageSize
 
ossimDpt theSubImageOffset
 
ossimString theImageID
 
ossimString theSensorID
 
ossimDpt theGSD
 
ossim_float64 theMeanGSD
 
ossimGpt theRefGndPt
 
ossimDpt theRefImgPt
 
ossimPolygon theBoundGndPolygon
 
ossimDrect theImageClipRect
 
ossim_float64 theRelPosError
 
ossim_float64 theNominalPosError
 
ossimDpt theParWRTx
 Partials for current point. More...
 
ossimDpt theParWRTy
 
ossimDpt theParWRTz
 
ossimDpt theObs
 Observations & residuals for current point. More...
 
ossimDpt theResid
 
ossimRefPtr< ossimProjectiontheSeedFunction
 Used as an initial guess for iterative solutions and a guess for points outside the support bounds. More...
 
bool theExtrapolateImageFlag
 
bool theExtrapolateGroundFlag
 
- Protected Attributes inherited from ossimErrorStatusInterface
ossimErrorCode theErrorStatus
 

Additional Inherited Members

- Public Types inherited from ossimSensorModel
enum  CovMatStatus { COV_INVALID = 0, COV_PARTIAL = 1, COV_FULL = 2 }
 
enum  DeriveMode {
  OBS_INIT =-99, EVALUATE =-98, P_WRT_X = -1, P_WRT_Y = -2,
  P_WRT_Z = -3
}
 
- Static Public Member Functions inherited from ossimSensorModel
static void writeGeomTemplate (ostream &os)
 

Detailed Description

Definition at line 52 of file ossimSonomaSensor.h.

Constructor & Destructor Documentation

◆ ossimSonomaSensor() [1/2]

ossimSonomaSensor::ossimSonomaSensor ( )

Definition at line 30 of file ossimSonomaSensor.cpp.

References ossimMatrix4x4::createIdentity(), initAdjustableParameters(), m_mount, m_mountInverse, m_utmProjection, and ossimSensorModel::theSensorID.

31 {
33  theSensorID = "Sonoma";
37 }
ossimString theSensorID
virtual void initAdjustableParameters()
ground to image faster (you don&#39;t need DEM) //TBC
NEWMAT::Matrix m_mount
ossimRefPtr< ossimUtmProjection > m_utmProjection
static NEWMAT::Matrix createIdentity()
NEWMAT::Matrix m_mountInverse

◆ ossimSonomaSensor() [2/2]

ossimSonomaSensor::ossimSonomaSensor ( const ossimSonomaSensor src)
inline

Definition at line 56 of file ossimSonomaSensor.h.

57  :ossimSensorModel(src),
61  m_mount(src.m_mount),
62  m_roll(src.m_roll),
63  m_pitch(src.m_pitch),
64  m_heading(src.m_heading),
65  m_principalPoint(src.m_principalPoint), // in millimeters
66  m_pixelSize(src.m_pixelSize), // in millimeters
67  m_focalLength(src.m_focalLength), // in millimeters
71  {
72  }
NEWMAT::Matrix m_pixelToCamera
ossimEcefPoint m_ecefPlatformPosition
NEWMAT::Matrix m_mount
NEWMAT::Matrix m_compositeMatrix
NEWMAT::Matrix m_compositeMatrixInverse
ossimGpt m_platformPositionEllipsoid

Member Function Documentation

◆ dup()

virtual ossimObject* ossimSonomaSensor::dup ( ) const
inlinevirtual

Implements ossimProjection.

Definition at line 73 of file ossimSonomaSensor.h.

74  {
75  return new ossimSonomaSensor(*this);
76  }

◆ imagingRay()

void ossimSonomaSensor::imagingRay ( const ossimDpt image_point,
ossimEcefRay image_ray 
) const
virtual

METHOD: imagingRay(image_point, &ossimEcefRay) Given an image point, returns a ray originating at some arbitrarily high point (ideally at the sensor position) and pointing towards the target. Implemented here but should be overriden for more efficient solution.

Reimplemented from ossimSensorModel.

Definition at line 39 of file ossimSonomaSensor.cpp.

References ossimAdjustableParameterInterface::computeParameterOffset(), m_compositeMatrix, m_ecefPlatformPosition, m_focalLength, m_mount, m_pixelSize, m_pixelToCamera, m_principalPoint, ossimEcefVector::magnitude(), ossimEcefVector::normalize(), ossimSensorModel::theRefImgPt, ossimDpt::x, and ossimDpt::y.

Referenced by lineSampleToWorld().

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 
72  image_ray.setDirection(ecf_ray_dir);
73 #endif
74 }
NEWMAT::Matrix m_pixelToCamera
double y
Definition: ossimDpt.h:165
ossimEcefPoint m_ecefPlatformPosition
void setOrigin(const ossimEcefPoint &orig)
Definition: ossimEcefRay.h:81
NEWMAT::Matrix m_mount
NEWMAT::Matrix m_compositeMatrix
double x
Definition: ossimDpt.h:164
void setDirection(const ossimEcefVector &d)
Definition: ossimEcefRay.h:82

◆ initAdjustableParameters()

void ossimSonomaSensor::initAdjustableParameters ( )
virtual

ground to image faster (you don't need DEM) //TBC

Reimplemented from ossimAdjustableParameterInterface.

Definition at line 324 of file ossimSonomaSensor.cpp.

References ossimAdjustableParameterInterface::resizeAdjustableParameterArray(), ossimAdjustableParameterInterface::setAdjustableParameter(), ossimAdjustableParameterInterface::setParameterDescription(), ossimAdjustableParameterInterface::setParameterSigma(), and ossimAdjustableParameterInterface::setParameterUnit().

Referenced by loadState(), and ossimSonomaSensor().

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 }
void setParameterDescription(ossim_uint32 idx, const ossimString &descrption)
void setParameterUnit(ossim_uint32 idx, ossimUnitType unit)
virtual void setAdjustableParameter(ossim_uint32 idx, double value, bool notify=false)
void resizeAdjustableParameterArray(ossim_uint32 numberOfParameters)
void setParameterSigma(ossim_uint32 idx, double value, bool notify=false)

◆ intersectRay()

bool ossimSonomaSensor::intersectRay ( const ossimMapProjection proj,
ossimDpt3d result,
ossimDpt3d origin,
ossimDpt3d dir 
) const
protected

Definition at line 522 of file ossimSonomaSensor.cpp.

References distance(), ossimElevManager::getHeightAboveEllipsoid(), ossimDpt3d::hasNans(), ossimGpt::height(), ossimElevManager::instance(), ossimSonomaSensor::ossimPlane::intersect(), ossimMapProjection::inverse(), ossim::isnan(), ossimDpt3d::makeNan(), ossimSensorModel::origin(), ossimSonomaSensor::ossimPlane::setOffset(), ossimDpt3d::x, ossimDpt3d::y, and ossimDpt3d::z.

Referenced by lineSampleToWorld().

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 }
static ossimElevManager * instance()
METHOD: instance() Implements singelton pattern.
virtual ossimGpt inverse(const ossimDpt &projectedPoint) const =0
Will take a point in meters and convert it to ground.
bool hasNans() const
Definition: ossimDpt3d.h:63
double z
Definition: ossimDpt3d.h:145
virtual double getHeightAboveEllipsoid(const ossimGpt &gpt)
double height() const
Definition: ossimGpt.h:107
void makeNan()
Definition: ossimDpt3d.h:61
double x
Definition: ossimDpt3d.h:143
virtual ossimGpt origin() const
double y
Definition: ossimDpt3d.h:144
float distance(double lat1, double lon1, double lat2, double lon2, int units)
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.
Definition: ossimCommon.h:91

◆ intersectRayWithHeight()

bool ossimSonomaSensor::intersectRayWithHeight ( const ossimMapProjection proj,
ossimDpt3d result,
ossimDpt3d origin,
ossimDpt3d dir,
double  h 
) const
protected

Definition at line 592 of file ossimSonomaSensor.cpp.

References ossimSonomaSensor::ossimPlane::intersect(), and ossimSensorModel::origin().

Referenced by lineSampleHeightToWorld().

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 }
virtual ossimGpt origin() const

◆ lineSampleHeightToWorld()

void ossimSonomaSensor::lineSampleHeightToWorld ( const ossimDpt lineSampPt,
const double &  heightEllipsoid,
ossimGpt worldPt 
) const
virtual

METHOD: lineSampleHeightToWorld This is the pure virtual that performs the actual work of projecting the image point to the given elevation above Ellipsoid.

Implements ossimSensorModel.

Definition at line 76 of file ossimSonomaSensor.cpp.

References ossimSensorModel::extrapolate(), ossimRefPtr< T >::get(), ossimGpt::height(), ossimSensorModel::insideImage(), intersectRayWithHeight(), ossimUtmProjection::inverse(), ossim::isnan(), ossimDpt3d::length(), m_compositeMatrix, m_mountInverse, m_pixelToCamera, m_utmProjection, ossimGpt::makeNan(), ossimSensorModel::origin(), ossimDpt3d::x, ossimDpt::x, ossimDpt3d::y, ossimDpt::y, and ossimDpt3d::z.

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 }
virtual ossimGpt inverse(const ossimDpt &eastingNorthing) const
Will take a point in meters and convert it to ground.
NEWMAT::Matrix m_pixelToCamera
NEWMAT::Matrix m_compositeMatrix
double z
Definition: ossimDpt3d.h:145
double height() const
Definition: ossimGpt.h:107
virtual ossimDpt extrapolate(const ossimGpt &gp) const
ossimRefPtr< ossimUtmProjection > m_utmProjection
bool intersectRayWithHeight(const ossimMapProjection &proj, ossimDpt3d &result, ossimDpt3d &origin, ossimDpt3d &dir, double h) const
NEWMAT::Matrix m_mountInverse
double x
Definition: ossimDpt3d.h:143
virtual ossimGpt origin() const
virtual bool insideImage(const ossimDpt &p) const
double y
Definition: ossimDpt3d.h:144
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.
Definition: ossimCommon.h:91

◆ lineSampleToWorld()

void ossimSonomaSensor::lineSampleToWorld ( const ossimDpt image_point,
ossimGpt world_point 
) const
virtual

Implementation of base-class pure virtual projection methods. These methods may be overriden by derived classes if those have more efficient schemes. The implementations here are iterative (relatively slow). Both depend on calls to the pure virtual lineSampleHeightToWorld() method.

Reimplemented from ossimSensorModel.

Definition at line 116 of file ossimSonomaSensor.cpp.

References ossimRefPtr< T >::get(), ossimDpt::hasNans(), ossimGpt::height(), imagingRay(), ossimElevManager::instance(), ossimElevSource::intersectRay(), intersectRay(), ossimUtmProjection::inverse(), ossimDpt3d::length(), m_compositeMatrix, m_mountInverse, m_pixelToCamera, m_utmProjection, ossimGpt::makeNan(), ossimSensorModel::origin(), ossimDpt3d::x, ossimDpt::x, ossimDpt3d::y, ossimDpt::y, and ossimDpt3d::z.

Referenced by updateModel().

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 }
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
NEWMAT::Matrix m_pixelToCamera
bool intersectRay(const ossimEcefRay &ray, ossimGpt &gpt, double defaultElevValue=0.0)
METHOD: intersectRay()
double y
Definition: ossimDpt.h:165
static ossimElevManager * instance()
METHOD: instance() Implements singelton pattern.
virtual void imagingRay(const ossimDpt &image_point, ossimEcefRay &image_ray) const
NEWMAT::Matrix m_compositeMatrix
double z
Definition: ossimDpt3d.h:145
double height() const
Definition: ossimGpt.h:107
bool hasNans() const
Definition: ossimDpt.h:67
ossimRefPtr< ossimUtmProjection > m_utmProjection
NEWMAT::Matrix m_mountInverse
double x
Definition: ossimDpt.h:164
double x
Definition: ossimDpt3d.h:143
virtual ossimGpt origin() const
double y
Definition: ossimDpt3d.h:144
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ loadState()

bool ossimSonomaSensor::loadState ( const ossimKeywordlist kwl,
const char *  prefix = 0 
)
virtual

Method to the load (recreate) the state of the object from a keyword list. Return true if ok or false on error.

Reimplemented from ossimSensorModel.

Definition at line 366 of file ossimSonomaSensor.cpp.

References ossimSensorModel::computeGsd(), ossimMatrix3x3::createIdentity(), ossimMatrix4x4::createIdentity(), ossimString::empty(), ossimKeywordlist::find(), ossimAdjustableParameterInterface::getNumberOfAdjustableParameters(), ossimDpt::hasNans(), ossimGpt::height(), ossimDrect::height(), initAdjustableParameters(), ossimGeoidManager::instance(), ossimDpt::isNan(), ossim::isnan(), ossimSensorModel::loadState(), m_focalLength, m_heading, m_mount, m_mountInverse, m_pitch, m_pixelSize, m_platformPosition, m_platformPositionEllipsoid, m_principalPoint, m_roll, ossimDpt::makeNan(), ossimDrect::midPoint(), ossimGeoidManager::offsetFromEllipsoid(), ossimString::split(), ossimSensorModel::theGSD, ossimSensorModel::theImageClipRect, ossimSensorModel::theImageSize, ossimSensorModel::theRefImgPt, ossimString::toDouble(), ossimDpt::toPoint(), ossimGpt::toPoint(), ossimString::trim(), updateModel(), and ossimDrect::width().

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 }
virtual void initAdjustableParameters()
ground to image faster (you don&#39;t need DEM) //TBC
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
ossim_float64 width() const
Definition: ossimDrect.h:522
const char * find(const char *key) 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.
bool isNan() const
Definition: ossimDpt.h:72
NEWMAT::Matrix m_mount
void computeGsd()
This method computes the ground sample distance(gsd) and sets class attributes theGSD and theMeanGSD ...
void toPoint(const std::string &s)
Initializes this point from string.
Definition: ossimGpt.cpp:116
virtual const char * what() const
Returns the error message.
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
static ossimGeoidManager * instance()
Implements singelton pattern:
double height() const
Definition: ossimGpt.h:107
ossimGpt m_platformPositionEllipsoid
double toDouble() const
bool hasNans() const
Definition: ossimDpt.h:67
ossim_float64 height() const
Definition: ossimDrect.h:517
virtual void updateModel()
ossimDrect theImageClipRect
static NEWMAT::Matrix createIdentity()
ossimDpt midPoint() const
Definition: ossimDrect.h:817
NEWMAT::Matrix m_mountInverse
static NEWMAT::Matrix createIdentity()
bool empty() const
Definition: ossimString.h:411
virtual double offsetFromEllipsoid(const ossimGpt &gpt)
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

◆ saveState()

bool ossimSonomaSensor::saveState ( ossimKeywordlist kwl,
const char *  prefix = 0 
) const
virtual

METHODS: saveState, loadState Fulfills ossimObject base-class pure virtuals. Loads and saves geometry KWL files.

Reimplemented from ossimSensorModel.

Definition at line 493 of file ossimSonomaSensor.cpp.

References ossimKeywordlist::add(), m_focalLength, m_heading, m_mount, m_pitch, m_pixelSize, m_platformPosition, m_principalPoint, m_roll, ossimSensorModel::saveState(), ossimDpt::toString(), ossimGpt::toString(), ossimString::toString(), and ossimString::trim().

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 }
static ossimString toString(bool aValue)
Numeric to string methods.
NEWMAT::Matrix m_mount
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
ossimString trim(const ossimString &valueToTrim=ossimString(" \\)) const
this will strip lead and trailing character passed in.
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
ossimString toString(ossim_uint32 precision=15) const
Definition: ossimDpt.cpp:160
ossimString toString(ossim_uint32 precision=15) const
Definition: ossimGpt.cpp:78
int ossim_int32

◆ setFocalLength()

void ossimSonomaSensor::setFocalLength ( double  value)
inline

Definition at line 97 of file ossimSonomaSensor.h.

98  {
99  m_focalLength = value;
100  }

◆ setPixelSize()

void ossimSonomaSensor::setPixelSize ( const ossimDpt value)
inline

Definition at line 111 of file ossimSonomaSensor.h.

112  {
113  m_pixelSize = value;
114  }

◆ setPlatformPosition()

void ossimSonomaSensor::setPlatformPosition ( const ossimGpt value)
inline

Definition at line 101 of file ossimSonomaSensor.h.

102  {
103  m_platformPosition = value;
104  m_ecefPlatformPosition = value;
105  }
ossimEcefPoint m_ecefPlatformPosition

◆ setPrincipalPoint()

void ossimSonomaSensor::setPrincipalPoint ( const ossimDpt value)
inline

Definition at line 107 of file ossimSonomaSensor.h.

108  {
109  m_principalPoint = value;
110  }

◆ setRollPitchHeading()

void ossimSonomaSensor::setRollPitchHeading ( double  r,
double  p,
double  y 
)
inline

Definition at line 91 of file ossimSonomaSensor.h.

References y.

92  {
93  m_roll = r;
94  m_pitch = p;
95  m_heading = y;
96  }
ossim_uint32 y

◆ updateModel()

void ossimSonomaSensor::updateModel ( )
virtual

VIRTUAL METHOD: updateModel() Following a change to the adjustable parameter set, this virtual is called to permit instances to compute derived quantities after parameter change.

Reimplemented from ossimSensorModel.

Definition at line 159 of file ossimSonomaSensor.cpp.

References ossimSensorModel::computeGsd(), ossimUtmProjection::computeZone(), ossimMatrix3x3::create(), ossimMatrix4x4::createIdentity(), ossimMatrix4x4::createRotationXMatrix(), ossimMatrix4x4::createRotationZMatrix(), ossimMatrix4x4::createTranslationMatrix(), ossim::degreesToRadians(), ossimLsrSpace::ecefToLsrRotMatrix(), ossimUtmProjection::forward(), ossimMatrix4x4::getData(), ossimGpt::height(), ossimDrect::height(), ossimGpt::latd(), lineSampleToWorld(), ossimDrect::ll(), ossimDrect::lr(), m_compositeMatrix, m_compositeMatrixInverse, m_ecefPlatformPosition, m_focalLength, m_heading, m_pitch, m_pixelSize, m_pixelToCamera, m_platformPositionEllipsoid, m_roll, m_utmProjection, ossimEcefVector::normalize(), ossimPolygon::resize(), ossimUtmProjection::setHemisphere(), ossimUtmProjection::setZone(), ossimSensorModel::theBoundGndPolygon, ossimSensorModel::theImageClipRect, ossimSensorModel::theImageSize, ossimSensorModel::theRefGndPt, ossimSensorModel::theRefImgPt, ossimDrect::ul(), ossimDrect::ur(), ossimDrect::width(), ossimEcefPoint::x(), ossimIpt::x, ossimDpt::x, ossimEcefPoint::y(), ossimIpt::y, ossimDpt::y, y, and ossimEcefPoint::z().

Referenced by loadState().

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 }
const NEWMAT::Matrix & getData() const
ossim_float64 width() const
Definition: ossimDrect.h:522
static NEWMAT::Matrix createTranslationMatrix(double x, double y, double z)
ossim_uint32 y
NEWMAT::Matrix m_pixelToCamera
void lineSampleToWorld(const ossimDpt &image_point, ossimGpt &gpt) const
const ossimDpt & ul() const
Definition: ossimDrect.h:339
double y
Definition: ossimDpt.h:165
double x() const
ossimEcefPoint m_ecefPlatformPosition
double latd() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:87
virtual ossimDpt forward(const ossimGpt &latLon) const
All map projections will convert the world coordinate to an easting northing (Meters).
double ossim_float64
NEWMAT::Matrix m_compositeMatrix
void computeGsd()
This method computes the ground sample distance(gsd) and sets class attributes theGSD and theMeanGSD ...
double degreesToRadians(double x)
Definition: ossimCommon.h:258
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
ossimPolygon theBoundGndPolygon
double height() const
Definition: ossimGpt.h:107
ossimGpt m_platformPositionEllipsoid
static NEWMAT::Matrix create()
static ossim_int32 computeZone(const ossimGpt &gpt)
ossim_float64 height() const
Definition: ossimDrect.h:517
void setZone(const ossimGpt &ground)
ossimRefPtr< ossimUtmProjection > m_utmProjection
ossimDrect theImageClipRect
static NEWMAT::Matrix createIdentity()
double y() const
ossim_int32 y
Definition: ossimIpt.h:142
const ossimDpt & ur() const
Definition: ossimDrect.h:340
double x
Definition: ossimDpt.h:164
ossim_int32 x
Definition: ossimIpt.h:141
const ossimDpt & ll() const
Definition: ossimDrect.h:342
void resize(ossim_uint32 newSize)
const ossimDpt & lr() const
Definition: ossimDrect.h:341
void setHemisphere(const ossimGpt &ground)
double z() const

◆ useForward()

virtual bool ossimSonomaSensor::useForward ( ) const
inlinevirtual

useForward() return true when it's better (more accurate / fast) to use forward (from ground to image) than inverse(from image to ground)

Implements ossimOptimizableProjection.

Definition at line 115 of file ossimSonomaSensor.h.

115 {return true;}

Member Data Documentation

◆ m_compositeMatrix

NEWMAT::Matrix ossimSonomaSensor::m_compositeMatrix
protected

◆ m_compositeMatrixInverse

NEWMAT::Matrix ossimSonomaSensor::m_compositeMatrixInverse
protected

Definition at line 171 of file ossimSonomaSensor.h.

Referenced by updateModel().

◆ m_ecefPlatformPosition

ossimEcefPoint ossimSonomaSensor::m_ecefPlatformPosition
protected

Definition at line 181 of file ossimSonomaSensor.h.

Referenced by imagingRay(), and updateModel().

◆ m_focalLength

double ossimSonomaSensor::m_focalLength
protected

Definition at line 180 of file ossimSonomaSensor.h.

Referenced by imagingRay(), loadState(), saveState(), and updateModel().

◆ m_heading

double ossimSonomaSensor::m_heading
protected

Definition at line 177 of file ossimSonomaSensor.h.

Referenced by loadState(), saveState(), and updateModel().

◆ m_mount

NEWMAT::Matrix ossimSonomaSensor::m_mount
protected

Definition at line 173 of file ossimSonomaSensor.h.

Referenced by imagingRay(), loadState(), ossimSonomaSensor(), and saveState().

◆ m_mountInverse

NEWMAT::Matrix ossimSonomaSensor::m_mountInverse
protected

◆ m_pitch

double ossimSonomaSensor::m_pitch
protected

Definition at line 176 of file ossimSonomaSensor.h.

Referenced by loadState(), saveState(), and updateModel().

◆ m_pixelSize

ossimDpt ossimSonomaSensor::m_pixelSize
protected

Definition at line 179 of file ossimSonomaSensor.h.

Referenced by imagingRay(), loadState(), saveState(), and updateModel().

◆ m_pixelToCamera

NEWMAT::Matrix ossimSonomaSensor::m_pixelToCamera
protected

◆ m_platformPosition

ossimGpt ossimSonomaSensor::m_platformPosition
protected

Definition at line 182 of file ossimSonomaSensor.h.

Referenced by loadState(), and saveState().

◆ m_platformPositionEllipsoid

ossimGpt ossimSonomaSensor::m_platformPositionEllipsoid
protected

Definition at line 183 of file ossimSonomaSensor.h.

Referenced by loadState(), and updateModel().

◆ m_principalPoint

ossimDpt ossimSonomaSensor::m_principalPoint
protected

Definition at line 178 of file ossimSonomaSensor.h.

Referenced by imagingRay(), loadState(), and saveState().

◆ m_roll

double ossimSonomaSensor::m_roll
protected

Definition at line 175 of file ossimSonomaSensor.h.

Referenced by loadState(), saveState(), and updateModel().

◆ m_utmProjection

ossimRefPtr<ossimUtmProjection> ossimSonomaSensor::m_utmProjection
protected

The documentation for this class was generated from the following files: