From 0e378867c1ee88a9a146d99cf8f1118474475ac4 Mon Sep 17 00:00:00 2001 From: don philipe Date: Sun, 31 Mar 2024 20:25:18 +0200 Subject: [PATCH] Add code and style for basic map display --- README.md | 35 + mapstyles/spacedon.json | 1849 ++++++++ pom.xml | 81 + sprites/arrow-right.svg | 38 + sprites/bench.svg | 62 + sprites/cliff.svg | 30 + sprites/first-aid.svg | 60 + sprites/hospital.svg | 60 + sprites/leaf_tree.svg | 44 + sprites/meadow.svg | 4461 ++++++++++++++++++ sprites/peak.svg | 23 + sprites/saddle.svg | 82 + sprites/shelter.svg | 199 + src/main/java/de/spacedon/MyServlet.java | 18 + src/main/java/de/spacedon/PilgrimServer.java | 36 + src/main/webapp/index.html | 85 + src/main/webapp/lib.js | 7 + src/main/webapp/spacedon.json | 1849 ++++++++ start.sh | 5 + 19 files changed, 9024 insertions(+) create mode 100644 README.md create mode 100644 mapstyles/spacedon.json create mode 100644 pom.xml create mode 100644 sprites/arrow-right.svg create mode 100644 sprites/bench.svg create mode 100644 sprites/cliff.svg create mode 100644 sprites/first-aid.svg create mode 100644 sprites/hospital.svg create mode 100644 sprites/leaf_tree.svg create mode 100644 sprites/meadow.svg create mode 100644 sprites/peak.svg create mode 100644 sprites/saddle.svg create mode 100644 sprites/shelter.svg create mode 100644 src/main/java/de/spacedon/MyServlet.java create mode 100644 src/main/java/de/spacedon/PilgrimServer.java create mode 100644 src/main/webapp/index.html create mode 100644 src/main/webapp/lib.js create mode 100644 src/main/webapp/spacedon.json create mode 100755 start.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..e130752 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# How it works/features + +- vector tileserver (martin) delivers tiles + - martin needs postgis + - needs a job which fills database with OSM data + - layers need to be defined +- style for tiles (via maputnk) +- maplibre framework brings tiles and style together and draws on website +- map shows various outdoor relevant features (clickable) +- routing requests will be forwarded to (local) graphhopper + - graphhopper needs osm pbf file +- responses from graphhopper will be drawn on map via maplibre + +## Structure + +- maputnik to edit map style(s) +- postgresql database to hold osm data + - regular imports via osm2pgsql tool from pbf download +- vector tileserver (marting) to deliver vector tiles with data from db +- graphhopper with api to deliver routing data + - regular imports from pbf download +- pilgrim to glue tiles and routing together + - asks tileserver via maplibre-gl-js (https://github.com/maplibre/maplibre-gl-js/) for tiles (map.pilgrim.home.spacedon.de) + - asks graphhopper api via api client (https://github.com/graphhopper/directions-api-js-client) for routing (routing.pilgrim.home.spacedon.de) + + +# Glyphs + +Roboto font (Apache Licence) + +1. Get fonts from https://github.com/openmaptiles/fonts +2. package fonts to PBF with `npm install` followed by `node ./generate.js` +3. copy Roboto glyphs from `_output` directory to desired place where it can be accessed from map lib + +Alternative repo https://github.com/orangemug/font-glyphs/ diff --git a/mapstyles/spacedon.json b/mapstyles/spacedon.json new file mode 100644 index 0000000..e65c8bb --- /dev/null +++ b/mapstyles/spacedon.json @@ -0,0 +1,1849 @@ +{ + "version": 8, + "name": "spacedon", + "metadata": {"maputnik:renderer": "mbgljs"}, + "sources": { + "polygons": { + "type": "vector", + "url": "http://ceres:3000/planet_osm_polygon" + }, + "lines": {"type": "vector", "url": "http://ceres:3000/planet_osm_line"}, + "points": {"type": "vector", "url": "http://ceres:3000/planet_osm_point"}, + "roads": {"type": "vector", "url": "http://ceres:3000/planet_osm_roads"} + }, + "sprite": "http://ceres:3000/sprite/sprites", + "glyphs": "https://openmap.lt/glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "layout": {"visibility": "visible"}, + "paint": {"background-color": "#eeeeee"} + }, + { + "id": "natural-mountain_range", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 6, + "filter": ["all", ["==", "natural", "mountain_range"]], + "paint": {"fill-color": "rgba(197, 197, 197, 1)"} + }, + { + "id": "natural-rock", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 6, + "filter": ["all", ["==", "natural", "bare_rock"]], + "paint": {"fill-color": "rgba(147, 146, 146, 1)"} + }, + { + "id": "natural-scrub", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 6, + "filter": ["all", ["in", "natural", "scrub"]], + "layout": {"visibility": "visible"}, + "paint": {"fill-color": "rgba(145, 153, 83, 1)"} + }, + { + "id": "natural-wood", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 6, + "filter": ["all", ["==", "natural", "wood"]], + "paint": {"fill-color": "rgba(151, 172, 125, 1)"} + }, + { + "id": "landuse-forest", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 6, + "filter": ["all", ["in", "landuse", "forest"]], + "layout": {"visibility": "visible"}, + "paint": {"fill-color": "rgba(183, 215, 136, 1)"} + }, + { + "id": "landuse-farmland", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 6, + "filter": ["all", ["in", "landuse", "farmland"]], + "layout": {"visibility": "visible"}, + "paint": {"fill-color": "rgba(227, 220, 171, 1)"} + }, + { + "id": "landuse-orchard-sym", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 7, + "filter": ["all", ["in", "landuse", "orchard"]], + "paint": {"fill-pattern": "orchard"} + }, + { + "id": "landuse-cemetery", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 7, + "filter": ["all", ["in", "landuse", "cemetery"]], + "paint": {"fill-pattern": "cemetery"} + }, + { + "id": "landuse-meadow", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 6, + "filter": ["all", ["in", "landuse", "meadow", "grass"]], + "paint": { + "fill-pattern": "meadow", + "fill-translate-anchor": "map", + "fill-opacity": 1 + } + }, + { + "id": "landuse-sand", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 12, + "filter": ["all", ["in", "landuse", "sand"]], + "paint": {"fill-color": "#fffacd", "fill-opacity": 1} + }, + { + "id": "landuse-marsh", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 6, + "filter": ["all", ["in", "landuse", "marsh"]], + "paint": {"fill-pattern": "marsh"} + }, + { + "id": "landuse-swamp", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 7, + "filter": ["all", ["in", "landuse", "swamp"]], + "paint": {"fill-pattern": "swamp"} + }, + { + "id": "landuse-residential", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 6, + "filter": [ + "all", + ["in", "landuse", "residential", "allotments", "commercial"] + ], + "layout": {"visibility": "visible"}, + "paint": { + "fill-color": { + "stops": [ + [6, "rgba(221, 221, 221, 1)"], + [10, "rgba(221, 221, 221, 1)"] + ] + }, + "fill-outline-color": "rgba(200, 200, 200, 1)" + } + }, + { + "id": "landuse-industrial", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 10, + "filter": ["all", ["in", "landuse", "industrial", "farmyard"]], + "paint": { + "fill-color": "rgba(210, 190, 210, 1)", + "fill-outline-color": "rgba(150, 125, 160, 1)" + } + }, + { + "id": "landuse-reedbed", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 6, + "filter": ["all", ["==", "landuse", "reedbed"]], + "paint": {"fill-pattern": "reedbed"} + }, + { + "id": "landuse-aeroway", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 12, + "filter": ["all", ["in", "aeroway", "runway", "apron"]], + "paint": {"fill-color": "rgba(96, 96, 96, 1)"} + }, + { + "id": "landuse-quarry", + "type": "line", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 6, + "filter": ["all", ["==", "landuse", "quarry"]], + "paint": { + "line-pattern": "cliff", + "line-width": 5, + "line-opacity": {"stops": [[11, 0.2], [15, 1]]}, + "line-color": "#333333" + } + }, + { + "id": "leisure-park", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "filter": ["all", ["==", "leisure", "park"]], + "paint": {"fill-color": "#cbe3a9"} + }, + { + "id": "casing-motorway-tunnel", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "filter": [ + "all", + ["in", "highway", "motorway", "motorway_link", "trunk", "trunk_link"], + ["has", "tunnel"] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "rgba(187, 187, 187, 0.3)", + "line-width": {"base": 1.55, "stops": [[5, 2.3], [20, 40]]} + } + }, + { + "id": "casing-secondary-tunnel", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 7, + "filter": [ + "all", + ["in", "highway", "secondary", "secondary_link"], + ["has", "tunnel"] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "#111111", + "line-opacity": 0.3, + "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 40]]} + } + }, + { + "id": "casing-primary-tunnel", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "filter": [ + "all", + ["in", "highway", "primary", "primary_link"], + ["has", "tunnel"] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "#111111", + "line-opacity": 0.3, + "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 40]]} + } + }, + { + "id": "casing-tertiary-tunnel", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 10, + "filter": [ + "all", + ["in", "highway", "tertiary", "tertiary_link"], + ["has", "tunnel"] + ], + "layout": {"line-cap": "butt", "line-join": "round"}, + "paint": { + "line-color": "#111111", + "line-opacity": 0.5, + "line-width": {"base": 1.55, "stops": [[5, 2], [20, 25]]} + } + }, + { + "id": "road-motorway-tunnel", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "filter": [ + "all", + ["in", "highway", "motorway", "motorway_link", "trunk", "trunk_link"], + ["has", "tunnel"] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "#882a30", + "line-gap-width": 1.5, + "line-dasharray": [3, 2], + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 8]]} + } + }, + { + "id": "road-primary-tunnel", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "filter": [ + "all", + ["in", "highway", "primary", "primary_link"], + ["has", "tunnel"] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "#882a30", + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 8]]}, + "line-gap-width": 1.5, + "line-dasharray": [3, 2] + } + }, + { + "id": "road-secondary-tunnel", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 7, + "filter": [ + "all", + ["in", "highway", "secondary", "secondary_link"], + ["has", "tunnel"] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "#d7b7ad", + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 8]]}, + "line-gap-width": 1.5, + "line-dasharray": [3, 2] + } + }, + { + "id": "road-tertiary-paved-tunnel", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 10, + "filter": [ + "all", + ["in", "highway", "tertiary", "tertiary_link"], + ["!=", "surface", "unpaved"], + ["has", "tunnel"] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "#d7b7ad", + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 8]]}, + "line-gap-width": 1.5, + "line-dasharray": [3, 2] + } + }, + { + "id": "road-tertiary-unpaved-tunnel", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 10, + "filter": [ + "all", + ["in", "highway", "tertiary", "tertiary_link"], + ["==", "surface", "unpaved"], + ["has", "tunnel"] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "rgba(230, 220, 0, 1)", + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 8]]}, + "line-gap-width": 1.5, + "line-dasharray": [3, 2] + } + }, + { + "id": "waterway-other", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 14, + "filter": [ + "all", + ["==", "waterway", "ditch"], + ["==", "$type", "LineString"] + ], + "layout": {"visibility": "visible"}, + "paint": { + "line-color": "#49a5dd", + "line-width": {"base": 1.2, "stops": [[14, 1], [18, 3]]} + } + }, + { + "id": "waterway-river", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 6, + "filter": [ + "all", + ["==", "waterway", "river"], + ["==", "$type", "LineString"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#49a5dd", + "line-width": {"base": 1.2, "stops": [[8, 0.75], [20, 15]]} + } + }, + { + "id": "waterway-stream-etc", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 11, + "filter": ["all", ["in", "waterway", "stream", "canal"]], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "#49a5dd", + "line-width": { + "base": 1.4, + "stops": [[10, 0.5], [14, 1], [15, 3], [18, 10]] + } + } + }, + { + "id": "waterway-stream-etc-fill", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 15, + "filter": ["all", ["in", "waterway", "stream", "canal"]], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "#bed7f0", + "line-width": {"base": 1.4, "stops": [[15, 1], [18, 8]]} + } + }, + { + "id": "water-polygon-casing", + "type": "line", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 9, + "filter": ["all", ["==", "natural", "water"]], + "layout": {"visibility": "visible"}, + "paint": {"line-color": "#49a5dd", "line-width": 2} + }, + { + "id": "water-polygon", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 0, + "filter": ["all", ["==", "natural", "water"]], + "layout": {"visibility": "visible"}, + "paint": {"fill-antialias": true, "fill-color": "#bed7f0"} + }, + { + "id": "waterway-direction", + "type": "symbol", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 15, + "filter": ["all", ["in", "waterway", "stream", "canal", "river"]], + "layout": { + "symbol-placement": "line-center", + "icon-image": "arrow-right", + "icon-size": 0.05, + "icon-anchor": "top", + "icon-offset": [0, -100] + } + }, + { + "id": "buildings", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 11, + "filter": ["all", ["has", "building"], ["!=", "building", "ruins"]], + "layout": {"visibility": "visible"}, + "paint": { + "fill-color": { + "stops": [[11, "rgba(230, 230, 230, 1)"], [13, "#444444"]] + } + } + }, + { + "id": "buildings-ruins", + "type": "line", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 12, + "filter": ["all", ["==", "building", "ruins"]], + "layout": {"visibility": "visible"}, + "paint": { + "line-color": "#444444", + "line-width": {"stops": [[14, 0.5], [16, 2]]} + } + }, + { + "id": "detail-stadium", + "type": "line", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 13, + "filter": ["all", ["in", "leisure", "stadium", "pitch"]], + "paint": { + "line-width": 0.5, + "line-dasharray": [12, 6], + "line-translate": [0, 0], + "line-offset": 3 + } + }, + { + "id": "detail-cutline", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 13, + "filter": ["all", ["==", "man_made", "cutline"]], + "layout": {"visibility": "visible"}, + "paint": {"line-width": 0.5, "line-dasharray": [12, 6]} + }, + { + "id": "detail-fence", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 14, + "filter": ["all", ["==", "barrier", "fence"]], + "paint": {"line-width": 0.5} + }, + { + "id": "detail-cliff", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 14, + "filter": ["all", ["==", "natural", "cliff"]], + "layout": {"visibility": "visible"}, + "paint": { + "line-pattern": "cliff", + "line-width": {"stops": [[14, 3], [18, 6]]} + } + }, + { + "id": "boundary-national-park-outline", + "type": "line", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "filter": ["all", ["==", "boundary", "national_park"]], + "paint": { + "line-color": "#85c4a5", + "line-dasharray": [2, 4], + "line-width": {"stops": [[8, 1], [18, 3]]} + } + }, + { + "id": "boundary-national-park", + "type": "fill", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 7, + "filter": ["all", ["==", "boundary", "national_park"]], + "paint": { + "fill-color": { + "stops": [[7, "rgba(34, 183, 44, 0.2)"], [12, "rgba(34, 183, 44, 0)"]] + } + } + }, + { + "id": "boundary-country", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "filter": [ + "all", + ["==", "boundary", "administrative"], + ["in", "admin_level", 1, 2, 3, 4, 5, 6] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#eb9dcb", + "line-translate-anchor": "map", + "line-width": {"base": 2, "stops": [[1, 1], [7, 3]]} + } + }, + { + "id": "casing-unclassified", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 11, + "filter": ["all", ["==", "highway", "unclassified"]], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "rgba(112, 112, 112, 1)", + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 30]]} + } + }, + { + "id": "casing-tertiary-paved", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 8, + "filter": [ + "all", + ["in", "highway", "tertiary", "tertiary_link"], + ["!=", "surface", "unpaved"], + ["!has", "tunnel"], + ["!has", "bridge"] + ], + "layout": {"line-join": "round", "line-cap": "round"}, + "paint": { + "line-width": {"base": 1.55, "stops": [[5, 2], [20, 25]]}, + "line-color": "#111111" + } + }, + { + "id": "casing-tertiary-unpaved", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 10, + "filter": [ + "all", + ["in", "highway", "tertiary", "tertiary_link"], + ["==", "surface", "unpaved"], + ["!has", "tunnel"], + ["!has", "bridge"] + ], + "layout": {"line-join": "round", "line-cap": "round"}, + "paint": { + "line-color": "rgba(100, 100, 0, 1)", + "line-width": {"base": 1.55, "stops": [[5, 2], [20, 25]]} + } + }, + { + "id": "casing-secondary", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 7, + "filter": [ + "all", + ["in", "highway", "secondary", "secondary_link"], + ["!has", "tunnel"], + ["!has", "bridge"] + ], + "layout": {"line-join": "round", "line-cap": "round"}, + "paint": { + "line-color": "#111111", + "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 40]]} + } + }, + { + "id": "casing-primary", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "filter": [ + "all", + ["in", "highway", "primary", "primary_link"], + ["!has", "tunnel"], + ["!has", "bridge"] + ], + "layout": {"line-join": "round", "line-cap": "round"}, + "paint": { + "line-color": "#111111", + "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 40]]} + } + }, + { + "id": "casing-motorway", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "filter": [ + "all", + ["in", "highway", "motorway", "motorway_link", "trunk", "trunk_link"], + ["!has", "tunnel"], + ["!has", "bridge"] + ], + "layout": {"line-join": "round", "line-cap": "round"}, + "paint": { + "line-color": "#111111", + "line-width": {"base": 1.55, "stops": [[5, 2.5], [20, 42]]} + } + }, + { + "id": "casing-service", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 13, + "filter": ["all", ["in", "highway", "service"]], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "rgba(112, 112, 112, 1)", + "line-width": {"base": 1.55, "stops": [[5, 0.7], [20, 25]]} + } + }, + { + "id": "casing-road", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 13, + "filter": [ + "all", + ["in", "highway", "residential", "living_street", "pedestrian"] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "rgba(112, 112, 112, 1)", + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 30]]} + } + }, + { + "id": "aeroway-runway", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "filter": ["all", ["in", "aeroway", "runway"]], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "rgba(220, 220, 220, 1)", + "line-width": {"base": 1.55, "stops": [[10, 1], [18, 10]]}, + "line-dasharray": [2, 6] + } + }, + { + "id": "aeroway-apron", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "filter": ["all", ["in", "aeroway", "taxiway", "parking_position"]], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": {"line-color": "rgba(120, 120, 120, 1)"} + }, + { + "id": "road-steps", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 12, + "filter": ["all", ["in", "highway", "steps"]], + "layout": { + "line-cap": "square", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-width": {"base": 1.8, "stops": [[14, 1], [18, 9]]}, + "line-color": "#5d6765", + "line-dasharray": [0.2, 0.4] + } + }, + { + "id": "road-path", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 12, + "filter": ["all", ["in", "highway", "path", "footway", "cycleway"]], + "layout": {"line-cap": "square", "line-join": "round"}, + "paint": { + "line-width": {"base": 1.8, "stops": [[14, 1], [18, 2]]}, + "line-color": "#5d6765", + "line-dasharray": [1, 2] + } + }, + { + "id": "road-track", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 12, + "filter": ["all", ["==", "highway", "track"], ["!has", "tracktype"]], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "#110f0d", + "line-width": {"base": 1.8, "stops": [[10, 0.3], [20, 15]]} + } + }, + { + "id": "road-track12", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 12, + "filter": [ + "all", + ["==", "highway", "track"], + ["in", "tracktype", "grade1", "grade2"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#110f0d", + "line-width": {"base": 1.8, "stops": [[10, 0.3], [20, 15]]} + } + }, + { + "id": "road-track3", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 12, + "filter": [ + "all", + ["==", "highway", "track"], + ["in", "tracktype", "grade3"] + ], + "layout": { + "line-cap": "butt", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#110f0d", + "line-width": {"base": 1.8, "stops": [[10, 0.3], [20, 15]]}, + "line-dasharray": [30, 7] + } + }, + { + "id": "road-track4", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 12, + "filter": [ + "all", + ["==", "highway", "track"], + ["in", "tracktype", "grade4"] + ], + "layout": { + "line-cap": "butt", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#110f0d", + "line-width": {"base": 1.8, "stops": [[10, 0.3], [20, 15]]}, + "line-dasharray": [15, 7] + } + }, + { + "id": "road-track5", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 12, + "filter": [ + "all", + ["==", "highway", "track"], + ["in", "tracktype", "grade5"] + ], + "layout": { + "line-cap": "butt", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#110f0d", + "line-width": {"base": 1.8, "stops": [[10, 0.3], [20, 15]]}, + "line-dasharray": [5, 7] + } + }, + { + "id": "road-service", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 12, + "filter": ["all", ["==", "highway", "service"]], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "rgba(238, 229, 221, 0.9)", + "line-width": {"base": 1.55, "stops": [[8, 0.25], [20, 20]]} + } + }, + { + "id": "road-residential-small", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 8, + "maxzoom": 13, + "filter": [ + "all", + ["in", "highway", "residential", "unclassified", "living_street"] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "rgba(238, 229, 221, 0.9)", + "line-width": {"base": 1.55, "stops": [[4, 0.25], [20, 30]]} + } + }, + { + "id": "road-residential", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 13, + "maxzoom": 24, + "filter": [ + "all", + ["in", "highway", "residential", "living_street", "pedestrian"] + ], + "layout": {"line-cap": "butt", "line-join": "round"}, + "paint": { + "line-width": {"base": 1.55, "stops": [[4, 0.25], [20, 25]]}, + "line-color": "rgba(238, 229, 221, 0.9)" + } + }, + { + "id": "road-unclassified", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 11, + "maxzoom": 24, + "filter": ["all", ["in", "highway", "unclassified"]], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-width": {"base": 1.55, "stops": [[4, 0.25], [20, 25]]}, + "line-color": "#fffbb3" + } + }, + { + "id": "road-tertiary-unpaved", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 10, + "maxzoom": 24, + "filter": [ + "all", + ["in", "highway", "tertiary", "tertiary_link"], + ["!has", "tunnel"], + ["!has", "bridge"], + ["==", "surface", "unpaved"] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 20]]}, + "line-color": "rgba(230, 220, 0, 1)" + } + }, + { + "id": "road-tertiary-paved", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 8, + "maxzoom": 24, + "filter": [ + "all", + ["in", "highway", "tertiary", "tertiary_link"], + ["!has", "tunnel"], + ["!has", "bridge"], + ["!=", "surface", "unpaved"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 20]]}, + "line-color": "#d7b7ad" + } + }, + { + "id": "road-secondary", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 7, + "maxzoom": 24, + "filter": [ + "all", + ["in", "highway", "secondary", "secondary_link"], + ["!has", "tunnel"], + ["!has", "bridge"] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 34]]}, + "line-color": "#d7b7ad" + } + }, + { + "id": "road-primary", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 0, + "maxzoom": 24, + "filter": [ + "all", + ["in", "highway", "primary", "primary_link"], + ["!has", "tunnel"], + ["!has", "bridge"] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 34]]}, + "line-color": "#882a30" + } + }, + { + "id": "road-motorway", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 0, + "maxzoom": 24, + "filter": [ + "all", + ["in", "highway", "motorway", "trunk", "motorway_link", "trunk_link"], + ["!has", "tunnel"], + ["!has", "bridge"] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-width": {"base": 1.55, "stops": [[5, 2], [20, 34]]}, + "line-color": "#882a30" + } + }, + { + "id": "railway-minor-casing", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 9, + "filter": [ + "all", + ["in", "railway", "rail", "miniature"], + ["in", "service", "yard", "spur", "siding", "crossover"] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "rgba(100, 100, 100, 1)", + "line-width": {"base": 1.8, "stops": [[9, 1], [20, 7]]}, + "line-dasharray": [2, 0] + } + }, + { + "id": "railway-minor", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 9, + "filter": [ + "all", + ["in", "railway", "rail", "miniature"], + ["in", "service", "yard", "spur", "siding", "crossover"] + ], + "layout": {"line-cap": "butt", "line-join": "bevel"}, + "paint": { + "line-color": "rgba(255, 255, 255, 1)", + "line-width": {"base": 1.8, "stops": [[9, 0.8], [20, 6]]}, + "line-dasharray": [3, 4] + } + }, + { + "id": "railway-casing", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 9, + "filter": [ + "all", + ["==", "railway", "rail"], + ["!in", "service", "yard", "spur", "siding", "crossover"] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "rgba(100, 100, 100, 1)", + "line-width": {"base": 1.8, "stops": [[9, 2], [20, 15]]}, + "line-dasharray": [2, 0] + } + }, + { + "id": "railway-rail", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 9, + "filter": [ + "all", + ["==", "railway", "rail"], + ["!in", "service", "yard", "spur", "siding", "crossover"] + ], + "layout": {"line-cap": "butt", "line-join": "bevel"}, + "paint": { + "line-color": "rgba(255, 255, 255, 1)", + "line-width": {"base": 1.8, "stops": [[9, 1.5], [20, 12]]}, + "line-dasharray": [3, 4] + } + }, + { + "id": "railway-halt", + "type": "circle", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 11, + "filter": [ + "all", + ["in", "railway", "halt", "station"], + ["==", "public_transport", "station"] + ], + "paint": { + "circle-color": "rgb(240, 20, 20)", + "circle-stroke-width": 1, + "circle-radius": {"stops": [[11, 3], [12, 5]]} + } + }, + { + "id": "casing-motorway-bridge", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "filter": [ + "all", + ["in", "highway", "motorway", "motorway_link", "trunk", "trunk_link"], + ["has", "bridge"] + ], + "layout": {"line-join": "round", "visibility": "visible"}, + "paint": { + "line-color": "#111111", + "line-width": {"base": 1.55, "stops": [[5, 2.3], [20, 42]]} + } + }, + { + "id": "casing-primary-bridge", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "filter": [ + "all", + ["in", "highway", "primary", "primary_link"], + ["has", "bridge"] + ], + "layout": {"line-join": "round", "visibility": "visible"}, + "paint": { + "line-color": "#111111", + "line-opacity": 0.3, + "line-width": {"base": 1.55, "stops": [[5, 2.5], [20, 40]]} + } + }, + { + "id": "casing-secondary-bridge", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 7, + "filter": [ + "all", + ["in", "highway", "secondary", "secondary_link"], + ["has", "bridge"] + ], + "layout": {"line-join": "round", "visibility": "visible"}, + "paint": { + "line-color": "#111111", + "line-opacity": 0.3, + "line-width": {"base": 1.55, "stops": [[5, 2.5], [20, 40]]} + } + }, + { + "id": "casing-tertiary-bridge", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 8, + "filter": [ + "all", + ["in", "highway", "tertiary", "tertiary_link"], + ["has", "bridge"] + ], + "layout": {"line-cap": "butt", "line-join": "round"}, + "paint": { + "line-color": "#111111", + "line-opacity": 0.5, + "line-width": {"base": 1.55, "stops": [[5, 2], [20, 25]]} + } + }, + { + "id": "road-motorway-bridge", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "filter": [ + "all", + ["in", "highway", "motorway", "motorway_link", "trunk", "trunk_link"], + ["has", "bridge"] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-dasharray": [], + "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 25]]}, + "line-color": "rgba(136, 42, 48, 1)" + } + }, + { + "id": "road-primary-bridge", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "filter": [ + "all", + ["in", "highway", "primary", "primary_link"], + ["has", "bridge"] + ], + "layout": { + "line-join": "round", + "line-cap": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#882a30", + "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 32]]}, + "line-dasharray": [] + } + }, + { + "id": "road-secondary-bridge", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 7, + "filter": [ + "all", + ["in", "highway", "secondary", "secondary_link"], + ["has", "bridge"] + ], + "layout": {"line-join": "round", "visibility": "visible"}, + "paint": { + "line-color": "#d7b7ad", + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 28]]}, + "line-dasharray": [] + } + }, + { + "id": "road-tertiary-paved-bridge", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 8, + "filter": [ + "all", + ["in", "highway", "tertiary", "tertiary_link"], + ["!=", "surface", "unpaved"], + ["has", "bridge"] + ], + "layout": { + "line-join": "round", + "line-cap": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#d7b7ad", + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 15]]}, + "line-dasharray": [] + } + }, + { + "id": "road-tertiary-unpaved-bridge", + "type": "line", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 8, + "filter": [ + "all", + ["in", "highway", "tertiary", "tertiary_link"], + ["==", "surface", "unpaved"], + ["has", "bridge"] + ], + "layout": {"line-join": "round", "line-cap": "round"}, + "paint": { + "line-color": "rgba(230, 220, 0, 1)", + "line-width": {"base": 1.55, "stops": [[5, 1], [20, 15]]}, + "line-dasharray": [] + } + }, + { + "id": "route-biking", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 15, + "filter": ["all", ["==", "route", "biking"]], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "rgba(72, 88, 223, 0.59)", + "line-opacity": 0.75, + "line-width": 8 + } + }, + { + "id": "route-hiking", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 15, + "filter": ["all", ["==", "route", "hiking"]], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "rgba(141, 36, 119, 0.3)", + "line-opacity": 0.75, + "line-width": 8 + } + }, + { + "id": "power-line", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 14, + "filter": ["all", ["==", "route", "power"]], + "paint": {"line-color": "#666", "line-width": 0.4} + }, + { + "id": "power-pillar", + "type": "circle", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 14, + "filter": ["all", ["==", "power", "tower"]], + "paint": {"circle-color": "#666", "circle-radius": 2} + }, + { + "id": "natural-peak", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 12, + "filter": ["all", ["==", "natural", "peak"]], + "layout": { + "icon-image": "peak", + "icon-size": 0.07, + "text-font": ["Roboto Regular"], + "text-field": {"stops": [[6, "{name}"], [14, "{name} ({ele}m)"]]}, + "text-size": 12, + "text-padding": 2, + "text-anchor": "bottom", + "text-offset": [0, -0.4] + }, + "paint": { + "text-color": "#a05a2c", + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 1.5, + "text-halo-blur": 1 + } + }, + { + "id": "natural-saddle", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 13, + "filter": ["all", ["==", "natural", "saddle"]], + "layout": { + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "icon-image": "saddle", + "icon-size": 0.08, + "text-anchor": "bottom", + "text-offset": [0, -1], + "text-size": 12 + } + }, + { + "id": "natural-tree", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 15, + "filter": ["all", ["==", "natural", "tree"]], + "layout": {"icon-image": "leaf_tree", "icon-size": 0.07} + }, + { + "id": "label-park", + "type": "symbol", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 13, + "maxzoom": 24, + "filter": ["all", ["==", "leisure", "park"]], + "layout": { + "text-field": "{name}", + "text-size": 12, + "text-max-width": 9, + "text-anchor": "top", + "text-offset": [0, 0.6], + "icon-image": "park", + "text-padding": 1, + "text-font": ["Roboto Regular"], + "symbol-placement": "line-center" + }, + "paint": { + "text-color": "rgba(26, 92, 0, 1)", + "text-halo-width": 1, + "text-halo-color": "rgba(255, 255, 255, 0.7)" + } + }, + { + "id": "label-road-shield", + "type": "symbol", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 11, + "maxzoom": 24, + "filter": [ + "all", + [ + "in", + "highway", + "motorway", + "trunk", + "primary", + "secondary", + "tertiary" + ], + ["has", "ref"] + ], + "layout": { + "text-field": "{ref}", + "symbol-placement": "line", + "text-rotation-alignment": "auto", + "text-anchor": "center", + "text-size": 12, + "text-padding": 30, + "symbol-avoid-edges": false, + "text-font": ["Roboto Regular"] + }, + "paint": { + "text-halo-width": 2, + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-color": "rgba(115, 77, 13, 1)" + } + }, + { + "id": "label-road-shield-low", + "type": "symbol", + "source": "roads", + "source-layer": "planet_osm_roads", + "minzoom": 8, + "maxzoom": 11, + "filter": [ + "all", + ["in", "highway", "motorway", "trunk", "primary"], + ["has", "ref"] + ], + "layout": { + "text-field": "{ref}", + "symbol-placement": "line", + "text-rotation-alignment": "auto", + "text-anchor": "center", + "text-size": 10, + "text-padding": 30, + "symbol-avoid-edges": false, + "text-font": ["Roboto Regular"] + }, + "paint": { + "text-halo-width": 2, + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-color": "rgba(115, 77, 13, 1)" + } + }, + { + "id": "label-road", + "type": "symbol", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 12, + "filter": ["all", ["has", "highway"]], + "layout": { + "symbol-placement": "line", + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "text-size": {"stops": [[10, 8], [20, 16]]}, + "text-anchor": "bottom", + "symbol-avoid-edges": false, + "text-allow-overlap": false, + "text-justify": "center" + }, + "paint": { + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 1.5, + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 1, + "text-halo-blur": 0.5 + } + }, + { + "id": "label-water", + "type": "symbol", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 12, + "filter": ["all", ["==", "natural", "water"]], + "layout": { + "symbol-placement": "point", + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "text-size": {"stops": [[10, 8], [20, 16]]}, + "text-anchor": "bottom", + "symbol-z-order": "auto", + "symbol-avoid-edges": false, + "symbol-spacing": 250, + "text-padding": 200 + }, + "paint": { + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 1.5, + "text-color": "#49a5dd", + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 1, + "text-halo-blur": 0.5 + } + }, + { + "id": "label-river", + "type": "symbol", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 12, + "filter": ["all", ["has", "waterway"]], + "layout": { + "symbol-placement": "line", + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "text-size": {"stops": [[10, 8], [20, 16]]}, + "text-anchor": "bottom" + }, + "paint": { + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 1.5, + "text-color": "rgba(73, 165, 221, 1)", + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 1, + "text-halo-blur": 0.5 + } + }, + { + "id": "label-railway-station", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 12, + "filter": [ + "all", + ["in", "railway", "halt", "station"], + ["==", "public_transport", "station"] + ], + "layout": { + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "text-anchor": "bottom", + "text-size": {"stops": [[12, 10], [14, 16]]} + }, + "paint": { + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 1.5, + "text-halo-blur": 0.5 + } + }, + { + "id": "label-suburb", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 11, + "filter": ["all", ["in", "place", "suburb"]], + "layout": { + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "text-writing-mode": [], + "text-size": 12 + }, + "paint": { + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 2 + } + }, + { + "id": "label-hamlet", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 12, + "filter": ["all", ["in", "place", "village"]], + "layout": { + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "text-writing-mode": [], + "text-size": 10 + }, + "paint": { + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 2 + } + }, + { + "id": "label-village", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 10, + "filter": ["all", ["in", "place", "village"]], + "layout": { + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "text-writing-mode": [], + "text-size": 12 + }, + "paint": { + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 2 + } + }, + { + "id": "label-town", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 8, + "filter": ["all", ["in", "place", "town"]], + "layout": { + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "text-writing-mode": [], + "text-size": 16 + }, + "paint": { + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 2 + } + }, + { + "id": "label-city", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 7, + "filter": ["all", ["in", "place", "city"]], + "layout": { + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "text-writing-mode": [], + "text-size": 20 + }, + "paint": { + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 2 + } + }, + { + "id": "label-country", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 0, + "maxzoom": 6, + "filter": ["all", ["in", "place", "country"]], + "layout": { + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "text-writing-mode": [], + "text-size": 20 + }, + "paint": { + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 2 + } + }, + { + "id": "label-state", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 4, + "maxzoom": 7, + "filter": ["all", ["in", "place", "state"]], + "layout": { + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "text-writing-mode": [], + "text-size": 20 + }, + "paint": { + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 2 + } + }, + { + "id": "label-housenumber", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 16, + "maxzoom": 24, + "filter": ["all", ["has", "addr:housenumber"]], + "layout": { + "text-font": ["Roboto Regular"], + "text-field": "{addr:housenumber}", + "text-writing-mode": [], + "text-size": 10, + "text-padding": 15 + }, + "paint": { + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 2 + } + }, + { + "id": "label-housenumber-poly", + "type": "symbol", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 16, + "maxzoom": 24, + "filter": ["all", ["has", "addr:housenumber"]], + "layout": { + "text-font": ["Roboto Regular"], + "text-field": "{addr:housenumber}", + "text-writing-mode": [], + "text-size": 10, + "text-padding": 15 + }, + "paint": { + "text-halo-color": "rgba(222, 222, 222, 1)", + "text-halo-blur": 1, + "text-halo-width": 2 + } + }, + { + "id": "barrier-gate", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 16, + "filter": ["all", ["==", "barrier", "gate"]], + "layout": { + "text-field": "≠", + "text-font": ["Roboto Regular"], + "text-size": {"stops": [[16, 20], [24, 32]]} + } + }, + { + "id": "hiking-color", + "type": "line", + "source": "lines", + "source-layer": "planet_osm_line", + "minzoom": 8, + "filter": ["all", ["==", "route", "hiking"], ["has", "colour"]], + "layout": {"line-cap": "butt", "line-join": "bevel"}, + "paint": { + "line-color": ["get", "colour"], + "line-width": 10, + "line-opacity": 0.6 + } + }, + { + "id": "poi-bench", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 15, + "filter": ["all", ["==", "amenity", "bench"]], + "layout": {"icon-image": "bench", "text-font": [], "icon-size": 0.07} + }, + { + "id": "poi-shelter", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 14, + "filter": ["all", ["==", "amenity", "shelter"]], + "layout": {"icon-image": "shelter", "text-font": [], "icon-size": 0.07} + }, + { + "id": "poi-first-aid", + "type": "symbol", + "source": "points", + "source-layer": "planet_osm_point", + "minzoom": 15, + "filter": [ + "all", + ["in", "emergency", "first_aid", "first_aid_kit", "rescue_box"] + ], + "layout": {"icon-image": "first-aid", "text-font": [], "icon-size": 0.1} + }, + { + "id": "poi-hospital", + "type": "symbol", + "source": "polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 12, + "filter": ["all", ["==", "amenity", "hospital"]], + "layout": { + "icon-image": "hospital", + "icon-size": 0.1, + "symbol-placement": "point", + "text-font": ["Roboto Regular"], + "text-field": "{name}", + "icon-allow-overlap": false, + "text-anchor": "top", + "text-size": {"stops": [[12, 10], [16, 14]]}, + "text-line-height": 1, + "text-allow-overlap": false, + "text-offset": [0, 1], + "text-ignore-placement": false, + "icon-ignore-placement": false + }, + "paint": { + "text-color": "rgba(255, 0, 0, 1)", + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 2, + "text-halo-blur": 1 + } + } + ], + "id": "asgr00hhi", + "owner": "" +} \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..f5228e2 --- /dev/null +++ b/pom.xml @@ -0,0 +1,81 @@ + + + 4.0.0 + + de.spacedon + pilgrim + 1.0-SNAPSHOT + + + Pilgrim + + + UTF-8 + 11 + 11 + + + + + org.eclipse.jetty + jetty-server + 11.0.3 + + + org.eclipse.jetty + jetty-servlet + 11.0.3 + + + org.eclipse.jetty + apache-jsp + 11.0.3 + + + + + + + maven-assembly-plugin + + + package + + single + + + + + + + true + de.spacedon.PilgrimServer + + + + jar-with-dependencies + + + + + + + + diff --git a/sprites/arrow-right.svg b/sprites/arrow-right.svg new file mode 100644 index 0000000..36fd4fd --- /dev/null +++ b/sprites/arrow-right.svg @@ -0,0 +1,38 @@ + + + + + + + + + + diff --git a/sprites/bench.svg b/sprites/bench.svg new file mode 100644 index 0000000..85a76da --- /dev/null +++ b/sprites/bench.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + diff --git a/sprites/cliff.svg b/sprites/cliff.svg new file mode 100644 index 0000000..ed80ba3 --- /dev/null +++ b/sprites/cliff.svg @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/sprites/first-aid.svg b/sprites/first-aid.svg new file mode 100644 index 0000000..f339dd2 --- /dev/null +++ b/sprites/first-aid.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + diff --git a/sprites/hospital.svg b/sprites/hospital.svg new file mode 100644 index 0000000..89c4fb4 --- /dev/null +++ b/sprites/hospital.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + diff --git a/sprites/leaf_tree.svg b/sprites/leaf_tree.svg new file mode 100644 index 0000000..585054a --- /dev/null +++ b/sprites/leaf_tree.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + diff --git a/sprites/meadow.svg b/sprites/meadow.svg new file mode 100644 index 0000000..a4f63fd --- /dev/null +++ b/sprites/meadow.svg @@ -0,0 +1,4461 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sprites/peak.svg b/sprites/peak.svg new file mode 100644 index 0000000..c62475f --- /dev/null +++ b/sprites/peak.svg @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/sprites/saddle.svg b/sprites/saddle.svg new file mode 100644 index 0000000..3cbe9e3 --- /dev/null +++ b/sprites/saddle.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + diff --git a/sprites/shelter.svg b/sprites/shelter.svg new file mode 100644 index 0000000..2963c39 --- /dev/null +++ b/sprites/shelter.svg @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/de/spacedon/MyServlet.java b/src/main/java/de/spacedon/MyServlet.java new file mode 100644 index 0000000..1221aa6 --- /dev/null +++ b/src/main/java/de/spacedon/MyServlet.java @@ -0,0 +1,18 @@ +package de.spacedon; + +import java.io.IOException; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +public class MyServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json"); + response.setStatus(HttpServletResponse.SC_OK); + response.getWriter().println("{\"status\":\"ok\"}"); + } +} diff --git a/src/main/java/de/spacedon/PilgrimServer.java b/src/main/java/de/spacedon/PilgrimServer.java new file mode 100644 index 0000000..4efa859 --- /dev/null +++ b/src/main/java/de/spacedon/PilgrimServer.java @@ -0,0 +1,36 @@ +package de.spacedon; + +import java.io.File; + +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.servlet.DefaultServlet; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; + +public class PilgrimServer { + + /** + * Register Servlets and start Jetty server + */ + public static void main(String[] args) throws Exception { + Server server = new Server(8082); + ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); + contextHandler.setContextPath("/"); + server.setHandler(contextHandler); + + // register custom Servlet at endpoint /index + contextHandler.addServlet(new ServletHolder(new MyServlet()), "/index"); + + // register index.html + ServletHolder staticHolder = new ServletHolder(new DefaultServlet()); + staticHolder.setInitParameter("resourceBase", "src/main/webapp"); + staticHolder.setInitParameter("pathInfoOnly", "true"); + staticHolder.setInitParameter("dirAllowed", "false"); + contextHandler.addServlet(staticHolder, "/*"); + + server.start(); + server.join(); + } +} diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html new file mode 100644 index 0000000..8293dd0 --- /dev/null +++ b/src/main/webapp/index.html @@ -0,0 +1,85 @@ + + + + + Display a map + + + + + + + +
+
+ +

