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.
Do you want to remove this version name and description?
Syncing