OpenStreetMap logo OpenStreetMap

It’s relatively common for various national and regional GNSS correction networks to be referenced in a CRS other than WGS84 used in OpenStreetMap. The reason for this practice is that countries and regions use their own coordinate systems, most suitable for the territory they cover.

For example, the Oregon Real-Time GNSS Network (USA) uses NAD83 (2011) epoch 2010.00, according to their website.

It means that any RTK measurement taken while receiving NTRIP correction data from such a network will be referenced to the same CRS. That applies directly to the NMEA data output of the receiver, despite it normally being implied to be in WGS84. The majority of receivers available to amateurs are incapable of being configured to be aware of that. (The only sub-$1k receiver core I’m aware of that can “understand” the NTRIP CRS defined manually is Septentrio Mosaic.)

So, unless you perform a transformation from said CRS to WGS84, your tracks are going to be completely unsuitable for submission into the OSM public tracks database.

However, there’s a pretty straightforward way to perform the required transformation. Unfortunately, it’s “a little” longer than ideal for the exact same reason that NMEA data is implied to be in WGS84, so feeding a NMEA log directly may result in the reader ignoring the input CRS override.

The key tool for this is, coincidentally, JOSM. Here’s the workflow that functions just fine in my experience:

  • Record the “raw” NMEA output log from your RTK-enabled receiver while performing the measurements.
  • Load this log file into JOSM without simplification.
  • Convert it into an editable layer using the context menu in the layer list.
  • Optionally, “clean” the log (remove low-accuracy segments, etc.).
  • Save the layer content into a GeoJSON file.
  • Use a transformation tool of your choice (e.g. ogr2ogr) to perform the transformation, set GeoJSON as an output format. (I’m not going to dive into exploring the choice of tools and/or transformation parameters here.)
  • Load the transformed GeoJSON back into JOSM.
  • Convert it into a GPX layer.
  • Export the resulting layer as a GPX file.

This entire hassle is meant to retain the additional information typically found in GPS track files. So a track point doesn’t look like a pair of coordinates, but like this:

<trkpt lat="45.35513644019843" lon="-122.60441061871428">
        <ele>54.7008</ele>
        <time>2025-11-29T21:21:56Z</time>
        <fix>rtk</fix>
        <sat>38</sat>
        <course>47.9</course>
        <hdop>0.4</hdop>
        <vdop>0.7</vdop>
        <pdop>0.8</pdop>
        <ageofdgpsdata>1.0</ageofdgpsdata>
        <dgpsid>412</dgpsid>
        <stdhdev>0.01</stdhdev>
        <stdvdev>0.022</stdvdev>
</trkpt>

The only known issue with this method is that the elevation values might not get transformed at all, depending on the transformation parameters and tools used.

For instance, if transformations are performed using ogr2ogr, for a 3D CRS, it expects a structure like this containing the Z-coordinate:

"geometry": {
	"type": "Point",
	"coordinates": [
		-122.61229189617,
		45.35316629967,
		54.7008
	]
}

It’s not going to read "gpx:ele": "54.7008" property generated by JOSM and use it.

The reverse seems to be true for JOSM when you import the transformed GeoJSON back.

Email icon Bluesky Icon Facebook Icon LinkedIn Icon Mastodon Icon Telegram Icon X Icon

Discussion

Comment from Javier_Jimenez on 1 December 2025 at 22:43

Hi. I’m the main contributor of ntrip-catalog.org , an open source/data repository to automatically find that information that is missing: the CRS of the NTRIP provider. Looks like you suffered that too. Please, help us to contact more providers to contribute to the repository with their data. Thanks!

PS next year it is going to be fun having in parallel NAD83(2011) and NATRF2022

Comment from Dzertanoj on 2 December 2025 at 07:27

@Javier_Jimenez, I’m not sure what you are talking about. I didn’t suffer from any lack of information about the CRS used by ORGN; it’s pretty clearly documented on their website, which I linked above.

Comment from StephaneP on 7 December 2025 at 12:17

So you think the osm data is using a WGS84 CRS? That not always the case. @StephaneP/diary/390290

Instead of converting the local CRS RTK trace to another one, don’t you think it would be better to add the CRS as a metadata ?

Comment from Javier_Jimenez on 7 December 2025 at 17:38

@StephaneP I mentioned your article in this talk in FOSS4G: https://www.youtube.com/watch?v=M2ck3cAGvhg , in the slide 35

Comment from Javier_Jimenez on 7 December 2025 at 17:47

@Dzertanoj you know the CRS of ORGN, and you have to introduce it manually to postprocess the data. Be sure that many users do not know about it, or they don’t care. Wouldn’t it be much better if the software were tagging automatically the coordinates? That is less error prone. That’s the purpose of https://ntrip-catalog.org As an open source/data project, it needs the contribution of the NTRIP providers. Do you know how they are going to do with NATRF2022?

Comment from Dzertanoj on 7 December 2025 at 21:22

