x

Mapnik: Erzeugen von kombinierter Beschriftung aus mehreren Feldern


Geschrieben von cziehr (Gast) am 03. Mai 2013 20:46:57: [flux]

Hallo,

wie ich ja in letzter Zeit schon geschrieben habe bin ich gerade dabei eine spezielle Hydrantenkarte für eine Feuerwehr zu erstellen. Ich habe dafür Mapnik2 auf einem Ubuntu-Server laufen.

Ich habe die OpenFireMap-Quellen erhalten und angefangen den Kartenstil etwas zu modifizieren bzw. zu erweitern (in Zoomstufe 18 soll außerdem der Druck und die Durchflussrate angegeben werden), aber irgendwie funktioniert es nicht so wirklich. Hier ein Auszug des Inhalts meiner osm.xml:

[...]
<Style␣name="hydrants">
[...]
<Rule>
&maxscale_zoom18;
&minscale_zoom18;
<Filter>[fh_t]␣=␣'underground'</Filter>
<PointSymbolizer␣file="&symbols;/hydrant_u_17.png"␣allow-overlap="true"/>
<TextSymbolizer␣allow-overlap="true"␣fontset-name="bold-fonts"␣size="9"␣fill="#ff0000"␣dy="9"␣halo-radius="1"␣wrap-width="0">H[fh_d]␣\n␣[fh_p]␣bar␣\n␣[fh_f]</TextSymbolizer>
</Rule>
</Style>
<Layer␣name="hydrants"␣status="on"␣srs="&osm2pgsql_projection;">
<StyleName>hydrants</StyleName>
<Datasource>
<Parameter␣name="table">
(select␣way,name,emergency,amenity,ref,
coalesce("fire_hydrant:type",'_')␣as␣fh_t,replace(replace("fire_hydrant:diameter",'fixme','␣'),'FIXME','␣')␣as␣fh_d,
"fire_hydrant:pressure"␣as␣fh_p,
case␣when␣"fire_hydrant:flow_capacity"␣similar␣to␣'[[:digit:]]+'␣then
round(cast("fire_hydrant:flow_capacity"␣as␣numeric)*60)␣||␣'␣l/min'␣else␣null␣end␣as␣fh_f
from␣&prefix;_point
where␣(␣emergency='fire_hydrant'␣or␣amenity='fire_hydrant'␣)
)␣as␣hydrants
</Parameter>
&datasource-settings;
</Datasource>
</Layer>
[...]

Das \n erzeugt laut Dokumentation einen Zeilenumbruch (wie auch in "richtigen" Programmiersprachen). Ich habe es auch schon ohne probiert, aber auch da funktioniert es nicht.

Wenn ich renderd mit der Option -f starte bekomme ich folgenden Fehler ausgegeben:

renderd[29494]:␣An␣error␣occurred␣while␣loading␣the␣map␣layer␣'default':␣Failed␣to␣parse␣expression:␣"H[fh_d]"␣in␣TextSymbolizer␣in␣style␣'hydrants'␣in␣map␣'/etc/mapnik-osm-data/osm.xml'

Anscheinend kann ich also bei <TextSymbolizer> nur eine Variable angeben, z.B. [fh_d] (so war es auch in der ursprünglichen OpenFireMap-Datei).

Kann mir jemand einen Tipp geben wo ich ansetzen muss damit ich die Sache zum Laufen kriege?

Vielen Dank schonmal,

Christoph


Antworten: