Skip to content
Snippets Groups Projects
Commit e0bee930 authored by Kien Le's avatar Kien Le
Browse files

Refactor gps plot code

parent f6f51377
No related branches found
No related tags found
No related merge requests found
This commit is part of merge request !53. Comments created here will be created in the context of that merge request.
......@@ -7,68 +7,77 @@ from sohstationviewer.model.mseed.mseed import MSeed
from PySide2 import QtWidgets, QtCore
from matplotlib.backends.backend_qt5agg import (
FigureCanvasQTAgg as Canvas)
FigureCanvasQTAgg as Canvas
)
from matplotlib.figure import Figure
from matplotlib.axes import Axes
class GPSWidget(QtWidgets.QWidget):
def __init__(self, parent, tracking_box, gps_points):
def __init__(self, parent, tracking_box):
super().__init__(parent)
self.tracking_box = tracking_box
self.gps_points = gps_points
self.gps_points = None
self.fig = Figure(figsize=(6, 6), dpi=100)
self.canvas = Canvas(self.fig)
self.ax: Axes = self.fig.add_axes((0, 0, 1, 1))
self.ax.set_facecolor("dimgray")
self.canvas = Canvas(self.fig)
self.ax.set_box_aspect(1)
self.ax.set_yticks([])
self.ax.set_xticks([])
self.ax.spines['right'].set_visible(False)
self.ax.spines['left'].set_visible(False)
self.ax.spines['top'].set_visible(False)
self.ax.spines['bottom'].set_visible(False)
@QtCore.Slot()
def plot_gps(self):
good_gps_points = [point
for point in self.gps_points
if not point.is_bad_point()]
all_latitudes = [point.latitude for point in good_gps_points]
all_longitudes = [point.longitude for point in good_gps_points]
all_latitudes = [point.latitude for point in self.gps_points]
all_longitudes = [point.longitude for point in self.gps_points]
max_latitude = max(all_latitudes)
min_latitude = min(all_latitudes)
max_longitude = max(all_longitudes)
min_longitude = min(all_longitudes)
self.ax.plot(all_longitudes, all_latitudes, 'ws', markersize=3,
markeredgecolor='black')
latitude_range = max_latitude - min_latitude
longitude_range = max_longitude - min_longitude
if latitude_range > longitude_range:
longitude_average = (min_longitude + max_longitude) / 2
min_longitude = longitude_average - latitude_range / 2
max_longitude = longitude_average + latitude_range / 2
self.ax.set_xlim(min_longitude, max_longitude)
else:
latitude_average = (min_latitude + max_latitude) / 2
min_latitude = latitude_average - longitude_range / 2
max_latitude = latitude_average + longitude_range / 2
self.ax.set_yticks([])
self.ax.set_xticks([])
self.ax.spines['right'].set_visible(False)
self.ax.spines['left'].set_visible(False)
self.ax.spines['top'].set_visible(False)
self.ax.spines['bottom'].set_visible(False)
self.ax.plot(all_longitudes, all_latitudes, 'ws', markersize=3, markeredgecolor='black')
if latitude_range > longitude_range:
self.ax.set_xlim(min_longitude, max_longitude)
else:
self.ax.set_ylim(min_latitude, max_latitude)
self.ax.set_box_aspect(1)
self.canvas.draw()
self.repaint()
class GPSDialog(QtWidgets.QWidget):
def __init__(self, parent, gps_points: List[GPSPoint]):
def __init__(self, parent=None):
super().__init__()
self.parent = parent
self.gps_points = gps_points
self.data_path = None
self.info_text_browser = QtWidgets.QTextBrowser(self)
self.plotting_widget = GPSWidget(self, self.info_text_browser)
self.read_button = QtWidgets.QPushButton('Read/Plot', self)
self.export_button = QtWidgets.QPushButton('Export', self)
self.close_button = QtWidgets.QPushButton('Close', self)
self.setup_ui()
def setup_ui(self):
# The height of the dialog is chosen so that the GPS plot is flush with
# the edges of the dialog.
dialog_height = 518
......@@ -80,9 +89,6 @@ class GPSDialog(QtWidgets.QWidget):
main_layout.setContentsMargins(0, 0, 0, 0)
main_layout.setSpacing(0)
self.plotting_widget = GPSWidget(
self, self.info_text_browser, gps_points
)
main_layout.addWidget(self.plotting_widget.canvas)
# Add a 1-pixel high widget to the main layout so that there is a
......@@ -97,15 +103,12 @@ class GPSDialog(QtWidgets.QWidget):
button_layout.setStretch(1, 3)
button_layout.setSpacing(10)
self.read_button = QtWidgets.QPushButton('Read/Plot', self)
self.read_button.clicked.connect(self.plotting_widget.plot_gps)
button_layout.addWidget(self.read_button)
self.export_button = QtWidgets.QPushButton('Export', self)
self.export_button.clicked.connect(self.export_gps_points)
button_layout.addWidget(self.export_button)
self.close_button = QtWidgets.QPushButton('Close', self)
self.close_button.setStyleSheet('QPushButton {color: red;}')
self.close_button.clicked.connect(self.close)
button_layout.addWidget(self.close_button)
......@@ -113,13 +116,25 @@ class GPSDialog(QtWidgets.QWidget):
bottom_layout = QtWidgets.QVBoxLayout()
bottom_layout.addLayout(button_layout)
self.info_text_browser.setFixedHeight(42)
self.info_text_browser.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.info_text_browser.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.info_text_browser.setHorizontalScrollBarPolicy(
QtCore.Qt.ScrollBarAlwaysOff)
self.info_text_browser.setVerticalScrollBarPolicy(
QtCore.Qt.ScrollBarAlwaysOff)
self.info_text_browser.verticalScrollBar().setDisabled(True)
self.info_text_browser.horizontalScrollBar().setDisabled(True)
bottom_layout.addWidget(self.info_text_browser)
main_layout.addLayout(bottom_layout)
@property
def gps_points(self):
return self.plotting_widget.gps_points
@gps_points.setter
def gps_points(self, points):
self.plotting_widget.gps_points = [point
for point in points
if not point.is_bad_point()]
def export_gps_points(self):
folder_name = self.data_path.name
outside_folder = self.data_path.parent
......@@ -138,14 +153,17 @@ class GPSDialog(QtWidgets.QWidget):
if __name__ == '__main__':
import os
os.chdir('/Users/kle/PycharmProjects/sohstationviewer')
app = QtWidgets.QApplication(sys.argv)
# data_path = '/Users/kle/PycharmProjects/sohstationviewer/tests/test_data/Q330-sample'
data_path = '/Users/kle/Documents/SOHView data/Q330/Q330_5281.sdr'
data = MSeed(QtWidgets.QTextBrowser(), data_path)
wnd = GPSDialog(None, data.gps_points)
wnd = GPSDialog()
wnd.gps_points = data.gps_points
wnd.data_path = Path(data_path)
wnd.show()
wnd.read_button.click()
sys.exit(app.exec_())
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment