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

#include <ossimRpcProjection.h>

Inheritance diagram for ossimRpcProjection:
ossimProjection ossimOptimizableProjection ossimAdjustableParameterInterface ossimObject ossimErrorStatusInterface ossimReferenced

Public Types

enum  PolynomialType { A ='A', B ='B' }
 

Public Member Functions

 ossimRpcProjection ()
 
 ossimRpcProjection (const ossimRpcProjection &copy_this)
 
 ~ossimRpcProjection ()
 
ossimRpcProjectionoperator= (const ossimRpcProjection &source)
 
void initAdjustableParameters ()
 
virtual void adjustableParametersChanged ()
 
virtual ossimObjectgetBaseObject ()
 
virtual const ossimObjectgetBaseObject () const
 
void setAttributes (ossim_float64 theSampleOffset, ossim_float64 theLineOffset, ossim_float64 theSampleScale, ossim_float64 theLineScale, ossim_float64 theLatOffset, ossim_float64 theLonOffset, ossim_float64 theHeightOffset, ossim_float64 theLatScale, ossim_float64 theLonScale, ossim_float64 theHeightScale, const std::vector< double > &xNumeratorCoeffs, const std::vector< double > &xDenominatorCoeffs, const std::vector< double > &yNumeratorCoeffs, const std::vector< double > &yDenominatorCoeffs, PolynomialType polyType=B)
 
virtual void worldToLineSample (const ossimGpt &world_point, ossimDpt &image_point) const
 
virtual std::ostream & print (std::ostream &out) const
 
virtual bool saveState (ossimKeywordlist &kwl, const char *prefix=0) const
 
virtual bool loadState (const ossimKeywordlist &kwl, const char *prefix=0)
 
virtual void lineSampleToWorld (const ossimDpt &image_point, ossimGpt &world_point) const
 
virtual void lineSampleHeightToWorld (const ossimDpt &image_point, const double &heightEllipsoid, ossimGpt &worldPoint) const
 
virtual ossimObjectdup () const
 
virtual ossimGpt origin () const
 
virtual ossimDpt getMetersPerPixel () const
 
virtual bool operator== (const ossimProjection &projection) const
 
virtual bool setupOptimizer (const ossimString &setup)
 setupFromString() Derived classes should implement as needed. Initialize parameters needed for optimizeFit and degreesOfFreedom More...
 
virtual bool useForward () const
 
virtual ossim_uint32 degreesOfFreedom () const
 
virtual double optimizeFit (const ossimTieGptSet &tieSet, double *targetVariance=NULL)
 
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 bool isAffectedByElevation () const
 Implementation of pure virtual ossimProjection::isAffectedByElevation method. 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 needsInitialState () const
 needsInitialState() 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(""))
 
virtual void updateModel ()
 Provides the derived adjustable class an opportunity to update its state after a param change. More...
 
std::ostream & print (std::ostream &out) const
 Dumps the currently active adjustment to ostream. More...
 

Protected Member Functions

double polynomial (const double &nlat, const double &nlon, const double &nhgt, const double *coeffs) const
 
double dPoly_dLat (const double &nlat, const double &nlon, const double &nhgt, const double *coeffs) const
 
double dPoly_dLon (const double &nlat, const double &nlon, const double &nhgt, const double *coeffs) 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

PolynomialType thePolyType
 
double theLineScale
 
double theSampScale
 
double theLatScale
 
double theLonScale
 
double theHgtScale
 
double theLineOffset
 
double theSampOffset
 
double theLatOffset
 
double theLonOffset
 
double theHgtOffset
 
double theLineNumCoef [20]
 
double theLineDenCoef [20]
 
double theSampNumCoef [20]
 
double theSampDenCoef [20]
 
double theIntrackOffset
 
double theCrtrackOffset
 
double theIntrackScale
 
double theCrtrackScale
 
double theYawSkew
 
double theCosMapRot
 
double theSinMapRot
 
- Protected Attributes inherited from ossimErrorStatusInterface
ossimErrorCode theErrorStatus
 

Detailed Description


CLASS: ossimRpcProjection

Definition at line 28 of file ossimRpcProjection.h.

Member Enumeration Documentation

◆ PolynomialType

Enumerator

Definition at line 36 of file ossimRpcProjection.h.

37  {
38  A='A', // corresponds to "RPC00A"
39  B='B' // corresponds to "RPC00B"
40  };

Constructor & Destructor Documentation

◆ ossimRpcProjection() [1/2]

ossimRpcProjection::ossimRpcProjection ( )

CONSTRUCTORS:

Definition at line 87 of file ossimRpcProjection.cpp.

91  theIntrackScale(0.0),
92  theCrtrackScale(0.0),
93  theYawSkew (0.0),
94  theCosMapRot (1.0),
95  theSinMapRot (0.0)
96 
97  {
98  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection Default Constructor: entering..." << std::endl;
99 
101 
102  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection Default Constructor: returning..." << std::endl;
103 }
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ ossimRpcProjection() [2/2]

ossimRpcProjection::ossimRpcProjection ( const ossimRpcProjection copy_this)

Definition at line 109 of file ossimRpcProjection.cpp.

110  :
113  thePolyType (model.thePolyType),
114  theLineScale (model.theLineScale),
115  theSampScale (model.theSampScale),
116  theLatScale (model.theLatScale),
117  theLonScale (model.theLonScale),
118  theHgtScale (model.theHgtScale),
119  theLineOffset (model.theLineOffset),
120  theSampOffset (model.theSampOffset),
121  theLatOffset (model.theLatOffset),
122  theLonOffset (model.theLonOffset),
123  theHgtOffset (model.theHgtOffset),
124  theIntrackOffset(model.theIntrackOffset),
125  theCrtrackOffset(model.theCrtrackOffset),
126  theIntrackScale(model.theIntrackScale),
127  theCrtrackScale(model.theCrtrackScale),
128  theYawSkew (model.theYawSkew),
129  theCosMapRot (model.theCosMapRot),
130  theSinMapRot (model.theSinMapRot)
131 {
132  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection Copy Constructor: entering..." << std::endl;
133 
134  for (int i=0; i<20; i++)
135  {
136  theLineNumCoef[i] = model.theLineNumCoef[i];
137  theLineDenCoef[i] = model.theLineDenCoef[i];
138  theSampNumCoef[i] = model.theSampNumCoef[i];
139  theSampDenCoef[i] = model.theSampDenCoef[i];
140  }
141 
142  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection Copy Constructor: returning..." << std::endl;
143 }
PolynomialType thePolyType
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ ~ossimRpcProjection()

ossimRpcProjection::~ossimRpcProjection ( )

Definition at line 149 of file ossimRpcProjection.cpp.

150 {
151  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ~ossimRpcProjection() Destructor: entering..." << std::endl;
152 
153  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimNotify(ossimNotifyLevel_DEBUG): returning..." << std::endl;
154 }
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

Member Function Documentation

◆ adjustableParametersChanged()

void ossimRpcProjection::adjustableParametersChanged ( )
virtual

Reimplemented from ossimAdjustableParameterInterface.

Definition at line 924 of file ossimRpcProjection.cpp.

References ossimAdjustableParameterInterface::computeParameterOffset(), and theIntrackOffset.

925 {
926  theIntrackOffset = computeParameterOffset(INTRACK_OFFSET);
927  theCrtrackOffset = computeParameterOffset(CRTRACK_OFFSET);
928  theIntrackScale = computeParameterOffset(INTRACK_SCALE);
929  theCrtrackScale = computeParameterOffset(CRTRACK_SCALE);
930  double mapRotation = computeParameterOffset(MAP_ROTATION);
931  theCosMapRot = ossim::cosd(mapRotation);
932  theSinMapRot = ossim::sind(mapRotation);
933 }
double sind(double x)
Definition: ossimCommon.h:260
double cosd(double x)
Definition: ossimCommon.h:259

◆ buildNormalEquation()

void ossimRpcProjection::buildNormalEquation ( const ossimTieGptSet tieSet,
NEWMAT::SymmetricMatrix &  A,
NEWMAT::ColumnVector &  residue,
NEWMAT::ColumnVector &  projResidue,
double  pstep_scale 
)
protected

