XMDF  2.2
4.13. Coordinate Systems

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