studio_proj_c.h 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /**
  2. ******************************************************************************
  3. * @file : studio_proj_c.h
  4. * @author : wangyingjie
  5. * @brief : 经纬度 转 高斯投影,墨卡托投影,地心地固直角坐标系 C 语言版
  6. * : 中央经线计算公式: double central = (int)(lon / 3) * 3;
  7. * @attention : None
  8. * @date : 2025/5/9
  9. ******************************************************************************
  10. */
  11. #ifndef STUDIO_PROJ_C_H
  12. #define STUDIO_PROJ_C_H
  13. #include <math.h>
  14. #define AO_M_PI 3.14159265358979323846 /* pi */
  15. #define DEG2RAD_C(deg) ((deg) * AO_M_PI / 180.0)
  16. #define RAD2DEG_C(rad) ((rad) * 180.0 / AO_M_PI)
  17. #define WGS84_A_C 6378137.0 // 长半轴
  18. #define WGS84_E2_C 0.0066943799901413165 // 第一偏心扁率的平方
  19. #define INVF_C 298.257223563 // 扁率的倒数
  20. #define WGS84_B_C 6356752.3142 // 短半轴
  21. #define WGS84_F_C 1 / INVF_C // 扁率
  22. #define WGS84_E2_C ((2 * WGS84_F_C) - (WGS84_F_C * WGS84_F_C)) // 第一偏心扁率的平方
  23. /// 经纬度 转 高斯克吕格投影
  24. /// \param central 中央经线 (度)
  25. /// \param lon 经度 (度)
  26. /// \param lat 纬度 (度)
  27. /// \param gx 高斯坐标 x(m)
  28. /// \param gy 高斯坐标 y(m)
  29. void lonlat_to_gauss(const double central, const double lon, const double lat, double *gx, double *gy);
  30. /// 高斯克吕格投影 转 经纬度
  31. /// \param central 中央经线 (度)
  32. /// \param gx 高斯坐标 x(m)
  33. /// \param gy 高斯坐标 y(m)
  34. /// \param lon 经度 (度)
  35. /// \param lat 纬度 (度)
  36. void gauss_to_lonlat(const double central, const double gx, const double gy, double *lon, double *lat);
  37. /// 经纬度 转 墨卡托投影
  38. /// \param lon 经度 (度)
  39. /// \param lat 纬度 (度)
  40. /// \param mctx 墨卡托投影 x(m)
  41. /// \param mcty 墨卡托投影 y(m)
  42. void lonlat_to_mercator(const double lon, const double lat, double *mctx, double *mcty);
  43. /// 墨卡托投影 转 经纬度
  44. /// \param mctx 墨卡托投影 x(m)
  45. /// \param mcty 墨卡托投影 y(m)
  46. /// \param lon 经度 (度)
  47. /// \param lat 纬度 (度)
  48. void mercator_to_lonlat(const double mctx, const double mcty, double *lon, double *lat);
  49. /// 墨卡托投影 转 高斯投影
  50. /// \param central 中央经线 (度)
  51. /// \param gx 墨卡托投影 x(m)
  52. /// \param gy 墨卡托投影 y(m)
  53. /// \param mctx 高斯投影 x(m)
  54. /// \param mcty 高斯投影 y(m)
  55. void gauss_to_mercator(const double central, const double gx, const double gy, double *mctx, double *mcty);
  56. /// 高斯投影 转 墨卡托投影
  57. /// \param central 中央经线 (度)
  58. /// \param mctx 墨卡托投影 x(m)
  59. /// \param mcty 墨卡托投影 y(m)
  60. /// \param gx 高斯投影 x(m)
  61. /// \param gy 高斯投影 y(m)
  62. void mercator_to_gauss(const double central, const double mctx, const double mcty, double *gx, double *gy);
  63. /// 经纬坐标系 转 地心地固直角坐标系
  64. /// \param lon 经度 (度)
  65. /// \param lat 纬度 (度)
  66. /// \param height 高程 (m)
  67. /// \param x 地心地固直角坐标系 x (m)
  68. /// \param y 地心地固直角坐标系 y (m)
  69. /// \param z 地心地固直角坐标系 z (m)
  70. void lonlat_to_ecef(const double lon, const double lat, const double height, double *x, double *y, double *z);
  71. /// 经纬坐标系 转 地心地固直角坐标系
  72. /// \param x 地心地固直角坐标系 x (m)
  73. /// \param y 地心地固直角坐标系 y (m)
  74. /// \param z 地心地固直角坐标系 z (m)
  75. /// \param lon 经度 (度)
  76. /// \param lat 纬度 (度)
  77. /// \param height 高程 (m)
  78. void ecef_to_lonlat(const double x, const double y, const double z, double *lon, double *lat, double *height);
  79. #endif // STUDIO_PROJ_C_H