测站改正

用cass的测站改正选择坐标偶尔会出错,便想能不能自己写一个,转换出来的误差比较直接。引用了一些别人的代码,找不到复制的地方了。初学代码有些乱。

import tkinter as tk
from tkinter import filedialog, messagebox
import math

'''打开选择文件夹对话框'''
window = tk.Tk()
window.title("测站改正1.0  by: 放放风")
window.geometry('795x290+300+200')  # 290 160为窗口大小,+1000 +10 定义窗口弹出时的默认展示位置
window['background'] = 'RoyalBlue'
v = tk.StringVar()


# 方位角
def azimuth(x1, y1, x2, y2):
    angle = 0

    dx = x2 - x1
    dy = y2 - y1

    if dx == 0 and dy > 0:  # 判断象限
        angle = 0
    if dx == 0 and dy < 0:
        angle = 180
    if dy == 0 and dx > 0:
        angle = 90
    if dy == 0 and dx < 0:
        angle = 270
    if dx > 0 and dy > 0:
        angle = math.atan(dx / dy) * 180 / math.pi
    elif dx < 0 and dy > 0:
        angle = 360 + math.atan(dx / dy) * 180 / math.pi
    elif dx < 0 and dy < 0:
        angle = 180 + math.atan(dx / dy) * 180 / math.pi
    elif dx > 0 and dy < 0:
        angle = 180 + math.atan(dx / dy) * 180 / math.pi
    angle = math.radians(angle)
    return angle


#
def calc_angle():
    t1 = text1_var.get()
    t2 = text2_var.get()
    t3 = text3_var.get()
    t4 = text4_var.get()

    x1 = float(t1.split(",")[0])
    y1 = float(t1.split(",")[1])
    x2 = float(t2.split(",")[0])
    y2 = float(t2.split(",")[1])
    x3 = float(t3.split(",")[0])
    y3 = float(t3.split(",")[1])
    x4 = float(t4.split(",")[0])
    y4 = float(t4.split(",")[1])
    #
    d1 = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
    d2 = math.sqrt((x4 - x3) ** 2 + (y4 - y3) ** 2)
    text5_var.set(d1)
    text7_var.set(d2)
    d = (d1 - d2) / 2
    text9_var.set(d)
    dd = abs(round(d1 - d2, 3))
    if dd > 0.02:
        text15_var.set("请检查,误差为%.3f米" % dd)
    else:
        text15_var.set("数据正常,误差为%.3f米" % dd)
    #
    angle = azimuth(x1, y1, x2, y2)
    text6_var.set(angle)
    angle_qzy = azimuth(x3, y3, x4, y4)
    text8_var.set(angle_qzy)
    # rtk坐标平差

    x_one = x1 + d * math.sin(angle)
    y_one = y1 + d * math.cos(angle)

    x_two = x2 - d * math.sin(angle)
    y_two = y2 - d * math.cos(angle)

    # 全站仪坐标旋转角度

    angle_Difference = angle - angle_qzy
    text10_var.set(angle_Difference)
    # 旋转全站仪坐标

    xs = x3 * math.cos(angle_Difference) + y3 * math.sin(angle_Difference)
    ys = y3 * math.cos(angle_Difference) - x3 * math.sin(angle_Difference)

    x = x4 * math.cos(angle_Difference) + y4 * math.sin(angle_Difference)
    y = y4 * math.cos(angle_Difference) - x4 * math.sin(angle_Difference)

    # 不知道怎么旋转的,旋转的方位角和rtk是一样的
    #
    # #计算旋转起点到改正rtk起点的位置差值
    dx31 = xs - x_one
    dy31 = ys - y_one

    text11_var.set(dx31)
    text12_var.set(dy31)

    xx_1 = [str(round(xs - dx31, 5)), str(round(ys - dy31, 5))]
    xx_1 = ",".join(xx_1)
    xx_2 = [str(round(x - dx31, 5)), str(round(y - dy31, 5))]
    xx_2 = ",".join(xx_2)
    text13_var.set(xx_1)
    text14_var.set(xx_2)

    return


