Vorsicht! Anfänger! OSM-Europa nach PostGIS - Spanien fehlt

Hallo,

ich bin neu hier und muss mal eine Frage loswerden, an der ich gerade verzweifle. Ich hoffe, es ist keine dumme Frage, aber wenn doch, seid gnädig mit mir.

Ich habe bei Geofabrik einen Extrakt für Europa geladen (europe-latest.osm.pbf) und in eine Postgres-DB mit PostGIS-Extension geladen. Dabei bin ich so vorgegangen, wie es diverse Anleitungen vorgegeben haben.

  1. Mit osmconvert habe ich die Datei von pbf nach o5m konvertiert
  2. Mit osmfilter habe ich einen Filter angewendet (–keep=“type=boundary”) um die Datenmenge zu reduzieren
  3. Mit osm2plsql habe ich die gefilterte Datei dann in die Datenbank geladen.

So weit so gut. Daten sind da, ST_Intersect-Suche funktioniert. In den meisten Fällen…

Bei Spanien ist mir aufgefallen, dass mir die Daten für den admin_level 2 fehlen. Level 4 und höher ist da. Ich habe mich jetzt zwei Tage durchgegooglet, finde aber überhaupt nichts dazu. Ich habe mir auch die Extrakte für Spanien geladen und zusätzlich per osm2plsql --append in die Datenbank geladen. Doch leider ist kein admin_level-2-Eintrag in Sicht.

Kann mir jemand auf die Sprünge helfen?

Danke vorab!
Jens

https://www.openstreetmap.org/relation/1311341#map=5/36.156/-6.899

Hallo,

Danke für den Link. An der Stelle war ich auch schon mal und hatte mir dann eine XML-Datei von den Außengrenzen Spaniens erstellen lassen. Diese Datei habe ich dann versucht, mit osm2pgsql zu importieren. Das ist fehlerfrei durchgelaufen … aber trotzdem sehe ich keine Veränderung in der Datenbank.

Ich hatte daraufhin noch folgendes versucht:

  1. Nur die Spanien-Datei im Modus osm2pgsql --create zu importieren. Kein Erfolg.
  2. Die Dateien europe-latest und meine Spanien-Datei mit osmconvert zu mergen. Die Zieldatei ist dann geringfügig größer als wenn ich nur die europe-latest konvertiere. Nach dem Laden in die DB fehlt Spanien trotzdem.

Ich erwarte eigentlich einen Eintrag in der Tabelle PLANET_OSM_POLYGON, die von osm2pgsql erstellt und berechnet wird.

Grüße

Du solltest mal erläutern was dein eigentliches Ziel ist. Möchtest du nur mit den Grenzen arbeiten?

Ja, sorry. Hätte ich vielleicht vorher schon mal erklären können.

Ich bekomme permanent große Mengen an Geopositionen in Form von Längen-/Breitengraden und muss die über ein Reverse Geocoding in Land und Ort auflösen. Das Land hole ich mir aus dem admin_level 2 und den Ort aus den Leveln >= 4. Technisch mache ich das über eine Abfrage auf PLANET_OSM_POLYGON mit einem Intersect auf die Geopositionen.

Das ganze muss ich nur für Europa machen und habe mir deshalb lediglich das Extrakt europe-latest geladen und mit dem osmfilter auf Boundaries eingegrenzt, um die Datenmengen zu reduzieren.

Funktioniert alles super! Nur bei Spanien ist mir aufgefallen, dass der admin_level 2 fehlt. Alle anderen Level >= 4 sind vorhanden.

Ich hatte auch noch einmal alles platt gemacht und nur das Extrakt für Spanien geladen. Auch dann fehlt der admin_level 2. Auch ein Nachladen nur des Levels 2 aus Openstreetmap und importieren nach PostGIS bringt nichts. Mit “admin level 2 fehlt” meine ich übrigens, dass sich gar kein entsprechender Datensatz in PLANET_OSM_POLYGON befindet.

Hallo Jens,

da hast du wohl Pech gehabt. Ausgerechnet bei den ersten Versuchen das hinzukriegen schiebt man sowas natürlich auf Fehler in der eigenen Toolchain…

In der Tat war in den letzten Monaten immer wieder mal Spanien kaputt. Gestern gab es zwei offene Ringe. Oft wurden Inseln eingefügt, die schon schon innen liegen und somit nicht in die Relation gehören, dadurch kann die Fläche dann nicht mehr sicher zugeordnet werden.

Ich habe zwar einen Blick darauf - aber sicher gehen, dass alle Relationen in Ordnung sind, kann man nur, wenn man unmittelbar vor “Ladenschluss” bei der Geofabrik (also derzeit um 20:21 GMT) auf OSM alles durchrepariert bzw. nochmal getestet hat und in dem kurzen Zeitfenster bis zum Erstellen der Daily Changes der Geofabrik nicht doch noch was “kaputt gegangen wurde”. Ohne diesen Test ist immer was defekt, das geht über sämtliche admin_level, betrifft also einzelne Städte genauso wie ganze Regionen, die die Ortssuche genauer machen können müssen.

