Deep Map™ Style Specification¶
Deep Map™ Style is the style language for our native 3D engine. The styling is done in two separate parts: a styling definition which specifies the static appearance of the map, and a rule definition which defines a set of conditions to change the styling dynamically at run-time. The Deep Map™ Style is similar to Geo CSS, but many properties are different, since they do not directly apply to the 3D world.
The style of the map is defined in a .mapStyle file, and contains basic map properties as well as the static styling of the map features. Rules are defined in a different .mapRule file. For the specification, see here: Deep Map™ Rule specification
Feature styles¶
Feature styles define the appearance of the objects, called map features, within the map. Each feature falls into one of four basic types:
point
line
polygon
icon
A feature style is defined in the following way:
feature <featureName> : <parentFeatureName> { <property> : <propertyValue> ; /* more properties */ }
feature
is the keyword to start a new feature type definition.
<featureName>
is the name of the featureType definition. Valid
characters for the featureName are letters, numbers or one of the
following characters: .
, -
or _
. The only
limitation is that numbers are not allowed for the first character. So
these feature names are valid:
_na-m.e
.na1me5
-name1233
However these would be invalid:
1name (numerical value at the beginning)
&na#me (invalid characters: & and #)
n:me (invalid, because : is a reserved symbol)
<parentFeatureName>
is the name of a previously defined feature, and
all of its properties are inherited by the new feature. Basic features
never inherit from another feature, while all other features require a
parent feature:
feature polygon { } //basic feature type: does not inherit feature building:polygon { } //not basic feature type: needs to inherit feature buildingSpecial:building { } //inheritance from other feature is valid, if it has been defined prior /* !!! the following features are invalid !!! */ feature point:building { } //invalid: basic features can not inherit, and the types do not match feature roomSpecial:room { } //invalid: room was not defined prior feature room { } //invalid: does not have a parent feature
<property> specifies a property to be set by a <propertyValue>. Each basic feature has its own set of properties:
Point feature properties
property |
type |
notes |
example |
ver |
---|---|---|---|---|
|
Visibility |
Controls the polygon’s visibility. Default: visible. Optional. |
|
V2.0 |
|
boolean |
enable / disable if feature can be made visible by floor selection. If set to false, the feature is is always visible, regardless of the selected floor. |
floor-selectable: true;
|
V2.0 |
Points are always used in combination with different object types. Typically as anchor for an unconstrained label or a 3D object.
Example:
feature point { visibility: visible; floor-selectable: true; }
Line feature properties
property |
type |
notes |
example |
ver |
---|---|---|---|---|
|
hex color |
The fill color for this line. Optional. |
line-color: #ffffff;
|
V2.0 |
|
coordinate |
The line’s offset. Optional. |
line-translate: [0,0,0];
|
V2.0 |
|
length value |
The width of the line in meters. Optional. |
line-width: 1.0;
|
V2.0 |
|
length value |
Draws a line casing outside of a line’s actual path. Value indicates the width of the inner gap in meters. Optional. No effect on routing lines. |
line-gap-width: 1;
|
V2.0 |
|
numeric |
The blur factor for the line between 0.0 and 1.0. No effect on routing lines. |
line-blur: 0.0;
|
V2.0 |
|
String |
An image file name for a pattern to draw the line with. Optional. |
line-pattern: "line-pattern123.png";
|
V2.0 |
|
line join type |
Line joins: round or miter. No effect on routing lines. |
line-join: join-miter;
|
V2.0 |
|
length value |
Height extrusion of the line. If a line is extruded, the following properties have no effect: line-gap-width, line-blur, line-pattern, line-join |
line-extrude: 10;
|
V2.1.2 - V3.0.0 |
|
numeric |
Accepts values between -1.0 and 1.0. Only affects lines with line-extrude. Offset value to affect the width extrusion. A value of 0.0 means, that the original line-string will be at the center of created line. A full “left” extrusion is -1.0 and a full “right” extrusion is 1.0. Values in between interpolate smoothly between the two extremes. |
line-centerline-offset: -1.0;
|
V2.1.2 - V3.0.0 |
|
line scaling type |
Either line-scaling-fixed or line-scaling-scale. Defines if a line should have a fixed size in the scene, or scales with camera height. No effect on textured lines. Default is line-scaling-fixed. |
line-scaling: line-scaling-scale;
|
V2.1 |
|
numeric |
If line-scaling is enabled the size increases with increasing camera height but line-maxscale limits the maximal scale to a specific value |
line-maxscale:2.0;
|
V2.1 |
|
numeric |
If line-scaling is enabled the size decreases with decreasing camera height but line-minscale limits the minimal scale to a specific value |
line-minscale: 1.0;
|
V2.1 |
|
Visibility |
Controls the lines’s visibility. Default: visible. Optional. |
visibility: visible;
|
V2.0 |
|
boolean |
enable / disable if feature can be made visible by floor selection. If set to false, the feature is is always visible regardless of the selected floor. |
floor-selectable: true;
|
V2.0 |
Example:
feature line { line-color: #aabbcc; line-translate: [0,1,0]; line-width: 2.0; line-gap-width: 1.0; line-blur: 0.5; line-join: join-round; visibility: none; floor-selectable: false; }
Polygon feature properties
property |
type |
notes |
example |
ver |
---|---|---|---|---|
|
hex color |
The fill color for this polygon. Optional. |
fill-color: #00ffff;
|
V2.0 |
|
hex color |
The outline color for this polygon. Optional. |
fill-outline-color: #ffffff;
|
V2.0 |
|
length value |
The width of the polygon’s outline. Optional. |
fill-outline-width: 0.1;
|
V2.0 |
|
length value |
The offset between polygon and outline. Optional. |
fill-outline-offset: 0.1;
|
V2.0 |
|
Visibility |
Controls the polygon’s visibility. Default: visible. Optional. |
visibility: visible;
|
V2.0 |
|
boolean |
enable / disable if feature can be made visible by floor selection. If set to false, the feature is is always visible, regardless of the selected floor. |
floor-selectable: true;
|
V2.0 |
|
polygon texture rotation type |
Defines if the texture of a polygon should rotate. Either texture-rotation-fixed (texture is fix in the scene) or texture-rotation-upright (texture rotates 180 degrees). |
texture-rotation: texture-rotation-upright;
|
V2.2 |
Example:
feature polygon { fill-color: #ff00ff; fill-outline-color: #00ff00; fill-outline-width: 0.5; fill-outline-offset: 0.0; visibility: visible; floor-selectable: true; }
Icon feature properties
property |
type |
notes |
example |
version |
---|---|---|---|---|
|
numeric |
The height of the icon in metres. |
icon-size: 2.0;
|
V2.0 |
|
icon scaling type |
Either icon-scaling-fixed or icon-scaling-scale. Defines if an icon should have a fixed size in the scene, or scales with camera height. |
icon-scaling: icon-scaling-fixed;
|
V2.0 |
|
numeric |
Angle in degrees in which the icon should be rotated. Is only in effect if icon-rotation is icon-rotation-fixed or icon-rotation-upright. |
icon-rotate: 30.0;
|
V2.0 |
|
icon rotation type |
Either icon-rotation-fixed, icon-rotation-upright or icon-rotation-rotate. Defines if an icon should rotate within the scene along with the camera. |
icon-rotation: icon-rotation-upright;
|
V2.0 |
|
Visibility |
Controls the icon’s visibility. Default: visible. Optional |
visibility: visible;
|
V2.0 |
|
boolean |
enable / disable if feature can be made visible by floor selection. If set to false, the feature is is always visible, regardless of the selected floor. |
floor-selectable: true;
|
V2.0” |
|
hex color |
If the icon_multicolor tag is set to true in the database the two colors of the icon can be changed. The correct colors are only shown for black and white icons. |
icon-primary-color: #4286f4;
icon-secondary-color: #29f2e8;
|
V2.2 |
|
numeric |
If icon-scaling-scale is enabled the size increases with increasing camera height but icon-maxscale limits the maximal scale to a specific value.” |
icon-maxscale: 3.0;
|
V2.2 |
|
numeric |
If icon-scaling-scale is enabled the size decreases with decreasing camera height but icon-minscale limits the minimal scale to a specific value.” |
icon-minscale: 2.0;
|
V2.2 |
Example:
feature icon { icon-size: 2.0; icon-scaling: icon-scaling-fixed; icon-rotation: icon-rotation-upright; icon-rotate: 45.0; visibility: visible; floor-selectable: false; }
Text feature properties¶
Text features do not exist on their own, but are always attached to another feature type, which determines the text appearance on the map. Point labels always appear in a fixed size. Polygon labels are constrained by the polygon boundaries and are always scaled to fill the space optimally. Line labels are constraint by the line width and are repeated along the path.
Table
property |
type |
notes |
example |
ver |
---|---|---|---|---|
|
alignment type |
Horizontal alignment of the text |
text-align: text-left;
|
V2.0 |
|
vertical alignment type |
Vertical alignment of the text |
text-vertical-align: text-top;
|
V2.0 |
|
String |
Filename of a font-file. All Freetype2 fonts should be supported (TTF, TTC, CFF, WOFF, OTF, OTC, PFA, PFB, CID-keyed Type 1 fonts, SFNT, X11 PCF, Windows FNT, BDF, PFR, Type 42 (limited) ). The font-file needs to be in the DeepMap.zip package in order to be used. |
text-font: "Deja-Vu.ttf"
|
V2.0 |
|
hex color |
The fill color for the text label |
text-color: #000000;
|
V2.0 |
|
hex color |
The outline color of the text label |
text-outline-color: #ffffff;
|
V2.0 |
|
numeric |
Multiplication factor for the text-line height. 1.0 means default line size. Higher values means increased distance between two text lines. |
line-height: 2.0;
|
V2.0 |
|
text rotation type |
Controls whether a label is fixed in the scene, if it stays upright or rotates with the camera |
text-rotation: text-rotation-fixed;
|
V2.0 |
|
numeric |
Rotation angle of the label. Only applies if text rotation is fixed or upright |
text-rotate: 45.0;
|
V2.0 |
|
Visibility |
Controls the labels visibility. Default: visible. Optional |
text-visibility: visible;
|
V2.0 |
|
numeric |
Text usually adapts to the polygon size. text-minscale limits the scaling to a minimal value. No effect on lines. |
text-minscale: 1.0;
|
V2.1 |
|
numeric |
Text usually adapts to the polygon size. text-maxscale limits the scaling to a maximal value. No effect on lines. |
text-maxscale: 2.0;
|
V2.1 |
The following properties only affect point- and icon-features:
Table
property |
type |
notes |
example |
ver |
---|---|---|---|---|
|
coordinate |
Label offset coordinate in metres |
text-offset: [1.0 , 1.0,1.0];
|
V2.0 |
|
numeric |
Size of the created text. |
text-size: 24;
|
V2.0 |
|
anchor type |
Chooses where the label is placed in relation to the point feature. |
text-anchor: text-anchor-center;
|
V2.0 |
The following properties only affect line-features:
Table
property |
type |
notes |
example |
ver |
---|---|---|---|---|
|
numeric |
Sets distance between two consecutive line labels |
text-label-spacing: 30.0;
|
V2.0 |
Example:
feature point { text-visibility: visible; text-rotation: text-rotation-upright; text-rotate: 30; text-color: #000000; text-outline-color: #ffffff; }
Note
The label definition is within point
Database properties (Version 2.1)¶
The properties of a feature can also be provided by a database. A database access by writing the database field enclosed in curly brackets. For example, setting the fill-color of a polygon via database would be done in the following way:
feature building:polygon { fill-color: {dbFillColor}; }
In this case, the database-field “dbFillColor” is read from the database, and the value of the database-entry will be set to fill-color. The value of the database property has to be a string in the formatting of the corresponding data-type. The value is ignored if it cannot be matched to the property.
Property types¶
- Numeric
numeric value (int64 or float value with double precision)
- Coordinate
a vector of three numeric values, e.g:
[0.5 , 1.0, 0.0]
- String
a text string delimited by
" "
- Boolean
true
/false
- Length value
A distance expressed as meters (m), kilometres (km) or feet (ft)
- Hex color
A rgb hexadecimal color:
#rrggbb
- Visibility
Either
visible
ornone
- Line join type
join-round
- Icon scaling type
Either
icon-scaling-fixed
oricon-scaling-scale
- Icon rotation type
Either
icon-rotation-fixed
,icon-rotation-upright
oricon-rotation-rotate
- Rotation type
Either
text-rotation-fixed
,text-rotation-upright
ortext-rotation-rotate
- Alignment type
Either
text-left
,text-center
ortext-right
- Vertical alignment type
Either
text-top
,text-middle
ortext-bottom
- Text rotation type
Either
text-rotatation-fixed
,text-rotatation-rotate
ortext-rotatation-upright
- Anchor type
One of the following:
text-anchor-center, text-anchor-left, text-anchor-right, text-anchor-top, text-anchor-bottom, text-anchor-top-left, text-anchor-top-right, text-anchor-bottom-left, text-anchor-bottom-right
- Polygon texture rotation type
Either
texture-rotation-fixed
ortexture-rotation-upright
- Line scaling type
Either
line-scaling-fixed
orline-scaling-scale
Comments¶
You can add comments in the style files. You can either make single-line
comments by using //
, or a multi-line comment block, which starts
with a /*
and ends with */
feature building:polygon{ fill-color: #aabbcc; //also a single line comment //this is a single line comment /* This is a comment block */ fill-outline-color: /* also a comment */ #ddeeff; }