METHOD: buildNormalEquation builds linearized system (LMS equivalent) A*dp = projResidue

A: symetric matrix = tJ*J dp: system parameter shift that we want to estimate projResidue = tJ * residue

t: transposition operator J = jacobian of transform relative to parameters p, transform can be forward() or inverse() jacobian is obtained via finite differences residue can be image (2D) or ground residue(3D)

TODO: use image/ground points covariance matrices

Definition at line 1050 of file ossimRpcProjection.cpp.

References A, ossimProjection::forward(), getForwardDeriv(), getInverseDeriv(), ossimAdjustableParameterInterface::getNumberOfAdjustableParameters(), ossimTieGptSet::getTiePoints(), ossimGpt::hgt, ossimProjection::inverse(), ossimGpt::lat, ossimGpt::lon, M_PI, ossimTieGptSet::size(), useForward(), ossimDpt::x, and ossimDpt::y.

1055 {
1056  //goal: build Least Squares system
1057  //constraint: never store full Jacobian matrix in memory (can be huge)
1058  // so we build the matrices incrementally
1059  // the system can be built using forward() or inverse() depending on the projection capabilities : useForward()
1060  //
1061  //TBD : add covariance matrix for each tie point
1062 
1063  //init
1065  int dimObs;
1066  bool useImageObs = useForward(); //caching
1067  if (useImageObs)
1068  {
1069  dimObs = 2; //image observation
1070  } else {
1071  dimObs = 3; //ground observations
1072  }
1073  int no = dimObs * tieSet.size(); //number of observations
1074 
1075  A.ReSize(np);
1076  residue.ReSize(no);
1077  projResidue.ReSize(np);
1078  //Zeroify matrices that will be accumulated
1079  A = 0.0;
1080  projResidue = 0.0;
1081 
1082  const vector<ossimRefPtr<ossimTieGpt> >& theTPV = tieSet.getTiePoints();
1083  vector<ossimRefPtr<ossimTieGpt> >::const_iterator tit;
1084  unsigned long c=1;
1085 
1086  if (useImageObs)
1087  {
1088  //image observations
1089  ossimDpt* imDerp = new ossimDpt[np];
1090  ossimDpt resIm;
1091  // loop on tie points
1092  for (tit = theTPV.begin() ; tit != theTPV.end() ; ++tit)
1093  {
1094  //compute residue
1095  resIm = (*tit)->tie - forward(*(*tit));
1096  residue(c++) = resIm.x;
1097  residue(c++) = resIm.y;
1098 
1099  //compute all image derivatives regarding parametres for the tie point position
1100  for(int p=0;p<np;++p)
1101  {
1102  imDerp[p] = getForwardDeriv( p , *(*tit) , pstep_scale);
1103  }
1104 
1105  //compute influence of tie point on all sytem elements
1106  for(int p1=0;p1<np;++p1)
1107  {
1108  //proj residue: J * residue
1109  projResidue.element(p1) += imDerp[p1].x * resIm.x + imDerp[p1].y * resIm.y;
1110 
1111  //normal matrix A = transpose(J)*J
1112  for(int p2=p1;p2<np;++p2)
1113  {
1114  A.element(p1,p2) += imDerp[p1].x * imDerp[p2].x + imDerp[p1].y * imDerp[p2].y;
1115  }
1116  }
1117  }
1118  delete []imDerp;
1119  }
1120  else
1121  {
1122  // ground observations
1123  std::vector<ossimGpt> gdDerp(np);
1124  ossimGpt gd, resGd;
1125  // loop on tie points
1126  for (tit = theTPV.begin() ; tit != theTPV.end() ; ++tit)
1127  {
1128  //compute residue
1129  gd = inverse((*tit)->tie);
1130  residue(c++) = resGd.lon = ((*tit)->lon - gd.lon) * 100000.0;
1131  residue(c++) = resGd.lat = ((*tit)->lat - gd.lat) * 100000.0 * cos(gd.lat / 180.0 * M_PI);
1132  residue(c++) = resGd.hgt = (*tit)->hgt - gd.hgt; //TBD : normalize to meters?
1133 
1134  //compute all image derivatives regarding parametres for the tie point position
1135  for(int p=0;p<np;++p)
1136  {
1137  gdDerp[p] = getInverseDeriv( p , (*tit)->tie, pstep_scale);
1138  }
1139 
1140  //compute influence of tie point on all sytem elements
1141  for(int p1=0;p1<np;++p1)
1142  {
1143  //proj residue: J * residue
1144  projResidue.element(p1) += gdDerp[p1].lon * resGd.lon + gdDerp[p1].lat * resGd.lat + gdDerp[p1].hgt * resGd.hgt; //TBC
1145 
1146  //normal matrix A = transpose(J)*J
1147  for(int p2=p1;p2<np;++p2)
1148  {
1149  A.element(p1,p2) += gdDerp[p1].lon * gdDerp[p2].lon + gdDerp[p1].lat * gdDerp[p2].lat + gdDerp[p1].hgt * gdDerp[p2].hgt;
1150  }
1151  }
1152  }
1153  } //end of if (useImageObs)
1154 }
unsigned int size() const
double y
Definition: ossimDpt.h:165
virtual ossimGpt inverse(const ossimDpt &pp) const
virtual ossimDpt getForwardDeriv(int parmIdx, const ossimGpt &gpos, double hdelta=1e-11)
ossim_float64 hgt
Height in meters above the ellipsiod.
Definition: ossimGpt.h:274
#define M_PI
ossim_float64 lon
Definition: ossimGpt.h:266
virtual bool useForward() const
const vector< ossimRefPtr< ossimTieGpt > > & getTiePoints() const
virtual ossimGpt getInverseDeriv(int parmIdx, const ossimDpt &ipos, double hdelta=1e-11)
virtual ossimDpt forward(const ossimGpt &wp) const
double x
Definition: ossimDpt.h:164
ossim_float64 lat
Definition: ossimGpt.h:265

◆ degreesOfFreedom()

ossim_uint32 ossimRpcProjection::degreesOfFreedom ( ) const
virtual

degreesOfFreedom() number of degrees of freedom (eg: 8 for bilinear, 6 for affine, 2 for translation) especially useful when not inheriting from AdjustableParameterInterface

Implements ossimOptimizableProjection.

Definition at line 960 of file ossimRpcProjection.cpp.

References ossimAdjustableParameterInterface::getNumberOfAdjustableParameters(), and ossimAdjustableParameterInterface::isParameterLocked().

961 {
962  ossim_uint32 dof = 0;
963  ossim_uint32 idx = 0;
965  for(idx = 0; idx < numAdj; ++idx)
966  {
967  if(!isParameterLocked(idx))
968  {
969  ++dof;
970  }
971  }
972 
973  return dof;
974 }
unsigned int ossim_uint32

◆ dPoly_dLat()

double ossimRpcProjection::dPoly_dLat ( const double &  nlat,
const double &  nlon,
const double &  nhgt,
const double *  coeffs 
) const
protected

Definition at line 575 of file ossimRpcProjection.cpp.

References A, and thePolyType.

577 {
578  double dr;
579 
580  if (thePolyType == A)
581  {
582  dr = c[2] + c[4]*L + c[6]*H + c[7]*L*H + 2*c[9]*P + c[12]*L*L +
583  2*c[14]*L*P + 3*c[15]*P*P +2*c[16]*P*H + c[18]*H*H;
584  }
585  else
586  {
587  dr = c[2] + c[4]*L + c[6]*H + 2*c[8]*P + c[10]*L*H + 2*c[12]*L*P +
588  c[14]*L*L + 3*c[15]*P*P + c[16]*H*H + 2*c[18]*P*H;
589  }
590 
591  return dr;
592 }
PolynomialType thePolyType

◆ dPoly_dLon()

double ossimRpcProjection::dPoly_dLon ( const double &  nlat,
const double &  nlon,
const double &  nhgt,
const double *  coeffs 
) const
protected

Definition at line 600 of file ossimRpcProjection.cpp.

References A, and thePolyType.

