python萌新+新晋研究僧一枚,课题需要,用python写了坐标转换程序,标注了新人在用tkinter模块的一些问题与陷阱,供萌新学习,供有需求者取用,大佬轻喷,转载请注明出处。
打包成exe的解压即用版程序(严格按使用方法使用)的神秘代码如下:
https://pan.baidu.com/s/1LnkxFKob_ZwDS8BaKEwPUw
python 3.6.5环境下写就,代码习惯略差
好吧我承认我的ui没仔细做,毕竟是个自用程序,主要看内涵
Java带来的坏习惯,总喜欢写主程序,还特简单那种。。。大佬轻喷,惨不忍睹的main.py
main.py
import sys
from UI import Application
from coordinate import Coordinate,Coordinate_54
from fuction import run
app = Application()
app.master.title("坐标转换工具") # 窗口标题
app.mainloop() # 主消息循环好吧我承认我的代码习惯很差,大佬轻喷,毕竟主业不是码农,抽时间自学而已。但只要有些基础的读懂没问题的,UI部分,需注意的陷阱注释标出,这才是真。。。。主程序
UI.py
class Coordinate():
"""坐标类基类按北京城市地方坐标系设置参数"""
def __init__(self,coordinate_value):
"""参数写成字典方便拓展"""
#转换参数
self.P=284766.1483
self.Q=455704.6404
self.R=1.000019209
self.S= -0.007318594343
#字典赋值
# self.coordinate_value={'xd':0,'yd':0}
class Coordinate_54(Coordinate):
"""54坐标系"""
def __init__(self,coordinate_value):
super().__init__(coordinate_value)
self.coordinate_value=coordinate_value#知识漏洞,coordinate只是个形参并非属性!
self.coordinate_value_54 = {'xbj54': 0, 'ybj54': 0}
def transform(self):
"""转换程序"""
# 转换因子
P = float(self.P)
Q = float(self.Q)
R = float(self.R)
S = float(self.S)
# transform!
xd = float(self.coordinate_value['xd'])
yd = float(self.coordinate_value['yd'])
ybj54 =( ((yd - Q) * R - (xd - P)*S) / (R **2 + S**2))+400000
xbj54 = ((xd - P) + ybj54 * S) / R +4402923
# 用字典存储
self.coordinate_value_54['xbj54']=xbj54
self.coordinate_value_54['ybj54']=ybj54
class Coordinate_2000(Coordinate):
"""2000坐标系"""
def __init__(self,coordinate_value):
super().__init__(coordinate_value)
self.coordinate_value=coordinate_value
class Coordinate_84(Coordinate):
"""WGS84坐标系"""
def __init__(self,coordinate_value):
super().__init__(coordinate_value)
self.coordinate_value=coordinate_value其中涉及到的坐标系类,写在coordinate.py里(预留了两个类,做四参数法转2000用,虽然很难)
coordinate.py
class Coordinate():
"""坐标类基类按北京城市地方坐标系设置参数"""
def __init__(self,coordinate_value):
"""参数写成字典方便拓展"""
#转换参数
self.P=284766.1483
self.Q=455704.6404
self.R=1.000019209
self.S= -0.007318594343
#字典赋值
# self.coordinate_value={'xd':0,'yd':0}
class Coordinate_54(Coordinate):
"""54坐标系"""
def __init__(self,coordinate_value):
super().__init__(coordinate_value)
self.coordinate_value=coordinate_value#知识漏洞,coordinate只是个形参并非属性!
self.coordinate_value_54 = {'xbj54': 0, 'ybj54': 0}
def transform(self):
"""转换程序"""
# 转换因子
P = float(self.P)
Q = float(self.Q)
R = float(self.R)
S = float(self.S)
# transform!
xd = float(self.coordinate_value['xd'])
yd = float(self.coordinate_value['yd'])
ybj54 =( ((yd - Q) * R - (xd - P)*S) / (R **2 + S**2))+400000
xbj54 = ((xd - P) + ybj54 * S) / R +4402923
# 用字典存储
self.coordinate_value_54['xbj54']=xbj54
self.coordinate_value_54['ybj54']=ybj54
class Coordinate_2000(Coordinate):
"""2000坐标系"""
def __init__(self,coordinate_value):
super().__init__(coordinate_value)
self.coordinate_value=coordinate_value
class Coordinate_84(Coordinate):
"""WGS84坐标系"""
def __init__(self,coordinate_value):
super().__init__(coordinate_value)
self.coordinate_value=coordinate_value版权声明:本文为better_call_Soul原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。