GPS坐标转大地坐标

根据网上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 }

时间: 2024-10-09 21:23:03

GPS坐标转大地坐标的相关文章

delphi 调用百度地图WEBSERVICE转换GPS坐标

百度地图的API说明 使用方法 第一步,申请密钥(ak),作为访问服务的依据: 第二步,按照请求参数说明拼写发送http请求的url,注意需使用第一步申请的ak: 第三步,接收返回的数据(json或者xml格式). 注:本接口支持回调. 服务地址 http://api.map.baidu.com/geoconv/v1/? 组成说明: 域名:http://api.map.baidu.com 服务名:geoconv 服务版本号:v1 服务参数说明 参数 含义 取值范围 是否必须 默认取值 coord

ios根据gps坐标来计算两点间的距离

//ios根据gps坐标来计算两点间的距离 //x1,y1 点1的坐标 x2,y2点2的坐标 -(double) gps2m:(double)x1 _y1:(double)y1 _x2:(double)x2 _y2:(double)y2{ double radLat1 = (x1 * 3.1416 / 180.0); double radLat2 = (x2 * 3.1416 / 180.0); double a = radLat1 - radLat2; double b = (y1 - y2)

GPS坐标换算为百度坐标

最近在做一个关于手机定位的小应用,需求是这样的,用户通过手机(Wp8)进行二维码扫描操作并且记录用户的当前位置,在PC上可以查看用户所在地图的位置,做法就是在用户扫描条码时,通过手机GPS获取当前在地图上的位置(采用百度静态地图,根据坐标直接生成图片)并将图片保存到数据库,PC端直接从数据库中读取并展示图片.问题是:生成的图片所呈现的位置与实际位置偏差太大.于是我开始踏上了寻找解决办法的道路. 首先我检测我的硬件设备是否定位准确,我用WP8手机内置的地图进行了当前位置定位,结果没有问题,说明我的

地图坐标转换 -- 火星坐标与GPS坐标

第一次处理地理位置的数据的人,没什么经验,往往掉入很多坑浪费不少时间.我也是刚刚从坑里爬出来.这篇博文主要是把入门GPS轨迹分析的经验总结一下,以方便大家少走些弯路. (1)可视化 GPS 路径 刚拿到一堆GPS轨迹数据,想看看它长什么样?于是先想办法把它们可视化出来.有很多地图的API可以用,如果不是想搞演示,只是为了快速随便看一眼的话,推荐用百度的在线示例API  http://developer.baidu.com/map/jsdemo.htm#c1_3  里面有比较详细的例子,很丰富的操

计算两个GPS坐标点的距离

计算两个GPS坐标点的距离,第一个参数是第一个点的维度,第二个参数是第一个点的经度 http://yuninglovekefan.blog.sohu.com/235655696.html /** * */ package utils; /** * 坐标计算的工具类 * * @author ywf * */ public class PositionUtils { private static final double EARTH_RADIUS = 6371.004; static double

GPS坐标 转 ECEF地球坐标

#include "stdafx.h" #include <math.h> #define  PI 3.14159 /* 该程序主要是实现从GPS坐标转换为地球的三维坐标的函数 */ void GPS2ECEF(double latitude, double longitude, double height, double &X, double &Y, double &Z) { double a = 6378137; double b = 63567

GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)(转载)

WGS-84:是国际标准,GPS坐标(Google Earth使用.或者GPS模块)GCJ-02:中国坐标偏移标准,Google Map.高德.腾讯使用BD-09:百度坐标偏移标准,Baidu Map使用//WGS-84 to GCJ-02GPS.gcj_encrypt();//GCJ-02 to WGS-84 粗略GPS.gcj_decrypt();//GCJ-02 to WGS-84 精确(二分极限法)// var threshold = 0.000000001; 目前设置的是精确到小数点后

GPS坐标转化为百度坐标

============问题描述============ 想把手机采集的GPS坐标转化为百度坐标,在网上找了一下代码: GeoPoint geoPoint3 = new GeoPoint((int) ((mLat1 + 0.001) * 1E6), (int) ((mLon1 + 0.003) * 1E6)); GeoPoint GeoPointBaidu = CoordinateConvert.fromWgs84ToBaidu(geoPoint3);  mOverlayList.add(new

GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)

WGS-84:是国际标准,GPS坐标(Google Earth使用.或者GPS模块)GCJ-02:中国坐标偏移标准,Google Map.高德.腾讯使用BD-09:百度坐标偏移标准,Baidu Map使用 //WGS-84 to GCJ-02GPS.gcj_encrypt(); //GCJ-02 to WGS-84 粗略GPS.gcj_decrypt(); //GCJ-02 to WGS-84 精确(二分极限法)// var threshold = 0.000000001; 目前设置的是精确到小