602 {
603  double dr;
604 
605  if (thePolyType == A)
606  {
607  dr = c[1] + c[4]*P + c[5]*H + c[7]*P*H + 2*c[8]*L + 3*c[11]*L*L +
608  2*c[12]*L*P + 2*c[13]*L*H + c[14]*P*P + c[17]*H*H;
609  }
610  else
611  {
612  dr = c[1] + c[4]*P + c[5]*H + 2*c[7]*L + c[10]*P*H + 3*c[11]*L*L +
613  c[12]*P*P + c[13]*H*H + 2*c[14]*P*L + 2*c[17]*L*H;
614  }
615  return dr;
616 }
PolynomialType thePolyType

◆ dup()

virtual ossimObject* ossimRpcProjection::dup ( ) const
inlinevirtual

METHOD: dup() Returns pointer to a new instance, copy of this.

Implements ossimProjection.

Definition at line 112 of file ossimRpcProjection.h.

112 { return new ossimRpcProjection(*this); }

◆ getBaseObject() [1/2]

ossimObject * ossimRpcProjection::getBaseObject ( )
virtual

Implements ossimAdjustableParameterInterface.

Definition at line 156 of file ossimRpcProjection.cpp.

157 {
158  return this;
159 }

◆ getBaseObject() [2/2]

const ossimObject * ossimRpcProjection::getBaseObject ( ) const
virtual

Implements ossimAdjustableParameterInterface.

Definition at line 161 of file ossimRpcProjection.cpp.

162 {
163  return this;
164 }

◆ getForwardDeriv()

ossimDpt ossimRpcProjection::getForwardDeriv ( int  parmIdx,
const ossimGpt gpos,
double  hdelta = 1e-11 
)
virtual

METHOD: getForwardDeriv() gives forward() partial derivative regarding parameter parmIdx (>=0) default implementation is centered finite difference -should be reimplemented with formal derivative in child class

Definition at line 1002 of file ossimRpcProjection.cpp.

References ossimProjection::forward(), ossimAdjustableParameterInterface::getAdjustableParameter(), and ossimAdjustableParameterInterface::setAdjustableParameter().

Referenced by buildNormalEquation().

1003 {
1004  static double den = 0.5/hdelta;
1005  ossimDpt res;
1006 
1007  double middle = getAdjustableParameter(parmIdx);
1008  //set parm to high value
1009  setAdjustableParameter(parmIdx, middle + hdelta, true);
1010  res = forward(gpos);
1011  //set parm to low value and gte difference
1012  setAdjustableParameter(parmIdx, middle - hdelta, true);
1013  res -= forward(gpos);
1014  //get partial derivative
1015  res = res*den;
1016 
1017  //reset parm
1018  setAdjustableParameter(parmIdx, middle, true);
1019 
1020  return res;
1021 }
virtual ossimDpt forward(const ossimGpt &wp) const
virtual void setAdjustableParameter(ossim_uint32 idx, double value, bool notify=false)

◆ getInverseDeriv()

ossimGpt ossimRpcProjection::getInverseDeriv ( int  parmIdx,
const ossimDpt ipos,
double  hdelta = 1e-11 
)
virtual

METHOD: getInverseDeriv() gives inverse() partial derivative regarding parameter parmIdx (>=0) default implementation is centered finite difference -should be reimplemented with formal derivative in child class

Definition at line 977 of file ossimRpcProjection.cpp.

References ossimAdjustableParameterInterface::getAdjustableParameter(), ossimGpt::hgt, ossimProjection::inverse(), ossimGpt::lat, ossimGpt::lon, M_PI, and ossimAdjustableParameterInterface::setAdjustableParameter().

Referenced by buildNormalEquation().

978 {
979  double den = 0.5/hdelta;
980  ossimGpt res,gd;
981 
982  double middle = getAdjustableParameter(parmIdx);
983  //set parm to high value
984  setAdjustableParameter(parmIdx, middle + hdelta, true);
985  res = inverse(ipos);
986  //set parm to low value and gte difference
987  setAdjustableParameter(parmIdx, middle - hdelta, true);
988  gd = inverse(ipos);
989 
990  //reset parm
991  setAdjustableParameter(parmIdx, middle, true);
992 
993  res.lon = den*(res.lon - gd.lon) * 100000.0; //TBC : approx meters
994  res.lat = den*(res.lat - gd.lat) * 100000.0 * cos(gd.lat / 180.0 * M_PI);
995  res.hgt = den*(res.hgt - gd.hgt);
996 
997  return res;
998 }
virtual ossimGpt inverse(const ossimDpt &pp) const
ossim_float64 hgt
Height in meters above the ellipsiod.
Definition: ossimGpt.h:274
#define M_PI
ossim_float64 lon
Definition: ossimGpt.h:266
virtual void setAdjustableParameter(ossim_uint32 idx, double value, bool notify=false)
ossim_float64 lat
Definition: ossimGpt.h:265

◆ getMetersPerPixel()

ossimDpt ossimRpcProjection::getMetersPerPixel ( ) const
virtual

ACCESS METHODS:

Implements ossimProjection.

Definition at line 500 of file ossimRpcProjection.cpp.

References lineSampleToWorld(), theLineOffset, theSampOffset, ossimDpt::x, and ossimDpt::y.

501 {
502  ossimDpt result;
503 
504 // ossimDpt left = ossimDpt(theSampOffset-1,
505 // theLineOffset);
506 // ossimDpt right = ossimDpt(theSampOffset+1,
507 // theLineOffset);
509  theLineOffset-1);
511  theLineOffset+1);
512 // ossimGpt leftG;
513 // ossimGpt rightG;
514  ossimGpt topG;
515  ossimGpt bottomG;
516 
517 // lineSampleToWorld(left, leftG);
518 // lineSampleToWorld(right, rightG);
519  lineSampleToWorld(top, topG);
520  lineSampleToWorld(bottom, bottomG);
521 
522 // result.x = (ossimEcefPoint(leftG) - ossimEcefPoint(rightG)).magnitude()/2.0;
523  result.y = (ossimEcefPoint(topG) - ossimEcefPoint(bottomG)).magnitude()/2.0;
524  result.x = result.y;
525 
526  return result;
527 }
double y
Definition: ossimDpt.h:165
virtual void lineSampleToWorld(const ossimDpt &image_point, ossimGpt &world_point) const
double x
Definition: ossimDpt.h:164

◆ getResidue()

NEWMAT::ColumnVector ossimRpcProjection::getResidue ( const ossimTieGptSet tieSet)
protected

METHOD: getResidue() returns ground opr image residue

Definition at line 1157 of file ossimRpcProjection.cpp.

References ossimProjection::forward(), ossimTieGptSet::getTiePoints(), ossimGpt::hgt, ossimProjection::inverse(), ossimGpt::lat, ossimGpt::lon, M_PI, ossimTieGptSet::size(), useForward(), ossimDpt::x, and ossimDpt::y.

1158 {
1159  //init
1160  NEWMAT::ColumnVector residue;
1161  int dimObs;
1162 
1163  bool useImageObs = useForward(); //caching
1164  if (useImageObs)
1165  {
1166  dimObs = 2; //image observation
1167  } else {
1168  dimObs = 3; //ground observations
1169  }
1170  int no = dimObs * tieSet.size(); //number of observations
1171 
1172  residue.ReSize(no);
1173 
1174  const vector<ossimRefPtr<ossimTieGpt> >& theTPV = tieSet.getTiePoints();
1175  vector<ossimRefPtr<ossimTieGpt> >::const_iterator tit;
1176  unsigned long c=1;
1177 
1178  if (useImageObs)
1179  {
1180  //image observations
1181  ossimDpt resIm;
1182  // loop on tie points
1183  for (tit = theTPV.begin() ; tit != theTPV.end() ; ++tit)
1184  {
1185  //compute residue
1186  resIm = (*tit)->tie - forward(**tit);
1187  residue(c++) = resIm.x;
1188  residue(c++) = resIm.y;
1189  }
1190  } else {
1191  // ground observations
1192  ossimGpt gd;
1193  // loop on tie points
1194  for (tit = theTPV.begin() ; tit != theTPV.end() ; ++tit)
1195  {
1196  //compute residue
1197  gd = inverse((*tit)->tie);
1198  residue(c++) = ((*tit)->lon - gd.lon) * 100000.0; //approx meters //TBC TBD
1199  residue(c++) = ((*tit)->lat - gd.lat) * 100000.0 * cos(gd.lat / 180.0 * M_PI);
1200  residue(c++) = (*tit)->hgt - gd.hgt; //meters
1201  }
1202  } //end of if (useImageObs)
1203 
1204  return residue;
1205 }
unsigned int size() const
double y
Definition: ossimDpt.h:165
virtual ossimGpt inverse(const ossimDpt &pp) const
ossim_float64 hgt
Height in meters above the ellipsiod.
Definition: ossimGpt.h:274
#define M_PI
ossim_float64 lon
Definition: ossimGpt.h:266
virtual bool useForward() const
const vector< ossimRefPtr< ossimTieGpt > > & getTiePoints() const
virtual ossimDpt forward(const ossimGpt &wp) const
double x
Definition: ossimDpt.h:164
ossim_float64 lat
Definition: ossimGpt.h:265

