12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /**
- ******************************************************************************
- * @file : studio_proj_c.h
- * @author : wangyingjie
- * @brief : 经纬度 转 高斯投影,墨卡托投影,地心地固直角坐标系 C 语言版
- * : 中央经线计算公式: double central = (int)(lon / 3) * 3;
- * @attention : None
- * @date : 2025/5/9
- ******************************************************************************
- */
- #ifndef STUDIO_PROJ_C_H
- #define STUDIO_PROJ_C_H
- #include <math.h>
- #define DEG2RAD_C(deg) ((deg) * M_PI / 180.0)
- #define RAD2DEG_C(rad) ((rad) * 180.0 / M_PI)
- #define WGS84_A_C 6378137.0 // 长半轴
- #define WGS84_E2_C 0.0066943799901413165 // 第一偏心扁率的平方
- #define INVF_C 298.257223563 // 扁率的倒数
- #define WGS84_B_C 6356752.3142 // 短半轴
- #define WGS84_F_C 1 / INVF_C // 扁率
- #define WGS84_E2_C ((2 * WGS84_F_C) - (WGS84_F_C * WGS84_F_C)) // 第一偏心扁率的平方
- /// 经纬度 转 高斯克吕格投影
- /// \param central 中央经线 (度)
- /// \param lon 经度 (度)
- /// \param lat 纬度 (度)
- /// \param gx 高斯坐标 x(m)
- /// \param gy 高斯坐标 y(m)
- void lonlat_to_gauss(const double central, const double lon, const double lat, double *gx, double *gy);
- /// 高斯克吕格投影 转 经纬度
- /// \param central 中央经线 (度)
- /// \param gx 高斯坐标 x(m)
- /// \param gy 高斯坐标 y(m)
- /// \param lon 经度 (度)
- /// \param lat 纬度 (度)
- void gauss_to_lonlat(const double central, const double gx, const double gy, double *lon, double *lat);
- /// 经纬度 转 墨卡托投影
- /// \param lon 经度 (度)
- /// \param lat 纬度 (度)
- /// \param mctx 墨卡托投影 x(m)
- /// \param mcty 墨卡托投影 y(m)
- void lonlat_to_mercator(const double lon, const double lat, double *mctx, double *mcty);
- /// 墨卡托投影 转 经纬度
- /// \param mctx 墨卡托投影 x(m)
- /// \param mcty 墨卡托投影 y(m)
- /// \param lon 经度 (度)
- /// \param lat 纬度 (度)
- void mercator_to_lonlat(const double mctx, const double mcty, double *lon, double *lat);
- /// 墨卡托投影 转 高斯投影
- /// \param central 中央经线 (度)
- /// \param gx 墨卡托投影 x(m)
- /// \param gy 墨卡托投影 y(m)
- /// \param mctx 高斯投影 x(m)
- /// \param mcty 高斯投影 y(m)
- void gauss_to_mercator(const double central, const double gx, const double gy, double *mctx, double *mcty);
- /// 高斯投影 转 墨卡托投影
- /// \param central 中央经线 (度)
- /// \param mctx 墨卡托投影 x(m)
- /// \param mcty 墨卡托投影 y(m)
- /// \param gx 高斯投影 x(m)
- /// \param gy 高斯投影 y(m)
- void mercator_to_gauss(const double central, const double mctx, const double mcty, double *gx, double *gy);
- /// 经纬坐标系 转 地心地固直角坐标系
- /// \param lon 经度 (度)
- /// \param lat 纬度 (度)
- /// \param height 高程 (m)
- /// \param x 地心地固直角坐标系 x (m)
- /// \param y 地心地固直角坐标系 y (m)
- /// \param z 地心地固直角坐标系 z (m)
- void lonlat_to_ecef(const double lon, const double lat, const double height, double *x, double *y, double *z);
- /// 经纬坐标系 转 地心地固直角坐标系
- /// \param x 地心地固直角坐标系 x (m)
- /// \param y 地心地固直角坐标系 y (m)
- /// \param z 地心地固直角坐标系 z (m)
- /// \param lon 经度 (度)
- /// \param lat 纬度 (度)
- /// \param height 高程 (m)
- void ecef_to_lonlat(const double x, const double y, const double z, double *lon, double *lat, double *height);
- #endif // STUDIO_PROJ_C_H
|