4.13. Coordinate Systems
[4. Implementation Design]

Coordinate system groups can be associated with mesh, grid or cross-section groups to define their relative locations.

The values for each of the group variables are listed in the appendix. A brief definition of each variable is listed below.

If a member of the Coord group is not defined then a default value will be substituted. The default values are listed below.

Horizontal datum (int)
0
Horizontal units (int)
0
Vertical datum (int)
0
Vertical units (int)
0
Latitude (int)
0
Longitude (int)
0
UTM zone (int)
0
SPC zone (int)
0101 (Alabama)
HPGN (int)
0
CPP latitude (double)
0
CPP longitude (double)
0
Ellipse (int)
5 (Clark 1866)
MajorR (double)
6378206.4 (Clark 1866)
MinorR (double)
6356583.8 (Clark 1866)
A list of acceptable values for the Coord group can be found in the appendix. In order to specify a coordinate system you must specify the horizontal datum. Below is a list of what must be specified for different coordinate systems.

Lat/lon: horizontal datum, horizontal units, latitude, longitude UTM: horizontal datum, horizontal units, UTM zone State plane: horizontal datum, horizontal units, SPC zone HPGN: horizontal datum, horizontal units, HPGN area CPP: horizontal datum, horizontal units, CPP lat, CPP long

Ellipse is used with non-NAD geographic and UTM systems as well as user-defined projections. MajorR and MinorR are used with user-defined projections.

The coordinate system information may be stored with each spatial data object within an XMDF file. The following functions are used to create or retrieve the coordinate system group id for a spatial data object. This group id is used in rest of the coordinate system functions to set or get the information for the coordinate system.

C/C++
int     xfCreateCoordinateGroup(xid SpatialId, xid *CoordId);
int     xfOpenCoordinateGroup(xid SpatialId, xid *CoordId);
FORTRAN
SUBROUTINE  XF_CREATE_COORD_GROUP(SpatialId, CoordId, Error)
INTEGER(XID), INTENT(IN)  :: SpatialId
INTEGER(XID), INTENT(OUT) :: CoordId
INTEGER, INTENT(OUT)      :: Error

SUBROUTINE  XF_OPEN_COORD_GROUP(SpatialId, CoordId, Error)
INTEGER(XID), INTENT(IN)  :: SpatialId
INTEGER(XID), INTENT(OUT) :: CoordId
INTEGER, INTENT(OUT)      :: Error
The API will provide functions to get and set the various parts of the Coord group.

C/C++
int     xfGetHorizDatum(xid CoordId, int *val);
int     xfGetHorizUnits(xid CoordId, int *val);
int     xfGetVertDatum(xid CoordId, int *val);
int     xfGetVertUnits(xid CoordId, int *val);
int     xfGetLat(xid CoordId, int *val);
int     xfGetLon(xid CoordId, int *val);
int     xfGetUTMZone(xid CoordId, int *val);
int     xfGetSPCZone(xid CoordId, int *val);
int     xfGetHPGNArea(xid CoordId, int *val);
int     xfGetCPPLat(xid CoordId, double *val);
int     xfGetCPPLon(xid CoordId, double *val);
int     xfGetEllipse(xid CoordId, int *val);
int     xfGetMajorR(xid CoordId, double *val);
int     xfGetMinorR(xid CoordId, double *val);
 
int     xfSetHorizDatum(xid CoordId, int val);
int     xfSetHorizUnits(xid CoordId, int val);
int     xfSetVertDatum(xid CoordId, int val);
int     xfSetVertUnits(xid CoordId, int val);
int     xfSetLat(xid CoordId, int val);
int     xfSetLon(xid CoordId, int val);
int     xfSetUTMZone(xid CoordId, int val);
int     xfSetSPCZone(xid CoordId, int val);
int     xfSetHPGNArea(xid CoordId, int val);
int     xfSetCPPLat(xid CoordId, double val);
int     xfSetCPPLon(xid CoordId, double val);
int     xfSetEllipse(xid CoordId, int val);
int     xfSetMajorR(xid CoordId, double val);
int     xfSetMinorR(xid CoordId, double val);
FORTRAN
SUBROUTINE  XF_GET_HORIZ_DATUM(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_HORIZ_UNITS(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_VERT_DATUM(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_VERT_UNITS(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_LAT(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_LON(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_UTM_ZONE(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_SPC_ZONE(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_HPGN_AREA(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_CPP_LAT(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
REAL(DOUBLE), INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_CPP_LON(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
REAL(DOUBLE), INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_ELLIPSE(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_MAJOR_R(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
REAL(DOUBLE), INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_GET_MINOR_R(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
REAL(DOUBLE), INTENT(OUT)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
 
SUBROUTINE  XF_SET_HORIZ_DATUM(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_HORIZ_UNITS(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_VERT_DATUM(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_VERT_UNITS(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_LAT(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_LON(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_UTM_ZONE(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_SPC_ZONE(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_HPGN_AREA(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_CPP_LAT(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
REAL(DOUBLE), INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_CPP_LON(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
REAL(DOUBLE), INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_ELLIPSE(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
INTEGER, INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_MAJOR_R(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
REAL(DOUBLE), INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error
 
SUBROUTINE  XF_SET_MINOR_R(CoordId, Val, Error)
INTEGER(XID), INTENT(IN)  :: CoordId
REAL(DOUBLE), INTENT(IN)      :: Val
INTEGER, INTENT(OUT)      :: Error

Generated on Wed Jun 2 11:55:33 2010 for XMDF by  doxygen 1.5.6