26 static ossimTrace traceDebug(
"ossimSonomaSensor:debug");
49 image_ray.setOrigin(v2);
50 image_ray.setDirection(vec);
52 std::cout <<
"image ====== " << image_point << std::endl;
53 std::cout <<
"V2 ====== " << v2 << std::endl;
54 std::cout <<
"v ====== " << v << std::endl;
69 ecf_ray_dir = ecf_ray_dir*(1.0/ecf_ray_dir.
magnitude());
72 image_ray.setDirection(ecf_ray_dir);
77 const double& heightEllipsoid,
83 worldPoint =
extrapolate(image_point, heightEllipsoid);
93 rayDirection = rayDirection/rayDirection.
length();
95 double h = heightEllipsoid;
131 rayDirection = rayDirection/rayDirection.
length();
168 sin(r), cos(r), 0.0, 0.0,
172 0.0, cos(p), -sin(p), 0.0,
173 0.0, sin(p), cos(p), 0.0,
176 sin(
y), cos(
y), 0.0, 0.0,
199 sin(r), cos(r), 0.0, 0.0,
203 0.0, cos(p), -sin(p), 0.0,
204 0.0, sin(p), cos(p), 0.0,
207 sin(
y), cos(
y), 0.0, 0.0,
251 platformLsrMatrix4x4[0][0] = platformLsrMatrix[0][0];
252 platformLsrMatrix4x4[1][0] = platformLsrMatrix[1][0];
253 platformLsrMatrix4x4[2][0] = platformLsrMatrix[2][0];
254 platformLsrMatrix4x4[0][1] = platformLsrMatrix[0][1];
255 platformLsrMatrix4x4[1][1] = platformLsrMatrix[1][1];
256 platformLsrMatrix4x4[2][1] = platformLsrMatrix[2][1];
257 platformLsrMatrix4x4[0][2] = platformLsrMatrix[0][2];
258 platformLsrMatrix4x4[1][2] = platformLsrMatrix[1][2];
259 platformLsrMatrix4x4[2][2] = platformLsrMatrix[2][2];
268 platformLsrMatrix4x4[0][0] = platformLsrMatrix[0][0];
269 platformLsrMatrix4x4[1][0] = platformLsrMatrix[1][0];
270 platformLsrMatrix4x4[2][0] = platformLsrMatrix[2][0];
271 platformLsrMatrix4x4[0][1] = platformLsrMatrix[0][1];
272 platformLsrMatrix4x4[1][1] = platformLsrMatrix[1][1];
273 platformLsrMatrix4x4[2][1] = platformLsrMatrix[2][1];
274 platformLsrMatrix4x4[0][2] = platformLsrMatrix[0][2];
275 platformLsrMatrix4x4[1][2] = platformLsrMatrix[1][2];
276 platformLsrMatrix4x4[2][2] = platformLsrMatrix[2][2];
281 NEWMAT::Matrix pixelToCamera = NEWMAT::Matrix(3, 3);
285 pixelToCamera << f << 0 << (-f*w/2.0) << 0 << -f << (f*h/2.0) << 0 << 0 <<-1;
286 pixelToCamera = pixelToCamera.t();
390 roll = kwl.
find(prefix,
"roll");
391 pitch = kwl.
find(prefix,
"pitch");
392 heading = kwl.
find(prefix,
"heading");
393 platform_position = kwl.
find(prefix,
"platform_position");
394 bool result = (!pixel_size.
empty()&&
395 !principal_point.
empty()&&
396 !focal_length.
empty()&&
397 !platform_position.
empty());
400 mount = mount.
trim();
401 std::vector<ossimString> values;
403 mount.
split(values,
" ");
405 if(values.size() == 9)
409 else if((values.size() == 16) ||
410 (values.size() == 12))
425 for(idx = 0; idx < values.size(); ++idx)
427 if(idx%4 == 0) ++row;
428 m_mount[row][idx%4] = values[idx].toDouble();
433 if(!focal_length.
empty())
437 if(!pixel_size.
empty())
453 if(!principal_point.
empty())
457 if(!platform_position.
empty())
484 <<
"ossimSonomaSensor::loadState Caught Exception:\n" 485 << e.
what() << std::endl;
501 for(rowIdx = 0; rowIdx <
m_mount.Nrows(); ++rowIdx)
503 for(colIdx = 0; colIdx <
m_mount.Ncols(); ++ colIdx)
509 kwl.
add(prefix,
"mount", mount.
trim(),
true);
526 static const double CONVERGENCE_THRESHOLD = 0.0001;
527 static const int MAX_NUM_ITERATIONS = 50;
535 int iteration_count = 0;
569 gpt.
height(new_intersect_pt.
z);
570 result = new_intersect_pt;
574 distance = (new_intersect_pt - prev_intersect_pt).length();
575 if (
distance < CONVERGENCE_THRESHOLD)
581 prev_intersect_pt = new_intersect_pt;
587 }
while ((!done) && (iteration_count < MAX_NUM_ITERATIONS));
virtual void initAdjustableParameters()
ground to image faster (you don't need DEM) //TBC
void setParameterDescription(ossim_uint32 idx, const ossimString &descrption)
virtual ossimGpt inverse(const ossimDpt &eastingNorthing) const
Will take a point in meters and convert it to ground.
double computeParameterOffset(ossim_uint32 idx) const
bool intersectRay(const ossimMapProjection &proj, ossimDpt3d &result, ossimDpt3d &origin, ossimDpt3d &dir) const
const NEWMAT::Matrix & getData() const
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
ossim_float64 width() const
ossimGpt m_platformPosition
static NEWMAT::Matrix createTranslationMatrix(double x, double y, double z)
Represents serializable keyword/value map.
NEWMAT::Matrix m_pixelToCamera
bool intersectRay(const ossimEcefRay &ray, ossimGpt &gpt, double defaultElevValue=0.0)
METHOD: intersectRay()
void lineSampleToWorld(const ossimDpt &image_point, ossimGpt &gpt) const
const char * find(const char *key) const
const ossimDpt & ul() const
static ossimString toString(bool aValue)
Numeric to string methods.
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.
ossimEcefPoint m_ecefPlatformPosition
static ossimElevManager * instance()
METHOD: instance() Implements singelton pattern.
virtual void imagingRay(const ossimDpt &image_point, ossimEcefRay &image_ray) const
double latd() const
Will convert the radian measure to degrees.
ossim_uint32 getNumberOfAdjustableParameters() const
virtual ossimGpt inverse(const ossimDpt &projectedPoint) const =0
Will take a point in meters and convert it to ground.
virtual ossimDpt forward(const ossimGpt &latLon) const
All map projections will convert the world coordinate to an easting northing (Meters).
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
bool intersect(ossimDpt3d &result, ossimDpt3d &origin, ossimDpt3d &ray)
NEWMAT::Matrix m_compositeMatrix
void computeGsd()
This method computes the ground sample distance(gsd) and sets class attributes theGSD and theMeanGSD ...
virtual void lineSampleHeightToWorld(const ossimDpt &image_point, const double &heightEllipsoid, ossimGpt &worldPoint) const
void toPoint(const std::string &s)
Initializes this point from string.
double degreesToRadians(double x)
virtual const char * what() const
Returns the error message.
virtual double getHeightAboveEllipsoid(const ossimGpt &gpt)
static NEWMAT::Matrix createRotationXMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
static NEWMAT::Matrix createRotationZMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
NEWMAT::Matrix m_compositeMatrixInverse
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
unsigned int ossim_uint32
ossimString trim(const ossimString &valueToTrim=ossimString(" \\)) const
this will strip lead and trailing character passed in.
void toPoint(const std::string &s)
Initializes this point from string.
ossimPolygon theBoundGndPolygon
static ossimGeoidManager * instance()
Implements singelton pattern:
ossimGpt m_platformPositionEllipsoid
void setParameterUnit(ossim_uint32 idx, ossimUnitType unit)
static NEWMAT::Matrix create()
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
static ossim_int32 computeZone(const ossimGpt &gpt)
ossim_float64 height() const
virtual ossimDpt extrapolate(const ossimGpt &gp) const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
RTTI_DEF1(ossimSonomaSensor, "ossimSonomaSensor", ossimSensorModel)
void setZone(const ossimGpt &ground)
ossimRefPtr< ossimUtmProjection > m_utmProjection
NEWMAT::Matrix ecefToLsrRotMatrix() const
ossimDpt m_principalPoint
bool intersectRayWithHeight(const ossimMapProjection &proj, ossimDpt3d &result, ossimDpt3d &origin, ossimDpt3d &dir, double h) const
virtual void updateModel()
ossimDrect theImageClipRect
ossimString toString(ossim_uint32 precision=15) const
static NEWMAT::Matrix createIdentity()
ossimDpt midPoint() const
virtual void setAdjustableParameter(ossim_uint32 idx, double value, bool notify=false)
NEWMAT::Matrix m_mountInverse
static NEWMAT::Matrix createIdentity()
const ossimDpt & ur() const
void resizeAdjustableParameterArray(ossim_uint32 numberOfParameters)
virtual ossimGpt origin() const
virtual bool insideImage(const ossimDpt &p) const
const ossimDpt & ll() const
ossimString toString(ossim_uint32 precision=15) const
void setOffset(double offset)
void resize(ossim_uint32 newSize)
float distance(double lat1, double lon1, double lat2, double lon2, int units)
virtual double offsetFromEllipsoid(const ossimGpt &gpt)
const ossimDpt & lr() const
void setHemisphere(const ossimGpt &ground)
void setParameterSigma(ossim_uint32 idx, double value, bool notify=false)
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.