◆ initAdjustableParameters()

void ossimRpcProjection::initAdjustableParameters ( )
virtual

Reimplemented from ossimAdjustableParameterInterface.

Definition at line 906 of file ossimRpcProjection.cpp.

References ossimAdjustableParameterInterface::resizeAdjustableParameterArray().

907 {
908  resizeAdjustableParameterArray(NUM_ADJUSTABLE_PARAMS);
909  int numParams = getNumberOfAdjustableParameters();
910  for (int i=0; i<numParams; i++)
911  {
912  setAdjustableParameter(i, 0.0);
913  setParameterDescription(i, PARAM_NAMES[i]);
914  setParameterUnit(i,PARAM_UNITS[i]);
915  }
916  setParameterSigma(INTRACK_OFFSET, 50.0);
917  setParameterSigma(CRTRACK_OFFSET, 50.0);
918  setParameterSigma(INTRACK_SCALE, 50.0);
919  setParameterSigma(CRTRACK_SCALE, 50.0);
920  setParameterSigma(MAP_ROTATION, 0.1);
921 // setParameterSigma(YAW_OFFSET, 0.001);
922 }
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)

◆ invert()

NEWMAT::Matrix ossimRpcProjection::invert ( const NEWMAT::Matrix &  m) const
protected

stable invert stolen from ossimRpcSolver

stable invert stolen from ossimRpcSolver

Definition at line 1223 of file ossimRpcProjection.cpp.

References SVD().

Referenced by solveLeastSquares().

1224 {
1225  ossim_uint32 idx = 0;
1226  NEWMAT::DiagonalMatrix d;
1227  NEWMAT::Matrix u;
1228  NEWMAT::Matrix v;
1229 
1230  // decompose m.t*m which is stored in Temp into the singular values and vectors.
1231  //
1232  NEWMAT::SVD(m, d, u, v, true, true);
1233 
1234  // invert the diagonal
1235  // this is just doing the reciprical fo all diagonal components and store back int
1236  // d. ths compute d inverse.
1237  //
1238  for(idx=0; idx < (ossim_uint32)d.Ncols(); ++idx)
1239  {
1240  if(d[idx] > 1e-14) //TBC : use DBL_EPSILON ?
1241  {
1242  d[idx] = 1.0/d[idx];
1243  }
1244  else
1245  {
1246  d[idx] = 0.0;
1247 
1248 //DEBUG TBR
1249 cout<<"warning: singular matrix in SVD"<<endl;
1250 
1251  }
1252  }
1253 
1254  //compute inverse of decomposed m;
1255  return v*d*u.t();
1256 }
unsigned int ossim_uint32
void SVD(const Matrix &, DiagonalMatrix &, Matrix &, Matrix &, bool=true, bool=true)
Definition: svd.cpp:26

◆ isAffectedByElevation()

virtual bool ossimRpcProjection::isAffectedByElevation ( ) const
inlinevirtual

Implementation of pure virtual ossimProjection::isAffectedByElevation method.

Returns
true.

Implements ossimProjection.

Definition at line 146 of file ossimRpcProjection.h.

146 { return true; }

◆ lineSampleHeightToWorld()

void ossimRpcProjection::lineSampleHeightToWorld ( const ossimDpt lineSampPt,
const double &  heightAboveEllipsoid,
ossimGpt worldPt 
) const
virtual

METHOD: lineSampleHeightToWorld This is the pure virtual that projects the image point to the given elevation above ellipsoid, thereby bypassing reference to a DEM. Useful for projections that are sensitive to elevation (such as sensor models).

Implements ossimProjection.

Definition at line 341 of file ossimRpcProjection.cpp.

Referenced by lineSampleToWorld().

