摘自http://blog.sina.com.cn/s/blog_4e426d410101ahlt.html

//WGS84地理坐标系参变量struct CRDGEODETIC
{
double latitude;
double longitude;
double altitude;
};//空间笛卡尔坐标系坐标点
struct CRDCARTESIAN
{
double x;
double y;
double z;
};//最精确的坐标转换办法 ,空间大地坐标系向空间直角坐标系的转换CRDCARTESIAN Coordcovert::BLH_to_XYZ (CRDGEODETIC pos_BLH)//大地--->球心
{
double a=6378137;//a为椭球的长半轴:a=6378.137km
double b=6356752.3141;//b为椭球的短半轴:a=6356.7523141km
double H=pos_BLH.altitude+a;
double e=sqrt(1-pow(b ,2)/pow(a ,2)); //e为椭球的第一偏心率
// double e=sqrt(0.006693421622966); //克拉索夫斯基椭球
// double e=sqrt(0.006694384999588); //1975年国际椭球
// double e=sqrt(0.0066943799013); //WGS-84椭球
CRDCARTESIAN pos_XYZ;
double m=M_PI/180;//经度维度需要转换成弧度.
double B=pos_BLH.latitude*m;
double L=pos_BLH.longitude*m;
double W=sqrt(1-pow(e ,2)*pow(sin(B) ,2));
double N=a/W; //N为椭球的卯酉圈曲率半径
pos_XYZ.x=(N+H)*cos(B)*cos(L);
pos_XYZ.y=(N+H)*cos(B)*sin(L);
pos_XYZ.z=(N*(1-pow(e ,2))+H)*sin(B);
return pos_XYZ;
}
CRDGEODETIC Coordcovert::XYZ_to_BHL (CRDCARTESIAN pos_XYZ)//球心--->大地
{
double v0=pos_XYZ.z/sqrt(pow(pos_XYZ.x ,2)+pow(pos_XYZ.y ,2));
double a=6378137;//a为椭球的长半轴:a=6378.137km
double b=6356752;
double e=sqrt(1-pow(b ,2)/pow(a ,2)); //e为椭球的第一偏心率
// double e=sqrt(0.006693421622966); //克拉索夫斯基椭球
// double e=sqrt(0.006694384999588); //1975年国际椭球
// double e=sqrt(0.0066943799013); //WGS-84椭球
// double W=sqrt(1-pow(e ,2)*pow(sin(B) ,2));
double N=0 ; //N为椭球的卯酉圈曲率半径
double B1=atan(v0) ,B2=0;
double H=0;
while(qAbs(B2-B1)>1E-5)
{
N = a/sqrt(1-pow(e ,2)*pow(sin(B1) ,2));
H = pos_XYZ.z/sin(B1)-N*(1-pow(e ,2));
B2 = atan(pos_XYZ.z*(N+H)/sqrt((pow(pos_XYZ.x ,2)+pow(pos_XYZ.y ,2))*(N*(1-pow(e,2))+H)));
B1=B2;
}
double m=M_PI/180;
CRDGEODETIC pos_BLH;
pos_BLH.latitude=B1/m;
pos_BLH.longitude=atan(pos_XYZ.y/pos_XYZ.x)/m;
pos_BLH.altitude=H-a;
return pos_BLH;
}
CRDCARTESIAN Coordcovert::XYZ_to_xyz (CRDCARTESIAN pos_XYZ , CRDGEODETIC Center)//球心--->站心
{
CRDCARTESIAN pos_xyz ,tmp_XYZ;
CRDCARTESIAN Center_XYZ = BLH_to_XYZ (Center);
tmp_XYZ.x = pos_XYZ.x-Center_XYZ.x;
tmp_XYZ.y = pos_XYZ.y-Center_XYZ.y;
tmp_XYZ.z = pos_XYZ.z-Center_XYZ.z;
double m=M_PI/180;
pos_xyz.x = -sin(Center.latitude*m)*cos(Center.longitude*m)*tmp_XYZ.x-sin(Center.latitude*m)*sin(Center.longitude*m)*tmp_XYZ.y
+ cos(Center.latitude*m)*tmp_XYZ.z;
pos_xyz.y = -sin(Center.longitude*m)*tmp_XYZ.x+cos(Center.longitude*m)*tmp_XYZ.y;
pos_xyz.z =cos(Center.latitude*m)*cos(Center.longitude*m)*tmp_XYZ.x+cos(Center.latitude*m)*sin(Center.longitude*m)*tmp_XYZ.y
+ sin(Center.latitude*m)*tmp_XYZ.z - a;
return pos_xyz;
}
CRDCARTESIAN Coordcovert::xyz_to_XYZ (CRDCARTESIAN pos_xyz , CRDGEODETIC Center)//站心--->球心
{
double a=6378137;//a为椭球的长半轴:a=6378.137km
double b=6356752.3141;//b为椭球的短半轴:a=6356.7523141km
double H0=Center.altitude+a;
double e=sqrt(1-pow(b ,2)/pow(a ,2)); //e为椭球的第一偏心率
// double e=sqrt(0.006693421622966); //克拉索夫斯基椭球
// double e=sqrt(0.006694384999588); //1975年国际椭球
// double e=sqrt(0.0066943799013); //WGS-84椭球
double m=M_PI/180;//经度维度需要转换成弧度.
double B0=Center.latitude*m;
double L0=Center.longitude*m;
double W=sqrt(1-pow(e ,2)*pow(sin(B0) ,2));
double N0=a/W; //N为椭球的卯酉圈曲率半径
CRDCARTESIAN pos_XYZ;
pos_XYZ.x = (N0+H0)*cos(B0)*cos(L0)
-sin(B0)*cos(L0)*pos_xyz.x - sin(L0)*pos_xyz.y + cos(B0)*cos(L0)*pos_xyz.z;
pos_XYZ.y = (N0+H0)*cos(B0)*sin(L0)
-sin(B0)*sin(L0)*pos_xyz.x - cos(L0)*pos_xyz.y + cos(B0)*sin(L0)*pos_xyz.z;
pos_XYZ.z = (N0*(1-pow(e ,2))+H0)*sin(B0)
-cos(B0)*pos_xyz.x + sin(B0)*pos_xyz.z;
return pos_XYZ;
}