@StephaneP I don’t “think” OSM is using WGS84; it’s a general assumption/historical practice (and also a huge architectural flaw, for the exact reason you mentioned) that isn’t enforced in any meaningful manner.

Until there is any sort of provision for handling the CRS metadata you suggested adding, it would be pointless to do so. Pointless, because instead of increasing practical certainty, it would do that only formally. To do it practically, it would require either (or both) OSM database to support on-the-fly transformation together with the correct handling of such metadata, or a solid awareness of OSM data users (including every OSM editing software) of data being stored in different CRSs. Without that, data stored in a CRS other than the assumed one would not get properly transformed/

Transforming data to match the general assumption, on the other hand, eliminates one layer of uncertainty and the currently inevitable data handling error. If in the future, provisions for real-time transformations, time-based CRSs, and multiple CRS data storage are created, I’d be happy to get back to this question. Until then, it’s (unfortunately) nothing but philosophical discussion. I’m not a core services developer, nor can I become one, so that’s not something I can influence directly.

Comment from Dzertanoj on 7 December 2025 at 21:56

@StephaneP,

To explain why I am convinced that it’s a general assumption, I’d like to quote this: osm.wiki/OSM_XML#Contents If anyone wants to argue about this matter or present an “alternative view” on that, they are welcome to start by listing any existing provisions for any other CRSs in the data storage, handling, and export mechanisms.

Comment from Adrian 2 on 13 December 2025 at 21:30

@Dzertanoj Coordinates in OSM are supposed to be WGS 84. I don’t think anyone is disputing that.

But in practice -

In Great Britain, there is no accurately aligned aerial imagery available to OSM. The only accurate source available is cadastral parcels. The parcels are derived from data produced by the national mapping agency (Ordnance Survey). So we are aligning the aerial imagery with the parcels. The reference for the parcels is ETRS89.

In GB, there are not many RTK base (correction) stations which are free to use. There are a few professional ones (https://epncb.oma.be/). One, even of these, the one in west London, has a horizontal position error of 75cm and an altitude error of 43cm (relative to ETRS89). It is somewhere near WGS 84, but it cannot be WGS 84 because the position it broadcasts has not changed by even a millimetre in five years. There are more RTK base stations free to use, on rtk2go.com but they are likely to have position errors. One had a horizontal position error of 8cm and an altitude error of 85cm. Another had a horizontal position error of 280cm, I did not try to find the altitude error.

In France, the national mapping agency (IGN) makes accurately aligned aerial imagery available to OSM. The reference for the imagery is ETRS89. There is a dense network of RTK base stations which are free to use (https://www.centipede-rtk.org/). The positions of the base stations are accurate because they have been calculated by the national mapping agency. The reference is ETRS89.

So, in practice the coordinates in OSM in both GB and France are ETRS89. Or you could regard them as WGS 84 epoch 1989.0.

We are supposed to transform the coordinates from ETRS89 to WGS 84, but which date should be used (because the result depends on the date)? I would suggest 1989-01-01. Perhaps in the future OSM will have a tag for the date on which a node’s coordinates coincided with WGS 84. Then we could tag all the nodes in GB and France with the date 1989-01-01.

I guess NAD83 is more of a problem because there isn’t a date when it coincided with WGS 84. So you do need to transform from NAD83 to WGS 84. Again, the result depends on the date. I think it would make a lot of sense to use the same fixed date throughout the conterminous United States.

Comment from Dzertanoj on 14 December 2025 at 21:35

@Adrian 2 , I don’t think that the availability of free (government) correction services is relevant to this matter. I use what’s available because it’s convenient. If there weren’t free access in my state, I’d find a different way. There are services like RTK2GO. Someone could spend an extra equivalent of $300 and set up their own base station. And so on.

The minimum goal of using RTK is to accurately measure the shape. However, even though the accurate location of that shape is only the secondary goal, the steps to improve location accuracy are technically too simple to neglect and skip. I’d go far enough to say that it’s irresponsible because it means knowingly introducing data with a systematic error. (The only nuance is that a “wrong” untransformed CRS could sometimes be negligibly different in the metrological meaning of that term from the desired variant of WGS84.)

It is, in fact, a complex problem to figure out which CRS and epoch to use as a transformation target. However, it would be wrong to choose it arbitrarily, without declaring the criteria for the solution first. Otherwise, it’s arbitrary.

For a future hypothetical scenario of added support for the fourth coordinate (time), we can fairly simply list at least some criteria to help with not turning everything existing prior to that into dead data. But those criteria might be visibly different for OSM geometry and user-submitted tracks.

Since I was talking about tracks in this post, the question that must be answered regarding that is: “What target CRS/epoch should be used to transform a track to emulate what (infinitely precise and accurate for the sake of an idealized hypothesis) standalone GPS receiver would output if we used it to record it?” In the case of tracks, the precise collection date is already embedded in it. In other words, it’s about bringing data to the common expectation.

Log in to leave a comment