目录

  • 一、功能
  • 二、使用方法
  • 三、算法流程图![大地坐标与空间直角坐标的转换流程图](https://img-blog.csdnimg.cn/20200524140318692.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjA2NjEzNQ==,size_16,color_FFFFFF,t_70)
  • 四、Python程序
    • (1)计算程序
    • (2)DOS接口程序
  • 五、MATLAB程序
    • (1)大地坐标转换为空间直角坐标
    • (2)空间直角坐标转换为大地坐标
  • 六、运行结果
    • 1、Python运行结果
      • (1)大地坐标转换为空间直角坐标
      • (2)空间直角坐标转换为大地坐标
    • 2、MATLAB运行结果
      • (1)大地坐标转换为空间直角坐标
      • (2)空间直角坐标转换为大地坐标
  • 七、文件下载地址

一、功能

使用Python实现大地坐标与空间直角坐标间的转换,使用CGCS2000国家大地坐标系的椭球数据。
功能为:
①已知某点的大地坐标(L,B,H),求该点相应的大地空间直角坐标(X,Y,Z)
②已知某点的大地空间直角坐标(X,Y,Z),求该点相应的大地坐标(L,B,H)


二、使用方法

将文件计算程序与接口程序放在同一文件夹下,双击即可运行接口程序。
(注:该程序包含计算程序和接口程序,用户可以通过调整接口程序创建属于自己的交互界面。流程图在下载的压缩文件中。)


三、算法流程图


四、Python程序

(1)计算程序

import math as mclass Earth():# 建立椭球类,,采用SGCS2000中国大地坐标系数据def __init__(self):  # 给定椭球数据# 长半轴self.a = 6378137.0# 短半轴self.b = 6356752.31414# 扁率self.f = 1/298.257222101# 第一偏心率的平方self.e1s = m.pow(0.0818191910428, 2)# 第二偏心率的平方self.e2s = self.e1s / (1 - self.e1s)class Transform():# 建立转换类def __init__(self):  # 导入椭球数据self.earth = Earth()def BLH_XYZ(self, B, L, H):  # 大地坐标转换为空间直角坐标# 将角度转换为弧度self.b = m.radians(B)self.l = m.radians(L)# 计算辅助函数self.W = m.sqrt(1 - self.earth.e1s * m.pow(m.sin(self.b), 2))# 转换为空间直角坐标self.N = self.earth.a / self.Wself.X = (self.N + H) * m.cos(self.b) * m.cos(self.l)self.Y = (self.N + H) * m.cos(self.b) * m.sin(self.l)self.Z = (self.N * (1 - self.earth.e1s) + H) * m.sin(self.b)def XYZ_BLH(self, X, Y, Z):  # 空间直角坐标转换为大地坐标# 求出大地经度self.l = m.atan(Y / X)# 求出大地纬度self.r = m.sqrt(X * X + Y * Y)self.tb1 = Z / self.rwhile True:self.tb2 = 1 / self.r * (Z + self.earth.a * self.earth.e1s * self.tb1 /m.sqrt(1 + self.tb1 * self.tb1 * (1 - self.earth.e1s)))if abs(self.tb2 - self.tb1) <= 5e-10:breakself.tb1 = self.tb2self.b = m.atan(self.tb2)# 求出大地高self.W = m.sqrt(1 - self.earth.e1s * m.pow(m.sin(self.b), 2))self.N = self.earth.a / self.Wself.H = self.r / m.cos(self.b) - self.N# 将弧度转换为角度self.B = m.degrees(self.b)self.L = m.degrees(self.l)class Point():# 建立点类def BLH(self, B, L, H):  # 建立直角坐标点类self.B = Bself.L = Lself.H = Hself.P = Transform()self.P.BLH_XYZ(B, L, H)self.X = self.P.Xself.Y = self.P.Yself.Z = self.P.Zdef XYZ(self, X, Y, Z):  # 建立直角坐标点类self.X = Xself.Y = Yself.Z = Zself.P = Transform()self.P.XYZ_BLH(X, Y, Z)self.B = self.P.Bself.L = self.P.Lself.H = self.P.H

(2)DOS接口程序

import CoordinateTransformation
import sys as s
import osSolveType = input('请输入解算类型:(键入1为大地坐标->直角坐标,2为直角坐标->大地坐标)\n')
while True:if SolveType == '1':# 当选择'大地坐标->直角坐标'模式时# 输入大地坐标I = input('请输入大地坐标B、L、H,中间用空格隔开:\n')while True:if I:passelse:s.exit(0)try:[B, L, H] = [float(n) for n in I.split()]breakexcept:I = input('输入错误,请重新输入大地坐标B、L、H,中间用空格隔开:\n')else:pass# 开始转换P = CoordinateTransformation.Point()P.BLH(B, L, H)B = str(B)L = str(L)H = str(H)X = str(P.X)Y = str(P.Y)Z = str(P.Z)massege = '\n您输入的大地坐标为:(' + B + ', ' + L + ', ' + H + ')\n转换得到直角坐标为:(' + X + ', ' + Y + ', ' + Z + ')'print(massege)breakelif SolveType == '2':# 当选择'直角坐标->大地坐标'模式时# 输入直角坐标I = input('请输入直角坐标X、Y、Z,中间用空格隔开:\n')while True:if I:passelse:s.exit(0)try:[X, Y, Z] = [float(n) for n in I.split()]1/Xbreakexcept:I = input('输入错误,请重新输入直角坐标X、Y、Z,中间用空格隔开:\n')else:pass# 开始转换P = CoordinateTransformation.Point()P.XYZ(X, Y, Z)X = str(X)Y = str(Y)Z = str(Z)B = str(P.B)L = str(P.L)H = str(P.H)massege = '\n您输入的直角坐标为:(' + X + ', ' + Y + ', ' + Z + ')\n转换得到大地坐标为:(' + B + ', ' + L + ', ' + H + ')'print(massege)breakelse:SolveType = input('输入错误,请重新输入解算类型:(键入D为正算,I为反算)\n')
os.system('pause')

五、MATLAB程序

(1)大地坐标转换为空间直角坐标

% 大地坐标转换为空间直角坐标
clear all
clc
BLH = [34.5678, 56.7890, 12345.6];
% 键入需要转换的大地坐标(B,L,H)format long gXYZ = BLH_XYZ(BLH);
XYZ%% 转换函数
function [XYZ] = BLH_XYZ(BLH)
% BLH_XYZ 大地坐标转换为直角坐标% 导入CGCS2000的椭球数据
a = 6378137.0;  % 长半轴
es = 0.0818191910428^2;  % 第一偏心率的平方B = BLH(1);
L = BLH(2);
H = BLH(3);% 计算辅助函数
W = sqrt(1 - es * sind(B)^2);% 转换为空间直角坐标
N = a / W;
X = (N + H) * cosd(B) * cosd(L);
Y = (N + H) * cosd(B) * sind(L);
Z = (N * (1 - es) + H) * sind(B);XYZ = [X, Y, Z];end

(2)空间直角坐标转换为大地坐标

% 空间直角坐标转换为大地坐标
clear all
clc
XYZ = [1234567.89, 3456789.01, 5678901.23];
% 键入需要转换的直角坐标(X,Y,Z)format long gBLH = XYZ_BLH(XYZ);
BLH%% 转换函数
function [BLH] = XYZ_BLH(XYZ)
% XYZ_BLH 直角坐标转换为大地坐标函数% 导入CGCS2000的椭球数据
a = 6378137.0;  % 长半轴
es = 0.0818191910428^2;  % 第一偏心率的平方X = XYZ(1);
if X == 0disp('输入错误')return
end
Y = XYZ(2);
Z = XYZ(3);% 求出大地经度
l = atan(Y / X);
L = l * 180 / pi;% 求出大地纬度
r = sqrt(X^2 + Y^2);
tb1 = Z / r;
while truetb2 = 1 / r * (Z + a * es * tb1 / sqrt(1 + tb1^2 *(1 - es)));if abs(tb2 - tb1) <= 5e-10breakelsetb1 = tb2;end
end
b = atan(tb2);
B = b * 180 / pi;% 求出大地高
W = sqrt(1 - es * sind(B)^2);
N = a / W;
H = r / cosd(B) - N;BLH = [B, L, H];end

六、运行结果

1、Python运行结果

(1)大地坐标转换为空间直角坐标

(2)空间直角坐标转换为大地坐标

2、MATLAB运行结果

(1)大地坐标转换为空间直角坐标

(2)空间直角坐标转换为大地坐标


七、文件下载地址

Python程序文件下载地址:【椭球大地测量学】Python实现大地坐标与空间直角坐标间的转换编程(含流程图)
MATLAB程序文件下载地址:【椭球大地测量学】MATLAB实现大地坐标与空间直角坐标间的转换编程(含流程图)


欢迎交流!

【椭球大地测量学】Python及MATLAB实现大地坐标与空间直角坐标间的转换编程(含流程图)相关推荐

  1. 【椭球大地测量学】Python及MATLAB实现贝塞尔大地问题正反解计算编程(含流程图)

    目录 一.功能 二.使用方法 三.算法流程图 (1)贝塞尔大地问题正算 (2)贝塞尔大地问题反算 四.Python程序 (1)计算程序 (2)DOS接口程序 五.MATLAB程序 (1)贝塞尔大地问题 ...

  2. MATLAB批量读取航摄相片EXIF信息和GNSS信息以及MATLAB批量经纬度坐标转换空间直角坐标

    前言 没有前言,创作不易,希望家人们点点赞,如有错误评论留言,感谢支持! 文章目录 前言 一.MATLAB批量读取航摄相片的EXIF信息,并批量提取其GNSS经纬度信息 (1)前述: (2)代码实现和 ...

  3. WGS84下大地坐标转换为空间直角坐标

    核心代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  4. 相同参考系统(椭球)大地坐标与空间直角坐标相互转换

    一.大地坐标(B, L, H)>>空间直角坐标(X, Y, Z) 分享给有需要的人,代码质量勿喷. //B.L的单位是弧度,H的单位是米:X.Y.Z的单位是米 //大地坐标(B,L,H)- ...

  5. 大地坐标与空间直角坐标互相转换

    引言 坐标转换代码,由大地坐标(经.纬度.高)与空间直角坐标(XYZ)互相转换.MATLAB代码,下面代码默认转换的是WGS84坐标系下的空间直角和大地坐标,可以根据需要选择椭球参数. Matlab代 ...

  6. python解析二进制文件以及不同进制数值间的转换

    目录 1.python解析二进制文件 2.不同进制数值间的转换 参考文献: 1.python解析二进制文件 不同类型数据的字节数不同,因此首先要明确不同物理量数据所在的字节位置及其数据类型,pytho ...

  7. 利用python open-cv aimageio完成avi png mp4 gif间的转换

    实现时段截取.矩形窗截取.帧等间隔采样,帧图片缩放. 文章目录 参考 一.avi转png 二.png转mp4 三.png转gif 四.avi转gif 参考 Python图片转视频和视频转图片以及视频转 ...

  8. 倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准

    倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准 背景 之前提到磁传感器的误差来源,并介绍了消除硬磁干扰的3参数校准.倾斜补偿的电子罗盘(2):磁传感器的误差来源.硬磁干扰的 ...

  9. 地理空间坐标系统-同一椭球基准内的坐标转换-相关代码算法实现C#

    围绕上一篇,同一椭球基准内不同坐标系下坐标转换的相关算法,此篇主要分享的是这些算法的实现 采用代码为C#,转换精度都做了验证,都在小数点后两位 大地球面坐标与大地空间直角坐标互转 [坐标正转] 经度. ...

  10. python实现WGS-84坐标系下大地坐标和空间直角坐标系互转xyz2blh、blh2xyz,xyz2neu

    WGS-84坐标系下大地坐标blh和空间直角坐标系xyz互转,以及转站心坐标系neu # -*- coding: utf-8 -*- """ Created on Tue ...

最新文章

  1. 清华成果发布 | 广度学习基础计算系统集成平台
  2. What is Gameplay
  3. [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉
  4. 2 字符串String
  5. jdbc 自增id 原理_面试被问分布式ID怎么办? 滴滴(Tinyid)甩给他
  6. indexOf()方法的使用,截取字符串,字符串截取,切割字符串,split(),join(),Replace()
  7. Nexus 安装 使用说明
  8. libx264进行视频编码的流程
  9. Linux启动syslog进程,linux – 使用systemd启动的进程正在记录到/ var / log / syslog和/var/log/daemon.log...
  10. 驱动AI产业“第二增长曲线”,清华系RealAI发布首个企业级隐私保护机器学习平台与升级版AI模型杀毒软件
  11. 【渝粤教育】国家开放大学2018年春季 0248-22T电工电子技术 参考试题
  12. IP转发的最长前缀匹配
  13. 人工智能案例:车厂特斯拉的花式AI应用...
  14. retina 显示屏详细理解
  15. linux百度资源网盘,百度网盘 linux版
  16. 初识大数据:全国社会保险大数据应用创新大赛
  17. 年面向大学生的 9 个最佳 Chrome 扩展程序
  18. oracle资产负债表重分类吗,​资产负债表一般是重分类还是不重分类
  19. 腾讯再次推出“王卡宽带”,大家觉得怎么样?
  20. 【Hibernate步步为营】--映射合集汇总

热门文章

  1. 使用layer 弹出对话框 子父页面相互参数传递 父页面获取子页面参数实例
  2. Pm2 部署 Nuxt 项目
  3. web border属性
  4. 华硕台式计算机光盘怎么启动不了,华硕怎么设置光盘启动_华硕怎么设置开机启动光驱...
  5. android pc游戏模拟器哪个好用,哪个电脑手游模拟器好用 安卓手游模拟器测试对比排行榜...
  6. server 2008 r2中无法启用“网络发现”
  7. 互联网dmz区_DMZ区的概念和用途
  8. ceph peering机制-状态机
  9. html超链接打开共享文件夹,访问共享文件夹的方法
  10. 【软件技能】Perl 基础用法