24 static ossimTrace traceDebug(
"ossimApplanixUtmModel:debug");
28 #ifdef OSSIM_ID_ENABLED 29 static const char OSSIM_ID[] =
"$Id: ossimApplanixUtmModel.cpp 23564 2015-10-02 14:12:25Z dburken $";
54 <<
"ossimApplanixUtmModel::ossimApplanixUtmModel DEBUG:" << endl;
55 #ifdef OSSIM_ID_ENABLED 63 theCompositeMatrix(src.theCompositeMatrix),
64 theCompositeMatrixInverse(src.theCompositeMatrixInverse),
65 theOmega(src.theOmega),
67 theKappa(src.theKappa),
68 theBoreSightTx(src.theBoreSightTx),
69 theBoreSightTy(src.theBoreSightTy),
70 theBoreSightTz(src.theBoreSightTz),
71 thePrincipalPoint(src.thePrincipalPoint),
72 thePixelSize(src.thePixelSize),
73 theFocalLength(src.theFocalLength),
74 theEcefPlatformPosition(src.theEcefPlatformPosition),
75 thePlatformPosition(src.thePlatformPosition),
76 theUtmZone(src.theUtmZone),
77 theUtmHemisphere(src.theUtmHemisphere),
78 theUtmPlatformPosition(src.theUtmPlatformPosition)
123 ecf_ray_dir = ecf_ray_dir*(1.0/ecf_ray_dir.
magnitude());
174 const double& heightEllipsoid,
215 ossimDpt film (scale*camRayDir[0], scale*camRayDir[1]);
239 double degreePerMeter = 1.0/metersPerDegree;
245 double height = gpt.
height();
254 NEWMAT::ColumnVector v(3);
388 const char* prefix)
const 392 kwl.
add(prefix,
"type",
"ossimApplanixUtmModel",
true);
403 kwl.
add(prefix,
"ecef_platform_position",
407 kwl.
add(prefix,
"latlonh_platform_position",
413 "utm_platform_position",
448 std::cout <<
"ossimApplanixUtmModel::loadState: ......... entered" << std::endl;
460 const char* eo_file = kwl.
find(prefix,
"eo_file");
461 const char* eo_id = kwl.
find(prefix,
"eo_id");
462 const char* omega = kwl.
find(prefix,
"omega");
463 const char* phi = kwl.
find(prefix,
"phi");
464 const char* kappa = kwl.
find(prefix,
"kappa");
465 const char* bore_sight_tx = kwl.
find(prefix,
"bore_sight_tx");
466 const char* bore_sight_ty = kwl.
find(prefix,
"bore_sight_ty");
467 const char* bore_sight_tz = kwl.
find(prefix,
"bore_sight_tz");
469 const char* principal_point = kwl.
find(prefix,
"principal_point");
470 const char* pixel_size = kwl.
find(prefix,
"pixel_size");
471 const char* focal_length = kwl.
find(prefix,
"focal_length");
472 const char* latlonh_platform_position = kwl.
find(prefix,
"latlonh_platform_position");
473 const char* utm_platform_position = kwl.
find(prefix,
"utm_platform_position");
474 const char* compute_gsd_flag = kwl.
find(prefix,
"compute_gsd_flag");
475 const char* utm_zone = kwl.
find(prefix,
"utm_zone");
476 const char* utm_hemisphere = kwl.
find(prefix,
"utm_hemisphere");
477 const char* camera_file = kwl.
find(prefix,
"camera_file");
478 const char* shift_values = kwl.
find(prefix,
"shift_values");
492 bool loadedFromEoFile =
false;
510 loadedFromEoFile =
true;
531 theOmega = (*record)[omega].toDouble();
532 thePhi = (*record)[phi].toDouble();
533 theKappa = (*record)[kappa].toDouble();
534 double h = (*record)[height].toDouble();
573 if(!loadedFromEoFile)
577 std::vector<ossimString> splitString;
579 tempString = tempString.
trim();
580 tempString.
split(splitString,
" " );
581 if(splitString.size() == 3)
584 splitString[1].toDouble(),
585 splitString[2].toDouble());
588 if(omega&&phi&&kappa)
594 if(bore_sight_tx&&bore_sight_ty&&bore_sight_tz)
600 double lat=0.0, lon=0.0, h=0.0;
612 if(utm_platform_position)
615 std::vector<ossimString> splitString;
617 tempString = tempString.
trim();
621 tempString.
split(splitString,
" ");
622 if(splitString.size() > 2)
628 if(splitString.size() > 3)
630 datumString = splitString[3];
643 if(heightType ==
"msl")
654 else if(latlonh_platform_position)
656 std::vector<ossimString> splitString;
658 std::string datumString;
659 tempString = tempString.
trim();
660 tempString.
split(splitString,
" ");
661 if(splitString.size() > 2)
663 lat = splitString[0].toDouble();
664 lon = splitString[1].toDouble();
665 h = splitString[2].toDouble();
667 if(splitString.size() > 3)
669 datumString = splitString[3].string();
680 if(heightType ==
"msl")
693 std::vector<ossimString> splitString;
695 tempString = tempString.
trim();
696 tempString.
split(splitString,
" ");
697 if(splitString.size() == 2)
705 std::vector<ossimString> splitString;
707 tempString = tempString.
trim();
708 tempString.
split(splitString,
" ");
709 if(splitString.size() == 2)
724 cameraKwl.
add(camera_file);
725 const char* sensor = cameraKwl.
find(
"sensor");
726 const char* image_size = cameraKwl.
find(prefix,
"image_size");
727 principal_point = cameraKwl.
find(
"principal_point");
728 focal_length = cameraKwl.
find(
"focal_length");
729 pixel_size = cameraKwl.
find(prefix,
"pixel_size");
730 focal_length = cameraKwl.
find(prefix,
"focal_length");
731 const char* distortion_units = cameraKwl.
find(prefix,
"distortion_units");
746 std::vector<ossimString> splitString;
748 tempString = tempString.
trim();
749 tempString.
split(splitString,
" ");
751 if(splitString.size() == 2)
753 w = splitString[0].toDouble();
754 h = splitString[1].toDouble();
766 std::vector<ossimString> splitString;
768 tempString = tempString.
trim();
769 tempString.
split(splitString,
" ");
770 if(splitString.size() == 2)
778 std::vector<ossimString> splitString;
780 tempString = tempString.
trim();
781 tempString.
split(splitString,
" ");
782 if(splitString.size() == 1)
787 else if(splitString.size() == 2)
802 vector<ossimString> keys;
804 long numberOfDistortions = (long)keys.size();
807 std::vector<int> numberList(numberOfDistortions);
808 for(idx = 0; idx < numberList.size();++idx)
812 numberList[idx] = numberStr.
toInt();
814 std::sort(numberList.begin(), numberList.end());
815 double distance=0.0, distortion=0.0;
817 for(idx = 0; idx < numberList.size(); ++idx)
827 std::vector<ossimString> splitString;
829 tempString = tempString.
trim();
830 tempString.
split(splitString,
" ");
831 std::cout << splitString.size() << std::endl;
832 if(splitString.size() >= 2)
834 distance = splitString[0].toDouble();
835 distortion = splitString[1].toDouble();
839 tool.
setValue(distortion, unitType);
847 lensKwl.
add(
"convergence_threshold",
873 std::vector<ossimString> splitString;
875 tempString = tempString.
trim();
876 tempString.
split(splitString,
" ");
877 if(splitString.size() >= 2)
893 std::vector<ossimString> splitString;
895 tempString = tempString.
trim();
896 tempString.
split(splitString,
" ");
897 if(splitString.size() == 1)
902 else if(splitString.size() == 2)
963 <<
"thePhi: " <<
thePhi << std::endl
964 <<
"theKappa: " <<
theKappa << std::endl;
967 std::cout <<
"ossimApplanixModel::loadState: ......... leaving" << std::endl;
virtual const ossimDatum * create(const ossimString &code) const
create method
static NEWMAT::Matrix createRotationXMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
void setParameterDescription(ossim_uint32 idx, const ossimString &descrption)
virtual ossimGpt inverse(const ossimDpt &eastingNorthing) const
Will take a point in meters and convert it to ground.
double computeParameterOffset(ossim_uint32 idx) const
virtual void initAdjustableParameters()
void setImageRect(const ossimDrect &rect)
double getBoreSightTx() const
bool isHeightAboveMSL() const
static ossimString upcase(const ossimString &aString)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
ossim_int8 theUtmHemisphere
virtual ossimObject * dup() const
double lond() const
Will convert the radian measure to degrees.
void lineSampleToWorld(const ossimDpt &image_point, ossimGpt &gpt) const
ossimEcefPoint intersectAboveEarthEllipsoid(const double &heightAboveEllipsoid, const ossimDatum *aDatum=ossimDatumFactory::instance() ->wgs84()) const
Represents serializable keyword/value map.
void setPrincipalPoint(ossimDpt principalPoint)
bool addFile(const char *file)
bool intersectRay(const ossimEcefRay &ray, ossimGpt &gpt, double defaultElevValue=0.0)
METHOD: intersectRay()
ossimEcefVector cross(const ossimEcefVector &) const
const char * find(const char *key) const
double getShiftValuesX() const
static NEWMAT::Matrix createRotationYMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
ossim_int32 getUtmZone() const
NEWMAT::Matrix theCompositeMatrixInverse
double getShiftValuesY() const
const ossimDpt & ul() const
virtual const ossimString & code() const
static ossimString toString(bool aValue)
Numeric to string methods.
double getBoreSightTy() const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) 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.
virtual ossim_int32 getEntryNumber(const char *entry_string, bool case_insensitive=true) const
static ossimElevManager * instance()
METHOD: instance() Implements singelton pattern.
virtual void lineSampleHeightToWorld(const ossimDpt &image_point, const double &heightEllipsoid, ossimGpt &worldPoint) const
void setOrigin(const ossimEcefPoint &orig)
double latd() const
Will convert the radian measure to degrees.
ossim_uint32 getNumberOfAdjustableParameters() const
virtual void worldToLineSample(const ossimGpt &world_point, ossimDpt &image_point) const
virtual ossimDpt forward(const ossimGpt &latLon) const
All map projections will convert the world coordinate to an easting northing (Meters).
virtual void setMetersPerPixel(const ossimDpt &gsd)
const ossimDatum * datum() const
datum().
ossimEcefPoint theEcefPlatformPosition
ossim_int32 toInt32() const
ossim_int32 getFieldIdxLike(const ossimString &searchKey) const
Is a case insensitive parse of the column names for the orientation record.
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
const NEWMAT::Matrix & lsrToEcefRotMatrix() const
OSSIM_DLL std::istream & skipws(std::istream &in)
void setPixelSize(const ossimDpt &pixelSize)
std::string::size_type size() const
double getBoreSightTz() const
ossimDpt3d theUtmPlatformPosition
std::string::iterator begin()
unsigned int ossim_uint32
ossimString trim(const ossimString &valueToTrim=ossimString(" \\)) const
this will strip lead and trailing character passed in.
RTTI_DEF1(ossimApplanixUtmModel, "ossimApplanixUtmModel", ossimSensorModel)
ossimPolygon theBoundGndPolygon
ossimEcefPoint theAdjEcefPlatformPosition
static ossimGeoidManager * instance()
Implements singelton pattern:
static ossimDatumFactory * instance()
bool hasNans() const
will sequence through the polygon and check to see if any values are NAN
NEWMAT::Matrix theCompositeMatrix
uses file path to init model
void setParameterUnit(ossim_uint32 idx, ossimUnitType unit)
virtual void undistort(const ossimDpt &input, ossimDpt &output) const
ossimString getUtmHemisphere() const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
bool pointWithin(const ossimDpt &point) const
METHOD: pointWithin(ossimDpt) Returns TRUE if point is inside polygon.
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
void setZone(const ossimGpt &ground)
const ossimRefPtr< ossimApplanixEORecord > getRecordGivenId(const ossimString &id) const
Given an ID it will search and find an EO record that matches the ID.
ossimEcefVector theShiftValues
std::vector< ossimString > getSubstringKeyList(const ossimString ®ularExpression) const
ossimRefPtr< ossimMeanRadialLensDistortion > theLensDistortion
ossim_uint32 getNumberOfVertices() const
ossimDrect theImageClipRect
static NEWMAT::Matrix createIdentity()
ossimDpt midPoint() const
virtual void setAdjustableParameter(ossim_uint32 idx, double value, bool notify=false)
static NEWMAT::Matrix createRotationZMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
static NEWMAT::Matrix createIdentity()
const ossimDpt & ur() const
double getShiftValuesZ() const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
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...
const ossimColumnVector3d & data() const
ossimDpt metersPerDegree() const
const ossimDpt & ll() const
std::basic_istringstream< char > istringstream
Class for char input memory streams.
void setFocalLength(double focalLength)
void resize(ossim_uint32 newSize)
void setDirection(const ossimEcefVector &d)
ossimDpt thePrincipalPoint
virtual bool setupOptimizer(const ossimString &init_file)
ground to image faster (you don't need DEM) //TBC
bool parseFile(const ossimFilename &file)
Will parse the entire Exterior orientation file and then index any record ID's found.
virtual void setDatum(const ossimDatum *datum)
Sets theDatum to datum.
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
float distance(double lat1, double lon1, double lat2, double lon2, int units)
static ossimUnitTypeLut * instance()
Returns the static instance of an ossimUnitTypeLut object.
virtual double offsetFromEllipsoid(const ossimGpt &gpt)
const ossimDpt & lr() const
void setHemisphere(const ossimGpt &ground)
virtual void distort(const ossimDpt &input, ossimDpt &output) const
void setPlatformPosition(const ossimGpt &gpt)
ossimGpt thePlatformPosition
void setParameterSigma(ossim_uint32 idx, double value, bool notify=false)
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
ossimKeywordlist & trimAllValues(const ossimString &valueToTrim=ossimString(" \\))
virtual void updateModel()
virtual void imagingRay(const ossimDpt &image_point, ossimEcefRay &image_ray) const
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.