#
def filter_txt(patchw):
    new_listw = []
    charw = ""
    with open(patchw) as f:
        contentsw = f.readlines()
        for linew in contentsw:
            for xw in linew:
                if xw != " ":
                    charw += xw
            new_listw.append(charw)
            charw = ""
    filter_listw = [w for w in [r.replace("\n", "") for r in new_listw] if w != '']
    return filter_listw


#
def get_Land_supply_coordinates():
    p = []
    Filer_paths = filedialog.askopenfilenames(filetypes=[("文本", "txt")], title="选择需要转换的文本")  # 获取需要转换的规划文件绝对路径
    if not Filer_paths:
        tk.messagebox.showinfo('警告', "请选择需要转换的文本!")
        return
    Save_path = filedialog.askdirectory()  # 返回需要保存的绝对路径
    if not Save_path:
        tk.messagebox.showinfo('警告', "请选择需要保存的路径!")
        return
    for path_1 in Filer_paths:

        Filer_name = path_1.split("/")[-1].replace(".txt", ".(转换结果).txt")  # 获取需要转换文件文件名

        new_filer = open(Save_path + "/" + Filer_name, "w")  # 打开文本,没有创建

        s = filter_txt(path_1)

        for n in s:
            line_k = n.split(",")
            num_2 = float(line_k[0])
            x = float(line_k[2])
            y = float(line_k[3])
            z = str(line_k[4])

            # result = calc_angle()
            angle_Difference = float(text10_var.get())
            dx31 = float(text11_var.get())
            dy31 = float(text12_var.get())
            # 旋转列表
            xm = x * math.cos(angle_Difference) + y * math.sin(angle_Difference)
            ym = y * math.cos(angle_Difference) - x * math.sin(angle_Difference)
            num = str(num_2)
            xm = str(xm - dx31)
            ym = str(ym - dy31)
            q = [num, "", xm, ym, z]
            q = ",".join(q)
            p.append(q)
        for p_4 in p:
            new_filer.writelines(p_4)
            new_filer.write("\n")
        p = []
        new_filer.close()
    return


lableAB = tk.Label(window, text="已知点", width=15, bg="Orange").grid(row=1, column=0)
lableCD = tk.Label(window, text="改正点", width=15, bg="Orange").grid(row=4, column=0)
lable1 = tk.Label(window, text="A(x1,y1)", width=15).grid(row=2, column=0)
text1_var = tk.StringVar()  # 获取text_1输入的值
text1_var.set(r'0.000,0.000')
text1 = tk.Entry(window, textvariable=text1_var, bd=5).grid(row=2, column=1)

#
lable2 = tk.Label(window, text="B(x2,y2)", width=15).grid(row=3, column=0)
text2_var = tk.StringVar()  # 获取text_1输入的值
text2_var.set(r'1000.000,0.000')
text2 = tk.Entry(window, textvariable=text2_var, bd=5).grid(row=3, column=1)
#
lable3 = tk.Label(window, text="C(x3,y4)", width=15).grid(row=5, column=0)
text3_var = tk.StringVar()  # 获取text_1输入的值
text3_var.set(r'8960.000,9960.000')
text3 = tk.Entry(window, textvariable=text3_var, bd=5).grid(row=5, column=1)
#
lable4 = tk.Label(window, text="D(x4,y4)", width=15).grid(row=6, column=0)
text4_var = tk.StringVar()  # 获取text_1输入的值
text4_var.set(r"9960.000,9960.000")
text4 = tk.Entry(window, textvariable=text4_var, bd=5).grid(row=6, column=1)

lable5 = tk.Label(window, text="AB距离", width=15).grid(row=1, column=4)
text5_var = tk.StringVar()  # 获取text_1输入的值
text5 = tk.Entry(window, textvariable=text5_var, bd=5).grid(row=1, column=5)

