c语言大地坐标转空间直角坐标,大地坐标转换直角坐标的C++代码(高斯克吕格投影)...
摘要:
代码如下:
//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++代码(高斯克吕格投影)...相关推荐
- WGS84下大地坐标转换为空间直角坐标
核心代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- 大地坐标与空间直角坐标互相转换
引言 坐标转换代码,由大地坐标(经.纬度.高)与空间直角坐标(XYZ)互相转换.MATLAB代码,下面代码默认转换的是WGS84坐标系下的空间直角和大地坐标,可以根据需要选择椭球参数. Matlab代 ...
- 相同参考系统(椭球)大地坐标与空间直角坐标相互转换
一.大地坐标(B, L, H)>>空间直角坐标(X, Y, Z) 分享给有需要的人,代码质量勿喷. //B.L的单位是弧度,H的单位是米:X.Y.Z的单位是米 //大地坐标(B,L,H)- ...
- 大地坐标转换极坐标(球坐标)
作业顺便记录一下,场面监视 1.两个函数一个是大地坐标转换球坐标Geodetic_to_spherical:一个是球坐标转换大地坐标spherical_to_Geodetic. 2.WGS84坐标系的 ...
- python实现WGS-84坐标系下大地坐标和空间直角坐标系互转xyz2blh、blh2xyz,xyz2neu
WGS-84坐标系下大地坐标blh和空间直角坐标系xyz互转,以及转站心坐标系neu # -*- coding: utf-8 -*- """ Created on Tue ...
- c语言大地坐标转换空间坐标,大地坐标与直角空间坐标转换计算公式
一.参心大地坐标与参心空间直角坐标转换 1名词解释: A :参心空间直角坐标系: a) 以参心0为坐标原点: b) Z 轴与参考椭球的短轴(旋转轴)相重合: c) X 轴与起始子午面和赤道的交线重合: ...
- c语言大地坐标转换空间坐标,大地坐标与空间直角坐标转换_C程序
大地坐标与空间直角坐标转换的C程序 #include #include double HD(double a,double b,double c) {b=b+c/60; a=a+b/60; a=a/1 ...
- MATLAB批量读取航摄相片EXIF信息和GNSS信息以及MATLAB批量经纬度坐标转换空间直角坐标
前言 没有前言,创作不易,希望家人们点点赞,如有错误评论留言,感谢支持! 文章目录 前言 一.MATLAB批量读取航摄相片的EXIF信息,并批量提取其GNSS经纬度信息 (1)前述: (2)代码实现和 ...
- 空间直角坐标转大地坐标
将空间直角坐标XYZ转化为大地坐标BLH #define PI acos(-1) vector<double> convertXYZToLatLongHeight(vector<do ...
- c语言经纬度和大地坐标转换,经纬度坐标与大地坐标转换表
*子午线角度值纬度值b经度值l角度值角度值f2-b2 114114 114114 114114 114114 1 234.565411113.59429634.94836113.9953-0.0047 ...
最新文章
- 谷歌大神为你解释Kubernetes, 微服务和容器化
- 入侵检测系统基础知识
- JQuery中click() 和onclick()区别
- win10新版本被移除的旧特性
- python对象回收_python 对象引用,可变性,垃圾回收
- Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容...
- html5 tooltips,纯js轻量级tooltips工具提示插件
- Android中Socket大文件断点上传
- (转)巴菲特的投资智慧--1998年的演讲
- 12f的接线 esp8266_ESP8266固件升级方法(ESP8266-12F模组)
- windows开机自启exe程序bat
- 赏析角度有哪些_从哪些角度赏析句子
- 移动端300ms延迟_移动端300ms延迟的解决方法
- mac无法更新计算机的启动配置,MacOS 更新遇到的问题及重装系统
- 怎么恢复360强力删除的文件?数据恢复这样做
- PandoraBox登录无法后台,出现/usr/lib/lua/luci/dispatcher.lua:461(2021-12-19亲测)
- 使用vue/cli出现defineConfig is not function 错误
- LaTex常用公式和字母
- socket技术详解(看清socket编程)
- Java/eclipse新建项目TR_52,编写程序,完成以下功能
热门文章
- MPQ4420HGJ DCDC电源设计
- PSP超强自制系统3.52 M33最新傻瓜安装指南(Dark Alex-OE系统接班人)
- 如何批量把照片设置统一尺寸?
- 数组-滑动窗口(直接套模板完事儿)
- 溢出植入型木马(后门)的原型实现 作者:FLASHSKY(原创)
- 小技巧:Win7屏保变梦幻桌面
- 学生简单个人博客网页DW模板 简单HTML静态网页设计个人主页制作 大学生个人网站模板下载 网页作业个人主页制作
- 火星人学习第二周——虚幻引擎蓝图应用与开发
- Linux系统,Hadoop,R语言,RHadoop的安装
- win10 android 手机驱动下载,小米手机驱动win10驱动