344 {
345  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection::lineSampleHeightToWorld: entering..." << std::endl;
346 
347  //***
348  // Constants for convergence tests:
349  //***
350  static const int MAX_NUM_ITERATIONS = 10;
351  static const double CONVERGENCE_EPSILON = 0.1; // pixels
352 
353  //***
354  // The image point must be adjusted by the adjustable parameters as well
355  // as the scale and offsets given as part of the RPC param normalization.
356  //
357  // NOTE: U = line, V = sample
358  //***
359  double skew = (image_point.x-theSampOffset - theCrtrackOffset)*theYawSkew;
360  double U = (image_point.y-theLineOffset - theIntrackOffset+skew) / (theLineScale+theIntrackScale);
361  double V = (image_point.x-theSampOffset - theCrtrackOffset) / (theSampScale+theCrtrackScale);
362 
363  //***
364  // Rotate the normalized U, V by the map rotation error (adjustable param):
365  //***
366  double U_rot = theCosMapRot*U - theSinMapRot*V;
367  double V_rot = theSinMapRot*U + theCosMapRot*V;
368  U = U_rot; V = V_rot;
369 
370 
371  // now apply adjust intrack and cross track
372  //***
373  // Initialize quantities to be used in the iteration for ground point:
374  //***
375  double nlat = 0.0; // normalized latitude
376  double nlon = 0.0; // normalized longitude
377 
378  double nhgt;
379 
380  if(ossim::isnan(ellHeight))
381  {
382  nhgt = (theHgtScale - theHgtOffset) / theHgtScale; // norm height
383  }
384  else
385  {
386  nhgt = (ellHeight - theHgtOffset) / theHgtScale; // norm height
387  }
388 
389  double epsilonU = CONVERGENCE_EPSILON/(theLineScale+theIntrackScale);
390  double epsilonV = CONVERGENCE_EPSILON/(theSampScale+theCrtrackScale);
391  int iteration = 0;
392 
393  //***
394  // Declare variables only once outside the loop. These include:
395  // * polynomials (numerators Pu, Pv, and denominators Qu, Qv),
396  // * partial derivatives of polynomials wrt X, Y,
397  // * computed normalized image point: Uc, Vc,
398  // * residuals of normalized image point: deltaU, deltaV,
399  // * partial derivatives of Uc and Vc wrt X, Y,
400  // * corrections to normalized lat, lon: deltaLat, deltaLon.
401  //***
402  double Pu, Qu, Pv, Qv;
403  double dPu_dLat, dQu_dLat, dPv_dLat, dQv_dLat;
404  double dPu_dLon, dQu_dLon, dPv_dLon, dQv_dLon;
405  double Uc, Vc;
406  double deltaU, deltaV;
407  double dU_dLat, dU_dLon, dV_dLat, dV_dLon, W;
408  double deltaLat, deltaLon;
409 
410  //***
411  // Now iterate until the computed Uc, Vc is within epsilon of the desired
412  // image point U, V:
413  //***
414  do
415  {
416  //***
417  // Calculate the normalized line and sample Uc, Vc as ratio of
418  // polynomials Pu, Qu and Pv, Qv:
419  //***
420  Pu = polynomial(nlat, nlon, nhgt, theLineNumCoef);
421  Qu = polynomial(nlat, nlon, nhgt, theLineDenCoef);
422  Pv = polynomial(nlat, nlon, nhgt, theSampNumCoef);
423  Qv = polynomial(nlat, nlon, nhgt, theSampDenCoef);
424  Uc = Pu/Qu;
425  Vc = Pv/Qv;
426 
427  //***
428  // Compute residuals between desired and computed line, sample:
429  //***
430  deltaU = U - Uc;
431  deltaV = V - Vc;
432 
433  //***
434  // Check for convergence and skip re-linearization if converged:
435  //***
436  if ((fabs(deltaU) > epsilonU) || (fabs(deltaV) > epsilonV))
437  {
438  //***
439  // Analytically compute the partials of each polynomial wrt lat, lon:
440  //***
441  dPu_dLat = dPoly_dLat(nlat, nlon, nhgt, theLineNumCoef);
442  dQu_dLat = dPoly_dLat(nlat, nlon, nhgt, theLineDenCoef);
443  dPv_dLat = dPoly_dLat(nlat, nlon, nhgt, theSampNumCoef);
444  dQv_dLat = dPoly_dLat(nlat, nlon, nhgt, theSampDenCoef);
445  dPu_dLon = dPoly_dLon(nlat, nlon, nhgt, theLineNumCoef);
446  dQu_dLon = dPoly_dLon(nlat, nlon, nhgt, theLineDenCoef);
447  dPv_dLon = dPoly_dLon(nlat, nlon, nhgt, theSampNumCoef);
448  dQv_dLon = dPoly_dLon(nlat, nlon, nhgt, theSampDenCoef);
449 
450  //***
451  // Analytically compute partials of quotients U and V wrt lat, lon:
452  //***
453  dU_dLat = (Qu*dPu_dLat - Pu*dQu_dLat)/(Qu*Qu);
454  dU_dLon = (Qu*dPu_dLon - Pu*dQu_dLon)/(Qu*Qu);
455  dV_dLat = (Qv*dPv_dLat - Pv*dQv_dLat)/(Qv*Qv);
456  dV_dLon = (Qv*dPv_dLon - Pv*dQv_dLon)/(Qv*Qv);
457 
458  W = dU_dLon*dV_dLat - dU_dLat*dV_dLon;
459 
460  //***
461  // Now compute the corrections to normalized lat, lon:
462  //***
463  deltaLat = (dU_dLon*deltaV - dV_dLon*deltaU) / W;
464  deltaLon = (dV_dLat*deltaU - dU_dLat*deltaV) / W;
465  nlat += deltaLat;
466  nlon += deltaLon;
467  }
468 
469  iteration++;
470 
471  } while (((fabs(deltaU)>epsilonU) || (fabs(deltaV)>epsilonV))
472  && (iteration < MAX_NUM_ITERATIONS));
473 
474  //***
475  // Test for exceeding allowed number of iterations. Flag error if so:
476  //***
477  if (iteration == MAX_NUM_ITERATIONS)
478  {
479  ossimNotify(ossimNotifyLevel_WARN) << "WARNING ossimRpcProjection::lineSampleHeightToWorld: \nMax number of iterations reached in ground point "
480  << "solution. Results are inaccurate." << endl;
481  }
482 
483  //***
484  // Now un-normalize the ground point lat, lon and establish return quantity:
485  //***
486  gpt.lat = nlat*theLatScale + theLatOffset;
487  gpt.lon = nlon*theLonScale + theLonOffset;
488  gpt.hgt = ellHeight;
489 
490 }
double dPoly_dLat(const double &nlat, const double &nlon, const double &nhgt, const double *coeffs) const
double polynomial(const double &nlat, const double &nlon, const double &nhgt, const double *coeffs) const
double dPoly_dLon(const double &nlat, const double &nlon, const double &nhgt, const double *coeffs) const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.
Definition: ossimCommon.h:91

◆ lineSampleToWorld()

void ossimRpcProjection::lineSampleToWorld ( const ossimDpt lineSampPt,
ossimGpt worldPt 
) const
virtual

METHOD: lineSampleToWorld() Performs the inverse projection from line, sample to ground (world):

Implements ossimProjection.

Definition at line 316 of file ossimRpcProjection.cpp.

References ossimDpt::hasNans(), ossimGpt::height(), lineSampleHeightToWorld(), and ossimGpt::makeNan().

Referenced by getMetersPerPixel().

318 {
319  if(!imagePoint.hasNans())
320  {
321 
322  lineSampleHeightToWorld(imagePoint,
323  worldPoint.height(),
324  worldPoint);
325  }
326  else
327  {
328  worldPoint.makeNan();
329  }
330 }
virtual void lineSampleHeightToWorld(const ossimDpt &image_point, const double &heightEllipsoid, ossimGpt &worldPoint) const

◆ loadState()

bool ossimRpcProjection::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 ossimProjection.

Definition at line 715 of file ossimRpcProjection.cpp.

Referenced by optimizeFit(), and setupOptimizer().

717 {
718  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection::loadState(): entering..." << std::endl;
719 
720  const char* value;
721  const char* keyword;
722 
723  //***
724  // Pass on to the base-class for parsing first:
725  //***
726  bool success = ossimProjection::loadState(kwl, prefix);
727  if (!success)
728  {
729  theErrorStatus++;
730  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection::loadState(): returning with error..." << std::endl;
731  return false;
732  }
733 
734  //***
735  // Continue parsing for local members:
736  //***
737  keyword = POLY_TYPE_KW;
738  value = kwl.find(prefix, keyword);
739  if (!value)
740  {
741  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
742  << "<" << keyword << ">. Check the keywordlist for proper syntax."
743  << std::endl;
744  return false;
745  }
746  thePolyType = (PolynomialType) value[0];
747 
748  keyword = LINE_SCALE_KW;
749  value = kwl.find(prefix, keyword);
750  if (!value)
751  {
752  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
753  << "<" << keyword << ">. Check the keywordlist for proper syntax."
754  << std::endl;
755  return false;
756  }
757  theLineScale = ossimString(value).toDouble();
758 
759  keyword = SAMP_SCALE_KW;
760  value = kwl.find(prefix, keyword);
761  if (!value)
762  {
763  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
764  << "<" << keyword << ">. Check the keywordlist for proper syntax."
765  << std::endl;
766  return false;
767  }
768  theSampScale = ossimString(value).toDouble();
769 
770  keyword = LAT_SCALE_KW;
771  value = kwl.find(prefix, keyword);
772  if (!value)
773  {
774  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
775  << "<" << keyword << ">. Check the keywordlist for proper syntax."
776  << std::endl;
777  return false;
778  }
779  theLatScale = ossimString(value).toDouble();
780 
781  keyword = LON_SCALE_KW;
782  value = kwl.find(prefix, keyword);
783  if (!value)
784  {
785  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
786  << "<" << keyword << ">. Check the keywordlist for proper syntax."
787  << std::endl;
788  return false;
789  }
790  theLonScale = ossimString(value).toDouble();
791 
792  keyword = HGT_SCALE_KW;
793  value = kwl.find(prefix, keyword);
794  if (!value)
795  {
796  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
797  << "<" << keyword << ">. Check the keywordlist for proper syntax."
798  << std::endl;
799  return false;
800  }
801  theHgtScale = ossimString(value).toDouble();
802 
803  keyword = LINE_OFFSET_KW;
804  value = kwl.find(prefix, keyword);
805  if (!value)
806  {
807  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
808  << "<" << keyword << ">. Check the keywordlist for proper syntax."
809  << std::endl;
810  return false;
811  }
813 
814  keyword = SAMP_OFFSET_KW;
815  value = kwl.find(prefix, keyword);
816  if (!value)
817  {
818  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
819  << "<" << keyword << ">. Check the keywordlist for proper syntax."
820  << std::endl;
821  return false;
822  }
824 
825  keyword = LAT_OFFSET_KW;
826  value = kwl.find(prefix, keyword);
827  if (!value)
828  {
829  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
830  << "<" << keyword << ">. Check the keywordlist for proper syntax."
831  << std::endl;
832  return false;
833  }
834  theLatOffset = ossimString(value).toDouble();
835 
836  keyword = LON_OFFSET_KW;
837  value = kwl.find(prefix, keyword);
838  if (!value)
839  {
840  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
841  << "<" << keyword << ">. Check the keywordlist for proper syntax."
842  << std::endl;
843  return false;
844  }
845  theLonOffset = ossimString(value).toDouble();
846 
847  keyword = HGT_OFFSET_KW;
848  value = kwl.find(prefix, keyword);
849  if (!value)
850  {
851  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
852  << "<" << keyword << ">. Check the keywordlist for proper syntax."
853  << std::endl;
854  return false;
855  }
856  theHgtOffset = ossimString(value).toDouble();
857 
858  for (int i=0; i<NUM_COEFFS; i++)
859  {
860  value = kwl.find(prefix, (LINE_NUM_COEF_KW+ossimString::toString(i)).c_str());
861  if (!value)
862  {
863  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
864  << "<" << keyword << ">. Check the keywordlist for proper syntax."
865  << std::endl;
866  return false;
867  }
868  theLineNumCoef[i] = ossimString(value).toDouble();
869 
870  value = kwl.find(prefix, (LINE_DEN_COEF_KW+ossimString::toString(i)).c_str());
871  if (!value)
872  {
873  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
874  << "<" << keyword << ">. Check the keywordlist for proper syntax."
875  << std::endl;
876  return false;
877  }
878  theLineDenCoef[i] = ossimString(value).toDouble();
879 
880  value = kwl.find(prefix, (SAMP_NUM_COEF_KW+ossimString::toString(i)).c_str());
881  if (!value)
882  {
883  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
884  << "<" << keyword << ">. Check the keywordlist for proper syntax."
885  << std::endl;
886  return false;
887  }
888  theSampNumCoef[i] = ossimString(value).toDouble();
889 
890  value = kwl.find(prefix, (SAMP_DEN_COEF_KW+ossimString::toString(i)).c_str());
891  if (!value)
892  {
893  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::loadState(): Error encountered parsing the following required keyword: "
894  << "<" << keyword << ">. Check the keywordlist for proper syntax."
895  << std::endl;
896  return false;
897  }
898  theSampDenCoef[i] = ossimString(value).toDouble();
899  }
900 
901  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection::loadState(): returning..." << std::endl;
902 
903  return true;
904 }
const char * find(const char *key) const
static ossimString toString(bool aValue)
Numeric to string methods.
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
double toDouble() const
PolynomialType thePolyType
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ operator=()

