一、前言

这次的高斯正反算程序是使用的Python编写的。
环境信息是:Win10、PyCharm 2021.3.1、PySide6 6.3.1、Python 3.9.9,基于QT Designer设置图形界面。
具体的设置CSDN上都有,我也是看了其他人的教程设置的,最需要注意的就是版本了,因为不同版本有些包就运行不了,还可能遇到其他奇怪的错误。可以自行搜索一下。

二、代码界面展示

这个使用的QT Designer设计的,包用的是PySide6 6.3.1,控件包括:按钮,下拉列表框,文本框,

标签 。

三、代码运算结果展示

  1. 数据结果采用国家统一坐标(横坐标上加上500000m,在坐标前面冠以带号)。
  2. 内置了4种椭球参数(CGCS200,WGS84,西安80,克拉索夫斯基椭球体)。
  3. 可以计算三度带和六度带。
  4. 计算后的结果直接显示在文本框里面

3.1 数据相互转换验证

相互转换结果是一致的(其实公式就是根据我C#高斯正反算改编的,结果肯定是一样的)

3.2 数据结果正确性验证

3.2.1 高斯正算

因为运算公式都是一样的,所以数据结果的正确性就按照C#的来,还是展示一下吧。同样椭球参数选择西安80。

3.2.2 高斯反算

Python我保留的是3位,C#保留的两位

四、源代码

from PySide6.QtWidgets import QApplication, QMessageBox
from PySide6.QtUiTools import QUiLoader
import sys
import mathdef AngleConversion(Angle):  # 角度转换degrees = (180 / math.pi) * Angled = int(degrees)f = int((degrees - d) * 60)m = round(((degrees - d) * 60 - f) * 60, 3)if m == 60:m = 0f = f + 1if f == 60:f = 0d = d + 1return d, f, mclass Stats:def __init__(self):self.ui = QUiLoader().load('ui.ui')# 窗体添加图标self.ui.pushButton.clicked.connect(self.LB2XY)self.ui.pushButton_2.clicked.connect(self.XY2LB)def EllipsoidParameter(self):  # 选择椭球参数global a, e1, e2if self.ui.comboBox.currentText() == 'CGCS2000':a = 6378137b = 6356752.3141403558e1 = (a * a - b * b) / (a * a)e2 = (a * a - b * b) / (b * b)elif self.ui.comboBox.currentText() == 'WGS84':a = 6378137b = 6356752.3142451795e1 = (a * a - b * b) / (a * a)e2 = (a * a - b * b) / (b * b)elif self.ui.comboBox.currentText() == '1980国家大地坐标系':a = 6378140b = 6356755.288157528e1 = (a * a - b * b) / (a * a)e2 = (a * a - b * b) / (b * b)elif self.ui.comboBox.currentText() == '克拉索夫斯基椭球体':a = 6378245b = 6356863.0187730473e1 = (a * a - b * b) / (a * a)e2 = (a * a - b * b) / (b * b)# m0 - m8的值m0 = a * (1 - e1)m2 = 1.5 * m0 * e1m4 = 1.25 * m2 * e1m6 = (7.0 / 6) * m4 * e1m8 = (9.0 / 8) * m6 * e1# a0 - a8的值a0 = m0 + m2 / 2.0 + (3.0 / 8) * m4 + (5.0 / 16) * m6 + (35.0 / 128) * m8a2 = (1.0 / 2) * (m2 + m4) + (15.0 / 32) * m6 + (7.0 / 16) * m8a4 = (1.0 / 8) * m4 + (3.0 / 16) * m6 + (7.0 / 32) * m8a6 = (1.0 / 32) * m6 + (1.0 / 16) * m8a8 = (1.0 / 128) * m8return a, e1, e2, a0, a2, a4, a6, a8def NumberedSelectionBL2XY(self, L):  # 大地转高斯带号选择global N1, L0if self.ui.comboBox_2.currentText() == '三度带':N1 = int((L + 1.5) / 3)L0 = 3 * N1elif self.ui.comboBox_2.currentText() == '六度带':N1 = int(L / 6) + 1L0 = 6 * N1 - 3return N1, L0def LB2XY(self):list1 = self.EllipsoidParameter()Ld = self.ui.textEdit.toPlainText()Lf = self.ui.textEdit_2.toPlainText()Lm = self.ui.textEdit_3.toPlainText()L = float(Ld) + float(Lf) / 60 + float(Lm) / 3600Bd = self.ui.textEdit_4.toPlainText()Bf = self.ui.textEdit_5.toPlainText()Bm = self.ui.textEdit_6.toPlainText()B = float(Bd) + float(Bf) / 60 + float(Bm) / 3600list2 = self.NumberedSelectionBL2XY(L)# 求椭球面上某点到赤道的子午线弧长,精度至0.001mradB = (math.pi / 180) * B  # 将纬度转换为弧度delta1 = list1[3] * radBdelta2 = (list1[4] / 2) * math.sin(2 * radB)delta3 = (list1[5] / 4) * math.sin(4 * radB)delta4 = (list1[6] / 6) * math.sin(6 * radB)delta5 = (list1[7] / 8) * math.sin(8 * radB)X = round(delta1 - delta2 + delta3 - delta4 + delta5, 9)N = list1[0] / math.sqrt(1 - list1[1] * math.sin(radB) * math.sin(radB))t = math.tan(radB)yita = math.sqrt(list1[2]) * math.cos(radB)  # ηroum = 180 * 60 * 60 / math.pi  # ρml = ((L - list2[1]) * 3600) / roumx = round(float(X) + (N / 2) * t * math.cos(radB) * math.cos(radB) * l * l + (N / 24) * t * (5 - t * t + 9 * yita * yita + 4 * math.pow(yita, 4)) * math.pow(math.cos(radB), 4) * math.pow(l,4) + (N / 720) * t * (61 - 58 * t * t + math.pow(t, 4)) * math.pow(l, 6) * (math.pow(math.cos(radB), 6)), 4)y = round(N * math.cos(radB) * l + (N / 6.0) * (1 - t * t + yita * yita) * math.pow(math.cos(radB), 3) * math.pow(l,3) + ( N / 120.0) * ( 5 - 18 * t * t + math.pow(t, 4) + 14 * yita * yita - 58 * yita * yita * t * t) * math.pow(math.cos(radB), 5) * math.pow(l, 5) + 500000 + list2[0] * math.pow(10, 6), 4)self.ui.textEdit_7.setText(str(x))self.ui.textEdit_8.setText(str(y))QMessageBox.about(self.ui, '提示', '高斯正算转换完成')def NumberedSelectionXY2BL(self, aa):  # 高斯转大地带号选择global L1if self.ui.comboBox_2.currentText() == '三度带':L1 = 3 * aaelif self.ui.comboBox_2.currentText() == '六度带':L1 = 6 * aa - 3return L1def XY2LB(self):global ilist1 = self.EllipsoidParameter()x = self.ui.textEdit_7.toPlainText()y1 = self.ui.textEdit_8.toPlainText()y = float(y1) - int(float(y1) / math.pow(10, 6)) * math.pow(10, 6) - 500000aa = int((float(y1) / math.pow(10, 6)))Bf1 = [0] * 20F = [0] * 20Bf1[0] = float(x) / list1[3]  # 底点纬度F[0] = (-list1[4] / 2.0) * math.sin(2 * Bf1[0]) + list1[5] / 4.0 * math.sin(4 * Bf1[0]) - list1[6] / 6.0 * math.sin(6 * Bf1[0])Bf1[1] = (float(x) - F[0]) / list1[3]deltad = Bf1[1] - Bf1[0]for i in range(10):F[i] = (-list1[4] / 2.0) * math.sin(2 * Bf1[i]) + list1[5] / 4.0 * math.sin(4 * Bf1[i]) - list1[6] / 6.0 * math.sin(6 * Bf1[i])Bf1[i + 1] = (float(x) - F[i]) / list1[3]deltad = Bf1[i + 1] - Bf1[i]if deltad < math.pow(10, -10):i += 1breaktf = math.tan(Bf1[i])yitaf = list1[2] * math.cos(Bf1[i]) * math.cos(Bf1[i])  # yitafMf = list1[0] * (1 - list1[1]) / math.pow(1 - list1[1] * math.sin(Bf1[i]) * math.sin(Bf1[i]), 1.5)Nf = list1[0] / math.sqrt(1 - list1[1] * math.sin(Bf1[i]) * math.sin(Bf1[i]))L1 = self.NumberedSelectionXY2BL(aa)L = (math.pi / 180) * L1 + y / (Nf * math.cos(Bf1[i])) - (1 + 2 * tf * tf + yitaf) * math.pow(y, 3) / (6 * math.pow(Nf, 3) * math.cos(Bf1[i])) + (5 + 28 * tf * tf + 24 * math.pow(tf, 4) + 6 * yitaf + 8 * yitaf * math.pow(tf, 4)) * math.pow(y,5) / (120 * math.pow(Nf, 5) * math.cos(Bf1[i]))list2 = AngleConversion(L)B = Bf1[i] - (tf * y * y) / (2 * Mf * Nf) + tf * (5 + 3 * tf * tf + yitaf - 9 * yitaf * tf * tf) * math.pow(y,4) / (24 * Mf * math.pow(Nf, 3)) + tf * (61 + 90 * tf * tf + 45 * math.pow(tf, 4)) * math.pow(y,6) / (720 * Mf * math.pow(Nf, 5))list3 = AngleConversion(B)self.ui.textEdit.setText(str(list2[0]))self.ui.textEdit_2.setText(str(list2[1]))self.ui.textEdit_3.setText(str(list2[2]))self.ui.textEdit_4.setText(str(list3[0]))self.ui.textEdit_5.setText(str(list3[1]))self.ui.textEdit_6.setText(str(list3[2]))QMessageBox.about(self.ui, '提示', '高斯反算转换完成')app = QApplication(sys.argv)
stats = Stats()
stats.ui.show()
sys.exit(app.exec())

五、结语

Python源码就看看计算部分吧,如果想要改窗体还要自己设置QT Designer,Python这个源码改一改可以直接写一个输出结果的程序。而且Python打包的程序都比较大。
我的其他文章:

  1. 利用C#编写一个高斯正反算程序:https://blog.csdn.net/Zj1638/article/details/125380593
  2. 利用C#编写一个附和闭合导线简易平差程序:https://blog.csdn.net/Zj1638/article/details/125639541
  3. 利用C#编写一个水准测量近似平差程序:https://blog.csdn.net/Zj1638/article/details/119303957
  4. 利用C#编写一个GPS高程拟合(二次曲面拟合模型)程序:https://blog.csdn.net/Zj1638/article/details/125752243

相关下载链接:

  1. 利用C#编写一个水准测量近似平差程序下载链接:https://download.csdn.net/download/Zj1638/16732130
  2. 利用C#编写一个附和闭合导线简易平差程序下载链接:https://download.csdn.net/download/Zj1638/85928040
  3. 利用C#编写一个高斯正反算程序下载链接:https://download.csdn.net/download/Zj1638/85711234
  4. 利用Python编写一个高斯正反算程序下载链接:https://download.csdn.net/download/Zj1638/86059069
  5. 利用C#编写一个GPS高程拟合(二次曲面拟合模型)程序下载链接:https://download.csdn.net/download/Zj1638/85916113

需要的可以支持一下。如果有什么不懂的,可以私信,我看到了会回答的。

利用Python编写一个高斯正反算程序相关推荐

  1. 利用C#编写一个高斯正反算程序

    一.代码界面展示 整个界面控件为tabControl,groupBox,label,textbox,comboBox,button,richTextBook. 二.代码运算结果展示 数据结果采用国家统 ...

  2. python数据预测_利用Python编写一个数据预测工具

    利用Python编写一个数据预测工具 发布时间:2020-11-07 17:12:20 来源:亿速云 阅读:96 这篇文章运用简单易懂的例子给大家介绍利用Python编写一个数据预测工具,内容非常详细 ...

  3. 利用android实现汇率计算器,利用python编写一个汇率计算器

    利用python编写一个汇率计算器 发布时间:2020-11-10 15:03:44 来源:亿速云 阅读:137 作者:Leah 这篇文章运用简单易懂的例子给大家介绍利用python编写一个汇率计算器 ...

  4. 使用python编写一个简易的打折程序

    使用python编写一个简易的打折程序

  5. matlab高斯正反算程序6,基于matlab的高斯投影正反算与相邻带坐标换算程序设计...

    第 卷 第 期 在 月 中 国 水 运 基于 的高斯投影正反算与相邻带坐标换 算程 序设计 徐 翰 ,周 强 波 (核 工 业 二 三 研 究所 ,湖 南 长 沙 ) 摘 要 :地 图投影方法众多 , ...

  6. python编写一个软件-软件代做:利用Python编写一个行业专用的小计算器

    前言:本文讲述的是如何利用python编程制作一个适用于指定行业的计算器,方便计算结果,涵盖的知识点由Python编写GUI界面程序,利用爬虫采集实时的汇率数据,将Python文件打包成可以单独运行的 ...

  7. 利用python实现一个简单的表白程序

    见过各种各样的表白方式,也听到过很多种表白方式,什么文科生式表白.理科生式表白呀,今天教你程序员的表白,咱们今天写一个简单的表白程序. 话不多说直接上教程 首先我们老样子先导入系统文件库 from t ...

  8. 小程序一:利用Python编写一个简单的图书管理系统

    完成项目的流程: 想要完成某个项目基本都是按这个流程进行编写 想要实现的功能 代码的实现 class Book:def __init__(self,name,author,recommendation ...

  9. 利用python编写一个pc模拟器明日方舟脚本_明日方舟脚本1.0(python\adb\cv2)

    一.目的 <Python从入门到实践>第14章拉拉杂杂"抄"完,急于练手,便捡起以前一直想写却没写完的"鼠标键盘模拟"程序. 二.思考 图1.0 a ...

最新文章

  1. PowerDesigner教程系列(三)概念数据模型
  2. 浏览器插件:一款解决谷歌浏览器吃内存神器插件,你值得试一试!
  3. mysql的mtr是指什么_MySQL中MTR的概念
  4. 听说现在微服务30k以上?真的该转型?
  5. 【UOJ348】【WC2018】州区划分 状压DP FWT
  6. [OpenS-CAD]屏幕坐标转换分析
  7. 关于 Spring 注解和 XML 的选择问题
  8. 如何使用Excel的数据去查询数据库?
  9. win10 保护计算机 密码,在win10中这样设置用户密码过期时间,可以保证电脑安全...
  10. 一款非常优秀的内存数据库——lmdb
  11. H5如何调用手机摄像头?
  12. 基于Luckysheet实现的协同编辑在线表格支持在线导入数据库,前端导出,前端导入,后端导出
  13. IAR报错:FlashK60Fxxx128K.board丢失 K60断电丢程序
  14. PHP简单同学录(连接数据库)
  15. 英语情景对话计算机专业,工作有关情景对话英语
  16. Borůvka algorithm
  17. python中seaborn报错These `style` levels are missing dashes解决办法
  18. 【前端技术】一篇文章搞掂:WeX5
  19. [高数][高昆轮][高等数学上][第一章-函数与极限]06.极限存在法则 两个重要极限...
  20. HTML5七夕情人节表白网页抖音超火的樱花雨3D相册 HTML+CSS+JavaScript

热门文章

  1. 关于报错:This is a development server. Do not use it in a production deployment.Use a production
  2. 利用postman完成JSON串的发送功能(springboot)
  3. amd笔记本安装matlab,AMD matlab的安装(仅供学习)
  4. OpenCV:生成条纹图
  5. 患上“吃鸡”选择困难症?准确认识枪械很重要!
  6. Linux环境搭建:软件包的几种安装方式,环境变量的设置,防火墙,PHPWIND
  7. 疯狂的程序员-第六十四章
  8. oracle防止sql注入proc,解密:Oracle怎么防SQL注入
  9. IELTS-Writing Exercises: Tak2:Aging society
  10. 计算机网络(四)网络层 上