First let's get historical OSM data these can be downloaded from Geofabrik latest and full history select the country and download internal.osh.pbf - OSM login is required to download.
Then grab latest.osm.pbf which is up-to-date file with no history.
Download Osmium
Prepare data for certain date as baseline e.g. Jan 1st 2019
osmium time-filter ./czech-republic-internal.osh.pbf 2019-01-01T00:00:00Z -o 2019_CZ_full.pbf
cut the area from whole country to bounding box of interest
osmium extract -b 16.842041,49.0288644,17.0145607,49.1162425 ./2019_CZ_full.pbf -o zdanice_2019.pbf
and optionally convert it to osm xml file (needed for JOSM; not needed for Maperitive)
osmium cat zdanice_2019.pbf -o zdanice_2019.osm
Prepare latest data by cutting the same area
osmium extract -b 16.842041,49.0288644,17.0145607,49.1162425 ./czech-republic-latest.osm.pbf -o zdanice_latest.pbf
remove everything apart from paths and tracks
osmium tags-filter zdanice_latest.pbf w/highway=track,path -o zdanice_latest_cesty.pbf
and optionally convert to osm xml
osmium cat zdanice_latest_cesty.pbf -o zdanice_latest_cesty.osm
There are varios scripts and tools which can be used like basic perl script Osmdiff or big GIS package QGIS (which I never had luck with to understand it)
I decided to go first with JOSM which's my tool-to-go for map edits. It can open osm xml, but was quite sluggish with the files (filtering historical extract for only some entities would help).
Next I tried Maperitive (sorry, Win only) which I found better option in this case. Simply turning on/off layer with added path/tracks in current data file did the trick (had to edit a bit rules of Maperitive renderer, but that's different story).
2019 -
July 2020 -
To create timelapse more historical snapshots are needed. To avoid processing big file many times I though sorting it would help (note this is pretty RAM intensive operation, for Czech republic - relatively small country - it didn't work on less than 16GB RAM and ate 8GB swap as well).
osmium sort --verbose czech-republic-internal.osh.pbf -o czech-republic-sorted.pbf
however it didn't
osmium extract -b 16.842041,49.0288644,17.0145607,49.1162425 ./czech-republic-sorted.pbf -o zdanice_with_history.pbf
[======================================================================] 100%
Node ID twice in input. Maybe you are using a history or change file?
This command expects the input file to be ordered: First nodes in order of ID,
then ways in order of ID, then relations in order of ID.
so I wrote perl script to create ways from historical country dump
#! /usr/bin/perl -W
use strict;
use warnings;
sub cut_data() {
my ($date) = @_;
system('osmium time-filter czech-republic-internal.osh.pbf ' . $date . '-01T00:00:00Z -o ' . $date . '_CZ_full.pbf');
system('osmium extract -b 16.842041,49.0288644,17.0145607,49.1162425 ' . $date . '_CZ_full.pbf -o zdanice_' . $date . '.pbf');
system('rm ' . $date . '_CZ_full.pbf');
system('osmium tags-filter zdanice_' . $date . '.pbf w/highway=track,path -o zdanice_cesty_' . $date . '.pbf');
system('rm zdanice_' . $date . '.pbf');
}
&cut_data('2019-03');
&cut_data('2019-05');
&cut_data('2019-07');
&cut_data('2019-09');
&cut_data('2019-11');
&cut_data('2020-01');
&cut_data('2020-03');
&cut_data('2020-05');
&cut_data('2020-07');
this produced point-at-time files with paths and tracks only
ls | grep pbf
zdanice_cesty_2019-03.pbf
zdanice_cesty_2019-05.pbf
zdanice_cesty_2019-07.pbf
zdanice_cesty_2019-09.pbf
zdanice_cesty_2019-11.pbf
zdanice_cesty_2020-01.pbf
zdanice_cesty_2020-03.pbf
zdanice_cesty_2020-05.pbf
zdanice_cesty_2020-07.pbf
In Maperitive make png for each of them (we already have latest and Jan 2019 from earlier on) by simply turning on/off layers and export (CTRL+E).
ls | grep png
2019_01.png
2019_03.png
2019_05.png
2019_07.png
2019_09.png
2019_11.png
2020_01.png
2020_03.png
2020_05.png
2020_07.png
2020_latest.png
To make a movie I used imagemagick's utility convert
convert -delay 100 -quality 100 *.png timelapse.mp4
which produced video below, each frame is one second.
https://tube.tchncs.de/videos/watch/b32b0f29-aadc-48d3-8e65-ee4d5b2a8226
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing