坐标转换源代码--gps定位程序(c++)

上传人:子 文档编号:43780085 上传时间:2018-06-07 格式:DOC 页数:7 大小:31.50KB
返回 下载 相关 举报
坐标转换源代码--gps定位程序(c++)_第1页
第1页 / 共7页
坐标转换源代码--gps定位程序(c++)_第2页
第2页 / 共7页
坐标转换源代码--gps定位程序(c++)_第3页
第3页 / 共7页
坐标转换源代码--gps定位程序(c++)_第4页
第4页 / 共7页
坐标转换源代码--gps定位程序(c++)_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《坐标转换源代码--gps定位程序(c++)》由会员分享,可在线阅读,更多相关《坐标转换源代码--gps定位程序(c++)(7页珍藏版)》请在金锄头文库上搜索。

1、坐标转换源代码坐标转换源代码-GPS-GPS 定位程序定位程序(C+)(C+)坐标转换源代码-GPS 定位程序(C+)GPS 数据处理中为了满足不同的需要,处理的数据要进行坐标转换,得到在不同坐标系统下的结果,下面是笛卡尔坐标系,大地坐标系,站心地平坐标系(线型和极坐标形式)之间的转换源代码:头文件:#ifndef _COORDCOVERT_H#define _COORDCOVERT_H#include “stdlib.h“/WGS-84 椭球体参数const double a=6378137.0;/长半轴const double flattening=1/298.257223563;/扁率c

2、onst double delta=0.0000001;typedef struct tagCRDCARTESIANdouble x;double y;double z;CRDCARTESIAN;typedef CRDCARTESIAN *PCRDCARTESIAN;/笛卡尔坐标系typedef struct tagCRDGEODETICdouble longitude;double latitude;double height;CRDGEODETIC;typedef CRDGEODETIC *PCRDGEODETIC;/大地坐标系typedef struct tagCRDTOPOCENTRI

3、Cdouble northing;double easting;double upping;CRDTOPOCENTRIC;typedef CRDTOPOCENTRIC *PCRDTOPOCENTRIC;/站心地平坐标系(线坐标形式)typedef struct tagCRDTOPOCENTRICPOLARdouble range;double azimuth;double elevation;CRDTOPOCENTRICPOLAR;typedef CRDTOPOCENTRICPOLAR *PCRDTOPOCENTRICPOLAR;/站心地平坐标系(极坐标形式)/由笛卡尔坐标转换为大地坐标voi

4、d CartesianToGeodetic (PCRDGEODETIC pcg, PCRDCARTESIAN pcc,double dSemiMajorAxis, double dFlattening);/pcg:指向所转换出的大地坐标的指针;/pcc:指向待转换的笛卡尔坐标的指针;/dSemiMajorAxis:参考椭球的长半轴;/dFlattening:参考椭球的扁率。/由大地坐标转换为笛卡尔坐标void GeodeticToCartesian (PCRDCARTESIAN pcc, PCRDGEODETIC pcg,double dSemiMajorAxis, double dFlatt

5、ening);/pcc:指向所转换出的笛卡尔坐标的指针;/pcg:指向待转换的大地坐标的指针;/dSemiMajorAxis:参考椭球的长半轴;/dFlattening:参考椭球的扁率。/由笛卡尔坐标转换为站心地平坐标void CartesianToTopocentric (PCRDTOPOCENTRIC pct,PCRDCARTESIAN pcc,PCRDCARTESIAN pccCenter,double dSemiMajorAxis,double dFlattening);/pct:指向所转换出的站心地平坐标的指针;/pcc:指向待转换的笛卡尔坐标的指针;/pccCenter:指向站心的

