经纬度坐标系转东北天_大地坐标系(WGS-84)、地心地固坐标系(ECEF)与东北天坐标系(ENU)的相互转换C语言代码分享...

//ECEF ---> WGS84

//pcg为WGS-84坐标系结构体指针,pcc为ECEF坐标系结构体指针

void ECEFToWGS(PWGS pcg, PECEF pcc)

{

double B0, R, N;

double B_, L_;

double X = pcc->x;

double Y = pcc->y;

double Z = pcc->z;

R = sqrt(X * X + Y * Y);

B0 = atan2(Z, R);

while (1)

{

N = dSemiMajorAxis / sqrt(1.0 - e2 * sin(B0) * sin(B0));

B_ = atan2(Z + N * e2 * sin(B0), R);

if (fabs(B_ - B0) < 1.0e-10)

break;

B0 = B_;

}

L_ = atan2(Y, X);

pcg->height = R / cos(B_) - N;

//弧度转换成经纬度

pcg->latitude = B_ * 180 / M_PI;

pcg->longitude = L_ * 180 / M_PI;

}

//ECEF ---> ENU

//pcc为ECEF坐标系结构体指针,center为东北天坐标原点的指针,pct为东北天坐标系结构体指针

//坐标原点center要用GPS采到的第一个点的数据

void ECEFToENU(PECEF pcc, PWGS center, PENU pct)

{

double dX, dY, dZ;

PECEF Geodetic;

Geodetic = (PECEF)malloc(sizeof(ECEF));

WGSToECEF(center, Geodetic);

dX = pcc->x - Geodetic->x;

dY = pcc->y - Geodetic->y;

dZ = pcc->z - Geodetic->z;

double B, L, H;

B = center->latitude;

L = center->longitude;

H = center->height;

pct->easting = -sin(L) * dX + cos(L) * dY; //X轴

pct->northing = -sin(B) * cos(L) * dX - sin(B) * sin(L) *

dY + cos(B) * dZ; //Y轴

pct->upping = cos(B) * cos(L) * dX + cos(B) * sin(L) * dY +

sin(B) * dZ; //Z轴

free(Geodetic);

}

//ENU ---> ECEF

//pcc为ECEF坐标系结构体指针,center为东北天坐标原点的指针,pct为东北天坐标系结构体指针

//坐标原点center要用GPS采到的第一个点的数据

void ENUToECEF(PECEF pcc, PWGS center, PENU pct)

