Mapnik: Grenzen in Deutschland (Kreise, Bezirke, etc.)

Hallo zusammen,

beim Rendern mit Mapnik ist mir aufgefallen, dass in Deutschland auch Kreis-, Bezirks- oder ähnliche Grenzen gerendert werden.
Diese Verwaltungsgrenzen findet man unter boundary=administrative mit verschiedenen Ausprägungen (admin_level).
In den gerenderten Tiles erscheinen dann die entsprechenden Linien, sowie die dazugehörigen Bezeichnungen der Kreise, Bezirke entlang dieser Linien.

Zum Rendern der Linien findet man im von mir genutzten, deutschen Stil (http://home.arcor.de/andre.joost/myMapnik.zip) folgende Passagen in der osm-de.xml:

Styles:

<Style name="admin-01234-casing">
   <Rule>
      <Filter>[admin_level]='2'</Filter>
      <MaxScaleDenominator>750000</MaxScaleDenominator>
      <LineSymbolizer stroke="#838c86" stroke-width="7" stroke-opacity="0.1"/></Rule>
    <Rule>
      <Filter>[admin_level]='3'</Filter>
      <MaxScaleDenominator>750000</MaxScaleDenominator>
      <LineSymbolizer stroke="#838c86" stroke-width="6" stroke-dasharray="4,2" stroke-opacity="0.1"/></Rule>
    <Rule>
      <Filter>[admin_level]='4'</Filter>
      <MaxScaleDenominator>3000000</MaxScaleDenominator>
      <MinScaleDenominator>400000</MinScaleDenominator>
      <LineSymbolizer stroke="#838c86" stroke-width="2" stroke-dasharray="4,3" stroke-opacity="0.2"/></Rule>
    <Rule>
      <Filter>[admin_level]='4'</Filter>
      <MaxScaleDenominator>400000</MaxScaleDenominator>
      <LineSymbolizer stroke="#838c86" stroke-width="3" stroke-dasharray="4,3" stroke-opacity="0.2"/></Rule>
</Style>
<Style name="admin-01234">
    <Rule>
      <Filter>[admin_level]='2' or [admin_level]='3'</Filter>
      <MaxScaleDenominator>50000000</MaxScaleDenominator>
      <MinScaleDenominator>6500000</MinScaleDenominator>
      <LineSymbolizer stroke="#50705a" stroke-width="0.6" stroke-opacity="0.2"/>
    </Rule>
    <Rule>
      <Filter>[admin_level]='2' or [admin_level]='3'</Filter>
      <MaxScaleDenominator>6500000</MaxScaleDenominator>
      <MinScaleDenominator>750000</MinScaleDenominator>
      <LineSymbolizer stroke="#3d6f4c" stroke-width="2" stroke-opacity="0.2"/>
    </Rule>
   <Rule>
      <Filter>[admin_level]='2'</Filter>
      <MaxScaleDenominator>750000</MaxScaleDenominator>
      <LineSymbolizer stroke="#328c4e" stroke-width="6" stroke-opacity="0.1"/>
    </Rule>
    <Rule>
      <Filter>[admin_level]='3'</Filter>
      <MaxScaleDenominator>750000</MaxScaleDenominator>
      <LineSymbolizer stroke="#328c4e" stroke-width="5" stroke-dasharray="4,2" stroke-opacity="0.1"/>
    </Rule>
    <Rule>
      <Filter>[admin_level]='4'</Filter>
      <MaxScaleDenominator>50000000</MaxScaleDenominator>
      <MinScaleDenominator>6500000</MinScaleDenominator>
      <LineSymbolizer stroke="#328c4e" stroke-width="0.6" stroke-dasharray="4,3" stroke-opacity="0.2"/>
    </Rule>
    <Rule>
      <Filter>[admin_level]='4'</Filter>
      <MaxScaleDenominator>6500000</MaxScaleDenominator>
      <MinScaleDenominator>400000</MinScaleDenominator>
      <LineSymbolizer stroke="#328c4e" stroke-width="1" stroke-dasharray="4,3" stroke-opacity="0.2"/>
    </Rule>
    <Rule>
      <Filter>[admin_level]='4'</Filter>
      <MaxScaleDenominator>400000</MaxScaleDenominator>
      <LineSymbolizer stroke="#328c4e" stroke-width="3" stroke-dasharray="4,3" stroke-opacity="0.2"/>
    </Rule>
</Style>
<Style name="admin-5678">
    <Rule>
      <Filter>[admin_level]='5'</Filter>
      <MaxScaleDenominator>400000</MaxScaleDenominator>
      <LineSymbolizer stroke="#328c4e" stroke-width="2" stroke-dasharray="6,3,2,3,2,3" stroke-opacity="0.3"/>
    </Rule>
    <Rule>
      <Filter>[admin_level]='6'</Filter>
      <MaxScaleDenominator>400000</MaxScaleDenominator>
      <LineSymbolizer stroke="#328c4e" stroke-width="2" stroke-dasharray="6,3,2,3" stroke-opacity="0.3"/>
    </Rule>
</Style>
<Style name="admin-other">
    <Rule>
      <Filter>[admin_level]='10' or [admin_level]='9'</Filter>
      <MaxScaleDenominator>100000</MaxScaleDenominator>
      <LineSymbolizer stroke="#328c4e" stroke-width="2" stroke-dasharray="2,3" stroke-opacity="0.3"/>
    </Rule>
   <Rule>
      <Filter>not [admin_level] != ''</Filter>
      <MaxScaleDenominator>1500000</MaxScaleDenominator>
      <MinScaleDenominator>200000</MinScaleDenominator>
      <LineSymbolizer stroke="#328c4e" stroke-width="1" stroke-opacity="0.2"/>
    </Rule>
</Style>

und Layers:

<Layer name="admin-01234" status="on" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over">
    <StyleName>admin-01234</StyleName>
    <StyleName>admin-01234-casing</StyleName>
    <Datasource>
      <Parameter name="table">
      (select way,admin_level
       from planet_roads
       where "boundary"='administrative'
         and admin_level in ('0','1','2','3','4')
       ) as admin</Parameter>
      <!--
Settings for your postgres setup.

Note: feel free to leave password, host, port, or use blank
-->

<Parameter name="type">postgis</Parameter>
<Parameter name="password"/>
<Parameter name="host"/>
<Parameter name="port"/>
<Parameter name="user"/>
<Parameter name="dbname">mymapnik</Parameter>
<!-- this should be 'false' if you are manually providing the 'extent' -->
<Parameter name="estimate_extent">false</Parameter>
<!-- manually provided extent in epsg 900913 for whole globe -->
<!-- providing this speeds up Mapnik database queries -->
<Parameter name="extent">-20037508,-19929239,20037508,19929239</Parameter>

    </Datasource>
</Layer>
<Layer name="admin-5678" status="on" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over">
    <StyleName>admin-5678</StyleName>
    <Datasource>
      <Parameter name="table">
      (select way,admin_level
       from planet_roads
       where "boundary"='administrative'
         and admin_level in ('5','6','7','8')
       ) as admin</Parameter>
      <!--
Settings for your postgres setup.

Note: feel free to leave password, host, port, or use blank
-->

<Parameter name="type">postgis</Parameter>
<Parameter name="password"/>
<Parameter name="host"/>
<Parameter name="port"/>
<Parameter name="user"/>
<Parameter name="dbname">mymapnik</Parameter>
<!-- this should be 'false' if you are manually providing the 'extent' -->
<Parameter name="estimate_extent">false</Parameter>
<!-- manually provided extent in epsg 900913 for whole globe -->
<!-- providing this speeds up Mapnik database queries -->
<Parameter name="extent">-20037508,-19929239,20037508,19929239</Parameter>

    </Datasource>
</Layer>
<Layer name="admin-other" status="on" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over">
    <StyleName>admin-other</StyleName>
    <Datasource>
      <Parameter name="table">
      (select way,admin_level
       from planet_roads
       where "boundary"='administrative'
         and (admin_level is null or admin_level not in ('0','1','2','3','4','5','6','7','8'))
       ) as admin</Parameter>
      <!--
Settings for your postgres setup.

Note: feel free to leave password, host, port, or use blank
-->

<Parameter name="type">postgis</Parameter>
<Parameter name="password"/>
<Parameter name="host"/>
<Parameter name="port"/>
<Parameter name="user"/>
<Parameter name="dbname">mymapnik</Parameter>
<!-- this should be 'false' if you are manually providing the 'extent' -->
<Parameter name="estimate_extent">false</Parameter>
<!-- manually provided extent in epsg 900913 for whole globe -->
<!-- providing this speeds up Mapnik database queries -->
<Parameter name="extent">-20037508,-19929239,20037508,19929239</Parameter>

    </Datasource>
</Layer>

Da ich diese Grenzen aber nicht brauche, habe ich diese layer entfernt/auskommentiert.
Dies hat zur Folge, dass zwar die Linien nicht mehr gerendert werden, die Beschriftung der Linien aber bleibt.

In der osm-de.xml finde ich aber keine weitere Passage mit “admin” o.ä., was mir evtl. einen Hinweis darauf geben könnte, wie diese Beschriftung gerendert wird.

Hat vielleicht einer eine Idee, wo ich diese Beschriftung finde, bzw. wie ich diese los werden kann?

Google konnte mir da bis jetzt nicht weiter helfen.

Vielen Dank schonmal!

Gruß
Andreas

Ahoi,

keine Ideen, Vermutungen, …?

Gruß
Andreas

In der osm-de.xml gibt es noch einen Style namens boundary. Vielleicht hat der ja was damit zu tun.

Schade, das war’s leider nicht.

Habe alles, was mit admin und boundary/boundaries zu tun hat, rausgeschmissen (styles und layers), aber die Namen der Kreise/Gemeinden werden weiterhin gerendert…

Die Namen erscheinen - wie vorher auch - ab Zoomlevel 15.

Andreas

Du bindest aber nicht eventuell die grenzen.xml irgendwie irgendwo ein?

Nee, diese “admin-Styles”, die in der grenzen.xml stehen, tauchen in meiner osm-de.xml nicht auf.
Die ähnlichen admin-Sachen, die bei mir drinstehen, habe ich ja bereits rausgelöscht.

Zu ner Beschriftung, die der aus der grenzen.xml ähnelt, hab ich nur das hier noch in meiner osm-de.xml gefunden:

<Style name="area-text">						<!--Beschriftung Parks, ....-->		
    <Rule>
      <Filter>[way_area] >= 150000</Filter>
      <MaxScaleDenominator>50000</MaxScaleDenominator>
      <TextSymbolizer size="10" fill="#4c8056" fontset-name="book-fonts" halo-radius="1" wrap-width="20" placement="interior">[name]</TextSymbolizer>
    </Rule>
    <Rule>
      <Filter>[way_area] >= 80000 and [way_area] < 150000</Filter>
      <MaxScaleDenominator>25000</MaxScaleDenominator>
      <TextSymbolizer size="10" fill="#4c8056" fontset-name="book-fonts" halo-radius="1" wrap-width="20" placement="interior">[name]</TextSymbolizer>
    </Rule>
    <Rule>
      <Filter>[way_area] >= 20000 and [way_area] < 80000</Filter>
      <MaxScaleDenominator>12500</MaxScaleDenominator>
      <TextSymbolizer size="10" fill="#4c8056" fontset-name="book-fonts" halo-radius="1" wrap-width="20" placement="interior">[name]</TextSymbolizer>
    </Rule>
    <Rule>
      <Filter>[way_area] < 20000</Filter>
      <MaxScaleDenominator>5000</MaxScaleDenominator>
      <TextSymbolizer size="10" fill="#4c8056" fontset-name="book-fonts" halo-radius="1" wrap-width="20" placement="interior">[name]</TextSymbolizer>
    </Rule>
</Style>
<Layer name="area-text" status="on" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over">
    <StyleName>area-text</StyleName>
    <Datasource>
      <Parameter name="table">
      (select way,way_area,name
       from planet_polygon
       where name is not null
         and (waterway is null or waterway != 'riverbank')
         and place is null
       order by way_area desc
      ) as text
      </Parameter>
      ...

Edit: Aber es bringt auch nix, wenn ich das rauslösche…

Gruß
Andreas

Ahoi,

keine Ideen mehr?

Hab mich schon fast wund gegoogelt… :wink:
Ohne Erfolg…was das Finden von Lösungen/Hinweisen angeht…

Oder kann man die Anzeige/das Rendern der Grenzbezeichnungen evtl. gar nicht unterbinden?

Gruß
Andreas

Vielleicht sind auf help.openstreetmap.org bzw. den Mailinglisten mehr Leute, die mit Server-Technik spielen?

Daß Mapnik gern Namen von Objekten in die Karte schreibt, die ansonsten gar nicht gerendert werden, ist auch in OSM-Mapnik immer wieder zu beobachten. Hast Du es schon mal in der Google-Gruppe zu Mapnik versucht? Da ist zwar nicht viel los, aber vielleicht weiß doch jemand dort Rat. Falls Du etwas erfährst, laß es uns wissen.

Ahoi,

so, hier mal das (Zwischen)Fazit.

Da ich mir sowieso mal ne eigene osm.xml basteln wollte, bin ich nun selber auf die Lösung gekommen.

Kurz zusammengefasst, die Linien der Kreis-/Bezirksgrenzen werden über &layer-admin (als Import) oder die entsprechenden layer in der osm.xml gerendert.
Will man diese nicht haben, löscht man diese einfach.

Die Beschriftung der Grenzen ist etwas versteckt. Und zwar im layer “roads-text-name”. Dort muss man unter folgende Zeile ergänzen:

and boundary IS NULL

um das Rendern der Bezeichnung zu verhindern.

Das Ganze sieht dann so aus:

<Layer name="roads-text-name" status="on" srs="&osm2pgsql_projection;">
     <StyleName>roads-text-name</StyleName>
     <Datasource>
      <Parameter name="table">
      (select way,highway,name
       from &prefix;_line
       where waterway IS NULL
         and leisure IS NULL
         and landuse IS NULL
         and boundary IS NULL	
         and name is not null
      ) as roads
      </Parameter>
      &datasource-settings;
    </Datasource>
</Layer>

Gruß
Andeas

Moin,

irgendwe logisch … hat ja mal als OpenStreetMap angefangen … wer erwartet da schon andere Linien außer Straßen … :stuck_out_tongue: :roll_eyes:

Vielen Dank für den informellen Tip!

Gruß
Georg

Hallo Georg,

gern geschehn…

alternativ zu

and boundary IS NULL

kann man auch

and boundary not in ('administrative')

einfügen, dann werden sogar Naturpark-Grenzen etc. nicht mehr gerendert - zumindest in meiner Gegend.
Wobei ich nicht gedacht hätte, dass solche Grenzen zu ‘administrative’ gehören?!?

Gruß
Andreas