ossimRpcProjection & ossimRpcProjection::operator= ( const ossimRpcProjection source)

Definition at line 167 of file ossimRpcProjection.cpp.

References ossimOptimizableProjection::operator=(), theHgtOffset, theHgtScale, theLatOffset, theLatScale, theLineDenCoef, theLineNumCoef, theLineOffset, theLineScale, theLonOffset, theLonScale, thePolyType, theSampDenCoef, theSampNumCoef, theSampOffset, and theSampScale.

168 {
169  if (this != &source)
170  {
172 
173  thePolyType = source.thePolyType;
174  theLineScale = source.theLineScale;
175  theSampScale = source.theSampScale;
176  theLatScale = source.theLatScale;
177  theLonScale = source.theLonScale;
178  theHgtScale = source.theHgtScale;
179  theLineOffset = source.theLineOffset;
180  theSampOffset = source.theSampOffset;
181  theLatOffset = source.theLatOffset;
182  theLonOffset = source.theLonOffset;
183  theHgtOffset = source.theHgtOffset;
184  for (int i=0; i<20; i++)
185  {
186  theLineNumCoef[i] = source.theLineNumCoef[i];
187  theLineDenCoef[i] = source.theLineDenCoef[i];
188  theSampNumCoef[i] = source.theSampNumCoef[i];
189  theSampDenCoef[i] = source.theSampDenCoef[i];
190  }
191  }
192  return *this;
193 }
virtual ossimOptimizableProjection & operator=(const ossimOptimizableProjection &source)
PolynomialType thePolyType

◆ operator==()

bool ossimRpcProjection::operator== ( const ossimProjection projection) const
virtual

OPERATOR: == Compares this instance with arg projection.

Implements ossimProjection.

Definition at line 529 of file ossimRpcProjection.cpp.

530 {
531  if(&projection == this) return true;
532 
533  // not implemented yet
534  //
535  return false;
536 }

◆ optimizeFit()

double ossimRpcProjection::optimizeFit ( const ossimTieGptSet tieSet,
double *  targetVariance = NULL 
)
virtual

optimizeFit() adjusts projection to GLOBALLY fit best to ALL tie points (no outlier rejection) can select an optional threshold for accuracy

RETURNS : resulting image error variance of fitted model, or negative value for error

IMPORTANT : the unit for *targetVariance and the returned value is : meters^2 when useForward() is true OR pixel^2 if useForward() is false

Implements ossimOptimizableProjection.

Definition at line 1024 of file ossimRpcProjection.cpp.

References ossimRpcSolver::getRmsError(), ossimRpcSolver::getRpcModel(), ossimTieGptSet::getSlaveMasterPoints(), loadState(), ossimNotify(), ossimNotifyLevel_FATAL, ossimRpcModel::saveState(), and ossimRpcSolver::solveCoefficients().

1025 {
1026  //NOTE : ignore targetVariance
1027  ossimRefPtr<ossimRpcSolver> solver = new ossimRpcSolver(false, false); //TBD : choices should be part of setupFromString
1028 
1029  std::vector<ossimDpt> imagePoints;
1030  std::vector<ossimGpt> groundPoints;
1031  tieSet.getSlaveMasterPoints(imagePoints, groundPoints);
1032  solver->solveCoefficients(imagePoints, groundPoints);
1033 
1034  const ossimRefPtr< ossimRpcModel > optProj = solver->getRpcModel();
1035  if (!optProj)
1036  {
1037  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL ossimRpcProjection::optimizeFit(): error when optimizing the RPC with given tie points"
1038  << std::endl;
1039  return -1.0;
1040  }
1041 
1042  ossimKeywordlist kwl;
1043  optProj->saveState(kwl);
1044  this->loadState(kwl);
1045 
1046  return std::pow(solver->getRmsError(), 2); //variance in pixel^2
1047 }
void getSlaveMasterPoints(std::vector< ossimDpt > &imv, std::vector< ossimGpt > &gdv) const
Represents serializable keyword/value map.
void solveCoefficients(const ossimDrect &imageBounds, ossimProjection *imageProj, ossim_uint32 xSamples=8, ossim_uint32 ySamples=8)
This will convert any projector to an RPC model.
const ossimRefPtr< ossimRpcModel > getRpcModel() const
Fetches the solved-for RPC model.
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
saveState Fulfills ossimObject base-class pure virtuals.
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
double getRmsError() const
This currently only support Rational poilynomial B format.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ origin()

ossimGpt ossimRpcProjection::origin ( ) const
virtual

METHOD: origin() Returns projection's ground point origin. That is the GP corresponding to line=0, sample=0.

Implements ossimProjection.

Definition at line 492 of file ossimRpcProjection.cpp.

References theHgtOffset, theLatOffset, and theLonOffset.

493 {
494  return ossimGpt(theLatOffset,
495  theLonOffset,
496  theHgtOffset);
497 }

◆ polynomial()

double ossimRpcProjection::polynomial ( const double &  nlat,
const double &  nlon,
const double &  nhgt,
const double *  coeffs 
) const
protected

Definition at line 544 of file ossimRpcProjection.cpp.

References A, and thePolyType.

