54 VimsGroundMap::VimsGroundMap(
Camera *parent,
Pvl &lab) :
65 IString msg =
"The Vims ground map does not understand cubes that " 66 "initially have more than 64 lines or 64 samples.";
135 QString stime = (QString) inst [
"NativeStartTime"];
136 QString intTime = stime.split(
".").first();
137 stime = stime.split(
".").last();
150 QString sampMode = QString((QString)inst [
"SamplingMode"]).toUpper();
153 int sampOffset = inst [
"XOffset"];
154 int lineOffset = inst [
"ZOffset"];
161 if (sampMode ==
"NORMAL") {
168 else if (sampMode ==
"HI-RES") {
178 string msg =
"Unsupported SamplingMode [" +
IString(sampMode) +
"]";
183 if (sampMode ==
"NORMAL") {
189 else if (sampMode ==
"HI-RES") {
198 string msg =
"Unsupported SamplingMode [" +
IString(sampMode) +
"]";
235 if (xyz[0] !=
Null && xyz[1] !=
Null && xyz[2] !=
Null) {
236 p_xyzMap[line][samp].setX(xyz[0]);
237 p_xyzMap[line][samp].setY(xyz[1]);
238 p_xyzMap[line][samp].setZ(xyz[2]);
247 if (xyz[0] < p_minX) p_minX = xyz[0];
248 if (xyz[0] > p_maxX) p_maxX = xyz[0];
249 if (xyz[1] < p_minY) p_minY = xyz[1];
250 if (xyz[1] > p_maxY) p_maxY = xyz[1];
251 if (xyz[2] < p_minZ) p_minZ = xyz[2];
252 if (xyz[2] > p_maxZ) p_maxZ = xyz[2];
267 if (abs(abs(p_minZ) - radii[2].kilometers()) < 1.0) {
268 p_minZ = radii[2].
kilometers() * (int(abs(p_minZ) / p_minZ));
270 if (abs(abs(p_maxZ) - radii[2].kilometers()) < 1.0) {
271 p_maxZ = radii[2].
kilometers() * (int(abs(p_maxZ) / p_maxZ));
331 SpiceDouble lookC[3];
334 SpiceDouble unitLookC[3];
335 vhat_c(lookC, unitLookC);
375 if (p_minX == DBL_MAX || p_maxX == -DBL_MAX ||
376 p_minY == DBL_MAX || p_maxY == -DBL_MAX ||
377 p_minZ == DBL_MAX || p_maxZ == -DBL_MAX)
return false;
385 double xCheck = radius * 0.001 * cos(lon.
radians());
386 double yCheck = radius * 0.001 * sin(lon.
radians());
399 if (pB[0] < p_minX || pB[0] > p_maxX ||
400 pB[1] < p_minY || pB[1] > p_maxY ||
401 pB[2] < p_minZ || pB[2] > p_maxZ)
return false;
408 double minDist = DBL_MAX;
416 if (p_xyzMap[line][samp].isNull())
continue;
419 QVector3D deltaXyz = xyz - p_xyzMap[line][samp];
420 if (deltaXyz.length() < minDist) {
421 minDist = deltaXyz.length();
433 if (minDist >= DBL_MAX)
return false;
444 vector<double> knownXyz(4);
447 for (
int line = minLine - 1; line < minLine + 2; line++) {
449 for (
int samp = minSamp - 1; samp < minSamp + 2; samp++) {
452 if (p_xyzMap[line][samp].isNull())
continue;
454 knownXyz[0] = p_xyzMap[line][samp].x();
455 knownXyz[1] = p_xyzMap[line][samp].y();
456 knownXyz[2] = p_xyzMap[line][samp].z();
458 sampXyzLsq.
AddKnown(knownXyz, samp + 1);
459 lineXyzLsq.
AddKnown(knownXyz, line + 1);
463 if (sampXyzLsq.
Knowns() < 4)
return false;
469 knownXyz[0] = xyz.x();
470 knownXyz[1] = xyz.y();
471 knownXyz[2] = xyz.z();
473 double inSamp = sampXyzLsq.
Evaluate(knownXyz);
474 double inLine = lineXyzLsq.
Evaluate(knownXyz);
532 v[0] = sin(theta) * cos(phi);
534 v[2] = sin(theta) * sin(phi) / -1.;
This class defines a body-fixed surface point.
void Coordinate(double p[3]) const
Returns the x,y,z of the surface intersection in BodyFixed km.
const double Null
Value for an Isis Null pixel.
double p_focalPlaneY
Camera's y focal plane coordinate.
PvlGroupIterator findGroup(const QString &name, PvlGroupIterator beg, PvlGroupIterator end)
Find a group with the specified name, within these indexes.
double p_xBore
X boresight.
double p_interlineDelay
InterlineDelayDuration keyword value from the instrument group of the labels, divided by 1000...
double p_focalPlaneX
Camera's x focal plane coordinate.
double p_uy
Distorted focal plane y, in millimeters.
double radians() const
Convert an angle to a double.
virtual bool SetGround(const Latitude &lat, const Longitude &lon)
Compute undistorted focal plane coordinate from ground position.
int Knowns() const
The number of knowns (or times AddKnown was invoked) linear combination of the variables.
double p_ux
Distorted focal plane x, in millimeters.
const double HALFPI
The mathematical constant PI/2.
Namespace for the standard library.
This class is designed to encapsulate the concept of a Latitude.
bool SetLookDirection(const double v[3])
Sets the look direction of the spacecraft.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
double toDouble(const QString &string)
Global function to convert from a string to a double.
This error is for when a programmer made an API call that was illegal.
double kilometers() const
Get the distance in kilometers.
Distance measurement, usually in meters.
Latitude GetLatitude() const
Return the body-fixed latitude for the surface point.
double p_yBore
Y boresight.
double degrees() const
Get the angle in units of Degrees.
int ParentLines() const
Returns the number of lines in the parent alphacube.
Distance LocalRadius() const
Returns the local radius at the intersection point.
int p_swathWidth
SwathWidth keyword value from the instrument group of the labels.
bool SetImage(const double sample, const double line)
Sets the sample/line values of the image to get the lat/lon values.
This class is designed to encapsulate the concept of a Longitude.
virtual bool SetFocalPlane(const double ux, const double uy, const double uz)
Compute ground position from focal plane coordinate.
QString p_channel
Channel keyword value from the instrument group of the labels.
double Evaluate(const std::vector< double > &input)
Invokes the BasisFunction Evaluate method.
Convert between undistorted focal plane and ground coordinates.
SpiceDouble p_etStart
Start ephemeris time.
double p_xPixSize
X pixel size.
Target * target() const
Returns a pointer to the target object.
int p_camLineOffset
Line offset.
Contains multiple PvlContainers.
#define _FILEINFO_
Macro for the filename and line number.
double p_visExp
VIS exposure duration, divided by 1000.
iTime getClockTime(QString clockValue, int sclkCode=-1, bool clockTicks=false)
This converts the spacecraft clock ticks value (clockValue) to an iTime.
int ParentSamples() const
Returns the number of samples in the parent alphacube.
ShapeModel * shape() const
Return the shape.
void setTime(const iTime &time)
By setting the time you essential set the position of the spacecraft and body as indicated in the cla...
double p_yPixSize
Y pixel size.
virtual ~VimsGroundMap()
Destroys the VimsGroundMap object.
Generic least square fitting class.
Container for cube-like labels.
int p_camSampOffset
Sample offset.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
void AddKnown(const std::vector< double > &input, double expected, double weight=1.0)
Invoke this method for each set of knowns.
QString name() const
Gets the shape name.
Longitude GetLongitude() const
Return the body-fixed longitude for the surface point.
void LookDirection(double v[3])
Determines the look direction in the camera coordinate system.
Generic linear equation class.
Adds specific functionality to C++ strings.
Namespace for ISIS/Bullet specific routines.
double p_irExp
IR exposure duration, divided by 1000.
void IgnoreProjection(bool ignore)
Set whether or not the camera should ignore the Projection.
double p_uz
Distorted focal plane z, in millimeters.
void Init(Pvl &lab)
Initialize vims camera model.
void radii(Distance r[3]) const
Returns the radii of the body in km.
double Et() const
Returns the ephemeris time (TDB) representation of the time as a double.
int Solve(Isis::LeastSquares::SolveMethod method=SVD)
After all the data has been registered through AddKnown, invoke this method to solve the system of eq...
int p_swathLength
SwathLength keyword value from the instrument group of the labels.
bool HasSurfaceIntersection() const
Returns if the last call to either SetLookDirection or SetUniversalGround had a valid intersection wi...
Unless noted otherwise, the portions of Isis written by the USGS are public domain.