Hilfestellung bei der Erstellung von Karten aus historischen Daten

Moin!

im nächsten Monat haben wir unseren 100. Stammtisch und da lag es nahe einen graphischen Rückblick zu halten. Kollege Rainer hat sich sehr intensiv mit dem Thema beschäft - ist aber leider daran gescheitert entsprechende Daten für ein Rendering in Maperative zu beschaffen.

Wir haben nun die Hoffnung, dass einer von Euch eine entsprechende Umgebung am laufen hat und uns ggf. die entspechenden Daten zur Verfügung stellen kann.

Rainer hat die Problematik einmal zusammengestellt und ich erstelle bzw. beobachte das Posting. Hier seine Zusammenfassung:

Detailfragen kann ich allerdings nicht beantworten und nun bleibt für uns nur die Hoffung, denn diese stirbt bekanntlich zuletzt.

Gruß aus Lübeck

Jan

Ist das jetzt ein erneuter Aufruf zu Arbeit mit planetfiles aus der Zeit vor der API 0.6?

Moin!

ich wußte nicht das es dieses Posting schon gibt - es ist jetzt vielmehr der Hilferuf zu einer Datenbereitstellung, da trotz tagelangen versuchens kein Ergebnis raus gekommen ist!

Gruß Ja

Wozu die Arbeit machen? Ein aktuelles System hat osmium als Paket mit dabei, zu finden unter dem Namen osmium-tool.

Steht auch in der Installationsanleitung:

Debian and Ubuntu

*Packages called osmium-tool are available for Debian and Ubuntu systems. (Do not install the osmium package, it is a very old version of the Osmium library.) Depending on your system, the packages might be rather old. Debian unstable and testing are tracking the development of Osmium closely. For Jessie those new packages are available in the backports repository.
*

http://osmcode.org/osmium-tool/manual.html

Moin,

ein letzter ‘zaghafter’ Versuch …
Ich bin derjenige, der die historischen Karten für Lübeck rendern würde, so ich die historischen OSM-Daten hätte bzw. mit OSMIUM freischneiden könnte …

  1. Ich habe Linux Mint 17.3 Rosa ‘unter der Haube’ (läuft auf Basis von Ubuntu 14.04 - Codename Trusty Tahr)

  2. Bei der Paketsuche im Software-Portal der LinuxMintCommunity gibt es für osmium-tool genau einen Treffer, allerdings für Release ‘Sarah’ (damit wohl für die base Ubuntu 16.04; für mein System also nicht passend); der Link führt aber ohnehin ins Leere (“Das Paket osmium-tool konnte nicht gefunden werden”) …

  3. Das Osmium Tool Manual ist mir bekannt, genauso die Seite https://github.com/osmcode/osmium-tool/blob/master/README.md. Beides führt mich am Ende aber zum “Übersetzung von OSMIUM aus den Code-Quellen” …

Das “Übersetzung aus Code-Quellen” habe ich (noch) nicht gemacht und wenn ich mir die “Prerequisites” und die dazugehörenden Versionsanforderungen anschaue, frage ich mich, ob das auf meinem System überhaupt noch funktionieren würde. Und ein neues Linux-System aufsetzen, nur um an passende packages für OSMIUM zu kommen, mag ich auch nicht.

Somit stecke ich gefühlt fest! Hat jemand noch’n Tipp für mich ?

Grüße
Rainer

Ubuntu Pakete für osmium-tool gäbe es hier, allerdings nicht für trusty (Osmium Tool - osmcode > Download):
https://packages.ubuntu.com/xenial/osmium-tool

Es gibt ein Docker file zum automatisierten Bauen der Quellen in einer separaten Umgebung (Container), das wäre vermutlich am einfachsten:
https://gist.github.com/ImreSamu/5447252a4e750fd8c61e

Ansonsten hier mein Protokoll (unter Ubuntu 16.04.) zum Bauen mit minimalen Abhängigkeiten (könnte aber unvollständig sein):

  1. Ordner zum Installieren anlegen

Dort Kommandozeile öffnen, um dann nachher osmium-tool und libosmium nebeneinander in Unterordnern installieren (“git clone”, siehe unten), damit wird libosmium automatisch gefunden:

