Vespucci Data Styling#

Documentation for Vespucci 20.2 Style file format version 0.3.1

The data styling configuration is not a work of art, it was created ad hoc (in other words it is an awful hack) to allow slightly more flexible configuration of the rendering.

Using custom style files in Vespucci#

Files need to need have an unique name attribute and the .xml extension and reside in a styles directory in an app specific files directory (for example Android/data/de.blau.android/files/styles/test.xml ). Currently the legacy storage format and location continues to work: unique name attribute and a filename in the format name-profile.xml and stored in the Vespucci directory, this is the only location that will work for devices with Android version older than 4.4.

Style Elements and Attributes#

The styles are for a major part not much more than an external representation of the Android Paint objects. In particular color, style, cap, join and strokeWidth attributes map directly to the Paint fields.

Node styling is limited to the labelKey and iconPath attributes.

Element Attributes Default Description
<profile> Top level enclosing element
name Style name
format Format version, currently 0.3.1
<!-- comment --> A comment
<config> Configuration element
type One of "large_drag_area", "marker_scale", "min_handle_len", "icon_zoom_limit"
touchRadius
scale Used with marker_scale, increase/decrease size of various markers
length User with min_handle_len, defines the minimum length a way segment must have on screen so that the geometry improvement handles are shown
zoom 15 Used with icon_zoom_limit, minimum zoom level at which POI icons are still displayed
labelZoomLimit 20 Used with icon_zoom_limit, the minimum zoom level for displaying labels with icons
<feature> Feature elements can be nested and each feature can contain one or more other feature elements. Nested elements inherit attributes from their parents.
type "way", "node" or "relation" to match the corresponding OSM elements, or a name
tags Tags to use for matching, ignored for named styles, in the format key=value or key=* for any value. Multiple tags can be added using | as a separator.
closed If not present will match all ways, if present will match closed ways if true, or if false open ways, ignored for relations
area Use area semantics for rendering if true, note that this will also effect preset matching
dontrender Don't render the matching element
updateWidth Dynamically update the way width on zoom changes if true
widthFactor Determine a way width relative to the extent of the current map shown, ignored if updateWidth is false
color A 32bit hex value representing alpha and rgb
style One of "FILL", "FILL_AND_STROKE", "STROKE"
cap One of "BUTT", "ROUND", "SQUARE"
join One of "BEVEL", "MITER", "ROUND"
strokeWidth A float value for the width of the lines, 0 draws a one pixel width line, ignored if updateWidth is true
offset Offset in units of the current stroke width
typefacestyle
textsize
shadow
pathPattern Reference to a pattern to apply along the path, one of "triangle_left", "triangle_right", "border_left", "border_right"
minVisibleZoom 15 Minimum zoom that has to be reached before the element is rendered
casingStyle Reference to a style to use for casing
arrowStyle Reference to a style to use for way arrows
oneway Set this on the referenced arrowStyle if it should have oneway semantics
labelKey Tag key to use as label if present, magic value "preset" will use the preset name.
labelZoomLimit none List for displaying labels on ways, if not set no label will be displayed
iconPath Path, relative to the directory in which the style file resides, to a PNG format icon, magic value "preset" (see below) will use the preset icon.
<dash> feature sub-element used to define a dash pattern
phase Phase of the dash
<interval> dash sub-element used to define the length of the dash/no-dash phases
length Length of the dash as a float

Using "preset" as the value for iconPath will match the objects tags with the presets, just as this is done throughout the application. An "" (empty string) value for iconPath will suppress rendering any icon.

Internal features#

Styling for internal features is provided by the app, but they can be overridden by setting them in a style file.

Name Description
gps_track Default style for GPX tracks
infotext
attribution_text Text style for attribution notices on the map
viewbox
way_tolerance
way_tolerance_2
way Default way style
selected_way Selected way style
selected_relation_way Style for relation member ways when the relation is selected
problem_way Style for a way with an issue
hidden_way Style for faint way rendering (used when filters are active)
node_tolerance
node_tolerance_2
node_untagged
node_thin
node_tagged
node_drag_radius Style for the large drag radius
problem_node Style for a node with an issue
problem_node_thin
problem_node_tagged
selected_node
selected_node_thin
selected_node_tagged
selected_relation_node
selected_relation_node_thin
selected_relation_node_tagged
hidden_node
way_direction
large_drag_area
marker_scale
gps_pos Styling for the location indicator when not in follow mode
gps_pos_follow Styling for the location indicator when in follow mode
gps_pos_stale Styling for the location indicator when not in follow mode and the location is stale
gps_pos_follow_stale Styling for the location indicator when in follow mode and the location is stale
gps_accuracy
open_note
closed_note
crosshairs
crosshairs_halo
handle
labeltext
labeltext_normal
labeltext_small
labeltext_normal_selected
labeltext_small_selected
labeltext_normal_problem
labeltext_small_problem
labeltext_background
geojson_default Default style for the geojson layer
bookmark_default Default style for the bookmark layer

