Linux.osm
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:
- OpenStreetMap: http://tile.openstreetmap.org/12/2143/1406.png
- Google: http://mt0.google.com/vt/x=2143&y=1406&zoom=5
- Man beachte bei Google den invertierten zoom-Parameter, zoom=17-z
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
- Nov. 2012: Kontaktaufnahme zu geofabrik.de mit der Bitte um Hilfe http://www.geofabrik.de/
- 22.11.2012: ich will einen neuen Versuch starten mit http://download.opensuse.org/repositories/Application:/Geo/openSUSE_12.2/x86_64/
- 22.11.2012: setzte einen neuen Server auf ... Schritte bis osm2pgsl
- 23.11.2012: Dokumentation ...
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
- Osmosis bneötigen wir, um aus Europa unseren Wunschbereich herausschneiden zu können, Infos gibt es hier http://wiki.openstreetmap.org/wiki/Osmosis
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
|
# # 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
Apache2, virtueller Host
- Grundsätzlich ermöglichen, dass es virtuelle Hosts geben kann
- Den bisherigen virtuellen Host "default" definieren, damit wird ermöglicht, dass der Server wie bisher erreichbar ist
joe /etc/apache2/vhosts.d/00-default.conf <VirtualHost *:80> ServerName server.lummerland ServerAlias 192.168.115.38 server localhost DocumentRoot /srv/www/htdocs
</VirtualHost>
- Den neuen virtuellen Host "tile" definieren
wget http://tile.server/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
- http://wiki.openstreetmap.org/wiki/OnDemandTileServer
- http://gis.hsr.ch/wiki/HowTo_OpenStreetMap
- http://wiki.openstreetmap.org/wiki/Osmosis
- http://wiki.openstreetmap.org/wiki/Howto_real_time_tiles_rendering_with_mapnik_and_mod_python
- http://mapserver.org/introduction.html#introduction
- http://trac.mapnik.org/wiki/MapnikCodeSprint/MCS01/Results
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
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
postGIS
- http://postgis.refractions.net/
- http://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS
- http://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS20Ubuntu1110src
mod_tile
Source-Code OrgaMon
- Delphi OpenSource (Umrechnung X,Y in TileName) http://orgamon.de/websvn/filedetails.php?repname=OrgaMon&path=%2FPASconTools%2FOpenStreetMap.pas