摘要:

代码如下:

//CPP文件

#i nclude   "CoorTrans.h"

//   Common   functions

double   Dms2Rad(double   Dms)

{

double   Degree,   Miniute;

double   Second;

int   Sign;

double   Rad;

if(Dms   >=   0)

Sign   =   1;

else

Sign   =   -1;

Dms   =   fabs(Dms);

Degree   =   floor(Dms);

Miniute   =   floor(fmod(Dms   *   100.0,   100.0));

Second   =   fmod(Dms   *   10000.0,   100.0);

Rad   =   Sign   *   (Degree   +   Miniute   /   60.0   +   Second   /   3600.0)   *   PI   /   180.0;

return   Rad;

}

double   Rad2Dms(double   Rad)

{

double   Degree,   Miniute;

double   Second;

int   Sign;

double   Dms;

if(Rad   >=   0)

Sign   =   1;

else

Sign   =   -1;

Rad   =   fabs(Rad   *   180.0   /   PI);

Degree   =   floor(Rad);

Miniute   =   floor(fmod(Rad   *   60.0,   60.0));

Second   =   fmod(Rad   *   3600.0,   60.0);

Dms   =   Sign   *   (Degree   +   Miniute   /   100.0   +   Second   /   10000.0);

return   Dms;

}

///

//   Definition   of   PrjPoint

///

BOOL   PrjPoint::BL2xy()

{

double   X,   N,   t,   t2,   m,   m2,   ng2;

double   sinB,   cosB;

X   =   A1   *   B   *   180.0   /   PI   +   A2   *   sin(2   *   B)   +   A3   *   sin(4   *   B)   +   A4   *   sin(6   *

B);

sinB   =   sin(B);

cosB   =   cos(B);

t   =   tan(B);

t2   =   t   *   t;

N   =   a   /   sqrt(1   -   e2   *   sinB   *   sinB);

m   =   cosB   *   (L   -   L0);

m2   =   m   *   m;

ng2   =   cosB   *   cosB   *   e2   /   (1   -   e2);

x   =   X   +   N   *   t   *   ((0.5   +   ((5   -   t2   +   9   *   ng2   +   4   *   ng2   *   ng2)   /   24.0   +   (61   -

58   *   t2   +   t2   *   t2)   *   m2   /   720.0)   *   m2)   *   m2);

y   =   N   *   m   *   (   1   +   m2   *   (   (1   -   t2   +   ng2)   /   6.0   +   m2   *   (   5   -   18   *   t2   +   t2   *   t

2   +   14   *   ng2   -   58   *   ng2   *   t2   )   /   120.0));

y   +=   500000;

return   TRUE;

}

BOOL   PrjPoint::xy2BL()

{

double   sinB,   cosB,   t,   t2,   N   ,ng2,   V,   yN;

double   preB0,   B0;

double   eta;

y   -=   500000;

B0   =   x   /   A1;

do

{

preB0   =   B0;

B0   =   B0   *   PI   /   180.0;

B0   =   (x   -   (A2   *   sin(2   *   B0)   +   A3   *   sin(4   *   B0)   +   A4   *   sin(6   *   B0)))   /   A1;

eta   =   fabs(B0   -   preB0);

}while(eta   >   0.000000001);

B0   =   B0   *   PI   /   180.0;

B   =   Rad2Dms(B0);

sinB   =   sin(B0);

cosB   =   cos(B0);

t   =   tan(B0);

t2   =   t   *   t;

N   =   a   /   sqrt(1   -   e2   *   sinB   *   sinB);

ng2   =   cosB   *   cosB   *   e2   /   (1   -   e2);

V   =   sqrt(1   +   ng2);

yN   =   y   /   N;

B   =   B0   -   (yN   *   yN   -   (5   +   3   *   t2   +   ng2   -   9   *   ng2   *   t2)   *   yN   *   yN   *   yN   *   yN   /

12.0   +   (61   +   90   *   t2   +   45   *   t2   *   t2)   *   yN   *   yN   *   yN   *   yN   *   yN   *   yN   /   360.0)

*   V   *   V   *   t   /   2;

L   =   L0   +   (yN   -   (1   +   2   *   t2   +   ng2)   *   yN   *   yN   *   yN   /   6.0   +   (5   +   28   *   t2   +   24

*   t2   *   t2   +   6   *   ng2   +   8   *   ng2   *   t2)   *   yN   *   yN   *   yN   *   yN   *   yN   /   120.0)   /   cosB

;

return   TRUE;

}

