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

GDI/图象编程

开发平台:

Visual C++

  1. #ifndef ELLIPSE_H
  2. #define ELLIPSE_H
  3. /****************************************************************************/
  4. /* RSC IDENTIFIER:  Ellipsoid
  5.  *
  6.  * ABSTRACT
  7.  *
  8.  *    The purpose of ELLIPSOID is to provide access to ellipsoid parameters 
  9.  *    for a collection of common ellipsoids.  A particular ellipsoid can be 
  10.  *    accessed by using its standard 2-letter code to find its index in the 
  11.  *    ellipsoid table.  The index can then be used to retrieve the ellipsoid 
  12.  *    name and parameters.
  13.  *
  14.  *    By sequentially retrieving all of the ellipsoid codes and/or names, a 
  15.  *    menu of the available ellipsoids can be constructed.  The index values 
  16.  *    resulting from selections from this menu can then be used to access the 
  17.  *    parameters of the selected ellipsoid.
  18.  *
  19.  *    This component depends on a data file named "ellips.dat", which contains
  20.  *    the ellipsoid parameter values.  A copy of this file must be located in 
  21.  *    the directory specified by the environment variable "ELLIPSOID_DATA", if 
  22.  *    defined, or else in the current directory, whenever a program containing 
  23.  *    this component is executed.
  24.  *
  25.  *    Additional ellipsoids can be added to this file, either manually or using 
  26.  *    the Create_Ellipsoid function.  However, if a large number of ellipsoids 
  27.  *    are added, the ellipsoid table array size in this component will have to 
  28.  *    be increased.
  29.  *
  30.  * ERROR HANDLING
  31.  *
  32.  *    This component checks parameters for valid values.  If an invalid value
  33.  *    is found, the error code is combined with the current error code using 
  34.  *    the bitwise or.  This combining allows multiple error codes to be
  35.  *    returned. The possible error codes are:
  36.  *
  37.  *  ELLIPSE_NO_ERROR             : No errors occured in function
  38.  *  ELLIPSE_FILE_OPEN_ERROR      : Ellipsoid file opening error
  39.  *  ELLIPSE_INITIALIZE_ERROR     : Ellipsoid database can not initialize
  40.  *  ELLIPSE_TABLE_OVERFLOW_ERROR : Ellipsoid table overflow
  41.  *  ELLIPSE_NOT_INITIALIZED_ERROR: Ellipsoid database not initialized properly
  42.  *  ELLIPSE_INVALID_INDEX_ERROR  : Index is an invalid value
  43.  *  ELLIPSE_INVALID_CODE_ERROR   : Code was not found in database
  44.  *  ELLIPSE_A_ERROR              : Semi-major axis less than or equal to zero
  45.  *  ELLIPSE_INV_F_ERROR          : Inverse flattening outside of valid range
  46.  *                                 (250 to 350)
  47.  *  ELLIPSE_IN_USE_ERROR         : User defined ellipsoid is in use by a user 
  48.  *                                  defined datum
  49.  *  ELLIPSE_NOT_USERDEF_ERROR    : Ellipsoid is not user defined - cannot be
  50.  *                                  deleted
  51.  *
  52.  * REUSE NOTES
  53.  *
  54.  *    Ellipsoid is intended for reuse by any application that requires Earth
  55.  *    approximating ellipsoids.
  56.  *     
  57.  * REFERENCES
  58.  *
  59.  *    Further information on Ellipsoid can be found in the Reuse Manual.
  60.  *
  61.  *    Ellipsoid originated from :  U.S. Army Topographic Engineering Center (USATEC)
  62.  *                                 Geospatial Information Division (GID)
  63.  *                                 7701 Telegraph Road
  64.  *                                 Alexandria, VA  22310-3864
  65.  *
  66.  * LICENSES
  67.  *
  68.  *    None apply to this component.
  69.  *
  70.  * RESTRICTIONS
  71.  *
  72.  *    Ellipsoid has no restrictions.
  73.  *
  74.  * ENVIRONMENT
  75.  *
  76.  *    Ellipsoid was tested and certified in the following environments
  77.  *
  78.  *    1. Solaris 2.5
  79.  *    2. Windows 95 
  80.  *
  81.  * MODIFICATIONS
  82.  *
  83.  *    Date              Description
  84.  *    ----              -----------
  85.  *    11-19-95          Original Code
  86.  *    17-Jan-97         Moved local constants out of public interface
  87.  *                      Improved efficiency in algorithms (GEOTRANS)
  88.  *    24-May-99         Added user-defined ellipsoids (GEOTRANS for JMTK)
  89.  *
  90.  */
  91. /***************************************************************************/
  92. /*
  93.  *                               GLOBALS
  94.  */
  95. #define ELLIPSE_NO_ERROR              0x0000
  96. #define ELLIPSE_FILE_OPEN_ERROR       0x0001
  97. #define ELLIPSE_INITIALIZE_ERROR      0x0002
  98. #define ELLIPSE_TABLE_OVERFLOW_ERROR  0x0004
  99. #define ELLIPSE_NOT_INITIALIZED_ERROR 0x0008
  100. #define ELLIPSE_INVALID_INDEX_ERROR   0x0010
  101. #define ELLIPSE_INVALID_CODE_ERROR    0x0020
  102. #define ELLIPSE_A_ERROR               0x0040
  103. #define ELLIPSE_INV_F_ERROR           0x0080
  104. #define ELLIPSE_IN_USE_ERROR          0x0100
  105. #define ELLIPSE_NOT_USERDEF_ERROR     0x0200
  106. /***************************************************************************/
  107. /*
  108.  *                          FUNCTION PROTOTYPES
  109.  *                             for ellipse.c
  110.  */
  111. /* ensure proper linkage to c++ programs */
  112. #ifdef __cplusplus 
  113. extern "C" {
  114. #endif
  115.   long Initialize_Ellipsoids ();
  116. /*
  117.  * The function Initialize_Ellipsoids reads ellipsoid data from ellips.dat in
  118.  * the current directory and builds the ellipsoid table from it.  If an error
  119.  * occurs, the error code is returned, otherwise ELLIPSE_NO_ERROR is returned.
  120.  */
  121.   long Create_Ellipsoid (const char* Code,
  122.                          const char* Name,
  123.                          double a,
  124.                          double f);
  125. /*
  126.  *   Code     : 2-letter ellipsoid code.                      (input)
  127.  *   Name     : Name of the new ellipsoid                     (input)
  128.  *   a        : Semi-major axis, in meters, of new ellipsoid  (input)
  129.  *   f        : Flattening of new ellipsoid.                  (input)
  130.  *
  131.  * The function Create_Ellipsoid creates a new ellipsoid with the specified
  132.  * code, name, and axes.  If the ellipsoid table has not been initialized,
  133.  * the specified code is already in use, or a new version of the ellips.dat 
  134.  * file cannot be created, an error code is returned, otherwise ELLIPSE_NO_ERROR 
  135.  * is returned.  Note that the indexes of all ellipsoids in the ellipsoid
  136.  * table may be changed by this function.
  137.  */
  138.  long Delete_Ellipsoid (const char* Code); 
  139. /*
  140.  *   Code     : 2-letter ellipsoid code.                      (input)
  141.  *
  142.  * The function Delete_Ellipsoid deletes a user defined ellipsoid with 
  143.  * the specified Code.  If the ellipsoid table has not been created,
  144.  * the specified code is in use by a user defined datum, or a new version  
  145.  * of the ellips.dat file cannot be created, an error code is returned, 
  146.  * otherwise ELLIPSE_NO_ERROR is returned.  Note that the indexes of all  
  147.  * ellipsoids in the ellipsoid table may be changed by this function.
  148.  */
  149.   long Ellipsoid_Count ( long *Count );
  150. /*
  151.  *   Count    : The number of ellipsoids in the ellipsoid table. (output)
  152.  *
  153.  * The function Ellipsoid_Count returns the number of ellipsoids in the
  154.  * ellipsoid table.  If the ellipsoid table has been initialized without error,
  155.  * ELLIPSE_NO_ERROR is returned, otherwise ELLIPSE_NOT_INITIALIZED_ERROR
  156.  * is returned.
  157.  */
  158.   long Ellipsoid_Index ( const char *Code,
  159.                          long *Index );
  160. /*
  161.  *    Code     : 2-letter ellipsoid code.                      (input)
  162.  *    Index    : Index of the ellipsoid in the ellipsoid table with the 
  163.  *                  specified code                             (output)
  164.  *
  165.  *  The function Ellipsoid_Index returns the index of the ellipsoid in 
  166.  *  the ellipsoid table with the specified code.  If ellipsoid code is found, 
  167.  *  ELLIPSE_NO_ERROR is returned, otherwise ELLIPSE_INVALID_CODE_ERROR is 
  168.  *  returned.
  169.  */
  170.   long Ellipsoid_Name ( const long Index, 
  171.                         char *Name );
  172. /*
  173.  *    Index   : Index of a given ellipsoid.in the ellipsoid table with the
  174.  *                 specified index                             (input)
  175.  *    Name    : Name of the ellipsoid referencd by index       (output)
  176.  *
  177.  *  The Function Ellipsoid_Name returns the name of the ellipsoid in 
  178.  *  the ellipsoid table with the specified index.  If index is valid, 
  179.  *  ELLIPSE_NO_ERROR is returned, otherwise ELLIPSE_INVALID_INDEX_ERROR is
  180.  *  returned.
  181.  */
  182.   long Ellipsoid_Code ( const long Index,
  183.                         char *Code );
  184. /*
  185.  *    Index    : Index of a given ellipsoid in the ellipsoid table (input)
  186.  *    Code     : 2-letter ellipsoid code.                          (output)
  187.  *
  188.  *  The Function Ellipsoid_Code returns the 2-letter code for the 
  189.  *  ellipsoid in the ellipsoid table with the specified index.  If index is 
  190.  *  valid, ELLIPSE_NO_ERROR is returned, otherwise ELLIPSE_INVALID_INDEX_ERROR 
  191.  *  is returned.
  192.  */
  193.   long Ellipsoid_Parameters ( const long Index,
  194.                               double *a,
  195.                               double *f );
  196. /*
  197.  *    Index    : Index of a given ellipsoid in the ellipsoid table (input)
  198.  *    a        : Semi-major axis, in meters, of ellipsoid          (output)
  199.  *    f        : Flattening of ellipsoid.                          (output)
  200.  *
  201.  *  The function Ellipsoid_Parameters returns the semi-major axis and flattening
  202.  *  of the ellipsoid with the specified index.  If index is valid,
  203.  *  ELLIPSE_NO_ERROR is returned, otherwise ELLIPSE_INVALID_INDEX_ERROR is 
  204.  *  returned.
  205.  */
  206.   long Ellipsoid_Eccentricity2 ( const long Index,
  207.                                  double *e2 );
  208. /*
  209.  *    Index    : Index of a given ellipsoid in the ellipsoid table (input)
  210.  *    e2       : Square of eccentricity of ellipsoid               (output)
  211.  *
  212.  *  The function Ellipsoid_Eccentricity2 returns the square of the 
  213.  *  eccentricity for the ellipsoid with the specified index.  If index is 
  214.  *  valid, ELLIPSE_NO_ERROR is returned, otherwise ELLIPSE_INVALID_INDEX_ERROR 
  215.  *  is returned.
  216.  */
  217.   long Ellipsoid_User_Defined ( const long Index,
  218.                   long *result );
  219. /*
  220.  *    Index    : Index of a given ellipsoid in the ellipsoid table (input)
  221.  *    result   : Indicates whether specified ellipsoid is user defined (1)
  222.  *               or not (0)                                        (output)
  223.  *
  224.  *  The function Ellipsoid_User_Defined returns 1 if the ellipsoid is user 
  225.  *  defined.  Otherwise, 0 is returned.  If index is valid ELLIPSE_NO_ERROR is
  226.  *  returned, otherwise ELLIPSE_INVALID_INDEX_ERROR is returned.
  227.  */
  228.   long WGS84_Parameters ( double *a,
  229.                           double *f);
  230. /*
  231.  *    a      : Semi-major axis, in meters, of ellipsoid       (output)
  232.  *    f      : Flattening of ellipsoid                        (output)
  233.  *
  234.  *  The function WGS84_Parameters returns the semi-major axis and the
  235.  *  flattening for the WGS84 ellipsoid.  If the ellipsoid table was 
  236.  *  initialized successfully, ELLIPSE_NO_ERROR is returned, otherwise 
  237.  *  ELLIPSE_NOT_INITIALIZED_ERROR is returned.
  238.  */
  239.   long WGS84_Eccentricity2 ( double *e2 );
  240. /*
  241.  *    e2    : Square of eccentricity of WGS84 ellipsoid      (output)
  242.  *
  243.  *  The function WGS84_Eccentricity2 returns the square of the 
  244.  *  eccentricity for the WGS84 ellipsoid.  If the ellipsoid table was 
  245.  *  initialized successfully, ELLIPSE_NO_ERROR is returned, otherwise 
  246.  *  ELLIPSE_NOT_INITIALIZED_ERROR is returned.
  247.  */
  248.   long WGS72_Parameters( double *a,
  249.                          double *f );
  250. /*
  251.  *    a    : Semi-major axis, in meters, of ellipsoid        (output)
  252.  *    f    : Flattening of ellipsoid                         (output)
  253.  *
  254.  *  The function WGS72_Parameters returns the semi-major axis and the 
  255.  *  flattening for the WGS72 ellipsoid.  If the ellipsoid table was 
  256.  *  initialized successfully, ELLIPSE_NO_ERROR is returned, otherwise 
  257.  *  ELLIPSE_NOT_INITIALIZED_ERROR is returned.
  258.  */
  259.   long WGS72_Eccentricity2 ( double *e2 );
  260. /*
  261.  *    e2     : Square of eccentricity of WGS84 ellipsoid     (output)
  262.  *
  263.  *  The function WGS72_Eccentricity2 returns the square of the 
  264.  *  eccentricity for the WGS72 ellipsoid.  If the ellipsoid table was 
  265.  *  initialized successfully, ELLIPSE_NO_ERROR is returned, otherwise 
  266.  *  ELLIPSE_NOT_INITIALIZED_ERROR is returned.
  267.  */
  268. #ifdef __cplusplus 
  269. }
  270. #endif
  271. #endif /* ELLIPSE_H */