Warum füllt Mapnik Flächen nicht sauber?

Hallo,

wir haben versucht, einzelne Regierungsbezirke mit Mapnik (nicht mit OpenLayers) einzufärben, aber es erscheint kein vollflächiger Bereich:

  1. Versuch: Färbt man nur die Regierungsbezirke (admin_level: 5, boundary: administrative) mit PolygonSymbolizer ein, fließt die Färbung teilweise über den Rand, an anderen Stellen fehlt ein Stück.

  2. Versuch: Färbt man alle Landkreise des Regierungsbezirks (admin_level: 6, boundary: administrative) mit PolygonSymbolizer ein, fehlen einzelne Teile. Zum Beispiel wird der Landkreis Berchtesgadener Land nicht eingefärbt. Ich habe extra noch mal sämtliche Grenzlinien der OSM-Relation 62712 überprüft, das Gebiet ist geschlossen. Könnte es evtl. ein Problem sein, dass die vom Landesvermessungsamt definierte Area eine “Exklave” hat, also eine zweite kleine Fläche außerhalb des Hauptgebiets (in der gelichen Relation)?

  3. Versuch: Färbt man Gemeinden etc. ein (admin_level: 7-10, boundary: administrative) mit PolygonSymbolizer ein, hat man fast alles erwischt (außer einem Stück BGL), dafür franst die Einfärbung über Bayern hinaus (siehe Bild).

Woran liegt das? Es sind doch lauter geschlossenen Polygone, die alle innerhalb von Bayern bzw. Oberbayer liegen. Warum checkt das der PolygonSymbolizer nicht. Oder was machen wirfalsch?

Beispielbilder: https://www.box.com/s/j38m8i143jwgzawalmbq

Ausschnittt aus dem Stylesheet:

<!-- Einfaerbung der ausgewahelten Region z.B. Oberbayern --> 
<Style name="selected_region">
    <Rule>
     &maxscale_zoom7;
     &maxscale_zoom8;
     &maxscale_zoom9;
     &maxscale_zoom10; 
     <PolygonSymbolizer fill="#104DEA"/>
  </Rule>
</Style>

<Layer name="admin-5678" status="on" srs="&osm2pgsql_projection;">
    <StyleName>admin-5678</StyleName>
    <Datasource>
      <Parameter name="table">
      (select way,admin_level
       from &prefix;_roads
       where "boundary"='administrative'
         and admin_level in ('5')
       ) as admin
      </Parameter>
      &datasource-settings-bayern;
    </Datasource>
</Layer>

Sicher? Wo kommen die Daten her? wie wurden die ausgeschnitten? welches Polygon? wie importiert?

anders gesagt: schaut euch erst mal eure DB an, welche Daten wirklich drin sind. Ich mache sowas mit QGIS.

Gerade bei “komischen” Ergebnissen im Randbereich bin ich immer sehr skeptisch. Dass mittendrin ein Teil fehlt, kann schon mal an “temporären Störungen” liegen, wenn gerade mal eine Grenze defekt ist.

Gruss
walter

Setzt Ihr die Kreisflächen aus den Gemeindeflächen zusammen und verliert dabei gelegentlich eine Gemeinde in Randlage? Ich hab mir nur mal ein Stück BGL angesehen, da fehlen z.B. die Gemeinden Schneizlreuth (Relation 941796) und Ramsau (941797)…

Die Ausfransung unten könnte die Gemeinde Erl (Relation 2168241) sein, die Euch versehentlich von Österreich nach Deutschland gerutscht ist.

In dem Bild fehlen im BGL die Gemeinden Schneizlreuth und Ramsau, sowie der Staatsforst Eck bei Berchtesgaden (gemeindefreies Gebiet). Dafür wurde Großgmain (Österreich) dazu gezeichnet.

Ich hab mir mal chatters und meine Beispiele angeschaut (*): Alles liegt im richtigen Land, an der Stelle ist die OSM-Datenbank zur Zeit konsistent.

Ich glaube aber trotzdem, dass Walter die richtigen Fragen stellt und Mapnik unschuldig ist. Da wird ja nichts unsauber gezeichnet, sondern exakt gezeichnete Gebiete wechseln einfach über die Grenze.

Grüße, Max

(*) Datenbank im osm2pgsql-Schema, Abfrage mit “select name from polygon where admin_level=‘8’ and st_contains((select way from polygon where osm_id=-2145274),way)”, bei BGL hab ich nur nach der grösseren der beiden Flächen abgeprüft, Eck hat admin_level=‘10’.

