OSM-Daten in PostGIS-Datenbank einlesen

Mit

osm2pgsql -U gisuser -d gis --slim Downloads/sachsen-latest.osm.pbf 

hat es nun funktioniert. Eigenartig aber, daß es vorher mit osmosis nicht funktioniert hat.

Hi, noch nicht ganz wach?
Deine DB ist mit osm2pgsql aufgebaut, wenn es dir gelingt, das mit osm2pgsql zu realisieren und sie ist mit osmosis aufgebaut, falls du das mit osmosis hinkriegen würdest. Derzeit hast du garnix. :wink:

Aha, rendern! Dann ganz eindeutig NICHT mit osmosis, denn dieses Schema wird für was anderes benötigt.

Also bleib auf der osm2pgsql-Schiene!

Gruss
walter

ps: wenn du Step 1 hinbekommen hast, melde sich nochmal. Einige Optionen bei osm2pgsql sind noch zu diskutieren. Hauptsächlich wegen der Performance.

Wie oben (#11) geschrieben, habe ich die Daten nun erfolgreich mit osm2pgsql importiert.

alles klar, hab ich überlesen. Gratuliere.

Fragen:

  • welchen Bereich in etwa willst du abdecken? Mehr als Sachsen?
  • wie oft willst du aktualisieren?
  • wieviel Memory und Cores hat dein Rechner?

Ansonsten viel Spass und Erfolg

Gruss
walter

  • Sachsen, Tschechien, Spanien, Kanaren. Ev. weitere Orte nach Bedarf. Ganz Europa verbraucht zuviel Speicherplatz, deshalb ist es vermutlich am einfachsten, die OSM-Daten mit osmosis zu mergen. Außerdem will ich Höhenlinien und Hillshades in der DB speichern.
  • Einmal im Jahr. Ich glaube, daß sich Straßen nicht so schnell verändern.
  • 6 GB Ram, 240 GB SSD, 2 Cores.

Komische Mischung :wink:

ok, mit osmosis mergen und danach mit osm2pgsql importieren; dabei drauf achten, daß die Extrakte aus der gleichen Nacht sind. Obwohl, die Extrakte berühren sich ja nicht, da könnte es egal sein.

Prima, kein Update sondern neuer Import.
Ich empfehle bei osm2pgsql neben den üblichen Optionen noch --latlong --cache 4000 --number-processes 2

–latlong ist Geschmackssache (ich komme besser damit zurecht, wenn ich die Koordinaten so in der DB habe) und der Rest macht den Import etwas schneller.
Plane dein Style-File sorgfältig, sonst musst du mehrfach neu aufsetzen.

Gruss
walter

Was ist daran komisch? Auf dem Elberadweg bin ich in 2 Stunden in Tschechien. Und in Spanien bin ich oft im Urlaub.

Bis jetzt habe ich noch gar keine Sorgfalt walten lassen, sondern nur das osm2pgsql aus den Ubuntu-Paketen verwendet.

jo, wenn man Tschechien mit Tschetschenien verwechselt, kommt man schon mal in’s Grübeln :wink:

Gruss
walter

Soviele geographische Kenntnisse sollte ein erfahrener OSM-Nutzer doch schon haben :roll_eyes:

Hab ich doch: Aber wenn ich lese: “Sachsen, Tschetschenien, Spanien, Kanaren” komm ich gerade wegen meiner Grundkenntnisse der Geographie leicht ins Stutzen.
Aber wer nicht Lesen kann, muss büßen :wink:

Gruss
walter

ps: werde mal meinen “Kleinen Legastheniker” auffrischen müssen.

Außerdem will ich Höhenlinien und Hillshades auf der Karte darstellen. Zum Speichern von Höhenlinien in PostGIS habe ich eine Wiki-Seite gefunden http://wiki.openstreetmap.org/wiki/Contours#The_shapefiles_approach, zum Speichern von Hillshades noch nicht. Weiß jemand, ob das möglich ist?

Vielleicht… aber ich kenne nur Renderer, die die Schummerung als Grafik irgendwo gespeichert haben (als (geo)tiff z.B. oder schon vorbereitet als Grafik pro Kachel) und dann beim Rendern die Schummerung über (unter, zwischen…) das Kartenbild legen. Oder ganz getrennt Karte und Schummerung als zwei Layer ausliefern.

Würde mich wundern, wenn jemand Höhenwerte in eine DB stopft, nur um daraus dann die immer gleichen Werte abzufragen und in ein Bild zu verwandeln.

Grüße, Max

Wie maxbe schon angesprochen hat ist hier dei Frage nach der Sinnhaftigkeit zu stellen. Bei dem normalen osm Mapnikstyle werden zum Beispiel Küstenlinien auch bereits vorverarbeitet verwendet.
Und vor allem im Flachland könnte es mit den Linien schwierig werden, wenn du dann nicht mehr in jeder Kachel einen referenzpunkt hast und der Renderere somit gar nicht weiß ob solch ein Objekt in seinem Bereich existiert.
Der Vorteil solcher höhenlinien in der Datenbank ergäbe sich nur dann wenn du bestimmte Objekte in Abhängigkeit der Höhe dartstellen oder anderweitig auswerten möchtest. Da sich die Daten sonst nur wenig ändern würde ich eher zu einmal fertig aufbereiteten Daten tendieren.

Eine Anleitung für Hillshades findest Du im Wiki unter http://wiki.openstreetmap.org/wiki/Shaded_relief_maps_using_mapnik

Höhen

Das Speichern von Höhenlinien in der DB ist möglich - es ist aber auf Dauer nicht zu empfehlen. Denn dann mischt Du die OSM-Daten, die Du regelmäßig updaten wirst, mit Höheninformationen, die sich niemals ändern werden. Dadurch wird alles komplizierter und die DB unnötig größer und langsamer. Ich habe das früher so gemacht und bin dann auf shapefiles umgestiegen. Die Shapefiles werden einmalig berechnet und können von mapnik genauso in einem Sitz mitgerendert werden als ob die Daten in der DB stünden.

Hillshades

Hillshades funktionieren nicht mit der DB. Sowohl die Höhendaten als auch die berechneten Hillshades sind flächige Grafiken. Die Hillshades müssen auf jeden Fall mit einem externen Tool im Voraus berechnet werden. Aber eben auch nur einmal da sich die Höhen nicht ändern.

Um die Karte und die Hillshades/Höhenlinien zusammenzubringen gibt es meherere Methoden:

  • eigene Tiles für die Höhendaten erzeugen und als zweite Map-Layer im Browser darüberlegen. So macht es z.B. die http://hikebikemap.de/. Funktioniert gut wenn man die Karte im Browser anschaut (Du kannst für den Anfang auch einfach das dort verwendete Hillshading mit Deiner Karte kombinieren), ist aber schlecht wenn man die Karte woanders verwenden will wie z.B. in Apps die nur mit einer Layer rechnen. Außerdem legt sich hier die Schummerung immer über alles drüber, so daß z.B. Straßen, Icons und Texte auch mit abgedunkelt werden.

  • Es ist möglich vorbereitete Hillshade-Grafiken mit Mapnik als eigene Raster-Layer zu integrieren und die Schummerung direkt mitrendern zu lassen. Allerdings ist das Ergebnis immer etwas unbefriedigend, da Mapnik sie nur als Grautöne drübermalen kann. Dadurch werden die Farben insgesamt blasser und der Gesamteindruck der Karte leidet.

  • Die aufwändigste Methode, die aber das beste Ergebnis bringt ist folgende: Der Mapnik-Style wird in zwei Hälften geteilt: Flächige Daten, die ein Hillshading bekommen sollen, und Linien, Icons und Texte, die nicht verändert werden sollen, werden separat gerendert. Die Schummerung wird ebenfalls in extra Tiles gerendert. Bei den Höhenlinien kannst Du Dir aussuchen ob sie einmalig mit der Schummerung oder mit den Straßen gezeichnet werden sollen. Die Schummerung wird nicht als Grauwerte sondern als abdunkelnde/aufhellende Alphawerte gerechenet (Anleitung unter http://wiki.openstreetmap.org/wiki/Hillshading_using_the_Alpha_Channel_of_an_Image)). Dadurch entstehen dann drei Layers, die entweder im Browser oder mit einem zusätzlichen Verarbeitungsschritt nach dem Rendern kombiniert werden. Ein Karte die so arbeitet ist die http://wiki.openstreetmap.org/wiki/TopOSM.

bye, Nop

PostGIS ab Version 2.0 unterstützt Raster-Informationen.

Man kann - und mMn sollte - die bereits gerasterten Hillshades und Höhenlinien selbstverständlich in einer PostgreSQL/PostGIS-Datenbank ablegen und von dort abrufen.
siehe http://postgis.net/docs/manual-2.0/using_raster.xml.html und http://postgis.net/docs/manual-2.0/RT_reference.html

Ob das allerdings für dein Privat-Projekt sinnvoll ist, mag ich nicht beurteilen.

Gruss
walter

Das verwendet man eher dazu, die Höhendaten abzulegen um damit zu rechnen, nicht die fertigen Hillshades. Man kann dann aus den Daten auch farbige Höhenschichten machen (sowas wie der Hintergrund der Cyclemap z.B.), oder die Schummerung auch mal schnell mit Beleuchtung aus Süden ansehen. Oder ganz ungrafisch einfach die Höhe an einer Koordinate ausgeben. Für reines Ausschneiden kleiner Stücke aus einem grossen Bild find ich das ganz schön überdimensioniert.

Grüße, Max

Ich hatte bis jetzt aus den SRTM-Daten Shapefiles erzeugt und als eigenen Layer gerendert. Der Nachteil ist, daß ich dann für jedes größere Gebiet einen eigenen Layer brauche. Kann man die SRTM-Dateien oder die Shapefiles mergen? Dann müsste ich nur einen Layer einbinden, der sich nie ändert. Das wäre vermutlich die einfachste Methode.

Die Seite http://wiki.openstreetmap.org/wiki/Hillshading_using_the_Alpha_Channel_of_an_Image)) ist leer.

Ich hab das da befolgt: http://wiki.openstreetmap.org/wiki/Shaded_relief_maps_using_mapnik
GeoTiffs mergen geht mit gdal_merge.py (*)

Shapefiles könnte man mit ogr2ogr zusammenbasteln (steht hier), hab das aber selbst noch nie gemacht, die Höhenlinien hab ich in der DB, vermute aber, Nop hat recht damit, die nicht in der DB zu haben :wink:

Mach die Klammer am Ende weg: http://wiki.openstreetmap.org/wiki/Hillshading_using_the_Alpha_Channel_of_an_Image

Edit: () Ich bin mir aber nicht sicher, was passiert, wenn zwischen Spanien und Sachsen keine Daten vorhanden sind. Bei Shapefiles sollte das kein Problem sein, aber ob ein Geotiff damit funktioniert, weiss ich nicht…*

Mit Mapnik verwendbar?

Eigentlich egal, dürfte in jedem Fall langsamer sein als Grafiken im Filesystem.

bye, Nop

möglicherweise: Mapnik kann gdal - und gdal kann postgis raster: http://trac.osgeo.org/gdal/wiki/frmts_wtkraster.html

wird wohl so sein - aber Spaß machen würde es definitiv :wink:

Ich könnte mir vorstellen, daß eine richtig große Anwendung damit besser zu managen sein könnte.

So, Schluß mit träumen, ran an die Landstraßen.

Gruß
walter