{

PECEF Geodetic;

Geodetic = (PECEF)malloc(sizeof(ECEF));

WGSToECEF(center, Geodetic);

double B, L, H;

B = center->latitude;

L = center->longitude;

H = center->height;

pcc->x = -sin(B) * cos(L) * pct->northing - sin(L) *

pct->easting + cos(B) * cos(L) * pct->upping +

Geodetic->x;

pcc->y = -sin(B) * sin(L) * pct->northing + cos(L) *

pct->easting + cos(B) * sin(L) * pct->upping +

Geodetic->y;

pcc->z = cos(B) * pct->northing + sin(B) *

pct->upping + Geodetic->z;

free(Geodetic);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.简易的登录页面(表单验证)(HTML+JavaScript+Jquery)

//HTML部分 <!DOCTYPE html><html> <head> <meta charset"UTF-8"> <title>登录页面</title> <link rel"stylesheet" type"text/css" href"css/login.css"/> <s…

Java NIO_I/O基本概念_Java中的缓冲区(Buffer)_通道(Channel)_网络I/O

I/O基本概念 缓冲区基础 缓冲区是I/O的基础, 进程使用read(), write()将数据读出/写入从缓冲区中; 当缓冲区写满, 内核向磁盘发出指令, 将缓冲区中数据写入磁盘中(这一步不需要CPU), 当磁盘控制器将缓冲区装满, 内核将缓冲区数据拷贝到进程中指定的缓冲区; 操作如下图: 当中…

跟一个大佬前辈交流了一下

&#xff11;.最近&#xff0c;跟我们公司的测试总监聊天&#xff0c;我随便问了下他几个问题&#xff0c;他也给出了答案&#xff0c;在这里随便聊下&#xff0c;希望给大家的职业生涯中有一些借鉴的作用。也能给新入职场的同学一些方向和指引。2.先介绍下这个技术总监&#x…

python获取目录树_Python读取文件目录树——os.walk

os.walk是Python的内置函数用来遍历文件目录树。[python]import osrootDir d:\assafor dirName, subdirList, fileList in os.walk(rootDir):print(Folder: %s % dirName)for fname in fileList:print(t%s % fname)import osrootDir d:\assafor dirName, subdirList, fileLis…

LINQ简记(1):基本语法

关于LINQ&#xff08;语言集成查询&#xff09;是.NET 3.5和Visual Studio 2008以上版本中引入的一种有趣的全新概念&#xff0c;语言版本有VB和C#&#xff0c;由于C#与.NET平台结合最为紧密&#xff0c;也是MS当初首推的语言&#xff0c;因此&#xff0c;本系列文章的示例代码…

我认识的一位前辈~

&#xff11;.我最近认识了一个老前辈&#xff0c;关注了我的公众号加了我的好友认识的&#xff0c;我想介绍一下这位前辈&#xff0c;不是因为他有多成功&#xff0c;也不是因为他给了我很多钱&#xff0c;我觉得他是一个在平常不过的人了&#xff0c;因为太过于平凡的思考方式…

软件测试缺陷等级划分_缺陷等级的各种划分方法 - 测试新客~~小懒~~ - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

《缺陷等级标准》缺陷严重级别定义:o 最高级--导致运行中断(应用程序崩溃),预期的功能没有得到实现,测试工作无法继续进行等.o 紧急---事件非常重要,并且需要马上给予关注.o 高级---事件是重要的,并且应该在紧急的事件处理之后尽快得到解决.o 中级---事件是重要的,但是由于解决…

机器学习_决策树_ID3算法_C4.5算法_CART算法及各个算法Python实现

下面的有些叙述基于我个人理解, 可能与专业书籍描述不同, 但是最终都是表达同一个意思, 如果有不同意见的小伙伴, 请在评论区留言, 我不胜感激. 参考: 周志华-机器学习 https://blog.csdn.net/xiaohukun/article/details/78112917 https://blog.csdn.net/fuqiuai/article/d…

http数据绑定spring mvc详解

转载于:https://www.cnblogs.com/panxuejun/p/6834365.html

ESP32 入门教学,不入门,不教学

&#xff11;.Internet of things &#xff08;iot&#xff09;这个概念非常火&#xff0c;物联网是什么&#xff1f;把所有物品通过射频识别等信息传感设备与互联网连接起来&#xff0c;实现智能化识别和管理。 物联网通过智能感知、识别技术与普适计算、泛在网络的融合应用&a…

opencv检测相交点_OpenCV:曲线的检测与提取-0

//寻找曲线 &#xff1a;void findLines(Mat &binaryImg, vector> &outLines){//八邻域vector neighborPtVec;neighborPtVec.push_back(Point(-1,-1));neighborPtVec.push_back(Point(0,-1));neighborPtVec.push_back(Point(1,-1));neighborPtVec.push_back(Point(1…

一个从华为离职的朋友

1、我在之前的很多文章里面都谈到了我有一个过硬的华为朋友&#xff0c;我很少去炫耀自己有多厉害&#xff0c;认识了谁谁&#xff0c;但是我非常在意那些跟自己有过交情的朋友&#xff0c;这些朋友不是说你离开了就失去了&#xff0c;也不是你落魄了就不能吹水了&#xff0c;今…

(原)PyTorch中使用指定的GPU

转载请注明出处&#xff1a; http://www.cnblogs.com/darkknightzh/p/6836568.html PyTorch默认使用从0开始的GPU&#xff0c;如果GPU0正在运行程序&#xff0c;需要指定其他GPU。 有如下两种方法来指定需要使用的GPU。 1. 类似tensorflow指定GPU的方式&#xff0c;使用CUDA_VI…

机器学习_简单线性回归与多元回归方程原理推导_处理二值数据_最小二乘法解或梯度下降解多元回归方程(详细推导)以及Python代码实现_回归方程度量方式

下面的有些叙述基于我个人理解, 可能与专业书籍描述不同, 但是最终都是表达同一个意思, 如果有不同意见的小伙伴, 请在评论区留言, 我不胜感激. 参考: 周志华-机器学习 最小二乘法求解多元回归方程: https://blog.csdn.net/weixin_39445556/article/details/83543945 梯度下…

python逆序数的程序_计算逆序数(归并法)程序问题 (Python)

计算一个tuple里面的逆序数&#xff0c;用merge sort的办法。我写了以下代码&#xff0c;但是每次统计的时候&#xff0c;count设置为全局变量了&#xff1a;Count inversionInput: a sequence as tuple of integersOutput: The inversion number as an integer#Merge Sort Met…

手写Java线程池_超详细解说_绝对能运行_代码超详细注释

线程池 问题背景 只是单纯使用 new Thread(runnable).start(); 的方式创建线程, 将会导致严重的程序性能问题: 1.线程创建, 销毁需要消耗很大的系统资源; 2.虚拟机创建线程的数量是有限的; 2.线程调度切换也将使程序性能下降; 针对这些问题, 对线程数量进行管理, 有效地重复利…

分享一个非常 nice 的工具

最近有个问题&#xff0c;我需要经常使用远程连接工具&#xff0c;原因很简单&#xff0c;我需要控制另外一台电脑&#xff0c;我刚开始使用的是 teamviewer 这个软件&#xff0c;刚开始用的时间是非常爽的&#xff0c;不过有一天他给我来了个提示&#xff0c;说我的软件被商用…

Java并发性和多线程介绍目录

http://ifeve.com/java-concurrency-thread-directory/转载于:https://www.cnblogs.com/hanfeihanfei/p/6840359.html

js 正则是否包含某些字符串_JS 判断字符串中是否包含某个字符串(方法总结)...

我是想在js中判断字符串是否包含某个中文&#xff0c;将方法记录起来&#xff0c;这些方法也适用于数字、字母。实践是检验真理的唯一标准&#xff0c;还是要多多测试啊。String对象的方法方法一&#xff1a;indexOf()var groupName"小白A组";alert(groupName.indexO…

推荐周立功先生的一本书

1. 这篇文章主要是推荐周工的一本书&#xff0c;大家在学习嵌入式的时候&#xff0c;很多人不明白嵌入式系统和单片机的区别&#xff0c;又感觉自己对嵌入式有所了解&#xff0c;知道什么是嵌入式&#xff0c;文章里的很多见解我觉得对很多人都非常有帮助&#xff0c;今晚上周工…