我正在开发一个地理空间AR应用程序,并且刚刚在Objective-C/iOS(来自Apple的this example code提供了相当多的帮助)中解决了这个问题。

将从lat lon转换为ecef到ENU并返回的三个C函数如下所示。数学公式来自this维基百科的文章。

#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0/M_PI))

#define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180)

#define WGS84_A (6378137.0) // WGS 84 semi-major axis constant in meters

#define WGS84_E (8.1819190842622e-2) // WGS 84 eccentricity

// Converts latitude, longitude to ECEF coordinate system

void latLonToEcef(double lat, double lon, double alt, double *x, double *y, double *z)

{

double clat = cos(DEGREES_TO_RADIANS(lat));

double slat = sin(DEGREES_TO_RADIANS(lat));

double clon = cos(DEGREES_TO_RADIANS(lon));

double slon = sin(DEGREES_TO_RADIANS(lon));

double N = WGS84_A/sqrt(1.0 - WGS84_E * WGS84_E * slat * slat);

*x = (N + alt) * clat * clon;

*y = (N + alt) * clat * slon;

*z = (N * (1.0 - WGS84_E * WGS84_E) + alt) * slat;

}

// Converts ECEF to ENU coordinates centered at given lat, lon

void ecefToEnu(double lat, double lon, double xRef, double yRef, double zRef, double xPOI, double yPOI, double zPOI, double *e, double *n, double *u)

{

double clat = cos(DEGREES_TO_RADIANS(lat));

double slat = sin(DEGREES_TO_RADIANS(lat));

double clon = cos(DEGREES_TO_RADIANS(lon));

double slon = sin(DEGREES_TO_RADIANS(lon));

double dx = xPOI - xRef;

double dy = yPOI - yRef;

double dz = zPOI - zRef;

*e = -slon * dx + clon * dy;

*n = -slat * clon * dx - slat * slon * dy + clat * dz;

*u = clat * clon * dx + clat * slon * dy + slat * dz;

}

// Converts ENU of a POI (in realtion to a reference point) to ECEF coordinates

void enuToEcef(double lat, double lon, double xRef, double yRef, double zRef, double *xPOI, double *yPOI, double *zPOI, double e, double n, double u)

{

double clat = cos(DEGREES_TO_RADIANS(lat));

double slat = sin(DEGREES_TO_RADIANS(lat));

double clon = cos(DEGREES_TO_RADIANS(lon));

double slon = sin(DEGREES_TO_RADIANS(lon));

*xPOI = (-slon * e) + (-slat * clon * n) + (clat * clon * u) + xRef;

*yPOI = (clon * e) + (-slat * slon * n) + (clat * slon * u) + yRef;

*zPOI = (0 * e) + (clat * n) + (slat * u) + zRef;

}

