20190728 Ublox-Z9P, RINEX, NRCAN, EU, EUREF, and ETRS89¶
I realize this sounds is one of those incredibly annoying recipes in a cook-book, where the list of ingredients are so esoteric that one wonders why it is in the book in the first place.
However, the centimeter-level abilities of the Z9P will probably make this a FAQ pretty soon.
Collect a RINEX from your receiver. I used gpsd’s gpsrinex tool.
Create an account and log into NRCAN’s free PPP service
Set Processing to Static and ITRF, upload your file and wait for the result to arrive in your mailbox.
When it does, download the “full” data-set and extract it somewhere.
Find the following lines in the something.sum file:
POS CRD SYST EPOCH A_PRIORI ESTIMATED DIFF SIGMA(95%) CORRELATIONS POS X IGS14 19:193:78465 3558659.1400 3558658.2813 -0.8587 0.0152 1.0000 POS Y IGS14 19:193:78465 713470.0500 713470.3035 0.2535 0.0097 0.3477 1.0000 POS Z IGS14 19:193:78465 5227272.8800 5227271.1274 -1.7526 0.0159 0.8679 0.4555 1.0000
Next go to EUREF’s coordinate transformation tool
Select Input::Frame = IRTF2014
Select Output::Frame = ETRS89
Select Options::Change epoch format: Year/Month/Date
Set Input::Epoch to the date the observations were made
Set Output::Epoch to the same date
Clear the input field and add the coordinates from the ESTIMATED column in your NRCAN output:
myreceiver 3558658.2813 713470.3035 5227271.1274
If you are a numerical masochist, check the show intermediate steps button.
Now the output field shows you the XYZ coordinates in ETRS89:
myreceiver 3558658.86030 713469.88960 5227270.72530
To turn that into locals coordinate, you need to a height model of which each country has at least one.
If you live in Denmark you can use Valdemar:
Select Fra system = crt_erts89 and enter the XYZ numbers
Select Til system = utm32Hetrs89_h_dvr90 and press Beregn
The result is UTM32 coordinates with the Danish DVR90 sea-level model:
N E Normal Højde 6142511.109m 647954.503m 32.274m
You can use the uncertainty from NRCANs PDF file with those numbers.
If you look in the NRCAN something.sum file you can find a line like this:
PRJ TYPE ZONE EASTING NORTHING SCALE_POINT SCALE_COMBINED HEMISPHERE PRJ UTM 32 647955.001 6142511.755 0.999869 0.999857 N
And the difference is not trivial:
$ python3 >>> import math >>> math.hypot( ... 6142511.109-6142511.755, ... 647954.503-647955.001 ... ) 0.8156715022946069 # Distance in meter >>> 0.8156715022946069/30 0.0271890500764869 # 2.7cm/year on average since 1989 >>> 6142511.109-6142511.755 -0.6459999997168779 # Offset North-South >>> 647954.503-647955.001 -0.4980000000214204 # Offset East-West >>>
With a normal GPS receiver this would not matter, but with dual-band and RTK, it is about 10 times over the measurement uncertainty.
So what is ETRS89 and why can’t my GNSS receiver just output it ?¶
The coordinate system GPS and other GNSS systems work in, is defined by the IGS and it is a topic, several topics, all of its own.
The Tl;DR. part is that the slabs of bedrock continents sit on moves in this coordinate system, continental drift, you’ve heard about it, on the order of centimeters or decimeters per year, depending on which continent.
EU sits on a tectonic plate which moves about 2-3 cm north-east every year.
This means that if we measured coordinates, for instance corners of plots of land, and stuck them in a database, like the national cadastra, they would have to be revised every year, to keep up with any new measurements made.
EU decided that is not workable, and defined the ETRS89 coordinate system to be stuck to the tectonic plate.
This means that you do a conversion from IGS/GNSS to ETRS89 coordinates when you measure, so the coordinates you put in the databases will be good for decades and probably centuries.
The trouble is that the conversion from WGS84/GNSS to ETRS89 is not trivial, but more importantly, it is not static. The exact conversion depends not only on where but also when.
Swedens Lantmäteriet has a report about ETRS89 conversions in the Baltic Sea Area with some good plots which show the differences and a easy to follow explanation of the math.
The good news is that if you lock your base-station down with the ETRS89 coordinates found using the procedure above, your rover will pick that up and output ETRS89 coordinates too.
Since your base-station is not moving, once you have set the ETRS89 coordinates, it is good to go for at least a decade, unlike if you used WGS84 coordinates, in which case you would need to update it every year to keep precision in low centimeters.
Now you know precisely where I live.
If you find it too stressful to watch paint dry or grass grow, with a Ublox Z9P you can watch continental drift instead.