https://github.com/osmcode/osmium-tool/issues/8#issuecomment-94706533

  1. osmium-tool

Mit git clone wird die aktuelle Entwicklungsversion heruntergeladen, alternativ jeweils ein stabiles Release Zip herunterladen:
https://github.com/osmcode/osmium-tool/releases


git clone https://github.com/osmcode/osmium-tool

sudo apt-get install libboost-dev libboost-program-options1.58-dev

  1. libosmium

git clone https://github.com/osmcode/libosmium.git

sudo apt-get install libexpat1-dev zlib1g-dev libbz2-dev

  1. Bauen

siehe https://github.com/osmcode/osmium-tool#building

Falls noch nicht bekannt, die Geofabrik bietet seit kurzem auch Full History Extrakte an:
full history files on Geofabrik server (dev ML)

An Docker habe ich auch schon gedacht, allerdings würde ich da eher ein Image mit ubuntu16.04 als Basis nehmen. Leider ist das Dockerfile von Imre schon 3 Jahre alt und funzt nicht mehr:


Cloning into 'osmium-tool'...
 ---> bda4297503bc
Removing intermediate container dd18b2679d3f
Step 26 : RUN mkdir -p /osm/osmium-tool/build && cd /osm/osmium-tool/build  && cmake ..
 ---> Running in 6b5625037ddd
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Error at /usr/share/cmake-2.8/Modules/FindBoost.cmake:1131 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.54.0

  Boost include path: /usr/include

  Detected version of Boost is too old.  Requested version was 1.55 (or
  newer).
Call Stack (most recent call first):
  CMakeLists.txt:44 (find_package)

Schade, hab den Link zum Dockerfile erst nach meiner Installation irgendwo gesehen und gar nicht auf das Datum geachtet.

Keine Ahnung und nicht getestet, aber evtl. “libboost-program-options1.58-dev” statt “libboost-program-options-dev”?

Sorry, hatte gar nicht auf dem Docker Hub nachgeschaut, dort gibt es ein Image für Version 1.6.1, das funktioniert:
https://hub.docker.com/r/asymmetric/osmium-tool/

TL;DR: Spoiler


Ja, prinzipiell kann man das aber auch einfach zu fuss machen:

Dockerfile:


FROM ubuntu:16.04

RUN  export DEBIAN_FRONTEND=noninteractive
ENV  DEBIAN_FRONTEND noninteractive

RUN apt-get -y update && apt-get -y upgrade

RUN apt-get -y install osmium-tool

und dann noch sowas wie:


docker build -t osmium-test .
docker run -v `pwd`:/data -ti osmium-test

In der Kommandozeile kann man dann direkt osmium aufrufen, das Verzeichnis /data im Container zeigt dann auf das Verzeichnis, von dem aus “docker run” gestartet wurde.

osmium time-filter -o /data/planet-20080101.osm.pbf /data/history-planet.osh.pbf 2008-01-01T00:00:00Z

(Dateinamen entsprechend anpassen)

Gute Idee: siehe http://download.geofabrik.de/europe/germany/schleswig-holstein.osh.pbf

2008 geht noch (siehe unten), 2007 ist dagegen nur noch eine traurige Punktwolke ohne irgendwelche Wege.

Vielleicht Mitte Oktober 2007 versuchen?

https://wiki.openstreetmap.org/wiki/Planet.osm/full

https://wiki.openstreetmap.org/wiki/API_v0.5

BINGO :slight_smile:

Vielen Dank an Ikonor, mmd und Jan ! Mit dem Hinweis auf Docker und dem “Fahrplan” aus #10 hab ich’s nun doch noch geschafft, die historischen OSM-Daten herauszutrennen.

Für alle, die das eventuell mal nachvollziehen wollen, hier ‘kurz’ my way:

Ausgangsproblem: Ich will ein package unter Linux installieren, mein OS ist aber für die vorhandenen packages nicht geeignet (zu ‘alt’) und selbst das Programm aus den sources kompilieren will/kann ich nicht … Auch die Aktualisierung des PC-OS erscheint zur Lösung der gestellten Aufgabe overdosed.

