Schlagwort-Archive: OSM

Nominatim Installation zum Suchen von Namen und Adressen in OSM-Daten (Ubuntu 12.04)

Einleitung

Passend zum Tileserver, der kürzlich um Routingfunktionlitäten erweitert wurde, soll nun auch eine Möglichkeit geschaffen werden, Adressen über Straßen- und Ortsnamen finden zu können. Hierzu wird wird die Open Source Lösung Nominatim verwendet.

Installation

Die Installation erfolgt gemäß Anleitung des OSM-Wikis (http://wiki.openstreetmap.org). Ein Großteil der benötigten Pakete ist bereits durch die Vorarbeiten vorhanden. Die Quellen erhalten wir über GitHub.

apt-get install php5-pgsql postgis postgresql php5 php-pear gcc \
proj-bin libgeos-c1 postgresql-contrib git osmosis \
postgresql-9.1-postgis postgresql-server-dev-9.1 build-essential \
libxml2-dev libgeos-dev libpq-dev libbz2-dev libtool automake \
libproj-dev libprotobuf-c0-dev protobuf-c-compiler libgeos++-dev \
pear install DB
git clone --recursive git://github.com/twain47/Nominatim.git

Nominatim bauen…

cd Nominatim
./autogen.sh
./configure
make

Anschließend noch zwei Datenquellen herunterladen.

wget --output-document=data/wikipedia_article.sql.bin \
http://www.nominatim.org/data/wikipedia_article.sql.bin
wget --output-document=data/wikipedia_redirect.sql.bin \
http://www.nominatim.org/data/wikipedia_redirect.sql.bin

Der Import der Daten in die Datenbank wird mit dem nachfolgenden Kommando angestoßen. Hier ist wie in den vorherigen Beispielen bei größeren Karten mit langen Verarbeitungszeiten zu rechnen.

./utils/setup.php --osm-file saarland-latest.osm.pbf --all

 

 

Lokale Open Source Routing Machine (OSRM)

Einleitung

Nachdem bereits ein lokaler Tile-Server (Link zum Tutorial) zur Verfügung steht, soll dieser um Routing-Funktionalitäten erweitert werden. Hierzu soll die Open Source Routing Machine (OSRM) verwendet werden. Weitere Infos:
http://project-osrm.org/
https://github.com/DennisOSRM/Project-OSRM

Installation

Zunächst werden die OSRM-Quellen und einige Ubuntu-Pakete benötigt.

sudo apt-get install git build-essential git cmake pkg-config \
libprotoc-dev libprotobuf7 protobuf-compiler libprotobuf-dev \
libosmpbf-dev libpng12-dev libbz2-dev libstxxl-dev libstxxl-doc \
libstxxl1 libxml2-dev libzip-dev libboost-thread-dev \
libboost-system-dev libboost-regex-dev libboost-filesystem-dev \
lua5.1 liblua5.1-0-dev libluabind-dev
git clone https://github.com/DennisOSRM/Project-OSRM.git

Anschließend wird OSRM aus den Quellen gebaut.

cd Project-OSRM
mkdir -p build
cd build
cmake ..
make

Verarbeitung der Daten

Mit den nachfolgenden Kommandos werden die Daten aufbereitet und schließlich in die Datenbank eingespielt.

./osrm-extract saarland-latest.osm.pbf
./osrm-prepare saarland-latest.osrm saarland-latest.osrm.restrictions

Nun muss noch server.ini angepasst werden:

Threads = 8
IP = 0.0.0.0
Port = 5000

hsgrData=/pfad/zu/saarland-latest.osrm.hsgr
nodesData=/pfad/zu/saarland-latest.osrm.nodes
edgesData=/pfad/zu/saarland-latest.osrm.edges
ramIndex=/pfad/zu/saarland-latest.osrm.ramIndex
fileIndex=/pfad/zu/saarland-latest.osrm.fileIndex
namesData=/pfad/zu/saarland-latest.osrm.names
timestamp=/pfad/zu/saarland-latest.osrm.timestamp

Das Kommando zu Starten:

./osrm-routed

 Weboberfläche

Die zugehörige Weboberfläche kann über GitHub besorgt werden.

cd /var/www/
git clone https://github.com/DennisSchiefer/Project-OSRM-Web.git

Die Konfiguration erfolgt in OSRM.config.js, dort ist der folgende Teil für das Routing mit der eigenen OSRM zu erweitern/anzupassen:

ROUTING_ENGINES: [
  {       url: 'http://<Name oder IP>:5000/viaroute',
          timestamp: 'http://<Name oder IP>:5000/timestamp',
          metric: 0,
          label: 'OSRM_LOKAL',
  },
  {       ...

Zur Darstellung des Kartenmaterial vom eigenen Server ist weiterhin anzupassen:

TILE_SERVERS: [
  {  display_name: 'skraus01.dyndns.org',
    url:'http://<Name oder IP>/osm/{z}/{x}/{y}.png',
    attribution:'Data © <a href="http://www.openstreetmap.o/copyright/en">OpentreetMap</a> contributors (ODbL), Imagery © <a href="http:/mpbox.com/">MapBox</a>',
  options:{maxZoom: 18}
  },
  {  ...

Aufruf im Browser

Der Aufruf erfolgt dann entsprechend im Browser:

http://<Name oder IP>/Project-OSRM-Web/WebContent/main.html

Have fun!

Eigener Tile-Server zum Ausliefern von OpenStreetMap-Basiertem Kartenmaterial (Ubuntu 12.04 LTS)

Einleitung

OpenStreetMap ist ein Projekt mit großer Community, welches die Zielsetzung hat freies Kartenmaterial zu erstellen und bereitzustellen. Dieses Kartenmaterial steht in verschiedenen Varianten zur Verfügung. Unter Anderem werden „Rohdaten“ bereitgestellt, welche wir im weiteren Verlauf weiterverarbeiten werden. Zunächst werden die Daten strukturiert in einer Datenbank abgelegt um dann bei Bedarf Tiles (deutsch Kacheln) daraus zu erstellen. Diese Kacheln bilden letztendlich die Basis der anzuzeigenden Karte.

Installation

Als Vorbereitung wird zunächst ein Repository eingebunden, von welchem dann die benötigten Pakete bezogen werden.

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:kakrueger/openstreetmap
sudo apt-get update
sudo apt-get install libapache2-mod-tile

Import der Daten

Um die Laufzeit gering zu halten und nicht zuletzt meinen Wurzeln geschuldet, werden im Folgenden beispielhaft OSM-Daten für das Saarland (Quelle: http://download.geofabrik.de/) herunter geladen und dann verarbeitet.

wget http://download.geofabrik.de/europe/germany/saarland-latest.osm.pbf

Der nachfolgende Aufruf importiert diese Daten schließen in die Datenbank:

osm2pgsql -C 4000 --number-processes 2 saarland-latest.osm.pbf

Sollt dies aufgrund von Speichermangel bei größeren Karten fehlschlagen, kann zusätzlich der Schalter –slim verwendet werden, somit erfolgt die Verarbeitung der Daten dateibasiert und nicht vollständig im RAM. Abhängig von der Hardware wird die Verarbeitung bei großen Karten ggf. mehrere Stunden oder Tage dauern.

Aufruf

Vor dem Aufruf sollte /var/www/osm/slippymap.html angepasst werden. Einerseits kann der Mittelpunkt der Karte sowie der Zoomlevel beim Aufruf definiert werden.

// Start position for the map (hardcoded here for simplicity)
var lat=49.12345;
var lon=7.12345;
var zoom=12;

Sofern auf die Karte nicht nur lokal zugegriffen wird, kann auch noch die IP-Adresse angepasst werden.

// This is the layer that uses the locally stored tiles
var newLayer = new OpenLayers.Layer.OSM("Meine Kacheln", "http://192.168.10.30/osm/${z}/${x}/${y}.png", {numZoomLevels: 19});
map.addLayer(newLayer);

Für weitere Anpassungen sei auf die Beispiele und Dokumentation von OpenLayers verwiesen. Nach dem Customizing kann schließlich der Erfolg geprüft werden. Die Karte steht unter http://<IP oder DNS des Tile-Servers>/osm/slippymap.html zur Verfügung, hier das Ergebnis:

Beispiel der Karte auf Basis von OpenStreetMap-Daten und OpenLayers