diff --git a/.travis.yml b/.travis.yml index 35804dd7b..f2349fdd3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,7 +28,7 @@ script: notifications: hipchat: rooms: - secure: "GGP1hopxPUtKABYyMIzwu8nJco3r14RhYAlpzZwlj1Ypl3okRCHh51VxkMpmPb6WgPhjL4O7/AVxS2mDnAyMqKWdeW3wl9edirZu0kjROCfxRoeqEeLC1JLHLfjdpIvJVv++jnvp2xrw+YUMI24Y2klHvOMpHhm8+CLpmmpidfY=" + secure: "SgMjGDp8MP+UTAY/aWJwSQH2hv1Q0vhEc1BdIde59+lEL3u6gNMSexUTSJoVxRlIQTFXDJBU7v58ISdgJX8cPa+UvIC8hhLsayM+cbm+J3jgy7V9E9wllq3RpmXN33TxY7nwKgWdIms2t9YKZco3y4dKKAUyHXrtMvw8NNPQM+4=" template: - 'Build #%{build_number}: %{author} tested %{commit} in branch %{branch} of %{repository_name}: %{commit_message}
%{message} (%{duration})' format: html diff --git a/bin/style.js b/bin/style.js index e80d76759..21cca2af3 100644 --- a/bin/style.js +++ b/bin/style.js @@ -1,3614 +1,2476 @@ "use strict"; module.exports = { - "buckets": { - "admin_maritime": { - "source": "outdoors", - "layer": "admin", - "field": "maritime", - "value": 1, - "join": "round", - "cap": "round", - "type": "line" - }, - "admin_l2": { - "source": "outdoors", - "layer": "admin", - "filter": [ - "and", - {"field": "admin_level", "value": 2}, - {"field": "maritime", "operator": "not", "value": 1} - ], - "join": "round", - "cap": "round", - "type": "line" - }, - "admin_l3": { - "source": "outdoors", - "layer": "admin", - "filter": [ - "and", - {"field": "admin_level", "value": [3,4,5]}, - {"field": "maritime", "operator": "not", "value": 1} - ], - "join": "round", - "type": "line" - }, - "landcover_wood": { - "source": "outdoors", - "layer": "landcover", - "field": "class", - "value": "wood", - "type": "fill" - }, - "landcover_scrub": { - "source": "outdoors", - "layer": "landcover", - "field": "class", - "value": "scrub", - "type": "fill" - }, - "landcover_grass": { - "source": "outdoors", - "layer": "landcover", - "field": "class", - "value": "grass", - "type": "fill" - }, - "landcover_crop": { - "source": "outdoors", - "layer": "landcover", - "field": "class", - "value": "crop", - "type": "fill" - }, - "landcover_snow": { - "source": "outdoors", - "layer": "landcover", - "field": "class", - "value": "snow", - "type": "fill" - }, - "water": { - "source": "outdoors", - "layer": "water", - "type": "fill" - }, - "waterway_other": { - "source": "outdoors", - "layer": "waterway", - "field": "type", - "value": [ - "ditch", - "drain" - ], - "cap": "round", - "type": "line" - }, - "waterway_river_canal": { - "source": "outdoors", - "layer": "waterway", - "field": "type", - "value": [ - "river", - "canal" - ], - "cap": "round", - "type": "line" - }, - "waterway_stream": { - "source": "outdoors", - "layer": "waterway", - "field": "type", - "value": "stream", - "cap": "round", - "type": "line" - }, - "landuse_park": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "park", - "type": "fill" - }, - "landuse_pitch": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "pitch", - "type": "fill" - }, - "landuse_cemetery": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "cemetery", - "type": "fill" - }, - "landuse_hospital": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "hospital", - "type": "fill" - }, - "landuse_industrial": { - "source": "outdoors", - "layer": "landuse", - "type": "fill", - "field": "class", - "value": "industrial" - }, - "landuse_school": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "school", - "type": "fill" - }, - "landuse_wood": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "wood", - "type": "fill" - }, - "landuse_scrub": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "scrub", - "type": "fill" - }, - "landuse_grass": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "grass", - "type": "fill" - }, - "landuse_crop": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "crop", - "type": "fill" - }, - "landuse_sand": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "sand", - "type": "fill" - }, - "landuse_rock": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "rock", - "type": "fill" - }, - "landuse_snow": { - "source": "outdoors", - "layer": "landuse", - "field": "class", - "value": "snow", - "type": "fill" - }, - "overlay_wetland": { - "source": "outdoors", - "layer": "landuse_overlay", - "field": "class", - "value": ["wetland", "wetland_noveg"], - "type": "fill" - }, - "overlay_breakwater_pier": { - "source": "outdoors", - "layer": "landuse_overlay", - "field": "class", - "value": [ - "breakwater", - "pier" - ], - "type": "fill" - }, - "hillshade_full_shadow": { - "source": "outdoors", - "layer": "hillshade", - "field": "class", - "value": "full_shadow", - "type": "fill" - }, - "hillshade_medium_shadow": { - "source": "outdoors", - "layer": "hillshade", - "field": "class", - "value": "medium_shadow", - "type": "fill" - }, - "hillshade_medium_highlight": { - "source": "outdoors", - "layer": "hillshade", - "field": "class", - "value": "medium_highlight", - "type": "fill" - }, - "hillshade_full_highlight": { - "source": "outdoors", - "layer": "hillshade", - "field": "class", - "value": "full_highlight", - "type": "fill" - }, - "contour_line_5": { - "source": "outdoors", - "layer": "contour", - "field": "index", - "join": "round", - "value": 5, - "type": "line" - }, - "contour_line_10": { - "source": "outdoors", - "layer": "contour", - "field": "index", - "join": "round", - "value": 10, - "type": "line" - }, - "contour_line_other": { - "source": "outdoors", - "layer": "contour", - "join": "round", - "type": "line" - }, - "contour_label": { - "source": "outdoors", - "layer": "contour", - "filter": [ - "and", - { "field": "index", "value": [ 5, 10 ] }, - { "field": "ele", "operator": "not", "value": 0 } - ], - "path": "curve", - "text_field": "{{ele}} m", - "font": "Open Sans Regular, Arial Unicode MS Regular", - "fontSize": 10, - "feature_type": "line", - "type": "text", - "maxAngleDelta": 0.5 - }, - "building": { - "source": "outdoors", - "layer": "building", - "type": "fill" - }, - "barrier_line_gate": { - "source": "outdoors", - "layer": "barrier_line", - "field": "class", - "value": "gate", - "type": "line" - }, - "barrier_line_fence": { - "source": "outdoors", - "layer": "barrier_line", - "field": "class", - "value": "fence", - "type": "line" - }, - "barrier_line_hedge": { - "source": "outdoors", - "layer": "barrier_line", - "field": "class", - "value": "hedge", - "type": "line" - }, - "barrier_line_land": { - "source": "outdoors", - "layer": "barrier_line", - "field": "class", - "value": "land", - "type": "line" - }, - "barrier_line_land_fill": { - "source": "outdoors", - "layer": "barrier_line", - "field": "class", - "value": "land", - "type": "fill" - }, - "barrier_line_cliff": { - "source": "outdoors", - "layer": "barrier_line", - "field": "class", - "value": "cliff", - "type": "line" - }, - "aeroway_fill": { - "source": "outdoors", - "layer": "aeroway", - "type": "fill", - "enabled": 12 - }, - "aeroway_runway": { - "source": "outdoors", - "layer": "aeroway", - "field": "type", - "value": "runway", - "type": "line", - "enabled": 12 - }, - "aeroway_taxiway": { - "source": "outdoors", - "layer": "aeroway", - "field": "type", - "value": "taxiway", - "type": "line", - "enabled": 12 - }, - "motorway": { - "source": "outdoors", - "layer": "road", - "field": "class", - "value": "motorway", - "join": "round", - "cap": "round", - "type": "line" - }, - "motorway_link": { - "source": "outdoors", - "layer": "road", - "field": "class", - "value": "motorway_link", - "join": "round", - "cap": "round", - "type": "line" - }, - "main": { - "source": "outdoors", - "layer": "road", - "field": "class", - "value": "main", - "join": "round", - "cap": "round", - "type": "line" - }, - "street": { - "source": "outdoors", - "layer": "road", - "field": "class", - "value": [ - "street", - "street_limited" - ], - "join": "round", - "cap": "round", - "type": "line", - "enabled": 12 - }, - "service": { - "source": "outdoors", - "layer": "road", - "field": "class", - "value": "service", - "join": "round", - "cap": "round", - "type": "line", - "enabled": 15 - }, - "path": { - "source": "outdoors", - "layer": "road", - "field": "class", - "value": "path", - "type": "line" - }, - "path_footway": { - "source": "outdoors", - "layer": "road", - "field": "type", - "value": "footway", - "type": "line" - }, - "path_path": { - "source": "outdoors", - "layer": "road", - "field": "type", - "value": "path", - "type": "line" - }, - "path_cycleway": { - "source": "outdoors", - "layer": "road", - "field": "type", - "value": "cycleway", - "type": "line" - }, - "path_mtb": { - "source": "outdoors", - "layer": "road", - "field": "type", - "value": "mtb", - "type": "line" - }, - "path_steps": { - "source": "outdoors", - "layer": "road", - "field": "type", - "value": "steps", - "type": "line" - }, - "path_piste": { - "source": "outdoors", - "layer": "road", - "field": "type", - "value": "piste", - "type": "line" - }, - "major_rail": { - "source": "outdoors", - "layer": "road", - "field": "class", - "value": "major_rail", - "type": "line" - }, - "tunnel_motorway": { - "source": "outdoors", - "layer": "tunnel", - "field": "class", - "value": "motorway", - "type": "line" - }, - "tunnel_motorway_link": { - "source": "outdoors", - "layer": "tunnel", - "field": "class", - "value": "motorway_link", - "type": "line" - }, - "tunnel_main": { - "source": "outdoors", - "layer": "tunnel", - "field": "class", - "value": "main", - "type": "line" - }, - "tunnel_street": { - "source": "outdoors", - "layer": "tunnel", - "field": "class", - "value": [ - "street", - "street_limited" - ], - "type": "line", - "enabled": 12 - }, - "tunnel_service": { - "source": "outdoors", - "layer": "tunnel", - "field": "class", - "value": "service", - "type": "line", - "enabled": 15 - }, - "tunnel_path": { - "source": "outdoors", - "layer": "tunnel", - "field": "class", - "value": "path", - "type": "line" - }, - "tunnel_path_footway": { - "source": "outdoors", - "layer": "tunnel", - "field": "type", - "value": "footway", - "type": "line" - }, - "tunnel_path_path": { - "source": "outdoors", - "layer": "tunnel", - "field": "type", - "value": "path", - "type": "line" - }, - "tunnel_path_cycleway": { - "source": "outdoors", - "layer": "tunnel", - "field": "type", - "value": "cycleway", - "type": "line" - }, - "tunnel_path_mtb": { - "source": "outdoors", - "layer": "tunnel", - "field": "type", - "value": "mtb", - "type": "line" - }, - "tunnel_path_steps": { - "source": "outdoors", - "layer": "tunnel", - "field": "type", - "value": "steps", - "type": "line" - }, - "tunnel_path_piste": { - "source": "outdoors", - "layer": "tunnel", - "field": "type", - "value": "piste", - "type": "line" - }, - "tunnel_major_rail": { - "source": "outdoors", - "layer": "tunnel", - "field": "class", - "value": "major_rail", - "type": "line" - }, - "bridge_motorway": { - "source": "outdoors", - "layer": "bridge", - "field": "class", - "value": "motorway", - "type": "line" - }, - "bridge_motorway_link": { - "source": "outdoors", - "layer": "bridge", - "field": "class", - "value": "motorway_link", - "type": "line" - }, - "bridge_main": { - "source": "outdoors", - "layer": "bridge", - "field": "class", - "value": "main", - "type": "line" - }, - "bridge_street": { - "source": "outdoors", - "layer": "bridge", - "field": "class", - "value": [ - "street", - "street_limited" - ], - "type": "line", - "enabled": 12 - }, - "bridge_service": { - "source": "outdoors", - "layer": "bridge", - "field": "class", - "value": "service", - "type": "line", - "enabled": 15 - }, - "bridge_path": { - "source": "outdoors", - "layer": "bridge", - "type": "line" - }, - "bridge_path_footway": { - "source": "outdoors", - "layer": "bridge", - "field": "type", - "value": "footway", - "type": "line" - }, - "bridge_path_path": { - "source": "outdoors", - "layer": "bridge", - "field": "type", - "value": "path", - "type": "line" - }, - "bridge_path_cycleway": { - "source": "outdoors", - "layer": "bridge", - "field": "type", - "value": "cycleway", - "type": "line" - }, - "bridge_path_mtb": { - "source": "outdoors", - "layer": "bridge", - "field": "type", - "value": "mtb", - "type": "line" - }, - "bridge_path_steps": { - "source": "outdoors", - "layer": "bridge", - "field": "type", - "value": "steps", - "type": "line" - }, - "bridge_path_piste": { - "source": "outdoors", - "layer": "bridge", - "field": "type", - "value": "piste", - "type": "line" - }, - "bridge_major_rail": { - "source": "outdoors", - "layer": "bridge", - "field": "class", - "value": "major_rail", - "type": "line" - }, - "bridge_aerialway": { - "source": "outdoors", - "layer": "bridge", - "field": "class", - "value": "aerialway", - "type": "line" - }, - "country_label": { - "source": "outdoors", - "layer": "country_label", - "text_field": "{{name_en}}", - "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Bold", - "fontSize": 24, - "feature_type": "point", - "type": "text", - "maxWidth": 5 - }, - "country_label_line": { - "source": "outdoors", - "layer": "country_label_line", - "type": "line" - }, - "marine_label_line_1": { - "source": "outdoors", - "layer": "marine_label", - "feature_type": "line", - "type": "text", - "field": "labelrank", - "value": 1, - "text_field": "{{name_en}}", - "path": "curve", - "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", - "fontSize": 30, - "letterSpacing": 0.4, - "maxAngleDelta": 0.5 - }, - "marine_label_line_2": { - "source": "outdoors", - "layer": "marine_label", - "feature_type": "line", - "field": "labelrank", - "value": 2, - "type": "text", - "text_field": "{{name_en}}", - "path": "curve", - "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", - "fontSize": 24, - "letterSpacing": 0.2, - "maxAngleDelta": 0.5 - }, - "marine_label_line_3": { - "source": "outdoors", - "layer": "marine_label", - "feature_type": "line", - "type": "text", - "field": "labelrank", - "value": 3, - "text_field": "{{name_en}}", - "path": "curve", - "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", - "fontSize": 18, - "letterSpacing": 0.1, - "maxAngleDelta": 0.5 - }, - "marine_label_line_other": { - "source": "outdoors", - "layer": "marine_label", - "feature_type": "line", - "type": "text", - "field": "labelrank", - "value": [4, 5, 6], - "text_field": "{{name_en}}", - "path": "curve", - "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", - "fontSize": 16, - "letterSpacing": 0.1, - "maxAngleDelta": 0.5 - }, - "marine_label_point_1": { - "source": "outdoors", - "layer": "marine_label", - "feature_type": "point", - "type": "text", - "text_field": "{{name_en}}", - "path": "horizontal", - "field": "labelrank", - "value": 1, - "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", - "fontSize": 30, - "maxWidth": 8, - "letterSpacing": 0.4, - "lineHeight": 2 - }, - "marine_label_point_2": { - "source": "outdoors", - "layer": "marine_label", - "feature_type": "point", - "type": "text", - "text_field": "{{name_en}}", - "path": "horizontal", - "field": "labelrank", - "value": 2, - "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", - "fontSize": 24, - "maxWidth": 8, - "letterSpacing": 0.2, - "lineHeight": 1.5 - }, - "marine_label_point_3": { - "source": "outdoors", - "layer": "marine_label", - "feature_type": "point", - "type": "text", - "text_field": "{{name_en}}", - "path": "horizontal", - "field": "labelrank", - "value": 3, - "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", - "fontSize": 18, - "maxWidth": 8, - "letterSpacing": 0.1, - "lineHeight": 1.3 - }, - "marine_label_point_other": { - "source": "outdoors", - "layer": "marine_label", - "feature_type": "point", - "type": "text", - "text_field": "{{name_en}}", - "path": "horizontal", - "field": "labelrank", - "value": [4,5,6], - "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", - "fontSize": 16, - "maxWidth": 8, - "letterSpacing": 0.1, - "lineHeight": 1.2 - }, - "state_label": { - "source": "outdoors", - "layer": "state_label", - "text_field": "{{name_en}}", - "path": "horizontal", - "font": "Open Sans Regular, Arial Unicode MS Regular", - "fontSize": 16, - "feature_type": "point", - "type": "text", - "enabled": 4, - "maxWidth": 8 - }, - "place_label_city": { - "source": "outdoors", - "layer": "place_label", - "field": "type", - "value": "city", - "text_field": "{{name_en}}", - "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Bold", - "fontSize": 20, - "feature_type": "point", - "type": "text", - "maxWidth": 8 - }, - "place_label_town": { - "source": "outdoors", - "layer": "place_label", - "field": "type", - "value": "town", - "text_field": "{{name_en}}", - "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Bold", - "fontSize": 24, - "feature_type": "point", - "type": "text", - "maxWidth": 8 - }, - "place_label_village": { - "source": "outdoors", - "layer": "place_label", - "field": "type", - "value": "village", - "text_field": "{{name_en}}", - "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Bold", - "fontSize": 22, - "feature_type": "point", - "type": "text", - "maxWidth": 8 - }, - "place_label_other": { - "source": "outdoors", - "layer": "place_label", - "field": "type", - "value": [ - "hamlet", - "suburb", - "neighbourhood" - ], - "text_field": "{{name_en}}", - "path": "horizontal", - "font": "Open Sans Semibold, Arial Unicode MS Bold", - "fontSize": 18, - "maxWidth": 6, - "feature_type": "point", - "type": "text" - }, - "road_label_1": { - "source": "outdoors", - "layer": "road_label", - "field": "class", - "value": ["motorway","main"], - "text_field": "{{name_en}}", - "path": "curve", - "padding": 2, - "font": "Open Sans Regular, Arial Unicode MS Regular", - "fontSize": 18, - "feature_type": "line", - "type": "text", - "maxAngleDelta": 0.5 - }, - "road_label_2": { - "source": "outdoors", - "layer": "road_label", - "field": "class", - "value": ["street","street_limited"], - "text_field": "{{name_en}}", - "path": "curve", - "padding": 2, - "font": "Open Sans Regular, Arial Unicode MS Regular", - "fontSize": 16, - "feature_type": "line", - "type": "text", - "maxAngleDelta": 0.5 - }, - "road_label_3": { - "source": "outdoors", - "layer": "road_label", - "field": "class", - "value": ["service","driveway","path"], - "text_field": "{{name_en}}", - "path": "curve", - "padding": 2, - "font": "Open Sans Regular, Arial Unicode MS Regular", - "fontSize": 14, - "feature_type": "line", - "type": "text", - "maxAngleDelta": 0.5 - }, - "water_label": { - "source": "outdoors", - "layer": "water_label", - "text_field": "{{name_en}}", - "path": "horizontal", - "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", - "fontSize": 12, - "feature_type": "point", - "type": "text", - "maxWidth": 8 - }, - "waterway_label": { - "source": "outdoors", - "layer": "waterway_label", - "text_field": "{{name_en}}", - "path": "curve", - "font": "Open Sans Semibold Italic, Arial Unicode MS Bold", - "fontSize": 12, - "feature_type": "line", - "type": "text", - "maxAngleDelta": 0.5 - }, - "poi": { - "source": "outdoors", - "layer": "poi_label", - "icon": "{{maki}}", - "field": "scalerank", - "value": [1, 2], - "size": 12, - "type": "point" - }, - "poi_3": { - "source": "outdoors", - "layer": "poi_label", - "icon": "{{maki}}", - "field": "scalerank", - "value": 3, - "size": 12, - "type": "point" - }, - "poi_4_4": { - "source": "outdoors", - "layer": "poi_label", - "icon": "{{maki}}", - "filter": [ - "and", - { "field": "scalerank", "value": 4 }, - { "field": "localrank", "operator": "<=", "value": 4 } - ], - "size": 12, - "type": "point" - }, - "poi_4_16": { - "source": "outdoors", - "layer": "poi_label", - "icon": "{{maki}}", - "filter": [ - "and", - { "field": "scalerank", "value": 4 }, - { "field": "localrank", "operator": "<=", "value": 16 }, - { "field": "localrank", "operator": ">", "value": 4 } - ], - "size": 12, - "type": "point" - }, - "poi_4_all": { - "source": "outdoors", - "layer": "poi_label", - "icon": "{{maki}}", - "field": "scalerank", - "value": 4, - "size": 12, - "type": "point" - }, - "poi_aerodrome": { - "source": "outdoors", - "layer": "poi_label", - "icon": "{{maki}}", - "field": "maki", - "value": "airport", - "size": 24, - "type": "point" - }, - "poi_label_1-2": { - "source": "outdoors", - "layer": "poi_label", - "field": "scalerank", - "value": [ - 1, - 2 - ], - "text_field": "{{name_en}}", - "path": "horizontal", - "padding": 2, - "maxWidth": 10, - "verticalAlignment": "top", - "translate": [0, -1], - "font": "Open Sans Semibold, Arial Unicode MS Bold", - "fontSize": 12, - "feature_type": "point", - "type": "text" - }, - "poi_label_3": { - "source": "outdoors", - "layer": "poi_label", - "field": "scalerank", - "value": 3, - "text_field": "{{name_en}}", - "path": "horizontal", - "padding": 2, - "maxWidth": 8, - "verticalAlignment": "top", - "translate": [0, -1], - "font": "Open Sans Semibold, Arial Unicode MS Bold", - "fontSize": 11, - "feature_type": "point", - "type": "text" - }, - "poi_label_4_4": { - "source": "outdoors", - "layer": "poi_label", - "filter": [ - "and", - { "field": "scalerank", "value": 4 }, - { "field": "localrank", "operator": "<=", "value": 4 } - ], - "text_field": "{{name_en}}", - "path": "horizontal", - "padding": 2, - "maxWidth": 8, - "verticalAlignment": "top", - "translate": [0, -1], - "font": "Open Sans Semibold, Arial Unicode MS Bold", - "fontSize": 10, - "feature_type": "point", - "type": "text" - }, - "poi_label_4_16": { - "source": "outdoors", - "layer": "poi_label", - "filter": [ - "and", - { "field": "scalerank", "value": 4 }, - { "field": "localrank", "operator": "<=", "value": 16 } - ], - "text_field": "{{name_en}}", - "path": "horizontal", - "padding": 2, - "maxWidth": 8, - "verticalAlignment": "top", - "translate": [0, -1], - "font": "Open Sans Semibold, Arial Unicode MS Bold", - "fontSize": 10, - "feature_type": "point", - "type": "text" - }, - "poi_label_4_all": { - "source": "outdoors", - "layer": "poi_label", - "field": "scalerank", - "value": 4, - "text_field": "{{name_en}}", - "path": "horizontal", - "padding": 2, - "maxWidth": 8, - "verticalAlignment": "top", - "translate": [0, -1], - "font": "Open Sans Semibold, Arial Unicode MS Bold", - "fontSize": 10, - "feature_type": "point", - "type": "text" - } + "version": 3, + "sprite": "https://www.mapbox.com/mapbox-gl-styles/sprites/outdoors", + "glyphs": "https://mapbox.s3.amazonaws.com/gl-glyphs-256/{{fontstack}}/{{range}}.pbf", + "sources": { + "mapbox": { + "type": "vector", + "url": "mapbox://mapbox.mapbox-terrain-v1,mapbox.mapbox-streets-v5", + "tileSize": 512, + "maxZoom": 14 + } + }, + "constants": { + "@land": "rgb(244,239,225)", + "@water": "#cdd", + "@water_dark": "#185869", + "@crop": "#eeeed4", + "@grass": "#e6e6cc", + "@scrub": "#dfe5c8", + "@wood": "#cee2bd", + "@snow": "#f4f8ff", + "@rock": "#ddd", + "@sand": "#ffd", + "@cemetery": "#edf4ed", + "@pitch": "#fff", + "@park": "#d4e4bc", + "@piste": "blue", + "@school": "#e8dfe0", + "@hospital": "#f8eee0", + "@builtup": "#f6faff", + "@case": "#fff", + "@motorway": "#cda0a0", + "@main": "#ddc0b9", + "@street": "#fff", + "@text": "#666", + "@text_stroke": "rgba(255,255,255,0.8)", + "@country_text": "#222", + "@marine_text": "#a0bdc0", + "@water_text": "#185869", + "@land_night": "#017293", + "@water_night": "#103", + "@water_dark_night": "#003366", + "@crop_night": "#178d96", + "@grass_night": "#23948a", + "@scrub_night": "#31a186", + "@wood_night": "#45b581", + "@park_night": "#51bd8b", + "@snow_night": "#5ad9fe", + "@rock_night": "#999", + "@sand_night": "#437162", + "@cemetery_night": "#218c96", + "@pitch_night": "rgba(255,255,255,0.2)", + "@school_night": "#01536a", + "@hospital_night": "#015e7a", + "@builtup_night": "#014b60", + "@admin_night": "#ffb680", + "@text_night": "#fff", + "@text_water_night": "#2a5b8a", + "@text_stroke_night": "#103", + "@text2_stroke_night": "rgba(1,69,89,0.8)", + "@case_night": "#015e7a", + "@street_case_night": "#015b76", + "@motorway_night": "#bbdde7", + "@main_night": "#64b2c9", + "@street_night": "#0186ac", + "@contour_night": "#ffff80", + "@river_canal_width": { + "fn": "stops", + "stops": [[11, 0.5], [12, 1], [14, 2], [16, 3]] }, - "structure": [ - { - "name": "background", - "bucket": "background" - }, - { - "name": "landcover_snow", - "bucket": "landcover_snow" - }, - { - "name": "landcover_crop", - "bucket": "landcover_crop" - }, - { - "name": "landcover_grass", - "bucket": "landcover_grass" - }, - { - "name": "landcover_scrub", - "bucket": "landcover_scrub" - }, - { - "name": "landcover_wood", - "bucket": "landcover_wood" - }, - { - "name": "landuse_wood", - "bucket": "landuse_wood" - }, - { - "name": "landuse_school", - "bucket": "landuse_school" - }, - { - "name": "landuse_sand", - "bucket": "landuse_sand" - }, - { - "name": "landuse_pitch", - "bucket": "landuse_pitch" - }, - { - "name": "landuse_park", - "bucket": "landuse_park" - }, - { - "name": "landuse_industrial", - "bucket": "landuse_industrial" - }, - { - "name": "landuse_scrub", - "bucket": "landuse_scrub" - }, - { - "name": "landuse_grass", - "bucket": "landuse_grass" - }, - { - "name": "landuse_crop", - "bucket": "landuse_crop" - }, - { - "name": "landuse_rock", - "bucket": "landuse_rock" - }, - { - "name": "landuse_snow", - "bucket": "landuse_snow" - }, - { - "name": "landuse_hospital", - "bucket": "landuse_hospital" - }, - { - "name": "landuse_cemetery", - "bucket": "landuse_cemetery" - }, - { - "name": "overlay_wetland", - "bucket": "overlay_wetland" - }, - { - "name": "overlay_breakwater_pier", - "bucket": "overlay_breakwater_pier" - }, - { - "name": "waterway_river_canal", - "bucket": "waterway_river_canal" - }, - { - "name": "waterway_stream", - "bucket": "waterway_stream" - }, - { - "name": "building_shadow", - "bucket": "building" - }, - { - "name": "building", - "bucket": "building" - }, - { - "name": "building_wall", - "bucket": "building" - }, - { - "name": "hillshade_full_highlight", - "bucket": "hillshade_full_highlight" - }, - { - "name": "hillshade_medium_highlight", - "bucket": "hillshade_medium_highlight" - }, - { - "name": "hillshade_medium_shadow", - "bucket": "hillshade_medium_shadow" - }, - { - "name": "hillshade_full_shadow", - "bucket": "hillshade_full_shadow" - }, - { - "name": "contour_line_loud", - "bucket": "contour_line_10" - }, - { - "name": "contour_line_loud", - "bucket": "contour_line_5" - }, - { - "name": "contour_line_regular", - "bucket": "contour_line_other" - }, - { - "name": "barrier_line_gate", - "bucket": "barrier_line_gate" - }, - { - "name": "barrier_line_fence", - "bucket": "barrier_line_fence" - }, - { - "name": "barrier_line_hedge", - "bucket": "barrier_line_hedge" - }, - { - "name": "barrier_line_land", - "bucket": "barrier_line_land" - }, - { - "name": "barrier_line_land_fill", - "bucket": "barrier_line_land_fill" - }, - { - "name": "barrier_line_cliff", - "bucket": "barrier_line_cliff" - }, - { - "name": "water", - "bucket": "water" - }, - { - "name": "aeroway_fill", - "bucket": "aeroway_fill" - }, - { - "name": "aeroway_runway", - "bucket": "aeroway_runway" - }, - { - "name": "aeroway_taxiway", - "bucket": "aeroway_taxiway" - }, - { - "name": "tunnel_motorway_link_casing", - "bucket": "tunnel_motorway_link" - }, - { - "name": "tunnel_service_casing", - "bucket": "tunnel_service" - }, - { - "name": "tunnel_main_casing", - "bucket": "tunnel_main" - }, - { - "name": "tunnel_street_casing", - "bucket": "tunnel_street" - }, - { - "name": "tunnel_motorway_link", - "bucket": "tunnel_motorway_link" - }, - { - "name": "tunnel_service", - "bucket": "tunnel_service" - }, - { - "name": "tunnel_street", - "bucket": "tunnel_street" - }, - { - "name": "tunnel_main", - "bucket": "tunnel_main" - }, - { - "name": "tunnel_motorway_casing", - "bucket": "tunnel_motorway" - }, - { - "name": "tunnel_motorway", - "bucket": "tunnel_motorway" - }, - { - "name": "road_path_case", - "bucket": "tunnel_path" - }, - { - "name": "road_path_footway", - "bucket": "tunnel_path_footway" - }, - { - "name": "road_path_path", - "bucket": "tunnel_path_path" - }, - { - "name": "road_path_cycleway", - "bucket": "tunnel_path_cycleway" - }, - { - "name": "road_path_mtb", - "bucket": "tunnel_path_mtb" - }, - { - "name": "road_path_piste", - "bucket": "tunnel_path_piste" - }, - { - "name": "road_path_steps", - "bucket": "tunnel_path_steps" - }, - { - "name": "road_major_rail", - "bucket": "tunnel_major_rail" - }, - { - "name": "road_major_rail_hatching", - "bucket": "tunnel_major_rail" - }, - { - "name": "road_motorway_link_casing", - "bucket": "motorway_link" - }, - { - "name": "road_service_casing", - "bucket": "service" - }, - { - "name": "road_main_casing", - "bucket": "main" - }, - { - "name": "road_street_casing", - "bucket": "street" - }, - { - "name": "road_motorway_casing", - "bucket": "motorway" - }, - { - "name": "road_motorway_link", - "bucket": "motorway_link" - }, - { - "name": "road_service", - "bucket": "service" - }, - { - "name": "road_street", - "bucket": "street" - }, - { - "name": "road_main", - "bucket": "main" - }, - { - "name": "road_motorway", - "bucket": "motorway" - }, - { - "name": "road_path_case", - "bucket": "path" - }, - { - "name": "road_path_footway", - "bucket": "path_footway" - }, - { - "name": "road_path_path", - "bucket": "path_path" - }, - { - "name": "road_path_cycleway", - "bucket": "path_cycleway" - }, - { - "name": "road_path_mtb", - "bucket": "path_mtb" - }, - { - "name": "road_path_piste", - "bucket": "path_piste" - }, - { - "name": "road_path_steps", - "bucket": "path_steps" - }, - { - "name": "road_major_rail", - "bucket": "major_rail" - }, - { - "name": "road_major_rail_hatching", - "bucket": "major_rail" - }, - { - "name": "bridge_motorway_link_casing", - "bucket": "bridge_motorway_link" - }, - { - "name": "bridge_service_casing", - "bucket": "bridge_service" - }, - { - "name": "bridge_main_casing", - "bucket": "bridge_main" - }, - { - "name": "bridge_street_casing", - "bucket": "bridge_street" - }, - { - "name": "bridge_motorway_link", - "bucket": "bridge_motorway_link" - }, - { - "name": "bridge_service", - "bucket": "bridge_service" - }, - { - "name": "bridge_street", - "bucket": "bridge_street" - }, - { - "name": "bridge_main", - "bucket": "bridge_main" - }, - { - "name": "bridge_motorway_casing", - "bucket": "bridge_motorway" - }, - { - "name": "bridge_motorway", - "bucket": "bridge_motorway" - }, - { - "name": "road_path_footway", - "bucket": "bridge_path_footway" - }, - { - "name": "road_path_path", - "bucket": "bridge_path_path" - }, - { - "name": "road_path_cycleway", - "bucket": "bridge_path_cycleway" - }, - { - "name": "road_path_mtb", - "bucket": "bridge_path_mtb" - }, - { - "name": "road_path_piste", - "bucket": "bridge_path_piste" - }, - { - "name": "road_path_steps", - "bucket": "bridge_path_steps" - }, - { - "name": "bridge_aerialway_casing", - "bucket": "bridge_aerialway" - }, - { - "name": "bridge_aerialway", - "bucket": "bridge_aerialway" - }, - { - "name": "road_major_rail", - "bucket": "bridge_major_rail" - }, - { - "name": "road_major_rail_hatching", - "bucket": "bridge_major_rail" - }, - { - "name": "admin_l3", - "bucket": "admin_l3" - }, - { - "name": "admin_l2", - "bucket": "admin_l2" - }, - { - "name": "admin_maritime_cover", - "bucket": "admin_maritime" - }, - { - "name": "admin_maritime", - "bucket": "admin_maritime" - }, - { - "name": "country_label_line", - "bucket": "country_label_line" - }, - { - "name": "country_label", - "bucket": "country_label" - }, - { - "name": "marine_label_line_1", - "bucket": "marine_label_line_1" - }, - { - "name": "marine_label_line_2", - "bucket": "marine_label_line_2" - }, - { - "name": "marine_label_line_3", - "bucket": "marine_label_line_3" - }, - { - "name": "marine_label_line_other", - "bucket": "marine_label_line_other" - }, - { - "name": "marine_label_point_1", - "bucket": "marine_label_point_1" - }, - { - "name": "marine_label_point_2", - "bucket": "marine_label_point_2" - }, - { - "name": "marine_label_point_3", - "bucket": "marine_label_point_3" - }, - { - "name": "marine_label_point_other", - "bucket": "marine_label_point_other" - }, - { - "name": "state_label", - "bucket": "state_label" - }, - { - "name": "place_label_city", - "bucket": "place_label_city" - }, - { - "name": "place_label_town", - "bucket": "place_label_town" - }, - { - "name": "place_label_village", - "bucket": "place_label_village" - }, - { - "name": "place_label_other", - "bucket": "place_label_other" - }, - { - "name": "water_label", - "bucket": "water_label" - }, - { - "name": "poi_aerodrome", - "bucket": "poi_aerodrome" - }, - { - "name": "poi", - "bucket": "poi" - }, - { - "name": "poi_label_1-2", - "bucket": "poi_label_1-2" - }, - { - "name": "road_label_1", - "bucket": "road_label_1" - }, - { - "name": "poi_3", - "bucket": "poi_3" - }, - { - "name": "poi_label_3", - "bucket": "poi_label_3" - }, - { - "name": "road_label_2", - "bucket": "road_label_2" - }, - { - "name": "road_label_3", - "bucket": "road_label_3" - }, - { - "name": "contour_label", - "bucket": "contour_label" - }, - { - "name": "waterway_label", - "bucket": "waterway_label" - }, - { - "name": "poi_4_4", - "bucket": "poi_4_4" - }, - { - "name": "poi_label_4_4", - "bucket": "poi_label_4_4" - }, - { - "name": "poi_4_16", - "bucket": "poi_4_16" - }, - { - "name": "poi_label_4_16", - "bucket": "poi_label_4_16" - }, - { - "name": "poi_4_all", - "bucket": "poi_4_all" - }, - { - "name": "poi_label_4_all", - "bucket": "poi_label_4_all" - } - ], - "constants": { - "land": "rgb(244,239,225)", - "water": "#cdd", - "water_dark": "#185869", - "crop": "#eeeed4", - "grass": "#e6e6cc", - "scrub": "#dfe5c8", - "wood": "#cee2bd", - "snow": "#f4f8ff", - "rock": "#ddd", - "sand": "#ffd", - "cemetery": "#edf4ed", - "pitch": "#fff", - "park": "#d4e4bc", - "piste": "blue", - "school": "#e8dfe0", - "hospital": "#f8eee0", - "builtup": "#f6faff", - "case": "#fff", - "motorway": "#cda0a0", - "main": "#ddc0b9", - "street": "#fff", - "text": "#666", - "text_stroke": "rgba(255,255,255,0.8)", - "country_text": "#222", - "marine_text": "#a0bdc0", - "water_text": "#185869", - - "land_night": "#017293", - "water_night": "#103", - "water_dark_night": "#003366", - "crop_night": "#178d96", - "grass_night": "#23948a", - "scrub_night": "#31a186", - "wood_night": "#45b581", - "park_night": "#51bd8b", - "snow_night": "#5ad9fe", - "rock_night": "#999", - "sand_night": "#437162", - "cemetery_night": "#218c96", - "pitch_night": "rgba(255,255,255,0.2)", - "school_night": "#01536a", - "hospital_night": "#015e7a", - "builtup_night": "#014b60", - - "admin_night": "#ffb680", - "text_night": "#fff", - "text_water_night": "#2a5b8a", - "text_stroke_night": "#103", - "text2_stroke_night": "rgba(1,69,89,0.8)", - - "case_night": "#015e7a", - "street_case_night": "#015b76", - "motorway_night": "#bbdde7", - "main_night": "#64b2c9", - "street_night": "#0186ac", - "contour_night": "#ffff80", - - "river_canal_width": [ - "stops", - {"z": 11, "val": 0.5}, - {"z": 12, "val": 1}, - {"z": 14, "val": 2}, - {"z": 16, "val": 3} - ], - "stream_width": [ - "stops", - {"z": 13, "val": 0.25}, - {"z": 14, "val": 0.5}, - {"z": 16, "val": 1.5}, - {"z": 18, "val": 2} - ], - "motorway_width": [ - "stops", - {"z": 5, "val": 0}, - {"z": 6, "val": 0.5}, - {"z": 8, "val": 0.8}, - {"z": 10, "val": 1}, - {"z": 11, "val": 1.2}, - {"z": 12, "val": 2}, - {"z": 13, "val": 3}, - {"z": 14, "val": 4}, - {"z": 15, "val": 6}, - {"z": 16, "val": 9}, - {"z": 17, "val": 12}, - {"z": 18, "val": 14} - ], - "motorway_casing_width": [ - "stops", - {"z": 7.5, "val": 0.6}, - {"z": 8, "val": 0.8}, - {"z": 10, "val": 2.8}, - {"z": 11, "val": 3}, - {"z": 12, "val": 4}, - {"z": 13, "val": 5}, - {"z": 14, "val": 6.5}, - {"z": 15, "val": 9}, - {"z": 16, "val": 12}, - {"z": 17, "val": 15}, - {"z": 18, "val": 17} - ], - "motorway_link_width": [ - "stops", - {"z": 12, "val": 1.2}, - {"z": 14, "val": 2}, - {"z": 16, "val": 3}, - {"z": 18, "val": 4} - ], - "motorway_link_casing_width": [ - "stops", - {"z": 12, "val": 2.8}, - {"z": 14, "val": 3.5}, - {"z": 16, "val": 5}, - {"z": 18, "val": 6} - ], - "main_width": [ - "stops", - {"z": 5, "val": 1}, - {"z": 12, "val": 1}, - {"z": 13, "val": 1.5}, - {"z": 14, "val": 2}, - {"z": 15, "val": 3}, - {"z": 16, "val": 6}, - {"z": 17, "val": 10}, - {"z": 18, "val": 12} - ], - "main_casing_width": [ - "stops", - {"z": 9, "val": 2.9}, - {"z": 12, "val": 2.9}, - {"z": 13, "val": 3.5}, - {"z": 14, "val": 4}, - {"z": 15, "val": 5.5}, - {"z": 16, "val": 9}, - {"z": 17, "val": 12}, - {"z": 18, "val": 14} - ], - "street_width": [ - "stops", - {"z": 14.5, "val": 0}, - {"z": 15, "val": 1.5}, - {"z": 16, "val": 3}, - {"z": 17, "val": 8} - ], - "street_casing_width": [ - "stops", - {"z": 13, "val": 0.4}, - {"z": 14, "val": 1}, - {"z": 15, "val": 2.5}, - {"z": 16, "val": 4}, - {"z": 17, "val": 10} - ], - "street_casing_opacity": [ - "stops", - {"z": 14, "val": 0}, - {"z": 14.5, "val": 1} - ], - "service_casing_width": [ - "stops", - {"z": 14, "val": 0.5}, - {"z": 15, "val": 3}, - {"z": 16, "val": 3.5}, - {"z": 17, "val": 4}, - {"z": 18, "val": 5}, - {"z": 19, "val": 6} - ], - "runway_width": [ - "stops", - {"z": 10, "val": 1}, - {"z": 11, "val": 2}, - {"z": 12, "val": 3}, - {"z": 13, "val": 5}, - {"z": 14, "val": 7}, - {"z": 15, "val": 11}, - {"z": 16, "val": 15}, - {"z": 17, "val": 19}, - {"z": 18, "val": 23} - ], - "taxiway_width": [ - "stops", - {"z": 10, "val": 0.2}, - {"z": 12, "val": 0.2}, - {"z": 13, "val": 1}, - {"z": 14, "val": 1.5}, - {"z": 15, "val": 2}, - {"z": 16, "val": 3}, - {"z": 17, "val": 4}, - {"z": 18,"val": 5} - ], - "aerialway_width": [ - "stops", - {"z": 13.5, "val": 0.8}, - {"z": 14, "val": 1.4}, - {"z": 15, "val": 1.6}, - {"z": 16, "val": 2}, - {"z": 17, "val": 2.4}, - {"z": 18, "val": 3} - ], - "aerialway_casing_width": [ - "stops", - {"z": 13.5, "val": 2}, - {"z": 14, "val": 2.5}, - {"z": 15, "val": 3}, - {"z": 16, "val": 3.5}, - {"z": 17, "val": 4}, - {"z": 22, "val": 5} - ], - "path_width": [ - "stops", - {"z": 14, "val": 1.2}, - {"z": 15, "val": 1.5}, - {"z": 16, "val": 1.8} - ], - "admin_l2_width": [ - "stops", - {"z": 2, "val": 0.5}, - {"z": 3, "val": 0.7}, - {"z": 4, "val": 0.7}, - {"z": 5, "val": 0.8}, - {"z": 6, "val": 1}, - {"z": 8, "val": 2}, - {"z": 10, "val": 3} - ], - "admin_l3_width": [ - "stops", - {"z": 6, "val": 0.6}, - {"z": 8, "val": 1}, - {"z": 12, "val": 2} - ], - "road_label_1_size": [ - "stops", - {"z": 13, "val": 11}, - {"z": 14, "val": 12}, - {"z": 15, "val": 13}, - {"z": 16, "val": 14}, - {"z": 17, "val": 16}, - {"z": 18, "val": 18} - ], - "road_label_2_size": [ - "stops", - {"z": 13, "val": 11}, - {"z": 14, "val": 12}, - {"z": 16, "val": 14}, - {"z": 18, "val": 16} - ], - "road_label_3_size": [ - "stops", - {"z": 15, "val": 10}, - {"z": 16, "val": 12}, - {"z": 18, "val": 14} - ], - "fence_width": [ - "stops", - {"z": 17, "val": 0.6}, - {"z": 19, "val": 1} - ], - "hedge_width": [ - "stops", - {"z": 16, "val": 0.6}, - {"z": 17, "val": 1.2}, - {"z": 19, "val": 1.6} - ], - "barrier_line_land_width": [ - "stops", - {"z": 14, "val": 0.4}, - {"z": 15, "val": 0.75}, - {"z": 16, "val": 1.5}, - {"z": 17, "val": 3}, - {"z": 18, "val": 6}, - {"z": 19, "val": 12}, - {"z": 20, "val": 24}, - {"z": 21, "val": 48} - ], - "country_label_size": [ - "stops", - {"z": 1, "val": 14}, - {"z": 12, "val": 24} - ], - "poi_label_1-2_size": [ - "stops", - {"z": 15, "val": 10}, - {"z": 16, "val": 11}, - {"z": 17, "val": 12} - ], - "poi_label_3_size": [ - "stops", - {"z": 16, "val": 10}, - {"z": 17, "val": 11} - ], - "hillshade_prerender": [ - "stops", - {"z": 11, "val": 0}, - {"z": 12, "val": 1} - ], - "hillshade_prerender_size": [ - "stops", - {"z": 11, "val": 1056}, - {"z": 12, "val": 512}, - {"z": 13, "val": 256} - ] + "@stream_width": { + "fn": "stops", + "stops": [[13, 0.25], [14, 0.5], [16, 1.5], [18, 2]] }, - "classes": [ - { - "name": "default", - "layers": { - "background": { - "color": "land" - }, - "admin_maritime_cover": { - "color": "water", - "width": 5 - }, - "admin_maritime": { - "color": "#c0d6d6", - "width": [ - "stops", - {"z": 6, "val": 1}, - {"z": 8, "val": 2}, - {"z": 12, "val": 3} - ] - }, - "admin_l2": { - "color": "#88a", - "width": "admin_l2_width" - }, - "admin_l3": { - "color": "#88a", - "dasharray": [ - 60, - 20 - ], - "opacity": [ - "stops", - {"z": 4, "val": 0}, - {"z": 6, "val": 1} - ], - "width": "admin_l3_width" - }, - "waterway_river_canal": { - "color": "#87abaf", - "width": "river_canal_width" - }, - "waterway_stream": { - "color": "#87abaf", - "width": "stream_width" - }, - "barrier_line_gate": { - "width": 2.5, - "color": "#aab" - }, - "barrier_line_fence": { - "color": "#aeada3", - "width": "fence_width" - }, - "barrier_line_hedge": { - "color": "#8de99b", - "width": "hedge_width" - }, - "barrier_line_land": { - "color": "land", - "width": "barrier_line_land_width" - }, - "barrier_line_land_fill": { - "color": "land" - }, - "barrier_line_cliff": { - "color": "#987", - "width": 4 - }, - "landcover_wood": { - "color": "wood", - "opacity": [ - "stops", - {"z": 13, "val": 1}, - {"z": 14, "val": 0.8}, - {"z": 17, "val": 0.2} - ] - }, - "landcover_scrub": { - "color": "scrub", - "opacity": [ - "stops", - {"z": 13, "val": 1}, - {"z": 14, "val": 0.8}, - {"z": 17, "val": 0.2} - ] - }, - "landcover_grass": { - "color": "grass", - "opacity": [ - "stops", - {"z": 13, "val": 1}, - {"z": 14, "val": 0.8}, - {"z": 17, "val": 0.2} - ] - }, - "landcover_crop": { - "color": "crop" - }, - "landcover_snow": { - "color": "snow" - }, - "landuse_wood": { - "color": "wood" - }, - "landuse_scrub": { - "color": "scrub" - }, - "landuse_grass": { - "color": "grass" - }, - "landuse_crop": { - "color": "crop" - }, - "landuse_snow": { - "color": "snow" - }, - "landuse_rock": { - "color": "rock" - }, - "landuse_sand": { - "color": "sand" - }, - "landuse_park": { - "color": "park" - }, - "landuse_cemetery": { - "color": "cemetery" - }, - "landuse_hospital": { - "color": "hospital" - }, - "landuse_school": { - "color": "school" - }, - "landuse_pitch": { - "color": "rgba(255,255,255,0.5)", - "stroke": "pitch" - }, - "landuse_industrial": { - "color": "rgba(246,250,255,0.5)" - }, - "overlay_wetland": { - "color": "rgba(210,225,225,0.2)", - "image": "wetland_noveg_64" - }, - "overlay_breakwater_pier": { - "color": "land" - }, - "hillshade_full_shadow": { - "color": "#103", - "antialias": false, - "prerender": "hillshade_prerender", - "prerender-size": "hillshade_prerender_size", - "prerender-blur": 1, - "opacity": [ - "stops", - {"z": 15, "val": 0.08}, - {"z": 16, "val": 0.075}, - {"z": 17, "val": 0.05}, - {"z": 18, "val": 0.05}, - {"z": 19, "val": 0.025} - ] - }, - "hillshade_medium_shadow": { - "color": "#206", - "antialias": false, - "prerender": "hillshade_prerender", - "prerender-size": "hillshade_prerender_size", - "prerender-blur": 1, - "opacity": [ - "stops", - {"z": 15, "val": 0.08}, - {"z": 16, "val": 0.075}, - {"z": 17, "val": 0.05}, - {"z": 18, "val": 0.05}, - {"z": 19, "val": 0.025} - ] - }, - "hillshade_full_highlight": { - "color": "#fffff3", - "antialias": false, - "prerender": "hillshade_prerender", - "prerender-size": "hillshade_prerender_size", - "prerender-blur": 1, - "opacity": [ - "stops", - {"z": 15, "val": 0.3}, - {"z": 16, "val": 0.3}, - {"z": 17, "val": 0.2}, - {"z": 18, "val": 0.2}, - {"z": 19, "val": 0.1} - ] - }, - "hillshade_medium_highlight": { - "color": "#ffd", - "antialias": false, - "prerender": "hillshade_prerender", - "prerender-size": "hillshade_prerender_size", - "prerender-blur": 1, - "opacity": [ - "stops", - {"z": 15, "val": 0.3}, - {"z": 16, "val": 0.3}, - {"z": 17, "val": 0.2}, - {"z": 18, "val": 0.2}, - {"z": 19, "val": 0.1} - ] - }, - "contour_line_loud": { - "color": "#008", - "width": 0.9, - "opacity": [ - "stops", - {"z": 12, "val": 0.05}, - {"z": 13, "val": 0.11} - ] - }, - "contour_line_regular": { - "color": "#008", - "width": 0.5, - "opacity": [ - "stops", - {"z": 12, "val": 0.05}, - {"z": 13, "val": 0.11} - ] - }, - "contour_label": { - "color": "text", - "stroke": "land", - "strokeWidth": 0.3, - "strokeBlur": 3, - "size": 10 - }, - "water": { - "color": "water", - "stroke": "#a2bdc0" - }, - "aeroway_fill": { - "color": "#ddd" - }, - "aeroway_runway": { - "color": "#ddd", - "width": "runway_width" - }, - "aeroway_taxiway": { - "color": "#ddd", - "width": "taxiway_width" - }, - "building": { - "color": "#ebe7db" - }, - "building_wall": { - "color": "#ebe7db", - "stroke": "#d5d1c6", - "opacity": [ - "stops", - {"z": 16.5, "val": 0}, - {"z": 17, "val": 0.7} - ] - }, - "building_shadow": { - "color": "#d5d1c6", - "stroke": "#d5d1c6", - "translate": [ - 1, - 1 - ], - "opacity": [ - "stops", - {"z": 16.5, "val": 0}, - {"z": 17, "val": 1} - ] - }, - "tunnel_motorway_casing": { - "color": "case", - "dasharray": [ - 6, - 6 - ], - "width": "motorway_casing_width", - "opacity": [ - "stops", - {"z": 9.5, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "tunnel_motorway": { - "color": "#e6cec7", - "width": "motorway_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "tunnel_main_casing": { - "color": "case", - "dasharray": [ - 6, - 6 - ], - "width": "main_casing_width", - "opacity": ["stops", - {"z": 9, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "tunnel_main": { - "color": "#e6cec7", - "width": "main_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "tunnel_motorway_link_casing": { - "color": "case", - "dasharray": [ - 6, - 6 - ], - "width": "motorway_link_casing_width" - }, - "tunnel_motorway_link": { - "color": "#e6cec7", - "width": "motorway_link_width" - }, - "tunnel_street_casing": { - "color": "#d9d5c6", - "width": "street_casing_width", - "opacity": "street_casing_opacity" - }, - "tunnel_street": { - "color": "#d9d5c6", - "width": "street_width" - }, - "tunnel_service_casing": { - "color": "#000", - "opacity": 0.04, - "dasharray": [ - 6, - 6 - ], - "width": "service_casing_width" - }, - "tunnel_service": { - "color": "#e6cec7", - "width": 2 - }, - "road_motorway_casing": { - "color": "case", - "width": "motorway_casing_width", - "opacity": [ - "stops", - {"z": 9.5, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "road_motorway": { - "color": "motorway", - "width": "motorway_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "road_main_casing": { - "color": "case", - "width": "main_casing_width", - "opacity": ["stops", - {"z": 9, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "road_main": { - "color": "main", - "width": "main_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "road_motorway_link_casing": { - "color": "case", - "width": "motorway_link_casing_width" - }, - "road_motorway_link": { - "color": "motorway", - "width": "motorway_link_width" - }, - "road_street_casing": { - "color": "#d9d5c6", - "width": "street_casing_width", - "opacity": "street_casing_opacity" - }, - "road_street": { - "color": "street", - "width": "street_width" - }, - "road_service_casing": { - "color": "#000", - "opacity": 0.04, - "width": "service_casing_width" - }, - "road_service": { - "color": "street", - "width": 2 - }, - "road_path_case": { - "color": "#ffd", - "opacity": 0.4, - "width": [ - "stops", - {"z": 15, "val": 3}, - {"z": 16, "val": 4} - ] - }, - "road_path_footway": { - "color": "#bba", - "dasharray": [ - 10, - 4 - ], - "width": "path_width" - }, - "road_path_path": { - "color": "#987", - "dasharray": [ - 10, - 4 - ], - "opacity": 0.8, - "width": [ - "stops", - {"z": 14, "val": 0.8}, - {"z": 15, "val": 0.9}, - {"z": 16, "val": 1.2} - ] - }, - "road_path_cycleway": { - "color": "#488", - "dasharray": [ - 10, - 4 - ], - "width": "path_width" - }, - "road_path_mtb": { - "color": "#488", - "dasharray": [ - 12, - 4 - ], - "width": "path_width" - }, - "road_path_piste": { - "color": "#87b", - "dasharray": [ - 8, - 4 - ], - "width": "path_width" - }, - "road_path_steps": { - "color": "#bba", - "dasharray": [ - 10, - 4 - ], - "width": 4 - }, - "road_major_rail": { - "color": "#c8c4c0", - "width": 0.8 - }, - "road_major_rail_hatching": { - "color": "#c8c4c0", - "dasharray": [ - 2, - 31 - ], - "width": 5 - }, - "bridge_motorway_casing": { - "color": "case", - "width": "motorway_casing_width", - "opacity": [ - "stops", - {"z": 9.5, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "bridge_motorway": { - "color": "motorway", - "width": "motorway_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "bridge_main_casing": { - "color": "case", - "width": "main_casing_width", - "opacity": ["stops", - {"z": 9, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "bridge_main": { - "color": "main", - "width": "main_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "bridge_motorway_link_casing": { - "color": "case", - "width": "motorway_link_casing_width" - }, - "bridge_motorway_link": { - "color": "motorway", - "width": "motorway_link_width" - }, - "bridge_street_casing": { - "color": "#d9d5c6", - "width": "street_casing_width", - "opacity": "street_casing_opacity" - }, - "bridge_street": { - "color": "street", - "width": "street_width" - }, - "bridge_service_casing": { - "color": "#000", - "opacity": 0.04, - "width": "service_casing_width" - }, - "bridge_service": { - "color": "street", - "width": 2 - }, - "bridge_aerialway_casing": { - "color": "white", - "opacity": 0.5, - "width": "aerialway_casing_width" - }, - "bridge_aerialway": { - "color": "#876", - "opacity": 0.5, - "width": "aerialway_width" - }, - "country_label": { - "color": "country_text", - "stroke": "rgba(255,255,255,0.5)", - "strokeWidth": 0.5, - "size": "country_label_size" - }, - "country_label_line": { - "color": "country_text", - "width": 0.5, - "opacity": 0.5 - }, - "marine_label_line_1": { - "color": "marine_text", - "size": ["stops", - {"z": 3, "val": 20}, - {"z": 4, "val": 25}, - {"z": 5, "val": 30}, - {"z": 22, "val": 30} - ], - "stroke": "water" - }, - "marine_label_line_2": { - "color": "marine_text", - "size": ["stops", - {"z": 3, "val": 13}, - {"z": 4, "val": 14}, - {"z": 5, "val": 20}, - {"z": 6, "val": 24}, - {"z": 22, "val": 24} - ], - "stroke": "water" - }, - "marine_label_line_3": { - "color": "marine_text", - "size": ["stops", - {"z": 3, "val": 12}, - {"z": 4, "val": 13}, - {"z": 5, "val": 15}, - {"z": 6, "val": 18}, - {"z": 22, "val": 18} - ], - "stroke": "water" - }, - "marine_label_line_other": { - "color": "marine_text", - "size": ["stops", - {"z": 4, "val": 12}, - {"z": 5, "val": 14}, - {"z": 6, "val": 16}, - {"z": 22, "val": 16} - ], - "stroke": "water" - }, - "marine_label_point_1": { - "color": "marine_text", - "size": ["stops", - {"z": 3, "val": 20}, - {"z": 4, "val": 25}, - {"z": 5, "val": 30}, - {"z": 22, "val": 30} - ], - "stroke": "water" - }, - "marine_label_point_2": { - "color": "marine_text", - "size": ["stops", - {"z": 3, "val": 13}, - {"z": 4, "val": 14}, - {"z": 5, "val": 20}, - {"z": 6, "val": 24}, - {"z": 22, "val": 24} - ], - "stroke": "water" - }, - "marine_label_point_3": { - "color": "marine_text", - "size": ["stops", - {"z": 3, "val": 12}, - {"z": 4, "val": 13}, - {"z": 5, "val": 15}, - {"z": 6, "val": 18}, - {"z": 22, "val": 18} - ], - "stroke": "water" - }, - "marine_label_point_other": { - "color": "marine_text", - "size": ["stops", - {"z": 4, "val": 12}, - {"z": 5, "val": 14}, - {"z": 6, "val": 16}, - {"z": 22, "val": 16} - ], - "stroke": "water" - }, - "state_label": { - "color": "#333", - "strokeWidth": 0.4, - "strokeBlur": 1, - "stroke": "rgba(244,239,225,0.8)", - "size": [ - "stops", - {"z": 3.99, "val": 0}, - {"z": 4, "val": 10}, - {"z": 9.99, "val": 16}, - {"z": 10, "val": 0} - ] - }, - "place_label_city": { - "color": "#444", - "strokeWidth": 0.4, - "stroke": "text_stroke", - "size": [ - "stops", - {"z": 3.99, "val": 0}, - {"z": 4, "val": 10}, - {"z": 7, "val": 14}, - {"z": 14.99, "val": 20}, - {"z": 15, "val": 0} - ] - }, - "place_label_town": { - "color": "#716656", - "strokeWidth": 0.3, - "strokeBlur": 2, - "stroke": "text_stroke", - "size": [ - "stops", - {"z": 9, "val": 10}, - {"z": 12, "val": 13}, - {"z": 14, "val": 17}, - {"z": 16, "val": 22} - ] - }, - "place_label_village": { - "color": "#635644", - "strokeWidth": 0.3, - "strokeBlur": 2, - "stroke": "text_stroke", - "size": [ - "stops", - {"z": 9, "val": 8}, - {"z": 12, "val": 10}, - {"z": 14, "val": 14}, - {"z": 16, "val": 16}, - {"z": 17, "val": 20} - ] - }, - "place_label_other": { - "color": "#7d6c55", - "stroke": "text_stroke", - "size": [ - "stops", - {"z": 13, "val": 11}, - {"z": 14, "val": 12}, - {"z": 16, "val": 14}, - {"z": 18, "val": 18} - ] - }, - "road_label_1": { - "color": "#585042", - "stroke": "land", - "strokeWidth": 0.6, - "strokeBlur": 2, - "size": "road_label_1_size" - }, - "road_label_2": { - "color": "#585042", - "stroke": "land", - "strokeWidth": 0.6, - "strokeBlur": 2, - "size": "road_label_2_size" - }, - "road_label_3": { - "color": "#585042", - "stroke": "land", - "strokeWidth": 0.6, - "strokeBlur": 2, - "size": "road_label_3_size" - }, - "water_label": { - "color": "water_dark", - "stroke": "rgba(255,255,255,0.75)" - }, - "waterway_label": { - "color": "water_dark", - "strokeWidth": 0.4, - "strokeBlur": 2, - "stroke": "text_stroke" - }, - "poi": { - "antialias": false - }, - "poi_3": { - "antialias": false, - "opacity": [ - "stops", - {"z": 17.5, "val": 0}, - {"z": 17.75, "val": 1} - ] - }, - "poi_4_4": { - "antialias": false, - "opacity": [ - "stops", - {"z": 18, "val": 0}, - {"z": 18.25, "val": 1} - ] - }, - "poi_4_16": { - "antialias": false, - "opacity": [ - "stops", - {"z": 18.5, "val": 0}, - {"z": 18.75, "val": 1} - ] - }, - "poi_4_all": { - "antialias": false, - "opacity": [ - "stops", - {"z": 18.75, "val": 0}, - {"z": 19, "val": 1} - ] - }, - "poi_label_1-2": { - "color": "#444", - "size": "poi_label_1-2_size", - "stroke": "land", - "strokeWidth": 0.3, - "strokeBlur": 1 - }, - "poi_label_3": { - "color": "#444", - "size": "poi_label_3_size", - "stroke": "land", - "strokeWidth": 0.3, - "strokeBlur": 1, - "opacity": [ - "stops", - {"z": 17.5, "val": 0}, - {"z": 17.75, "val": 1} - ] - }, - "poi_label_4_4": { - "color": "#444", - "size": 10, - "opacity": [ - "stops", - {"z": 18, "val": 0}, - {"z": 17.25, "val": 1} - ], - "stroke": "land", - "strokeWidth": 0.3, - "strokeBlur": 1 - }, - "poi_label_4_16": { - "color": "#444", - "size": 10, - "opacity": [ - "stops", - {"z": 18.25, "val": 0}, - {"z": 18.75, "val": 1} - ], - "stroke": "land", - "strokeWidth": 0.3, - "strokeBlur": 1 - }, - "poi_label_4_all": { - "color": "#444", - "size": 10, - "opacity": [ - "stops", - {"z": 18.75, "val": 0}, - {"z": 19, "val": 1} - ], - "stroke": "land", - "strokeWidth": 0.3, - "strokeBlur": 1 - }, - "poi_aerodrome": { - "opacity": ["stops", - {"z": 13, "val": 0}, - {"z": 13.25, "val": 1} - ], - "antialias": false - } - } + "@motorway_width": { + "fn": "stops", + "stops": [[5, 0], [6, 0.5], [8, 0.8], [10, 1], [11, 1.2], [12, 2], [13, 3], [14, 4], [15, 6], [16, 9], [17, 12], [18, 14]] + }, + "@motorway_casing_width": { + "fn": "stops", + "stops": [[7.5, 0.6], [8, 0.8], [10, 2.8], [11, 3], [12, 4], [13, 5], [14, 6.5], [15, 9], [16, 12], [17, 15], [18, 17]] + }, + "@motorway_link_width": { + "fn": "stops", + "stops": [[12, 1.2], [14, 2], [16, 3], [18, 4]] + }, + "@motorway_link_casing_width": { + "fn": "stops", + "stops": [[12, 2.8], [14, 3.5], [16, 5], [18, 6]] + }, + "@main_width": { + "fn": "stops", + "stops": [[5, 1], [12, 1], [13, 1.5], [14, 2], [15, 3], [16, 6], [17, 10], [18, 12]] + }, + "@main_casing_width": { + "fn": "stops", + "stops": [[9, 2.9], [12, 2.9], [13, 3.5], [14, 4], [15, 5.5], [16, 9], [17, 12], [18, 14]] + }, + "@street_width": { + "fn": "stops", + "stops": [[14.5, 0], [15, 1.5], [16, 3], [17, 8]] + }, + "@street_casing_width": { + "fn": "stops", + "stops": [[13, 0.4], [14, 1], [15, 2.5], [16, 4], [17, 10]] + }, + "@street_casing_opacity": { + "fn": "stops", + "stops": [[14, 0], [14.5, 1]] + }, + "@service_casing_width": { + "fn": "stops", + "stops": [[14, 0.5], [15, 3], [16, 3.5], [17, 4], [18, 5], [19, 6]] + }, + "@runway_width": { + "fn": "stops", + "stops": [[10, 1], [11, 2], [12, 3], [13, 5], [14, 7], [15, 11], [16, 15], [17, 19], [18, 23]] + }, + "@taxiway_width": { + "fn": "stops", + "stops": [[10, 0.2], [12, 0.2], [13, 1], [14, 1.5], [15, 2], [16, 3], [17, 4], [18, 5]] + }, + "@aerialway_width": { + "fn": "stops", + "stops": [[13.5, 0.8], [14, 1.4], [15, 1.6], [16, 2], [17, 2.4], [18, 3]] + }, + "@aerialway_casing_width": { + "fn": "stops", + "stops": [[13.5, 2], [14, 2.5], [15, 3], [16, 3.5], [17, 4], [22, 5]] + }, + "@path_width": { + "fn": "stops", + "stops": [[14, 1.2], [15, 1.5], [16, 1.8]] + }, + "@admin_l2_width": { + "fn": "stops", + "stops": [[2, 0.5], [3, 0.7], [4, 0.7], [5, 0.8], [6, 1], [8, 2], [10, 3]] + }, + "@admin_l3_width": { + "fn": "stops", + "stops": [[6, 0.6], [8, 1], [12, 2]] + }, + "@road_label_1_size": { + "fn": "stops", + "stops": [[13, 11], [14, 12], [15, 13], [16, 14], [17, 16], [18, 18]] + }, + "@road_label_2_size": { + "fn": "stops", + "stops": [[13, 11], [14, 12], [16, 14], [18, 16]] + }, + "@road_label_3_size": { + "fn": "stops", + "stops": [[15, 10], [16, 12], [18, 14]] + }, + "@fence_width": { + "fn": "stops", + "stops": [[17, 0.6], [19, 1]] + }, + "@hedge_width": { + "fn": "stops", + "stops": [[16, 0.6], [17, 1.2], [19, 1.6]] + }, + "@barrier_line_land_width": { + "fn": "stops", + "stops": [[14, 0.4], [15, 0.75], [16, 1.5], [17, 3], [18, 6], [19, 12], [20, 24], [21, 48]] + }, + "@country_label_size": { + "fn": "stops", + "stops": [[1, 14], [12, 24]] + }, + "@poi_label_1-2_size": { + "fn": "stops", + "stops": [[15, 10], [16, 11], [17, 12]] + }, + "@poi_label_3_size": { + "fn": "stops", + "stops": [[16, 10], [17, 11]] + }, + "@hillshade_rasterize": { + "enabled": { + "fn": "stops", + "stops": [[11, false], [12, true]] }, - { - "name": "night", - "layers": { - "background": { - "color": "land_night" - }, - "admin_maritime_cover": { - "color": "water_night", - "width": 5 - }, - "admin_maritime": { - "color": "#0a1347", - "width": [ - "stops", - {"z": 6, "val": 1}, - {"z": 8, "val": 2}, - {"z": 12, "val": 3} - ] - }, - "admin_l2": { - "color": "admin_night", - "width": "admin_l2_width" - }, - "admin_l3": { - "color": "admin_night", - "dasharray": [ - 60, - 20 - ], - "opacity": [ - "stops", - {"z": 4, "val": 0}, - {"z": 6, "val": 1} - ], - "width": "admin_l3_width" - }, - "waterway_river_canal": { - "color": "rgb(10,20,71)", - "width": "river_canal_width" - }, - "waterway_stream": { - "color": "rgb(10,20,71)", - "width": "stream_width" - }, - "barrier_line_gate": { - "width": 2.5, - "color": "#59596f" - }, - "barrier_line_fence": { - "color": "#014b61", - "width": "fence_width" - }, - "barrier_line_hedge": { - "color": "#2e7a57", - "width": "hedge_width" - }, - "barrier_line_land": { - "color": "land_night", - "width": "barrier_line_land_width" - }, - "barrier_line_land_fill": { - "color": "land_night" - }, - "barrier_line_cliff": { - "color": "#63574b", - "width": 4 - }, - "landcover_wood": { - "color": "wood_night", - "opacity": [ - "stops", - {"z": 13, "val": 1}, - {"z": 14, "val": 0.8}, - {"z": 17, "val": 0.2} - ] - }, - "landcover_scrub": { - "color": "scrub_night", - "opacity": [ - "stops", - {"z": 13, "val": 1}, - {"z": 14, "val": 0.8}, - {"z": 17, "val": 0.2} - ] - }, - "landcover_grass": { - "color": "grass_night", - "opacity": [ - "stops", - {"z": 13, "val": 1}, - {"z": 14, "val": 0.8}, - {"z": 17, "val": 0.2} - ] - }, - "landcover_crop": { - "color": "crop_night" - }, - "landcover_snow": { - "color": "snow_night" - }, - "landuse_wood": { - "color": "wood_night", - "opacity": 0.8 - }, - "landuse_scrub": { - "color": "scrub_night", - "opacity": 0.8 - }, - "landuse_grass": { - "color": "grass_night", - "opacity": 0.8 - }, - "landuse_crop": { - "color": "crop_night", - "opacity": 0.8 - }, - "landuse_snow": { - "color": "snow_night", - "opacity": 0.8 - }, - "landuse_rock": { - "color": "rock_night", - "opacity": 0.8 - }, - "landuse_sand": { - "color": "sand_night", - "opacity": 0.8 - }, - "landuse_park": { - "color": "park_night" - }, - "landuse_cemetery": { - "color": "cemetery_night" - }, - "landuse_hospital": { - "color": "hospital_night" - }, - "landuse_school": { - "color": "school_night" - }, - "landuse_pitch": { - "color": "pitch_night", - "stroke": "pitch" - }, - "landuse_industrial": { - "color": "builtup_night" - }, - "overlay_wetland": { - "color": "rgba(210,225,225,0.2)", - "image": "wetland_noveg_64" - }, - "overlay_breakwater_pier": { - "color": "land_night" - }, - "hillshade_full_shadow": { - "color": "#103", - "antialias": false, - "prerender": "hillshade_prerender", - "prerender-size": "hillshade_prerender_size", - "prerender-blur": 1, - "opacity": [ - "stops", - {"z": 16, "val": 0.3}, - {"z": 17, "val": 0.2}, - {"z": 18, "val": 0.1}, - {"z": 19, "val": 0.05} - ] - }, - "hillshade_medium_shadow": { - "color": "#206", - "antialias": false, - "prerender": "hillshade_prerender", - "prerender-size": "hillshade_prerender_size", - "prerender-blur": 1, - "opacity": [ - "stops", - {"z": 16, "val": 0.3}, - {"z": 17, "val": 0.2}, - {"z": 18, "val": 0.1}, - {"z": 19, "val": 0.05} - ] - }, - "hillshade_full_highlight": { - "color": "#fdfdad", - "antialias": false, - "prerender": "hillshade_prerender", - "prerender-size": "hillshade_prerender_size", - "prerender-blur": 1, - "opacity": [ - "stops", - {"z": 14, "val": 0.4}, - {"z": 15, "val": 0.3}, - {"z": 17, "val": 0.2}, - {"z": 18, "val": 0.1}, - {"z": 19, "val": 0.05} - ] - }, - "hillshade_medium_highlight": { - "color": "#ffe1b7", - "antialias": false, - "prerender": "hillshade_prerender", - "prerender-size": "hillshade_prerender_size", - "prerender-blur": 1, - "opacity": [ - "stops", - {"z": 15, "val": 0.3}, - {"z": 17, "val": 0.2}, - {"z": 18, "val": 0.15}, - {"z": 19, "val": 0.05} - ] - }, - "contour_line_loud": { - "color": "contour_night", - "width": 0.9, - "opacity": [ - "stops", - {"z": 12, "val": 0.1}, - {"z": 13, "val": 0.2} - ] - }, - "contour_line_regular": { - "color": "contour_night", - "width": 0.5, - "opacity": [ - "stops", - {"z": 12, "val": 0.1}, - {"z": 13, "val": 0.4} - ] - }, - "contour_label": { - "color": "contour_night", - "stroke": "land_night", - "strokeWidth": 0.3, - "strokeBlur": 3, - "size": 10 - }, - "water": { - "color": "water_night", - "stroke": "water_dark_night" - }, - "aeroway_fill": { - "color": "#367" - }, - "aeroway_runway": { - "color": "#367", - "width": "runway_width" - }, - "aeroway_taxiway": { - "color": "#367", - "width": "taxiway_width" - }, - "building": { - "color": "#027797" - }, - "building_wall": { - "color": "#027797", - "stroke": "#026688", - "opacity": [ - "stops", - {"z": 16.5, "val": 0}, - {"z": 17, "val": 0.7} - ] - }, - "building_shadow": { - "color": "#026688", - "stroke": "#026688", - "translate": [ - 1, - 1 - ], - "opacity": [ - "stops", - {"z": 16.5, "val": 0}, - {"z": 17, "val": 1} - ] - }, - "tunnel_motorway_casing": { - "color": "case_night", - "dasharray": [ - 6, - 6 - ], - "width": "motorway_casing_width", - "opacity": [ - "stops", - {"z": 9.5, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "tunnel_motorway": { - "color": "#78b0c1", - "width": "motorway_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "tunnel_main_casing": { - "color": "case_night", - "dasharray": [ - 6, - 6 - ], - "width": "main_casing_width", - "opacity": ["stops", - {"z": 9, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "tunnel_main": { - "color": "#78b0c1", - "width": "main_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "tunnel_motorway_link_casing": { - "color": "case_night", - "dasharray": [ - 6, - 6 - ], - "width": "motorway_link_casing_width" - }, - "tunnel_motorway_link": { - "color": "#78b0c1", - "width": "motorway_link_width" - }, - "tunnel_street_casing": { - "color": "street_case_night", - "width": "street_casing_width", - "opacity": "street_casing_opacity" - }, - "tunnel_street": { - "color": "street_night", - "width": "street_width" - }, - "tunnel_service_casing": { - "color": "#000", - "opacity": 0.04, - "dasharray": [ - 6, - 6 - ], - "width": "service_casing_width" - }, - "tunnel_service": { - "color": "#017ca0", - "width": 2 - }, - "road_motorway_casing": { - "color": "case_night", - "width": "motorway_casing_width", - "opacity": [ - "stops", - {"z": 9.5, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "road_motorway": { - "color": "motorway_night", - "width": "motorway_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "road_main_casing": { - "color": "case_night", - "width": "main_casing_width", - "opacity": ["stops", - {"z": 9, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "road_main": { - "color": "main_night", - "width": "main_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "road_motorway_link_casing": { - "color": "case_night", - "width": "motorway_link_casing_width" - }, - "road_motorway_link": { - "color": "motorway_night", - "width": "motorway_link_width" - }, - "road_street_casing": { - "color": "street_case_night", - "width": "street_casing_width", - "opacity": "street_casing_opacity" - }, - "road_street": { - "color": "street_night", - "width": "street_width" - }, - "road_service_casing": { - "color": "#000", - "opacity": 0.04, - "width": "service_casing_width" - }, - "road_service": { - "color": "street_night", - "width": 2 - }, - "road_path_case": { - "color": "land_night", - "opacity": 0.2 - }, - "road_path_footway": { - "color": "#fff", - "dasharray": [ - 10, - 4 - ], - "width": "path_width" - }, - "road_path_path": { - "color": "#fff", - "dasharray": [ - 10, - 4 - ], - "opacity": 0.8, - "width": [ - "stops", - {"z": 14, "val": 0.8}, - {"z": 15, "val": 0.9}, - {"z": 16, "val": 1.2} - ] - }, - "road_path_cycleway": { - "color": "#94e6ff", - "dasharray": [ - 10, - 4 - ], - "width": "path_width" - }, - "road_path_mtb": { - "color": "#94e6ff", - "dasharray": [ - 12, - 4 - ], - "width": "path_width" - }, - "road_path_piste": { - "color": "#715dae", - "dasharray": [ - 8, - 4 - ], - "width": "path_width" - }, - "road_path_steps": { - "color": "#016684", - "dasharray": [ - 10, - 4 - ], - "opacity": 0.3, - "width": 6 - }, - "road_major_rail": { - "color": "#c8c4c0", - "width": 0.8 - }, - "road_major_rail_hatching": { - "color": "#c8c4c0", - "dasharray": [ - 2, - 31 - ], - "width": 5 - }, - "bridge_motorway_casing": { - "color": "case_night", - "width": "motorway_casing_width", - "opacity": [ - "stops", - {"z": 9.5, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "bridge_motorway": { - "color": "motorway_night", - "width": "motorway_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "bridge_main_casing": { - "color": "case_night", - "width": "main_casing_width", - "opacity": ["stops", - {"z": 9, "val": 0}, - {"z": 10, "val": 1} - ] - }, - "bridge_main": { - "color": "main_night", - "width": "main_width", - "opacity": [ - "stops", - {"z": 6.5, "val": 0}, - {"z": 7, "val": 1} - ] - }, - "bridge_motorway_link_casing": { - "color": "case_night", - "width": "motorway_link_casing_width" - }, - "bridge_motorway_link": { - "color": "motorway_night", - "width": "motorway_link_width" - }, - "bridge_street_casing": { - "color": "street_case_night", - "width": "street_casing_width", - "opacity": "street_casing_opacity" - }, - "bridge_street": { - "color": "street_night", - "width": "street_width" - }, - "bridge_service_casing": { - "color": "#000", - "opacity": 0.04, - "width": "service_casing_width" - }, - "bridge_service": { - "color": "street_night", - "width": 2 - }, - "bridge_aerialway_casing": { - "color": "white", - "opacity": 0.5, - "width": "aerialway_casing_width" - }, - "bridge_aerialway": { - "color": "#876", - "opacity": 0.5, - "width": "aerialway_width" - }, - "country_label": { - "color": "text_night", - "stroke": "text2_stroke_night", - "strokeWidth": 0.4, - "strokeBlur": 2, - "size": "country_label_size" - }, - "country_label_line": { - "color": "text_night", - "width": 0.5, - "opacity": 0.5 - }, - "marine_label_line_1": { - "color": "water_dark_night", - "size": ["stops", - {"z": 3, "val": 20}, - {"z": 4, "val": 25}, - {"z": 5, "val": 30}, - {"z": 22, "val": 30} - ], - "stroke": "water_night" - }, - "marine_label_line_2": { - "color": "water_dark_night", - "size": ["stops", - {"z": 3, "val": 13}, - {"z": 4, "val": 14}, - {"z": 5, "val": 20}, - {"z": 6, "val": 24}, - {"z": 22, "val": 24} - ], - "stroke": "water_night" - }, - "marine_label_line_3": { - "color": "water_dark_night", - "size": ["stops", - {"z": 3, "val": 12}, - {"z": 4, "val": 13}, - {"z": 5, "val": 15}, - {"z": 6, "val": 18}, - {"z": 22, "val": 18} - ], - "stroke": "water_night" - }, - "marine_label_line_other": { - "color": "water_dark_night", - "size": ["stops", - {"z": 4, "val": 12}, - {"z": 5, "val": 14}, - {"z": 6, "val": 16}, - {"z": 22, "val": 16} - ], - "stroke": "water_night" - }, - "marine_label_point_1": { - "color": "water_dark_night", - "size": ["stops", - {"z": 3, "val": 20}, - {"z": 4, "val": 25}, - {"z": 5, "val": 30}, - {"z": 22, "val": 30} - ], - "stroke": "water_night" - }, - "marine_label_point_2": { - "color": "water_dark_night", - "size": ["stops", - {"z": 3, "val": 13}, - {"z": 4, "val": 14}, - {"z": 5, "val": 20}, - {"z": 6, "val": 24}, - {"z": 22, "val": 24} - ], - "stroke": "water_night" - }, - "marine_label_point_3": { - "color": "water_dark_night", - "size": ["stops", - {"z": 3, "val": 12}, - {"z": 4, "val": 13}, - {"z": 5, "val": 15}, - {"z": 6, "val": 18}, - {"z": 22, "val": 18} - ], - "stroke": "water_night" - }, - "marine_label_point_other": { - "color": "water_dark_night", - "size": ["stops", - {"z": 4, "val": 12}, - {"z": 5, "val": 14}, - {"z": 6, "val": 16}, - {"z": 22, "val": 16} - ], - "stroke": "water_night" - }, - "state_label": { - "color": "#fff", - "strokeWidth": 0.4, - "strokeBlur": 1, - "stroke": "land_night", - "size": [ - "stops", - {"z": 3.99, "val": 0}, - {"z": 4, "val": 10}, - {"z": 9.99, "val": 16}, - {"z": 10, "val": 0} - ] - }, - "place_label_city": { - "color": "#fff", - "strokeWidth": 0.4, - "stroke": "text2_stroke_night", - "size": [ - "stops", - {"z": 3.99, "val": 0}, - {"z": 4, "val": 10}, - {"z": 7, "val": 14}, - {"z": 14.99, "val": 20}, - {"z": 15, "val": 0} - ] - }, - "place_label_town": { - "color": "text_night", - "strokeWidth": 0.3, - "strokeBlur": 2, - "stroke": "text2_stroke_night", - "size": [ - "stops", - {"z": 9, "val": 10}, - {"z": 12, "val": 13}, - {"z": 14, "val": 17}, - {"z": 16, "val": 22} - ] - }, - "place_label_village": { - "color": "text_night", - "strokeWidth": 0.3, - "strokeBlur": 2, - "stroke": "text2_stroke_night", - "size": [ - "stops", - {"z": 9, "val": 8}, - {"z": 12, "val": 10}, - {"z": 14, "val": 14}, - {"z": 16, "val": 16}, - {"z": 17, "val": 20} - ] - }, - "place_label_other": { - "color": "text_night", - "stroke": "text2_stroke_night", - "strokeWidth": 0.3, - "strokeBlur": 2, - "size": [ - "stops", - {"z": 13, "val": 11}, - {"z": 14, "val": 12}, - {"z": 16, "val": 14}, - {"z": 18, "val": 18} - ] - }, - "road_label_1": { - "color": "text_night", - "stroke": "text2_stroke_night", - "strokeWidth": 0.5, - "strokeBlur": 3, - "size": "road_label_1_size" - }, - "road_label_2": { - "color": "text_night", - "stroke": "text2_stroke_night", - "strokeWidth": 0.5, - "strokeBlur": 3, - "size": "road_label_2_size" - }, - "road_label_3": { - "color": "text_night", - "stroke": "text2_stroke_night", - "strokeWidth": 0.5, - "strokeBlur": 3, - "size": "road_label_3_size" - }, - "water_label": { - "color": "text_water_night", - "stroke": "water_night" - }, - "waterway_label": { - "color": "text_water_night", - "stroke": "water_night" - }, - "poi": { - "color": "white", - "antialias": false - }, - "poi_3": { - "antialias": false, - "opacity": [ - "stops", - {"z": 17.5, "val": 0}, - {"z": 17.75, "val": 1} - ] - }, - "poi_4_4": { - "antialias": false, - "opacity": [ - "stops", - {"z": 18, "val": 0}, - {"z": 17.25, "val": 1} - ] - }, - "poi_4_16": { - "antialias": false, - "opacity": [ - "stops", - {"z": 18.5, "val": 0}, - {"z": 18.75, "val": 1} - ] - }, - "poi_4_all": { - "antialias": false, - "opacity": [ - "stops", - {"z": 18.75, "val": 0}, - {"z": 19, "val": 1} - ] - }, - "poi_label_1-2": { - "color": "#fff", - "size": "poi_label_1-2_size", - "stroke": "text2_stroke_night", - "strokeWidth": 0.3, - "strokeBlur": 1 - }, - "poi_label_3": { - "color": "#fff", - "size": "poi_label_3_size", - "stroke": "text2_stroke_night", - "strokeWidth": 0.3, - "strokeBlur": 1, - "opacity": [ - "stops", - {"z": 17.5, "val": 0}, - {"z": 17.75, "val": 1} - ] - }, - "poi_label_4_4": { - "color": "#fff", - "size": 10, - "opacity": [ - "stops", - {"z": 18, "val": 0}, - {"z": 18.25, "val": 1} - ], - "stroke": "text2_stroke_night", - "strokeWidth": 0.3, - "strokeBlur": 1 - }, - "poi_label_4_16": { - "color": "#fff", - "size": 10, - "opacity": [ - "stops", - {"z": 18.5, "val": 0}, - {"z": 18.75, "val": 1} - ], - "stroke": "text2_stroke_night", - "strokeWidth": 0.3, - "strokeBlur": 1 - }, - "poi_label_4_all": { - "color": "#fff", - "size": 10, - "opacity": [ - "stops", - {"z": 18.75, "val": 0}, - {"z": 19, "val": 1} - ], - "stroke": "text2_stroke_night", - "strokeWidth": 0.3, - "strokeBlur": 1 - }, - "poi_aerodrome": { - "opacity": ["stops", - {"z": 13, "val": 0}, - {"z": 13.25, "val": 1} - ], - "antialias": false - } - } - } - ], - "sprite": "/img/maki-sprite" + "size": { + "fn": "stops", + "stops": [[11, 1024], [12, 512], [13, 256]] + }, + "blur": 1 + } + }, + "layers": [{ + "id": "background", + "render": { + "type": "background" + }, + "style": { + "background-color": "@land" + }, + "style.night": { + "background-color": "@land_night" + } + }, { + "id": "landcover_snow", + "source": "mapbox", + "source-layer": "landcover", + "filter": { "class": "snow" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@snow" + }, + "style.night": { + "fill-color": "@snow_night" + } + }, { + "id": "landcover_crop", + "source": "mapbox", + "source-layer": "landcover", + "filter": { "class": "crop" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@crop" + }, + "style.night": { + "fill-color": "@crop_night" + } + }, { + "id": "landcover_grass", + "source": "mapbox", + "source-layer": "landcover", + "filter": { "class": "grass" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@grass", + "fill-opacity": { + "fn": "stops", + "stops": [[13, 1], [14, 0.8], [17, 0.2]] + } + }, + "style.night": { + "fill-color": "@grass_night", + "fill-opacity": { + "fn": "stops", + "stops": [[13, 1], [14, 0.8], [17, 0.2]] + } + } + }, { + "id": "landcover_scrub", + "source": "mapbox", + "source-layer": "landcover", + "filter": { "class": "scrub" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@scrub", + "fill-opacity": { + "fn": "stops", + "stops": [[13, 1], [14, 0.8], [17, 0.2]] + } + }, + "style.night": { + "fill-color": "@scrub_night", + "fill-opacity": { + "fn": "stops", + "stops": [[13, 1], [14, 0.8], [17, 0.2]] + } + } + }, { + "id": "landcover_wood", + "source": "mapbox", + "source-layer": "landcover", + "filter": { "class": "wood" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@wood", + "fill-opacity": { + "fn": "stops", + "stops": [[13, 1], [14, 0.8], [17, 0.2]] + } + }, + "style.night": { + "fill-color": "@wood_night", + "fill-opacity": { + "fn": "stops", + "stops": [[13, 1], [14, 0.8], [17, 0.2]] + } + } + }, { + "id": "landuse_wood", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "wood" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@wood" + }, + "style.night": { + "fill-color": "@wood_night", + "fill-opacity": 0.8 + } + }, { + "id": "landuse_school", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "school" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@school" + }, + "style.night": { + "fill-color": "@school_night" + } + }, { + "id": "landuse_sand", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "sand" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@sand" + }, + "style.night": { + "fill-color": "@sand_night", + "fill-opacity": 0.8 + } + }, { + "id": "landuse_pitch", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "pitch" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "rgba(255,255,255,0.5)", + "fill-outline-color": "@pitch" + }, + "style.night": { + "fill-color": "@pitch_night", + "fill-outline-color": "@pitch" + } + }, { + "id": "landuse_park", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "park" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@park" + }, + "style.night": { + "fill-color": "@park_night" + } + }, { + "id": "landuse_industrial", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "industrial" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "rgba(246,250,255,0.5)" + }, + "style.night": { + "fill-color": "@builtup_night" + } + }, { + "id": "landuse_scrub", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "scrub" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@scrub" + }, + "style.night": { + "fill-color": "@scrub_night", + "fill-opacity": 0.8 + } + }, { + "id": "landuse_grass", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "grass" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@grass" + }, + "style.night": { + "fill-color": "@grass_night", + "fill-opacity": 0.8 + } + }, { + "id": "landuse_crop", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "crop" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@crop" + }, + "style.night": { + "fill-color": "@crop_night", + "fill-opacity": 0.8 + } + }, { + "id": "landuse_rock", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "rock" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@rock" + }, + "style.night": { + "fill-color": "@rock_night", + "fill-opacity": 0.8 + } + }, { + "id": "landuse_snow", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "snow" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@snow" + }, + "style.night": { + "fill-color": "@snow_night", + "fill-opacity": 0.8 + } + }, { + "id": "landuse_hospital", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "hospital" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@hospital" + }, + "style.night": { + "fill-color": "@hospital_night" + } + }, { + "id": "landuse_cemetery", + "source": "mapbox", + "source-layer": "landuse", + "filter": { "class": "cemetery" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@cemetery" + }, + "style.night": { + "fill-color": "@cemetery_night" + } + }, { + "id": "overlay_wetland", + "source": "mapbox", + "source-layer": "landuse_overlay", + "filter": { "class": ["wetland", "wetland_noveg"] }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "rgba(210,225,225,0.2)", + "fill-image": "wetland_noveg_64" + }, + "style.night": { + "fill-color": "rgba(210,225,225,0.2)", + "fill-image": "wetland_noveg_64" + } + }, { + "id": "overlay_breakwater_pier", + "source": "mapbox", + "source-layer": "landuse_overlay", + "filter": { "class": ["breakwater", "pier"] }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@land" + }, + "style.night": { + "fill-color": "@land_night" + } + }, { + "id": "waterway_river_canal", + "source": "mapbox", + "source-layer": "waterway", + "filter": { "type": ["river", "canal"] }, + "render": { + "type": "line", + "line-cap": "round" + }, + "style": { + "line-color": "#87abaf", + "line-width": "@river_canal_width" + }, + "style.night": { + "line-color": "rgb(10,20,71)", + "line-width": "@river_canal_width" + } + }, { + "id": "waterway_stream", + "source": "mapbox", + "source-layer": "waterway", + "filter": { "type": "stream" }, + "render": { + "type": "line", + "line-cap": "round" + }, + "style": { + "line-color": "#87abaf", + "line-width": "@stream_width" + }, + "style.night": { + "line-color": "rgb(10,20,71)", + "line-width": "@stream_width" + } + }, { + "id": "building_shadow", + "source": "mapbox", + "source-layer": "building", + "render": { + "type": "fill" + }, + "style": { + "fill-color": "#d5d1c6", + "fill-translate": [1, 1], + "fill-opacity": { + "fn": "stops", + "stops": [[16.5, 0], [17, 1]] + }, + "fill-outline-color": "#d5d1c6" + }, + "style.night": { + "fill-color": "#026688", + "fill-translate": [1, 1], + "fill-opacity": { + "fn": "stops", + "stops": [[16.5, 0], [17, 1]] + }, + "fill-outline-color": "#026688" + } + }, { + "id": "building", + "ref": "building_shadow", + "style": { + "fill-color": "#ebe7db" + }, + "style.night": { + "fill-color": "#027797" + } + }, { + "id": "building_wall", + "ref": "building_shadow", + "style": { + "fill-color": "#ebe7db", + "fill-opacity": { + "fn": "stops", + "stops": [[16.5, 0], [17, 0.7]] + }, + "fill-outline-color": "#d5d1c6" + }, + "style.night": { + "fill-color": "#027797", + "fill-opacity": { + "fn": "stops", + "stops": [[16.5, 0], [17, 0.7]] + }, + "fill-outline-color": "#026688" + } + }, { + "id": "hillshade_full_highlight", + "source": "mapbox", + "source-layer": "hillshade", + "filter": { "class": "full_highlight" }, + "render": { + "type": "fill" + }, + "rasterize": "@hillshade_rasterize", + "style": { + "fill-color": "#fffff3", + "fill-antialias": false, + "fill-opacity": { + "fn": "stops", + "stops": [[15, 0.3], [16, 0.3], [17, 0.2], [18, 0.2], [19, 0.1]] + } + }, + "style.night": { + "fill-color": "#fdfdad", + "fill-antialias": false, + "fill-opacity": { + "fn": "stops", + "stops": [[14, 0.4], [15, 0.3], [17, 0.2], [18, 0.1], [19, 0.05]] + } + } + }, { + "id": "hillshade_medium_highlight", + "source": "mapbox", + "source-layer": "hillshade", + "filter": { "class": "medium_highlight" }, + "render": { + "type": "fill" + }, + "rasterize": "@hillshade_rasterize", + "style": { + "fill-color": "#ffd", + "fill-antialias": false, + "fill-opacity": { + "fn": "stops", + "stops": [[15, 0.3], [16, 0.3], [17, 0.2], [18, 0.2], [19, 0.1]] + } + }, + "style.night": { + "fill-color": "#ffe1b7", + "fill-antialias": false, + "fill-opacity": { + "fn": "stops", + "stops": [[15, 0.3], [17, 0.2], [18, 0.15], [19, 0.05]] + } + } + }, { + "id": "hillshade_medium_shadow", + "source": "mapbox", + "source-layer": "hillshade", + "filter": { "class": "medium_shadow" }, + "render": { + "type": "fill" + }, + "rasterize": "@hillshade_rasterize", + "style": { + "fill-color": "#206", + "fill-antialias": false, + "fill-opacity": { + "fn": "stops", + "stops": [[15, 0.08], [16, 0.075], [17, 0.05], [18, 0.05], [19, 0.025]] + } + }, + "style.night": { + "fill-color": "#206", + "fill-antialias": false, + "fill-opacity": { + "fn": "stops", + "stops": [[16, 0.3], [17, 0.2], [18, 0.1], [19, 0.05]] + } + } + }, { + "id": "hillshade_full_shadow", + "source": "mapbox", + "source-layer": "hillshade", + "filter": { "class": "full_shadow" }, + "render": { + "type": "fill" + }, + "rasterize": "@hillshade_rasterize", + "style": { + "fill-color": "#103", + "fill-antialias": false, + "fill-opacity": { + "fn": "stops", + "stops": [[15, 0.08], [16, 0.075], [17, 0.05], [18, 0.05], [19, 0.025]] + } + }, + "style.night": { + "fill-color": "#103", + "fill-antialias": false, + "fill-opacity": { + "fn": "stops", + "stops": [[16, 0.3], [17, 0.2], [18, 0.1], [19, 0.05]] + } + } + }, { + "id": "contour_line_loud", + "source": "mapbox", + "source-layer": "contour", + "filter": { "index": 5 }, + "render": { + "type": "line", + "line-join": "round" + }, + "style": { + "line-color": "#008", + "line-width": 0.9, + "line-opacity": { + "fn": "stops", + "stops": [[12, 0.05], [13, 0.11]] + } + }, + "style.night": { + "line-color": "@contour_night", + "line-width": 0.9, + "line-opacity": { + "fn": "stops", + "stops": [[12, 0.1], [13, 0.2]] + } + } + }, { + "id": "contour_line_regular", + "source": "mapbox", + "source-layer": "contour", + "render": { + "type": "line", + "line-join": "round" + }, + "style": { + "line-color": "#008", + "line-width": 0.5, + "line-opacity": { + "fn": "stops", + "stops": [[12, 0.05], [13, 0.11]] + } + }, + "style.night": { + "line-color": "@contour_night", + "line-width": 0.5, + "line-opacity": { + "fn": "stops", + "stops": [[12, 0.1], [13, 0.4]] + } + } + }, { + "id": "barrier_line_gate", + "source": "mapbox", + "source-layer": "barrier_line", + "filter": { "class": "gate" }, + "render": { + "type": "line" + }, + "style": { + "line-width": 2.5, + "line-color": "#aab" + }, + "style.night": { + "line-width": 2.5, + "line-color": "#59596f" + } + }, { + "id": "barrier_line_fence", + "source": "mapbox", + "source-layer": "barrier_line", + "filter": { "class": "fence" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#aeada3", + "line-width": "@fence_width" + }, + "style.night": { + "line-color": "#014b61", + "line-width": "@fence_width" + } + }, { + "id": "barrier_line_hedge", + "source": "mapbox", + "source-layer": "barrier_line", + "filter": { "class": "hedge" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#8de99b", + "line-width": "@hedge_width" + }, + "style.night": { + "line-color": "#2e7a57", + "line-width": "@hedge_width" + } + }, { + "id": "barrier_line_land", + "source": "mapbox", + "source-layer": "barrier_line", + "filter": { "class": "land" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "@land", + "line-width": "@barrier_line_land_width" + }, + "style.night": { + "line-color": "@land_night", + "line-width": "@barrier_line_land_width" + } + }, { + "id": "barrier_line_land_fill", + "source": "mapbox", + "source-layer": "barrier_line", + "filter": { "class": "land" }, + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@land" + }, + "style.night": { + "fill-color": "@land_night" + } + }, { + "id": "barrier_line_cliff", + "source": "mapbox", + "source-layer": "barrier_line", + "filter": { "class": "cliff" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#987", + "line-width": 4 + }, + "style.night": { + "line-color": "#63574b", + "line-width": 4 + } + }, { + "id": "water", + "source": "mapbox", + "source-layer": "water", + "render": { + "type": "fill" + }, + "style": { + "fill-color": "@water", + "fill-outline-color": "#a2bdc0" + }, + "style.night": { + "fill-color": "@water_night", + "fill-outline-color": "@water_dark_night" + } + }, { + "id": "aeroway_fill", + "source": "mapbox", + "source-layer": "aeroway", + "render": { + "type": "fill" + }, + "style": { + "fill-color": "#ddd" + }, + "style.night": { + "fill-color": "#367" + } + }, { + "id": "aeroway_runway", + "source": "mapbox", + "source-layer": "aeroway", + "filter": { "type": "runway" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#ddd", + "line-width": "@runway_width" + }, + "style.night": { + "line-color": "#367", + "line-width": "@runway_width" + } + }, { + "id": "aeroway_taxiway", + "source": "mapbox", + "source-layer": "aeroway", + "filter": { "type": "taxiway" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#ddd", + "line-width": "@taxiway_width" + }, + "style.night": { + "line-color": "#367", + "line-width": "@taxiway_width" + } + }, { + "id": "tunnel_motorway_link_casing", + "source": "mapbox", + "source-layer": "tunnel", + "filter": { "class": "motorway_link" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "@case", + "line-dasharray": [6, 6], + "line-width": "@motorway_link_casing_width" + }, + "style.night": { + "line-color": "@case_night", + "line-dasharray": [6, 6], + "line-width": "@motorway_link_casing_width" + } + }, { + "id": "tunnel_service_casing", + "source": "mapbox", + "source-layer": "tunnel", + "filter": { "class": "service" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#000", + "line-opacity": 0.04, + "line-dasharray": [6, 6], + "line-width": "@service_casing_width" + }, + "style.night": { + "line-color": "#000", + "line-opacity": 0.04, + "line-dasharray": [6, 6], + "line-width": "@service_casing_width" + } + }, { + "id": "tunnel_main_casing", + "source": "mapbox", + "source-layer": "tunnel", + "filter": { "class": "main" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "@case", + "line-dasharray": [6, 6], + "line-width": "@main_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9, 0], [10, 1]] + } + }, + "style.night": { + "line-color": "@case_night", + "line-dasharray": [6, 6], + "line-width": "@main_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9, 0], [10, 1]] + } + } + }, { + "id": "tunnel_street_casing", + "source": "mapbox", + "source-layer": "tunnel", + "filter": { "class": ["street", "street_limited"] }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#d9d5c6", + "line-width": "@street_casing_width", + "line-opacity": "@street_casing_opacity" + }, + "style.night": { + "line-color": "@street_case_night", + "line-width": "@street_casing_width", + "line-opacity": "@street_casing_opacity" + } + }, { + "id": "tunnel_motorway_link", + "ref": "tunnel_motorway_link_casing", + "style": { + "line-color": "#e6cec7", + "line-width": "@motorway_link_width" + }, + "style.night": { + "line-color": "#78b0c1", + "line-width": "@motorway_link_width" + } + }, { + "id": "tunnel_service", + "ref": "tunnel_service_casing", + "style": { + "line-color": "#e6cec7", + "line-width": 2 + }, + "style.night": { + "line-color": "#017ca0", + "line-width": 2 + } + }, { + "id": "tunnel_street", + "ref": "tunnel_street_casing", + "style": { + "line-color": "#d9d5c6", + "line-width": "@street_width" + }, + "style.night": { + "line-color": "@street_night", + "line-width": "@street_width" + } + }, { + "id": "tunnel_main", + "ref": "tunnel_main_casing", + "style": { + "line-color": "#e6cec7", + "line-width": "@main_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + }, + "style.night": { + "line-color": "#78b0c1", + "line-width": "@main_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + } + }, { + "id": "tunnel_motorway_casing", + "source": "mapbox", + "source-layer": "tunnel", + "filter": { "class": "motorway" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "@case", + "line-dasharray": [6, 6], + "line-width": "@motorway_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9.5, 0], [10, 1]] + } + }, + "style.night": { + "line-color": "@case_night", + "line-dasharray": [6, 6], + "line-width": "@motorway_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9.5, 0], [10, 1]] + } + } + }, { + "id": "tunnel_motorway", + "ref": "tunnel_motorway_casing", + "style": { + "line-color": "#e6cec7", + "line-width": "@motorway_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + }, + "style.night": { + "line-color": "#78b0c1", + "line-width": "@motorway_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + } + }, { + "id": "road_path_case", + "source": "mapbox", + "source-layer": "road", + "filter": { "class": "path" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#ffd", + "line-opacity": 0.4, + "line-width": { + "fn": "stops", + "stops": [[15, 3], [16, 4]] + } + }, + "style.night": { + "line-color": "@land_night", + "line-opacity": 0.2 + } + }, { + "id": "road_path_footway", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "type": "footway" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#bba", + "line-dasharray": [10, 4], + "line-width": "@path_width" + }, + "style.night": { + "line-color": "#fff", + "line-dasharray": [10, 4], + "line-width": "@path_width" + } + }, { + "id": "road_path_path", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "type": "path" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#987", + "line-dasharray": [10, 4], + "line-opacity": 0.8, + "line-width": { + "fn": "stops", + "stops": [[14, 0.8], [15, 0.9], [16, 1.2]] + } + }, + "style.night": { + "line-color": "#fff", + "line-dasharray": [10, 4], + "line-opacity": 0.8, + "line-width": { + "fn": "stops", + "stops": [[14, 0.8], [15, 0.9], [16, 1.2]] + } + } + }, { + "id": "road_path_cycleway", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "type": "cycleway" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#488", + "line-dasharray": [10, 4], + "line-width": "@path_width" + }, + "style.night": { + "line-color": "#94e6ff", + "line-dasharray": [10, 4], + "line-width": "@path_width" + } + }, { + "id": "road_path_mtb", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "type": "mtb" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#488", + "line-dasharray": [12, 4], + "line-width": "@path_width" + }, + "style.night": { + "line-color": "#94e6ff", + "line-dasharray": [12, 4], + "line-width": "@path_width" + } + }, { + "id": "road_path_piste", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "type": "piste" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#87b", + "line-dasharray": [8, 4], + "line-width": "@path_width" + }, + "style.night": { + "line-color": "#715dae", + "line-dasharray": [8, 4], + "line-width": "@path_width" + } + }, { + "id": "road_path_steps", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "type": "steps" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#bba", + "line-dasharray": [10, 4], + "line-width": 4 + }, + "style.night": { + "line-color": "#016684", + "line-dasharray": [10, 4], + "line-opacity": 0.3, + "line-width": 6 + } + }, { + "id": "road_major_rail", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "class": "major_rail" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#c8c4c0", + "line-width": 0.8 + }, + "style.night": { + "line-color": "#c8c4c0", + "line-width": 0.8 + } + }, { + "id": "road_motorway_link_casing", + "source": "mapbox", + "source-layer": "road", + "filter": { "class": "motorway_link" }, + "render": { + "type": "line", + "line-join": "round", + "line-cap": "round" + }, + "style": { + "line-color": "@case", + "line-width": "@motorway_link_casing_width" + }, + "style.night": { + "line-color": "@case_night", + "line-width": "@motorway_link_casing_width" + } + }, { + "id": "road_service_casing", + "source": "mapbox", + "source-layer": "road", + "filter": { "class": "service" }, + "render": { + "type": "line", + "line-join": "round", + "line-cap": "round" + }, + "style": { + "line-color": "#000", + "line-opacity": 0.04, + "line-width": "@service_casing_width" + }, + "style.night": { + "line-color": "#000", + "line-opacity": 0.04, + "line-width": "@service_casing_width" + } + }, { + "id": "road_main_casing", + "source": "mapbox", + "source-layer": "road", + "filter": { "class": "main" }, + "render": { + "type": "line", + "line-join": "round", + "line-cap": "round" + }, + "style": { + "line-color": "@case", + "line-width": "@main_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9, 0], [10, 1]] + } + }, + "style.night": { + "line-color": "@case_night", + "line-width": "@main_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9, 0], [10, 1]] + } + } + }, { + "id": "road_street_casing", + "source": "mapbox", + "source-layer": "road", + "filter": { "class": ["street", "street_limited"] }, + "render": { + "type": "line", + "line-join": "round", + "line-cap": "round" + }, + "style": { + "line-color": "#d9d5c6", + "line-width": "@street_casing_width", + "line-opacity": "@street_casing_opacity" + }, + "style.night": { + "line-color": "@street_case_night", + "line-width": "@street_casing_width", + "line-opacity": "@street_casing_opacity" + } + }, { + "id": "road_motorway_link", + "ref": "road_motorway_link_casing", + "style": { + "line-color": "@motorway", + "line-width": "@motorway_link_width" + }, + "style.night": { + "line-color": "@motorway_night", + "line-width": "@motorway_link_width" + } + }, { + "id": "road_service", + "ref": "road_service_casing", + "style": { + "line-color": "@street", + "line-width": 2 + }, + "style.night": { + "line-color": "@street_night", + "line-width": 2 + } + }, { + "id": "road_street", + "ref": "road_street_casing", + "style": { + "line-color": "@street", + "line-width": "@street_width" + }, + "style.night": { + "line-color": "@street_night", + "line-width": "@street_width" + } + }, { + "id": "road_main", + "ref": "road_main_casing", + "style": { + "line-color": "@main", + "line-width": "@main_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + }, + "style.night": { + "line-color": "@main_night", + "line-width": "@main_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + } + }, { + "id": "road_motorway_casing", + "source": "mapbox", + "source-layer": "road", + "filter": { "class": "motorway" }, + "render": { + "type": "line", + "line-join": "round", + "line-cap": "round" + }, + "style": { + "line-color": "@case", + "line-width": "@motorway_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9.5, 0], [10, 1]] + } + }, + "style.night": { + "line-color": "@case_night", + "line-width": "@motorway_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9.5, 0], [10, 1]] + } + } + }, { + "id": "road_motorway", + "ref": "road_motorway_casing", + "style": { + "line-color": "@motorway", + "line-width": "@motorway_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + }, + "style.night": { + "line-color": "@motorway_night", + "line-width": "@motorway_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + } + }, { + "id": "road_major_rail_hatching", + "ref": "road_major_rail", + "style": { + "line-color": "#c8c4c0", + "line-dasharray": [2, 31], + "line-width": 5 + }, + "style.night": { + "line-color": "#c8c4c0", + "line-dasharray": [2, 31], + "line-width": 5 + } + }, { + "id": "bridge_motorway_link_casing", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "class": "motorway_link" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "@case", + "line-width": "@motorway_link_casing_width" + }, + "style.night": { + "line-color": "@case_night", + "line-width": "@motorway_link_casing_width" + } + }, { + "id": "bridge_service_casing", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "class": "service" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#000", + "line-opacity": 0.04, + "line-width": "@service_casing_width" + }, + "style.night": { + "line-color": "#000", + "line-opacity": 0.04, + "line-width": "@service_casing_width" + } + }, { + "id": "bridge_main_casing", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "class": "main" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "@case", + "line-width": "@main_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9, 0], [10, 1]] + } + }, + "style.night": { + "line-color": "@case_night", + "line-width": "@main_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9, 0], [10, 1]] + } + } + }, { + "id": "bridge_street_casing", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "class": ["street", "street_limited"] }, + "render": { + "type": "line" + }, + "style": { + "line-color": "#d9d5c6", + "line-width": "@street_casing_width", + "line-opacity": "@street_casing_opacity" + }, + "style.night": { + "line-color": "@street_case_night", + "line-width": "@street_casing_width", + "line-opacity": "@street_casing_opacity" + } + }, { + "id": "bridge_motorway_link", + "ref": "bridge_motorway_link_casing", + "style": { + "line-color": "@motorway", + "line-width": "@motorway_link_width" + }, + "style.night": { + "line-color": "@motorway_night", + "line-width": "@motorway_link_width" + } + }, { + "id": "bridge_service", + "ref": "bridge_service_casing", + "style": { + "line-color": "@street", + "line-width": 2 + }, + "style.night": { + "line-color": "@street_night", + "line-width": 2 + } + }, { + "id": "bridge_street", + "ref": "bridge_street_casing", + "style": { + "line-color": "@street", + "line-width": "@street_width" + }, + "style.night": { + "line-color": "@street_night", + "line-width": "@street_width" + } + }, { + "id": "bridge_main", + "ref": "bridge_main_casing", + "style": { + "line-color": "@main", + "line-width": "@main_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + }, + "style.night": { + "line-color": "@main_night", + "line-width": "@main_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + } + }, { + "id": "bridge_motorway_casing", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "class": "motorway" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "@case", + "line-width": "@motorway_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9.5, 0], [10, 1]] + } + }, + "style.night": { + "line-color": "@case_night", + "line-width": "@motorway_casing_width", + "line-opacity": { + "fn": "stops", + "stops": [[9.5, 0], [10, 1]] + } + } + }, { + "id": "bridge_motorway", + "ref": "bridge_motorway_casing", + "style": { + "line-color": "@motorway", + "line-width": "@motorway_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + }, + "style.night": { + "line-color": "@motorway_night", + "line-width": "@motorway_width", + "line-opacity": { + "fn": "stops", + "stops": [[6.5, 0], [7, 1]] + } + } + }, { + "id": "bridge_aerialway_casing", + "source": "mapbox", + "source-layer": "bridge", + "filter": { "class": "aerialway" }, + "render": { + "type": "line" + }, + "style": { + "line-color": "white", + "line-opacity": 0.5, + "line-width": "@aerialway_casing_width" + }, + "style.night": { + "line-color": "white", + "line-opacity": 0.5, + "line-width": "@aerialway_casing_width" + } + }, { + "id": "bridge_aerialway", + "ref": "bridge_aerialway_casing", + "style": { + "line-color": "#876", + "line-opacity": 0.5, + "line-width": "@aerialway_width" + }, + "style.night": { + "line-color": "#876", + "line-opacity": 0.5, + "line-width": "@aerialway_width" + } + }, { + "id": "admin_l3", + "source": "mapbox", + "source-layer": "admin", + "filter": { "admin_level": [3, 4, 5] }, + "render": { + "type": "line", + "line-join": "round" + }, + "style": { + "line-color": "#88a", + "line-dasharray": [60, 20], + "line-opacity": { + "fn": "stops", + "stops": [[4, 0], [6, 1]] + }, + "line-width": "@admin_l3_width" + }, + "style.night": { + "line-color": "@admin_night", + "line-dasharray": [60, 20], + "line-opacity": { + "fn": "stops", + "stops": [[4, 0], [6, 1]] + }, + "line-width": "@admin_l3_width" + } + }, { + "id": "admin_l2", + "source": "mapbox", + "source-layer": "admin", + "filter": { "admin_level": 2 }, + "render": { + "type": "line", + "line-join": "round", + "line-cap": "round" + }, + "style": { + "line-color": "#88a", + "line-width": "@admin_l2_width" + }, + "style.night": { + "line-color": "@admin_night", + "line-width": "@admin_l2_width" + } + }, { + "id": "admin_maritime_cover", + "source": "mapbox", + "source-layer": "admin", + "filter": { "maritime": 1 }, + "render": { + "type": "line", + "line-join": "round", + "line-cap": "round" + }, + "style": { + "line-color": "@water", + "line-width": 5 + }, + "style.night": { + "line-color": "@water_night", + "line-width": 5 + } + }, { + "id": "admin_maritime", + "ref": "admin_maritime_cover", + "style": { + "line-color": "#c0d6d6", + "line-width": { + "fn": "stops", + "stops": [[6, 1], [8, 2], [12, 3]] + } + }, + "style.night": { + "line-color": "#0a1347", + "line-width": { + "fn": "stops", + "stops": [[6, 1], [8, 2], [12, 3]] + } + } + }, { + "id": "country_label_line", + "source": "mapbox", + "source-layer": "country_label_line", + "render": { + "text-max-width": 5, + "type": "line" + }, + "style": { + "line-color": "@country_text", + "line-width": 0.5, + "line-opacity": 0.5 + }, + "style.night": { + "line-color": "@text_night", + "line-width": 0.5, + "line-opacity": 0.5 + } + }, { + "id": "country_label", + "source": "mapbox", + "source-layer": "country_label", + "filter": { "$type": "point" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-font": "Open Sans Semibold, Arial Unicode MS Bold", + "text-max-size": 24, + "text-max-width": 5 + }, + "style": { + "text-color": "@country_text", + "text-halo-color": "rgba(255,255,255,0.5)", + "text-halo-width": 0.5, + "text-size": "@country_label_size" + }, + "style.night": { + "text-color": "@text_night", + "text-halo-color": "@text2_stroke_night", + "text-halo-width": 0.4, + "text-size": "@country_label_size" + } + }, { + "id": "marine_label_line_1", + "source": "mapbox", + "source-layer": "marine_label", + "filter": { "$type": "line", "labelrank": 1 }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "curve", + "text-font": "Open Sans Semibold Italic, Arial Unicode MS Bold", + "text-max-size": 30, + "text-max-angle": 0.5, + "text-letter-spacing": 0.4 + }, + "style": { + "text-color": "@marine_text", + "text-size": { + "fn": "stops", + "stops": [[3, 20], [4, 25], [5, 30], [22, 30]] + }, + "text-halo-color": "@water" + }, + "style.night": { + "text-color": "@water_dark_night", + "text-size": { + "fn": "stops", + "stops": [[3, 20], [4, 25], [5, 30], [22, 30]] + }, + "text-halo-color": "@water_night" + } + }, { + "id": "marine_label_line_2", + "source": "mapbox", + "source-layer": "marine_label", + "filter": { "$type": "line", "labelrank": 2 }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "curve", + "text-font": "Open Sans Semibold Italic, Arial Unicode MS Bold", + "text-max-size": 24, + "text-max-angle": 0.5 + }, + "style": { + "text-color": "@marine_text", + "text-size": { + "fn": "stops", + "stops": [[3, 13], [4, 14], [5, 20], [6, 24], [22, 24]] + }, + "text-halo-color": "@water" + }, + "style.night": { + "text-color": "@water_dark_night", + "text-size": { + "fn": "stops", + "stops": [[3, 13], [4, 14], [5, 20], [6, 24], [22, 24]] + }, + "text-halo-color": "@water_night" + } + }, { + "id": "marine_label_line_3", + "source": "mapbox", + "source-layer": "marine_label", + "filter": { "$type": "line", "labelrank": 3 }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "curve", + "text-font": "Open Sans Semibold Italic, Arial Unicode MS Bold", + "text-max-size": 18, + "text-max-angle": 0.5 + }, + "style": { + "text-color": "@marine_text", + "text-size": { + "fn": "stops", + "stops": [[3, 12], [4, 13], [5, 15], [6, 18], [22, 18]] + }, + "text-halo-color": "@water" + }, + "style.night": { + "text-color": "@water_dark_night", + "text-size": { + "fn": "stops", + "stops": [[3, 12], [4, 13], [5, 15], [6, 18], [22, 18]] + }, + "text-halo-color": "@water_night" + } + }, { + "id": "marine_label_line_other", + "source": "mapbox", + "source-layer": "marine_label", + "filter": { "$type": "line", "labelrank": [4, 5, 6] }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "curve", + "text-font": "Open Sans Semibold Italic, Arial Unicode MS Bold", + "text-max-size": 16, + "text-max-angle": 0.5 + }, + "style": { + "text-color": "@marine_text", + "text-size": { + "fn": "stops", + "stops": [[4, 12], [5, 14], [6, 16], [22, 16]] + }, + "text-halo-color": "@water" + }, + "style.night": { + "text-color": "@water_dark_night", + "text-size": { + "fn": "stops", + "stops": [[4, 12], [5, 14], [6, 16], [22, 16]] + }, + "text-halo-color": "@water_night" + } + }, { + "id": "marine_label_point_1", + "source": "mapbox", + "source-layer": "marine_label", + "filter": { "$type": "point", "labelrank": 1 }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-font": "Open Sans Semibold Italic, Arial Unicode MS Bold", + "text-max-size": 30, + "text-max-width": 8, + "text-letter-spacing": 0.4, + "text-line-height": 2 + }, + "style": { + "text-color": "@marine_text", + "text-size": { + "fn": "stops", + "stops": [[3, 20], [4, 25], [5, 30], [22, 30]] + }, + "text-halo-color": "@water" + }, + "style.night": { + "text-color": "@water_dark_night", + "text-size": { + "fn": "stops", + "stops": [[3, 20], [4, 25], [5, 30], [22, 30]] + }, + "text-halo-color": "@water_night" + } + }, { + "id": "marine_label_point_2", + "source": "mapbox", + "source-layer": "marine_label", + "filter": { "$type": "point", "labelrank": 2 }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-font": "Open Sans Semibold Italic, Arial Unicode MS Bold", + "text-max-size": 24, + "text-max-width": 8, + "text-letter-spacing": 0.2, + "text-line-height": 1.5 + }, + "style": { + "text-color": "@marine_text", + "text-size": { + "fn": "stops", + "stops": [[3, 13], [4, 14], [5, 20], [6, 24], [22, 24]] + }, + "text-halo-color": "@water" + }, + "style.night": { + "text-color": "@water_dark_night", + "text-size": { + "fn": "stops", + "stops": [[3, 13], [4, 14], [5, 20], [6, 24], [22, 24]] + }, + "text-halo-color": "@water_night" + } + }, { + "id": "marine_label_point_3", + "source": "mapbox", + "source-layer": "marine_label", + "filter": { "$type": "point", "labelrank": 3 }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-font": "Open Sans Semibold Italic, Arial Unicode MS Bold", + "text-max-size": 18, + "text-max-width": 8, + "text-letter-spacing": 0.1, + "text-line-height": 1.3 + }, + "style": { + "text-color": "@marine_text", + "text-size": { + "fn": "stops", + "stops": [[3, 12], [4, 13], [5, 15], [6, 18], [22, 18]] + }, + "text-halo-color": "@water" + }, + "style.night": { + "text-color": "@water_dark_night", + "text-size": { + "fn": "stops", + "stops": [[3, 12], [4, 13], [5, 15], [6, 18], [22, 18]] + }, + "text-halo-color": "@water_night" + } + }, { + "id": "marine_label_point_other", + "source": "mapbox", + "source-layer": "marine_label", + "filter": { "$type": "point", "labelrank": [4, 5, 6] }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-font": "Open Sans Semibold Italic, Arial Unicode MS Bold", + "text-max-size": 16, + "text-max-width": 8, + "text-letter-spacing": 0.1, + "text-line-height": 1.2 + }, + "style": { + "text-color": "@marine_text", + "text-size": { + "fn": "stops", + "stops": [[4, 12], [5, 14], [6, 16], [22, 16]] + }, + "text-halo-color": "@water" + }, + "style.night": { + "text-color": "@water_dark_night", + "text-size": { + "fn": "stops", + "stops": [[4, 12], [5, 14], [6, 16], [22, 16]] + }, + "text-halo-color": "@water_night" + } + }, { + "id": "state_label", + "source": "mapbox", + "source-layer": "state_label", + "filter": { "$type": "point" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-font": "Open Sans Regular, Arial Unicode MS Regular", + "text-max-size": 16, + "text-max-width": 8 + }, + "style": { + "text-color": "#333", + "text-halo-width": 0.4, + "text-halo-color": "rgba(244,239,225,0.8)", + "text-size": { + "fn": "stops", + "stops": [[3.99, 0], [4, 10], [9.99, 16], [10, 0]] + } + }, + "style.night": { + "text-color": "#fff", + "text-halo-width": 0.4, + "text-halo-color": "@land_night", + "text-size": { + "fn": "stops", + "stops": [[3.99, 0], [4, 10], [9.99, 16], [10, 0]] + } + } + }, { + "id": "place_label_city", + "source": "mapbox", + "source-layer": "place_label", + "filter": { "type": "city", "$type": "point" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-font": "Open Sans Semibold, Arial Unicode MS Bold", + "text-max-size": 20, + "text-max-width": 8 + }, + "style": { + "text-color": "#444", + "text-halo-width": 0.4, + "text-halo-color": "@text_stroke", + "text-size": { + "fn": "stops", + "stops": [[3.99, 0], [4, 10], [7, 14], [14.99, 20], [15, 0]] + } + }, + "style.night": { + "text-color": "#fff", + "text-halo-width": 0.4, + "text-halo-color": "@text2_stroke_night", + "text-size": { + "fn": "stops", + "stops": [[3.99, 0], [4, 10], [7, 14], [14.99, 20], [15, 0]] + } + } + }, { + "id": "place_label_town", + "source": "mapbox", + "source-layer": "place_label", + "filter": { "type": "town", "$type": "point" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-font": "Open Sans Semibold, Arial Unicode MS Bold", + "text-max-size": 24, + "text-max-width": 8 + }, + "style": { + "text-color": "#716656", + "text-halo-width": 0.3, + "text-halo-color": "@text_stroke", + "text-size": { + "fn": "stops", + "stops": [[9, 10], [12, 13], [14, 17], [16, 22]] + } + }, + "style.night": { + "text-color": "@text_night", + "text-halo-width": 0.3, + "text-halo-color": "@text2_stroke_night", + "text-size": { + "fn": "stops", + "stops": [[9, 10], [12, 13], [14, 17], [16, 22]] + } + } + }, { + "id": "place_label_village", + "source": "mapbox", + "source-layer": "place_label", + "filter": { "type": "village", "$type": "point" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-font": "Open Sans Semibold, Arial Unicode MS Bold", + "text-max-size": 22, + "text-max-width": 8 + }, + "style": { + "text-color": "#635644", + "text-halo-width": 0.3, + "text-halo-color": "@text_stroke", + "text-size": { + "fn": "stops", + "stops": [[9, 8], [12, 10], [14, 14], [16, 16], [17, 20]] + } + }, + "style.night": { + "text-color": "@text_night", + "text-halo-width": 0.3, + "text-halo-color": "@text2_stroke_night", + "text-size": { + "fn": "stops", + "stops": [[9, 8], [12, 10], [14, 14], [16, 16], [17, 20]] + } + } + }, { + "id": "place_label_other", + "source": "mapbox", + "source-layer": "place_label", + "filter": { "type": ["hamlet", "suburb", "neighbourhood"], "$type": "point" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-font": "Open Sans Semibold, Arial Unicode MS Bold", + "text-max-size": 18, + "text-max-width": 6 + }, + "style": { + "text-color": "#7d6c55", + "text-halo-color": "@text_stroke", + "text-size": { + "fn": "stops", + "stops": [[13, 11], [14, 12], [16, 14], [18, 18]] + } + }, + "style.night": { + "text-color": "@text_night", + "text-halo-color": "@text2_stroke_night", + "text-halo-width": 0.3, + "text-size": { + "fn": "stops", + "stops": [[13, 11], [14, 12], [16, 14], [18, 18]] + } + } + }, { + "id": "road_label_1", + "source": "mapbox", + "source-layer": "road_label", + "filter": { "class": ["motorway", "main"], "$type": "line" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "curve", + "text-padding": 2, + "text-font": "Open Sans Regular, Arial Unicode MS Regular", + "text-max-size": 18, + "text-max-angle": 0.5 + }, + "style": { + "text-color": "#585042", + "text-halo-color": "@land", + "text-halo-width": 0.6, + "text-size": "@road_label_1_size" + }, + "style.night": { + "text-color": "@text_night", + "text-halo-color": "@text2_stroke_night", + "text-halo-width": 0.5, + "text-size": "@road_label_1_size" + } + }, { + "id": "road_label_2", + "source": "mapbox", + "source-layer": "road_label", + "filter": { "class": ["street", "street_limited"], "$type": "line" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "curve", + "text-padding": 2, + "text-font": "Open Sans Regular, Arial Unicode MS Regular", + "text-max-size": 16, + "text-max-angle": 0.5 + }, + "style": { + "text-color": "#585042", + "text-halo-color": "@land", + "text-halo-width": 0.6, + "text-size": "@road_label_2_size" + }, + "style.night": { + "text-color": "@text_night", + "text-halo-color": "@text2_stroke_night", + "text-halo-width": 0.5, + "text-size": "@road_label_2_size" + } + }, { + "id": "road_label_3", + "source": "mapbox", + "source-layer": "road_label", + "filter": { "class": ["service", "driveway", "path"], "$type": "line" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "curve", + "text-padding": 2, + "text-font": "Open Sans Regular, Arial Unicode MS Regular", + "text-max-size": 14, + "text-max-angle": 0.5 + }, + "style": { + "text-color": "#585042", + "text-halo-color": "@land", + "text-halo-width": 0.6, + "text-size": "@road_label_3_size" + }, + "style.night": { + "text-color": "@text_night", + "text-halo-color": "@text2_stroke_night", + "text-halo-width": 0.5, + "text-size": "@road_label_3_size" + } + }, { + "id": "contour_label", + "source": "mapbox", + "source-layer": "contour", + "filter": { "index": [5, 10], "$type": "line" }, + "render": { + "type": "text", + "text-path": "curve", + "text-field": "{{ele}} m", + "text-font": "Open Sans Regular, Arial Unicode MS Regular", + "text-max-size": 10, + "text-max-angle": 0.5 + }, + "style": { + "text-color": "@text", + "text-halo-color": "@land", + "text-halo-width": 0.3, + "text-size": 10 + }, + "style.night": { + "text-color": "@contour_night", + "text-halo-color": "@land_night", + "text-halo-width": 0.3, + "text-size": 10 + } + }, { + "id": "water_label", + "source": "mapbox", + "source-layer": "water_label", + "filter": { "$type": "point" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-font": "Open Sans Semibold Italic, Arial Unicode MS Bold", + "text-max-size": 12, + "text-max-width": 8 + }, + "style": { + "text-color": "@water_dark", + "text-halo-color": "rgba(255,255,255,0.75)" + }, + "style.night": { + "text-color": "@text_water_night", + "text-halo-color": "@water_night" + } + }, { + "id": "waterway_label", + "source": "mapbox", + "source-layer": "waterway_label", + "filter": { "$type": "line" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "curve", + "text-font": "Open Sans Semibold Italic, Arial Unicode MS Bold", + "text-max-size": 12, + "text-max-angle": 0.5 + }, + "style": { + "text-color": "@water_dark", + "text-halo-width": 0.4, + "text-halo-color": "@text_stroke" + }, + "style.night": { + "text-color": "@text_water_night", + "text-halo-color": "@water_night" + } + }, { + "id": "poi", + "source": "mapbox", + "source-layer": "poi_label", + "filter": { "scalerank": [1, 2] }, + "render": { + "type": "icon", + "icon-image": "{{maki}}-12", + "icon-size": 12 + }, + "style.night": {} + }, { + "id": "poi_label_1-2", + "source": "mapbox", + "source-layer": "poi_label", + "filter": { "scalerank": [1, 2], "$type": "point" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-padding": 2, + "text-font": "Open Sans Semibold, Arial Unicode MS Bold", + "text-max-size": 12, + "text-max-width": 10, + "text-alignment": "center" + }, + "style": { + "text-color": "#444", + "text-size": "@poi_label_1-2_size", + "text-halo-color": "@land", + "text-halo-width": 0.3 + }, + "style.night": { + "text-color": "#fff", + "text-size": "@poi_label_1-2_size", + "text-halo-color": "@text2_stroke_night", + "text-halo-width": 0.3 + } + }, { + "id": "poi_3", + "source": "mapbox", + "source-layer": "poi_label", + "filter": { "scalerank": 3 }, + "render": { + "type": "icon", + "icon-image": "{{maki}}-12", + "icon-size": 12 + }, + "style": { + "icon-opacity": { + "fn": "stops", + "stops": [[16.5, 0], [16.75, 1]] + } + }, + "style.night": { + "icon-opacity": { + "fn": "stops", + "stops": [[16.5, 0], [16.75, 1]] + } + } + }, { + "id": "poi_label_3", + "source": "mapbox", + "source-layer": "poi_label", + "filter": { "scalerank": 3, "$type": "point" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-padding": 2, + "text-font": "Open Sans Semibold, Arial Unicode MS Bold", + "text-max-size": 11, + "text-max-width": 10, + "text-alignment": "center" + }, + "style": { + "text-color": "#444", + "text-size": "@poi_label_3_size", + "text-halo-color": "@land", + "text-halo-width": 0.3, + "text-opacity": { + "fn": "stops", + "stops": [[16.5, 0], [16.75, 1]] + } + }, + "style.night": { + "text-color": "#fff", + "text-size": "@poi_label_3_size", + "text-halo-color": "@text2_stroke_night", + "text-halo-width": 0.3, + "text-opacity": { + "fn": "stops", + "stops": [[16.5, 0], [16.75, 1]] + } + } + }, { + "id": "poi_4", + "source": "mapbox", + "source-layer": "poi_label", + "filter": { "scalerank": 4 }, + "render": { + "type": "icon", + "icon-image": "{{maki}}-12", + "icon-size": 12 + }, + "style": { + "icon-opacity": { + "fn": "stops", + "stops": [[18.5, 0], [18.75, 1]] + } + }, + "style.night": { + "icon-opacity": { + "fn": "stops", + "stops": [[18.5, 0], [18.75, 1]] + } + } + }, { + "id": "poi_label_4", + "source": "mapbox", + "source-layer": "poi_label", + "filter": { "scalerank": 4, "$type": "point" }, + "render": { + "type": "text", + "text-field": "{{name_en}}", + "text-path": "horizontal", + "text-padding": 2, + "text-font": "Open Sans Semibold, Arial Unicode MS Bold", + "text-max-size": 10, + "text-max-width": 10, + "text-alignment": "center" + }, + "style": { + "text-color": "#444", + "text-size": 10, + "text-opacity": { + "fn": "stops", + "stops": [[18.5, 0], [18.75, 1]] + }, + "text-halo-color": "@land", + "text-halo-width": 0.3 + }, + "style.night": { + "text-color": "#fff", + "text-size": 10, + "text-opacity": { + "fn": "stops", + "stops": [[18.5, 0], [18.75, 1]] + }, + "text-halo-color": "@text2_stroke_night", + "text-halo-width": 0.3 + } + }, { + "id": "poi_aerodrome", + "source": "mapbox", + "source-layer": "poi_label", + "filter": { "maki": "airport" }, + "render": { + "type": "icon", + "icon-image": "{{maki}}-12", + "icon-size": 12 + }, + "style": { + "icon-opacity": { + "fn": "stops", + "stops": [[13, 0], [13.25, 1]] + } + }, + "style.night": { + "icon-opacity": { + "fn": "stops", + "stops": [[13, 0], [13.25, 1]] + } + } + }] }; diff --git a/common/glfw_view.cpp b/common/glfw_view.cpp index dbd455906..bcfa5f1bc 100644 --- a/common/glfw_view.cpp +++ b/common/glfw_view.cpp @@ -78,17 +78,8 @@ void GLFWView::key(GLFWwindow *window, int key, int /*scancode*/, int action, in break; case GLFW_KEY_R: if (!mods) { - std::set newAppliedClasses; - if (view->map->getAppliedClasses().count("default") && view->map->getAppliedClasses().count("night")) { - if (view->map->getAppliedClasses().count("night")) { - newAppliedClasses.insert("default"); - } else { - newAppliedClasses.insert("default"); - newAppliedClasses.insert(newAppliedClasses.end(), "night"); - } - view->map->setDefaultTransitionDuration(300); - view->map->setAppliedClasses(newAppliedClasses); - } + view->map->setDefaultTransitionDuration(300); + view->map->toggleClass("night"); } break; case GLFW_KEY_N: diff --git a/config/constants.cpp b/config/constants.cpp index ab0c160a8..36f51559e 100644 --- a/config/constants.cpp +++ b/config/constants.cpp @@ -1,9 +1,5 @@ #include -const char *llmr::kSpriteURL = "http://mapbox-kkaefer.s3.amazonaws.com/static/outdoors-gl/sprite"; -const char *llmr::kVectorTileURL = "http://a.tiles.mapbox.com/v3/mapbox.mapbox-terrain-v1,mapbox.mapbox-streets-v5/%d/%d/%d.vector.pbf"; -const char *llmr::kGlyphURL = "http://mapbox.s3.amazonaws.com/gl-glyphs-256/%s/%d-%d.pbf"; - const float llmr::util::tileSize = 512.0f; #if defined(DEBUG) diff --git a/include/llmr/geometry/buffer.hpp b/include/llmr/geometry/buffer.hpp index 27807c809..607f902bf 100644 --- a/include/llmr/geometry/buffer.hpp +++ b/include/llmr/geometry/buffer.hpp @@ -32,6 +32,10 @@ public: return pos / itemSize; } + inline bool empty() const { + return pos == 0; + } + // Transfers this buffer to the GPU and binds the buffer to the GL context. void bind(bool force = false) { if (buffer == 0) { diff --git a/include/llmr/map/filter_expression.hpp b/include/llmr/map/filter_expression.hpp deleted file mode 100644 index 50e6ce1d7..000000000 --- a/include/llmr/map/filter_expression.hpp +++ /dev/null @@ -1,128 +0,0 @@ -#ifndef LLMR_MAP_FILTER_EXPRESSION -#define LLMR_MAP_FILTER_EXPRESSION - -#include -#include - -#include -#include - -namespace llmr { - -enum class FilterOperator { - Equal, - NotEqual, - Greater, - GreaterEqual, - Less, - LessEqual -}; - -enum class ExpressionOperator { - Or, - And -}; - - -inline FilterOperator filterOperatorType(const std::string &op) { - if (op == "!=" || op == "not") { - return FilterOperator::NotEqual; - } else if (op == "==" || op == "eq") { - return FilterOperator::Equal; - } else if (op == ">" || op == "gt") { - return FilterOperator::Greater; - } else if (op == ">=" || op == "gte") { - return FilterOperator::GreaterEqual; - } else if (op == "<" || op == "lt") { - return FilterOperator::Less; - } else if (op == "<=" || op == "lte") { - return FilterOperator::LessEqual; - } else { - fprintf(stderr, "[WARNING] filter operator '%s' unrecognized\n", op.c_str()); - return FilterOperator::Equal; - } -} - -inline ExpressionOperator expressionOperatorType(const std::string &op) { - if (op == "&&" || op == "and") { - return ExpressionOperator::And; - } else if (op == "||" || op == "or") { - return ExpressionOperator::Or; - } else { - fprintf(stderr, "[WARNING] expression operator '%s' unrecognized\n", op.c_str()); - return ExpressionOperator::Or; - } -} - - -class PropertyFilter; -class PropertyExpression; - -typedef util::variant< - util::recursive_wrapper, - util::recursive_wrapper, - std::true_type -> PropertyFilterExpression; - - -class PropertyFilter { -public: - inline PropertyFilter(const std::string &field, FilterOperator op, const Value &value) : field(field), op(op), value(value) {}; - inline PropertyFilter(PropertyFilter &&filter) - : field(std::move(filter.field)), - op(filter.op), - value(std::move(filter.value)) { - } - - // Returns true if the filter passes, even if the key is missing. - inline bool isMissingFieldOkay() const { - switch (op) { - case FilterOperator::NotEqual: - return true; - default: - return false; - } - } - - inline bool compare(const Value &other) const { - switch (op) { - case FilterOperator::Equal: - return util::relaxed_equal(other, value); - case FilterOperator::NotEqual: - return !util::relaxed_equal(other, value); - case FilterOperator::Greater: - return util::relaxed_greater(other, value); - case FilterOperator::GreaterEqual: - return util::relaxed_greater_equal(other, value); - case FilterOperator::Less: - return util::relaxed_less(other, value); - case FilterOperator::LessEqual: - return util::relaxed_less_equal(other, value); - default: - return false; - } - } - -public: - std::string field; - FilterOperator op = FilterOperator::Equal; - Value value; -}; - -class PropertyExpression { -public: - inline PropertyExpression() {} - inline PropertyExpression(PropertyExpression &&expression) - : op(expression.op), - operands(std::move(expression.operands)) { - } - -public: - ExpressionOperator op = ExpressionOperator::Or; - std::vector operands; -}; - - -} - -#endif diff --git a/include/llmr/map/map.hpp b/include/llmr/map/map.hpp index e20803b99..75090f941 100644 --- a/include/llmr/map/map.hpp +++ b/include/llmr/map/map.hpp @@ -20,8 +20,7 @@ namespace llmr { class Source; - -typedef std::map> Sources; +class SpriteAtlas; class Map : private util::noncopyable { public: @@ -53,8 +52,8 @@ public: void resize(uint16_t width, uint16_t height, float ratio, uint16_t fb_width, uint16_t fb_height); // Styling - void setAppliedClasses(std::set appliedClasses); - std::set getAppliedClasses() const; + void toggleClass(const std::string &name); + const std::vector &getAppliedClasses() const; void setDefaultTransitionDuration(uint64_t duration_milliseconds = 0); void setStyleJSON(std::string newStyleJSON); std::string getStyleJSON() const; @@ -107,8 +106,8 @@ public: inline std::shared_ptr getSpriteAtlas() { return spriteAtlas; } inline std::shared_ptr getTexturepool() { return texturepool; } inline std::shared_ptr getLoop() { return loop; } - inline time getAnimationTime() const { return animationTime; } - inline const Sources &getSources() { return sources; } + inline timestamp getAnimationTime() const { return animationTime; } + inline timestamp getTime() const { return animationTime; } private: // uv async callbacks @@ -133,8 +132,8 @@ private: // Unconditionally performs a render with the current map state. void render(); - void renderLayers(const std::vector& layers); - void renderLayer(const LayerDescription& layer_desc, RenderPass pass); + void renderLayers(std::shared_ptr group); + void renderLayer(std::shared_ptr layer_desc, RenderPass pass); private: // If cleared, the next time the render thread attempts to render the map, it will *actually* @@ -162,12 +161,10 @@ private: Painter painter; - Sources sources; - std::string styleJSON = ""; bool debug = false; - time animationTime = 0; + timestamp animationTime = 0; int indent = 0; diff --git a/include/llmr/map/raster_tile_data.hpp b/include/llmr/map/raster_tile_data.hpp index fd72cca9b..f84b540d4 100644 --- a/include/llmr/map/raster_tile_data.hpp +++ b/include/llmr/map/raster_tile_data.hpp @@ -16,8 +16,8 @@ public: ~RasterTileData(); virtual void parse(); - virtual void render(Painter &painter, const LayerDescription& layer_desc); - virtual bool hasData(const LayerDescription& layer_desc) const; + virtual void render(Painter &painter, std::shared_ptr layer_desc); + virtual bool hasData(std::shared_ptr layer_desc) const; protected: RasterBucket bucket; diff --git a/include/llmr/map/source.hpp b/include/llmr/map/source.hpp index 08a8771ba..2937a8f69 100644 --- a/include/llmr/map/source.hpp +++ b/include/llmr/map/source.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -16,58 +17,49 @@ namespace llmr { -class Map; class TransformState; -class Painter; class Texturepool; class Source : public std::enable_shared_from_this, private util::noncopyable { public: - enum class Type { - vector, - raster - }; + Source(SourceType type = SourceType::Vector, const std::string &url = "", + uint32_t tile_size = 512, uint32_t min_zoom = 0, uint32_t max_zoom = 22); -public: - Source(Map &map, Painter &painter, - const char *url = "", Type type = Type::vector, uint32_t tile_size = 512, - uint32_t min_zoom = 0, uint32_t max_zoom = 14, bool enabled = true); - - bool update(); - void updateMatrices(const TransformState &transform); - void drawClippingMasks(); + bool update(Map &map); + void updateMatrices(const mat4 &projMatrix, const TransformState &transform); + void drawClippingMasks(Painter &painter); size_t getTileCount() const; - void render(const LayerDescription& layer_desc, const BucketDescription &bucket_desc); - void finishRender(); + void render(Painter &painter, std::shared_ptr layer_desc); + void finishRender(Painter &painter); std::forward_list getIDs() const; void updateClipIDs(const std::map &mapping); + static std::string normalizeSourceURL(const std::string &url); + public: - bool enabled; - -private: - bool findLoadedChildren(const Tile::ID& id, int32_t maxCoveringZoom, std::forward_list& retain); - bool findLoadedParent(const Tile::ID& id, int32_t minCoveringZoom, std::forward_list& retain); - std::forward_list covering_tiles(int32_t zoom, const box& points); - - bool updateTiles(); - - TileData::State addTile(const Tile::ID& id); - TileData::State hasTile(const Tile::ID& id); - - double getZoom() const; - -private: - Map& map; - Painter& painter; - - const Type type; + const SourceType type; const std::string url; const uint32_t tile_size; const int32_t min_zoom; const int32_t max_zoom; +private: + bool findLoadedChildren(const Tile::ID& id, int32_t maxCoveringZoom, std::forward_list& retain); + bool findLoadedParent(const Tile::ID& id, int32_t minCoveringZoom, std::forward_list& retain); + std::forward_list covering_tiles(const TransformState &state, int32_t clamped_zoom, const box& points); + + bool updateTiles(Map &map); + + TileData::State addTile(Map &map, const Tile::ID& id); + TileData::State hasTile(const Tile::ID& id); + + double getZoom(const TransformState &state) const; + +private: + // Stores the time when this source was most recently updated. + timestamp updated = 0; + std::map> tiles; std::map> tile_data; }; diff --git a/include/llmr/map/tile_data.hpp b/include/llmr/map/tile_data.hpp index 0717f6c92..09f36d59b 100644 --- a/include/llmr/map/tile_data.hpp +++ b/include/llmr/map/tile_data.hpp @@ -16,7 +16,7 @@ namespace llmr { class Map; class Painter; -class LayerDescription; +class StyleLayer; class TileData : public std::enable_shared_from_this, private util::noncopyable { @@ -49,8 +49,8 @@ public: virtual void beforeParse(); virtual void parse() = 0; virtual void afterParse(); - virtual void render(Painter &painter, const LayerDescription& layer_desc) = 0; - virtual bool hasData(const LayerDescription& layer_desc) const = 0; + virtual void render(Painter &painter, std::shared_ptr layer_desc) = 0; + virtual bool hasData(std::shared_ptr layer_desc) const = 0; public: diff --git a/include/llmr/map/tile_parser.hpp b/include/llmr/map/tile_parser.hpp index edeb3b000..e18c2746a 100644 --- a/include/llmr/map/tile_parser.hpp +++ b/include/llmr/map/tile_parser.hpp @@ -6,6 +6,7 @@ #include #include #include +#include namespace llmr { @@ -14,8 +15,13 @@ class GlyphAtlas; class GlyphStore; class SpriteAtlas; class VectorTileData; +class StyleLayer; +class StyleLayerGroup; +class StyleBucket; +class StyleBucketFill; +class StyleBucketLine; +class StyleBucketIcon; -class LayerDescription; class Bucket; class TileParser { @@ -32,15 +38,17 @@ public: private: bool obsolete() const; void parseGlyphs(); - void parseStyleLayers(const std::vector& layers); + void parseStyleLayers(std::shared_ptr group); void addGlyph(uint64_t tileid, const std::string stackname, const std::u32string &string, const FontStack &fontStack, GlyphAtlas &glyphAtlas, GlyphPositions &face); - std::unique_ptr createBucket(const BucketDescription& bucket_desc); - std::unique_ptr createFillBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); - std::unique_ptr createLineBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); - std::unique_ptr createIconBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); - std::unique_ptr createTextBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); - template void addBucketFeatures(Bucket& bucket, const VectorTileLayer& layer, const BucketDescription& bucket_desc); - template void addBucketFeatures(Bucket& bucket, const VectorTileLayer& layer, const BucketDescription& bucket_desc, Args&& ...args); + std::unique_ptr createBucket(std::shared_ptr bucket_desc); + + std::unique_ptr createFillBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketFill &fill); + std::unique_ptr createLineBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketLine &line); + std::unique_ptr createIconBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketIcon &icon); + std::unique_ptr createTextBucket(const VectorTileLayer& layer, const FilterExpression &filter, const StyleBucketText &text); + + template void addBucketFeatures(Bucket& bucket, const VectorTileLayer& layer, const FilterExpression &filter); + template void addBucketFeatures(Bucket& bucket, const VectorTileLayer& layer, const FilterExpression &filter, Args&& ...args); private: const VectorTile vector_data; diff --git a/include/llmr/map/transform.hpp b/include/llmr/map/transform.hpp index 63b75d43d..c4474ff02 100644 --- a/include/llmr/map/transform.hpp +++ b/include/llmr/map/transform.hpp @@ -23,18 +23,18 @@ public: uint16_t fb_width, uint16_t fb_height); // Position - void moveBy(double dx, double dy, time duration = 0); - void setLonLat(double lon, double lat, time duration = 0); - void setLonLatZoom(double lon, double lat, double zoom, time duration = 0); + void moveBy(double dx, double dy, timestamp duration = 0); + void setLonLat(double lon, double lat, timestamp duration = 0); + void setLonLatZoom(double lon, double lat, double zoom, timestamp duration = 0); void getLonLat(double& lon, double& lat) const; void getLonLatZoom(double& lon, double& lat, double& zoom) const; void startPanning(); void stopPanning(); // Zoom - void scaleBy(double ds, double cx = -1, double cy = -1, time duration = 0); - void setScale(double scale, double cx = -1, double cy = -1, time duration = 0); - void setZoom(double zoom, time duration = 0); + void scaleBy(double ds, double cx = -1, double cy = -1, timestamp duration = 0); + void setScale(double scale, double cx = -1, double cy = -1, timestamp duration = 0); + void setZoom(double zoom, timestamp duration = 0); double getZoom() const; double getScale() const; void startScaling(); @@ -43,8 +43,8 @@ public: double getMaxZoom() const; // Angle - void rotateBy(double sx, double sy, double ex, double ey, time duration = 0); - void setAngle(double angle, time duration = 0); + void rotateBy(double sx, double sy, double ex, double ey, timestamp duration = 0); + void setAngle(double angle, timestamp duration = 0); void setAngle(double angle, double cx, double cy); double getAngle() const; void startRotating(); @@ -53,7 +53,7 @@ public: // Transitions bool needsTransition() const; - void updateTransitions(time now); + void updateTransitions(timestamp now); void cancelTransitions(); // Transform state @@ -63,10 +63,10 @@ public: private: // Functions prefixed with underscores will *not* perform any locks. It is the caller's // responsibility to lock this object. - void _moveBy(double dx, double dy, time duration = 0); - void _setScale(double scale, double cx, double cy, time duration = 0); - void _setScaleXY(double new_scale, double xn, double yn, time duration = 0); - void _setAngle(double angle, time duration = 0); + void _moveBy(double dx, double dy, timestamp duration = 0); + void _setScale(double scale, double cx, double cy, timestamp duration = 0); + void _setScaleXY(double new_scale, double xn, double yn, timestamp duration = 0); + void _setAngle(double angle, timestamp duration = 0); void _clearPanning(); void _clearRotating(); void _clearScaling(); diff --git a/include/llmr/map/vector_tile.hpp b/include/llmr/map/vector_tile.hpp index 904cc9a2e..ad7a0eea1 100644 --- a/include/llmr/map/vector_tile.hpp +++ b/include/llmr/map/vector_tile.hpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include #include @@ -40,6 +40,22 @@ public: std::ostream& operator<<(std::ostream&, const VectorTileFeature& feature); + +class VectorTileTagExtractor { +public: + VectorTileTagExtractor(const VectorTileLayer &layer); + + void setTags(const pbf &pbf); + std::forward_list getValues(const std::string &key) const; + void setType(FilterExpression::GeometryType type); + FilterExpression::GeometryType getType() const; + +private: + const VectorTileLayer &layer_; + pbf tags_; + FilterExpression::GeometryType type_ = FilterExpression::GeometryType::Any; +}; + /* * Allows iterating over the features of a VectorTileLayer using a * BucketDescription as filter. Only features matching the descriptions will @@ -54,11 +70,6 @@ public: bool operator!=(const iterator& other) const; const pbf& operator*() const; - private: - bool matchesFilterExpression(const PropertyFilterExpression &filterExpression, const pbf &tags_pbf); - bool matchesExpression(const PropertyExpression &expression, const pbf &tags_pbf); - bool matchesFilter(const PropertyFilter &filter, const pbf &tags_pbf); - private: const FilteredVectorTileLayer& parent; bool valid = false; @@ -67,14 +78,14 @@ public: }; public: - FilteredVectorTileLayer(const VectorTileLayer& layer, const BucketDescription& bucket_desc); + FilteredVectorTileLayer(const VectorTileLayer& layer, const FilterExpression &filterExpression); iterator begin() const; iterator end() const; private: const VectorTileLayer& layer; - const BucketDescription& bucket_desc; + const FilterExpression& filterExpression; }; std::ostream& operator<<(std::ostream&, const GlyphPlacement& placement); diff --git a/include/llmr/map/vector_tile_data.hpp b/include/llmr/map/vector_tile_data.hpp index 717ed79a3..d6f5391c2 100644 --- a/include/llmr/map/vector_tile_data.hpp +++ b/include/llmr/map/vector_tile_data.hpp @@ -29,8 +29,8 @@ public: virtual void beforeParse(); virtual void parse(); virtual void afterParse(); - virtual void render(Painter &painter, const LayerDescription& layer_desc); - virtual bool hasData(const LayerDescription& layer_desc) const; + virtual void render(Painter &painter, std::shared_ptr layer_desc); + virtual bool hasData(std::shared_ptr layer_desc) const; protected: // Holds the actual geometries in this tile. diff --git a/include/llmr/renderer/bucket.hpp b/include/llmr/renderer/bucket.hpp index 43bd96e3f..c135b8ee1 100644 --- a/include/llmr/renderer/bucket.hpp +++ b/include/llmr/renderer/bucket.hpp @@ -10,10 +10,11 @@ namespace llmr { class Painter; +class StyleLayer; class Bucket : private util::noncopyable { public: - virtual void render(Painter& painter, const std::string& layer_name, const Tile::ID& id) = 0; + virtual void render(Painter& painter, std::shared_ptr layer_desc, const Tile::ID& id) = 0; virtual bool hasData() const = 0; virtual ~Bucket() {} diff --git a/include/llmr/renderer/debug_bucket.hpp b/include/llmr/renderer/debug_bucket.hpp index 0b9df57fa..d72a645ee 100644 --- a/include/llmr/renderer/debug_bucket.hpp +++ b/include/llmr/renderer/debug_bucket.hpp @@ -2,7 +2,6 @@ #define LLMR_RENDERER_DEBUGBUCKET #include -#include #include #include @@ -21,7 +20,7 @@ class DebugBucket : public Bucket { public: DebugBucket(DebugFontBuffer& fontBuffer); - virtual void render(Painter& painter, const std::string& layer_name, const Tile::ID& id); + virtual void render(Painter& painter, std::shared_ptr layer_desc, const Tile::ID& id); virtual bool hasData() const; void drawLines(PlainShader& shader); diff --git a/include/llmr/renderer/fill_bucket.hpp b/include/llmr/renderer/fill_bucket.hpp index 95d53ce75..db0e9c104 100644 --- a/include/llmr/renderer/fill_bucket.hpp +++ b/include/llmr/renderer/fill_bucket.hpp @@ -2,9 +2,9 @@ #define LLMR_RENDERER_FILLBUCKET #include -#include #include #include +#include #include #include @@ -41,10 +41,10 @@ public: FillBucket(FillVertexBuffer& vertexBuffer, TriangleElementsBuffer& triangleElementsBuffer, LineElementsBuffer& lineElementsBuffer, - const BucketFillDescription& properties); + const StyleBucketFill& properties); ~FillBucket(); - virtual void render(Painter& painter, const std::string& layer_name, const Tile::ID& id); + virtual void render(Painter& painter, std::shared_ptr layer_desc, const Tile::ID& id); virtual bool hasData() const; void addGeometry(pbf& data); @@ -55,7 +55,7 @@ public: void drawVertices(OutlineShader& shader); public: - const BucketFillDescription &properties; + const StyleBucketFill &properties; private: TESSalloc *allocator; diff --git a/include/llmr/renderer/frame_history.hpp b/include/llmr/renderer/frame_history.hpp index e45bd527b..35ef3cdf4 100644 --- a/include/llmr/renderer/frame_history.hpp +++ b/include/llmr/renderer/frame_history.hpp @@ -11,17 +11,17 @@ namespace llmr { struct FrameSnapshot { - explicit inline FrameSnapshot(time timestamp, float z) : timestamp(timestamp), z(z) {} - float timestamp; + explicit inline FrameSnapshot(timestamp t, float z) : t(t), z(z) {} + float t; float z; }; class FrameHistory { public: // Record frame history that will be used to calculate fading params - void record(time now, float zoom); + void record(timestamp now, float zoom); - bool needsAnimation(time duration) const; + bool needsAnimation(timestamp duration) const; public: std::deque history; diff --git a/include/llmr/renderer/icon_bucket.hpp b/include/llmr/renderer/icon_bucket.hpp index 5d653a15f..d13f53586 100644 --- a/include/llmr/renderer/icon_bucket.hpp +++ b/include/llmr/renderer/icon_bucket.hpp @@ -2,9 +2,9 @@ #define LLMR_RENDERER_ICONBUCKET #include -#include #include #include +#include #include #include @@ -26,9 +26,9 @@ class VectorTileFeature; class IconBucket : public Bucket { public: IconBucket(IconVertexBuffer& vertexBuffer, - const BucketIconDescription& properties); + const StyleBucketIcon& properties); - virtual void render(Painter& painter, const std::string& layer_name, const Tile::ID& id); + virtual void render(Painter& painter, std::shared_ptr layer_desc, const Tile::ID& id); virtual bool hasData() const; void addFeature(const VectorTileFeature &feature, SpriteAtlas &sprite_atlas); @@ -37,7 +37,7 @@ public: void drawIcons(DotShader& shader); public: - const BucketIconDescription &properties; + const StyleBucketIcon &properties; private: diff --git a/include/llmr/renderer/line_bucket.hpp b/include/llmr/renderer/line_bucket.hpp index d7253ace9..881bd23eb 100644 --- a/include/llmr/renderer/line_bucket.hpp +++ b/include/llmr/renderer/line_bucket.hpp @@ -2,10 +2,11 @@ #define LLMR_RENDERER_LINEBUCKET #include "bucket.hpp" -#include #include #include #include +#include + #include #include @@ -25,9 +26,9 @@ public: LineBucket(LineVertexBuffer& vertexBuffer, TriangleElementsBuffer& triangleElementsBuffer, PointElementsBuffer& pointElementsBuffer, - const BucketLineDescription& properties); + const StyleBucketLine& properties); - virtual void render(Painter& painter, const std::string& layer_name, const Tile::ID& id); + virtual void render(Painter& painter, std::shared_ptr layer_desc, const Tile::ID& id); virtual bool hasData() const; void addGeometry(pbf& data); @@ -39,7 +40,7 @@ public: void drawPoints(LinejoinShader& shader); public: - const BucketLineDescription &properties; + const StyleBucketLine &properties; private: diff --git a/include/llmr/renderer/painter.hpp b/include/llmr/renderer/painter.hpp index 104f4c9bd..a465f657f 100644 --- a/include/llmr/renderer/painter.hpp +++ b/include/llmr/renderer/painter.hpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include @@ -24,6 +24,8 @@ #include #include +#include +#include namespace llmr { @@ -39,11 +41,12 @@ class IconBucket; class TextBucket; class RasterBucket; +struct FillProperties; +struct CompositeProperties; + class LayerDescription; class RasterTileData; -typedef std::map> Sources; - class Painter : private util::noncopyable { public: Painter(Map &map); @@ -64,7 +67,7 @@ public: void changeMatrix(); // Renders a particular layer from a tile. - void renderTileLayer(const Tile& tile, const LayerDescription &layer_desc); + void renderTileLayer(const Tile& tile, std::shared_ptr layer_desc); // Renders debug information for a tile. void renderTileDebug(const Tile& tile); @@ -79,15 +82,17 @@ public: void renderDebugText(DebugBucket& bucket); void renderDebugText(const std::vector &strings); void renderFill(FillBucket& bucket, const FillProperties& properties, const Tile::ID& id, const mat4 &mat); - void renderFill(FillBucket& bucket, const std::string& layer_name, const Tile::ID& id); - void renderLine(LineBucket& bucket, const std::string& layer_name, const Tile::ID& id); - void renderIcon(IconBucket& bucket, const std::string& layer_name, const Tile::ID& id); - void renderText(TextBucket& bucket, const std::string& layer_name, const Tile::ID& id); - void renderRaster(RasterBucket& bucket, const std::string& layer_name, const Tile::ID& id); + void renderFill(FillBucket& bucket, std::shared_ptr layer_desc, const Tile::ID& id); + void renderLine(LineBucket& bucket, std::shared_ptr layer_desc, const Tile::ID& id); + void renderIcon(IconBucket& bucket, std::shared_ptr layer_desc, const Tile::ID& id); + void renderText(TextBucket& bucket, std::shared_ptr layer_desc, const Tile::ID& id); + void renderRaster(RasterBucket& bucket, std::shared_ptr layer_desc, const Tile::ID& id); void preparePrerender(PrerenderedTexture &texture); void finishPrerender(PrerenderedTexture &texture); - void renderPrerenderedTexture(PrerenderedTexture &texture, const GenericProperties &properties); + + template + void renderPrerenderedTexture(PrerenderedTexture &texture, const Properties &properties); void resize(); @@ -101,7 +106,7 @@ public: // Configures the painter strata that is used for early z-culling of fragments. void setStrata(float strata); - void drawClippingMasks(const Sources &sources); + void drawClippingMasks(const std::set> &sources); void drawClippingMask(const mat4& matrix, const ClipID& clip); void clearFramebuffers(); @@ -115,7 +120,7 @@ public: bool needsAnimation() const; private: void setupShaders(); - const mat4 &translatedMatrix(const std::array &translation, const Tile::ID &id, TranslateAnchor anchor = TranslateAnchor::Map); + const mat4 &translatedMatrix(const std::array &translation, const Tile::ID &id, TranslateAnchorType anchor = TranslateAnchorType::Default); void prepareTile(const Tile& tile); diff --git a/include/llmr/renderer/prerendered_texture.hpp b/include/llmr/renderer/prerendered_texture.hpp index b109e397c..168284e1d 100644 --- a/include/llmr/renderer/prerendered_texture.hpp +++ b/include/llmr/renderer/prerendered_texture.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include namespace llmr { @@ -11,7 +11,7 @@ class Painter; class PrerenderedTexture : private util::noncopyable { public: - PrerenderedTexture(const PrerenderProperties &properties); + PrerenderedTexture(const RasterizedProperties &properties); ~PrerenderedTexture(); void bindTexture(); @@ -23,7 +23,7 @@ public: void blur(Painter& painter, uint16_t passes); public: - const PrerenderProperties properties; + const RasterizedProperties properties; private: GLint previous_fbo = 0; diff --git a/include/llmr/renderer/raster_bucket.hpp b/include/llmr/renderer/raster_bucket.hpp index 675d15f82..86bb1d925 100644 --- a/include/llmr/renderer/raster_bucket.hpp +++ b/include/llmr/renderer/raster_bucket.hpp @@ -2,7 +2,6 @@ #define LLMR_RENDERER_RASTERBUCKET #include -#include #include namespace llmr { @@ -15,7 +14,7 @@ class RasterBucket : public Bucket { public: RasterBucket(const std::shared_ptr &texturepool); - virtual void render(Painter& painter, const std::string& layer_name, const Tile::ID& id); + virtual void render(Painter& painter, std::shared_ptr layer_desc, const Tile::ID& id); virtual bool hasData() const; bool setImage(const std::string &data); diff --git a/include/llmr/renderer/text_bucket.hpp b/include/llmr/renderer/text_bucket.hpp index 566ed459e..4d9bf382d 100644 --- a/include/llmr/renderer/text_bucket.hpp +++ b/include/llmr/renderer/text_bucket.hpp @@ -2,12 +2,13 @@ #define LLMR_RENDERER_TEXTBUCKET #include "bucket.hpp" -#include #include #include #include #include #include +#include + #include #include #include @@ -28,9 +29,9 @@ public: TextBucket( TextVertexBuffer &vertexBuffer, TriangleElementsBuffer &triangleElementsBuffer, - const BucketTextDescription &properties, Placement &placement); + const StyleBucketText &properties, Placement &placement); - virtual void render(Painter &painter, const std::string &layer_name, const Tile::ID &id); + virtual void render(Painter &painter, std::shared_ptr layer_desc, const Tile::ID &id); virtual bool hasData() const; void addGlyphs(const PlacedGlyphs &glyphs, float placementZoom, @@ -43,7 +44,7 @@ public: void drawGlyphs(TextShader &shader); public: - const BucketTextDescription &properties; + const StyleBucketText &properties; private: TextVertexBuffer& vertexBuffer; diff --git a/include/llmr/style/applied_class_properties.hpp b/include/llmr/style/applied_class_properties.hpp new file mode 100644 index 000000000..20edadc0a --- /dev/null +++ b/include/llmr/style/applied_class_properties.hpp @@ -0,0 +1,39 @@ +#ifndef LLMR_STYLE_APPLIED_CLASS_PROPERTIES +#define LLMR_STYLE_APPLIED_CLASS_PROPERTIES + +#include +#include +#include + +#include + +namespace llmr { + +class AppliedClassProperty { +public: + AppliedClassProperty(ClassID class_id, timestamp begin, timestamp end, const PropertyValue &value); + +public: + const ClassID name; + const timestamp begin; + const timestamp end; + const PropertyValue value; +}; + + +class AppliedClassProperties { +public: + std::list properties; + +public: + // Returns thie ID of the most recent + ClassID mostRecent() const; + void add(ClassID class_id, timestamp begin, timestamp end, const PropertyValue &value); + bool hasTransitions() const; + void cleanup(timestamp now); + bool empty() const; +}; + +} + +#endif diff --git a/include/llmr/style/bucket_description.hpp b/include/llmr/style/bucket_description.hpp deleted file mode 100644 index a2386e436..000000000 --- a/include/llmr/style/bucket_description.hpp +++ /dev/null @@ -1,150 +0,0 @@ -#ifndef LLMR_STYLE_BUCKET_DESCRIPTION -#define LLMR_STYLE_BUCKET_DESCRIPTION - -#include -#include -#include - -#include -#include -#include - -namespace llmr { - -enum class BucketType { - None = 0, - Fill = 1, - Line = 2, - Icon = 3, - Text = 4, - Raster = 5 -}; - -enum class CapType { - None = 0, - Round = 1, - Butt = 2, - Square = 3 -}; - -enum class JoinType { - None = 0, - Miter = 1, - Bevel = 2, - Round = 3 -}; - -enum class TextPathType { - Horizontal = 0, - Curve = 1 -}; - - -inline BucketType bucketType(const std::string& type) { - if (type == "fill") return BucketType::Fill; - else if (type == "line") return BucketType::Line; - else if (type == "point") return BucketType::Icon; - else if (type == "text") return BucketType::Text; - else if (type == "raster") return BucketType::Raster; - else return BucketType::None; -} - -inline CapType capType(const std::string& cap) { - if (cap == "round") return CapType::Round; - else if (cap == "butt") return CapType::Butt; - else if (cap == "square") return CapType::Square; - else return CapType::None; -} - - -inline JoinType joinType(const std::string& join) { - if (join == "miter") return JoinType::Miter; - else if (join == "bevel") return JoinType::Bevel; - else if (join == "round") return JoinType::Round; - else return JoinType::None; -} - -inline TextPathType textPathType(const std::string& path) { - if (path == "horizontal") return TextPathType::Horizontal; - else if (path == "curve") return TextPathType::Curve; - else return TextPathType::Horizontal; -}; - -inline float alignmentType(const std::string& alignment) { - if (alignment == "right") return 1.0f; - else if (alignment == "left") return 0.0f; - else return 0.5; -}; - -inline float verticalAlignmentType(const std::string& alignment) { - if (alignment == "bottom") return 1.0f; - else if (alignment == "top") return 0.0f; - else return 0.5; -}; - -class BucketFillDescription { -public: -}; - -class BucketLineDescription { -public: - CapType cap = CapType::None; - JoinType join = JoinType::None; - float miter_limit = 2.0f; - float round_limit = 1.0f; -}; - -class BucketIconDescription { -public: - uint16_t size = 16; - vec2 translate {0, 0}; - std::string icon; -}; - -class BucketTextDescription { -public: - std::string field; - TextPathType path = TextPathType::Horizontal; - std::string font; - float max_size = 16.0f; - float max_width = 15.0f * 24; - float line_height = 1.2f * 24; - float letter_spacing = 0.0f; - float alignment = 0.5f; - float vertical_alignment = 0.5; - vec2 translate {0, 0}; - float max_angle_delta = M_PI; - float min_distance = 250.0f; - float rotate = 0.0f; // what is this? - float padding = 2.0f; - bool always_visible = false; -}; - -class BucketRasterDescription { -public: -}; - -typedef util::variant BucketRenderDescription; - -class BucketDescription { -public: - BucketType feature_type = BucketType::None; - BucketType type = BucketType::None; - - // Specify what data to pull into this bucket - std::string source_name; - std::string source_layer; - - PropertyFilterExpression filter = std::true_type(); - - // Specifies how the geometry for this bucket should be created - BucketRenderDescription render; -}; - -std::ostream& operator<<(std::ostream&, const BucketDescription& bucket); -std::ostream& operator<<(std::ostream&, BucketType type); - -} - -#endif diff --git a/include/llmr/style/class_description.hpp b/include/llmr/style/class_description.hpp deleted file mode 100644 index 6bd2a03c1..000000000 --- a/include/llmr/style/class_description.hpp +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef LLMR_STYLE_CLASS_DESCRIPTION -#define LLMR_STYLE_CLASS_DESCRIPTION - -#include -#include -#include "properties.hpp" - -namespace llmr { - -class ClassDescription { -public: - inline const ClassProperties &operator[](const std::string &name) const { - auto it = styles.find(name); - if (it != styles.end()) { - return it->second; - } else { - return defaultProperties; - } - } - - void addClass(const std::string &name, ClassProperties &&properties); - - inline std::unordered_map::const_iterator begin() const { - return styles.begin(); - } - - inline std::unordered_map::const_iterator end() const { - return styles.end(); - } - -private: - std::unordered_map styles; - static const ClassProperties defaultProperties; -}; - - -} - -#endif diff --git a/include/llmr/style/class_dictionary.hpp b/include/llmr/style/class_dictionary.hpp new file mode 100644 index 000000000..772eb9c70 --- /dev/null +++ b/include/llmr/style/class_dictionary.hpp @@ -0,0 +1,32 @@ +#ifndef LLMR_STYLE_CLASS_DICTIONARY +#define LLMR_STYLE_CLASS_DICTIONARY + +#include +#include +#include + +namespace llmr { + +enum class ClassID : uint32_t { + Fallback = 0, // These values are from the fallback properties + Default = 1, // These values are from the default style for a layer + Named = 2 // These values (and all subsequent IDs) are from a named style from the layer +}; + +class ClassDictionary { +public: + // Returns an ID for a class name. If the class name does not yet have an ID, one is + // auto-generated and stored for future reference. + static ClassID Lookup(const std::string &class_name); + + // Returns either Fallback, Default or Named, depending on the type of the class id. + static ClassID Normalize(ClassID id); + +private: + static std::unordered_map store; + static uint32_t offset; +}; + +} + +#endif diff --git a/include/llmr/style/class_properties.hpp b/include/llmr/style/class_properties.hpp new file mode 100644 index 000000000..55d6aa2cc --- /dev/null +++ b/include/llmr/style/class_properties.hpp @@ -0,0 +1,43 @@ +#ifndef LLMR_STYLE_CLASS_PROPERTIES +#define LLMR_STYLE_CLASS_PROPERTIES + +#include +#include +#include + +#include + +namespace llmr { + +class ClassProperties { +public: + inline ClassProperties() {} + inline ClassProperties(ClassProperties &&properties) + : properties(std::move(properties.properties)) {} + + inline void set(PropertyKey key, const PropertyValue &value) { + properties.emplace(key, value); + } + + inline void set(PropertyKey key, const PropertyTransition &transition) { + transitions.emplace(key, transition); + } + + const PropertyTransition &getTransition(PropertyKey key, const PropertyTransition &defaultTransition) const; + + // Route-through iterable interface so that you can iterate on the object as is. + inline std::map::const_iterator begin() const { + return properties.begin(); + } + inline std::map::const_iterator end() const { + return properties.end(); + } + +public: + std::map properties; + std::map transitions; +}; + +} + +#endif diff --git a/include/llmr/style/filter_expression.hpp b/include/llmr/style/filter_expression.hpp new file mode 100644 index 000000000..696aa04ae --- /dev/null +++ b/include/llmr/style/filter_expression.hpp @@ -0,0 +1,117 @@ +#ifndef LLMR_STYLE_FILTER_EXPRESSION +#define LLMR_STYLE_FILTER_EXPRESSION + +#include +#include + +#include +#include +#include +#include + +namespace llmr { + +class VectorTileTagExtractor; + +class FilterComparison { +public: + enum class Operator : uint8_t { + Equal, + NotEqual, + Greater, + GreaterEqual, + Less, + LessEqual, + In, + NotIn + }; + + class Instance { + public: + Instance(Operator op, std::forward_list &&values) + : op(op), values(values) {} + + bool compare(const Value &property_value) const; + bool compare(const std::forward_list &property_values) const; + + private: + template inline bool includes(const Value &property_value, const Comparer &comparer) const; + template inline bool compare(const Value &property_value, const Comparer &comparer) const; + template inline bool all(const std::forward_list &property_values, const Comparer &comparer) const; + + private: + Operator op = Operator::Equal; + std::forward_list values; + + friend std::ostream& operator <<(std::ostream &, const Instance &); + }; + +public: + FilterComparison(const std::string &field) : field(field) {}; + + const std::string &getField() const; + inline bool compare(const VectorTileTagExtractor &extractor) const; + + template + inline void add(Args&& ...args) { + instances.emplace_front(::std::forward(args)...); + } + +private: + std::string field; + std::forward_list instances; + + friend std::ostream& operator <<(std::ostream &, const FilterComparison &); +}; + +std::ostream& operator <<(std::ostream &s, const FilterComparison &comparison); +std::ostream& operator <<(std::ostream &s, const FilterComparison::Instance &instance); + + +FilterComparison::Operator parseFilterComparisonOperator(const std::string &op); + + +class FilterExpression { +public: + typedef util::recursive_wrapper Wrapper; + + enum class Operator : uint8_t { + And, + Or, + Xor, + Nor + }; + + enum class GeometryType : uint8_t { + Any, + Point, + Line, + Polygon + }; + +public: + FilterExpression() = default; + FilterExpression(Operator op) : op(op) {}; + + bool empty() const; + + bool compare(const VectorTileTagExtractor &extractor) const; + void add(const FilterComparison &comparison); + void add(const FilterExpression &expression); + void setGeometryType(GeometryType g); + +private: + Operator op = Operator::And; + GeometryType type = GeometryType::Any; + std::forward_list comparisons; + std::forward_list expressions; + + friend std::ostream& operator <<(std::ostream &, const FilterExpression &); +}; + +std::ostream& operator <<(std::ostream &s, const FilterExpression &expression); + +FilterExpression::GeometryType parseGeometryType(const std::string &geometry); +} + +#endif diff --git a/include/llmr/style/function_properties.hpp b/include/llmr/style/function_properties.hpp new file mode 100644 index 000000000..75714d119 --- /dev/null +++ b/include/llmr/style/function_properties.hpp @@ -0,0 +1,79 @@ +#ifndef LLMR_STYLE_FUNCTION_PROPERTIES +#define LLMR_STYLE_FUNCTION_PROPERTIES + +#include + +#include + +namespace llmr { + +template +struct ConstantFunction { + inline ConstantFunction(const T &value) : value(value) {} + inline T evaluate(float) const { return value; } + +private: + const T value; +}; + +template +struct LinearFunction { + inline LinearFunction(const T &value, float z_base, float slope, const T &min, const T &max) + : value(value), min(min), max(max), z_base(z_base), slope(slope) {} + T evaluate(float z) const; + +private: + const T value, min, max; + const float z_base, slope; +}; + +template +struct ExponentialFunction { + inline ExponentialFunction(const T &value, float z_base, float slope, const T &min, + const T &max) + : value(value), min(min), max(max), z_base(z_base), slope(slope) {} + T evaluate(float z) const; + +private: + const T value, min, max; + const float z_base, slope; +}; + +template +struct StopsFunction { + inline StopsFunction(const std::vector> &values) : values(values) {} + T evaluate(float z) const; + +private: + const std::vector> values; +}; + +template +using Function = util::variant< + std::false_type, + ConstantFunction, + LinearFunction, + ExponentialFunction, + StopsFunction +>; + +template +struct FunctionEvaluator { + typedef T result_type; + inline FunctionEvaluator(float z) : z(z) {} + + inline result_type operator()(const std::false_type &) { + return result_type(); + } + + template