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

GDI/图象编程

开发平台:

Visual C++

  1. #ifndef Gauss_H
  2. #define Gauss_H
  3. /***************************************************************************/
  4. /* RSC IDENTIFIER: Gauss
  5. *
  6. * ABSTRACT
  7. *
  8. *    This component provides conversions between geodetic coordinates 
  9. *    (latitude and longitudes) and Universal Transverse Mercator (Gauss)
  10. *    projection (zone, hemisphere, easting, and northing) coordinates.
  11. *
  12. * ERROR HANDLING
  13. *
  14. *    This component checks parameters for valid values.  If an invalid value
  15. *    is found, the error code is combined with the current error code using 
  16. *    the bitwise or.  This combining allows multiple error codes to be
  17. *    returned. The possible error codes are:
  18. *
  19. *          GAUSS_NO_ERROR           : No errors occurred in function
  20. *          GAUSS_LAT_ERROR          : Latitude outside of valid range
  21. *                                    (-80.5 to 84.5 degrees)
  22. *          GAUSS_LON_ERROR          : Longitude outside of valid range
  23. *                                    (-180 to 360 degrees)
  24. *          GAUSS_EASTING_ERROR      : Easting outside of valid range
  25. *                                    (100,000 to 900,000 meters)
  26. *          GAUSS_NORTHING_ERROR     : Northing outside of valid range
  27. *                                    (0 to 10,000,000 meters)
  28. *          GAUSS_ZONE_ERROR         : Zone outside of valid range (1 to 60)
  29. *          GAUSS_HEMISPHERE_ERROR   : Invalid hemisphere ('N' or 'S')
  30. *          GAUSS_ZONE_OVERRIDE_ERROR: Zone outside of valid range
  31. *                                    (1 to 60) and within 1 of 'natural' zone
  32. *          GAUSS_A_ERROR            : Semi-major axis less than or equal to zero
  33. *          GAUSS_INV_F_ERROR        : Inverse flattening outside of valid range
  34. *                    (250 to 350)
  35. *
  36. * REUSE NOTES
  37. *
  38. *    Gauss is intended for reuse by any application that performs a Universal
  39. *    Transverse Mercator (Gauss) projection or its inverse.
  40. *    
  41. * REFERENCES
  42. *
  43. *    Further information on Gauss can be found in the Reuse Manual.
  44. *
  45. *    Gauss originated from :  U.S. Army Topographic Engineering Center
  46. *                           Geospatial Information Division
  47. *                           7701 Telegraph Road
  48. *                           Alexandria, VA  22310-3864
  49. *
  50. * LICENSES
  51. *
  52. *    None apply to this component.
  53. *
  54. * RESTRICTIONS
  55. *
  56. *    Gauss has no restrictions.
  57. *
  58. * ENVIRONMENT
  59. *
  60. *    Gauss was tested and certified in the following environments:
  61. *
  62. *    1. Solaris 2.5 with GCC, version 2.8.1
  63. *    2. MSDOS with MS Visual C++, version 6
  64. *
  65. * MODIFICATIONS
  66. *
  67. *    Date              Description
  68. *    ----              -----------
  69. *    10-02-97          Original Code
  70. *
  71. */
  72. /***************************************************************************/
  73. /*
  74. *                              DEFINES
  75. */
  76. #define GAUSS_NO_ERROR            0x0000
  77. #define GAUSS_LAT_ERROR           0x0001
  78. #define GAUSS_LON_ERROR           0x0002
  79. #define GAUSS_EASTING_ERROR       0x0004
  80. #define GAUSS_NORTHING_ERROR      0x0008
  81. #define GAUSS_ZONE_ERROR          0x0010
  82. #define GAUSS_HEMISPHERE_ERROR    0x0020
  83. #define GAUSS_ZONE_OVERRIDE_ERROR 0x0040
  84. #define GAUSS_A_ERROR             0x0080
  85. #define GAUSS_INV_F_ERROR         0x0100
  86. /***************************************************************************/
  87. /*
  88. *                              FUNCTION PROTOTYPES
  89. *                                for Gauss.C
  90. */
  91. /* ensure proper linkage to c++ programs */
  92. #ifdef __cplusplus
  93. extern "C" {
  94. #endif
  95. long Set_Gauss_Parameters(double a,      
  96. double f,
  97. double L0_rad);
  98. /*
  99. * The function Set_Gauss_Parameters receives the ellipsoid parameters and
  100. * Gauss zone override parameter as inputs, and sets the corresponding state
  101. * variables.  If any errors occur, the error code(s) are returned by the 
  102. * function, otherwise Gauss_NO_ERROR is returned.
  103. *
  104. *    a                 : Semi-major axis of ellipsoid, in meters       (input)
  105. *    f                 : Flattening of ellipsoid                       (input)
  106. *    override          : Gauss override zone, zero indicates no override (input)
  107. */
  108. void Get_Gauss_Parameters(double *a,
  109. double *f,
  110. double *L0_rad);
  111. /*
  112. * The function Get_Gauss_Parameters returns the current ellipsoid
  113. * parameters and Gauss zone override parameter.
  114. *
  115. *    a                 : Semi-major axis of ellipsoid, in meters       (output)
  116. *    f                 : Flattening of ellipsoid                       (output)
  117. *    override          : Gauss override zone, zero indicates no override (output)
  118. */
  119. long Convert_Geodetic_To_Gauss (double Latitude,
  120. double Longitude,
  121. double *Easting,
  122. double *Northing); 
  123. /*
  124. * The function Convert_Geodetic_To_Gauss converts geodetic (latitude and
  125. * longitude) coordinates to Gauss projection (zone, hemisphere, easting and
  126. * northing) coordinates according to the current ellipsoid and Gauss zone
  127. * override parameters.  If any errors occur, the error code(s) are returned
  128. * by the function, otherwise Gauss_NO_ERROR is returned.
  129. *
  130. *    Latitude          : Latitude in radians                 (input)
  131. *    Longitude         : Longitude in radians                (input)
  132. *    Zone              : Gauss zone                            (output)
  133. *    Hemisphere        : North or South hemisphere           (output)
  134. *    Easting           : Easting (X) in meters               (output)
  135. *    Northing          : Northing (Y) in meters              (output)
  136. */
  137. long Convert_Gauss_To_Geodetic(double Easting,
  138. double Northing,
  139. double *Latitude,
  140. double *Longitude);
  141. /*
  142. * The function Convert_Gauss_To_Geodetic converts Gauss projection (zone, 
  143. * hemisphere, easting and northing) coordinates to geodetic(latitude
  144. * and  longitude) coordinates, according to the current ellipsoid
  145. * parameters.  If any errors occur, the error code(s) are returned
  146. * by the function, otherwise GAUSS__NO_ERROR is returned.
  147. *
  148. *    Zone              : Gauss zone                               (input)
  149. *    Hemisphere        : North or South hemisphere              (input)
  150. *    Easting           : Easting (X) in meters                  (input)
  151. *    Northing          : Northing (Y) in meters                 (input)
  152. *    Latitude          : Latitude in radians                    (output)
  153. *    Longitude         : Longitude in radians                   (output)
  154. */
  155. /*
  156. ////GeoView_Tech_Mark_Begin
  157. //================================================================//
  158. //GeoView_Doc_Mark_Begin       
  159. // 函数名: GaussTransStrip
  160. //        功  能: 高斯投影换带转换
  161. // 参  数:
  162. // (入口):    double source_easting,double source_northing, 原投影带的x,y坐标点;double source_L0,原投影带中央经线
  163. // double result_L0,目标投影带中央经线;  a - 地球长轴, afa - 扁率倒数
  164. // (出口): double &result_easting, double &result_northing  函数中坐标为转换过的坐标, x 轴指向东, y轴指向北
  165. // 返  回:    无
  166. // 调用方法: GaussTransStrip(double source_easting,double source_northing, double source_L0,double result_L0, double a,double afa,double &result_easting, double &result_northing)
  167. //GeoView_Doc_Mark_End   
  168. // 主要思路:
  169. // 创建日期:2004/3/4 李新川
  170. // 修改日期:2004/3/4  李新川
  171. //================================================================//
  172. */
  173. void Convert_Gauss_Trans_Strip(double source_easting,
  174. double source_northing, 
  175. double source_L0,
  176. double result_L0, 
  177. double *result_easting, 
  178. double *result_northing);
  179. #ifdef __cplusplus
  180. }
  181. #endif
  182. #endif /* Gauss_H */