坐标转换源代码,C++/C, 极为精确地大地坐标系转地心坐标系,地心坐标系转站心坐标系相关推荐

  1. B站/博客园/CSDN/知乎:@秋意正寒 地球坐标系(WGS84),火星坐标系(GCJ02), 百度坐标系(BD09)坐标转换

    https://blog.csdn.net/skh2015java/article/details/68486756 聊聊GIS中那些坐标系 转载请声明到标题. B站/博客园/CSDN/知乎:@秋意正 ...

  2. 大地测量控制点坐标转换技术规范

    本标准的起草 规则依据GB/T 1.1-2009. 本标准由国家测绘地理信息局提出并归口. 本标准起草单位:中国测绘科学研究院.国家测绘产品质量检验测试中心.广州市城市规划勘测设计研究院. 本标准主要 ...

  3. android温湿度传感节点指令源代码,Arduino+DHT11+OLED显示温湿度信息(附详细文档+源码)...

    设计者:STCode (公众号同名) 第一章 绪论 1.1实训设计背景与意义 随着生活水平的提高和科技水平的发展,人们对自身和家庭安全方面的考虑也越来越多,越来越多的安全监测系统和设备进入到人们的生活 ...

  4. 轻松实现GPS坐标转换

    轻松实现坐标转换 不同地理位置系统转换入门 文档选项 打印本页 将此页作为电子邮件发送 样例代码 级别: 初级 Sami Salkosuo (mailto:sami.salkosuo@fi.ibm.c ...

  5. cgcs2000大地坐标系地图_我国大地坐标系_地图与地图制图

    我国大地坐标系_地图与地图制图 2.2.4 我国大地坐标系 我国目前常用的两个大地坐标系是1954年北京坐标系和1980年国家大地坐标系,以及2008年7月1日启用的2000国家大地坐标系. 1.19 ...

  6. Matlab gui大地坐标系-地心地固坐标系-站心坐标系坐标变换

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.坐标变换原理 1.大地坐标系 到 地心地固坐标系 2.地心地固坐标系 到 大地坐标系 3.地心地固坐标系 到 站心 ...

  7. arcgis 投影坐标系转地理坐标系_空间坐标与投影系统系列(二):国内常用投影坐标系...

    上一篇我们介绍了空间坐标和地图投影.本篇我们以国内常用的54,80,2000坐标系统为例,介绍各坐标系统的区别与联系. 一.我国常用坐标系 我国大中比例尺地图均采用高斯-克吕格投影,其通常是按6度和3 ...

  8. java 坐标系运算 判断一个地理坐标是否在电子围栏 圆、矩形、多边形区域内

    测试没问题,我用的是原始坐标:要注意的是坐标转换问题,要看当前是属于什么坐标系 经纬度与GCS(Geographic Coordinate System, 地理坐标系统) 平面坐标与PCS(Proje ...

  9. 传统大地测量数字考点

    GPS考点:https://www.cnblogs.com/pylblog/p/10862151.html 1. 光电测距仪小于3km为短距离:3km~15km为中距离:大于15km为远距离(考过) ...

最新文章

  1. ajax实现文件上传
  2. linux下安装nginx、python、django
  3. BlockChain:《Blockchain Gate》听课笔记——区块链的共识机制—简介、理解、畅谈
  4. Python的__getattr__方法学习
  5. 50:树中两个结点的最低公共祖先
  6. 前端学习(1539):hello world
  7. Python2.7.16安装(Win10)
  8. canal 历史数据如何处理_MySQL日志解析工具Canal的使用
  9. 利用Linux搭建SVN服务器,详细过程
  10. 走进量化投资奇妙的模型世界
  11. ensp(华为VRRP配置)
  12. c语言字符 ul,c语言 #define 中的UL
  13. ES2015 模板字符串与字符串扩展方法
  14. 线程池在美团的最佳实践
  15. 基于SSM社区网格化小区管理系统设计
  16. 【spark基础】之client模式下--conf读取外部文件
  17. MyEclispe发布web项目-遁地龙卷风
  18. android ftp
  19. webpack : 无法加载文件 C:\Users\zgl\AppData\Roaming\npm\webpack.ps1,因为在此系统上禁止运行脚本 。
  20. nodejs能否替代java_nodejs能代替java吗?

热门文章

  1. 美国出台商用无人机新规,宝宝表示我也要去考无人机飞行员驾照
  2. Milvus 揭秘| 向量索引算法HNSW和NSG的比较
  3. 必应壁纸php,PHP版Bing壁纸下载源码
  4. windows PC版微信双开
  5. 计算机和工业设计哪个就业前景大,工业设计专业就业前景
  6. oracle 运维入门,Oracle日常基本运维命令及基本体系结构
  7. Java基础知识(四) 基本类型与运算
  8. 华三模拟器中的remote实现简单组网
  9. 了解伽马(GAMMA、伽马值、光度、灰度系数)
  10. 移动云API开放平台助力开发者驰骋云端