Eigener Kartenserver ? Selber Karten in PNG rendern?

Hallo,

besteht die Möglichkeit selber einen Kartenserver aufzusetzen?
Mir schwebt vor, die Datenbank-Daten von NRW von OpenStreetMap herunterzuladen und selber
einen Mapnik-Server aufzusetzen?! Das würde sich aus dem Grund lohnen, da ich in einem System
arbeite, das keinen Internetzugang besitzt. (Derzeit lade ich die Kartenkacheln als PNG vom Server herunter).

Gibt es eine Anleitung oder ein HowTo um einen solchen Server aufzusetzen?
Ich bin zwar Programmierer und kenne mich mit Datenbanken aus, habe hierzu jedoch
noch nichts gefunden.

Vielen Dank

Greets

Byte

Ja, gibt es:
http://wiki.openstreetmap.org/wiki/User:Ajoessen/Postgis
http://wiki.openstreetmap.org/wiki/User:Ajoessen/Mapnik
http://wiki.openstreetmap.org/wiki/User:Ajoessen/myMapnik

Gruß,
ajoessen

Wenn Du schon so fragst wird Dir das vermutlich zu kompliziert sein.
Daher vielleicht noch als Hinweis: http://wiki.openstreetmap.org/wiki/DE:Kosmos

Es ist ein enormer Aufwand, selbst einen Kartenserver aufzusetzen, so 1-2 Wochen wenn man sich nicht schon auskennt. Besonders unter Windows, da ist IMHO ein wichtiges Tool (osm2pgsql) derzeit überhaupt nicht verfügbar.

Eine einfachere Alternative ist Kosmos, oder die Kombination Map Composer und Kosmos.

bye
Nop

wenn man die Standard Rendering Regeln akzeptiert, kann man mit dem Kosmos Nachfolger Maperitive mit 3 Befehlen (clear-map, load-source, generate-tiles) alle gewünschten Tiles in einem Rutsch rendern. Funktioniert unter Windows besser als unter Linux

Hier noch eine Sammlung:

http://wiki.openstreetmap.org/wiki/Creating_your_own_tiles

PS: wird http://wiki.openstreetmap.org/wiki/Maps_on_a_Stick noch aktiv angeboten??? oder ist das Projekt eingestellt?

Von den Rendering Reglen wüsste ich fast keine Einschänkungen!!!

Es lassen sich auch Pyton-Scripts einbinden.

Mit FOR und IF läßt sich alles noch nach der Definition weiter verfeinern…

Einzig was noch etwas schwach ist sind die Linienarten und Ende/Anfang derselben (z.B: Linie mit abgeschrägtem Anfang/Ende für Tunnel oder so …).

Gehen denn inzwischen asymetrische Linien mit einem Renderer?

Wie kommst du darauf?
http://tile.openstreetmap.org/osm2pgsql.zip
tuts nach wie vor, und läuft bei mir ohne murren unter Windows XP. Lediglich bei ganz Deutschland/Europa/Welt kann man Kapazitätsprobleme bekommen. Dann muß man eben kleinere Teilbereiche rendern.

Ausserdem will der OP ja keinen eigenen Server, sondern nur die Tiles in der gewohnten Baumstruktur.

Mit erheblichen Abstrichen in der Ästhetik, ja.
Mapnik ist nun mal ne Ecke “intelligenter”. Und wenn man das Kartenbild vom Browser so gewohnt ist, will man das auch selber machen können.

gruß,
ajoessen

Was verstehst du darunter?

Mit Maperative kann man die Linien versetzten.

Ein Weg/Strasse normal einzeichnen und die Teile die z.B Cyle sind rechts danneben eine halbtransparente Linie in Türkis oder so… gleichzeitig könnte man noch auf der linken Seite eine halbtransparente Linie einzeichen wenn es noch ein Wanderweg währe …

Hi,

hätte nicht gedacht, dass das Aufsetzen eines Kartenserver 1-2 wo dauert. Wäre da den Anleitungen gefolgt.

Hatte es mit Maperative versucht.
Habe mir die NRW.osm heruntergeladen (3GB) (da ich einige Städte und Kreise benötige). Wollte sie dann in Maperative laden um die Tiles zu rendern.
Das Laden der NRW.osm bricht jedoch schon ab.

Gibt es hier eine Möglichkeit ?? Was mache ich falsch??

Dann dachte ich noch, dass ich eine Kreisgrenze farbig darstelle und direkt in die Kacheln rendern lasse…

Ansonsten werde ich es anhand der Anleitungen versuchen einen Server aufzusetzen…

Greets

Byte

Ja, das ist eindeutig zuviel für ein Programm wie Maperitive. In der Größenordnung ist eine Datenbank um Längen besser.

Die Grenzen kannst du dir später nach Belieben anders darstellen als im Standardstil. Dazu muß der aber erst mal laufen.

Am besten nimmst du erst mal einen kleineren Regierungsbezirk. Wenn der läuft, kannst du dich an ganz NRW rantasten. Der NRW-Import dauert bei mir etwa 4 Stunden.