546 {
547  double r;
548 
549  if (thePolyType == A)
550  {
551  r = c[ 0] + c[ 1]*L + c[ 2]*P + c[ 3]*H +
552  c[ 4]*L*P + c[ 5]*L*H + c[ 6]*P*H + c[ 7]*L*P*H +
553  c[ 8]*L*L + c[ 9]*P*P + c[10]*H*H + c[11]*L*L*L +
554  c[12]*L*L*P + c[13]*L*L*H + c[14]*L*P*P + c[15]*P*P*P +
555  c[16]*P*P*H + c[17]*L*H*H + c[18]*P*H*H + c[19]*H*H*H;
556  }
557  else
558  {
559  r = c[ 0] + c[ 1]*L + c[ 2]*P + c[ 3]*H +
560  c[ 4]*L*P + c[ 5]*L*H + c[ 6]*P*H + c[ 7]*L*L +
561  c[ 8]*P*P + c[ 9]*H*H + c[10]*L*P*H + c[11]*L*L*L +
562  c[12]*L*P*P + c[13]*L*H*H + c[14]*L*L*P + c[15]*P*P*P +
563  c[16]*P*H*H + c[17]*L*L*H + c[18]*P*P*H + c[19]*H*H*H;
564  }
565 
566  return r;
567 }
PolynomialType thePolyType

◆ print()

std::ostream & ossimRpcProjection::print ( std::ostream &  out) const
virtual

METHOD: print() Extends base-class implementation. Dumps contents of object to ostream.

Reimplemented from ossimProjection.

Definition at line 624 of file ossimRpcProjection.cpp.

625 {
626  out << "\nDump of ossimRpcProjection object at " << hex << this << ":\n"
627  << POLY_TYPE_KW << ": " << thePolyType << "\n"
628  << LINE_SCALE_KW << ": " << theLineScale << "\n"
629  << SAMP_SCALE_KW << ": " << theSampScale << "\n"
630  << LAT_SCALE_KW << ": " << theLatScale << "\n"
631  << LON_SCALE_KW << ": " << theLonScale << "\n"
632  << HGT_SCALE_KW << ": " << theHgtScale << "\n"
633  << LINE_OFFSET_KW << ": " << theLineOffset << "\n"
634  << SAMP_OFFSET_KW << ": " << theSampOffset << "\n"
635  << LAT_OFFSET_KW << ": " << theLatOffset << "\n"
636  << LON_OFFSET_KW << ": " << theLonOffset << "\n"
637  << HGT_OFFSET_KW << ": " << theHgtOffset << endl;
638 
639  for (int i=0; i<NUM_COEFFS; i++)
640  out<<" "<<LINE_NUM_COEF_KW<<"["<<i<<"]: "<<theLineNumCoef[i]<<endl;
641 
642  out << endl;
643  for (int i=0; i<NUM_COEFFS; i++)
644  out<<" "<<LINE_DEN_COEF_KW<<"["<<i<<"]: "<<theLineDenCoef[i]<<endl;
645 
646  out << endl;
647  for (int i=0; i<NUM_COEFFS; i++)
648  out<<" "<<SAMP_NUM_COEF_KW<<"["<<i<<"]: "<<theSampNumCoef[i]<<endl;
649 
650  out << endl;
651  for (int i=0; i<NUM_COEFFS; i++)
652  out<<" "<<SAMP_DEN_COEF_KW<<"["<<i<<"]: "<<theSampDenCoef[i]<<endl;
653 
654  out << endl;
655 
656  return ossimProjection::print(out);
657 }
virtual std::ostream & print(std::ostream &out) const
Outputs theErrorStatus as an ossimErrorCode and an ossimString.
PolynomialType thePolyType

◆ saveState()

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

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

Reimplemented from ossimProjection.

Definition at line 665 of file ossimRpcProjection.cpp.

667 {
668  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection::saveState(): entering..." << std::endl;
669 
670  kwl.add(prefix, ossimKeywordNames::TYPE_KW, MODEL_TYPE);
671 
672  //***
673  // Hand off to base class for common stuff:
674  //***
675  ossimProjection::saveState(kwl, prefix);
676 
677  kwl.add(prefix,
678  POLY_TYPE_KW,
679  (char)thePolyType,
680  true);
681 
682  kwl.add(prefix, LINE_SCALE_KW, theLineScale);
683  kwl.add(prefix, SAMP_SCALE_KW, theSampScale);
684  kwl.add(prefix, LAT_SCALE_KW, theLatScale);
685  kwl.add(prefix, LON_SCALE_KW, theLonScale);
686  kwl.add(prefix, HGT_SCALE_KW, theHgtScale);
687  kwl.add(prefix, LINE_OFFSET_KW, theLineOffset);
688  kwl.add(prefix, SAMP_OFFSET_KW, theSampOffset);
689  kwl.add(prefix, LAT_OFFSET_KW, theLatOffset);
690  kwl.add(prefix, LON_OFFSET_KW, theLonOffset);
691 
692  kwl.add(prefix, HGT_OFFSET_KW, theHgtOffset);
693 
694  for (int i=0; i<NUM_COEFFS; i++)
695  {
696  kwl.add(prefix, (LINE_NUM_COEF_KW + ossimString::toString(i)).c_str(), theLineNumCoef[i]);
697  kwl.add(prefix, (LINE_DEN_COEF_KW + ossimString::toString(i)).c_str(), theLineDenCoef[i]);
698  kwl.add(prefix, (SAMP_NUM_COEF_KW + ossimString::toString(i)).c_str(), theSampNumCoef[i]);
699  kwl.add(prefix, (SAMP_DEN_COEF_KW + ossimString::toString(i)).c_str(), theSampDenCoef[i]);
700  }
701 
702  saveAdjustments(kwl, prefix);
703 
704  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection::saveState(): returning..." << std::endl;
705  return true;
706 }
bool saveAdjustments(ossimKeywordlist &kwl, const ossimString &prefix=ossimString("")) const
Save all adjustments to the KWL file.
static ossimString toString(bool aValue)
Numeric to string methods.
static const char * TYPE_KW
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
PolynomialType thePolyType
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ setAttributes()

void ossimRpcProjection::setAttributes ( ossim_float64  theSampleOffset,
ossim_float64  theLineOffset,
ossim_float64  theSampleScale,
ossim_float64  theLineScale,
ossim_float64  theLatOffset,
ossim_float64  theLonOffset,
ossim_float64  theHeightOffset,
ossim_float64  theLatScale,
ossim_float64  theLonScale,
ossim_float64  theHeightScale,
const std::vector< double > &  xNumeratorCoeffs,
const std::vector< double > &  xDenominatorCoeffs,
const std::vector< double > &  yNumeratorCoeffs,
const std::vector< double > &  yDenominatorCoeffs,
PolynomialType  polyType = B 
)

Definition at line 195 of file ossimRpcProjection.cpp.

References theHgtOffset, theHgtScale, theLatOffset, theLatScale, theLineDenCoef, theLineNumCoef, theLineOffset, theLineScale, theLonOffset, theLonScale, thePolyType, theSampDenCoef, theSampNumCoef, theSampOffset, and theSampScale.

