Isis Developer Reference
Isis::ProjectionFactory Class Reference

Initialize a map projection. More...

#include <ProjectionFactory.h>

Collaboration diagram for Isis::ProjectionFactory:
Collaboration graph

Static Public Member Functions

static Isis::ProjectionCreate (Isis::Pvl &label, bool allowDefaults=false)
 This method returns a pointer to a Projection object. More...
 
static Isis::ProjectionRingsCreate (Isis::Pvl &label, bool allowDefaults=false)
 This method returns a pointer to a RingPlaneProjection object. More...
 
static Isis::ProjectionCreateFromCube (Isis::Cube &cube)
 This method is a helper method. More...
 
static Isis::ProjectionRingsCreateFromCube (Isis::Cube &cube)
 This method is a helper method. More...
 
static Isis::ProjectionCreateFromCube (Isis::Pvl &label)
 This method loads a map projection from a cube returning a pointer to a Projection object. More...
 
static Isis::ProjectionRingsCreateFromCube (Isis::Pvl &label)
 This method loads a map projection from a cube returning a pointer to a Projection object. More...
 
static Isis::ProjectionCreateForCube (Isis::Pvl &label, int &ns, int &nl, bool sizeMatch=true)
 This method creates a map projection for a cube given a label. More...
 
static Isis::ProjectionRingsCreateForCube (Isis::Pvl &label, int &samples, int &lines, bool sizeMatch)
 This method creates a projection for a cube to a ring plane given a label. More...
 
static Isis::ProjectionCreateForCube (Isis::Pvl &label, int &samples, int &lines, Camera &cam)
 Create a map projection group for a cube using a camera. More...
 
static Isis::ProjectionRingsCreateForCube (Isis::Pvl &label, int &samples, int &lines, Camera &cam)
 Create a ring plane map projection group for a cube using a camera. More...
 

Detailed Description

Initialize a map projection.

This factory class is used to obtain a Projection object given a PVL which contains a valid Mapping group. The Mapping group can come from an image/cube or a hand-created PVL file. The projection is loaded based on information using the ProjectionName contained in the Mapping group. It is plugin oriented. That is, this class looks in $ISISROOT/lib/Projection.plugin to convert the ProjectionName into a pointer to the appropriate projection class (e.g., Sinusoidal, SimpleCylindrical). This allows programmers who develop new projection to create a plugin without the need for recompiling all the Isis cartographic programs (cam2map, map2map, mappos, etc).

Author
2005-06-22 Elizabeth Ribelin

Member Function Documentation

◆ Create()

Isis::Projection * Isis::ProjectionFactory::Create ( Isis::Pvl label,
bool  allowDefaults = false 
)
static

This method returns a pointer to a Projection object.

The projection is intialized using information contained in a Label object. The information must be a valid Mapping group as defined in the Isis Map Projection Users Guide.

Parameters
labelThe label object containing a valid mapping group.
allowDefaultsIf false then the projection class as indicated by the ProjectionName keyword will require that projection specific parameters such as CenterLatitude, CenterLongitude, etc must be in the Pvl label object. Otherwise if true then those parameters that are not in the Pvl object will be initialized using the latitude/longitude range.
Returns
A pointer to a Projection object.
Exceptions
Isis::iException::System- Unsupported projection, unable to find plugin

References _FILEINFO_, Isis::FileName::expanded(), Isis::FileName::fileExists(), Isis::PvlObject::findGroup(), and Isis::PvlObject::Traverse.

Referenced by Isis::TiffImporter::convertProjection().

◆ CreateForCube() [1/2]

Isis::Projection * Isis::ProjectionFactory::CreateForCube ( Isis::Pvl label,
int &  samples,
int &  lines,
bool  sizeMatch = true 
)
static

This method creates a map projection for a cube given a label.

The label must contain all the proper mapping information (radii, projection name, parameters, pixel resolution, etc). If the labels contain a Cube group and the Mapping group already has the upper left corner, then the values in the label will be used to set the cube size. If they don't exist then the minimum/maximum latitude/longitude values (ground range) are expected to be in the Mapping group and will be used to compute the cube size and upper left corner values.

Parameters
labelA label containing valid map projection information for a cube.
samplesThe number of samples. This value is calculated in the method and returned.
linesThe number of lines. This value is calculated in the method and returned.
sizeMatchBoolean value that determines whether the method should match the size of the output cube to the size of the input cube. This parameter defaults to true.
Returns
A pointer to a Projection object.