Gruß
Mario

Hallo Mario,

vielen Dank für die Info. Super! War schon am verzweifeln…

Darf ich noch drei Fragen loswerden?

  1. Du schreibst

Was bedeutet das für mich? Muss ich auf OSM etwas machen, wenn ich für mich vollständige Daten haben möchte? Oder liegt das gar nicht in meiner Hand?

Und dann noch zwei Fragen zu PostGIS und osm2pgsql - sofern du die überhaupt beantworten kannst.

  1. Bekomme ich die Spanien - Außengrenzen auch per simplen Insert in die PostGIS-Tabelle? Oder geht das nicht so einfach, wie ich mir das vorstelle, weil alle Beziehungen zu Nodes etc. berücksichtigt werden müssen und auch die osm-ID passen muss?

  2. Ich glaube inzwischen genug über osm2pgsql gelesen zu haben, um zu verstehen, dass im Append-Modus nur diff-Dateien verarbeitet werden können. Wäre denn in so einer diff-Datei dann auch die Spanien-Außengrenze mit drin, vorausgesetzt alles ist repariert und ich habe die Datei im richtigen Moment gezogen und zufälligerweise fällt Weihnachten auf Ostern… :wink:

Danke und Grüße,
Jens

Die OSM Daten sind halt ständigem Wandel unterworfen, und gerade (politische) Grenzen werden oft versehentlich verändert oder auch ungültig gemacht, Dann fehlt irgendwo ein Landkreis oder evtl. auch mehrere Staaten. Dazu kommt dann noch, dass Grenzen auch umstritten oder gar umkämpft sein können. Eine mögliche Lösung wäre, die Daten eines bestimmten Tages zu nehmen und dann alle offensichtlichen Fehler zu beheben, also nicht geschlossene Ringe. Das kann man in einer eigenen Datenbank recht leicht machen, weil man keinen Konflikt befürchten muss.

Hallo Jens,

zu 1.:
Ja, da muss man auf OSM etwas machen. Das erfordert eine Möglichkeit fehlerhafte Grenzen quasi in Echtzeit ausfindig zu machen, einen Editor, der die Fehlerstelle/-Art direkt anzeigen kann (z.B. JOSM) und Erfahrung im Umgang mit Multipolygonen/Grenzrelationen, weil bei Fehlbearbeitungen von Way-Elementen noch etliche andere Relationen in Mitleidenschaft gezogen werden können.

Darum kümmere ich mich gelegentlich (also so, dass es zeitlich mit den Daten der Geofabrik übereinstimmt). Ich kann ja Bescheid geben, wenn die Grenzen meiner Meinung nach in Ordnung sind.

zu 2.:
Ich kenne mich mit Datenbanken nicht aus. Aber wenn die IDs die gleichen wie in OSM sind, ist das kein Problem. Aber: Wenn man glaubt, bei Spanien war nur die Relation kaputt und man spielt diese separat ein, kann auch ein Segment und dessen Nodes in der Datenbank fehlen, weil dies erst später ergänzt wurde (missing segment), Oder aber ein Segment wurde geändert und passt zu den anderen beteiligten Relationen, nur eben Spanien nicht, dann macht man sich die anderen Relationen kaputt, wenn man nur Spanien mit korrekten Daten überschreibt.

zu 3.:
Du filterst die Daten für die Datenbank. Das funktioniert so nicht mit Aktualisierungen. In den Aktualisierungen sind nur die veränderten Einzelelemente drin und die müssen ab Zeitstempel der lokalen Erstdaten lückenlos eingespielt werden und die lokalen Erstdaten müssen vollständig - ungefiltert - sein. Denn wenn nun z. B. ein Grenzsegment gelöscht, und stattdessen ein vorhandenes Segment anderer Herkunft (also nicht administrative, eine Straße usw., deswegen früher herausgefiltert) eingesetzt wird, fehlt dieses und dessen Nodes. Und man müsste neu filtern, weil in den Diffs ALLE irgendiwe veränderten oder hinzugekommenen Elemente drin sind.

Wenn die Daten nur einmal angelegt werden sollen, funktioniert Gerds Vorschlag in #8 hervorragend.

Grüße
Mario

Fuer mich klingt das nach: Die Geodaten sind mehr oder weniger statisch. Sprich mein Ansatz wäre: Bis zum Filtern alles so machen wie du es gemacht hast. Dann nach dem Filtern die Daten in jOSM zu öffnen und zu reparieren. Dann importieren in deine DB. Einmal im Jahr machst du dann ein Update.

Ansonsten muesstes du vermutlich die Europa komplett in deine DB laden und dann kannst du mit den diffs der Geofabrik diese regelmäßig aktuell halten.

Hallo,

die administrativen (und die postal_code-) Grenzen der Geofabrik/Europe von gestern abend sind in Ordnung.

europe-220818.osm.pbf (entspricht nur heute der europe-latest.osm.pbf)

Beste Grüße
Mario