datum.h
上传用户:oybseng
上传日期:2015-04-27
资源大小:7831k
文件大小:25k
源码类别:

GDI/图象编程

开发平台:

Visual C++

  1. #ifndef DATUM_H
  2. #define DATUM_H
  3. /***************************************************************************/
  4. /* RSC IDENTIFIER: Datum
  5.  *
  6.  * ABSTRACT
  7.  *
  8.  *    This component provides datum shifts for a large collection of local
  9.  *    datums, WGS72, and WGS84.  A particular datum can be accessed by using its 
  10.  *    standard 5-letter code to find its index in the datum table.  The index 
  11.  *    can then be used to retrieve the name, type, ellipsoid code, and datum 
  12.  *    shift parameters, and to perform shifts to or from that datum.
  13.  *    
  14.  *    By sequentially retrieving all of the datum codes and/or names, a menu
  15.  *    of the available datums can be constructed.  The index values resulting
  16.  *    from selections from this menu can then be used to access the parameters
  17.  *    of the selected datum, or to perform datum shifts involving that datum.
  18.  *
  19.  *    This component supports both 3-parameter local datums, for which only X,
  20.  *    Y, and Z translations relative to WGS 84 have been defined, and 
  21.  *    7-parameter local datums, for which X, Y, and Z rotations, and a scale 
  22.  *    factor, are also defined.  It also includes entries for WGS 84 (with an
  23.  *    index of 0), and WGS 72 (with an index of 1), but no shift parameter 
  24.  *    values are defined for these.
  25.  *
  26.  *    This component provides datum shift functions for both geocentric and
  27.  *    geodetic coordinates.  WGS84 is used as an intermediate state when
  28.  *    shifting from one local datum to another.  When geodetic coordinates are
  29.  *    given Molodensky's method is used, except near the poles where the 3-step
  30.  *    step method is used instead.  Specific algorithms are used for shifting 
  31.  *    between WGS72 and WGS84.
  32.  *
  33.  *    This component depends on two data files, named 3_param.dat and 
  34.  *    7_param.dat, which contain the datum parameter values.  Copies of these
  35.  *    files must be located in the directory specified by the value of the 
  36.  *    environment variable "DATUM_DATA", if defined, or else in the current 
  37.  *    directory whenever a program containing this component is executed. 
  38.  *
  39.  *    Additional datums can be added to these files, either manually or using 
  40.  *    the Create_Datum function.  However, if a large number of datums are 
  41.  *    added, the datum table array sizes in this component will have to be 
  42.  *    increased.
  43.  *
  44.  *    This component depends on two other components: the Ellipsoid component
  45.  *    for access to ellipsoid parameters; and the Geocentric component for 
  46.  *    conversions between geodetic and geocentric coordinates.
  47.  *
  48.  * ERROR HANDLING
  49.  *
  50.  *    This component checks for input file errors and input parameter errors.
  51.  *    If an invalid value is found, the error code is combined with the current
  52.  *    error code using the bitwise or.  This combining allows multiple error
  53.  *    codes to be returned. The possible error codes are:
  54.  *
  55.  *  DATUM_NO_ERROR                  : No errors occurred in function
  56.  *  DATUM_NOT_INITIALIZED_ERROR     : Datum module has not been initialized
  57.  *  DATUM_7PARAM_FILE_OPEN_ERROR    : 7 parameter file opening error
  58.  *  DATUM_7PARAM_FILE_PARSING_ERROR : 7 parameter file structure error
  59.  *  DATUM_7PARAM_OVERFLOW_ERROR     : 7 parameter table overflow
  60.  *  DATUM_3PARAM_FILE_OPEN_ERROR    : 3 parameter file opening error
  61.  *  DATUM_3PARAM_FILE_PARSING_ERROR : 3 parameter file structure error
  62.  *  DATUM_3PARAM_OVERFLOW_ERROR     : 3 parameter table overflow
  63.  *  DATUM_INVALID_INDEX_ERROR       : Index out of valid range (less than one
  64.  *                                      or more than Datum_Count)
  65.  *  DATUM_INVALID_SRC_INDEX_ERROR   : Source datum index invalid
  66.  *  DATUM_INVALID_DEST_INDEX_ERROR  : Destination datum index invalid
  67.  *  DATUM_INVALID_CODE_ERROR        : Datum code not found in table
  68.  *  DATUM_LAT_ERROR                 : Latitude out of valid range (-90 to 90)
  69.  *  DATUM_LON_ERROR                 : Longitude out of valid range (-180 to
  70.  *                                    360)
  71.  *  DATUM_SIGMA_ERROR               : Standard error values must be positive
  72.  *                                    (or -1 if unknown)
  73.  *  DATUM_DOMAIN_ERROR              : Domain of validity not well defined
  74.  *  DATUM_ELLIPSE_ERROR             : Error in ellipsoid module
  75.  *  DATUM_NOT_USERDEF_ERROR         : Datum code is not user defined - cannot 
  76.  *                                    be deleted
  77.  *
  78.  *
  79.  * REUSE NOTES
  80.  *
  81.  *    Datum is intended for reuse by any application that needs access to 
  82.  *    datum shift parameters relative to WGS 84.
  83.  *
  84.  *    
  85.  * REFERENCES
  86.  *
  87.  *    Further information on Datum can be found in the Reuse Manual.
  88.  *
  89.  *    Datum originated from :  U.S. Army Topographic Engineering Center (USATEC)
  90.  *                             Geospatial Information Division (GID)
  91.  *                             7701 Telegraph Road
  92.  *                             Alexandria, VA  22310-3864
  93.  *
  94.  * LICENSES
  95.  *
  96.  *    None apply to this component.
  97.  *
  98.  * RESTRICTIONS
  99.  *
  100.  *    Datum has no restrictions.
  101.  *
  102.  * ENVIRONMENT
  103.  *
  104.  *    Datum was tested and certified in the following environments:
  105.  *
  106.  *    1. Solaris 2.5 with GCC 2.8.1
  107.  *    2. MS Windows 95 with MS Visual C++ 6
  108.  *
  109.  * MODIFICATIONS
  110.  *
  111.  *    Date              Description
  112.  *    ----              -----------
  113.  *    03/30/97          Original Code
  114.  *    05/28/99          Added user-definable datums (for JMTK)
  115.  *                      Added datum domain of validity checking (for JMTK)
  116.  *                      Added datum shift accuracy calculation (for JMTK) 
  117.  */
  118. /***************************************************************************/
  119. /*
  120.  *                              DEFINES
  121.  */
  122. #define DATUM_NO_ERROR                          0x00000
  123. #define DATUM_NOT_INITIALIZED_ERROR             0x00001
  124. #define DATUM_7PARAM_FILE_OPEN_ERROR            0x00002
  125. #define DATUM_7PARAM_FILE_PARSING_ERROR         0x00004
  126. #define DATUM_7PARAM_OVERFLOW_ERROR             0x00008
  127. #define DATUM_3PARAM_FILE_OPEN_ERROR            0x00010
  128. #define DATUM_3PARAM_FILE_PARSING_ERROR         0x00020
  129. #define DATUM_3PARAM_OVERFLOW_ERROR             0x00040
  130. #define DATUM_INVALID_INDEX_ERROR               0x00080
  131. #define DATUM_INVALID_SRC_INDEX_ERROR           0x00100
  132. #define DATUM_INVALID_DEST_INDEX_ERROR          0x00200
  133. #define DATUM_INVALID_CODE_ERROR                0x00400
  134. #define DATUM_LAT_ERROR                         0x00800
  135. #define DATUM_LON_ERROR                         0x01000
  136. #define DATUM_SIGMA_ERROR                       0x02000
  137. #define DATUM_DOMAIN_ERROR                      0x04000
  138. #define DATUM_ELLIPSE_ERROR                     0x08000
  139. #define DATUM_NOT_USERDEF_ERROR                 0x10000
  140. /***************************************************************************/
  141. /*
  142.  *                          GLOBAL DECLARATIONS
  143.  */
  144. typedef enum Datum_Types
  145. {
  146.   Three_Param_Datum,
  147.   Seven_Param_Datum,
  148.   WGS84_Datum,
  149.   WGS72_Datum
  150. } Datum_Type; /* different types of datums */
  151. /***************************************************************************/
  152. /*
  153.  *                            FUNCTION PROTOTYPES
  154.  */
  155. /* ensure proper linkage to c++ programs */
  156. #ifdef __cplusplus 
  157. extern "C" {
  158. #endif
  159.   long Initialize_Datums(void);
  160. /*
  161.  * The function Initialize_Datums creates the datum table from two external
  162.  * files.  If an error occurs, the initialization stops and an error code is
  163.  * returned.  This function must be called before any of the other functions
  164.  * in this component.
  165.  */
  166.   long Create_Datum ( const char *Code,
  167.                       const char *Name,
  168.                       const char *Ellipsoid_Code,
  169.                       double Delta_X,
  170.                       double Delta_Y,
  171.                       double Delta_Z,
  172.                       double Sigma_X,
  173.                       double Sigma_Y,
  174.                       double Sigma_Z,
  175.                       double South_latitude,
  176.                       double North_latitude,
  177.                       double West_longitude,
  178.                       double East_longitude);
  179. /*
  180.  *   Code           : 5-letter new datum code.                      (input)
  181.  *   Name           : Name of the new datum                         (input)
  182.  *   Ellipsoid_Code : 2-letter code for the associated ellipsoid    (input)
  183.  *   Delta_X        : X translation to WGS84 in meters              (input)
  184.  *   Delta_Y        : Y translation to WGS84 in meters              (input)
  185.  *   Delta_Z        : Z translation to WGS84 in meters              (input)
  186.  *   Sigma_X        : Standard error in X in meters                 (input)
  187.  *   Sigma_Y        : Standard error in Y in meters                 (input)
  188.  *   Sigma_Z        : Standard error in Z in meters                 (input)
  189.  *   South_latitude : Southern edge of validity rectangle in radians(input)
  190.  *   North_latitude : Northern edge of validity rectangle in radians(input)
  191.  *   West_longitude : Western edge of validity rectangle in radians (input)
  192.  *   East_longitude : Eastern edge of validity rectangle in radians (input)
  193.  *
  194.  * The function Create_Datum creates a new local (3-parameter) datum with the 
  195.  * specified code, name, shift values, and standard error values.  If the 
  196.  * datum table has not been initialized, the specified code is already in use, 
  197.  * or a new version of the 3-param.dat file cannot be created, an error code 
  198.  * is returned, otherwise DATUM_NO_ERROR is returned.  Note that the indexes 
  199.  * of all datums in the datum table may be changed by this function.
  200.  */
  201.   long Delete_Datum (const char *Code);
  202. /*
  203.  *   Code           : 5-letter datum code.                      (input)
  204.  *
  205.  * The function Delete_Datum deletes a local (3-parameter) datum with the 
  206.  * specified code.  If the datum table has not been initialized or a new 
  207.  * version of the 3-param.dat file cannot be created, an error code is returned,  
  208.  * otherwise DATUM_NO_ERROR is returned.  Note that the indexes of all datums 
  209.  * in the datum table may be changed by this function.
  210.  */
  211.   long Datum_Uses_Ellipsoid (const char *Code);
  212. /*
  213.  *  The function Datum_Uses_Ellipsoid returns 1 if the ellipsoid is in use by a 
  214.  *  user defined datum.  Otherwise, 0 is returned.  
  215.  *
  216.  *  Code               : The ellipsoid code being searched for.    (input)
  217.  */
  218.   long Datum_Count ( long *Count );
  219. /*
  220.  *  The function Datum_Count returns the number of Datums in the table
  221.  *  if the table was initialized without error.
  222.  *
  223.  *  Count   : number of datums in the datum table                   (output)
  224.  */
  225.   long Datum_Index ( const char *Code, 
  226.                      long *Index );
  227. /*
  228.  *  The function Datum_Index returns the index of the datum with the 
  229.  *  specified code.
  230.  *
  231.  *  Code    : The datum code being searched for                     (input)
  232.  *  Index   : The index of the datum in the table with the          (output)
  233.  *              specified code
  234.  */
  235.   long Datum_Code ( const long Index,
  236.                     char *Code );
  237. /*
  238.  *  The function Datum_Code returns the 5-letter code of the datum
  239.  *  referenced by index.
  240.  *
  241.  *  Index   : The index of a given datum in the datum table         (input)
  242.  *  Code    : The datum code of the datum referenced by index       (output)
  243.  */
  244.   long Datum_Name ( const long Index,
  245.                     char *Name );
  246. /*
  247.  *  The function Datum_Name returns the name of the datum referenced by
  248.  *  index.
  249.  *
  250.  *  Index   : The index of a given datum in the datum table         (input)
  251.  *  Name    : The datum name of the datum referenced by index       (output)
  252.  */
  253.   long Datum_Ellipsoid_Code ( const long Index,
  254.                               char *Code );
  255. /*
  256.  *  The function Datum_Ellipsoid_Code returns the 2-letter ellipsoid code 
  257.  *  for the ellipsoid associated with the datum referenced by index.
  258.  *
  259.  *  Index   : The index of a given datum in the datum table           (input)
  260.  *  Code    : The ellisoid code for the ellipsoid associated with the (output)
  261.  *               datum referenced by index 
  262.  */
  263.   long Retrieve_Datum_Type ( const long Index,
  264.                              Datum_Type *Type );
  265. /*
  266.  *  The function Retrieve_Datum_Type returns the type of the datum referenced by
  267.  *  index.
  268.  *
  269.  *  Index   : The index of a given datum in the datum table         (input)
  270.  *  Type    : The type of the datum referenced by index             (output)
  271.  */
  272.   long Datum_Seven_Parameters ( const long Index, 
  273.                                 double *Delta_X,
  274.                                 double *Delta_Y,
  275.                                 double *Delta_Z,
  276.                                 double *Rx,
  277.                                 double *Ry,
  278.                                 double *Rz,
  279.                                 double *Scale_Factor );
  280. /*
  281.  *   The function Datum_Seven_Parameters returns the seven parameters
  282.  *   for the datum referenced by index.
  283.  *
  284.  *    Index      : The index of a given datum in the datum table   (input)
  285.  *    Delta_X    : X translation in meters                         (output)
  286.  *    Delta_Y    : Y translation in meters                         (output)
  287.  *    Delta_Z    : Z translation in meters                         (output)
  288.  *    Rx         : X rotation in radians                           (output)
  289.  *    Rx         : Y rotation in radians                           (output)
  290.  *    Ry         : Z rotation in radians                           (output)
  291.  *    Scale_Factor : Scale factor                                  (output)
  292.  */
  293.   long Datum_Three_Parameters ( const long Index, 
  294.                                 double *Delta_X,
  295.                                 double *Delta_Y,
  296.                                 double *Delta_Z);
  297. /*
  298.  *   The function Datum_Three_Parameters returns the three parameters 
  299.  *   for the datum referenced by index.
  300.  *
  301.  *    Index      : The index of a given datum in the datum table   (input)
  302.  *    Delta_X    : X translation in meters                         (output)
  303.  *    Delta_Y    : Y translation in meters                         (output)
  304.  *    Delta_Z    : Z translation in meters                         (output)
  305.  */
  306.   long Datum_Errors ( const long Index,
  307.                       double *Sigma_X,
  308.                       double *Sigma_Y,
  309.                       double *Sigma_Z);
  310. /*
  311.  *   The function Datum_Errors returns the standard errors in X,Y, & Z 
  312.  *   for the datum referenced by index.
  313.  *
  314.  *    Index      : The index of a given datum in the datum table   (input)
  315.  *    Sigma_X    : Standard error in X in meters                   (output)
  316.  *    Sigma_Y    : Standard error in Y in meters                   (output)
  317.  *    Sigma_Z    : Standard error in Z in meters                   (output)
  318.  */
  319.   long Datum_Valid_Rectangle ( const long Index,
  320.                                double *South_latitude,
  321.                                double *North_latitude,
  322.                                double *West_longitude,
  323.                                double *East_longitude);
  324. /*
  325.  *   The function Datum_Valid_Rectangle returns the edges of the validity 
  326.  *   rectangle for the datum referenced by index.
  327.  *
  328.  *   Index          : The index of a given datum in the datum table   (input)
  329.  *   South_latitude : Southern edge of validity rectangle in radians  (input)
  330.  *   North_latitude : Northern edge of validity rectangle in radians  (input)
  331.  *   West_longitude : Western edge of validity rectangle in radians   (input)
  332.  *   East_longitude : Eastern edge of validity rectangle in radians   (input)
  333.  */
  334.   long Datum_User_Defined ( const long Index,
  335.                           long *result );
  336. /*
  337.  *    Index    : Index of a given datum in the datum table (input)
  338.  *    result   : Indicates whether specified datum is user defined (1)
  339.  *               or not (0)                                (output)
  340.  *
  341.  *  The function Get_Datum_User_Defined checks whether or not the specified datum is 
  342.  *  user defined. It returns 1 if the datum is user defined, and returns
  343.  *  0 otherwise. If index is valid DATUM_NO_ERROR is returned, otherwise
  344.  *  DATUM_INVALID_INDEX_ERROR is returned.
  345.  */
  346.   long Valid_Datum ( const long Index,
  347.                      double latitude,
  348.                      double longitude,
  349.                      long *result );
  350. /*
  351.  *  This function checks whether or not the specified location is within the 
  352.  *  validity rectangle for the specified datum.  It returns zero if the specified
  353.  *  location is NOT within the validity rectangle, and returns 1 otherwise.
  354.  *
  355.  *   Index     : The index of a given datum in the datum table      (input)
  356.  *   latitude  : Latitude of the location to be checked in radians  (input)
  357.  *   longitude : Longitude of the location to be checked in radians (input)
  358.  *   result    : Indicates whether location is inside (1) or outside (0)
  359.  *               of the validity rectangle of the specified datum   (output)
  360.  */
  361.   long Geocentric_Shift_To_WGS84 (const long Index,
  362.                                   const double X,
  363.                                   const double Y,
  364.                                   const double Z,
  365.                                   double *X_WGS84,
  366.                                   double *Y_WGS84,
  367.                                   double *Z_WGS84);
  368. /*
  369.  *  This function shifts a geocentric coordinate (X, Y, Z in meters) relative
  370.  *  to the datum referenced by index to a geocentric coordinate (X, Y, Z in
  371.  *  meters) relative to WGS84.
  372.  *
  373.  *  Index   : Index of local datum                       (input)
  374.  *  X       : X coordinate relative to the source datum  (input)
  375.  *  Y       : Y coordinate relative to the source datum  (input)
  376.  *  Z       : Z coordinate relative to the source datum  (input)
  377.  *  X_WGS84 : X coordinate relative to WGS84             (output)
  378.  *  Y_WGS84 : Y coordinate relative to WGS84             (output)
  379.  *  Z_WGS84 : Z coordinate relative to WGS84             (output)
  380.  */
  381.   long Geocentric_Shift_From_WGS84 (const double X_WGS84,
  382.                                     const double Y_WGS84,
  383.                                     const double Z_WGS84,
  384.                                     const long Index,
  385.                                     double *X,
  386.                                     double *Y,
  387.                                     double *Z);
  388. /*
  389.  *  This function shifts a geocentric coordinate (X, Y, Z in meters) relative
  390.  *  to WGS84 to a geocentric coordinate (X, Y, Z in meters) relative to the
  391.  *  local datum referenced by index.
  392.  *
  393.  *  X_WGS84 : X coordinate relative to WGS84                 (input)
  394.  *  Y_WGS84 : Y coordinate relative to WGS84                 (input)
  395.  *  Z_WGS84 : Z coordinate relative to WGS84                 (input)
  396.  *  Index   : Index of destination datum                     (input)
  397.  *  X       : X coordinate relative to the destination datum (output)
  398.  *  Y       : Y coordinate relative to the destination datum (output)
  399.  *  Z       : Z coordinate relative to the destination datum (output)
  400.  */
  401.   long Geocentric_Datum_Shift ( const long Index_in,
  402.                                 const double X_in,
  403.                                 const double Y_in,
  404.                                 const double Z_in,
  405.                                 const long Index_out,
  406.                                 double *X_out,
  407.                                 double *Y_out,
  408.                                 double *Z_out);
  409. /*
  410.  *  This function shifts a geocentric coordinate (X, Y, Z in meters) relative
  411.  *  to the source datum to geocentric coordinate (X, Y, Z in meters) relative
  412.  *  to the destination datum.
  413.  *
  414.  *  Index_in  : Index of source datum                      (input)
  415.  *  X_in      : X coordinate relative to source datum      (input)
  416.  *  Y_in      : Y coordinate relative to source datum      (input)
  417.  *  Z_in      : Z coordinate relative to source datum      (input)
  418.  *  Index_out : Index of destination datum                 (input)
  419.  *  X_out     : X coordinate relative to destination datum (output)
  420.  *  Y_out     : Y coordinate relative to destination datum (output)
  421.  *  Z_out     : Z coordinate relative to destination datum (output)
  422.  */
  423.   long Geodetic_Shift_To_WGS84 (const long Index,
  424.                                 const double Lat_in,
  425.                                 const double Lon_in,
  426.                                 const double Hgt_in,
  427.                                 double *WGS84_Lat,
  428.                                 double *WGS84_Lon,
  429.                                 double *WGS84_Hgt);
  430. /*
  431.  *  This function shifts geodetic coordinates relative to a given source datum
  432.  *  to geodetic coordinates relative to WGS84.
  433.  *
  434.  *  Index     : Index of source datum                                 (input)
  435.  *  Lat_in    : Latitude in radians relative to source datum          (input)
  436.  *  Lon_in    : Longitude in radians relative to source datum         (input)
  437.  *  Hgt_in    : Height in meters relative to source datum's ellipsoid (input)
  438.  *  WGS84_Lat : Latitude in radians relative to WGS84                 (output)
  439.  *  WGS84_Lon : Longitude in radians relative to WGS84                (output)
  440.  *  WGS84_Hgt : Height in meters relative to WGS84 ellipsoid          (output)
  441.  */
  442.   long Geodetic_Shift_From_WGS84( const double WGS84_Lat,
  443.                                   const double WGS84_Lon,
  444.                                   const double WGS84_Hgt,
  445.                                   const long Index,
  446.                                   double *Lat_out,
  447.                                   double *Lon_out,
  448.                                   double *Hgt_out);
  449. /*
  450.  *  This function shifts geodetic coordinates relative to a WGS84 
  451.  *  to geodetic coordinates relative to a given local datum.
  452.  *                                                                   
  453.  *  WGS84_Lat : Latitude in radians relative to WGS84                      (input)
  454.  *  WGS84_Lon : Longitude in radians relative to WGS84                     (input)
  455.  *  WGS84_Hgt : Height in meters relative to WGS84 ellipsoid               (input)
  456.  *  Index     : Index of destination datum                                 (input)
  457.  *  Lat_in    : Latitude in radians relative to destination datum          (output)
  458.  *  Lon_in    : Longitude in radians relative to destination datum         (output)
  459.  *  Hgt_in    : Height in meters relative to destination datum's ellipsoid (output)
  460.  */
  461.   long Geodetic_Datum_Shift ( const long Index_in,
  462.                               const double Lat_in,
  463.                               const double Lon_in,
  464.                               const double Hgt_in,
  465.                               const long Index_out,
  466.                               double *Lat_out,
  467.                               double *Lon_out,
  468.                               double *Hgt_out);
  469. /*
  470.  *  This function shifts geodetic coordinates (latitude, longitude in radians
  471.  *  and height in meters) relative to the source datum to geodetic coordinates
  472.  *  (latitude, longitude in radians and height in meters) relative to the
  473.  *  destination datum.
  474.  *
  475.  *  Index_in  : Index of source datum                                      (input)
  476.  *  Lat_in    : Latitude in radians relative to source datum               (input)
  477.  *  Lon_in    : Longitude in radians relative to source datum              (input)
  478.  *  Hgt_in    : Height in meters relative to source datum's ellipsoid      (input)
  479.  *  Index_out : Index of destination datum                                 (input)
  480.  *  Lat_out   : Latitude in radians relative to destination datum          (output)
  481.  *  Lon_out   : Longitude in radians relative to destination datum         (output)
  482.  *  Hgt_out   : Height in meters relative to destination datum's ellipsoid (output)
  483.  */
  484.   long Datum_Shift_Error (const long Index_in,
  485.                           const long Index_out,
  486.                           double latitude,
  487.                           double longitude,
  488.                           double *ce90,
  489.                           double *le90,
  490.                           double *se90);
  491. /*
  492.  *  This function returns the 90% horizontal (circular), vertical (linear), and 
  493.  *  spherical errors for a shift from the specified source datum to the 
  494.  *  specified destination datum at the specified location.
  495.  *
  496.  *  Index_in  : Index of source datum                                      (input)
  497.  *  Index_out : Index of destination datum                                 (input)
  498.  *  latitude  : Latitude of point being converted in radians               (input)
  499.  *  longitude : Longitude of point being converted in radians              (input)
  500.  *  ce90      : Combined 90% circular horizontal error in meters           (output)
  501.  *  le90      : Combined 90% linear vertical error in meters               (output)
  502.  *  se90      : Combined 90% spherical error in meters                     (output)
  503.  */
  504. #ifdef __cplusplus 
  505. }
  506. #endif
  507. #endif /* DATUM_H */