ECEF坐标系转经纬度 wgs84 - 方法提炼

本文提供坐标系转换算法,根据某前端算法修改完善为C#语言支持。

最近在项目中遇到空间坐标转换问题,现提供相关算法C#支持。


源代码

相关代码如下:

using System;namespace ConsoleApp1
{/// <summary>/// ECEF坐标系转换经纬度 wgs84/// 方法提炼/// </summary>internal class Program{private static void Main(string[] args){double[] ret = XYZ2LLA(new double[]{3333,4444,1500});Console.WriteLine(string.Format("LON-:{0}\r\nLAT-:{1}\r\nALT-:{2}\r\n", ret[0], ret[1], ret[2]));Console.Read();}private static double EARTH_1 = 6378.137;private static double Temp_1 = EARTH_1 * (1.0 - (1.0 / 298.257223563));private static double Eccsq = 1 - Math.Pow(Temp_1, 2) / Math.Pow(EARTH_1, 2);private static double Dtr = Math.PI / 180.0;/// <summary>/// ECEF坐标系转经纬度 wgs84/// 输入-千米、千米、千米/// 输出-经、纬、千米/// </summary>/// <param name="xvec"></param>/// <returns></returns>private static double[] XYZ2LLA(double[] xvec){double flatgc, flatn, dlat, rp, x, y, z, p, tangd, rn, clat, slat, flat, flon, altkm;x = xvec[0];y = xvec[1];z = xvec[2];rp = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2) + Math.Pow(z, 2));flatgc = Math.Asin(z / rp) / Dtr;flon = ((Math.Abs(x) + Math.Abs(y)) < 1.0e-10) ? 0.0 : Math.Atan2(y, x) / Dtr;flon = (flon < 0.0) ? flon + 360.0 : flon;p = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2));if (p < 1.0e-10){flat = ((z < 0.0)) ? -90.0 : 90.0;altkm = rp - Radcur(flat)[0];}else{altkm = rp - Radcur(flatgc)[0];flat = Gc2gd(flatgc, altkm);rn = Radcur(flat)[1];for (double kount = 0; kount < 5; kount++){slat = Math.Sin(Dtr * flat);tangd = (z + rn * Eccsq * slat) / p;flatn = Math.Atan(tangd) / Dtr;dlat = flatn - flat;flat = flatn;clat = Math.Cos(Dtr * flat);rn = Radcur(flat)[1];altkm = (p / clat) - rn;if (Math.Abs(dlat) < 1.0e-12){break;}}}return new double[] { flat, flon, altkm };}private static double Gc2gd(double flatgci, double altkmi){double[] rrnrm = Radcur(flatgci);double ratio = 1 - Math.Pow(Math.Sqrt(Eccsq), 2) * rrnrm[1] / (rrnrm[1] + altkmi);double tlat = Math.Tan(Dtr * flatgci) / ratio;rrnrm = Radcur((1 / Dtr) * Math.Atan(tlat));ratio = 1 - Math.Pow(Math.Sqrt(Eccsq), 2) * rrnrm[1] / (rrnrm[1] + altkmi);tlat = Math.Tan(Dtr * flatgci) / ratio;return (1 / Dtr) * Math.Atan(tlat);}private static double[] Radcur(double lati){double slat, dsq, rn, rho, z;slat = Math.Sin(Dtr * lati);dsq = 1.0 - Eccsq * Math.Pow(slat, 2);rn = EARTH_1 / Math.Sqrt(dsq);rho = rn * Math.Cos(Dtr * lati);z = (1.0 - Eccsq) * rn * slat;return (new double[] { Math.Sqrt(Math.Pow(rho, 2) + Math.Pow(z, 2)), rn, rn * (1.0 - Eccsq) / dsq });}}
}

2019年11月25日
Dawn

