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

Implement plotting GPS points.

parent 456d5d68
No related branches found
No related tags found
No related merge requests found
...@@ -2,20 +2,63 @@ import sys ...@@ -2,20 +2,63 @@ import sys
from pathlib import Path from pathlib import Path
from typing import List from typing import List
from model.gps_point import GPSPoint from sohstationviewer.model.gps_point import GPSPoint
from model.mseed.mseed import MSeed from sohstationviewer.model.mseed.mseed import MSeed
from view.plotting.plotting_widget.plotting_widget import PlottingWidget
from PySide2 import QtWidgets, QtCore from PySide2 import QtWidgets, QtCore
from matplotlib.backends.backend_qt5agg import (
FigureCanvasQTAgg as Canvas)
from matplotlib.figure import Figure
from matplotlib.axes import Axes
class GPSWidget(PlottingWidget): class GPSWidget(QtWidgets.QWidget):
def __init__(self, parent, tracking_box): def __init__(self, parent, tracking_box, gps_points):
super().__init__(parent, tracking_box) super().__init__(parent)
self.tracking_box = tracking_box
self.gps_points = gps_points
self.fig = Figure(figsize=(6, 6), dpi=100)
self.ax: Axes = self.fig.add_axes((0, 0, 1, 1))
self.ax.set_facecolor("dimgray")
self.canvas = Canvas(self.fig)
@QtCore.Slot() @QtCore.Slot()
def plot_gps(self): def plot_gps(self):
pass 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]
max_latitude = max(all_latitudes)
min_latitude = min(all_latitudes)
max_longitude = max(all_longitudes)
min_longitude = min(all_longitudes)
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
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)
class GPSDialog(QtWidgets.QWidget): class GPSDialog(QtWidgets.QWidget):
...@@ -26,17 +69,28 @@ class GPSDialog(QtWidgets.QWidget): ...@@ -26,17 +69,28 @@ class GPSDialog(QtWidgets.QWidget):
self.data_path = None self.data_path = None
self.info_text_browser = QtWidgets.QTextBrowser(self) self.info_text_browser = QtWidgets.QTextBrowser(self)
self.setGeometry(300, 300, 400, 500) # The height of the dialog is chosen so that the GPS plot is flush with
# the edges of the dialog.
dialog_height = 518
self.setGeometry(300, 300, 400, dialog_height)
self.setWindowTitle("GPS Plot") self.setWindowTitle("GPS Plot")
main_layout = QtWidgets.QVBoxLayout() main_layout = QtWidgets.QVBoxLayout()
self.setLayout(main_layout) self.setLayout(main_layout)
main_layout.setContentsMargins(5, 5, 5, 5) main_layout.setContentsMargins(0, 0, 0, 0)
main_layout.setSpacing(0) main_layout.setSpacing(0)
self.plotting_widget = GPSWidget( self.plotting_widget = GPSWidget(
self, self.info_text_browser) self, self.info_text_browser, gps_points
main_layout.addWidget(self.plotting_widget, 2) )
main_layout.addWidget(self.plotting_widget.canvas)
# Add a 1-pixel high widget to the main layout so that there is a
# visible border between the GPS plot and the button. QTextBrowser
# is used because it is known to have a visible border.
invisible_widget = QtWidgets.QTextBrowser()
invisible_widget.setFixedHeight(1)
main_layout.addWidget(invisible_widget)
button_layout = QtWidgets.QHBoxLayout() button_layout = QtWidgets.QHBoxLayout()
button_layout.setContentsMargins(100, 0, 100, 0) button_layout.setContentsMargins(100, 0, 100, 0)
...@@ -72,10 +126,7 @@ class GPSDialog(QtWidgets.QWidget): ...@@ -72,10 +126,7 @@ class GPSDialog(QtWidgets.QWidget):
with open(outside_folder / f'{folder_name}.gps.dat', 'w+') as outfile: with open(outside_folder / f'{folder_name}.gps.dat', 'w+') as outfile:
outfile.write(f'# GPS data points for {folder_name}\n') outfile.write(f'# GPS data points for {folder_name}\n')
for point in self.gps_points: for point in self.gps_points:
is_bad_point = (point.height == 0 and point.longitude == 0 and if point.is_bad_point():
point.longitude == 0 and
point.num_satellite_used == 0)
if is_bad_point:
continue continue
line = ( line = (
f'{point.last_timemark}\t{point.fix_type}\t' f'{point.last_timemark}\t{point.fix_type}\t'
...@@ -89,9 +140,12 @@ if __name__ == '__main__': ...@@ -89,9 +140,12 @@ if __name__ == '__main__':
import os import os
os.chdir('/Users/kle/PycharmProjects/sohstationviewer') os.chdir('/Users/kle/PycharmProjects/sohstationviewer')
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
data = MSeed(QtWidgets.QTextBrowser(), '/Users/kle/Documents/SOHView data/Q330/Q330_5281.sdr') # 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(None, data.gps_points)
wnd.data_path = Path('/Users/kle/Documents/SOHView data/Q330/Q330_5281.sdr') wnd.data_path = Path(data_path)
wnd.export_button.click() wnd.show()
# wnd.show() wnd.read_button.click()
# sys.exit(app.exec_())
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