码迷,mamicode.com
首页 > 其他好文 > 详细

GPS坐标转大地坐标

时间:2015-05-27 20:49:23      阅读:420      评论:0      收藏:0      [点我收藏+]

标签:


根据网上EXCEL表格给出的关系,生成的C语言代码。计算结果和软件【万能坐标转换980】计算出的结果很接近。
技术分享
  1 double B = 39.3926;
  2 double L = 117.4514;
  3 //double B = 0;
  4 //double L = 117;
  5 double L0 = 117;
  6 
  7 /*
  8 ************************************************************************************************************************
  9 * Description: This function convert longitude/latitude(xx度xx分xxxxxx秒) to longitude/latitude(xx.xxxxxxxx度).
 10 *
 11 * Arguments  :     gps_x_y
 12                 longitude/latitude(xx度mm分ssssss秒) 输入形式为: xx.mmssssss
 13 *
 14 * Note(s)    : none
 15 ************************************************************************************************************************
 16 */
 17 double CALC_GPS_angle(float gps_x_y)
 18 {
 19     /*
 20     double min,sec;
 21     min = (floor(gps_x_y*100)-floor(gps_x_y)*100)/60;
 22     sec = (gps_x_y*10000-floor(gps_x_y*100)*100)/3600;
 23     printf("min = %.6lf\r\n",min);
 24     printf("sec = %.6lf\r\n",sec);
 25     */
 26     return (floor(gps_x_y)+(floor(gps_x_y*100)-floor(gps_x_y)*100)/60+(gps_x_y*10000-floor(gps_x_y*100)*100)/3600);
 27 }
 28 
 29 /*
 30 ************************************************************************************************************************
 31 * Description: 角度转换为弧度.
 32 *
 33 * Arguments  : angle 
 34                 输入形式(xx.xxxxxxxx度)
 35 *
 36 * Note(s)    : none
 37 ************************************************************************************************************************
 38 */
 39 double Angle2RAD(double angle)
 40 {
 41     return (angle*3.1415926/180);    
 42 }
 43 
 44 /*
 45 ************************************************************************************************************************
 46 * Description:     该函数调用以上2个函数完成计算功能.
 47 *
 48 * Arguments  :    input L :    经度longitude -> (xx度mm分ssssss秒) 输入形式为: xx.mmssssss
 49                 input B :    纬度latitude -> (xx度mm分ssssss秒) 输入形式为: xx.mmssssss
 50                 input L0:    中央子午线Central meridian -> (xx度mm分ssssss秒) 输入形式为: xx.mmssssss
 51                 output X:    坐标系的y轴
 52                 output Y    坐标系的x轴
 53 *
 54 * Note(s)    :     none
 55 ************************************************************************************************************************
 56 */
 57 void GpsGrid2GaussGrid(double L0, double B, double L, double* X, double* Y)
 58 {
 59     double E2,F2,G2,H2,I2,J2,K2,L2,M2,N2,O2,P2,Q2,R2;
 60     
 61     E2 = CALC_GPS_angle(B);
 62     #ifdef PRINT_DEG
 63     printf("E2 = %.9lf\r\n",E2);
 64     #endif
 65     F2 = CALC_GPS_angle(L);
 66     #ifdef PRINT_DEG
 67     printf("F2 = %.9lf\r\n",F2);
 68     #endif
 69     G2 = F2 - CALC_GPS_angle(L0);
 70     #ifdef PRINT_DEG
 71     printf("2G = %.9lf\r\n",G2);
 72     #endif
 73     H2 = 0.01744444444*G2;
 74     #ifdef PRINT_DEG
 75     printf("H2 = %.9lf\r\n",H2);
 76     #endif
 77     I2 = tan(Angle2RAD(fabs(E2)));
 78     #ifdef PRINT_DEG
 79     printf("I2 = %.9lf\r\n",I2);
 80     #endif
 81     J2 = cos(Angle2RAD(fabs(E2)));
 82     #ifdef PRINT_DEG
 83     printf("J2 = %.9lf\r\n",J2);
 84     #endif
 85     K2 = 0.006738525415*J2*J2;
 86     #ifdef PRINT_DEG
 87     printf("K2 = %.9lf\r\n",K2);
 88     #endif
 89     L2 = I2*I2;
 90     #ifdef PRINT_DEG
 91     printf("L2 = %.9lf\r\n",L2);
 92     #endif
 93     M2 = 1 + K2;
 94     #ifdef PRINT_DEG
 95     printf("M2 = %.9lf\r\n",M2);
 96     #endif
 97     N2 = 6399698.9018/sqrt(M2);
 98     #ifdef PRINT_DEG
 99     printf("N2 = %.9lf\r\n",N2);
100     #endif
101     O2 = H2*H2*J2*J2;
102     #ifdef PRINT_DEG
103     printf("O2 = %.9lf\r\n",O2);
104     #endif
105     P2 = I2*J2;
106     #ifdef PRINT_DEG
107     printf("P2 = %.9lf\r\n",P2);
108     #endif
109     Q2 = P2*P2;
110     #ifdef PRINT_DEG
111     printf("Q2 = %.9lf\r\n",Q2);
112     #endif
113     R2 = (32005.78006+Q2*(133.92133+Q2*0.7031));
114     #ifdef PRINT_DEG
115     printf("R2 = %.9lf\r\n",R2);
116     #endif
117     
118     *X = 6367558.49686*E2/57.29577951308-P2*J2*R2+((((L2-58)*L2+61)* O2/30+(4*K2+5)*M2-L2)*O2/12+1)*N2*I2*O2/2;
119     *Y = ((((L2-18)*L2-(58*L2-14)*K2+5)*O2/20+M2-L2)*O2/6+1)*N2*(H2*J2)+500000;
120 
121 }
View Code

 

GPS坐标转大地坐标

标签:

原文地址:http://www.cnblogs.com/emlslxl/p/4534124.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!