BOOL   PrjPoint::SetL0(double   dL0)

{

L0   =   Dms2Rad(dL0);

return   TRUE;

}

BOOL   PrjPoint::SetBL(double   dB,   double   dL)

{

B   =   Dms2Rad(dB);

L   =   Dms2Rad(dL);

B   =   dB;

L   =   dL;

BL2xy();

return   TRUE;

}

BOOL   PrjPoint::GetBL(double   *dB,   double   *dL)

{

*dB   =   Rad2Dms(B);

*dL   =   Rad2Dms(L);

return   TRUE;

}

BOOL   PrjPoint::Setxy(double   dx,   double   dy)

{

x   =   dx;

y   =   dy;

xy2BL();

return   TRUE;

}

BOOL   PrjPoint::Getxy(double   *dx,   double   *dy)

{

*dx   =   x;

*dy   =   y;

return   TRUE;

}

///

//   Definition   of   PrjPoint_IUGG1975

///

PrjPoint_IUGG1975::PrjPoint_IUGG1975()

{

a   =   6378140;

f   =   298.257;

e2   =   1   -   ((f   -   1)   /   f)   *   ((f   -   1)   /   f);

e12   =   (f   /   (f   -   1))   *   (f   /   (f   -   1))   -   1;

A1   =   111133.0047;

A2   =   -16038.5282;

A3   =   16.8326;

A4   =   -0.0220;

}

PrjPoint_IUGG1975::~PrjPoint_IUGG1975()

{

}

///

//   Definition   of   PrjPoint_Krasovsky

///

PrjPoint_Krasovsky::PrjPoint_Krasovsky()

{

a   =   6378245;

f   =   298.3;

e2   =   1   -   ((f   -   1)   /   f)   *   ((f   -   1)   /   f);

e12   =   (f   /   (f   -   1))   *   (f   /   (f   -   1))   -   1;

A1   =   111134.8611;

A2   =   -16036.4803;

A3   =   16.8281;

A4   =   -0.0220;

}

PrjPoint_Krasovsky::~PrjPoint_Krasovsky()

{

}

//H文件

#ifndef   _COORTRANS_H_INCLUDED

#define   _COORTRANS_H_INCLUDED

#i nclude

const   double   PI   =   3.14159265353846;

class   PrjPoint

{

public:

double   L0;   //   中央子午线经度

double   B,   L;   //   大地坐标

double   x,   y;   //   高斯投影平面坐标

public:

BOOL   BL2xy();

BOOL   xy2BL();

protected:

double   a,   f,   e2,   e12;   //   基本椭球参数

double   A1,   A2,   A3,   A4;   //   用于计算X的椭球参数

public:

BOOL   SetL0(double   dL0);

BOOL   SetBL(double   dB,   double   dL);

BOOL   GetBL(double   *dB,   double   *dL);

BOOL   Setxy(double   dx,   double   dy);

BOOL   Getxy(double   *dx,   double   *dy);

};

class   PrjPoint_Krasovsky   :   virtual   public   PrjPoint

{

public:

PrjPoint_Krasovsky();

~PrjPoint_Krasovsky();

};

class   PrjPoint_IUGG1975   :   virtual   public   PrjPoint

{

public:

PrjPoint_IUGG1975();

~PrjPoint_IUGG1975();

};

double   Dms2Rad(double   Dms);

double   Rad2Dms(double   Rad);

#endif   /*   ndef   _COORTRANS_H_INCLUDED   */