lable6 = tk.Label(window, text="AB方位角", width=15).grid(row=2, column=4)
text6_var = tk.StringVar()  # 获取text_1输入的值
text6 = tk.Entry(window, textvariable=text6_var, bd=5).grid(row=2, column=5)

lable7 = tk.Label(window, text="CD距离", width=15).grid(row=3, column=4)
text7_var = tk.StringVar()  # 获取text_1输入的值
text7 = tk.Entry(window, textvariable=text7_var, bd=5).grid(row=3, column=5)

lable8 = tk.Label(window, text="CD方位角", width=15).grid(row=4, column=4)
text8_var = tk.StringVar()  # 获取text_1输入的值
text8 = tk.Entry(window, textvariable=text8_var, bd=5).grid(row=4, column=5)

lable9 = tk.Label(window, text="距离差/2", width=15).grid(row=5, column=4)
text9_var = tk.StringVar()  # 获取text_1输入的值
text9 = tk.Entry(window, textvariable=text9_var, bd=5).grid(row=5, column=5)

lable10 = tk.Label(window, text="方位角差", width=15).grid(row=6, column=4)
text10_var = tk.StringVar()  # 获取text_1输入的值
text10 = tk.Entry(window, textvariable=text10_var, bd=5).grid(row=6, column=5)

lable11 = tk.Label(window, text="x", width=15).grid(row=7, column=4)
text11_var = tk.StringVar()  # 获取text_1输入的值
text11 = tk.Entry(window, textvariable=text11_var, bd=5).grid(row=7, column=5)

lable12 = tk.Label(window, text="y", width=15).grid(row=8, column=4)
text12_var = tk.StringVar()  # 获取text_1输入的值
text12 = tk.Entry(window, textvariable=text12_var, bd=5).grid(row=8, column=5)

lable13 = tk.Label(window, text="转换后:C", width=15).grid(row=1, column=6)
text13_var = tk.StringVar()  # 获取text_1输入的值
text13 = tk.Entry(window, textvariable=text13_var, bd=5).grid(row=1, column=7)

lable14 = tk.Label(window, text="转换后:D", width=15).grid(row=2, column=6)
text14_var = tk.StringVar()  # 获取text_1输入的值
text14 = tk.Entry(window, textvariable=text14_var, bd=5).grid(row=2, column=7)

lable15 = tk.Label(window, text="提示", width=15).grid(row=3, column=6)
text15_var = tk.StringVar()  # 获取text_1输入的值
text15 = tk.Entry(window, textvariable=text15_var, bd=5, fg="Red").grid(row=3, column=7)

tk.Button(window, text="计算参数", width=15, height=1, command=calc_angle, bg="Silver").grid(row=15, column=4)

tk.Button(window, text="转换文件", width=15, height=1, command=get_Land_supply_coordinates, bg="Silver").grid(row=15,
                                                                                                          column=5)

text20 = tk.Text(window, width=37, height=15)
text20.grid(row=4, column=6, rowspan=12, columnspan=4)
text20.tag_config("tag_1", backgroun="yellow", foreground="red")

text20.insert("insert",
              "1.输入框中x,y为数学坐标系\n\n2.A,B为已知点:C,D为需改坐标。\n\n"
              "3.必须先计算参数,再改正坐标文件。\n\n"
              "文件格式为(num,,x,y,z)\n\n"
              "4.z值不做计算\n\n"
              "5.转换结果与cass测站改正比较有0公分误差,不完全重合\n")

text20.insert("end", "5.更多功能请联系:\[email protected]", "tag_1")

cjip = tk.PhotoImage(file="D:\\a17.gif")
tk.Label(window, image=cjip, height=95, width=145).grid(row=7, column=0, rowspan=12, columnspan=5)

window.mainloop()

你可能感兴趣的:(python)