Die Daten sind von GeoFabrik und zwar der Export für Bayern.
Was mich wundert ist, dass die Grenzlinien ja alle gezeichnet werden, d.h. die ways sind richtig drin. Ich habe nur Probleme mit dem Füllen. Wir sind die Polygone für das Füllen mit den Relationen verknüpft?

Im heutigen Extrakt der Geofabrik fehlt der Weg 65623577, das ist ein Stück Grenze von Ramsau. Sicher fehlt noch mehr, ich hab beim ersten Weg aufgehört zu suchen.

Die Geofabrik schneidet die Daten mit einem vereinfachten Polygon aus, das fast auf der Grenze liegt, aber halt nur fast. Da fehlt dann manchmal ein Stück, wodurch die Polygone nicht geschlossen sind. Dafür rutschen andere mit rein, die eigentlich nicht zu Bayern gehören.

Ich würde ein größereres Stück nehmen und selber schneiden, da weiss man was man hat. (gabs nicht irgendwo ein “DE+”-Extrakt mit ein paar km Rand um die Grenzen?)

Grüße, Max

Nachtrag: Ich hab mal ein Bild dazu gemacht. Der blaue Strich ist das vereinfachte Polygon, das die Geofabrik zum ausschneiden verwendet. Die meisten Grenzstücke werden damit erfasst. Das eine aber nicht, weil das vollständig ausserhalb des Bereichs des Polygons liegt:

Das klingt nach einer sehr plausbilen Erklärung. Ich werd’s morgen gleich mal testen. Vielen Dank!

May hat recht, das Polygon ist (war) fehlerhaft.

Das ideale Geofabrik-Ausschnitt-Polygon hat folgende Eigenschaften:

  • nicht zu viele Punkte - irgendwo zwischen 500 und 1000 vielleicht, je weniger desto besser
  • schmiegt sich moeglichst dicht an die echte Grenze an - wobei in unbewohntem Gebiet eher mal eine “Abkuerzung” erlaubt ist als z.B. mitten in Ulm
  • enthaelt die echte Grenze aber immer zu 100%

Diese Anforderungen sind leicht gegensätzlich. Ich habe ein Programm, mit dem ich die Polygone aus Relationen erzeugen kann, aber da muss man dann doch immer als Mensch nacharbeiten - das Programm probiert verschiedene Vereinfachungs-Schritte, um ein Polygon von geeignerter Groesse zu finden, aber es weiss leider nichts darueber, wo Vereinfachungen eher erlaubt sind und wo weniger. Daher kann ich die Ausschnittsgrenzen nicht einfach so jeden Tag automatisch aus Relationen berechnen lassen.

Wenn die Geofabrik-Ausschnitte lueckenhaft sind, dann kann das einen von drei Gruenden haben:

  • einige Laendergrenzen sind noch von anno dazumal aus nicht-OSM-Daten erzeugt
  • es kann ein Fehler bei der manuellen Bearbeitung sein
  • es kann sein, dass sich die Relation veraendert hat, seit ich sie herangezogen habe, um das Ausschnittspolygon zu erstellen

Ich habe den Bayern-Ausschnitt jetzt mal repariert. Wenn jemandem sonst noch irgendwo Fehler auffallen, kann er/sie das gern melden; am liebsten nehme ich natuerlich fix und fertig korrigierte Polygone entgegen (Arbeitsschritte: .poly-File von Downloadserver holen, poly2osm-Skript drauf laufen lassen, entstehendes .osm in JOSM bearbeiten, dann osm2poly-Skript, fertig).

Wenn die Geofabrik-Ausschnitte einen “completeRelations”-Modus haetten (bei osmconvert heisst das glaub ich “complexWays” oder so), dann waer das alles kein Problem, dann wuerden solche ausserhalb liegenden Ways auch beruecksichtigt… aber daran muss ich erst noch arbeiten, ich muss dazu dem “history splitter”, den ich zur Erzeugung der Ausschnitte nehme, erweitern.

Auf der “State of the Map US” hab ich einen (englischen) Vortrag ueber den Downloadserver gehalten, falls jemand sich fuer ein paar Details interessiert - http://vimeopro.com/openstreetmapus/state-of-the-map-us-2013/video/68087540 das Video und http://www.geofabrik.de/media/2013-06-08-geofabrik-download-server.pdf die Folien.

Bye
Frederik

Hört sich super an, danke Frederik!
Gruß, Florian.

Das war die richtige Spur. Wir adressieren die Flächen nun direkt über die (negativen) Relations-Ids in der planet_ways-Tabelle von ganz Bayern. Jetzt’s sieht’s wunderbar aus!
Vielen Dank für Eure Hilfe!