This repository has been archived on 2026-10-26. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
KNZ_GeoTrackLab/plot/Mainui.py
T
2024-10-05 18:24:55 +08:00

249 lines
9.8 KiB
Python

import math
import time
import Trocor
from tkinter import colorchooser
from tkinter import filedialog
from tkinter import ttk
import tkinter as tk
import matplotlib as mpl
import numpy as np
mpl.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg, NavigationToolbar2Tk)
color = "#0080FF"
def Colorchoose():
global color
colorvalue = tk.colorchooser.askcolor()
color = str(colorvalue[1])
def PO_openfile():
ENU_O = np.empty((3, 0))
f_path = filedialog.askopenfilename()
with open(f_path, 'r') as f:
while 1:
line = f.readline()
if line.find("X-rec") >= 0:
while 1:
line = f.readline()
if line != "":
E = float(line[45:55])
N = float(line[56:66])
U = float(line[67:77])
ENU_O = np.hstack((ENU_O, [ [E], [N], [U] ] ))
elif line == "":
ex.clear()
nx.clear()
ux.clear()
ex.plot(ENU_O[0, :], color=color)
ex.set_ylabel('E-W(m)')
ex.set_xlabel('Epochs')
ex.grid(True, linestyle='--', alpha=0.7)
nx.plot(ENU_O[1, :], color=color)
nx.set_ylabel('N-S(m)')
nx.set_xlabel('Epochs')
nx.grid(True, linestyle='--', alpha=0.7)
ux.plot(ENU_O[2, :], color=color)
ux.set_ylabel('U-D(m)')
ux.set_xlabel('Epochs')
ux.grid(True, linestyle='--', alpha=0.7)
canvas.draw()
break
elif line == "":
break
def SPP_calculat():
# Const define
C_V = 299792458
f1 = 1575.42
f2 = 1227.60
ENU_O = np.empty((3, 0))
f_path = filedialog.askopenfilename()
with open(f_path, 'r') as f:
while 1:
line = f.readline()
if line.find("APPROX POSITION XYZ") >= 0:
apX = float(line[23:35])
apY = float(line[36:48])
apZ = float(line[49:61])
elif line.find("APPROX POSITION BLH") >= 0:
apB = float(line[23:35])
apL = float(line[36:48])
apH = float(line[49:61])
elif line.find("OBS FILE PATH") >= 0:
Obs = line[23:300]
elif line.find("NAV FILE PATH") >= 0:
Nav = line[23:300]
elif line.find("IONOS OPT") >= 0:
ION = line[23:33]
elif line.find("TROPO OPT") >= 0:
TRO = line[23:33]
break
#Get the obs file name---------------------------#
obspath = len(Obs)
while obspath > 0:
flag = Obs[obspath - 1:obspath]
if flag == "\\":
obsfile = Obs[obspath:-4]
break
obspath -= 1
# Get the file's father folder-------------------#
pathlon = len(f_path)
while pathlon - 3 > 0:
flag = f_path[pathlon - 3 - 1:pathlon - 3]
if flag == "/":
o_path = f_path[:pathlon - 3] + obsfile +"po"
break
pathlon -= 1
# -----------------------------------------------#
with open(o_path, 'a+') as of:
print("@ GENGRATE PROGRAM : PySPP v0.1.1\n"
"@ GENERATE TYPE : Receiver Station Position\n"
"@ GENGRATE TIME : %s\n"
"@ IONOS OPT : %s"
"@ TROPO OPT : %s"
"@\n\n" % (time.asctime(time.localtime()),ION,TRO), file=of)
print(" X-rec(m) Y-rec(m) Z-rec(m) Sn(n) dE(m) dN(m) dU(m) ", file=of)
of.close()
#Coordinate transformation matrix---------------#
S = np.array([
[ -math.sin(apL), math.cos(apL), 0],
[ -math.sin(apB) * math.cos(apL), -math.sin(apB) * math.sin(apL), math.cos(apB)],
[ math.cos(apB) * math.cos(apL), math.cos(apB) * math.sin(apL), math.sin(apB)]
])
#-----------------------------------------------#
while 1:
line = f.readline()
flag = line[0: 1]
if flag == ">":
satnum = 0
B = np.empty((0, 4))
P = np.empty(( ))
L = np.empty((0, 1))
Ptem = []
epoch = int(line[ 1: 5])
while 1:
line = f.readline()
flag = line[0:1]
if flag == "G":
satnum += 1
satX = float(line[6:21])
satY = float(line[22:37])
satZ = float(line[38:53])
C1 = float(line[55:69])
C2 = float(line[71:85])
ma = float(line[86:101])
TGD = float(line[102:117])
Dt = float(line[118:134])
R = math.sqrt(pow((satX - apX), 2) + pow((satY - apY), 2) + pow((satZ - apZ), 2))
l = -((satX - apX) / R)
m = -((satY - apY) / R)
n = -((satZ - apZ) / R)
B = np.vstack((B, [l, m, n, 1]))
Ptem.append(pow(math.sin(math.radians(ma)), 2))
if C2 != 0:
Pl = (f1 * f1 * C1) / (f1 * f1 - f2 * f2) - (f2 * f2 * C2) / (f1 * f1 - f2 * f2)
elif C2 == 0:
Pl = C1
L = np.vstack((L, [Pl - R + C_V * Dt - Trocor.def_tro_cor(apH, ma)]))
elif flag != "G":
if satnum >= 4:
P = np.diag(Ptem)
Q = np.linalg.inv(np.transpose(B) @ P @ B)
D_X = Q @ np.transpose(B) @ P @ L #Coordinate correction
X = D_X[0, 0] + apX
Y = D_X[1, 0] + apY
Z = D_X[2, 0] + apZ
DeltaXYZ = np.array([[D_X[0, 0]],[D_X[1, 0]],[D_X[2, 0]]])
ENU = S @ DeltaXYZ
ENU_O = np.hstack((ENU_O,[ [ENU[0, 0]],[ENU[1, 0]],[ENU[2, 0]] ]))
with open(o_path, 'a+') as of:
print("%12.4f %12.4f %12.4f %3d %10.5f %10.5f %10.5f" %(X, Y, Z, satnum, ENU[0, 0], ENU[1, 0], ENU[2, 0]),file = of)
of.close()
break
else:
break
elif line.find("END") >= 0:
ex.clear()
nx.clear()
ux.clear()
ex.plot(ENU_O[0, :], color=color)
ex.set_ylabel('E-W(m)')
ex.grid(True, linestyle='--', alpha=0.7)
nx.plot(ENU_O[1, :], color=color)
nx.set_ylabel('N-S(m)')
nx.grid(True, linestyle='--', alpha=0.7)
ux.plot(ENU_O[2, :], color=color)
ux.set_ylabel('U-D(m)')
ux.set_xlabel('Epochs')
ux.grid(True, linestyle='--', alpha=0.7)
canvas.draw()
f.close()
break
root = tk.Tk()
root.title("Plot")
root.iconbitmap('C:\\Users\\34716\\source\\repos\\SPP_Calculate\\Plot.ico')
root_pos = "%dx%d+%d+%d" % (900, 450, (root.winfo_screenwidth() - 900)/2, (root.winfo_screenheight() - 450/2))
root.geometry(root_pos)
root.minsize(300,500)
frmFigure = tk.Frame(root)
frmFigure.pack(side=tk.BOTTOM, fill=tk.BOTH, expand=tk.YES)
inter = tk.Label(root,text='Interval:')
inter.pack(side=tk.LEFT, anchor='e')
cboxi = ttk.Combobox(root, width=8, height=10)
cboxi['value'] = ('0','0.05','0.1','0.2','0.25','0.5','1','5','10','15','30','60')
cboxi.current(0)
cboxi.pack(side=tk.LEFT, anchor='e')
plottype = tk.Label(root,text='Plot types:')
plottype.pack(side=tk.LEFT, anchor='e')
cboxe = ttk.Combobox(root, width=8)
cboxe['state'] = 'readonly'
cboxe['value'] = ('ENU','Satn')
cboxe.current(0)
cboxe.pack(side=tk.LEFT, anchor='e')
topmenu = tk.Menu(root)
filemenu = tk.Menu(topmenu, tearoff=False)
openmenu = tk.Menu(filemenu, tearoff=False)
openmenu.add_command(label="Open.sp", command=SPP_calculat, accelerator='Ctrl+S')
openmenu.add_command(label="Open.po", command=PO_openfile, accelerator='Ctrl+P')
filemenu.add_cascade(label="Open...", menu=openmenu)
filemenu.add_command(label="View")
filemenu.add_command(label="Exit", command=root.quit, accelerator='Ctrl+E')
topmenu.add_cascade(label="File", menu=filemenu)
optmenu = tk.Menu(topmenu, tearoff=False)
colormenu = tk.Menu(optmenu, tearoff=False)
colormenu.add_command(label="ENU Colors", command=Colorchoose, accelerator='Ctrl+M')
colormenu.add_command(label="Satnum Colors", command=Colorchoose, accelerator='Ctrl+N')
optmenu.add_cascade(label="Color options...", menu=colormenu)
topmenu.add_cascade(label="Options", menu=optmenu)
helpmenu = tk.Menu(topmenu, tearoff=False)
helpmenu.add_command(label="About")
topmenu.add_cascade(label="Help", menu=helpmenu)
root.config(menu=topmenu)
plt.rc('font',family='sans-serif')
fig, (ex, nx, ux) = plt.subplots(3, 1, figsize=(10, 0), sharex=True)
canvas = FigureCanvasTkAgg(fig,frmFigure)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.BOTTOM,fill=tk.BOTH,expand=tk.YES)
toolbar = NavigationToolbar2Tk(canvas,frmFigure,pack_toolbar=False)
toolbar.update()
toolbar.pack(side=tk.LEFT)
root.protocol("WM_DELETE_WINDOW", root.quit)
root.mainloop()