39 #include <json/json.h> 46 static ossimTrace traceExec (
"ossimRpcModel:exec");
47 static ossimTrace traceDebug (
"ossimRpcModel:debug");
50 static const int NUM_COEFFS = 20;
51 static const char* MODEL_TYPE =
"ossimRpcModel";
52 static const char* POLY_TYPE_KW =
"polynomial_format";
53 static const char* LINE_SCALE_KW =
"line_scale";
54 static const char* SAMP_SCALE_KW =
"samp_scale";
55 static const char* LAT_SCALE_KW =
"lat_scale";
56 static const char* LON_SCALE_KW =
"long_scale";
57 static const char* HGT_SCALE_KW =
"height_scale";
58 static const char* LINE_OFFSET_KW =
"line_off";
59 static const char* SAMP_OFFSET_KW =
"samp_off";
60 static const char* LAT_OFFSET_KW =
"lat_off";
61 static const char* LON_OFFSET_KW =
"long_off";
62 static const char* HGT_OFFSET_KW =
"height_off";
64 static const char* BIAS_ERROR_KW =
"bias_error";
65 static const char* RAND_ERROR_KW =
"rand_error";
67 static const char* LINE_NUM_COEF_KW =
"line_num_coeff_";
68 static const char* LINE_DEN_COEF_KW =
"line_den_coeff_";
69 static const char* SAMP_NUM_COEF_KW =
"samp_num_coeff_";
70 static const char* SAMP_DEN_COEF_KW =
"samp_den_coeff_";
72 static const ossimString PARAM_NAMES[] ={
"intrack_offset",
102 theIntrackOffset(0.0),
103 theCrtrackOffset(0.0),
104 theIntrackScale (0.0),
105 theCrtrackScale (0.0),
122 thePolyType (model.thePolyType),
123 theLineScale (model.theLineScale),
124 theSampScale (model.theSampScale),
125 theLatScale (model.theLatScale),
126 theLonScale (model.theLonScale),
127 theHgtScale (model.theHgtScale),
128 theLineOffset (model.theLineOffset),
129 theSampOffset (model.theSampOffset),
130 theLatOffset (model.theLatOffset),
131 theLonOffset (model.theLonOffset),
132 theHgtOffset (model.theHgtOffset),
133 theIntrackOffset(model.theIntrackOffset),
134 theCrtrackOffset(model.theCrtrackOffset),
135 theIntrackScale(model.theIntrackScale),
136 theCrtrackScale(model.theCrtrackScale),
137 theCosMapRot (model.theCosMapRot),
138 theSinMapRot (model.theSinMapRot),
139 theBiasError (model.theBiasError),
140 theRandError (model.theRandError)
142 for (
int i=0; i<20; ++i )
169 const std::vector<double>& xNumeratorCoeffs,
170 const std::vector<double>& xDenominatorCoeffs,
171 const std::vector<double>& yNumeratorCoeffs,
172 const std::vector<double>& yDenominatorCoeffs,
189 if(xNumeratorCoeffs.size() == 20)
191 std::copy(xNumeratorCoeffs.begin(),
192 xNumeratorCoeffs.end(),
195 if(xDenominatorCoeffs.size() == 20)
197 std::copy(xDenominatorCoeffs.begin(),
198 xDenominatorCoeffs.end(),
201 if(yNumeratorCoeffs.size() == 20)
203 std::copy(yNumeratorCoeffs.begin(),
204 yNumeratorCoeffs.end(),
207 if(yDenominatorCoeffs.size() == 20)
209 std::copy(yDenominatorCoeffs.begin(),
210 yDenominatorCoeffs.end(),
226 <<
"ossimRpcModel::setAttributes Caught Exception:\n" 227 << e.
what() << std::endl;
241 bool initNominalPostionErrorFlag)
245 if (initNominalPostionErrorFlag)
305 double U_rot = Pu / Qu;
306 double V_rot = Pv / Qv;
443 const double& ellHeight,
468 static const int MAX_NUM_ITERATIONS = 10;
469 static const double CONVERGENCE_EPSILON = 0.1;
485 U = U_rot; V = V_rot;
519 double Pu, Qu, Pv, Qv;
520 double dPu_dLat, dQu_dLat, dPv_dLat, dQv_dLat;
521 double dPu_dLon, dQu_dLon, dPv_dLon, dQv_dLon;
523 double deltaU, deltaV;
524 double dU_dLat, dU_dLon, dV_dLat, dV_dLon, W;
525 double deltaLat, deltaLon;
553 if ((fabs(deltaU) > epsilonU) || (fabs(deltaV) > epsilonV))
570 dU_dLat = (Qu*dPu_dLat - Pu*dQu_dLat)/(Qu*Qu);
571 dU_dLon = (Qu*dPu_dLon - Pu*dQu_dLon)/(Qu*Qu);
572 dV_dLat = (Qv*dPv_dLat - Pv*dQv_dLat)/(Qv*Qv);
573 dV_dLon = (Qv*dPv_dLon - Pv*dQv_dLon)/(Qv*Qv);
575 W = dU_dLon*dV_dLat - dU_dLat*dV_dLon;
580 deltaLat = (dU_dLon*deltaV - dV_dLon*deltaU) / W;
581 deltaLon = (dV_dLat*deltaU - dU_dLat*deltaV) / W;
594 }
while (((fabs(deltaU)>epsilonU) || (fabs(deltaV)>epsilonV))
595 && (iteration < MAX_NUM_ITERATIONS));
600 if (iteration == MAX_NUM_ITERATIONS)
603 <<
"solution. Results are inaccurate." << endl;
622 const double& H,
const double* c)
const 628 r = c[ 0] + c[ 1]*L + c[ 2]*P + c[ 3]*H +
629 c[ 4]*L*P + c[ 5]*L*H + c[ 6]*P*H + c[ 7]*L*P*H +
630 c[ 8]*L*L + c[ 9]*P*P + c[10]*H*H + c[11]*L*L*L +
631 c[12]*L*L*P + c[13]*L*L*H + c[14]*L*P*P + c[15]*P*P*P +
632 c[16]*P*P*H + c[17]*L*H*H + c[18]*P*H*H + c[19]*H*H*H;
636 r = c[ 0] + c[ 1]*L + c[ 2]*P + c[ 3]*H +
637 c[ 4]*L*P + c[ 5]*L*H + c[ 6]*P*H + c[ 7]*L*L +
638 c[ 8]*P*P + c[ 9]*H*H + c[10]*L*P*H + c[11]*L*L*L +
639 c[12]*L*P*P + c[13]*L*H*H + c[14]*L*L*P + c[15]*P*P*P +
640 c[16]*P*H*H + c[17]*L*L*H + c[18]*P*P*H + c[19]*H*H*H;
653 const double& H,
const double* c)
const 659 dr = c[2] + c[4]*L + c[6]*H + c[7]*L*H + 2*c[9]*P + c[12]*L*L +
660 2*c[14]*L*P + 3*c[15]*P*P +2*c[16]*P*H + c[18]*H*H;
664 dr = c[2] + c[4]*L + c[6]*H + 2*c[8]*P + c[10]*L*H + 2*c[12]*L*P +
665 c[14]*L*L + 3*c[15]*P*P + c[16]*H*H + 2*c[18]*P*H;
678 const double& H,
const double* c)
const 684 dr = c[1] + c[4]*P + c[5]*H + c[7]*P*H + 2*c[8]*L + 3*c[11]*L*L +
685 2*c[12]*L*P + 2*c[13]*L*H + c[14]*P*P + c[17]*H*H;
689 dr = c[1] + c[4]*P + c[5]*H + 2*c[7]*L + c[10]*P*H + 3*c[11]*L*L +
690 c[12]*P*P + c[13]*H*H + 2*c[14]*P*L + 2*c[17]*L*H;
702 const double& H,
const double* c)
const 708 dr = c[3] + c[5]*L + c[6]*P + c[7]*L*P + 2*c[10]*H + c[13]*L*L +
709 c[16]*P*P + 2*c[17]*L*H + 2*c[18]*P*H + 3*c[19]*H*H;
713 dr = c[3] + c[5]*L + c[6]*P + 2*c[9]*H + c[10]*L*P + 2*c[13]*L*H +
714 2*c[16]*P*H + c[17]*L*L + c[18]*P*P + 3*c[19]*H*H;
734 for (
int i=0; i<numParams; i++)
761 out <<
"\nDump of ossimRpcModel object at " << std::hex <<
this << std::dec <<
":\n" 777 for (
int i=0; i<NUM_COEFFS; i++)
778 out<<
" "<<LINE_NUM_COEF_KW<<
"["<<i<<
"]: "<<
theLineNumCoef[i]<<std::endl;
781 for (
int i=0; i<NUM_COEFFS; i++)
782 out<<
" "<<LINE_DEN_COEF_KW<<
"["<<i<<
"]: "<<
theLineDenCoef[i]<<std::endl;
785 for (
int i=0; i<NUM_COEFFS; i++)
786 out<<
" "<<SAMP_NUM_COEF_KW<<
"["<<i<<
"]: "<<
theSampNumCoef[i]<<std::endl;
789 for (
int i=0; i<NUM_COEFFS; i++)
790 out<<
" "<<SAMP_DEN_COEF_KW<<
"["<<i<<
"]: "<<
theSampDenCoef[i]<<std::endl;
804 const char* prefix)
const 832 for (
int i=0; i<NUM_COEFFS; i++)
836 os << setw(2) << setfill(
'0') << right << i;
838 key = LINE_NUM_COEF_KW;
843 key = LINE_DEN_COEF_KW;
848 key = SAMP_NUM_COEF_KW;
853 key = SAMP_DEN_COEF_KW;
876 <<
"DEBUG ossimRpcModel::loadState(): entering..." << std::endl;
893 <<
"DEBUG ossimRpcModel::loadState(): returning with error..." 902 value = kwl.
find(prefix, BIAS_ERROR_KW);
908 value = kwl.
find(prefix, RAND_ERROR_KW);
914 keyword = POLY_TYPE_KW;
915 value = kwl.
find(prefix, keyword);
919 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 925 keyword = LINE_SCALE_KW;
926 value = kwl.
find(prefix, keyword);
930 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 936 keyword = SAMP_SCALE_KW;
937 value = kwl.
find(prefix, keyword);
941 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 947 keyword = LAT_SCALE_KW;
948 value = kwl.
find(prefix, keyword);
952 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 958 keyword = LON_SCALE_KW;
959 value = kwl.
find(prefix, keyword);
963 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 969 keyword = HGT_SCALE_KW;
970 value = kwl.
find(prefix, keyword);
974 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 980 keyword = LINE_OFFSET_KW;
981 value = kwl.
find(prefix, keyword);
985 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 991 keyword = SAMP_OFFSET_KW;
992 value = kwl.
find(prefix, keyword);
996 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 1002 keyword = LAT_OFFSET_KW;
1003 value = kwl.
find(prefix, keyword);
1007 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 1013 keyword = LON_OFFSET_KW;
1014 value = kwl.
find(prefix, keyword);
1018 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 1024 keyword = HGT_OFFSET_KW;
1025 value = kwl.
find(prefix, keyword);
1029 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 1035 for (
int i=0; i<NUM_COEFFS; i++)
1039 os << setw(2) << setfill(
'0') << right << i;
1041 keyword = LINE_NUM_COEF_KW;
1042 keyword += os.str();
1043 value = kwl.
find(prefix, keyword.
c_str());
1047 <<
"FATAL ossimRpcModel::loadState(): Error encountered parsing the following required keyword: " 1048 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 1054 keyword = LINE_DEN_COEF_KW;
1055 keyword += os.str();
1056 value = kwl.
find(prefix, keyword.
c_str());
1060 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 1066 keyword = SAMP_NUM_COEF_KW;
1067 keyword += os.str();
1068 value = kwl.
find(prefix, keyword.
c_str());
1072 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 1078 keyword = SAMP_DEN_COEF_KW;
1079 keyword += os.str();
1080 value = kwl.
find(prefix, keyword.
c_str());
1084 <<
"<" << keyword <<
">. Check the keywordlist for proper syntax." 1114 "//**************************************************************\n" 1115 "// Template for RPC model keywordlist\n" 1116 "//**************************************************************\n" 1122 <<
"// Derived-class ossimRpcModel Keywords:\n" 1124 << POLY_TYPE_KW <<
": A|B\n" 1126 <<
"// RPC data consists of coefficients and normalization \n" 1127 <<
"// parameters. The RPC keywords used here are compatible with \n" 1128 <<
"// keywords found in Ikonos \"rpc.txt\" files.\n" 1129 <<
"// First are the normalization parameters:\n" 1130 << LINE_OFFSET_KW <<
": <float>\n" 1131 << SAMP_OFFSET_KW <<
": <float>\n" 1132 << LAT_OFFSET_KW <<
": <float>\n" 1133 << LON_OFFSET_KW <<
": <float>\n" 1134 << HGT_OFFSET_KW <<
": <float>\n" 1135 << LINE_SCALE_KW <<
": <float>\n" 1136 << SAMP_SCALE_KW <<
": <float>\n" 1137 << LAT_SCALE_KW <<
": <float>\n" 1138 << LON_SCALE_KW <<
": <float>\n" 1139 << HGT_SCALE_KW <<
": <float>\n" 1140 << BIAS_ERROR_KW <<
": <float>\n" 1141 << RAND_ERROR_KW <<
": <float>\n" 1143 <<
"// RPC Coefficients are specified with indexes. Coefficients \n " 1144 <<
"// are specified for the four polynomials: line numerator, line \n" 1145 <<
"// denominator, sample numerator, and sample denominator:" << endl;
1147 for (
int i=1; i<=20; i++)
1148 os << LINE_NUM_COEF_KW << setw(2) << setfill(
'0') << right
1149 << i <<
": <float>" << endl;
1151 for (
int i=1; i<=20; i++)
1152 os << LINE_DEN_COEF_KW << setw(2) << setfill(
'0') << right
1153 << i <<
": <float>" << endl;
1155 for (
int i=1; i<=20; i++)
1156 os << SAMP_NUM_COEF_KW << setw(2) << setfill(
'0') << right
1157 << i <<
": <float>" << endl;
1159 for (
int i=1; i<=20; i++)
1160 os << SAMP_DEN_COEF_KW << setw(2) << setfill(
'0') << right
1161 << i <<
": <float>" << endl;
1259 double Un = Pu / Qu;
1260 double Vn = Pv / Qv;
1271 double dPu_dLat, dQu_dLat, dPv_dLat, dQv_dLat;
1272 double dPu_dLon, dQu_dLon, dPv_dLon, dQv_dLon;
1273 double dPu_dHgt, dQu_dHgt, dPv_dHgt, dQv_dHgt;
1290 double dU_dLat, dU_dLon, dU_dHgt, dV_dLat, dV_dLon, dV_dHgt;
1291 dU_dLat = (Qu*dPu_dLat - Pu*dQu_dLat)/(Qu*Qu);
1292 dU_dLon = (Qu*dPu_dLon - Pu*dQu_dLon)/(Qu*Qu);
1293 dU_dHgt = (Qu*dPu_dHgt - Pu*dQu_dHgt)/(Qu*Qu);
1294 dV_dLat = (Qv*dPv_dLat - Pv*dQv_dLat)/(Qv*Qv);
1295 dV_dLon = (Qv*dPv_dLon - Pv*dQv_dLon)/(Qv*Qv);
1296 dV_dHgt = (Qv*dPv_dHgt - Pv*dQv_dHgt)/(Qv*Qv);
1315 NEWMAT::Matrix jMat(3,3);
1318 theParWRTx.
u = dU_dLat*jMat(1,1)+dU_dLon*jMat(2,1)+dU_dHgt*jMat(3,1);
1319 theParWRTy.
u = dU_dLat*jMat(1,2)+dU_dLon*jMat(2,2)+dU_dHgt*jMat(3,2);
1320 theParWRTz.
u = dU_dLat*jMat(1,3)+dU_dLon*jMat(2,3)+dU_dHgt*jMat(3,3);
1322 theParWRTx.
v = dV_dLat*jMat(1,1)+dV_dLon*jMat(2,1)+dV_dHgt*jMat(3,1);
1323 theParWRTy.
v = dV_dLat*jMat(1,2)+dV_dLon*jMat(2,2)+dV_dHgt*jMat(3,2);
1324 theParWRTz.
v = dV_dLat*jMat(1,3)+dV_dLon*jMat(2,3)+dV_dHgt*jMat(3,3);
1385 for (
int i=0; i<20; ++i)
1417 #if OSSIM_HAS_JSONCPP 1450 for (
int i=0; i<20; ++i)
1458 Json::Value LINENUMCOEFList;
1459 LINENUMCOEFList[
"LINENUMCOEF"] = LINENUMCOEF.
string();
1460 IMAGE[
"LINENUMCOEFList"] = LINENUMCOEFList;
1462 Json::Value LINEDENCOEFList;
1463 LINEDENCOEFList[
"LINEDENCOEF"] = LINEDENCOEF.
string();
1464 IMAGE[
"LINEDENCOEFList"] = LINEDENCOEFList;
1466 Json::Value SAMPNUMCOEFList;
1467 SAMPNUMCOEFList[
"SAMPNUMCOEF"] = SAMPNUMCOEF.
string();
1468 IMAGE[
"SAMPNUMCOEFList"] = SAMPNUMCOEFList;
1470 Json::Value SAMPDENCOEFList;
1471 SAMPDENCOEFList[
"SAMPDENCOEF"] = SAMPDENCOEF.
string();
1472 IMAGE[
"SAMPDENCOEFList"] = SAMPDENCOEFList;
1475 RPB[
"SATID"] =
"NOT_ASSIGNED";
1476 RPB[
"BANDID"] =
"NOT_ASSIGNED";
1478 RPB[
"SPECID"] =
"RPC00A";
1480 RPB[
"SPECID"] =
"RPC00B";
1481 RPB[
"IMAGE"] = IMAGE;
1491 jsonStream<<
"Error: JSON format not supported."<<endl;
1498 out<<
"satId = \"NOT_ASSIGNED\";\n";
1499 out<<
"bandId = \"NOT_ASSIGNED\";\n";
1500 out<<
"SpecId = \"RPC00B\";\n";
1502 out<<
"BEGIN_GROUP = IMAGE\n";
1516 out<<
"\tlineNumCoef = (\n";
1517 for (
int i=0; i<19; ++i)
1521 out<<
"\tlineDenCoef = (\n";
1522 for (
int i=0; i<19; ++i)
1526 out<<
"\tsampNumCoef = (\n";
1527 for (
int i=0; i<19; ++i)
1531 out<<
"\tsampDenCoef = (\n";
1532 for (
int i=0; i<19; ++i)
1536 out<<
"END_GROUP = IMAGE\n";
PolynomialType thePolyType
virtual void worldToLineSample(const ossimGpt &world_point, ossimDpt &image_point) const
worldToLineSample() Overrides base class implementation.
double theSampNumCoef[20]
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, bool computeGsdFlag=true)
void setParameterDescription(ossim_uint32 idx, const ossimString &descrption)
virtual void imagingRay(const ossimDpt &image_point, ossimEcefRay &image_ray) const
imagingRay() Overrides base class pure virtual.
ossimEcefVector unitVector() const
double computeParameterOffset(ossim_uint32 idx) const
static void writeGeomTemplate(ostream &os)
STATIC METHOD: writeGeomTemplate(ostream) Writes a template of geom keywords processed by loadState a...
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
virtual ossimDpt getForwardDeriv(int parmIdx, const ossimGpt &gpos, double h)
Compute partials of samp/line WRT ground point.
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
double lond() const
Will convert the radian measure to degrees.
virtual ossimObject * dup() const
dup() Returns pointer to a new instance, copy of this.
Represents serializable keyword/value map.
bool addFile(const char *file)
double dPoly_dHgt(const double &nlat, const double &nlon, const double &nhgt, const double *coeffs) const
bool intersectRay(const ossimEcefRay &ray, ossimGpt &gpt, double defaultElevValue=0.0)
METHOD: intersectRay()
const char * find(const char *key) const
double dPoly_dLat(const double &nlat, const double &nlon, const double &nhgt, const double *coeffs) const
static ossimString toString(bool aValue)
Numeric to string methods.
virtual void updateModel()
ossim_float64 hgt
Height in meters above the ellipsiod.
static ossimElevManager * instance()
METHOD: instance() Implements singelton pattern.
void setMetersPerPixel(const ossimDpt &metersPerPixel)
virtual void lineSampleToWorld(const ossimDpt &image_point, ossimGpt &world_point) const
void getRpcParameters(ossimRpcModel::rpcModelStruct &model) const
Returns RPC parameter set in structure.
double latd() const
Will convert the radian measure to degrees.
ossim_uint32 getNumberOfAdjustableParameters() const
static const char * TYPE_KW
double polynomial(const double &nlat, const double &nlon, const double &nhgt, const double *coeffs) const
virtual ossimDpt getForwardDeriv(int parmIdx, const ossimGpt &gpos, double hdelta=1e-11)
virtual void initAdjustableParameters()
const ossimDatum * datum() const
datum().
double theSampDenCoef[20]
double theLineNumCoef[20]
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
virtual std::ostream & print(std::ostream &out) const
print() Extends base-class implementation.
ossimRpcModel()
default constructor
double dPoly_dLon(const double &nlat, const double &nlon, const double &nhgt, const double *coeffs) const
void computeGsd()
This method computes the ground sample distance(gsd) and sets class attributes theGSD and theMeanGSD ...
ossimProjection * createProjection(const ossimFilename &filename, ossim_uint32 entryIdx) const
virtual bool setupOptimizer(const ossimString &init_file)
uses file path to init model
ossim_float64 theNominalPosError
virtual const char * what() const
Returns the error message.
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
saveState Fulfills ossimObject base-class pure virtuals.
virtual ~ossimRpcModel()
virtual destructor
virtual const ossimEllipsoid * ellipsoid() const
virtual void lineSampleHeightToWorld(const ossimDpt &image_point, const double &heightEllipsoid, ossimGpt &worldPoint) const
void setParameterUnit(ossim_uint32 idx, ossimUnitType unit)
void gradient(const ossimEcefPoint &location, ossimEcefVector &result) const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
virtual std::ostream & print(std::ostream &out) const
void setImageOffset(const ossimDpt &offset_to_chip_ul)
Allows setting an offset to a subimage while using the coefficients of a full-image model...
RPC model structure used for access function.
ossimErrorCode theErrorStatus
RTTI_DEF1(ossimRpcModel, "ossimRpcModel", ossimSensorModel)
static void writeGeomTemplate(ostream &os)
static ossimProjectionFactoryRegistry * instance()
ossimDrect theImageClipRect
virtual void setAdjustableParameter(ossim_uint32 idx, double value, bool notify=false)
double getRandError() const
Returns Error - Random.
double getBiasError() const
Returns Error - Bias.
void jacobianWrtEcef(const ossimEcefPoint &location, NEWMAT::Matrix &jMat) const
bool toJSON(std::ostream &json) const
Serializes RPC to JSON format.
void resizeAdjustableParameterArray(ossim_uint32 numberOfParameters)
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string's contents...
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
loadState Fulfills ossimObject base-class pure virtuals.
double theLineDenCoef[20]
void setPositionError(const ossim_float64 &biasError, const ossim_float64 &randomError, bool initNominalPostionErrorFlag)
Sets data member theBiasError, theRandError.
ossimDpt theParWRTx
Partials for current point.
ossimDpt theObs
Observations & residuals for current point.
void setParameterSigma(ossim_uint32 idx, double value, bool notify=false)
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
std::basic_ostream< char > ostream
Base class for char output streams.
bool toRPB(std::ostream &out) const
Serialize to WorldView-style .RPB file to the stream provided.
const std::string & string() const
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.