Es wird Zeit, dass ich mich endlich etwas genauer mit OpenStreetMap beschäftige. Weniger mit der Erfassung der Daten für das Projekt (zumindest vorerst), sondern eher mit der Nutzung der Daten, mit der Infrastruktur usw.
Gleichzeitig benutze ich den Ort hier als Notizsammlung, um Infos zu sammeln und Gelerntes zu dokumentieren. Daher auch als buch, als Blog müsste ich die Einträge dauernd ändern. Mal sehen wie gut das klappt...
OSM-Daten können beim Projekt selber oder bei einigen anderen heruntergeladen werden. Ein Anbieter ist z.B. die Geofabrik, die OSM-Daten nicht nur im Originalformat sondern auch als Shape-Dateien anbietet und das ganze jeweils für verschiedene räumliche Bereiche (Weltweit, Staaten, Bundesländer usw.).
Die Shape spiegeln allerdings nur einen Ausschnitt der enthaltenen Infos wieder, außerdem will ich ja tiefer einsteigen. Also die Originaldaten herunterladen und mal weiterschauen.
OSM-Daten liegen als XML-Dateien vor, für meine Zwecke - Verarbeitung in verschiedenen GIS-Systemen - müssen die Daten erst noch konvertiert werden.
Mögliche Konverter sind
OSM-Daten liegen als XML-Dateien vor, für meine Zwecke - Verarbeitung in verschiedenen GIS-Systemen - müssen die Daten erst noch konvertiert werden.
Mögliche Konverter sind
Hinweis: Eine gute (englische) Beschreibung findet sich im Geoserver Blog!
Der Konverter osm2pgsl konvertiert die XML-Daten nach PostgreSQL/Postgis.
Eine Windows-Version liegt unter http://tile.openstreetmap.org/direct/osm2pgsql.zip, ansonsten empfiehlt sich das selber kompilieren, die Quellen liegen im OSM subversion-repository.
Verfahren mit osm2pgsl
DB anlegen
Einige Hinweise stehen in der Mapnik-Doku unter http://wiki.openstreetmap.org/index.php/Mapnik
und http://wiki.openstreetmap.org/wiki/Mapnik/PostGIS
Daten einlesen:
* Datei default.style muss im aktuellen Verzeichnis liegen
* Datenbank kann angegeben werden
* Benutzer muss Berechtigungen auf spatial-Tabellen haben
ALTER TABLE geometry_columns OWNER TO username;
ALTER TABLE spatial_ref_sys OWNER TO username;
es werden Einträge in den Tabellen vorgenommen, sonst funktioniert es nicht
==================================
D:\daten\OSM>c:\Programme\osm2pgsql\osm2pgsql.exe -U osm -W -d osm niedersachsen.osm.bz2
osm2pgsql SVN version 0.55-20081113 $Rev: 10464 $
Password:
Using projection SRS 900913 (Spherical Mercator)
Setting up table: planet_osm_point
SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, 'POINT', 2 );
failed: ERROR: permission denied for relation geometry_columns
CONTEXT: SQL statement "DELETE FROM geometry_columns WHERE
f_table_catalog = '' AND f_table_schema = 'public' AND f_table_n
ame = 'planet_osm_point' AND f_geometry_column = 'way'"
PL/pgSQL function "addgeometrycolumn" line 102 at EXECUTE statement
SQL statement "SELECT AddGeometryColumn('','', $1 , $2 , $3 , $4 , $5 )"
PL/pgSQL function "addgeometrycolumn" line 4 at SQL statement
Error occurred, cleaning up
==================================
neustart nach Berichtigung der Berechtigung
D:\daten\OSM>c:\Programme\osm2pgsql\osm2pgsql.exe -U osm -W -d osm niedersachsen.osm.bz2
osm2pgsql SVN version 0.55-20081113 $Rev: 10464 $
Password:
Using projection SRS 900913 (Spherical Mercator)
Setting up table: planet_osm_point
Setting up table: planet_osm_line
Setting up table: planet_osm_polygon
Setting up table: planet_osm_roads
Mid: Ram, scale=100
Reading in file: niedersachsen.osm.bz2
Processing: Node(1684k) Way(261k) Relation(1k)
Node stats: total(1684905), max(316719522)
Way stats: total(261296), max(28806765)
Relation stats: total(1365), max(56138)
Writing way(41k)
D:\daten\OSM>
Java-Komandozeilenanwendung, übersetzt von/in viele Formate (xml, mysql, postgresql)
Schema anlegen in PostgreSQL, script liegt unter \script\pgsql_simple_schema.sql
osmosis --read-xml file=d:\daten\osm\niedersachsen.osm.bz2 --write-pgsql host="localhost" database="osm" user="osm" password="osm"
Die (De-)kompressionsroutinen sind ziemlich langsam, im Zweifelsfall besser externes bzip2 benutzen
OSM-Daten werden mit verschiedenen Hilfsmitteln visualisiert, mapnik, osmarender usw.
Für mich als GIS-Menschen will ich die Daten aber in verschiedenen Systemen anschauen und/oder weiterverarbeiten, z.B. mit Quantum GIS.
Verschiedene Versuche mit verschiedenen Datenmodellen.
Daten über osm2pgsql
Visualisierung in Quantum GIS:
Quantum GIS benötigt oid oder eindeutigen Index zu Darstellung.
also import nochmal
(siehe tabellen.sql, import dann mit -p nds_osm und -a, sonst werden Tabellen wieder gelöscht!)
einfacher: unique index erzeugen:
create unique index planet_osm_polygon_uid
on planet_osm_polygon
using btree(osm_id);
usw.
Ein unique Index funktioniert problemlos bei Tabellen, nicht aber bei Views. Dort hilft nur(?) eine oid.
=== Verarbeitung ===
Generell sollten einige Indizes gesetzt werden, wenn die Daten weiter verarbeitet
oder visualisiert werden sollen.
create index nds_osm_polygon_building
on nds_osm_polygon
using btree(building);
create view v_buildings as
create view v_buildings as
select oid,* from nds_osm_polygon where building='yes';
alter table v_buildings owner to osm;
-- oid wieder wegen qgis...