What's new in
by Jake Low @ State of the Map US 2025
What’s a changeset?
Created when a mapper saves their edits
Records changes to OSM over time
list of changesets
visualization of selected changeset
changeset metadata
details about change
to selected element
filter changesets by various criteria
…and save your filter so you can be alerted when new changesets match it
OSMCha is used by mappers to…
so what's new in
adiffs.osmcha.org
a new data service powering the OSMCha website
old shape
new shape
old tags
new tags
<node id="123" version="1" lon="-71.108956" lat="42.350936"/>
<node id="456" version="1" lon="-71.105214" lat="42.351605"/>
<way id="101" version="1">
<nd ref="123"/>
<nd ref="456"/>
<tag k="highway" value="footway"/>
<tag k="surface" value="concrete"/>
</way>
<node id="123" version="2" lon="-71.108956" lat="42.350936"/>
<node id="456" version="1" lon="-71.105214" lat="42.351605"/>
<way id="101" version="1">
<nd ref="123"/>
<nd ref="456"/>
<tag k="highway" value="footway"/>
<tag k="surface" value="concrete"/>
</way>
still version 1 (not technically changed)
Problem: OSM API does not provide this data
GET https://www.openstreetmap.org/api/0.6/changeset/155530622/download
<osmChange>
<modify>
<node id="2523603738" version="3" lat="47.6647943" lon="-121.2881568">
<tag k="highway" v="trailhead"/>
<tag k="name" v="Necklace Valley Trailhead"/>
<tag k="operator" v="US Forest Service"/>
<tag k="website" v="https://www.fs.usda.gov/…"/>
</node>
</modify>
</osmChange>
Solution: build our own augmented diffs
https://adiffs.osmcha.org/
a new standalone HTTP service providing augmented diffs for OSM changesets
used by OSMCha, and also available for other software to use
Replaces s3://real-changesets
makes loading a changeset on osmcha.org much faster (<1s instead of 15-60s)
Technical details:
osm-adiff-parser
https://github.com/osmcha/osm-adiff-parser
Input
Output
new map colors and symbology
before
after
before
created elements
old versions of modified elements
new versions of modified elements
deleted elements
changeset bounding box
new versions of ways
relations (bounding box)
old versions of ways
after
created elements
new versions of modified elements
(geometry changes only)
old versions of modified elements
new versions of modified elements
(with tag changes)
deleted elements
context elements
old versions of ways
new versions of ways
relations (bounding box)
maplibre-adiff-viewer
https://github.com/osmcha/maplibre-adiff-viewer
osmcha-cli
https://github.com/osmcha/osmcha-cli
https://github.com/osmcha/osmcha-cli
$ curl https://adiffs.osmcha.org/changesets/162592907.adiff | osmcha
https://github.com/jake-low/overpass-cli
$ overpass --area 'Utah' --format json 'node[natural = arch]'
{
"version": 0.6,
"generator": "Overpass API 0.7.62.1 084b4234",
"elements": [
{
"type": "node",
"id": 759250908,
"lat": 38.7911745,
"lon": -109.6089896,
"tags": {
"name": "Navajo Arch",
"natural": "arch"
}
},
...
]
}
https://github.com/jake-low/overpass-cli
$ overpass \
--area "Boston" \
--adiff 2025-01-01T00:00:00Z 2025-06-15T00:00:00Z \
-–out geom \
'way[highway](area)' \
> boston.adiff
https://github.com/jake-low/overpass-cli
$ overpass \
--area "Boston" \
--adiff 2025-01-01T00:00:00Z 2025-06-15T00:00:00Z \
-–out geom \
'way[highway](area)' \
> boston.adiff
$ osmcha boston.adiff
Summary
Summary
faster and more correct
easier and more intuitive
extract useful pieces into reusable libraries…
…enabling interesting new use cases!
Thanks for listening!
appendix
Replication files
Minutely updates from openstreetmap.org
Contain every change to the map in a one-minute window
osmChange (XML) format
planet.openstreetmap.org replication files
osmx-adiff-builder
github.com/osmcha/osmx-adiff-builder
OSMExpress database
downloads changeset data
(new versions of elements)
generates augmented diffs
and uploads them to storage bucket
afterwards, applies diffs to planet replica to keep it up-to-date
reads old versions of elements (and indirectly modified elements) from planet replica
OSMExpress
See Brandon Liu's talk at SOTMUS 2019 for more details: