.. _time_20170728: 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. HOWTO ----- 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 Make sure the "SYST" column contains "IGS14", if it does not, you probably had JavaScript disabled when you uploaded your RINEX file. 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. Click `Transform` 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 `GPS-transformation` 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. Conclusion ---------- 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. *phk*