isce3  0.1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
Map Projections Tutorial

Table of Contents

ISCE can currently handle a bunch of map projections defined on the WGS84 Ellipsoid (See Raster overview).

The projections interface design is very similar to the one in the PROJ library. We have a separate implementation of the library for easier interaction with similar CUDA-side objects. Since, a CUDA version of PROJ is not available, we wrote our own for the subset of projections required by NISAR.

Include headers

In general, one only needs to include the isce3::core::Projections headerfile.

#include "isce3/core/Projections.h"

If one is looking to process data with more general set of projections as part of your workflow, include appropriate PROJ or GDAL header files. Note that you will not be able to use any CUDA-based optimization for such unsupported projections.

Creating a projection object

ISCE projection objects are created exclusively using the EPSG codes (see Raster overview). For example

//Creates interface to standard WGS84 Lon/Lat system
isce3::core::ProjectionBase *llh = isce3::core::createProj(4326);
//Creates interface to UTM 20N
isce3::core::ProjectionBase *utm20n = isce3::core::createProj(32620);
//Creates interface to Antarctic Polar Stereographic
isce3::core::ProjectionBase *spolar = isce3::core::createProj(3031);

Transforming coordinates

ISCE projection objects are similar to PJ datastructure in the PROJ framework. Internally, each projection object provides an interface to convert to and from a given coordinate system to Lon/Lat/Hae (radians).

Forward transform

This is accomplished via the isce3::core::ProjectionBase::fwd method. We refer to transformation of a Lon/Lat/Hae (radians) to projection of interest as Forward transformation. For example

//Create interface to Antarctic Polar Stereographic
isce3::core::ProjectionBase *spolar = isce3::core::createProj(3031);
//Pick a point to transform - say south pole
isce3::core::cartesian_t spole = {0., -M_PI/2.0, 0.};
//Transform the point
spolar->fwd(llh, xyz);
std::cout << "Coordinates in polar coordinates: " << xyz[0] << " " << xyz[1] << " " << xyz[2] << "\n";

Inverse

This is accomplished via the isce3::core::ProjectionBase::inv method. We refer to the transformation from projection of interest to Lon/Lat/Hae (radians) as Inverse Transformation. For example

//Create interface to Antarctic Polar Stereographic
isce3::core::ProjectionBase *spolar = isce3::core::createProj(3031);
//Pick a point to transform - say south pole
isce3::core::cartesian_t origin = {0., 0., 0.};
//Transform the point
spolar->inv(origin, llh);
std::cout << "Coordinates in Lon/Lat/Hae (radians): " << llh[0] << " " << llh[1] << " " << llh[2] << "\n";

Transforming between systems

One could use a pair of isce3::core::ProjectionBase::fwd and isce3::core::ProjectionBase::inv calls to do this or directly use isce3::core::projTransform.

Compatibility with PROJ/ GDAL

ISCE's projection interface is compatible with PROJ or GDAL (which builds on PROJ). There should be no problems with mixing the interfaces in C++ level.


Generated for ISCE3.0 by doxygen 1.8.5.