Skip to content
Snippets Groups Projects

Implement a dialog to plot and export GPS data

Merged Kien Le requested to merge feature-#19-gps_plotter_q330 into master
1 file
+ 47
2
Compare changes
  • Side-by-side
  • Inline
import math
import sys
from pathlib import Path
from typing import List
@@ -46,8 +47,22 @@ class GPSWidget(QtWidgets.QWidget):
max_longitude = max(all_longitudes)
min_longitude = min(all_longitudes)
latitude_range = max_latitude - min_latitude
longitude_range = max_longitude - min_longitude
longitude_range = convert_longitude_degree_to_meter(longitude_range,
latitude_range)
latitude_range = convert_latitude_degree_to_meter(latitude_range)
self.ax.plot(all_longitudes, all_latitudes, 'ws', markersize=4,
markeredgecolor='black', picker=True, pickradius=4)
range_text = (
f'Lat range: {latitude_range:.2f}m '
f'Long range: {longitude_range:.2f}m'
)
self.ax.text(
0.01, 0.96, range_text, color='white', size=10,
transform=self.ax.transAxes
)
latitude_range = max_latitude - min_latitude
longitude_range = max_longitude - min_longitude
@@ -181,14 +196,41 @@ class GPSDialog(QtWidgets.QWidget):
outfile.write(line)
# We use the WGS-84's version of the Earth ellipsoid as a reference point for
# converting latitude and longitude differences from degree to meter.
# The constants below are obtained from here
# https://en.wikipedia.org/wiki/Earth_ellipsoid#Historical_Earth_ellipsoids.
# In order to use other models of the Earth ellipsoid, simply change these
# constants.
POLAR_CIRCUMFERENCE = 40007863
EQUATORIAL_CIRCUMFERENCE = 40075017
def convert_latitude_degree_to_meter(lat: float) -> float:
# A whole circumference is 360 degrees, so we can get the length of one
# degree by dividing the circumference by 360.
lat_degree_length_in_meter = POLAR_CIRCUMFERENCE / 360
return lat * lat_degree_length_in_meter
def convert_longitude_degree_to_meter(long: float, lat: float) -> float:
# A whole circumference is 360 degrees, so we can get the length of one
# degree by dividing the circumference by 360.
long_degree_length_in_meter = EQUATORIAL_CIRCUMFERENCE / 360
# The length of a longitude degree varies with the latitude, being greatest
# around the equator and approaching 0 near to the poles.
adjustment_for_latitude = math.cos(lat)
return long * long_degree_length_in_meter * adjustment_for_latitude
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_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()
@@ -197,3 +239,6 @@ if __name__ == '__main__':
wnd.show()
sys.exit(app.exec_())
Loading