210 {
211  thePolyType = polyType;
212 
213  theLineScale = lineScale;
214  theSampScale = sampleScale;
215  theLatScale = latScale;
216  theLonScale = lonScale;
217  theHgtScale = heightScale;
218  theLineOffset = lineOffset;
219  theSampOffset = sampleOffset;
220  theLatOffset = latOffset;
221  theLonOffset = lonOffset;
222  theHgtOffset = heightOffset;
223 
224  if(xNumeratorCoeffs.size() == 20)
225  {
226  std::copy(xNumeratorCoeffs.begin(),
227  xNumeratorCoeffs.end(),
229  }
230  if(xDenominatorCoeffs.size() == 20)
231  {
232  std::copy(xDenominatorCoeffs.begin(),
233  xDenominatorCoeffs.end(),
235  }
236  if(yNumeratorCoeffs.size() == 20)
237  {
238  std::copy(yNumeratorCoeffs.begin(),
239  yNumeratorCoeffs.end(),
241  }
242  if(yDenominatorCoeffs.size() == 20)
243  {
244  std::copy(yDenominatorCoeffs.begin(),
245  yDenominatorCoeffs.end(),
247  }
248 }
PolynomialType thePolyType

◆ setupOptimizer()

bool ossimRpcProjection::setupOptimizer ( const ossimString setup)
virtual

setupFromString() Derived classes should implement as needed. Initialize parameters needed for optimizeFit and degreesOfFreedom

Returns
This implementation does nothing and returns false.

Reimplemented from ossimOptimizableProjection.

Definition at line 936 of file ossimRpcProjection.cpp.

References ossimKeywordlist::addFile(), ossimKeywordlist::clear(), ossimProjectionFactoryRegistry::createProjection(), ossimProjectionFactoryRegistry::instance(), loadState(), ossimProjection::saveState(), and ossimRefPtr< T >::valid().

937 {
938  ossimKeywordlist kwl;
939 
940  if(kwl.addFile(ossimFilename(setup)))
941  {
942  return loadState(kwl);
943  }
944  else
945  {
947  if(proj.valid())
948  {
949  kwl.clear();
950  proj->saveState(kwl);
951 
952  return loadState(kwl);
953  }
954  }
955 
956  return false;
957 }
Represents serializable keyword/value map.
bool addFile(const char *file)
bool valid() const
Definition: ossimRefPtr.h:75
ossimProjection * createProjection(const ossimFilename &filename, ossim_uint32 entryIdx) const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
static ossimProjectionFactoryRegistry * instance()
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const

◆ solveLeastSquares()

NEWMAT::ColumnVector ossimRpcProjection::solveLeastSquares ( NEWMAT::SymmetricMatrix &  A,
NEWMAT::ColumnVector &  r 
) const
protected

solves Ax = r , with A symmetric positive definite A can be rank deficient size of A is typically between 10 and 100 rows

Definition at line 1213 of file ossimRpcProjection.cpp.

References A, invert(), and x.

1214 {
1215  NEWMAT::ColumnVector x = invert(A)*r;
1216  return x;
1217 }
ossim_uint32 x
NEWMAT::Matrix invert(const NEWMAT::Matrix &m) const
stable invert stolen from ossimRpcSolver

◆ useForward()

virtual bool ossimRpcProjection::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 122 of file ossimRpcProjection.h.

Referenced by buildNormalEquation(), and getResidue().

122 {return true;}

◆ worldToLineSample()

void ossimRpcProjection::worldToLineSample ( const ossimGpt world_point,
ossimDpt image_point 
) const
virtual

METHOD: worldToLineSample() Overrides base class implementation. Directly computes line-sample from the polynomials.

Implements ossimProjection.

Definition at line 257 of file ossimRpcProjection.cpp.

259 {
260  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection::worldToLineSample(): entering..." << std::endl;
261 
262  if(ground_point.isLatNan() ||
263  ground_point.isLonNan() )
264  {
265  imgPt.makeNan();
266  return;
267  }
268 
269  //*
270  // Normalize the lat, lon, hgt:
271  //*
272  double nlat = (ground_point.lat - theLatOffset) / theLatScale;
273  double nlon = (ground_point.lon - theLonOffset) / theLonScale;
274  double nhgt;
275 
276  if(ossim::isnan(ground_point.hgt))
277  {
278  nhgt = (theHgtScale - theHgtOffset) / theHgtScale;
279  }
280  else
281  {
282  nhgt = (ground_point.hgt - theHgtOffset) / theHgtScale;
283  }
284 
285 
286  //***
287  // Compute the adjusted, normalized line (U) and sample (V):
288  //***
289  double Pu = polynomial(nlat, nlon, nhgt, theLineNumCoef);
290  double Qu = polynomial(nlat, nlon, nhgt, theLineDenCoef);
291  double Pv = polynomial(nlat, nlon, nhgt, theSampNumCoef);
292  double Qv = polynomial(nlat, nlon, nhgt, theSampDenCoef);
293  double U_rot = Pu / Qu;
294  double V_rot = Pv / Qv;
295 
296  //***
297  // U, V are normalized quantities. Need now to establish the image file
298  // line and sample. First, back out the adjustable parameter effects
299  // starting with rotation:
300  //***
301  double U = U_rot*theCosMapRot + V_rot*theSinMapRot;
302  double V = V_rot*theCosMapRot - U_rot*theSinMapRot;
303 
304  //***
305  // Now back out skew, scale, and offset adjustments:
306  //***
309 
310 
311  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimRpcProjection::worldToLineSample(): returning..." << std::endl;
312 
313  return;
314 }
double polynomial(const double &nlat, const double &nlon, const double &nhgt, const double *coeffs) const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.
Definition: ossimCommon.h:91

Member Data Documentation

◆ theCosMapRot

double ossimRpcProjection::theCosMapRot
protected

Definition at line 232 of file ossimRpcProjection.h.

◆ theCrtrackOffset

double ossimRpcProjection::theCrtrackOffset
protected

Definition at line 228 of file ossimRpcProjection.h.

◆ theCrtrackScale

double ossimRpcProjection::theCrtrackScale
protected

Definition at line 230 of file ossimRpcProjection.h.

◆ theHgtOffset

double ossimRpcProjection::theHgtOffset
protected

Definition at line 214 of file ossimRpcProjection.h.

Referenced by operator=(), origin(), and setAttributes().

◆ theHgtScale

double ossimRpcProjection::theHgtScale
protected

Definition at line 209 of file ossimRpcProjection.h.

Referenced by operator=(), and setAttributes().

◆ theIntrackOffset

double ossimRpcProjection::theIntrackOffset
protected

Definition at line 227 of file ossimRpcProjection.h.

Referenced by adjustableParametersChanged().

◆ theIntrackScale

double ossimRpcProjection::theIntrackScale
protected

Definition at line 229 of file ossimRpcProjection.h.

◆ theLatOffset

double ossimRpcProjection::theLatOffset
protected

Definition at line 212 of file ossimRpcProjection.h.

Referenced by operator=(), origin(), and setAttributes().

◆ theLatScale

double ossimRpcProjection::theLatScale
protected

Definition at line 207 of file ossimRpcProjection.h.

Referenced by operator=(), and setAttributes().

◆ theLineDenCoef

double ossimRpcProjection::theLineDenCoef[20]
protected

Definition at line 220 of file ossimRpcProjection.h.

Referenced by operator=(), and setAttributes().

◆ theLineNumCoef

double ossimRpcProjection::theLineNumCoef[20]
protected

Definition at line 219 of file ossimRpcProjection.h.

Referenced by operator=(), and setAttributes().

◆ theLineOffset

double ossimRpcProjection::theLineOffset
protected

Definition at line 210 of file ossimRpcProjection.h.

Referenced by getMetersPerPixel(), operator=(), and setAttributes().

◆ theLineScale

double ossimRpcProjection::theLineScale
protected

Definition at line 205 of file ossimRpcProjection.h.

Referenced by operator=(), and setAttributes().

◆ theLonOffset

double ossimRpcProjection::theLonOffset
protected

Definition at line 213 of file ossimRpcProjection.h.

Referenced by operator=(), origin(), and setAttributes().

◆ theLonScale

double ossimRpcProjection::theLonScale
protected

Definition at line 208 of file ossimRpcProjection.h.

Referenced by operator=(), and setAttributes().

◆ thePolyType

PolynomialType ossimRpcProjection::thePolyType
protected

Definition at line 200 of file ossimRpcProjection.h.

Referenced by dPoly_dLat(), dPoly_dLon(), operator=(), polynomial(), and setAttributes().

◆ theSampDenCoef

double ossimRpcProjection::theSampDenCoef[20]
protected

Definition at line 222 of file ossimRpcProjection.h.

Referenced by operator=(), and setAttributes().

◆ theSampNumCoef

double ossimRpcProjection::theSampNumCoef[20]
protected

Definition at line 221 of file ossimRpcProjection.h.

Referenced by operator=(), and setAttributes().

◆ theSampOffset

double ossimRpcProjection::theSampOffset
protected

Definition at line 211 of file ossimRpcProjection.h.

Referenced by getMetersPerPixel(), operator=(), and setAttributes().

◆ theSampScale

double ossimRpcProjection::theSampScale
protected

Definition at line 206 of file ossimRpcProjection.h.

Referenced by operator=(), and setAttributes().

◆ theSinMapRot

double ossimRpcProjection::theSinMapRot
protected

Definition at line 233 of file ossimRpcProjection.h.

◆ theYawSkew

double ossimRpcProjection::theYawSkew
protected

Definition at line 231 of file ossimRpcProjection.h.


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