Linux.osm

Aus OrgaMon Wiki
Version vom 28. November 2012, 11:38 Uhr von Root (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „<u><b>Ziel 1: osm-tile</b></u><br> Installation eines eigenen "Tile"-Servers. Also eines PNG-Kartenlieferanten über das HTTP-Protokoll. Es soll 100% kompatibel s…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Ziel 1: osm-tile
Installation eines eigenen "Tile"-Servers. Also eines PNG-Kartenlieferanten über das HTTP-Protokoll. Es soll 100% kompatibel sein zu den bestehenden Tile-Servern des OpenStreetMap Projektes. In Zukunft soll dieses Projekt den Tile-Server-Part des kommerziellen xServer ersetzen.

Das Bild zeigt ein einzelnes Tile (=Kachel) in der Zoom-Stufe 12, links von "openstreetmap", rechts von "google". Über einen typischen Tile-Server würde man diese Kachel über folgende URL erhalten:

OrgaMon legt diese Kachel, je nach Provider, mit dem Dateinamen ~Provider~-12-2143-1406.png im Kartenpfad ab (im Moment sind die Provider "local-", "google-" und "osm-"), eine Kachel wird auf diese Art immer nur einmal angefragt.

Ziel 2: osm-geo
Installation eines eigenen "Geolokalisierungs"-Server. Als ein System das und Adressdaten (Text) in X,Y Geokoordinaten umsetzt. Realisierbar durch Nominatim.

OSM-Projekt Status

Installation "Step by Step"

zunächst Ziel 1, Ziel 2 wird später integriert

Systemvoraussetzungen

  • openSuSE 12.2 - 64 bit
  • SSD mit 160 GByte freiem Platz vorzugsweise NICHT die System-Platte
    • bei einfacher Datenhaltung (noch ohne Updates) reichen freie 80 GByte der System-Platte
  • Dual-Core 3.0 GHz, 16 GByte RAM
  • "zypper update", bis alle Updates eingespielt sind

Vorarbeiten

  • Das Repository "Geo" von openSuSE integrieren
#
# Repository Geo von openSuSE integrieren
#
zypper ar http://download.opensuse.org/repositories/Application:/Geo/openSUSE_12.2/ "Geo"
#
# Repository Cache neu erstellen, Trust-Anfrage mit "a" (=All) beantworten
# 
zypper refresh


Kartenbasis downloaden

Wir haben uns für einen Kartenausschnitt "ganz Deutschland" und ein "bischen Schweiz" entschieden. Als Grundlage laden wir jedoch ganz Europa herunter.

wget http://download.geofabrik.de/openstreetmap/europe.osm.pbf


Die genauen Download-Positionen werden noch nachgeliefert

Wir wollen im "www.openstreetmap.de"-Style die Kacheln ausbelichten, also sind noch weitere Dateien notwendig


... für die Kueste

wget shoreline_300
wget processed_p

... fuer Ortsbezeichnungen und Landesgrenzen auf den sehr kleinen Zoomstufen

wget builtup_area
wget 110m_admin_0_boundary_lines_land
wget ne_10m_populated_places

... für den Karten-Style "Standard-OSM-Stil"

http://openstreetmap.de/germanstyle.html

Osmosis installieren


zypper install osmosis

Deutschland+Schweiz herauslösen

Eigentlich jetzt nicht direkt laut Landes-grenzen, sondern einfach ein viereckiger Bereich um dieses Gebiet. Die Koordinaten können hier http://www.dmap.co.uk/utmworld.htm abgeschätzt werden.


#
# osmosis als Dienstleister für den "Kartenschnitt" nutzen
#
osmosis --read-pbf europe.osm.pbf --bb left=5.85 right=15.05 bottom=47.06 top=55.14 --write-pbf de_ch.osm.pbf

#
# Die erzeugte Datei dem User "postgres" sichtbar machen
#
mv de_ch.osm.pbf /var/lib/pgsql


  • Es kommt "WARNING: Attention: Data being output lacks metadata. Please use omitmetadata=true" ich denke das kann ignoriert werden

PostgreSQL

Um Karten Rohdaten schneller abfragen zu können werden diese in eine PostgreSQL-Datenbank importiert. Dazu brauchen wir diesen Datenbank-Server.


zypper install postgresql postgresql-server postgresql-contrib postgresql-devel
chkconfig --add postgresql
rcpostgresql start

OPTIONAL: Datenbank auf einen "anderen" Pfad legen

in der Regel ist var/lib/pg/data (oder was auch immer das Standard-Verzeichnis für die GIS Datenbank ist) zu klein. Wir müssen sicherstellen, dass der "Tablespace" auf einem anderen Pfad läuft.

  • sicherstellen, dass der Datenbank-Server aus ist:
rcpostgresql stop
  • Die Ablage der Daten auf ein anderes Verzeichnis verbiegen
joe /etc/sysconfig/postgresql
  • Folgende (oder Ähnliche) Änderung machen
#
#
POSTGRES_DATADIR="/srv/raid/osm/pg-data"


  • Dienst nun starten
chkconfig --add postgresql
rcpostgresql start

Tuning der Postgresql Optionen

Frederik Ramm hat die PostgreSQL-Optimierung dokumentiert auf http://www.geofabrik.de/media/2012-09-08-osm2pgsql-performance.pdf

  • Ich gehe hier mal vom Standard-Pfad aus:
joe /var/lib/pgsql/data/postgresql.conf
# default ist 24MB
shared_buffers = 8MB

# default ist "auskommentiert" 
maintenance_work_mem = 4096MB

# default ist "auskommentiert"
fsync = off

# default ist "auskommentiert" 
checkpoint_segments = 60 

# default ist "auskommentiert"
random_page_cost = 1.1

# default ist "auskommentiert"
autovacuum = off
  • Nicht vergessen den DB-Server neu zu starten
rcpostgresql restart

Postgis2

Wir wollen (langfristig) Kacheln im Outfit von "OpenStreetmap", Infos gibt es hier http://openstreetmap.de/germanstyle.html Diese Thema ist aber im Moment zurückgestellt


zypper install postgis2

Die postgis2-Installation funktioniert im Moment nicht (27.11.2012), bisher sind 2 manuelle Eingriffe nötig, Details hier https://bugzilla.novell.com/show_bug.cgi?id=791252

#
# Unklar, ob folgendes notwendig ist:
#
su - postgis
 psql
 CREATE EXTENSION postgis;
 CREATE EXTENSION postgis_topology;
  • Postgis2 liefert uns neue Datentypen für die SQL-Sprache von Postgresql (z.B. geometry)


#
# mit folgender Abfrage
#
SELECT name, default_version, installed_version FROM pg_available_extensions WHERE name LIKE 'postgis%';
#
# sollte man folgende Eregbnistabelle erhalten
#
|       name       | default_version | installed_version
|------------------+-----------------+-------------------
| postgis          | 2.0.1           |
| postgis_topology | 2.0.1           |
|(2 rows)
#
  • Postgis2 liefert uns ein SQL-Skript, das die Datenbank-Struktur für eine leere Geo-Datenbank erstellt. Dort hinein fluten wir dann de_ch.
su - postgres
 createdb gis
 psql -d gis -f /usr/share/postgresql91/extension/postgis--2.0.1.sql
 exit

osm2pgsql

Diese Programm flutet Kartendaten in eine vorbereitete Datenbank Struktur

zypper install osm2pgsql
#
# Neuen Screen starten, da der folgende Import sehr lange dauert
#
screen

#
# Die Aktion im Benutzer-Account von postgres ausführen
#
su - postgres
 
 # Import starten
 #
 #
 osm2pgsql -c -C 8000 de_ch.osm.pbf

Mapnik

Mapnik zeichnet aufgrund der Datenbankinhalte die Kacheln auf Anfrage

zypper install mapnik

tirex

tirex ist ein Dämon der auf Anfragen des mod_tile wartet, er zeichnet aber über mapnik

zypper install tirex

mod_tile

liefert anhand von http-Requests Kacheln als png-Datei zurück

zypper install apache2-mod_tile
  • mod_tile laden
joe /etc/sysconfig/apache2
#
# mod_tile aktivieren, indem man hinten den Kurznamen hinzumacht
# apach2 ergänzt dies selbst durch mod_
#
APACHE_MODULES="authz_host ... tile"
  • mod_tile konfigurieren

http://svn.openstreetmap.org/applications/utils/mod_tile/mod_tile.conf

TODO: Apache2, virtueller Host

  • Du konfigurierst einen virtuellen Host "tile", der den tile-Server anwirft


wget http://tile.localhost/12/2143/1406.png

Update

  • Im Moment dokumentiere ich hier nur den Zeitaufwand/Volumenbedarf für ein Update.


Schritt Dauer
[Min]
Neues Volumen
[GiByte]
Download von Europa 90 9
Herausschneiden von de+ch 17 2,2
Import in die Datenbank 59 27

Informations-Quellen

Allgemeine Quellen

Planet-Daten

# die ganze Welt
wget http://planet.openstreetmap.org/planet-latest.osm.bz2
# nur Deutschland
wget http://download.geofabrik.de/openstreetmap/europe/germany.osm.bz2


wget http://tile.openstreetmap.org/world_boundaries-spherical.tgz
wget http://tile.openstreetmap.org/processed_p.tar.bz2
wget http://tile.openstreetmap.org/shoreline_300.tar.bz2
wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/10m-populated-places.zip
wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/110m-admin-0-boundary-lines.zip
wget http://trac.openstreetmap.org/browser/applications/utils/export/osm2pgsql/900913.sql?format=raw -O 900913.sql

Datenbank befüllen

#
# folgende Aktion dauert sehr lange, stelle sicher, dass alles in einen "Screen" läuft!
#
$ osm2pgsql -s -c -C 8000 /srv/raid/osm/planet-latest.osm.bz2


  • Nach meinem ersten Import (Dauer 9 Tage) landete das Script nicht wieder in der Shell
  • Irgendwas war blockiert - der Server hatte ja auch im raid 5 tagelang durchgenudelt
  • Strange: Nachdem das IDE Licht aus war ratterten einzelne Platten immer noch ...
  • Erst als ich nichts mehr "hörte" machte ich einen "halt"
  • "halt" ging nicht weil raid 5 noch "busy"
  • so nahm ich der Kiste den Strom
  • Nach dem Neustart machte das raid einen resync

MapNik

http://www.mapnik.org/

zypper install mapnik
zypper install subversion make gcc gcc-c++ libxml2-devel postgresql-devel libgeos-devel libbz2-devel libproj-devel postgis postgresql-contrib

osm2sqk

http://wiki.openstreetmap.org/wiki/Osm2pgsql

cd /opt/mapnik
svn export http://svn.openstreetmap.org/applications/utils/export/osm2pgsql/
cd osm2pgsql
./autogen.sh
./configure
make install


  1. http://tilecache.org/


postGIS

mod_tile

Source-Code OrgaMon