+        
+
+
diff --git a/src/main/webapp/lib.js b/src/main/webapp/lib.js
new file mode 100644
index 0000000..2814ae5
--- /dev/null
+++ b/src/main/webapp/lib.js
@@ -0,0 +1,7 @@
+let lib = new function () {
+    this.setStartMarker = function (coordinates) {
+    }
+    this.setMarker = function (marker, lng, lat, map) {
+        marker.setLngLat([lng, lat]).addTo(map);
+    };
+};
diff --git a/src/main/webapp/spacedon.json b/src/main/webapp/spacedon.json
new file mode 100644
index 0000000..e65c8bb
--- /dev/null
+++ b/src/main/webapp/spacedon.json
@@ -0,0 +1,1849 @@
+{
+  "version": 8,
+  "name": "spacedon",
+  "metadata": {"maputnik:renderer": "mbgljs"},
+  "sources": {
+    "polygons": {
+      "type": "vector",
+      "url": "http://ceres:3000/planet_osm_polygon"
+    },
+    "lines": {"type": "vector", "url": "http://ceres:3000/planet_osm_line"},
+    "points": {"type": "vector", "url": "http://ceres:3000/planet_osm_point"},
+    "roads": {"type": "vector", "url": "http://ceres:3000/planet_osm_roads"}
+  },
+  "sprite": "http://ceres:3000/sprite/sprites",
+  "glyphs": "https://openmap.lt/glyphs/{fontstack}/{range}.pbf",
+  "layers": [
+    {
+      "id": "background",
+      "type": "background",
+      "layout": {"visibility": "visible"},
+      "paint": {"background-color": "#eeeeee"}
+    },
+    {
+      "id": "natural-mountain_range",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 6,
+      "filter": ["all", ["==", "natural", "mountain_range"]],
+      "paint": {"fill-color": "rgba(197, 197, 197, 1)"}
+    },
+    {
+      "id": "natural-rock",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 6,
+      "filter": ["all", ["==", "natural", "bare_rock"]],
+      "paint": {"fill-color": "rgba(147, 146, 146, 1)"}
+    },
+    {
+      "id": "natural-scrub",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 6,
+      "filter": ["all", ["in", "natural", "scrub"]],
+      "layout": {"visibility": "visible"},
+      "paint": {"fill-color": "rgba(145, 153, 83, 1)"}
+    },
+    {
+      "id": "natural-wood",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 6,
+      "filter": ["all", ["==", "natural", "wood"]],
+      "paint": {"fill-color": "rgba(151, 172, 125, 1)"}
+    },
+    {
+      "id": "landuse-forest",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 6,
+      "filter": ["all", ["in", "landuse", "forest"]],
+      "layout": {"visibility": "visible"},
+      "paint": {"fill-color": "rgba(183, 215, 136, 1)"}
+    },
+    {
+      "id": "landuse-farmland",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 6,
+      "filter": ["all", ["in", "landuse", "farmland"]],
+      "layout": {"visibility": "visible"},
+      "paint": {"fill-color": "rgba(227, 220, 171, 1)"}
+    },
+    {
+      "id": "landuse-orchard-sym",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 7,
+      "filter": ["all", ["in", "landuse", "orchard"]],
+      "paint": {"fill-pattern": "orchard"}
+    },
+    {
+      "id": "landuse-cemetery",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 7,
+      "filter": ["all", ["in", "landuse", "cemetery"]],
+      "paint": {"fill-pattern": "cemetery"}
+    },
+    {
+      "id": "landuse-meadow",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 6,
+      "filter": ["all", ["in", "landuse", "meadow", "grass"]],
+      "paint": {
+        "fill-pattern": "meadow",
+        "fill-translate-anchor": "map",
+        "fill-opacity": 1
+      }
+    },
+    {
+      "id": "landuse-sand",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 12,
+      "filter": ["all", ["in", "landuse", "sand"]],
+      "paint": {"fill-color": "#fffacd", "fill-opacity": 1}
+    },
+    {
+      "id": "landuse-marsh",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 6,
+      "filter": ["all", ["in", "landuse", "marsh"]],
+      "paint": {"fill-pattern": "marsh"}
+    },
+    {
+      "id": "landuse-swamp",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 7,
+      "filter": ["all", ["in", "landuse", "swamp"]],
+      "paint": {"fill-pattern": "swamp"}
+    },
+    {
+      "id": "landuse-residential",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 6,
+      "filter": [
+        "all",
+        ["in", "landuse", "residential", "allotments", "commercial"]
+      ],
+      "layout": {"visibility": "visible"},
+      "paint": {
+        "fill-color": {
+          "stops": [
+            [6, "rgba(221, 221, 221, 1)"],
+            [10, "rgba(221, 221, 221, 1)"]
+          ]
+        },
+        "fill-outline-color": "rgba(200, 200, 200, 1)"
+      }
+    },
+    {
+      "id": "landuse-industrial",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 10,
+      "filter": ["all", ["in", "landuse", "industrial", "farmyard"]],
+      "paint": {
+        "fill-color": "rgba(210, 190, 210, 1)",
+        "fill-outline-color": "rgba(150, 125, 160, 1)"
+      }
+    },
+    {
+      "id": "landuse-reedbed",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 6,
+      "filter": ["all", ["==", "landuse", "reedbed"]],
+      "paint": {"fill-pattern": "reedbed"}
+    },
+    {
+      "id": "landuse-aeroway",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 12,
+      "filter": ["all", ["in", "aeroway", "runway", "apron"]],
+      "paint": {"fill-color": "rgba(96, 96, 96, 1)"}
+    },
+    {
+      "id": "landuse-quarry",
+      "type": "line",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 6,
+      "filter": ["all", ["==", "landuse", "quarry"]],
+      "paint": {
+        "line-pattern": "cliff",
+        "line-width": 5,
+        "line-opacity": {"stops": [[11, 0.2], [15, 1]]},
+        "line-color": "#333333"
+      }
+    },
+    {
+      "id": "leisure-park",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "filter": ["all", ["==", "leisure", "park"]],
+      "paint": {"fill-color": "#cbe3a9"}
+    },
+    {
+      "id": "casing-motorway-tunnel",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "filter": [
+        "all",
+        ["in", "highway", "motorway", "motorway_link", "trunk", "trunk_link"],
+        ["has", "tunnel"]
+      ],
+      "layout": {"line-join": "round"},
+      "paint": {
+        "line-color": "rgba(187, 187, 187, 0.3)",
+        "line-width": {"base": 1.55, "stops": [[5, 2.3], [20, 40]]}
+      }
+    },
+    {
+      "id": "casing-secondary-tunnel",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 7,
+      "filter": [
+        "all",
+        ["in", "highway", "secondary", "secondary_link"],
+        ["has", "tunnel"]
+      ],
+      "layout": {"line-join": "round"},
+      "paint": {
+        "line-color": "#111111",
+        "line-opacity": 0.3,
+        "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 40]]}
+      }
+    },
+    {
+      "id": "casing-primary-tunnel",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "filter": [
+        "all",
+        ["in", "highway", "primary", "primary_link"],
+        ["has", "tunnel"]
+      ],
+      "layout": {"line-join": "round"},
+      "paint": {
+        "line-color": "#111111",
+        "line-opacity": 0.3,
+        "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 40]]}
+      }
+    },
+    {
+      "id": "casing-tertiary-tunnel",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 10,
+      "filter": [
+        "all",
+        ["in", "highway", "tertiary", "tertiary_link"],
+        ["has", "tunnel"]
+      ],
+      "layout": {"line-cap": "butt", "line-join": "round"},
+      "paint": {
+        "line-color": "#111111",
+        "line-opacity": 0.5,
+        "line-width": {"base": 1.55, "stops": [[5, 2], [20, 25]]}
+      }
+    },
+    {
+      "id": "road-motorway-tunnel",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "filter": [
+        "all",
+        ["in", "highway", "motorway", "motorway_link", "trunk", "trunk_link"],
+        ["has", "tunnel"]
+      ],
+      "layout": {"line-join": "round"},
+      "paint": {
+        "line-color": "#882a30",
+        "line-gap-width": 1.5,
+        "line-dasharray": [3, 2],
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 8]]}
+      }
+    },
+    {
+      "id": "road-primary-tunnel",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "filter": [
+        "all",
+        ["in", "highway", "primary", "primary_link"],
+        ["has", "tunnel"]
+      ],
+      "layout": {"line-join": "round"},
+      "paint": {
+        "line-color": "#882a30",
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 8]]},
+        "line-gap-width": 1.5,
+        "line-dasharray": [3, 2]
+      }
+    },
+    {
+      "id": "road-secondary-tunnel",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 7,
+      "filter": [
+        "all",
+        ["in", "highway", "secondary", "secondary_link"],
+        ["has", "tunnel"]
+      ],
+      "layout": {"line-join": "round"},
+      "paint": {
+        "line-color": "#d7b7ad",
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 8]]},
+        "line-gap-width": 1.5,
+        "line-dasharray": [3, 2]
+      }
+    },
+    {
+      "id": "road-tertiary-paved-tunnel",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 10,
+      "filter": [
+        "all",
+        ["in", "highway", "tertiary", "tertiary_link"],
+        ["!=", "surface", "unpaved"],
+        ["has", "tunnel"]
+      ],
+      "layout": {"line-join": "round"},
+      "paint": {
+        "line-color": "#d7b7ad",
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 8]]},
+        "line-gap-width": 1.5,
+        "line-dasharray": [3, 2]
+      }
+    },
+    {
+      "id": "road-tertiary-unpaved-tunnel",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 10,
+      "filter": [
+        "all",
+        ["in", "highway", "tertiary", "tertiary_link"],
+        ["==", "surface", "unpaved"],
+        ["has", "tunnel"]
+      ],
+      "layout": {"line-join": "round"},
+      "paint": {
+        "line-color": "rgba(230, 220, 0, 1)",
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 8]]},
+        "line-gap-width": 1.5,
+        "line-dasharray": [3, 2]
+      }
+    },
+    {
+      "id": "waterway-other",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 14,
+      "filter": [
+        "all",
+        ["==", "waterway", "ditch"],
+        ["==", "$type", "LineString"]
+      ],
+      "layout": {"visibility": "visible"},
+      "paint": {
+        "line-color": "#49a5dd",
+        "line-width": {"base": 1.2, "stops": [[14, 1], [18, 3]]}
+      }
+    },
+    {
+      "id": "waterway-river",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 6,
+      "filter": [
+        "all",
+        ["==", "waterway", "river"],
+        ["==", "$type", "LineString"]
+      ],
+      "layout": {
+        "line-cap": "round",
+        "line-join": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-color": "#49a5dd",
+        "line-width": {"base": 1.2, "stops": [[8, 0.75], [20, 15]]}
+      }
+    },
+    {
+      "id": "waterway-stream-etc",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 11,
+      "filter": ["all", ["in", "waterway", "stream", "canal"]],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-color": "#49a5dd",
+        "line-width": {
+          "base": 1.4,
+          "stops": [[10, 0.5], [14, 1], [15, 3], [18, 10]]
+        }
+      }
+    },
+    {
+      "id": "waterway-stream-etc-fill",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 15,
+      "filter": ["all", ["in", "waterway", "stream", "canal"]],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-color": "#bed7f0",
+        "line-width": {"base": 1.4, "stops": [[15, 1], [18, 8]]}
+      }
+    },
+    {
+      "id": "water-polygon-casing",
+      "type": "line",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 9,
+      "filter": ["all", ["==", "natural", "water"]],
+      "layout": {"visibility": "visible"},
+      "paint": {"line-color": "#49a5dd", "line-width": 2}
+    },
+    {
+      "id": "water-polygon",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 0,
+      "filter": ["all", ["==", "natural", "water"]],
+      "layout": {"visibility": "visible"},
+      "paint": {"fill-antialias": true, "fill-color": "#bed7f0"}
+    },
+    {
+      "id": "waterway-direction",
+      "type": "symbol",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 15,
+      "filter": ["all", ["in", "waterway", "stream", "canal", "river"]],
+      "layout": {
+        "symbol-placement": "line-center",
+        "icon-image": "arrow-right",
+        "icon-size": 0.05,
+        "icon-anchor": "top",
+        "icon-offset": [0, -100]
+      }
+    },
+    {
+      "id": "buildings",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 11,
+      "filter": ["all", ["has", "building"], ["!=", "building", "ruins"]],
+      "layout": {"visibility": "visible"},
+      "paint": {
+        "fill-color": {
+          "stops": [[11, "rgba(230, 230, 230, 1)"], [13, "#444444"]]
+        }
+      }
+    },
+    {
+      "id": "buildings-ruins",
+      "type": "line",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 12,
+      "filter": ["all", ["==", "building", "ruins"]],
+      "layout": {"visibility": "visible"},
+      "paint": {
+        "line-color": "#444444",
+        "line-width": {"stops": [[14, 0.5], [16, 2]]}
+      }
+    },
+    {
+      "id": "detail-stadium",
+      "type": "line",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 13,
+      "filter": ["all", ["in", "leisure", "stadium", "pitch"]],
+      "paint": {
+        "line-width": 0.5,
+        "line-dasharray": [12, 6],
+        "line-translate": [0, 0],
+        "line-offset": 3
+      }
+    },
+    {
+      "id": "detail-cutline",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 13,
+      "filter": ["all", ["==", "man_made", "cutline"]],
+      "layout": {"visibility": "visible"},
+      "paint": {"line-width": 0.5, "line-dasharray": [12, 6]}
+    },
+    {
+      "id": "detail-fence",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 14,
+      "filter": ["all", ["==", "barrier", "fence"]],
+      "paint": {"line-width": 0.5}
+    },
+    {
+      "id": "detail-cliff",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 14,
+      "filter": ["all", ["==", "natural", "cliff"]],
+      "layout": {"visibility": "visible"},
+      "paint": {
+        "line-pattern": "cliff",
+        "line-width": {"stops": [[14, 3], [18, 6]]}
+      }
+    },
+    {
+      "id": "boundary-national-park-outline",
+      "type": "line",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "filter": ["all", ["==", "boundary", "national_park"]],
+      "paint": {
+        "line-color": "#85c4a5",
+        "line-dasharray": [2, 4],
+        "line-width": {"stops": [[8, 1], [18, 3]]}
+      }
+    },
+    {
+      "id": "boundary-national-park",
+      "type": "fill",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 7,
+      "filter": ["all", ["==", "boundary", "national_park"]],
+      "paint": {
+        "fill-color": {
+          "stops": [[7, "rgba(34, 183, 44, 0.2)"], [12, "rgba(34, 183, 44, 0)"]]
+        }
+      }
+    },
+    {
+      "id": "boundary-country",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "filter": [
+        "all",
+        ["==", "boundary", "administrative"],
+        ["in", "admin_level", 1, 2, 3, 4, 5, 6]
+      ],
+      "layout": {
+        "line-cap": "round",
+        "line-join": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-color": "#eb9dcb",
+        "line-translate-anchor": "map",
+        "line-width": {"base": 2, "stops": [[1, 1], [7, 3]]}
+      }
+    },
+    {
+      "id": "casing-unclassified",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 11,
+      "filter": ["all", ["==", "highway", "unclassified"]],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-color": "rgba(112, 112, 112, 1)",
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 30]]}
+      }
+    },
+    {
+      "id": "casing-tertiary-paved",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 8,
+      "filter": [
+        "all",
+        ["in", "highway", "tertiary", "tertiary_link"],
+        ["!=", "surface", "unpaved"],
+        ["!has", "tunnel"],
+        ["!has", "bridge"]
+      ],
+      "layout": {"line-join": "round", "line-cap": "round"},
+      "paint": {
+        "line-width": {"base": 1.55, "stops": [[5, 2], [20, 25]]},
+        "line-color": "#111111"
+      }
+    },
+    {
+      "id": "casing-tertiary-unpaved",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 10,
+      "filter": [
+        "all",
+        ["in", "highway", "tertiary", "tertiary_link"],
+        ["==", "surface", "unpaved"],
+        ["!has", "tunnel"],
+        ["!has", "bridge"]
+      ],
+      "layout": {"line-join": "round", "line-cap": "round"},
+      "paint": {
+        "line-color": "rgba(100, 100, 0, 1)",
+        "line-width": {"base": 1.55, "stops": [[5, 2], [20, 25]]}
+      }
+    },
+    {
+      "id": "casing-secondary",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 7,
+      "filter": [
+        "all",
+        ["in", "highway", "secondary", "secondary_link"],
+        ["!has", "tunnel"],
+        ["!has", "bridge"]
+      ],
+      "layout": {"line-join": "round", "line-cap": "round"},
+      "paint": {
+        "line-color": "#111111",
+        "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 40]]}
+      }
+    },
+    {
+      "id": "casing-primary",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "filter": [
+        "all",
+        ["in", "highway", "primary", "primary_link"],
+        ["!has", "tunnel"],
+        ["!has", "bridge"]
+      ],
+      "layout": {"line-join": "round", "line-cap": "round"},
+      "paint": {
+        "line-color": "#111111",
+        "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 40]]}
+      }
+    },
+    {
+      "id": "casing-motorway",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "filter": [
+        "all",
+        ["in", "highway", "motorway", "motorway_link", "trunk", "trunk_link"],
+        ["!has", "tunnel"],
+        ["!has", "bridge"]
+      ],
+      "layout": {"line-join": "round", "line-cap": "round"},
+      "paint": {
+        "line-color": "#111111",
+        "line-width": {"base": 1.55, "stops": [[5, 2.5], [20, 42]]}
+      }
+    },
+    {
+      "id": "casing-service",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 13,
+      "filter": ["all", ["in", "highway", "service"]],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-color": "rgba(112, 112, 112, 1)",
+        "line-width": {"base": 1.55, "stops": [[5, 0.7], [20, 25]]}
+      }
+    },
+    {
+      "id": "casing-road",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 13,
+      "filter": [
+        "all",
+        ["in", "highway", "residential", "living_street", "pedestrian"]
+      ],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-color": "rgba(112, 112, 112, 1)",
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 30]]}
+      }
+    },
+    {
+      "id": "aeroway-runway",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "filter": ["all", ["in", "aeroway", "runway"]],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-color": "rgba(220, 220, 220, 1)",
+        "line-width": {"base": 1.55, "stops": [[10, 1], [18, 10]]},
+        "line-dasharray": [2, 6]
+      }
+    },
+    {
+      "id": "aeroway-apron",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "filter": ["all", ["in", "aeroway", "taxiway", "parking_position"]],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {"line-color": "rgba(120, 120, 120, 1)"}
+    },
+    {
+      "id": "road-steps",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 12,
+      "filter": ["all", ["in", "highway", "steps"]],
+      "layout": {
+        "line-cap": "square",
+        "line-join": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-width": {"base": 1.8, "stops": [[14, 1], [18, 9]]},
+        "line-color": "#5d6765",
+        "line-dasharray": [0.2, 0.4]
+      }
+    },
+    {
+      "id": "road-path",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 12,
+      "filter": ["all", ["in", "highway", "path", "footway", "cycleway"]],
+      "layout": {"line-cap": "square", "line-join": "round"},
+      "paint": {
+        "line-width": {"base": 1.8, "stops": [[14, 1], [18, 2]]},
+        "line-color": "#5d6765",
+        "line-dasharray": [1, 2]
+      }
+    },
+    {
+      "id": "road-track",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 12,
+      "filter": ["all", ["==", "highway", "track"], ["!has", "tracktype"]],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-color": "#110f0d",
+        "line-width": {"base": 1.8, "stops": [[10, 0.3], [20, 15]]}
+      }
+    },
+    {
+      "id": "road-track12",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 12,
+      "filter": [
+        "all",
+        ["==", "highway", "track"],
+        ["in", "tracktype", "grade1", "grade2"]
+      ],
+      "layout": {
+        "line-cap": "round",
+        "line-join": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-color": "#110f0d",
+        "line-width": {"base": 1.8, "stops": [[10, 0.3], [20, 15]]}
+      }
+    },
+    {
+      "id": "road-track3",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 12,
+      "filter": [
+        "all",
+        ["==", "highway", "track"],
+        ["in", "tracktype", "grade3"]
+      ],
+      "layout": {
+        "line-cap": "butt",
+        "line-join": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-color": "#110f0d",
+        "line-width": {"base": 1.8, "stops": [[10, 0.3], [20, 15]]},
+        "line-dasharray": [30, 7]
+      }
+    },
+    {
+      "id": "road-track4",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 12,
+      "filter": [
+        "all",
+        ["==", "highway", "track"],
+        ["in", "tracktype", "grade4"]
+      ],
+      "layout": {
+        "line-cap": "butt",
+        "line-join": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-color": "#110f0d",
+        "line-width": {"base": 1.8, "stops": [[10, 0.3], [20, 15]]},
+        "line-dasharray": [15, 7]
+      }
+    },
+    {
+      "id": "road-track5",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 12,
+      "filter": [
+        "all",
+        ["==", "highway", "track"],
+        ["in", "tracktype", "grade5"]
+      ],
+      "layout": {
+        "line-cap": "butt",
+        "line-join": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-color": "#110f0d",
+        "line-width": {"base": 1.8, "stops": [[10, 0.3], [20, 15]]},
+        "line-dasharray": [5, 7]
+      }
+    },
+    {
+      "id": "road-service",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 12,
+      "filter": ["all", ["==", "highway", "service"]],
+      "layout": {
+        "line-cap": "round",
+        "line-join": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-color": "rgba(238, 229, 221, 0.9)",
+        "line-width": {"base": 1.55, "stops": [[8, 0.25], [20, 20]]}
+      }
+    },
+    {
+      "id": "road-residential-small",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 8,
+      "maxzoom": 13,
+      "filter": [
+        "all",
+        ["in", "highway", "residential", "unclassified", "living_street"]
+      ],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-color": "rgba(238, 229, 221, 0.9)",
+        "line-width": {"base": 1.55, "stops": [[4, 0.25], [20, 30]]}
+      }
+    },
+    {
+      "id": "road-residential",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 13,
+      "maxzoom": 24,
+      "filter": [
+        "all",
+        ["in", "highway", "residential", "living_street", "pedestrian"]
+      ],
+      "layout": {"line-cap": "butt", "line-join": "round"},
+      "paint": {
+        "line-width": {"base": 1.55, "stops": [[4, 0.25], [20, 25]]},
+        "line-color": "rgba(238, 229, 221, 0.9)"
+      }
+    },
+    {
+      "id": "road-unclassified",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 11,
+      "maxzoom": 24,
+      "filter": ["all", ["in", "highway", "unclassified"]],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-width": {"base": 1.55, "stops": [[4, 0.25], [20, 25]]},
+        "line-color": "#fffbb3"
+      }
+    },
+    {
+      "id": "road-tertiary-unpaved",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 10,
+      "maxzoom": 24,
+      "filter": [
+        "all",
+        ["in", "highway", "tertiary", "tertiary_link"],
+        ["!has", "tunnel"],
+        ["!has", "bridge"],
+        ["==", "surface", "unpaved"]
+      ],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 20]]},
+        "line-color": "rgba(230, 220, 0, 1)"
+      }
+    },
+    {
+      "id": "road-tertiary-paved",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 8,
+      "maxzoom": 24,
+      "filter": [
+        "all",
+        ["in", "highway", "tertiary", "tertiary_link"],
+        ["!has", "tunnel"],
+        ["!has", "bridge"],
+        ["!=", "surface", "unpaved"]
+      ],
+      "layout": {
+        "line-cap": "round",
+        "line-join": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 20]]},
+        "line-color": "#d7b7ad"
+      }
+    },
+    {
+      "id": "road-secondary",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 7,
+      "maxzoom": 24,
+      "filter": [
+        "all",
+        ["in", "highway", "secondary", "secondary_link"],
+        ["!has", "tunnel"],
+        ["!has", "bridge"]
+      ],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 34]]},
+        "line-color": "#d7b7ad"
+      }
+    },
+    {
+      "id": "road-primary",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 0,
+      "maxzoom": 24,
+      "filter": [
+        "all",
+        ["in", "highway", "primary", "primary_link"],
+        ["!has", "tunnel"],
+        ["!has", "bridge"]
+      ],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 34]]},
+        "line-color": "#882a30"
+      }
+    },
+    {
+      "id": "road-motorway",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 0,
+      "maxzoom": 24,
+      "filter": [
+        "all",
+        ["in", "highway", "motorway", "trunk", "motorway_link", "trunk_link"],
+        ["!has", "tunnel"],
+        ["!has", "bridge"]
+      ],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-width": {"base": 1.55, "stops": [[5, 2], [20, 34]]},
+        "line-color": "#882a30"
+      }
+    },
+    {
+      "id": "railway-minor-casing",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 9,
+      "filter": [
+        "all",
+        ["in", "railway", "rail", "miniature"],
+        ["in", "service", "yard", "spur", "siding", "crossover"]
+      ],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-color": "rgba(100, 100, 100, 1)",
+        "line-width": {"base": 1.8, "stops": [[9, 1], [20, 7]]},
+        "line-dasharray": [2, 0]
+      }
+    },
+    {
+      "id": "railway-minor",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 9,
+      "filter": [
+        "all",
+        ["in", "railway", "rail", "miniature"],
+        ["in", "service", "yard", "spur", "siding", "crossover"]
+      ],
+      "layout": {"line-cap": "butt", "line-join": "bevel"},
+      "paint": {
+        "line-color": "rgba(255, 255, 255, 1)",
+        "line-width": {"base": 1.8, "stops": [[9, 0.8], [20, 6]]},
+        "line-dasharray": [3, 4]
+      }
+    },
+    {
+      "id": "railway-casing",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 9,
+      "filter": [
+        "all",
+        ["==", "railway", "rail"],
+        ["!in", "service", "yard", "spur", "siding", "crossover"]
+      ],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-color": "rgba(100, 100, 100, 1)",
+        "line-width": {"base": 1.8, "stops": [[9, 2], [20, 15]]},
+        "line-dasharray": [2, 0]
+      }
+    },
+    {
+      "id": "railway-rail",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 9,
+      "filter": [
+        "all",
+        ["==", "railway", "rail"],
+        ["!in", "service", "yard", "spur", "siding", "crossover"]
+      ],
+      "layout": {"line-cap": "butt", "line-join": "bevel"},
+      "paint": {
+        "line-color": "rgba(255, 255, 255, 1)",
+        "line-width": {"base": 1.8, "stops": [[9, 1.5], [20, 12]]},
+        "line-dasharray": [3, 4]
+      }
+    },
+    {
+      "id": "railway-halt",
+      "type": "circle",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 11,
+      "filter": [
+        "all",
+        ["in", "railway", "halt", "station"],
+        ["==", "public_transport", "station"]
+      ],
+      "paint": {
+        "circle-color": "rgb(240, 20, 20)",
+        "circle-stroke-width": 1,
+        "circle-radius": {"stops": [[11, 3], [12, 5]]}
+      }
+    },
+    {
+      "id": "casing-motorway-bridge",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "filter": [
+        "all",
+        ["in", "highway", "motorway", "motorway_link", "trunk", "trunk_link"],
+        ["has", "bridge"]
+      ],
+      "layout": {"line-join": "round", "visibility": "visible"},
+      "paint": {
+        "line-color": "#111111",
+        "line-width": {"base": 1.55, "stops": [[5, 2.3], [20, 42]]}
+      }
+    },
+    {
+      "id": "casing-primary-bridge",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "filter": [
+        "all",
+        ["in", "highway", "primary", "primary_link"],
+        ["has", "bridge"]
+      ],
+      "layout": {"line-join": "round", "visibility": "visible"},
+      "paint": {
+        "line-color": "#111111",
+        "line-opacity": 0.3,
+        "line-width": {"base": 1.55, "stops": [[5, 2.5], [20, 40]]}
+      }
+    },
+    {
+      "id": "casing-secondary-bridge",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 7,
+      "filter": [
+        "all",
+        ["in", "highway", "secondary", "secondary_link"],
+        ["has", "bridge"]
+      ],
+      "layout": {"line-join": "round", "visibility": "visible"},
+      "paint": {
+        "line-color": "#111111",
+        "line-opacity": 0.3,
+        "line-width": {"base": 1.55, "stops": [[5, 2.5], [20, 40]]}
+      }
+    },
+    {
+      "id": "casing-tertiary-bridge",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 8,
+      "filter": [
+        "all",
+        ["in", "highway", "tertiary", "tertiary_link"],
+        ["has", "bridge"]
+      ],
+      "layout": {"line-cap": "butt", "line-join": "round"},
+      "paint": {
+        "line-color": "#111111",
+        "line-opacity": 0.5,
+        "line-width": {"base": 1.55, "stops": [[5, 2], [20, 25]]}
+      }
+    },
+    {
+      "id": "road-motorway-bridge",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "filter": [
+        "all",
+        ["in", "highway", "motorway", "motorway_link", "trunk", "trunk_link"],
+        ["has", "bridge"]
+      ],
+      "layout": {"line-join": "round"},
+      "paint": {
+        "line-dasharray": [],
+        "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 25]]},
+        "line-color": "rgba(136, 42, 48, 1)"
+      }
+    },
+    {
+      "id": "road-primary-bridge",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "filter": [
+        "all",
+        ["in", "highway", "primary", "primary_link"],
+        ["has", "bridge"]
+      ],
+      "layout": {
+        "line-join": "round",
+        "line-cap": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-color": "#882a30",
+        "line-width": {"base": 1.55, "stops": [[5, 1.5], [20, 32]]},
+        "line-dasharray": []
+      }
+    },
+    {
+      "id": "road-secondary-bridge",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 7,
+      "filter": [
+        "all",
+        ["in", "highway", "secondary", "secondary_link"],
+        ["has", "bridge"]
+      ],
+      "layout": {"line-join": "round", "visibility": "visible"},
+      "paint": {
+        "line-color": "#d7b7ad",
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 28]]},
+        "line-dasharray": []
+      }
+    },
+    {
+      "id": "road-tertiary-paved-bridge",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 8,
+      "filter": [
+        "all",
+        ["in", "highway", "tertiary", "tertiary_link"],
+        ["!=", "surface", "unpaved"],
+        ["has", "bridge"]
+      ],
+      "layout": {
+        "line-join": "round",
+        "line-cap": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-color": "#d7b7ad",
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 15]]},
+        "line-dasharray": []
+      }
+    },
+    {
+      "id": "road-tertiary-unpaved-bridge",
+      "type": "line",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 8,
+      "filter": [
+        "all",
+        ["in", "highway", "tertiary", "tertiary_link"],
+        ["==", "surface", "unpaved"],
+        ["has", "bridge"]
+      ],
+      "layout": {"line-join": "round", "line-cap": "round"},
+      "paint": {
+        "line-color": "rgba(230, 220, 0, 1)",
+        "line-width": {"base": 1.55, "stops": [[5, 1], [20, 15]]},
+        "line-dasharray": []
+      }
+    },
+    {
+      "id": "route-biking",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 15,
+      "filter": ["all", ["==", "route", "biking"]],
+      "layout": {"line-cap": "round", "line-join": "round"},
+      "paint": {
+        "line-color": "rgba(72, 88, 223, 0.59)",
+        "line-opacity": 0.75,
+        "line-width": 8
+      }
+    },
+    {
+      "id": "route-hiking",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 15,
+      "filter": ["all", ["==", "route", "hiking"]],
+      "layout": {
+        "line-cap": "round",
+        "line-join": "round",
+        "visibility": "visible"
+      },
+      "paint": {
+        "line-color": "rgba(141, 36, 119, 0.3)",
+        "line-opacity": 0.75,
+        "line-width": 8
+      }
+    },
+    {
+      "id": "power-line",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 14,
+      "filter": ["all", ["==", "route", "power"]],
+      "paint": {"line-color": "#666", "line-width": 0.4}
+    },
+    {
+      "id": "power-pillar",
+      "type": "circle",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 14,
+      "filter": ["all", ["==", "power", "tower"]],
+      "paint": {"circle-color": "#666", "circle-radius": 2}
+    },
+    {
+      "id": "natural-peak",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 12,
+      "filter": ["all", ["==", "natural", "peak"]],
+      "layout": {
+        "icon-image": "peak",
+        "icon-size": 0.07,
+        "text-font": ["Roboto Regular"],
+        "text-field": {"stops": [[6, "{name}"], [14, "{name} ({ele}m)"]]},
+        "text-size": 12,
+        "text-padding": 2,
+        "text-anchor": "bottom",
+        "text-offset": [0, -0.4]
+      },
+      "paint": {
+        "text-color": "#a05a2c",
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 1.5,
+        "text-halo-blur": 1
+      }
+    },
+    {
+      "id": "natural-saddle",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 13,
+      "filter": ["all", ["==", "natural", "saddle"]],
+      "layout": {
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "icon-image": "saddle",
+        "icon-size": 0.08,
+        "text-anchor": "bottom",
+        "text-offset": [0, -1],
+        "text-size": 12
+      }
+    },
+    {
+      "id": "natural-tree",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 15,
+      "filter": ["all", ["==", "natural", "tree"]],
+      "layout": {"icon-image": "leaf_tree", "icon-size": 0.07}
+    },
+    {
+      "id": "label-park",
+      "type": "symbol",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 13,
+      "maxzoom": 24,
+      "filter": ["all", ["==", "leisure", "park"]],
+      "layout": {
+        "text-field": "{name}",
+        "text-size": 12,
+        "text-max-width": 9,
+        "text-anchor": "top",
+        "text-offset": [0, 0.6],
+        "icon-image": "park",
+        "text-padding": 1,
+        "text-font": ["Roboto Regular"],
+        "symbol-placement": "line-center"
+      },
+      "paint": {
+        "text-color": "rgba(26, 92, 0, 1)",
+        "text-halo-width": 1,
+        "text-halo-color": "rgba(255, 255, 255, 0.7)"
+      }
+    },
+    {
+      "id": "label-road-shield",
+      "type": "symbol",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 11,
+      "maxzoom": 24,
+      "filter": [
+        "all",
+        [
+          "in",
+          "highway",
+          "motorway",
+          "trunk",
+          "primary",
+          "secondary",
+          "tertiary"
+        ],
+        ["has", "ref"]
+      ],
+      "layout": {
+        "text-field": "{ref}",
+        "symbol-placement": "line",
+        "text-rotation-alignment": "auto",
+        "text-anchor": "center",
+        "text-size": 12,
+        "text-padding": 30,
+        "symbol-avoid-edges": false,
+        "text-font": ["Roboto Regular"]
+      },
+      "paint": {
+        "text-halo-width": 2,
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-color": "rgba(115, 77, 13, 1)"
+      }
+    },
+    {
+      "id": "label-road-shield-low",
+      "type": "symbol",
+      "source": "roads",
+      "source-layer": "planet_osm_roads",
+      "minzoom": 8,
+      "maxzoom": 11,
+      "filter": [
+        "all",
+        ["in", "highway", "motorway", "trunk", "primary"],
+        ["has", "ref"]
+      ],
+      "layout": {
+        "text-field": "{ref}",
+        "symbol-placement": "line",
+        "text-rotation-alignment": "auto",
+        "text-anchor": "center",
+        "text-size": 10,
+        "text-padding": 30,
+        "symbol-avoid-edges": false,
+        "text-font": ["Roboto Regular"]
+      },
+      "paint": {
+        "text-halo-width": 2,
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-color": "rgba(115, 77, 13, 1)"
+      }
+    },
+    {
+      "id": "label-road",
+      "type": "symbol",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 12,
+      "filter": ["all", ["has", "highway"]],
+      "layout": {
+        "symbol-placement": "line",
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "text-size": {"stops": [[10, 8], [20, 16]]},
+        "text-anchor": "bottom",
+        "symbol-avoid-edges": false,
+        "text-allow-overlap": false,
+        "text-justify": "center"
+      },
+      "paint": {
+        "icon-halo-color": "rgba(255, 255, 255, 1)",
+        "icon-halo-width": 1.5,
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 1,
+        "text-halo-blur": 0.5
+      }
+    },
+    {
+      "id": "label-water",
+      "type": "symbol",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 12,
+      "filter": ["all", ["==", "natural", "water"]],
+      "layout": {
+        "symbol-placement": "point",
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "text-size": {"stops": [[10, 8], [20, 16]]},
+        "text-anchor": "bottom",
+        "symbol-z-order": "auto",
+        "symbol-avoid-edges": false,
+        "symbol-spacing": 250,
+        "text-padding": 200
+      },
+      "paint": {
+        "icon-halo-color": "rgba(255, 255, 255, 1)",
+        "icon-halo-width": 1.5,
+        "text-color": "#49a5dd",
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 1,
+        "text-halo-blur": 0.5
+      }
+    },
+    {
+      "id": "label-river",
+      "type": "symbol",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 12,
+      "filter": ["all", ["has", "waterway"]],
+      "layout": {
+        "symbol-placement": "line",
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "text-size": {"stops": [[10, 8], [20, 16]]},
+        "text-anchor": "bottom"
+      },
+      "paint": {
+        "icon-halo-color": "rgba(255, 255, 255, 1)",
+        "icon-halo-width": 1.5,
+        "text-color": "rgba(73, 165, 221, 1)",
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 1,
+        "text-halo-blur": 0.5
+      }
+    },
+    {
+      "id": "label-railway-station",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 12,
+      "filter": [
+        "all",
+        ["in", "railway", "halt", "station"],
+        ["==", "public_transport", "station"]
+      ],
+      "layout": {
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "text-anchor": "bottom",
+        "text-size": {"stops": [[12, 10], [14, 16]]}
+      },
+      "paint": {
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 1.5,
+        "text-halo-blur": 0.5
+      }
+    },
+    {
+      "id": "label-suburb",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 11,
+      "filter": ["all", ["in", "place", "suburb"]],
+      "layout": {
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "text-writing-mode": [],
+        "text-size": 12
+      },
+      "paint": {
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 2
+      }
+    },
+    {
+      "id": "label-hamlet",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 12,
+      "filter": ["all", ["in", "place", "village"]],
+      "layout": {
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "text-writing-mode": [],
+        "text-size": 10
+      },
+      "paint": {
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 2
+      }
+    },
+    {
+      "id": "label-village",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 10,
+      "filter": ["all", ["in", "place", "village"]],
+      "layout": {
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "text-writing-mode": [],
+        "text-size": 12
+      },
+      "paint": {
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 2
+      }
+    },
+    {
+      "id": "label-town",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 8,
+      "filter": ["all", ["in", "place", "town"]],
+      "layout": {
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "text-writing-mode": [],
+        "text-size": 16
+      },
+      "paint": {
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 2
+      }
+    },
+    {
+      "id": "label-city",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 7,
+      "filter": ["all", ["in", "place", "city"]],
+      "layout": {
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "text-writing-mode": [],
+        "text-size": 20
+      },
+      "paint": {
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 2
+      }
+    },
+    {
+      "id": "label-country",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 0,
+      "maxzoom": 6,
+      "filter": ["all", ["in", "place", "country"]],
+      "layout": {
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "text-writing-mode": [],
+        "text-size": 20
+      },
+      "paint": {
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 2
+      }
+    },
+    {
+      "id": "label-state",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 4,
+      "maxzoom": 7,
+      "filter": ["all", ["in", "place", "state"]],
+      "layout": {
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "text-writing-mode": [],
+        "text-size": 20
+      },
+      "paint": {
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 2
+      }
+    },
+    {
+      "id": "label-housenumber",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 16,
+      "maxzoom": 24,
+      "filter": ["all", ["has", "addr:housenumber"]],
+      "layout": {
+        "text-font": ["Roboto Regular"],
+        "text-field": "{addr:housenumber}",
+        "text-writing-mode": [],
+        "text-size": 10,
+        "text-padding": 15
+      },
+      "paint": {
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 2
+      }
+    },
+    {
+      "id": "label-housenumber-poly",
+      "type": "symbol",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 16,
+      "maxzoom": 24,
+      "filter": ["all", ["has", "addr:housenumber"]],
+      "layout": {
+        "text-font": ["Roboto Regular"],
+        "text-field": "{addr:housenumber}",
+        "text-writing-mode": [],
+        "text-size": 10,
+        "text-padding": 15
+      },
+      "paint": {
+        "text-halo-color": "rgba(222, 222, 222, 1)",
+        "text-halo-blur": 1,
+        "text-halo-width": 2
+      }
+    },
+    {
+      "id": "barrier-gate",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 16,
+      "filter": ["all", ["==", "barrier", "gate"]],
+      "layout": {
+        "text-field": "≠",
+        "text-font": ["Roboto Regular"],
+        "text-size": {"stops": [[16, 20], [24, 32]]}
+      }
+    },
+    {
+      "id": "hiking-color",
+      "type": "line",
+      "source": "lines",
+      "source-layer": "planet_osm_line",
+      "minzoom": 8,
+      "filter": ["all", ["==", "route", "hiking"], ["has", "colour"]],
+      "layout": {"line-cap": "butt", "line-join": "bevel"},
+      "paint": {
+        "line-color": ["get", "colour"],
+        "line-width": 10,
+        "line-opacity": 0.6
+      }
+    },
+    {
+      "id": "poi-bench",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 15,
+      "filter": ["all", ["==", "amenity", "bench"]],
+      "layout": {"icon-image": "bench", "text-font": [], "icon-size": 0.07}
+    },
+    {
+      "id": "poi-shelter",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 14,
+      "filter": ["all", ["==", "amenity", "shelter"]],
+      "layout": {"icon-image": "shelter", "text-font": [], "icon-size": 0.07}
+    },
+    {
+      "id": "poi-first-aid",
+      "type": "symbol",
+      "source": "points",
+      "source-layer": "planet_osm_point",
+      "minzoom": 15,
+      "filter": [
+        "all",
+        ["in", "emergency", "first_aid", "first_aid_kit", "rescue_box"]
+      ],
+      "layout": {"icon-image": "first-aid", "text-font": [], "icon-size": 0.1}
+    },
+    {
+      "id": "poi-hospital",
+      "type": "symbol",
+      "source": "polygons",
+      "source-layer": "planet_osm_polygon",
+      "minzoom": 12,
+      "filter": ["all", ["==", "amenity", "hospital"]],
+      "layout": {
+        "icon-image": "hospital",
+        "icon-size": 0.1,
+        "symbol-placement": "point",
+        "text-font": ["Roboto Regular"],
+        "text-field": "{name}",
+        "icon-allow-overlap": false,
+        "text-anchor": "top",
+        "text-size": {"stops": [[12, 10], [16, 14]]},
+        "text-line-height": 1,
+        "text-allow-overlap": false,
+        "text-offset": [0, 1],
+        "text-ignore-placement": false,
+        "icon-ignore-placement": false
+      },
+      "paint": {
+        "text-color": "rgba(255, 0, 0, 1)",
+        "text-halo-color": "rgba(255, 255, 255, 1)",
+        "text-halo-width": 2,
+        "text-halo-blur": 1
+      }
+    }
+  ],
+  "id": "asgr00hhi",
+  "owner": ""
+}
\ No newline at end of file
diff --git a/start.sh b/start.sh
new file mode 100755
index 0000000..cbc4832
--- /dev/null
+++ b/start.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+mvn clean package
+java -jar target/pilgrim-1.0-SNAPSHOT-jar-with-dependencies.jar
+exit 0