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.
In general, one only needs to include the isce3::core::Projections headerfile.
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.
ISCE projection objects are created exclusively using the EPSG codes (see Raster overview). For example
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).
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
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
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.
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.