geodezyx’s Cookbook
Convert time
The geodezyx toolbox can handle a lot of time scales and time representations.
What we call scale is a physical definition: UTC, GPS Time, TAI…
What we call representation is the way the physical value is represented : Julian date, year/day of year, GPS week/day of week, ISO string…
The basic idea behind it is the conversion to and from the datetime
objects of the Python’s datetime
module.
The generic structure of the fuctions is conv.<input time scale/representation>2<output time scale/representation>
.
Time conversion exemples
First of all:
import geodezyx.conv as conv # Import the conversion module
import datetime as dt
Get today as GPS Time (week/day of week)
now = dt.datetime.now() ### datetime.datetime(2021, 6, 18, 15, 53, 56, 245345)
gpstime = conv.dt2gpstime(now)
gpstime
Out: (2162, 5)
Convert year/day of year to Modified Julian Day
year,doy = (2021, 169)
epoch = conv.doy(year, doy)
mjd = conv.dt2MJD(epoch)
mjd
Out: 59383.0
Convert a SP3 name to decimal year
p = "/home/user/igs20726.sp3"
epoch = conv.sp3name2dt(p)
yeardec = conv.dt2year_decimal(epoch)
yeardec
Out: 2019.739611872146
It handles also RINEX names with conv.rinexname2dt(p_rinex)
(old and new naming)
(Documentation here: geodezyx.conv.conv_time.rinexname2dt()
)
Complete reference
All the module’s functionalites can be found here:
geodezyx.conv.conv_time
Convert coordinates
The geodezyx toolbox can easily handle coordinate conversion in Geocentric (X,Y,Z), Geographic (latitude, longitude, height) and topocentric (East, North, Up).
Warning: This is considered as the “low-level” coordinate conversions. It does not deal with the different Reference Frame and their realisations (ITRFxx, ETRFxx…). This is managed by “high-level” functions in the reffram
module.
These functions are optimized for arrays (multiple inputs) but can also handle scalars.
Coordinates conversion exemples
We consider as exemple the coordinates of the Helmertturm given in latitude, longitude, height from Wikipedia and the GNSS station POTS in Geocentric XYZ.
Helmertturm = np.array([52.380278, 13.065278,147.983])
POTS = np.array([3800689.6341,882077.3857,5028791.3179 ])
We can bring POTS in Geographic and the Helmertturm in Geocentric coordinates
POTS_geo = conv.XYZ2GEO(POTS[0],POTS[1],POTS[2])
POTS_geo = conv.XYZ2GEO(*POTS)
POTS_geo
Out: (52.37929737808202, 13.066091316954145, 144.41769897658378)
Helmertturm_xyz = conv.GEO2XYZ(Helmertturm[0],
Helmertturm[1],
Helmertturm[2])
Helmertturm_xyz = conv.GEO2XYZ(*Helmertturm)
Helmertturm_xyz
Out: (89.92804903383008, 14.005569048843014, -6356604.297220887)
We can also get the vector between POTS and the Helmertturm (i.e. the Helmertturm in the Topocentric frame centered on POTS)
conv.XYZ2ENU_2(Helmertturm[0], Helmertturm[1], Helmertturm[2],
POTS[0],POTS[1],POTS[2])
Out: (array([0.88515353]), array([20735.55848087]), array([-6364723.46820732]))
Complete reference
All the module’s functionalites can be found here:
geodezyx.conv.conv_coords
Helmert Transformations
Apply and estimate parameters for an ad-hoc Helmert Transformation
The functions geodezyx.reffram.geometry.helmert_trans_estim()
and geodezyx.reffram.geometry.helmert_trans_apply()
and offer an interface to estimate parameters and apply an Helmert transformation respectively.
Transform coordinates between two ITRF/ETRF
The functions geodezyx.reffram.geometry.itrf_helmert_get_parameters()
and geodezyx.reffram.geometry.itrf_helmert_trans()
offer an interface to get the transformation parameters between two ITREF/ETRF realization, and apply the corresponding Helmert transformation respectively.
Complete reference
All the module’s functionalites can be found here:
geodezyx.reffram.geometry
Euler pole determination
The toolbox proposes tools to manipulate Euler rotation poles:
to determine the tectonic plate’s Euler pole based on some GNSS absolute velocities (
geodezyx.geodyn.euler_pole_calc.euler_pole_calc()
).to analyze the quality of the Euler Pole estimation (
geodezyx.geodyn.euler_pole_calc.euler_pole_quality()
).to convert the estimated Euler pole in a vector form to a latitude/longitude/rate form (
geodezyx.geodyn.euler_pole_calc.euler_pole_vector_to_latlongrate()
), and also do the reverse conversion (geodezyx.geodyn.euler_pole_calc.euler_pole_vector_from_latlongrate()
).to substract the plate’s velocity to analyze the residual velocities of the stations (located at the plate’s boundary for instance) (
geodezyx.geodyn.euler_pole_calc.euler_vels_relative_to_ref()
).
Complete reference
All the module’s functionalites can be found here:
geodezyx.geodyn.euler_pole_calc
Read and import geodetic products
Main import functionalities
The toolbox mainly handles:
The GNSS products such as clock offsets (.clk files) and orbits (.sp3 files):
geodezyx.files_rw.read_gnss_prods
The Earth orientation parameters:
geodezyx.files_rw.read_gnss_prods
The Troposphere files:
geodezyx.files_rw.read_athmo
Complete reference
All the module’s functionalites can be found here:
geodezyx.files_rw
Read and import geodetic time series
The toolbox is designed to import and pre-process a wide range of geodetic GNSS Time Series.
Read the dedicated Jupyter notebook stored in <...>/geodezyx/000_exemples/timeseries_reader
Complete reference
All the module’s functionalites can be found here:
geodezyx.files_rw.read_coords_time_series
Read and import GNSS Sitelogs
You can easily import the content of the IGS’s GNSS Sitelogs (a.k.a Logsheets) in dedicated objects
Read the dedicated Jupyter notebook stored in <...>/geodezyx/000_exemples/logsheets_reader
Point and Click to detect offsets manually
The toolbox contains a tool to select manually the jumps in the Geodetic Time Series.
Based on matplotlib, you can “point and click” the discontinuities you detected visually with your mouse.
Plot first your data (in a theoretical DataFrame DF)
fig,(axn,axe,axu) = plt.subplots(3,1)
axn.plot(DF["t"],DF["n"])
axe.plot(DF["t"],DF["e"])
axu.plot(DF["t"],DF["u"])
Then, create the Point and Click object
PnC = gcls.point_n_click_plot()
multi , cid = PnC(fig=fig)
The selected jumps/offsets are stored in a list attribute of the Point and Click object
PnC.selectedX
Read the dedicated script stored in <...>/geodezyx/000_exemples/logsheets_reader
.
More details in the class documentation : geodezyx.time_series.ts_class.point_n_click_plot
Statistics and plots for orbit and clock comparisons
TBC