c语言大地坐标转空间直角坐标,大地坐标转换直角坐标的C++代码(高斯克吕格投影)...相关推荐

  1. WGS84下大地坐标转换为空间直角坐标

    核心代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  2. 大地坐标与空间直角坐标互相转换

    引言 坐标转换代码,由大地坐标(经.纬度.高)与空间直角坐标(XYZ)互相转换.MATLAB代码,下面代码默认转换的是WGS84坐标系下的空间直角和大地坐标,可以根据需要选择椭球参数. Matlab代 ...

  3. 相同参考系统(椭球)大地坐标与空间直角坐标相互转换

    一.大地坐标(B, L, H)>>空间直角坐标(X, Y, Z) 分享给有需要的人,代码质量勿喷. //B.L的单位是弧度,H的单位是米:X.Y.Z的单位是米 //大地坐标(B,L,H)- ...

  4. 大地坐标转换极坐标(球坐标)

    作业顺便记录一下,场面监视 1.两个函数一个是大地坐标转换球坐标Geodetic_to_spherical:一个是球坐标转换大地坐标spherical_to_Geodetic. 2.WGS84坐标系的 ...

  5. python实现WGS-84坐标系下大地坐标和空间直角坐标系互转xyz2blh、blh2xyz,xyz2neu

    WGS-84坐标系下大地坐标blh和空间直角坐标系xyz互转,以及转站心坐标系neu # -*- coding: utf-8 -*- """ Created on Tue ...

  6. c语言大地坐标转换空间坐标,大地坐标与直角空间坐标转换计算公式

    一.参心大地坐标与参心空间直角坐标转换 1名词解释: A :参心空间直角坐标系: a) 以参心0为坐标原点: b) Z 轴与参考椭球的短轴(旋转轴)相重合: c) X 轴与起始子午面和赤道的交线重合: ...

  7. c语言大地坐标转换空间坐标,大地坐标与空间直角坐标转换_C程序

    大地坐标与空间直角坐标转换的C程序 #include #include double HD(double a,double b,double c) {b=b+c/60; a=a+b/60; a=a/1 ...

  8. MATLAB批量读取航摄相片EXIF信息和GNSS信息以及MATLAB批量经纬度坐标转换空间直角坐标

    前言 没有前言,创作不易,希望家人们点点赞,如有错误评论留言,感谢支持! 文章目录 前言 一.MATLAB批量读取航摄相片的EXIF信息,并批量提取其GNSS经纬度信息 (1)前述: (2)代码实现和 ...

  9. 空间直角坐标转大地坐标

    将空间直角坐标XYZ转化为大地坐标BLH #define PI acos(-1) vector<double> convertXYZToLatLongHeight(vector<do ...

  10. c语言经纬度和大地坐标转换,经纬度坐标与大地坐标转换表

    *子午线角度值纬度值b经度值l角度值角度值f2-b2 114114 114114 114114 114114 1 234.565411113.59429634.94836113.9953-0.0047 ...

最新文章

  1. 谷歌大神为你解释Kubernetes, 微服务和容器化
  2. 入侵检测系统基础知识
  3. JQuery中click() 和onclick()区别
  4. win10新版本被移除的旧特性
  5. python对象回收_python 对象引用,可变性,垃圾回收
  6. Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容...
  7. html5 tooltips,纯js轻量级tooltips工具提示插件
  8. Android中Socket大文件断点上传
  9. (转)巴菲特的投资智慧--1998年的演讲
  10. 12f的接线 esp8266_ESP8266固件升级方法(ESP8266-12F模组)
  11. windows开机自启exe程序bat
  12. 赏析角度有哪些_从哪些角度赏析句子
  13. 移动端300ms延迟_移动端300ms延迟的解决方法
  14. mac无法更新计算机的启动配置,MacOS 更新遇到的问题及重装系统
  15. 怎么恢复360强力删除的文件?数据恢复这样做
  16. PandoraBox登录无法后台,出现/usr/lib/lua/luci/dispatcher.lua:461(2021-12-19亲测)
  17. 使用vue/cli出现defineConfig is not function 错误
  18. LaTex常用公式和字母
  19. socket技术详解(看清socket编程)
  20. Java/eclipse新建项目TR_52,编写程序,完成以下功能

热门文章

  1. MPQ4420HGJ DCDC电源设计
  2. PSP超强自制系统3.52 M33最新傻瓜安装指南(Dark Alex-OE系统接班人)
  3. 如何批量把照片设置统一尺寸?
  4. 数组-滑动窗口(直接套模板完事儿)
  5. 溢出植入型木马(后门)的原型实现 作者:FLASHSKY(原创)
  6. 小技巧:Win7屏保变梦幻桌面
  7. 学生简单个人博客网页DW模板 简单HTML静态网页设计个人主页制作 大学生个人网站模板下载 网页作业个人主页制作
  8. 火星人学习第二周——虚幻引擎蓝图应用与开发
  9. Linux系统,Hadoop,R语言,RHadoop的安装
  10. win10 android 手机驱动下载,小米手机驱动win10驱动