Schritt 1: ‘docker’ installieren (docker ist eine Virtualisierungssoftware, die Container bereitstellt, in der andere Software isoliert laufen kann. Das ganze Konzept ist offenbar neuer und smarter als das ‘altbekannter VM’s’ und kann wohl auch einiges mehr … Mit

$ wget -qO- https://get.docker.com/ | sh
und 
$ sudo usermod -aG docker <username>

wird docker installiert und der User der Gruppe ‘docker’ hinzugefügt, um das ansonsten nervige ‘sudo’ zu unterbinden.

Schritt 2: einen ersten docker-Container anlegen und Ubuntu (latest - hier V16.04.2) und osmium in den Container packen:

  <mit $ für Wirt-OS und # für Gast-OS im Container>
$ docker run -ti ubuntu bash
# apt-get -y update && apt-get -y upgrade
# apt-get -y install osmium-tool
# exit
$

Schritt 3: den frisch angelegten Docker-Container persitent machen (standardmäßig wird er geschlossen und wäre damit ‘wech’), dazu zunächst die Container-ID ermitteln

$ docker ps -l
$ docker commit [Container-ID] ubuntu16.04.2-mit-osmium

Nun haben wir im docker-Container als Gast-OS Ubuntu 16.04.02 mit osmium 1.3.0 am Laufen. Der Container kann mit

$ docker run -ti ubuntu16.04.2-mit-osmium

gestartet werden. Nur, das Gast-OS ist noch nicht in der Lage, mit dem Wirt-OS zusammen gemeinsame Verzeichnisse zu nutzen. Ganau das braucht es aber, da ich ja die im Container erzeugten Daten später weiterverarbeiten (rendern) möchte. Dazu muß nun ein sog. docker-volume angelegt werden = Schritt 4.

Dazu im Gast-OS ein geeignetes Verzeichnis (z.B. # /home/osmium-data) anlegen und wiederum persistent machen (Prozedere aus Schritt 3 wiederholen). Nun in das Verzeichnis des Wirt-OS wechseln, auf das auch das Gast-OS Zugriff haben soll. Mit

$ docker run -v `pwd`:/home/osmium-data -ti ubuntu16.04.2-mit-osmium

erfolgt die Koppelung beider OS zwischen den jeweils gewünschten Verzeichnissen.

Das war’s! Osmium 1.3.0 läuft nun auf einem Ubuntu-14.04-PC in einem docker-Container mit Ubuntu-16.04.2

Auffällig ist, dass diese Osmium-Version das Kommando ‘extract’ nicht unterstützt (Unknown command ‘extract’. Try ‘osmium help’). Das ist doof, können zwar mit time-filter

# osmium time-filter -o /home/osmium-data/germany_2009-04-15.osm.pbf /home/osmium-data/germany.osh.pbf 2009-04-15T12:00:00Z

die Daten zum gewünschten Zeitpunkt aus dem osh.pbf-file herausgetrennt werden, aber z.B. ‘germany’ bleibt immer ‘germany’. Als Datensäge habe ich mich erst einmal mit

$ osmconvert germany_2009-04-15.osm.pbf -b=10.4,53.65,11.1,54.05 -o=luebeck_2009-04-15.osm.pbf

‘gerettet’.

Möglicherweise hilft es hier, anstelle von

apt-get -y install osmium-tool

dem Hinweis aus #9 zu folgen und damit osmium 1.6.1 zu installieren - z.B. in einen zweiten Container …

Grüße aus Lübeck
Rainer

Prima. Dann steht ja eurem 100. Stammtisch hoffentlich sonst nichts mehr im Wege.

Zu Schritt 2 & 3: normalerweise ist diese manuelle Vorgehensweise nicht empfohlen, da das Bauen des Images damit nicht gut reproduzierbar und somit auch automatisierbar ist.

Daher hatte ich in #10 ein Dockerfile und dem docker build gearbeitet, sprich: man legt ein neues Verzeichnis an, erzeugt dort eine Datei “Dockerfile” an mit dem Inhalt aus #10, und startet dort dann das docker build wie oben beschrieben.