ECEF坐标系转经纬度 wgs84 - 方法提炼相关推荐

  1. 2000坐标系转经纬度工具_【Leaflet开发】L.CRS + 搞定Leaflet多坐标系拓展

    一.CRS源码解析 CRS的定义就几个函数: 没错.你看出来了,其实这玩意就是提供了wgs84坐标系与目标坐标系之间转换的一种算法.因为leaflet内部都是用经纬度坐标系表达的坐标,所以leafle ...

  2. 4字节 经纬度_北京54坐标系转经纬度坐标系教程

    如何将下载的影像变换为北京54坐标? 注意:投影转换成54坐标系需要下载无偏移卫星图像进行转换,有偏移的转换将导致转换后的卫星图像扭曲,坐标错误,无法配准. 第一步:选择无偏移地图源,下载你所需要的卫 ...

  3. 西安80坐标系转经纬度坐标系教程

    如何将下载的影像变换为西安80坐标? 利用ARCGIS进行自定义坐标系和投影转换 ARCGIS种通过三参数和其参数进行精确投影转换 注意:投影转换成80坐标系需要下载无偏移卫星图像进行转换,有偏移的转 ...

  4. 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版...

    转自:https://www.cnblogs.com/fwc1994/p/5884115.html 火星坐标.百度坐标.WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版 火星坐标 ...

  5. 【转】火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版...

    原文地址:https://www.cnblogs.com/fwc1994/p/5884115.html 火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地 ...

  6. PHP墨卡托坐标转经纬度,墨卡托坐标与经纬度相互转换的方法

    最近用到了墨卡托坐标转换经纬度的需求,原理什么的不想多说,需要的可以查看这里: 麦卡托投影法 Web Mercator 经纬度转Wev墨卡托 版本1 dvec3 CMathEngine::lonLat ...

  7. 平面投影坐标转经纬度坐标

    平面投影坐标转经纬度坐标 本人在进行开发时,使用geotools的GeoTiffReader类读取卫星影像的顶点坐标,得到的是平面坐标,单位是米,打开arcGIS,加载影像,右下角会有坐标,在视图-& ...

  8. python实现2000投影坐标转经纬度

    引言 常用的WGS84投影坐标转经纬度可用通用的pyproj库来转换,而2000坐标 测试用这个库是没法转换的 而WGS84和其它坐标系(gcj02.bd09)之间的转换可以通过ChangeCoord ...

  9. 地图坐标系相互转换(WGS-84、GCJ-02、BD-09)

    一.地图坐标系解释 在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德 ...

最新文章

  1. Ruby之Tempfile
  2. 服务器论坛有哪些_SEO工作中,经常使用的无效外链有哪些?
  3. 【Coursera课程笔记】Web智能和大数据Week3_MapReduce
  4. C#通过COM组件操作IE浏览器(四):实用代码总结
  5. 模拟视频光端机与数字光端机究竟有何区别
  6. 图片合成gif_谈谈有哪些好用的制作GIF的方式
  7. Java里面as_与Java中的C#关键字“ as”等效
  8. 保障金融无线网络安全从“头”开始
  9. 邮件系统IP被CBL列黑,怎么样里面申诉呢?
  10. VMware中安装Linux系统详细步骤
  11. vmware安装dsm7.0
  12. 使用Java的Graphics类进行绘图
  13. 在python中month函数的用法_Python代码中calendar.monthrange(year,month)函数其什么作用呢?...
  14. JavaScript创建对象的方式
  15. 面试算法 香槟塔 ,算法:暴力算法
  16. Codeforces Round #469 (Div. 2) C、 Zebras
  17. 什么是servlet ?简述servlet执行原理?生命周期是怎样的?
  18. 【项目三、车牌检测+识别项目】四、使用LPRNet进行车牌识别
  19. Word编辑与排版一
  20. 常用的几种时间系统GMT、UTC等以及使用Python代码GPS时间转UTC时间

热门文章

  1. 数仓数据处理与数据流向
  2. 开源驱动 大黄蜂驱动_客户驱动的开源是软件的未来
  3. 《转》MIMO技术杂谈(二):犹抱琵琶半遮面--MIMO信道中隐藏的秘密
  4. 傲腾无盘服务器,傲腾方案和顺网加速盘方案对比测试
  5. Windows上部署onlyoffice document server并用go语言进行二次开发实现企业实时文档协作功能
  6. Android游戏开发之地图编辑器的使用以及绘制地图 (四)
  7. 深度学习与计算机视觉 看这一篇就够了
  8. Codeforces Round #683 (Div. 2) C. Knapsack(贪心)
  9. Python处理医学影像学中的DICOM
  10. 永磁同步电机的FOC/ DTC控制比较