References _FILEINFO_, Isis::PvlContainer::addKeyword(), Isis::IException::append(), Isis::PvlContainer::fileName(), Isis::PvlObject::findGroup(), Isis::Projection::HasGroundRange(), Isis::PvlObject::hasObject(), Isis::TProjection::LocalRadius(), Isis::Null, Isis::PI, Isis::PvlContainer::Replace, Isis::Projection::SetUpperLeftCorner(), Isis::Projection::SetWorldMapper(), Isis::toString(), Isis::PvlObject::Traverse, Isis::TProjection::TrueScaleLatitude(), and Isis::TProjection::XYRange().

Referenced by Isis::ProcessMapMosaic::SetOutputCube().

◆ CreateForCube() [2/2]

Isis::Projection * Isis::ProjectionFactory::CreateForCube ( Isis::Pvl label,
int &  samples,
int &  lines,
Camera cam 
)
static

Create a map projection group for a cube using a camera.

This method walks the boundary of the cube computing lat/lons and then uses those lat/lon as input to the projection to compute a x/y range. This x/y range will be minimal (compared to the alternate CreateForCube method and generates significantly small cube size (samples,lines) depending on the projection. Projections with curved meridians and/or parallels generate larger x/y ranges when only looking at the ground range.

Parameters
labelA label containing valid map projection information for a cube.
samplesThe number of samples. This value is calculated in the method and returned.
linesThe number of lines. This value is calculated in the method and returned.
camAn initialized camera model
Returns
Projection* A pointer to a Projection object.

References _FILEINFO_, Isis::PvlContainer::addKeyword(), Isis::Camera::Bands(), Isis::PvlContainer::fileName(), Isis::PvlObject::findGroup(), Isis::Camera::IsBandIndependent(), Isis::Projection::IsGood(), Isis::Camera::Line(), Isis::Camera::Lines(), Isis::TProjection::LocalRadius(), Isis::PI, Isis::PvlContainer::Replace, Isis::Camera::Sample(), Isis::Camera::Samples(), Isis::Camera::SetBand(), Isis::Camera::SetImage(), Isis::TProjection::SetUniversalGround(), Isis::Camera::SetUniversalGround(), Isis::Projection::SetUpperLeftCorner(), Isis::Projection::SetWorldMapper(), Isis::toString(), Isis::PvlObject::Traverse, Isis::TProjection::TrueScaleLatitude(), Isis::Sensor::UniversalLatitude(), Isis::Sensor::UniversalLongitude(), Isis::Projection::XCoord(), and Isis::Projection::YCoord().

◆ CreateFromCube() [1/2]

Isis::Projection * Isis::ProjectionFactory::CreateFromCube ( Isis::Cube cube)
static

This method is a helper method.

See CreateFromCube(Pvl).

Parameters
cubeA cube containing valid map projection information
Returns
A pointer to a Projection object

References Isis::Cube::label().

Referenced by Isis::Camera::Camera(), Isis::ProcessMapMosaic::RingsSetOutputCube(), Isis::ProcessMapMosaic::SetOutputCube(), and Isis::UniversalGroundMap::UniversalGroundMap().

◆ CreateFromCube() [2/2]

Isis::Projection * Isis::ProjectionFactory::CreateFromCube ( Isis::Pvl label)
static

This method loads a map projection from a cube returning a pointer to a Projection object.

Parameters
labelA label containing valid map projection information for a cube.
Returns
(Isis::Projection) A pointer to a Projection object.

References _FILEINFO_, Isis::PvlContainer::fileName(), Isis::PvlObject::findGroup(), Isis::Projection::SetUpperLeftCorner(), Isis::Projection::SetWorldMapper(), and Isis::PvlObject::Traverse.

◆ RingsCreate()

Isis::Projection * Isis::ProjectionFactory::RingsCreate ( Isis::Pvl label,
bool  allowDefaults = false 
)
static

This method returns a pointer to a RingPlaneProjection object.

The projection is intialized using information contained in a Label object. The information must be a valid Mapping group as defined in the Isis Map Projection Users Guide.

Parameters
labelThe label object containing a valid mapping group.
allowDefaultsIf false then the projection class as indicated by the ProjectionName keyword will require that projection specific parameters such as CenterRadius, CenterRingLongitude, etc must be in the Pvl label object. Otherwise if true then those parameters that are not in the Pvl object will be initialized using the latitude/longitude range.
Returns
A pointer to a RingPlaneProjection object.
Exceptions
Isis::iException::System- Unsupported projection, unable to find plugin

References _FILEINFO_, Isis::FileName::expanded(), Isis::FileName::fileExists(), Isis::PvlObject::findGroup(), and Isis::PvlObject::Traverse.

◆ RingsCreateForCube() [1/2]

Isis::Projection * Isis::ProjectionFactory::RingsCreateForCube ( Isis::Pvl label,
int &  samples,
int &  lines,
bool  sizeMatch 
)
static

This method creates a projection for a cube to a ring plane given a label.

Currently this is utilized only for projecting images of rings to the ring plane (i.e the equatorial plane). The label must contain all the proper mapping information (radii, projection name, parameters, pixel resolution, etc). If the labels contain a Cube group and the Mapping group already has the upper left corner, then the values in the label will be used to set the cube size. If they don't exist then the minimum/maximum latitude/longitude values (ground range) are expected to be in the Mapping group and will be used to compute the cube size and upper left corner values.

Parameters
labelA label containing valid map projection information for a cube.
samplesThe number of samples. This value is calculated in the method and returned.
linesThe number of lines. This value is calculated in the method and returned.
sizeMatchBoolean value specifying whether the method should match the size of the output cube to the size of the input cube. Defaults to true.
Returns
Projection* A pointer to a Projection object.

References _FILEINFO_, Isis::PvlContainer::addKeyword(), Isis::IException::append(), Isis::PvlContainer::fileName(), Isis::PvlObject::findGroup(), Isis::Projection::HasGroundRange(), Isis::PvlObject::hasObject(), Isis::Null, Isis::PI, Isis::PvlContainer::Replace, Isis::Projection::SetUpperLeftCorner(), Isis::Projection::SetWorldMapper(), Isis::toString(), Isis::PvlObject::Traverse, Isis::RingPlaneProjection::TrueScaleRingRadius(), and Isis::RingPlaneProjection::XYRange().

Referenced by Isis::ProcessMapMosaic::RingsSetOutputCube().

◆ RingsCreateForCube() [2/2]

Isis::Projection * Isis::ProjectionFactory::RingsCreateForCube ( Isis::Pvl label,
int &  samples,
int &  lines,
Camera cam 
)
static

Create a ring plane map projection group for a cube using a camera.

This method walks the boundary of the cube computing lat/lons and then uses those lat/lon as input to the projection to compute a x/y range. This x/y range will be minimal (compared to the alternate CreateForCube method and generates significantly small cube size (samples,lines) depending on the projection. Projections with curved meridians and/or parallels generate larger x/y ranges when only looking at the ground range.

Parameters
labelA label containing valid map projection information for a cube.
samplesThe number of samples. This value is calculated in the method and returned.
linesThe number of lines. This value is calculated in the method and returned.
camAn initialized camera model
Returns
Projection* A pointer to a Projection object.

References _FILEINFO_, Isis::PvlContainer::addKeyword(), Isis::IException::append(), Isis::Camera::Bands(), Isis::PvlContainer::fileName(), Isis::PvlObject::findGroup(), Isis::Camera::IsBandIndependent(), Isis::Projection::IsGood(), Isis::Camera::Lines(), Isis::Sensor::LocalRadius(), Isis::Distance::meters(), Isis::PI, Isis::PvlContainer::Replace, Isis::Camera::Samples(), Isis::Camera::SetBand(), Isis::RingPlaneProjection::SetGround(), Isis::Camera::SetImage(), Isis::Projection::SetUpperLeftCorner(), Isis::Projection::SetWorldMapper(), Isis::toString(), Isis::PvlObject::Traverse, Isis::RingPlaneProjection::TrueScaleRingRadius(), Isis::Sensor::UniversalLongitude(), Isis::Projection::XCoord(), and Isis::Projection::YCoord().

◆ RingsCreateFromCube() [1/2]

Isis::Projection * Isis::ProjectionFactory::RingsCreateFromCube ( Isis::Cube cube)
static

This method is a helper method.

See RingsCreateFromCube(Pvl).

Parameters
cubeA cube containing valid map projection information
Returns
A pointer to a Projection object

References Isis::Cube::label().

Referenced by Isis::ProcessMapMosaic::RingsSetOutputCube().

◆ RingsCreateFromCube() [2/2]

Isis::Projection * Isis::ProjectionFactory::RingsCreateFromCube ( Isis::Pvl label)
static

This method loads a map projection from a cube returning a pointer to a Projection object.

Parameters
labelA label containing valid map projection information for a cube.
Returns
(Isis::Projection) A pointer to a Projection object.

References _FILEINFO_, Isis::PvlContainer::fileName(), Isis::PvlObject::findGroup(), Isis::Projection::SetUpperLeftCorner(), Isis::Projection::SetWorldMapper(), and Isis::PvlObject::Traverse.


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