Gruß,
ajoessen

Ok, also führt kein Weg an dem Kartenserver vorbei.

Ich werde mich vermutlich nochmal melden müssen.

Gibt es denn gute Anleitungen (Step by Step).
Ich möchte zunächst, dass es genau wie
bei Mapnik aussieht.

Gruß

Andy

Nimm die Links aus Posting Nr. 2

Gruß,
ajoessen

Wenn du es Profesionell aufziehen willst nicht!

Wenn du es einfach haben willst geht es sicher auch ohne - wenn es um ein begrenztes Gebiet geht bzw. Speicherplatz dafür ausreichend vorhanden ist und nur gelegentlich neu Renderst.

Das Zerteilen geht recht einfach z.B. mit pbftoosm

pbftoosm -h=1000 -b=7.684,48.872,9.191,50.114 --drop-history -i=C:\germany.osm.pbf > C:\extrakt.osm

Ein weitere Möglichkeit ist möglichst viel aus den OSM-Rohdaten rausschmeisen deshalb auch --drop-history mitverwendet weil beim Rendern dies nicht genutzt wird und dir nur Speicherplatz kostet!

Weiter reduzieren läßt sich die ganze Geschichte mit

osmconvert
und
osmfilter

osmconvert --drop-history --drop-version C:\germany.osm.pbf --out-o5m> C:\extrakt.o5m
o5mfilter.exe C:\extrakt.o5m --keep=“building=yes” >schwarzplan.osm

Hier dasselbe --drop-history --drop-version nur die wirklichen Infos drinnlassen beim osmfilter wird dann noch alles andere ausser “building=yes” rausgeschmissen damit geht sogar ganz Deutschland auf einmal in Maperetive zu laden.

alle Programme findest du in der wiki.openstreetmap.de und laufen ohne irgendwelche installationen.

Allerdings genug Hauptspeicher kann man nie haben, die oben angegebene Boundingbox (-b=7.684,48.872,9.191,50.114) benötigt ca. 4GB Hauptspeicher in Maperative - allerdings lässt sich (bei genügend Hauptspeicher) Maperative mehrmals starten und parallel Rendern was effektiver ist als den Bereich zu vergößern = je größer umso langsammer wird gerendert! Sinnvoll ist bei soviel Hauptspeicherhunger sin natürlich 64Bist-Systeme!!!

Hallo,