6、笛卡尔坐标的指针;/dSemiMajorAxis:参考椭球的长半轴;/dFlattening:参考椭球的扁率。/由站心地平直角坐标转换为站心地平极坐标void TopocentricToTopocentricPolar (PCRDTOPOCENTRICPOLAR pctp,PCRDTOPOCENTRIC pct);/pctp:指向所转换出的站心地平极坐标的指针;/pct:指向待转换的站心地平坐标的指针;/由站心地平极坐标转换为站心地平直角坐标void TopocentricPolarToTopocentric (PCRDTOPOCENTRIC pct,PCRDTOPOCENTRICPOLAR

7、pctp);/pct:指向所转换的站心地平坐标的指针;/pctp:指向待转换的站心地平极坐标的指针;#endif源文件:#include “CoordCovert.h“#include “math.h“void CartesianToGeodetic (PCRDGEODETIC pcg, PCRDCARTESIAN pcc,double dSemiMajorAxis, double dFlattening)double e2;/第一偏心率的平方e2=2*dFlattening-dFlattening*dFlattening;pcg-longitude=atan(pcc-y/pcc-x);dou

8、ble W,N,N1=0,B,B1;B1=atan(pcc-z/sqrt(pcc-x*pcc-x+pcc-y*pcc-y);while(1) W=sqrt(1-e2*sin(B1)*sin(B1);N1=dSemiMajorAxis/W;B=atan(pcc-z+N1*e2*sin(B1)/sqrt(pcc-x*pcc-x+pcc-y*pcc-y);if(fabs(B-B1)latitude=B;N=dSemiMajorAxis/sqrt(1-e2*sin(pcg-latitude)*sin(pcg-latitude);pcg-height=sqrt(pcc-x*pcc-x+pcc-y*pcc

9、-y)/cos(B)-N;/由大地坐标转换为笛卡尔坐标void GeodeticToCartesian (PCRDCARTESIAN pcc, PCRDGEODETIC pcg,double dSemiMajorAxis, double dFlattening) double e2;/第一偏心率的平方double N;/卯酉圈半径e2=2*dFlattening-dFlattening*dFlattening;N=dSemiMajorAxis/sqrt(1-e2*sin(pcg-latitude)*sin(pcg-latitude);pcc-x=(N+pcg-height)*cos(pcg-l

10、atitude)*cos(pcg-longitude);pcc-y=(N+pcg-height)*cos(pcg-latitude)*sin(pcg-longitude);pcc-z=(N*(1-e2)+pcg-height)*sin(pcg-latitude);/由笛卡尔坐标转换为站心地平坐标void CartesianToTopocentric (PCRDTOPOCENTRIC pct,PCRDCARTESIAN pcc,PCRDCARTESIAN pccCenter,double dSemiMajorAxis,double dFlattening)double dx,dy,dz;dx=p

11、cc-x-pccCenter-x;dy=pcc-y-pccCenter-y;dz=pcc-z-pccCenter-z;PCRDGEODETIC pd;pd=(PCRDGEODETIC)malloc(sizeof(CRDGEODETIC);CartesianToGeodetic (pd,pccCenter,dSemiMajorAxis,dFlattening);pct-northing=-sin(pd-latitude)*cos(pd-longitude)*dx-sin(pd-latitude)*sin(pd-longitude)*dy+cos(pd-latitude)*dz;pct-easti

12、ng=-sin(pd-longitude)*dx+cos(pd-longitude)*dy;pct-upping=cos(pd-latitude)*cos(pd-longitude)*dx+cos(pd-latitude)*sin(pd-longitude)*dy+sin(pd-latitude)*dz;free(pd);/由站心地平直角坐标转换为站心地平极坐标void TopocentricToTopocentricPolar (PCRDTOPOCENTRICPOLAR pctp,PCRDTOPOCENTRIC pct) pctp-range=sqrt(pct-northing*pct-no

13、rthing+pct-easting*pct-easting+pct-upping*pct-upping);pctp-azimuth=atan(pct-easting/pct-northing);pctp-elevation=asin(pct-upping/pctp-range);/由站心地平极坐标转换为站心地平直角坐标void TopocentricPolarToTopocentric (PCRDTOPOCENTRIC pct,PCRDTOPOCENTRICPOLAR pctp)pct-northing=pctp-range*cos(pctp-elevation)*cos(pctp-azimuth);pct-easting=pctp-range*cos(pctp-elevation)*sin(pctp-azimuth);pct-upping=pctp-range*sin(pctp-elevation);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号