Mkgmap-Styles und die substring-Funktion

Hallo,

ich bekomme die substring-Funktion einfach nicht zum laufen. Beispiel:

#bike_route_ref ist “ROUTE-XYZ”
bike_route_ref= { name ‘[${bike_route_ref]’ }*

funktioniert einwandfrei. Eine Bike-Route wird als [ROUTE-XYZ] angezeigt. bike_route_ref ist im Style-File ‘relations’ definiert.

Nun möchte ich z.B. nur die ersten drei Zeichen anzeigen lassen (“ROU”). Die Anweisung

bike_route_ref= { name ‘[${bike_route_ref|substring:0:3}]’ }*

bringt aber leider einen Mkgmap-Fehler “java.lang.StringIndexOutOfBoundsException: String index out of range: 3…”. Mkgmap scheint keine Zeichenketten handlen zu können, die kürzer sind als die geforderten drei Stellen.
Ich ging davon aus, dass ‘substring’ die Zeichenkette bis zum letzten Zeichen zurückliefert, auch wenn die Zeichenkette kürzer ist, als der End-Index.

In der Dokumentation konnte ich leider auch keine Hilfe finden.

Hat jemand eine Idee?

Danke & Gruß

T.

Hallo,

Google-Suche liefert ein paar links auf mkgmap-dev. Dort wird auch ein workaround gezeigt.

http://www.mkgmap.org.uk/pipermail/mkgmap-dev/2013q4/019060.html
http://www.mkgmap.org.uk/pipermail/mkgmap-dev/2013q4/019061.html
http://www.mkgmap.org.uk/pipermail/mkgmap-dev/2013q4/019062.html

Hi,

mit workaround funktioniert es im Prinzip. Schade, dass die substring-Funktion das nicht von sich aus kann.

Danke & Gruß

T.

Alternativ wäre ein subst mit regulärem Ausdruck statt substring evtl. eine Option. Laut Style Guide muss man für reguläre Ausdrücke den Operator ~> verweden. Dahinter steckt dann auch nur ein String.replaceAll aus Java (siehe Link 1, Link 2).

Suchpattern wäre dann so etwas wie (.{0,3}).*
Ersetzen mit: $1

Ungetestet: ${name|subst:(.{0,3}).*~>$1}