vielen Dank für die vielen Tipps.
Also ich habe die Anleitung aus Posting 2 Links 1 und 2
(http://wiki.openstreetmap.org/wiki/User … en/Postgis
http://wiki.openstreetmap.org/wiki/User:Ajoessen/Mapnik))

befolgt. So richtig verstanden habe ich natürlich nicht, was ich da gemacht habe.

Ich habe daher einige Fragen:

  1. ich versuchte nun das Script: generate_tiles_multiprocess.py zu starten.
    ich habe es wie folgt angeglichen:
    #-------------------------------------------------------------------------

    Change the following for different bounding boxes and zoom levels

    Start with an overview

    World

    tile_dir = “D:\OSM\mapnik\mytiles\”

    minZoom = 8
    maxZoom = 14
    bbox = (6.4514,50.7141,7.0349,51.0703)
    render_tiles(bbox, mapfile, tile_dir, minZoom, maxZoom, “Mein Layer”)

    Leider wirft er mit bei bbox= … eine exception ?!
    Wenn ich das richtig gesehen habe, kommen doch hier WGS84 Koordinaten rein, oder doch Merecator?

  2. Wie kann ich nun von Zeit zu Zeit ein Update der Kartendaten fahren?
    Muss ich jedes mal die gesamte nordrhein-westfahlen.osm neu herunterladen, dann wieder 4 Std. in die Datenbank
    laden und dann wieder alle Schritte ab http://wiki.openstreetmap.org/wiki/User … en/Postgis → Geofabrik-Extrakt mit osmosis in Datenbank laden
    fortführen ???

  3. Wie kann ich die Daten für ein Update bereinigen, welche Datenbanken muss ich löschen ??

  4. Wenn ich eine Kreisgrenze farbig in die Tiles einrendern möchte, kann ich das bereits hier irgenwie machen? Ein Layer hinzufügen??
    eine Grenze ist ja eine Relation, wenn ich da richtig liegen…

  5. Kann ich die Datenbank auch als Kartenserver über OpenLayers lokal ansprechen, so dass ein Rendern nicht notwendig ist ?

EDIT: Beim Start von generate_image.py bekomme ich die Fehlermeldung:
Traceback (most recent call last):
File “D:\OSM\mapnik\generate_image.py”, line 42, in
mapnik.load_map(m,mapfile)
RuntimeError: PSQL error:
FEHLER: Spalte »addr:housename« existiert nicht
LINE 2: (select way,“addr:housename” from planet_polygon where…
^
Full sql was: ‘select * from
(select way,“addr:housename” from planet_polygon where “addr:housename” is not null and building is not null
union
select way,“addr:housename” from planet_point where “addr:housename” is not null
) as housenames
limit 0’
(encountered during parsing of layer ‘housenames’)
???

Sorry, ich weiß sind viele Fragen auf einmal, aber ich würde es gerne verstehen!

Danke

Byte

Ging mir beim ersten Mal nicht anders. Zumal meine Anleitungen meist auf Englisch waren, und nur vor linux-Kommandozeilenbefehlen wimmelten.

Mich wundert jetzt das tile-Verzeichnis. Bei mir steht da:


tile_dir = 'D:/Tiles/myMapnik/'

Funktioniert denn generate_image.py und generate_tiles.py?

Man kann auch minütliche Updates einspielen, aber die gibts nur von der ganzen Welt. D.h. im Laufe der Zeit landet immer mehr in der Datenbank, was eigentlich nicht zu deinem Ausschnitt gehört.

Achso, ganz wichtig: mit osm2pgsql in die Datenbank laden, wenn du rendern willst!

Mit jedem Start von osm2pgsql wird die Datenbank automatisch gelöscht. Es sei denn, man verwendet spezielle osmchange-Aufrufe.

Wenn das rendern läuft, kannst du im Abschnitt
http://wiki.openstreetmap.org/wiki/User:Ajoessen/myMapnik#Grenzen
nachlesen, wie das läuft.

Die Datenbank kann auch über Quantum GIS, Mapserver oder Geoserver angesprochen werden. Allerdings bekommst du dann erst mal einen Haufen Linen und Punkte und Fläcjhen zurück, die du dann mit Renderregeln in das umwandeln musst, was wie eine “richtiige” Karte aussieht.

Wie hast du die Daten importiert, mit osmosis oder mit osm2pgsql?

Bei ersterem werden die Daten nur “einfach” in die Datenbank gekippt, beim zweiten werden zusätzliche Spalten in den Tabellen erzeugt, die mapnik zum Rendern braucht.

Gruß,
ajoessen

Zum rendern hast du sicher osm2pgsql benutzt. Da ist ein update der Datenbank etwas schwieriger. Wenn dir täglich reicht, kannst du unter http://wiki.openstreetmap.org/wiki/Planet.osm/diffs einfach die diffs für alle fehlenden Tag runterladen und osm2pgsql vorwerfen. Dann wird er sie in die Datenbank integrieren. Wenn du das automatisieren möchtest und vielleicht sogar minütlich aktuell halten willst, schaust du am besten mal hier: http://wiki.openstreetmap.org/wiki/DE:HowTo_minutely_hstore#Diff_Imports
Nachteil dieser Methoden ist, dass die diffs immer Weltweit sind. Damit wird also dein Gebiet in der Datenbank allmählich größer als nur NRW.

Wenn du einfach nur Diffs importierst, dann musst du keine Daten löschen. Wenn du die Datenbank neuimportieren möchtest, reicht es auf jeden Fall alle Tabellen mit deinem Präfix löschen.

Wenn du die Kreisgrenzen in einen Extra Layer legen möchtest musst du dafür transparente Kacheln mit nur Kreisgrenzen rendern und diese kannst du dann mit Openlayers als optionalen Layer einbinden.

Was willst du aus der Datenbank mit Openlayers holen? Openlayers ist eigentlich dafür da die richtigen Bildchen für den gewählten Kartenausschnitt zu holen und anzuzeigen. Damit diese Bildchen entstehen musst du sie rendern.

Wobei das Einlesen der daily diffs auch schon einige Stunden dauert, da sie weltweit sind.

Das macht osm2pgsql schon von selber.

Gruß,
ajoessen

Hi,

also ich bin streng nach Deiner Anleitung (ajoessen), also mit osm2pgsql vorgegengen.

Einen Fehler konnte ich beseitigen. Ich kenne Python nicht und habe nun bemerkt, dass
er KEINE TABS mag! Habe sie nun entfernt.

  1. Nun läuft das generate_tiles_multiprocess.py mit der
    Meldung:
  1. Beim Start von generate_image.py bekomme ich die Fehlermeldung:
  1. Ich werde nur alle viertel bis halbe Jahre mal ein Update fahren.
    Daher werde ich, wenn ich das richtig verstanden habe die nordrhein-westfahlen.osm erneut
    laden und in deinem Super Tutorial (vielen Dank dafür!!) alles erneut ab dem Import der bz2 Datei ausführen ?! Richtig?

ALSO (bitte korrigieren, falls ich etwas falsch gemacht habe:
1. Geofabrik-Extrakt mit osm2pgsql in die Datenbank laden

  1. Datenbank für osmosis “simple-Schema” anlegen (obwohl die es ja schon gibt ?!)
  1. Geofabrik-Extrakt mit osmosis in Datenbank laden

Wäre das korrekt, oder ist beim Update etwas anders oder überflüssig ??

Vielen Dank

Greets

Byte