Validation styling#

In a limited fashion the default validation styling can be overridden, by adding feature elements with type set to validation and code set to the error value that should be styled. Nodes will only use the colour specified.

Error codes#

These are individual bits that are combined for the final value:

Validation check Error value
AGE 0x00000002
FIXME 0x00000004
MISSING_TAG 0x00000008
HIGHWAY_NAME 0x00000010
HIGHWAY_ROAD 0x00000020
NO_TYPE 0x00000040
IMPERIAL_UNITS 0x00000080
INVALID_OBJECT 0x00000100
UNTAGGED 0x00000200
UNCONNECTED_END_NODE 0x00000400
DEGENERATE_WAY 0x00000800
EMPTY_RELATION 0x00001000
MISSING_ROLE 0x00002000
RELATION_LOOP 0x00004000
WRONG_ELEMENT_TYPE 0x00008000

Example#

 <feature type="validation" code="2" updateWidth="true" widthFactor="1.5" color="ffffe000" style="STROKE" cap="BUTT" join="MITER" />

Complete Example#

<?xml version='1.0' encoding='UTF-8' ?>
<profile name="Color Round Nodes" format="0.3.0">
    <!-- Assorted config -->
    <config type="min_handle_length" length="200.0" />
    <config type="icon_zoom_limit" zoom="15" />
    <!-- Vespucci internal styles -->
    <feature type="gps_accuracy" updateWidth="false" widthFactor="2.0" color="280000ff" style="FILL_AND_STROKE" cap="ROUND" join="ROUND" strokeWidth="0.0" />
    <feature type="problem_node_thin" updateWidth="false" widthFactor="1.0" color="ffff00ff" style="STROKE" cap="BUTT" join="MITER" strokeWidth="1.0" typefacestyle="0" textsize="12.0" />
    <feature type="problem_way" updateWidth="true" widthFactor="1.5" color="ffff00ff" style="STROKE" cap="BUTT" join="MITER" />
    <feature type="way_direction" updateWidth="true" widthFactor="0.8" color="ffb9121b" style="STROKE" cap="SQUARE" join="MITER" />
    <feature type="handle" updateWidth="true" widthFactor="0.8" color="ffb9121b" style="STROKE" cap="SQUARE" join="MITER" />
    <feature type="selected_way" updateWidth="true" widthFactor="2.0" color="fffcfa74" style="STROKE" cap="ROUND" join="ROUND" />
    <feature type="way_tolerance" updateWidth="false" widthFactor="1.0" color="28bd8d46" style="STROKE" cap="BUTT" join="MITER" strokeWidth="40.0" />
    <feature type="way_tolerance_2" updateWidth="false" widthFactor="1.0" color="7fbd8d46" style="STROKE" cap="BUTT" join="MITER" strokeWidth="40.0" />
    <feature type="gps_track" updateWidth="false" widthFactor="1.0" color="ff0000ff" style="STROKE" cap="ROUND" join="ROUND" strokeWidth="2.0" />
    <feature type="node_tolerance" updateWidth="false" widthFactor="1.0" color="28bd8d46" style="FILL" cap="BUTT" join="MITER" strokeWidth="40.0" />
    <feature type="node_tolerance_2" updateWidth="false" widthFactor="1.0" color="7fbd8d46" style="FILL" cap="BUTT" join="MITER" strokeWidth="40.0" />
    <feature type="infotext" updateWidth="false" widthFactor="1.0" color="ff000000" style="FILL" cap="BUTT" join="MITER" strokeWidth="0.0" typefacestyle="0" textsize="12.0" />
    <feature type="viewbox" updateWidth="false" widthFactor="1.0" color="7d0f0f0f" style="FILL" cap="BUTT" join="MITER" strokeWidth="0.0" />
    <feature type="gps_pos" updateWidth="false" widthFactor="2.0" color="ff0000ff" style="FILL" cap="ROUND" join="ROUND" strokeWidth="2.0" />
    <feature type="gps_pos_follow" updateWidth="false" widthFactor="2.0" color="ff0000ff" style="STROKE" cap="ROUND" join="ROUND" strokeWidth="2.0"/>
    <feature type="dontrender_way" dontrender="true" updateWidth="true" widthFactor="1.0" color="00ffffff" style="STROKE" cap="ROUND" join="ROUND" />
    <!-- OSM node based features currently internal features -->
    <feature type="node_untagged" updateWidth="true" widthFactor="1.0" color="ffb9121b" style="FILL" cap="ROUND" join="MITER" />
    <feature type="node_tagged" updateWidth="true" widthFactor="1.5" color="ffb9121b" style="FILL" cap="ROUND" join="MITER" />
    <feature type="node_thin" updateWidth="false" widthFactor="1.0" color="ffb9121b" style="STROKE" cap="BUTT" join="MITER" strokeWidth="1.0" typefacestyle="0" textsize="12.0" />
    <feature type="selected_node" updateWidth="true" widthFactor="1.5" color="fff6e497" style="FILL" cap="ROUND" join="MITER" />
    <feature type="selected_node_tagged" updateWidth="true" widthFactor="2.0" color="fff6e497" style="FILL" cap="ROUND" join="MITER" />
    <feature type="selected_node_thin" updateWidth="false" widthFactor="1.0" color="fff6e497" style="STROKE" cap="BUTT" join="MITER" strokeWidth="1.0" typefacestyle="0" textsize="12.0" />
    <feature type="problem_node" updateWidth="true" widthFactor="2.0" color="ffff00ff" style="STROKE" cap="ROUND" join="MITER" />
    <feature type="problem_node_tagged" updateWidth="true" widthFactor="1.5" color="ffff00ff" style="FILL" cap="BUTT" join="MITER" />

    <!-- Arrow styles -->
    <feature type="oneway_direction" updateWidth="true" widthFactor="0.5" color="ffb9121b" style="STROKE" cap="SQUARE" join="MITER" oneway="true" />
    <feature type="waterway_direction" updateWidth="true" widthFactor="0.5" color="ff0000bb" style="STROKE" cap="SQUARE" join="MITER" />

    <!-- OSM node based features -->
    <feature type="node" />
    <feature type="node" tags="name" labelKey="name" />
    <feature type="node" tags="entrance|addr:housenumber" labelKey="addr:housenumber" />

    <!-- OSM way based features -->
    <feature type="way" updateWidth="true" widthFactor="1.0" color="80000000" style="STROKE" cap="BUTT" join="MITER" />
    <feature type="way" tags="boundary" updateWidth="true" widthFactor="0.6" color="ff000000" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="6.0" />
            <interval length="2.0" />
        </dash>
    </feature>
    <feature type="way" tags="route" updateWidth="true" widthFactor="0.6" color="880000AA" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="3.0" />
            <interval length="3.0" />
        </dash>
    </feature>
    <feature type="way" tags="landuse" area="true" updateWidth="true" widthFactor="2.0" color="8871BE80" style="STROKE" cap="BUTT" join="MITER" pathPattern="border_right">
        <feature type="way" tags="landuse=construction" color="88996633" style="FILL_AND_STROKE" pathPattern="" />
        <feature type="way" tags="landuse=residential" minVisibleZoom="10" color="88888888" />
        <feature type="way" tags="landuse=quarry" color="88d8a2a2" />
        <feature type="way" tags="landuse=military" color="88af2626" />
        <feature type="way" tags="landuse=forest" minVisibleZoom="10" color="8800BE00" />
        <feature type="way" tags="landuse=industrial" minVisibleZoom="10" color="88A3709A" />
        <feature type="way" tags="landuse=commercial" minVisibleZoom="10" color="88A3709A" />
        <feature type="way" tags="landuse=railway" minVisibleZoom="10" color="88A3709A" />
    </feature>

    <feature type="way" tags="leisure=pitch" updateWidth="true" widthFactor="1.0" color="8839AC39" style="FILL_AND_STROKE" cap="BUTT" join="MITER" />
    <feature type="way" tags="leisure=swimming_pool" updateWidth="true" widthFactor="1.0" color="880000ff" style="FILL_AND_STROKE" cap="BUTT" join="MITER" />
    <feature type="way" tags="natural" updateWidth="true" widthFactor="0.5" color="ff71BE80" style="STROKE" cap="BUTT" join="MITER"> 
        <feature type="way" tags="natural" closed="true" area="true" pathPattern="border_right" >
            <feature type="way" tags="natural=water" widthFactor="1.0" minVisibleZoom="10" color="ff0000ff" />
        </feature>
        <feature type="way" tags="natural=water" widthFactor="1.0" minVisibleZoom="10" color="ff0000ff" />
        <feature type="way" tags="natural=cliff" widthFactor="2.0" color="ff555555" pathPattern="triangle_right" />
        <feature type="way" tags="natural=coastline" widthFactor="2.0" minVisibleZoom="10" color="ff71BE80" pathPattern="triangle_left" />
        <feature type="way" tags="natural=tree_row" widthFactor="2.0" color="ff4b7a54" cap="ROUND" />
    </feature>
    <feature type="way" tags="waterway" updateWidth="true" widthFactor="1.0" color="ff0000ff" style="STROKE" cap="BUTT" join="MITER" arrowStyle="waterway_direction" >
        <feature type="way" tags="waterway=riverbank" updateWidth="true" widthFactor="1.0" color="ff0000ff" style="STROKE" cap="BUTT" join="MITER" arrowStyle="" />
        <feature type="way" tags="waterway=weir" widthFactor="2.0" color="ff0000ff" pathPattern="triangle_right" />
    </feature>
    <feature type="way" tags="man_made" color="ff585c63" style="STROKE" cap="BUTT" join="MITER" >
        <feature type="way" tags="man_made=embankment" color="ff996633" pathPattern="triangle_right" />
    </feature>
    <feature type="way" tags="building" updateWidth="true" widthFactor="1.0" color="ffcc9999" style="STROKE" cap="BUTT" join="MITER" />
    <feature type="way" tags="building:part" updateWidth="true" widthFactor="0.8" color="ffcc9999" style="STROKE" cap="BUTT" join="MITER" >
        <dash phase="1.0">
            <interval length="2.0" />
            <interval length="2.0" />
        </dash>
    </feature>
    <feature type="motorway_casing" updateWidth="true" widthFactor="2.4" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER" />
    <feature type="motorway_bridge_casing" updateWidth="true" widthFactor="2.4" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="2.0" />
            <interval length="2.0" />
        </dash>
    </feature>
    <feature type="primary_casing" updateWidth="true" widthFactor="1.8" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER" />
    <feature type="primary_bridge_casing" updateWidth="true" widthFactor="1.8" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="2.0" />
            <interval length="2.0" />
        </dash>
    </feature>
    <feature type="secondary_casing" updateWidth="true" widthFactor="1.5" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER" />
    <feature type="secondary_bridge_casing" updateWidth="true" widthFactor="1.5" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="2.0" />
            <interval length="2.0" />
        </dash>
    </feature>
    <feature type="teritary_casing" updateWidth="true" widthFactor="1.3" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER" />
    <feature type="tertiary_bridge_casing" updateWidth="true" widthFactor="1.3" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="2.0" />
            <interval length="2.0" />
        </dash>
    </feature>
    <feature type="unclassified_casing" updateWidth="true" widthFactor="1.2" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER" />
    <feature type="unclassified_bridge_casing" updateWidth="true" widthFactor="1.2" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="2.0" />
            <interval length="2.0" />
        </dash>
    </feature>
    <feature type="residential_casing" updateWidth="true" widthFactor="1.1" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER" />
    <feature type="residential_bridge_casing" updateWidth="true" widthFactor="1.1" color="FFFFFFFF" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="2.0" />
            <interval length="2.0" />
        </dash>
    </feature>
    <feature type="way" tags="highway" updateWidth="true" widthFactor="1.0" color="88888888" style="STROKE" cap="BUTT" join="MITER" arrowStyle="oneway_direction">
        <feature type="way" tags="highway=construction" widthFactor="1.0" color="88888888" />
        <feature type="way" tags="highway=proposed" widthFactor="1.0" color="88888888" />
        <feature type="way" tags="highway=pedestrian" widthFactor="0.8" color="ff888888" />
        <feature type="way" tags="highway=path" widthFactor="0.6" color="ffc69c49" />
        <feature type="way" tags="highway=cycleway" widthFactor="0.6" color="fff48f42" />
        <feature type="way" tags="highway=footway" widthFactor="0.6" color="ffff4500" />
        <feature type="way" tags="highway=steps"  widthFactor="0.6" color="ffff4500" >
            <dash phase="1.0">
               <interval length="1.0" />
               <interval length="1.0" />
            </dash>
        </feature>
        <feature type="way" tags="highway=track" widthFactor="1.0" color="ffc69c49" />
        <feature type="way" tags="highway=motorway" widthFactor="2.0" minVisibleZoom="10" color="ff809BC0" casingStyle="motorway_casing" >
            <feature type="way" tags="bridge=yes" casingStyle="motorway_bridge_casing" />
            <feature type="way" tags="tunnel=yes" casingStyle="">
                <dash phase="1.0">
                    <interval length="1.0" />
                    <interval length="1.0" />
                </dash>
            </feature>
        </feature>
        <feature type="way" tags="highway=motorway_link" widthFactor="2.0" minVisibleZoom="10" color="ff809BC0" >
            <feature type="way" tags="tunnel=yes" casingStyle="">
                <dash phase="1.0">
                    <interval length="1.0" />
                    <interval length="1.0" />
                </dash>
            </feature>
        </feature>
        <feature type="way" tags="highway=trunk" widthFactor="1.5" minVisibleZoom="10" color="ff7FC97F" casingStyle="trunk_casing" >
            <feature type="way" tags="bridge=yes" casingStyle="trunk_bridge_casing" />
            <feature type="way" tags="tunnel=yes" casingStyle="">
                <dash phase="1.0">
                    <interval length="1.0" />
                    <interval length="1.0" />
                </dash>
            </feature>
        </feature>
        <feature type="way" tags="highway=trunk_link" widthFactor="1.5" minVisibleZoom="10" color="ff7FC97F" >
            <feature type="way" tags="tunnel=yes" casingStyle="">
                <dash phase="1.0">
                    <interval length="1.0" />
                    <interval length="1.0" />
                </dash>
            </feature>
        </feature>
        <feature type="way" tags="highway=primary" widthFactor="1.5" color="ffE46D71" casingStyle="primary_casing" >
            <feature type="way" tags="bridge=yes" casingStyle="primary_bridge_casing" />
            <feature type="way" tags="tunnel=yes" casingStyle="">
                <dash phase="1.0">
                    <interval length="1.0" />
                    <interval length="1.0" />
                </dash>
            </feature>
        </feature>
        <feature type="way" tags="highway=primary_link" widthFactor="1.5" color="ffE46D71" >
            <feature type="way" tags="tunnel=yes" casingStyle="">
                <dash phase="1.0">
                    <interval length="1.0" />
                    <interval length="1.0" />
                </dash>
            </feature>
        </feature>
        <feature type="way" tags="highway=secondary" widthFactor="1.2" color="ffFDBF6F" casingStyle="secondary_casing" >
            <feature type="way" tags="bridge=yes" casingStyle="secondary_bridge_casing" />
            <feature type="way" tags="tunnel=yes" casingStyle="">
                <dash phase="1.0">
                    <interval length="1.0" />
                    <interval length="1.0" />
                </dash>
            </feature>
        </feature>
        <feature type="way" tags="highway=secondary_link" widthFactor="1.2" color="ffFDBF6F" >
            <feature type="way" tags="tunnel=yes" casingStyle="">
                <dash phase="1.0">
                    <interval length="1.0" />
                    <interval length="1.0" />
                </dash>
            </feature>
        </feature>
        <feature type="way" tags="highway=tertiary" widthFactor="1.0" color="ffFCFA74" casingStyle="tertiary_casing" >
            <feature type="way" tags="bridge=yes" casingStyle="tertiary_bridge_casing" />
            <feature type="way" tags="tunnel=yes" casingStyle="">
                <dash phase="1.0">
                    <interval length="1.0" />
                    <interval length="1.0" />
                </dash>
            </feature>
        </feature>
        <feature type="way" tags="highway=tertiary_link" widthFactor="1.0" color="ffFCFA74" >
            <feature type="way" tags="tunnel=yes" casingStyle="">
                <dash phase="1.0">
                    <interval length="1.0" />
                    <interval length="1.0" />
                </dash>
            </feature>
        </feature>
        <feature type="way" tags="highway=unclassified" widthFactor="1.0" color="ffCCCCCC" casingStyle="unclassified_casing" >
            <feature type="way" tags="bridge=yes" casingStyle="unclassifies_bridge_casing" />
            <feature type="way" tags="tunnel=yes" casingStyle="">
                <dash phase="1.0">
                    <interval length="1.0" />
                    <interval length="1.0" />
                </dash>
            </feature>
        </feature>
        <feature type="way" tags="highway=residential" widthFactor="0.9" color="ffCCCCCC" casingStyle="residential_casing" >
            <feature type="way" tags="bridge=yes" casingStyle="residential_bridge_casing" />
        </feature>
        <feature type="way" tags="highway=living_street" widthFactor="0.9" color="ffff4500" />
        <feature type="way" tags="highway=service" widthFactor="0.7" color="ffCCCCCC" />
    </feature>
    <feature type="way" tags="power" updateWidth="true" widthFactor="0.6" color="ffaa0000" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="2.0" />
            <interval length="2.0" />
        </dash>
    </feature>
    <feature type="way" tags="railway" updateWidth="true" widthFactor="0.7" color="ff999999" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="4.0" />
            <interval length="4.0" />
        </dash>
    </feature>
    <feature type="way" tags="addr:interpolation" updateWidth="true" widthFactor="0.6" color="ff000000" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="2.0" />
            <interval length="2.0" />
        </dash>
    </feature>
    <feature type="way" tags="amenity" updateWidth="true" widthFactor="0.8" color="ffCCCC00" style="STROKE" cap="BUTT" join="MITER">
        <dash phase="1.0">
            <interval length="2.0" />
            <interval length="2.0" />
        </dash>
        <feature type="way" tags="amenity=parking" color="ff99CCFF"  />
        <feature type="way" tags="amenity=bicycle_parking"  color="ff99CCFF" />
        <feature type="way" tags="amenity=motorcycle_parking" color="ff99CCFF" />
    </feature>

    <feature type="way" tags="leisure=playground" area="true" updateWidth="true" widthFactor="0.8" color="88f4a460" style="STROKE" cap="BUTT" join="MITER" pathPattern="border_right" />

    <!-- Indoor features -->
    <feature type="way" tags="indoor" updateWidth="true" widthFactor="0.7" color="99f4a442" style="STROKE" cap="BUTT" join="MITER" >
        <feature type="way" tags="indoor=level" updateWidth="true" widthFactor="0.7" color="99f2c791" style="STROKE" cap="BUTT" join="MITER" />
        <feature type="way" tags="indoor=room" updateWidth="true" widthFactor="0.7" color="99f2c791" style="FILL_AND_STROKE" cap="BUTT" join="MITER" />
        <feature type="way" tags="indoor=corridor" updateWidth="true" widthFactor="0.7" color="99f2c791" style="FILL_AND_STROKE" cap="BUTT" join="MITER" />
    </feature>

    <!-- relations (only multipolygons currently -->
    <feature type="relation" updateWidth="true" widthFactor="1.0" color="ff222222" style="STROKE" cap="BUTT" join="MITER" />
    <feature type="relation" tags="type=multipolygon" updateWidth="true" widthFactor="0.8" color="88222222" style="STROKE" cap="BUTT" join="MITER" pathPattern="border_right">
        <feature type="relation" tags="building" widthFactor="1.0" color="ffcc9999"/>
        <feature type="relation" tags="leisure=playground" widthFactor="0.8" color="88f4a460" style="FILL_AND_STROKE" />
        <feature type="relation" tags="natural" color="ff71BE80" >
            <feature type="relation" tags="natural=water" widthFactor="1.0" minVisibleZoom="10" color="ff0000ff" />
            <feature type="relation" tags="natural=cliff" widthFactor="2.0" color="ff555555" pathPattern="triangle_right" />
            <feature type="relation" tags="natural=coastline" widthFactor="2.0" minVisibleZoom="10" color="ff71BE80" pathPattern="triangle_left" />
            <feature type="relation" tags="natural=tree_row" widthFactor="2.0" color="ff4b7a54" cap="ROUND" />
        </feature>
        <feature type="relation" tags="landuse" updateWidth="true" widthFactor="2.0" color="8871BE80" style="STROKE" cap="BUTT" join="BEVEL" pathPattern="border_right" >
            <feature type="relation" tags="landuse=construction" color="88996633" />
            <feature type="relation" tags="landuse=residential" minVisibleZoom="10" color="88888888" />
            <feature type="relation" tags="landuse=quarry" color="88d8a2a2" />
            <feature type="relation" tags="landuse=military" color="88af2626" />
            <feature type="relation" tags="landuse=forest" minVisibleZoom="10" color="8800BE00" />
            <feature type="relation" tags="landuse=industrial" minVisibleZoom="10" color="88A3709A" />
            <feature type="relation" tags="landuse=commercial" minVisibleZoom="10" color="88A3709A" />
            <feature type="relation" tags="landuse=railway" minVisibleZoom="10" color="88A3709A" />
        </feature>
    </feature>
</profile>