ich will Europa in eine Postgresql Importieren. Ich habe gesehen das man bei geofabrik PBF Dateien runterladen kann und dann mit Osmosis verschiedene Daten extrahieren.
Und genau da komme ich jetzt nicht weiter. Ich habe z.B. mit erstmal nur Deutschland geladen: germany-latest.osm.pbf
Ich würde jetzt gerne, ab Bundesländer bis Städte die in eine Postgresql Datenbank laden. Und zwar würde ich gerne auch eine Hierarchy in der Datenbank aufbauen. Hier ein Beispiel:
Wichtig dabei ist admin_level und der rpath, So weiß ich dann per SQL das Bielefeld in Regierungsbezirk Detmold ist.
Also auf jeden Fall osm2pgsql statt osmosis für den Import nehmen, wie toc-rox schon gesagt hat. Wenn Du nur die Grenzen brauchst und sonst nichts, dann kannst Du auch das “style-File” von osm2pgsql anpassen, so dass nicht alle Gebäude usw. auch importiert werden. Danach musst du mit Postgresql-Geometrieoperationen arbeiten, zum Beispiel könntest Du wie folgt erstmal die Grenzen in eine separate Tabelle ziehen:
SELECT osm_id,name,admin_level,way
INTO grenzen
FROM planet_osm_polygon
WHERE boundary='administrative';
Index erstellen, damit es keine drei Tage rechnet:
CREATE INDEX grenzen_geom ON grenzen USING GIST(way);
und unter der Annahme, dass Dein “rpath” einfach eine durch Kommata getrennte Liste aller darüberliegenden Verwaltungseinheiten ist
ALTER TABLE grenzen ADD COLUMN rpath VARCHAR(255);
UPDATE grenzen a
SET rpath = (
SELECT string_agg(b.name, ',' ORDER BY admin_level desc)
FROM grenzen b
WHERE st_contains(b.way, a.way)
AND a.admin_level::integer > b.admin_level::integer
);
Leider sind im rpath die Namen drin, ich brauche Komma separiert die Id’s. Und warum ist die osm_id negativ? Hat das ein Grund?
Des Weiteren zeigt er mir way als POLYGON. Ich brauche aber von der Stadt die Latitude und Longitude. Kriege ich diese auch irgendwie raus?
Wenn ein zusätzlicher Node gesetzt ist, wären das die gesuchten Wert. Ansonsten muss du eine fiktive Stadtmitte (wenn es das ist was du suchst) errechnen.
Trenne den Import der Rohdaten mittels osm2gpsql von deren weiteren Verwendung. D.h ändere so wenig wie möglich am Style-File und mach alle Umwandlungen später.
Du wirst immer wieder in die Situation kommen, dass dir Datenfelder in dem Import fehlen, da du sie vorher einfach nicht für wichtig gehalten hast. Und dann du mußt das Style-File ändern und von vorne anfangen (:
Muttu halt die PostGIS-Befehle anpassen.
Ja, alles hat hier seinen Grund
Beim Import mit osm2pgsql werden aus Ways (genauer gesagt, geschlossenen Ways) Polygone. Und aus Relationen, die geschlossene Flächen definieren (Z. B. Grenzen) werden auch Polygone. Um diese voneinander zu unterscheiden, werden die Ids von Polygonen, die aus Relationen stammen, negativ gesetzt.
Das ist erstmal ok, ich würde aber noch was für die Tags tun. Ich verwende da noch --hstore-all --extra-attributes
Dafür musst du aber noch mit psql 1x “create extension hstore;” eingeben, damit die Hstores auch erstellt werden können.
Vielen Dank euch schon mal. Ich glaube ich komme langsam der Sache näher.
postgis ist ein Addon für postgresql um die ganzen Maps Sachen Berechnungen zu machen.
Ich habe jetzt folgendes gemacht:
SELECT poly.osm_id,poly.name,poly.admin_level,
ST_X(ST_CENTROID(poly.way)) AS long,
ST_Y(ST_CENTROID(poly.way)) AS lat
FROM planet_osm_polygon poly
WHERE poly.boundary='administrative' and poly.name = 'Bielefeld';
Ich habe ja germany-latest.osm.pbf importiert. Wenn ich jetzt Europa importieren will, muss ich die vorhanden Tabelle leeren/löschen? Ich kann ich einfach Europa importieren und für Deutschland sind die Einträge dann nicht doppelt drin?
Und wie sieht es mit Mehrsprachigkeit aus was die Städte und Länder Namen angeht? Kriegt man irgendwie auch Informationen raus?