ecef转换经纬度坐标 c语言代码,如何计算大地坐标(ECEF)与本地参考(ENU)之间的直接和反向转换...相关推荐

  1. ecef转换经纬度坐标 c语言代码,WGS84和ECEF坐标的转换

    #include "stdafx.h" #include #define  PI  3.141592653 /* 该程序根据GPS.G1-X-00006.pdf文档,实现了WGS8 ...

  2. gps经纬度坐标 c语言,初学者: gps:GPRMC 经纬度问题

    初学者: gps:GPRMC 经纬度问题 int gps_parse_line(struct gps_t *gps, char *buffer, int size) { float lon, lat; ...

  3. 摩尔斯电码(morse)转换英文字符串c语言代码

    找到这篇文章说明你对摩尔斯电码很赶兴趣,而且你已掌握了摩尔斯电码的基础知识了.想更贴近的感受一下摩尔斯电码的魅力.或你有一个非常棒的关于莫尔斯电码想法而非常激动.如果是这样的话,那你或许会从我的代码中 ...

  4. c语言输入字母转换摩斯密码,摩尔斯电码(morse)转换英文字符串c语言代码

    找到这篇文章说明你对摩尔斯电码很赶兴趣,而且你已掌握了摩尔斯电码的基础知识了.想更贴近的感受一下摩尔斯电码的魅力.或你有一个非常棒的关于莫尔斯电码想法而非常激动.如果是这样的话,那你或许会从我的代码中 ...

  5. GIS经纬度坐标转换为unity3D的世界坐标

    GIS经纬度坐标代表现实生活中地球的经纬度坐标,具体代码如下: using System.Collections; using System.Collections.Generic; using Un ...

  6. labview 转标准c语言,如何将LabVIEW的VI转换为C语言代码

    工具链接: SDK: CrackTool: Manul: 如何将LabVIEW的VI转换为C语言代码 (2013-12-11 12:21:34) 如何将LabVIEW的VI转换为C语言代码? 这个问题 ...

  7. labview 转标准c语言,如何将LabVIEW的VI转换为C语言代码..docx

    如何将LabVIEW的VI转换为C语言代码 方法一:利用LabVIEW的C Generator工具包 下载安装LabVIEW 2012软件,下载LabVIEW工具包2012CGenerator.exe ...

  8. 海外地址 | 使用鲸鱼地图将海外英文地址转为经纬度坐标

    前言 鲸鱼地图是小O地图的姊妹版,提供海外地理数据挖掘.处理.分析.可视化功能.具有易用.高效.稳定的特点,能够满足地图数据处理及应用需求,也可提供个性化定制开发服务. 海外数据功能列表 地址转经纬度 ...

  9. python dataset[trans_科学网—Python GDAL 图像坐标,投影坐标,经纬度坐标 三者映射及运行错误解决 - 吴妍潼的博文...

    题记: 写该博客是因为自己经常遇到这个问题,而我发现网络上关于这方面浏览量高的一些代码竟然都有误,每次照搬都被虐得很惨.有一些同志在某些博客下方留言说代码有问题,而博主没有回应,也没有更改错误.为了自 ...

最新文章

  1. php mssql生僻字,php生僻字的處理,插入數據庫被截斷,空白,亂碼解決辦法,php冷僻字處理...
  2. python子类如何继承父类的实例变量?
  3. Fragment切换。radiobutton加fragment切换(附件源码下载)
  4. W ndows95安装,Windows 95的安装
  5. java 对象等于_java 之类对象等于对象 | 学步园
  6. 从框架源码中学习创建型设计模式
  7. Exchange Online基于网络位置限制使用
  8. Promises 对比 callbacks
  9. ssh 登陆错误后禁止ip再次登陆_macOS破坏SSH默认规则,程序员无法登录Web服务器...
  10. 宅在家里写数据库中函数应用
  11. pulse 去马赛克软件_细致到毛孔头发 神还原的高清大图!AI去马赛克新算法
  12. ASP.NET MVC REST API 应用实例
  13. iweboffice之word——自定义菜单的使用
  14. 中国兽用化学药品行业“十四五“发展规划及运营模式分析报告2021年版
  15. 笔试题??智商题??
  16. 迷宫_随机实验_边做边学深度强化学习:PyTorch程序设计实践(1)
  17. git command
  18. libuv介绍与编译
  19. Java基础篇:什么是hashCode 以及 hashCode()与equals()的联系
  20. vivo NEX 旗舰版——拆卸和分析

热门文章

  1. 传奇手游漏洞获取gm权限_传奇漏洞获取gm权限
  2. ESP8266和DHT11通讯
  3. ST-GCN训练自己的数据集代码实践问题记录
  4. 2WD远程控制小车——总体设计
  5. 一个用Dockerfile建立镜像的模板,和使用说明
  6. python中items()函数
  7. 线性逻辑回归以及稳健性测试
  8. unity代码 获取dropdown_Unity--互动组件(DropDown )
  9. 免费分享给大家一些iOS面试(包括BAT)
  10. 劳易测AMS 304i 120光学测距传感器