From 05588c2333e554f5751095cfbe6b1212bef84f12 Mon Sep 17 00:00:00 2001 From: Sil Klaasboer Date: Mon, 10 Feb 2025 21:27:28 +0100 Subject: [PATCH] Initial setup (without mbtiles example) --- .env | 4 + LICENSE | 2 +- data/config.json | 27 + data/styles/custom/dark-style.json | 3181 +++++++++++++++++++++++++ data/styles/default/sprite.json | 611 +++++ data/styles/default/sprite.png | Bin 0 -> 14475 bytes data/styles/default/sprite@2x.json | 611 +++++ data/styles/default/sprite@2x.png | Bin 0 -> 36098 bytes data/styles/default/style.json | 3445 ++++++++++++++++++++++++++++ docker-compose.yml | 11 + init.sh | 96 + 11 files changed, 7987 insertions(+), 1 deletion(-) create mode 100644 .env create mode 100644 data/config.json create mode 100644 data/styles/custom/dark-style.json create mode 100644 data/styles/default/sprite.json create mode 100644 data/styles/default/sprite.png create mode 100644 data/styles/default/sprite@2x.json create mode 100644 data/styles/default/sprite@2x.png create mode 100644 data/styles/default/style.json create mode 100644 docker-compose.yml create mode 100755 init.sh diff --git a/.env b/.env new file mode 100644 index 0000000..a512483 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +DATA_DIR=/home/silklaasboer/tileserver-gl-weatherroutes/data +PORT=9019 +MBTILES_FILE=osm-2020-02-10-v3.11_europe_netherlands.mbtiles + diff --git a/LICENSE b/LICENSE index d5363bd..1b1bc4c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 silklaasboer +Copyright (c) 2025 sil klaasboer pavankumar bellary Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/data/config.json b/data/config.json new file mode 100644 index 0000000..6614a91 --- /dev/null +++ b/data/config.json @@ -0,0 +1,27 @@ +{ + "options": { + "paths": { + "fonts": "fonts", + "styles": "styles" + } + }, + "styles": { + "default": { + "style": "default/style.json", + "tilejson": { + "type": "overlay" + } + }, + "dark": { + "style": "custom/dark-style.json", + "tilejson": { + "type": "overlay" + } + } + }, + "data": { + "openmaptiles": { + "mbtiles": "osm-2020-02-10-v3.11_europe_netherlands.mbtiles" + } + } +} \ No newline at end of file diff --git a/data/styles/custom/dark-style.json b/data/styles/custom/dark-style.json new file mode 100644 index 0000000..059343f --- /dev/null +++ b/data/styles/custom/dark-style.json @@ -0,0 +1,3181 @@ +{ + "version": 8, + "name": "Immich Map", + "metadata": {}, + "sources": { + "protomaps": { + "type": "vector", + "url": "https://tiles.immich.cloud/v1.json" + } + }, + "sprite": "https://static.immich.cloud/tiles/sprites/v1/dark", + "glyphs": "https://static.immich.cloud/tiles/fonts/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "#2b2b2b" + } + }, + { + "id": "earth", + "type": "fill", + "source": "protomaps", + "source-layer": "earth", + "paint": { + "fill-color": "#141414" + } + }, + { + "id": "landuse_park", + "type": "fill", + "source": "protomaps", + "source-layer": "landuse", + "filter": [ + "any", + [ + "in", + "pmap:kind", + "national_park", + "park", + "cemetery", + "protected_area", + "nature_reserve", + "forest", + "golf_course" + ] + ], + "paint": { + "fill-color": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 0, + "#181818", + 12, + "#181818" + ] + } + }, + { + "id": "landuse_urban_green", + "type": "fill", + "source": "protomaps", + "source-layer": "landuse", + "filter": [ + "any", + [ + "in", + "pmap:kind", + "allotments", + "village_green", + "playground" + ] + ], + "paint": { + "fill-color": "#181818", + "fill-opacity": 0.7 + } + }, + { + "id": "landuse_hospital", + "type": "fill", + "source": "protomaps", + "source-layer": "landuse", + "filter": [ + "any", + [ + "==", + "pmap:kind", + "hospital" + ] + ], + "paint": { + "fill-color": "#1d1d1d" + } + }, + { + "id": "landuse_industrial", + "type": "fill", + "source": "protomaps", + "source-layer": "landuse", + "filter": [ + "any", + [ + "==", + "pmap:kind", + "industrial" + ] + ], + "paint": { + "fill-color": "#101010" + } + }, + { + "id": "landuse_school", + "type": "fill", + "source": "protomaps", + "source-layer": "landuse", + "filter": [ + "any", + [ + "in", + "pmap:kind", + "school", + "university", + "college" + ] + ], + "paint": { + "fill-color": "#111111" + } + }, + { + "id": "landuse_beach", + "type": "fill", + "source": "protomaps", + "source-layer": "landuse", + "filter": [ + "any", + [ + "in", + "pmap:kind", + "beach" + ] + ], + "paint": { + "fill-color": "#1f1f1f" + } + }, + { + "id": "landuse_zoo", + "type": "fill", + "source": "protomaps", + "source-layer": "landuse", + "filter": [ + "any", + [ + "in", + "pmap:kind", + "zoo" + ] + ], + "paint": { + "fill-color": "#191919" + } + }, + { + "id": "landuse_military", + "type": "fill", + "source": "protomaps", + "source-layer": "landuse", + "filter": [ + "any", + [ + "in", + "pmap:kind", + "military", + "naval_base", + "airfield" + ] + ], + "paint": { + "fill-color": "#191919" + } + }, + { + "id": "natural_wood", + "type": "fill", + "source": "protomaps", + "source-layer": "natural", + "filter": [ + "any", + [ + "in", + "pmap:kind", + "wood", + "nature_reserve", + "forest" + ] + ], + "paint": { + "fill-color": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 0, + "#1a1a1a", + 12, + "#1a1a1a" + ] + } + }, + { + "id": "natural_scrub", + "type": "fill", + "source": "protomaps", + "source-layer": "natural", + "filter": [ + "in", + "pmap:kind", + "scrub", + "grassland", + "grass" + ], + "paint": { + "fill-color": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 0, + "#1c1c1c", + 12, + "#1c1c1c" + ] + } + }, + { + "id": "natural_glacier", + "type": "fill", + "source": "protomaps", + "source-layer": "natural", + "filter": [ + "==", + "pmap:kind", + "glacier" + ], + "paint": { + "fill-color": "#191919" + } + }, + { + "id": "natural_sand", + "type": "fill", + "source": "protomaps", + "source-layer": "natural", + "filter": [ + "==", + "pmap:kind", + "sand" + ], + "paint": { + "fill-color": "#161616" + } + }, + { + "id": "landuse_aerodrome", + "type": "fill", + "source": "protomaps", + "source-layer": "landuse", + "filter": [ + "any", + [ + "in", + "pmap:kind", + "aerodrome" + ] + ], + "paint": { + "fill-color": "#191919" + } + }, + { + "id": "transit_runway", + "type": "line", + "source": "protomaps", + "source-layer": "transit", + "filter": [ + "any", + [ + "in", + "pmap:kind_detail", + "runway" + ] + ], + "paint": { + "line-color": "#323232", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 10, + 0, + 12, + 4, + 18, + 30 + ] + } + }, + { + "id": "transit_taxiway", + "type": "line", + "source": "protomaps", + "source-layer": "transit", + "minzoom": 13, + "filter": [ + "any", + [ + "in", + "pmap:kind_detail", + "taxiway" + ] + ], + "paint": { + "line-color": "#323232", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 13.5, + 1, + 15, + 6 + ] + } + }, + { + "id": "water", + "type": "fill", + "source": "protomaps", + "source-layer": "water", + "paint": { + "fill-color": "#333333" + } + }, + { + "id": "physical_line_stream", + "type": "line", + "source": "protomaps", + "source-layer": "physical_line", + "minzoom": 14, + "filter": [ + "all", + [ + "in", + "pmap:kind", + "stream" + ] + ], + "paint": { + "line-color": "#333333", + "line-width": 0.5 + } + }, + { + "id": "physical_line_river", + "type": "line", + "source": "protomaps", + "source-layer": "physical_line", + "minzoom": 9, + "filter": [ + "all", + [ + "in", + "pmap:kind", + "river" + ] + ], + "paint": { + "line-color": "#333333", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 9, + 0, + 9.5, + 1, + 18, + 12 + ] + } + }, + { + "id": "landuse_pedestrian", + "type": "fill", + "source": "protomaps", + "source-layer": "landuse", + "filter": [ + "any", + [ + "==", + "pmap:kind", + "pedestrian" + ] + ], + "paint": { + "fill-color": "#191919" + } + }, + { + "id": "landuse_pier", + "type": "fill", + "source": "protomaps", + "source-layer": "landuse", + "filter": [ + "any", + [ + "==", + "pmap:kind", + "pier" + ] + ], + "paint": { + "fill-color": "#0a0a0a" + } + }, + { + "id": "roads_tunnels_other_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "in", + "pmap:kind", + "other", + "path" + ] + ], + "paint": { + "line-color": "#101010", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 14, + 0, + 20, + 7 + ] + } + }, + { + "id": "roads_tunnels_minor_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "minor_road" + ] + ], + "paint": { + "line-color": "#101010", + "line-dasharray": [ + 3, + 2 + ], + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 11, + 0, + 12.5, + 0.5, + 15, + 2, + 18, + 11 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 12, + 0, + 12.5, + 1 + ] + } + }, + { + "id": "roads_tunnels_link_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "==", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#101010", + "line-dasharray": [ + 3, + 2 + ], + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 13.5, + 1, + 18, + 11 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 12, + 0, + 12.5, + 1 + ] + } + }, + { + "id": "roads_tunnels_medium_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "medium_road" + ] + ], + "paint": { + "line-color": "#101010", + "line-dasharray": [ + 3, + 2 + ], + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 7.5, + 0.5, + 18, + 13 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 10, + 0, + 10.5, + 1 + ] + } + }, + { + "id": "roads_tunnels_major_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "major_road" + ] + ], + "paint": { + "line-color": "#101010", + "line-dasharray": [ + 3, + 2 + ], + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 7.5, + 0.5, + 18, + 13 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 9, + 0, + 9.5, + 1 + ] + } + }, + { + "id": "roads_tunnels_highway_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "highway" + ], + [ + "!=", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#101010", + "line-dasharray": [ + 6, + 0.5 + ], + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 3, + 0, + 3.5, + 0.5, + 18, + 15 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 7.5, + 1, + 20, + 15 + ] + } + }, + { + "id": "roads_tunnels_other", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "in", + "pmap:kind", + "other", + "path" + ] + ], + "paint": { + "line-color": "#292929", + "line-dasharray": [ + 4.5, + 0.5 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 14, + 0, + 20, + 7 + ] + } + }, + { + "id": "roads_tunnels_minor", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "minor_road" + ] + ], + "paint": { + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 11, + 0, + 12.5, + 0.5, + 15, + 2, + 18, + 11 + ] + } + }, + { + "id": "roads_tunnels_link", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "==", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 13.5, + 1, + 18, + 11 + ] + } + }, + { + "id": "roads_tunnels_medium", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "medium_road" + ] + ], + "paint": { + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 12, + 1.2, + 15, + 3, + 18, + 13 + ] + } + }, + { + "id": "roads_tunnels_major", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "major_road" + ] + ], + "paint": { + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 6, + 0, + 12, + 1.6, + 15, + 3, + 18, + 13 + ] + } + }, + { + "id": "roads_tunnels_highway", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "<", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "highway" + ], + [ + "!=", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 3, + 0, + 6, + 1.1, + 12, + 1.6, + 15, + 5, + 18, + 15 + ] + } + }, + { + "id": "buildings", + "type": "fill", + "source": "protomaps", + "source-layer": "buildings", + "paint": { + "fill-color": "#0a0a0a", + "fill-opacity": 0.5 + } + }, + { + "id": "transit_pier", + "type": "line", + "source": "protomaps", + "source-layer": "transit", + "filter": [ + "any", + [ + "==", + "pmap:kind", + "pier" + ] + ], + "paint": { + "line-color": "#0a0a0a", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 12, + 0, + 12.5, + 0.5, + 20, + 16 + ] + } + }, + { + "id": "roads_minor_service_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 13, + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "minor_road" + ], + [ + "==", + "pmap:kind_detail", + "service" + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 18, + 8 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 13.5, + 0.8 + ] + } + }, + { + "id": "roads_minor_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "minor_road" + ], + [ + "!=", + "pmap:kind_detail", + "service" + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 11, + 0, + 12.5, + 0.5, + 15, + 2, + 18, + 11 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 12, + 0, + 12.5, + 1 + ] + } + }, + { + "id": "roads_link_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 13, + "filter": [ + "all", + [ + "==", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 13.5, + 1, + 18, + 11 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 13.5, + 1.5 + ] + } + }, + { + "id": "roads_medium_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "medium_road" + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 12, + 1.2, + 15, + 3, + 18, + 13 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 10, + 0, + 10.5, + 1.5 + ] + } + }, + { + "id": "roads_major_casing_late", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "major_road" + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 6, + 0, + 12, + 1.6, + 15, + 3, + 18, + 13 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 9, + 0, + 9.5, + 1 + ] + } + }, + { + "id": "roads_highway_casing_late", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "highway" + ], + [ + "!=", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 3, + 0, + 3.5, + 0.5, + 18, + 15 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 7.5, + 1, + 20, + 15 + ] + } + }, + { + "id": "roads_other", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "in", + "pmap:kind", + "other", + "path" + ] + ], + "paint": { + "line-color": "#1f1f1f", + "line-dasharray": [ + 3, + 1 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 14, + 0, + 20, + 7 + ] + } + }, + { + "id": "roads_link", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "==", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#1f1f1f", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 13.5, + 1, + 18, + 11 + ] + } + }, + { + "id": "roads_minor_service", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "minor_road" + ], + [ + "==", + "pmap:kind_detail", + "service" + ] + ], + "paint": { + "line-color": "#1f1f1f", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 18, + 8 + ] + } + }, + { + "id": "roads_minor", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "minor_road" + ], + [ + "!=", + "pmap:kind_detail", + "service" + ] + ], + "paint": { + "line-color": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 11, + "#292929", + 16, + "#1f1f1f" + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 11, + 0, + 12.5, + 0.5, + 15, + 2, + 18, + 11 + ] + } + }, + { + "id": "roads_medium", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "medium_road" + ] + ], + "paint": { + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 12, + 1.2, + 15, + 3, + 18, + 13 + ] + } + }, + { + "id": "roads_major_casing_early", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "maxzoom": 12, + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "major_road" + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 7.5, + 0.5, + 18, + 13 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 9, + 0, + 9.5, + 1 + ] + } + }, + { + "id": "roads_major", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "major_road" + ] + ], + "paint": { + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 6, + 0, + 12, + 1.6, + 15, + 3, + 18, + 13 + ] + } + }, + { + "id": "roads_highway_casing_early", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "maxzoom": 12, + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "highway" + ], + [ + "!=", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 3, + 0, + 3.5, + 0.5, + 18, + 15 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 7.5, + 1 + ] + } + }, + { + "id": "roads_highway", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + "==", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "highway" + ], + [ + "!=", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 3, + 0, + 6, + 1.1, + 12, + 1.6, + 15, + 5, + 18, + 15 + ] + } + }, + { + "id": "transit_railway", + "type": "line", + "source": "protomaps", + "source-layer": "transit", + "filter": [ + "all", + [ + "==", + "pmap:kind", + "rail" + ] + ], + "paint": { + "line-dasharray": [ + 0.3, + 0.75 + ], + "line-opacity": 0.5, + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 3, + 0, + 6, + 0.15, + 18, + 9 + ] + } + }, + { + "id": "boundaries_country", + "type": "line", + "source": "protomaps", + "source-layer": "boundaries", + "filter": [ + "<=", + "pmap:min_admin_level", + 2 + ], + "paint": { + "line-color": "#707070", + "line-width": 1, + "line-dasharray": [ + 3, + 2 + ] + } + }, + { + "id": "boundaries", + "type": "line", + "source": "protomaps", + "source-layer": "boundaries", + "filter": [ + ">", + "pmap:min_admin_level", + 2 + ], + "paint": { + "line-color": "#707070", + "line-width": 0.5, + "line-dasharray": [ + 3, + 2 + ] + } + }, + { + "id": "roads_bridges_other_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "in", + "pmap:kind", + "other", + "path" + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 14, + 0, + 20, + 7 + ] + } + }, + { + "id": "roads_bridges_link_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "==", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 13.5, + 1, + 18, + 11 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 12, + 0, + 12.5, + 1.5 + ] + } + }, + { + "id": "roads_bridges_minor_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "minor_road" + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 11, + 0, + 12.5, + 0.5, + 15, + 2, + 18, + 11 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 13.5, + 0.8 + ] + } + }, + { + "id": "roads_bridges_medium_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "medium_road" + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 12, + 1.2, + 15, + 3, + 18, + 13 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 10, + 0, + 10.5, + 1.5 + ] + } + }, + { + "id": "roads_bridges_major_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "major_road" + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 7.5, + 0.5, + 18, + 10 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 9, + 0, + 9.5, + 1.5 + ] + } + }, + { + "id": "roads_bridges_other", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "in", + "pmap:kind", + "other", + "path" + ] + ], + "paint": { + "line-color": "#1f1f1f", + "line-dasharray": [ + 2, + 1 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 14, + 0, + 20, + 7 + ] + } + }, + { + "id": "roads_bridges_minor", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "minor_road" + ] + ], + "paint": { + "line-color": "#1f1f1f", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 11, + 0, + 12.5, + 0.5, + 15, + 2, + 18, + 11 + ] + } + }, + { + "id": "roads_bridges_link", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "==", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#1f1f1f", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 13, + 0, + 13.5, + 1, + 18, + 11 + ] + } + }, + { + "id": "roads_bridges_medium", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "medium_road" + ] + ], + "paint": { + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 12, + 1.2, + 15, + 3, + 18, + 13 + ] + } + }, + { + "id": "roads_bridges_major", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "major_road" + ] + ], + "paint": { + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 6, + 0, + 12, + 1.6, + 15, + 3, + 18, + 13 + ] + } + }, + { + "id": "roads_bridges_highway_casing", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 12, + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "highway" + ], + [ + "!=", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#141414", + "line-gap-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 3, + 0, + 3.5, + 0.5, + 18, + 15 + ], + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 7, + 0, + 7.5, + 1, + 20, + 15 + ] + } + }, + { + "id": "roads_bridges_highway", + "type": "line", + "source": "protomaps", + "source-layer": "roads", + "filter": [ + "all", + [ + ">", + "pmap:level", + 0 + ], + [ + "==", + "pmap:kind", + "highway" + ], + [ + "!=", + "pmap:link", + 1 + ] + ], + "paint": { + "line-color": "#292929", + "line-width": [ + "interpolate", + [ + "exponential", + 1.6 + ], + [ + "zoom" + ], + 3, + 0, + 6, + 1.1, + 12, + 1.6, + 15, + 5, + 18, + 15 + ] + } + }, + { + "id": "physical_line_waterway_label", + "type": "symbol", + "source": "protomaps", + "source-layer": "physical_line", + "minzoom": 13, + "filter": [ + "all", + [ + "in", + "pmap:kind", + "river", + "stream" + ] + ], + "layout": { + "symbol-placement": "line", + "text-font": [ + "Noto Sans Regular" + ], + "text-field": [ + "get", + "name" + ], + "text-size": 12, + "text-letter-spacing": 0.3 + }, + "paint": { + "text-color": "#707070" + } + }, + { + "id": "physical_point_peak", + "type": "symbol", + "source": "protomaps", + "source-layer": "physical_point", + "filter": [ + "any", + [ + "==", + "pmap:kind", + "peak" + ] + ], + "layout": { + "text-font": [ + "Noto Sans Italic" + ], + "text-field": [ + "get", + "name" + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 10, + 8, + 16, + 12 + ], + "text-letter-spacing": 0.1, + "text-max-width": 9 + }, + "paint": { + "text-color": "#707070", + "text-halo-width": 1.5 + } + }, + { + "id": "roads_labels_minor", + "type": "symbol", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 15, + "filter": [ + "any", + [ + "in", + "pmap:kind", + "minor_road", + "other", + "path" + ] + ], + "layout": { + "symbol-sort-key": [ + "get", + "pmap:min_zoom" + ], + "symbol-placement": "line", + "text-font": [ + "Noto Sans Regular" + ], + "text-field": [ + "get", + "name" + ], + "text-size": 12 + }, + "paint": { + "text-color": "#525252", + "text-halo-color": "#141414", + "text-halo-width": 2 + } + }, + { + "id": "physical_point_ocean", + "type": "symbol", + "source": "protomaps", + "source-layer": "physical_point", + "filter": [ + "any", + [ + "in", + "pmap:kind", + "sea", + "ocean", + "lake", + "water", + "bay", + "strait", + "fjord" + ] + ], + "layout": { + "text-font": [ + "Noto Sans Medium" + ], + "text-field": [ + "get", + "name" + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 3, + 10, + 10, + 12 + ], + "text-letter-spacing": 0.1, + "text-max-width": 9, + "text-transform": "uppercase" + }, + "paint": { + "text-color": "#707070" + } + }, + { + "id": "physical_point_lakes", + "type": "symbol", + "source": "protomaps", + "source-layer": "physical_point", + "filter": [ + "any", + [ + "in", + "pmap:kind", + "lake", + "water" + ] + ], + "layout": { + "text-font": [ + "Noto Sans Medium" + ], + "text-field": [ + "get", + "name" + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 3, + 0, + 6, + 12, + 10, + 12 + ], + "text-letter-spacing": 0.1, + "text-max-width": 9 + }, + "paint": { + "text-color": "#707070" + } + }, + { + "id": "roads_labels_major", + "type": "symbol", + "source": "protomaps", + "source-layer": "roads", + "minzoom": 11, + "filter": [ + "any", + [ + "in", + "pmap:kind", + "highway", + "major_road", + "medium_road" + ] + ], + "layout": { + "symbol-sort-key": [ + "get", + "pmap:min_zoom" + ], + "symbol-placement": "line", + "text-font": [ + "Noto Sans Regular" + ], + "text-field": [ + "get", + "name" + ], + "text-size": 12 + }, + "paint": { + "text-color": "#5c5c5c", + "text-halo-color": "#141414", + "text-halo-width": 2 + } + }, + { + "id": "places_subplace", + "type": "symbol", + "source": "protomaps", + "source-layer": "places", + "filter": [ + "==", + "pmap:kind", + "neighbourhood" + ], + "layout": { + "symbol-sort-key": [ + "get", + "pmap:min_zoom" + ], + "text-field": "{name}", + "text-font": [ + "Noto Sans Regular" + ], + "text-max-width": 7, + "text-letter-spacing": 0.1, + "text-padding": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 5, + 2, + 8, + 4, + 12, + 18, + 15, + 20 + ], + "text-size": [ + "interpolate", + [ + "exponential", + 1.2 + ], + [ + "zoom" + ], + 11, + 8, + 14, + 14, + 18, + 24 + ], + "text-transform": "uppercase" + }, + "paint": { + "text-color": "#5c5c5c", + "text-halo-color": "#141414", + "text-halo-width": 1.5 + } + }, + { + "id": "places_locality", + "type": "symbol", + "source": "protomaps", + "source-layer": "places", + "filter": [ + "==", + "pmap:kind", + "locality" + ], + "layout": { + "icon-image": [ + "step", + [ + "zoom" + ], + "townspot", + 8, + "" + ], + "icon-size": 0.7, + "text-field": "{name}", + "text-font": [ + "case", + [ + "<=", + [ + "get", + "pmap:min_zoom" + ], + 5 + ], + [ + "literal", + [ + "Noto Sans Medium" + ] + ], + [ + "literal", + [ + "Noto Sans Regular" + ] + ] + ], + "text-padding": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 5, + 3, + 8, + 7, + 12, + 11 + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 2, + [ + "case", + [ + "<", + [ + "get", + "pmap:population_rank" + ], + 13 + ], + 8, + [ + ">=", + [ + "get", + "pmap:population_rank" + ], + 13 + ], + 13, + 0 + ], + 4, + [ + "case", + [ + "<", + [ + "get", + "pmap:population_rank" + ], + 13 + ], + 10, + [ + ">=", + [ + "get", + "pmap:population_rank" + ], + 13 + ], + 15, + 0 + ], + 6, + [ + "case", + [ + "<", + [ + "get", + "pmap:population_rank" + ], + 12 + ], + 11, + [ + ">=", + [ + "get", + "pmap:population_rank" + ], + 12 + ], + 17, + 0 + ], + 8, + [ + "case", + [ + "<", + [ + "get", + "pmap:population_rank" + ], + 11 + ], + 11, + [ + ">=", + [ + "get", + "pmap:population_rank" + ], + 11 + ], + 18, + 0 + ], + 10, + [ + "case", + [ + "<", + [ + "get", + "pmap:population_rank" + ], + 9 + ], + 12, + [ + ">=", + [ + "get", + "pmap:population_rank" + ], + 9 + ], + 20, + 0 + ], + 15, + [ + "case", + [ + "<", + [ + "get", + "pmap:population_rank" + ], + 8 + ], + 12, + [ + ">=", + [ + "get", + "pmap:population_rank" + ], + 8 + ], + 22, + 0 + ] + ], + "icon-padding": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 0, + 0, + 8, + 4, + 10, + 8, + 12, + 6, + 22, + 2 + ], + "text-anchor": [ + "step", + [ + "zoom" + ], + "left", + 8, + "center" + ], + "text-radial-offset": 0.4 + }, + "paint": { + "text-color": "#999999", + "text-halo-color": "#141414", + "text-halo-width": 1 + } + }, + { + "id": "places_region", + "type": "symbol", + "source": "protomaps", + "source-layer": "places", + "filter": [ + "==", + "pmap:kind", + "region" + ], + "layout": { + "symbol-sort-key": [ + "get", + "pmap:min_zoom" + ], + "text-field": [ + "step", + [ + "zoom" + ], + [ + "get", + "name:short" + ], + 6, + [ + "get", + "name" + ] + ], + "text-font": [ + "Noto Sans Regular" + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 3, + 11, + 7, + 16 + ], + "text-radial-offset": 0.2, + "text-anchor": "center", + "text-transform": "uppercase" + }, + "paint": { + "text-color": "#3d3d3d", + "text-halo-color": "#141414", + "text-halo-width": 2 + } + }, + { + "id": "places_country", + "type": "symbol", + "source": "protomaps", + "source-layer": "places", + "filter": [ + "==", + "pmap:kind", + "country" + ], + "layout": { + "symbol-sort-key": [ + "get", + "pmap:min_zoom" + ], + "text-field": "{name}", + "text-font": [ + "Noto Sans Medium" + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 2, + [ + "case", + [ + "<", + [ + "get", + "pmap:population_rank" + ], + 10 + ], + 8, + [ + ">=", + [ + "get", + "pmap:population_rank" + ], + 10 + ], + 12, + 0 + ], + 6, + [ + "case", + [ + "<", + [ + "get", + "pmap:population_rank" + ], + 8 + ], + 10, + [ + ">=", + [ + "get", + "pmap:population_rank" + ], + 8 + ], + 18, + 0 + ], + 8, + [ + "case", + [ + "<", + [ + "get", + "pmap:population_rank" + ], + 7 + ], + 11, + [ + ">=", + [ + "get", + "pmap:population_rank" + ], + 7 + ], + 20, + 0 + ] + ], + "icon-padding": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 0, + 2, + 14, + 2, + 16, + 20, + 17, + 2, + 22, + 2 + ], + "text-transform": "uppercase" + }, + "paint": { + "text-color": "#707070" + } + } + ], + "id": "immich-map-dark" +} \ No newline at end of file diff --git a/data/styles/default/sprite.json b/data/styles/default/sprite.json new file mode 100644 index 0000000..adfe33f --- /dev/null +++ b/data/styles/default/sprite.json @@ -0,0 +1,611 @@ +{ + "airfield_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 50, + "y": 0 + }, + "airport_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 45, + "y": 36 + }, + "alcohol_shop_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 50, + "y": 54 + }, + "amusement_park_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 67, + "y": 0 + }, + "aquarium_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 84, + "y": 0 + }, + "art_gallery_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 101, + "y": 0 + }, + "attraction_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 118, + "y": 0 + }, + "bakery_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 64, + "y": 18 + }, + "bank_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 81, + "y": 18 + }, + "bar_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 98, + "y": 18 + }, + "beer_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 115, + "y": 18 + }, + "bicycle_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 62, + "y": 36 + }, + "bicycle_share_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 79, + "y": 36 + }, + "bus_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 96, + "y": 36 + }, + "cafe_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 113, + "y": 36 + }, + "campsite_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 67, + "y": 54 + }, + "car_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 84, + "y": 54 + }, + "castle_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 101, + "y": 54 + }, + "cemetery_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 118, + "y": 54 + }, + "cinema_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 0, + "y": 72 + }, + "circle_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 17, + "y": 72 + }, + "circle_stroked_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 34, + "y": 72 + }, + "clothing_store_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 51, + "y": 72 + }, + "college_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 68, + "y": 72 + }, + "dentist_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 85, + "y": 72 + }, + "doctor_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 102, + "y": 72 + }, + "dog_park_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 119, + "y": 72 + }, + "drinking_water_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 0, + "y": 89 + }, + "embassy_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 17, + "y": 89 + }, + "entrance_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 34, + "y": 89 + }, + "fast_food_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 51, + "y": 89 + }, + "ferry_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 68, + "y": 89 + }, + "fire_station_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 85, + "y": 89 + }, + "fuel_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 102, + "y": 89 + }, + "garden_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 119, + "y": 89 + }, + "golf_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 0, + "y": 106 + }, + "grocery_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 17, + "y": 106 + }, + "harbor_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 34, + "y": 106 + }, + "heliport_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 51, + "y": 106 + }, + "hospital_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 68, + "y": 106 + }, + "ice_cream_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 85, + "y": 106 + }, + "information_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 102, + "y": 106 + }, + "laundry_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 119, + "y": 106 + }, + "library_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 0, + "y": 123 + }, + "lodging_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 17, + "y": 123 + }, + "marker_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 34, + "y": 123 + }, + "monument_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 51, + "y": 123 + }, + "motorway_1": { + "height": 18, + "pixelRatio": 1, + "width": 18, + "x": 0, + "y": 0 + }, + "motorway_2": { + "height": 18, + "pixelRatio": 1, + "width": 25, + "x": 0, + "y": 18 + }, + "motorway_3": { + "height": 18, + "pixelRatio": 1, + "width": 32, + "x": 18, + "y": 0 + }, + "motorway_4": { + "height": 18, + "pixelRatio": 1, + "width": 39, + "x": 25, + "y": 18 + }, + "motorway_5": { + "height": 18, + "pixelRatio": 1, + "width": 45, + "x": 0, + "y": 36 + }, + "motorway_6": { + "height": 18, + "pixelRatio": 1, + "width": 50, + "x": 0, + "y": 54 + }, + "mountain_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 68, + "y": 123 + }, + "museum_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 85, + "y": 123 + }, + "music_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 102, + "y": 123 + }, + "park_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 119, + "y": 123 + }, + "pharmacy_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 136, + "y": 72 + }, + "picnic_site_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 153, + "y": 72 + }, + "place_of_worship_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 170, + "y": 72 + }, + "playground_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 187, + "y": 72 + }, + "police_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 204, + "y": 72 + }, + "post_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 221, + "y": 72 + }, + "prison_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 238, + "y": 72 + }, + "rail_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 255, + "y": 72 + }, + "rail_light_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 136, + "y": 89 + }, + "rail_metro_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 153, + "y": 89 + }, + "religious_christian_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 170, + "y": 89 + }, + "religious_jewish_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 187, + "y": 89 + }, + "religious_muslim_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 204, + "y": 89 + }, + "restaurant_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 221, + "y": 89 + }, + "rocket_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 238, + "y": 89 + }, + "school_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 255, + "y": 89 + }, + "shop_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 136, + "y": 106 + }, + "stadium_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 153, + "y": 106 + }, + "star_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 170, + "y": 106 + }, + "suitcase_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 187, + "y": 106 + }, + "swimming_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 204, + "y": 106 + }, + "theatre_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 221, + "y": 106 + }, + "toilet_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 238, + "y": 106 + }, + "town_hall_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 255, + "y": 106 + }, + "triangle_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 136, + "y": 123 + }, + "triangle_stroked_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 153, + "y": 123 + }, + "veterinary_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 170, + "y": 123 + }, + "volcano_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 187, + "y": 123 + }, + "wave": { + "height": 8, + "pixelRatio": 1, + "width": 16, + "x": 272, + "y": 72 + }, + "zoo_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 204, + "y": 123 + } +} \ No newline at end of file diff --git a/data/styles/default/sprite.png b/data/styles/default/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..cd24526cf6931f832a5cf6d111b4dee452acce43 GIT binary patch literal 14475 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", + "rank", + 25 + ] + ], + "layout": { + "text-padding": 2, + "text-font": [ + "Open Sans Semibold" + ], + "text-anchor": "top", + "icon-image": "{class}_11", + "text-field": "{name}", + "text-offset": [ + 0, + 0.6 + ], + "text-size": 12, + "text-max-width": 9 + }, + "paint": { + "text-halo-blur": 0.5, + "text-color": "#666", + "text-halo-width": 1, + "text-halo-color": "#ffffff" + } + }, + { + "id": "poi-level-2", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 15, + "filter": [ + "all", + [ + "==", + "$type", + "Point" + ], + [ + "all", + [ + "<=", + "rank", + 24 + ], + [ + ">=", + "rank", + 15 + ] + ] + ], + "layout": { + "text-padding": 2, + "text-font": [ + "Open Sans Semibold" + ], + "text-anchor": "top", + "icon-image": "{class}_11", + "text-field": "{name}", + "text-offset": [ + 0, + 0.6 + ], + "text-size": 12, + "text-max-width": 9 + }, + "paint": { + "text-halo-blur": 0.5, + "text-color": "#666", + "text-halo-width": 1, + "text-halo-color": "#ffffff" + } + }, + { + "id": "poi-level-1", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 14, + "filter": [ + "all", + [ + "==", + "$type", + "Point" + ], + [ + "all", + [ + "<=", + "rank", + 14 + ], + [ + "has", + "name" + ] + ] + ], + "layout": { + "text-padding": 2, + "text-font": [ + "Open Sans Semibold" + ], + "text-anchor": "top", + "icon-image": "{class}_11", + "text-field": "{name}", + "text-offset": [ + 0, + 0.6 + ], + "text-size": 12, + "text-max-width": 9 + }, + "paint": { + "text-halo-blur": 0.5, + "text-color": "#666", + "text-halo-width": 1, + "text-halo-color": "#ffffff" + } + }, + { + "id": "highway-name-path", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 15.5, + "filter": [ + "==", + "class", + "path" + ], + "layout": { + "text-size": { + "base": 1, + "stops": [ + [ + 13, + 12 + ], + [ + 14, + 13 + ] + ] + }, + "text-font": [ + "Open Sans Regular" + ], + "text-field": "{name}", + "symbol-placement": "line", + "text-rotation-alignment": "map" + }, + "paint": { + "text-halo-color": "#f8f4f0", + "text-color": "hsl(30, 23%, 62%)", + "text-halo-width": 0.5 + } + }, + { + "id": "highway-name-minor", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 15, + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "in", + "class", + "minor", + "service", + "track" + ] + ], + "layout": { + "text-size": { + "base": 1, + "stops": [ + [ + 13, + 12 + ], + [ + 14, + 13 + ] + ] + }, + "text-font": [ + "Open Sans Regular" + ], + "text-field": "{name}", + "symbol-placement": "line", + "text-rotation-alignment": "map" + }, + "paint": { + "text-halo-blur": 0.5, + "text-color": "#765", + "text-halo-width": 1 + } + }, + { + "id": "highway-name-major", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 12.2, + "filter": [ + "in", + "class", + "primary", + "secondary", + "tertiary", + "trunk" + ], + "layout": { + "text-size": { + "base": 1, + "stops": [ + [ + 13, + 12 + ], + [ + 14, + 13 + ] + ] + }, + "text-font": [ + "Open Sans Regular" + ], + "text-field": "{name}", + "symbol-placement": "line", + "text-rotation-alignment": "map" + }, + "paint": { + "text-halo-blur": 0.5, + "text-color": "#765", + "text-halo-width": 1 + } + }, + { + "id": "highway-shield", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 8, + "filter": [ + "all", + [ + "<=", + "ref_length", + 6 + ], + [ + "==", + "$type", + "LineString" + ] + ], + "layout": { + "text-size": 11, + "icon-image": "motorway_{ref_length}", + "icon-rotation-alignment": "viewport", + "symbol-spacing": 500, + "text-font": [ + "Open Sans Semibold" + ], + "symbol-placement": { + "base": 1, + "stops": [ + [ + 10, + "point" + ], + [ + 11, + "line" + ] + ] + }, + "text-rotation-alignment": "viewport", + "icon-size": 0.85, + "text-field": "{ref}" + }, + "paint": {} + }, + { + "id": "place-other", + "type": "symbol", + "metadata": { + "mapbox:group": "1444849242106.713" + }, + "source": "openmaptiles", + "source-layer": "place", + "filter": [ + "all", + [ + "!in", + "class", + "city", + "town", + "village" + ] + ], + "layout": { + "text-letter-spacing": 0.1, + "text-size": { + "base": 1.2, + "stops": [ + [ + 12, + 10 + ], + [ + 15, + 14 + ] + ] + }, + "text-font": [ + "Open Sans Bold" + ], + "text-field": "{name_en}", + "text-transform": "uppercase", + "text-max-width": 9 + }, + "paint": { + "text-color": "#633", + "text-halo-width": 1.2, + "text-halo-color": "rgba(255,255,255,0.8)" + } + }, + { + "id": "place-village", + "type": "symbol", + "metadata": { + "mapbox:group": "1444849242106.713" + }, + "source": "openmaptiles", + "source-layer": "place", + "filter": [ + "==", + "class", + "village" + ], + "layout": { + "text-font": [ + "Open Sans Regular" + ], + "text-size": { + "base": 1.2, + "stops": [ + [ + 10, + 12 + ], + [ + 15, + 22 + ] + ] + }, + "text-field": "{name_en}", + "text-max-width": 8 + }, + "paint": { + "text-color": "#333", + "text-halo-width": 1.2, + "text-halo-color": "rgba(255,255,255,0.8)" + } + }, + { + "id": "place-town", + "type": "symbol", + "metadata": { + "mapbox:group": "1444849242106.713" + }, + "source": "openmaptiles", + "source-layer": "place", + "filter": [ + "==", + "class", + "town" + ], + "layout": { + "text-font": [ + "Open Sans Regular" + ], + "text-size": { + "base": 1.2, + "stops": [ + [ + 10, + 14 + ], + [ + 15, + 24 + ] + ] + }, + "text-field": "{name_en}", + "text-max-width": 8 + }, + "paint": { + "text-color": "#333", + "text-halo-width": 1.2, + "text-halo-color": "rgba(255,255,255,0.8)" + } + }, + { + "id": "place-city", + "type": "symbol", + "metadata": { + "mapbox:group": "1444849242106.713" + }, + "source": "openmaptiles", + "source-layer": "place", + "filter": [ + "all", + [ + "!=", + "capital", + 2 + ], + [ + "==", + "class", + "city" + ] + ], + "layout": { + "text-font": [ + "Open Sans Semibold" + ], + "text-size": { + "base": 1.2, + "stops": [ + [ + 7, + 14 + ], + [ + 11, + 24 + ] + ] + }, + "text-field": "{name_en}", + "text-max-width": 8 + }, + "paint": { + "text-color": "#333", + "text-halo-width": 1.2, + "text-halo-color": "rgba(255,255,255,0.8)" + } + }, + { + "id": "place-city-capital", + "type": "symbol", + "metadata": { + "mapbox:group": "1444849242106.713" + }, + "source": "openmaptiles", + "source-layer": "place", + "filter": [ + "all", + [ + "==", + "capital", + 2 + ], + [ + "==", + "class", + "city" + ] + ], + "layout": { + "text-font": [ + "Open Sans Semibold" + ], + "text-size": { + "base": 1.2, + "stops": [ + [ + 7, + 14 + ], + [ + 11, + 24 + ] + ] + }, + "text-field": "{name_en}", + "text-max-width": 8, + "icon-image": "star_11", + "text-offset": [ + 0.4, + 0 + ], + "icon-size": 0.8, + "text-anchor": "left" + }, + "paint": { + "text-color": "#333", + "text-halo-width": 1.2, + "text-halo-color": "rgba(255,255,255,0.8)" + } + }, + { + "id": "place-country-3", + "type": "symbol", + "metadata": { + "mapbox:group": "1444849242106.713" + }, + "source": "openmaptiles", + "source-layer": "place", + "filter": [ + "all", + [ + "==", + "class", + "country" + ], + [ + ">=", + "rank", + 3 + ] + ], + "layout": { + "text-font": [ + "Open Sans Bold" + ], + "text-field": "{name_en}", + "text-size": { + "stops": [ + [ + 3, + 11 + ], + [ + 7, + 17 + ] + ] + }, + "text-transform": "uppercase", + "text-max-width": 6.25 + }, + "paint": { + "text-halo-blur": 1, + "text-color": "#334", + "text-halo-width": 2, + "text-halo-color": "rgba(255,255,255,0.8)" + } + }, + { + "id": "place-country-2", + "type": "symbol", + "metadata": { + "mapbox:group": "1444849242106.713" + }, + "source": "openmaptiles", + "source-layer": "place", + "filter": [ + "all", + [ + "==", + "class", + "country" + ], + [ + "==", + "rank", + 2 + ] + ], + "layout": { + "text-font": [ + "Open Sans Bold" + ], + "text-field": "{name_en}", + "text-size": { + "stops": [ + [ + 2, + 11 + ], + [ + 5, + 17 + ] + ] + }, + "text-transform": "uppercase", + "text-max-width": 6.25 + }, + "paint": { + "text-halo-blur": 1, + "text-color": "#334", + "text-halo-width": 2, + "text-halo-color": "rgba(255,255,255,0.8)" + } + }, + { + "id": "place-country-1", + "type": "symbol", + "metadata": { + "mapbox:group": "1444849242106.713" + }, + "source": "openmaptiles", + "source-layer": "place", + "filter": [ + "all", + [ + "==", + "class", + "country" + ], + [ + "==", + "rank", + 1 + ] + ], + "layout": { + "text-font": [ + "Open Sans Bold" + ], + "text-field": "{name_en}", + "text-size": { + "stops": [ + [ + 1, + 11 + ], + [ + 4, + 17 + ] + ] + }, + "text-transform": "uppercase", + "text-max-width": 6.25 + }, + "paint": { + "text-halo-blur": 1, + "text-color": "#334", + "text-halo-width": 2, + "text-halo-color": "rgba(255,255,255,0.8)" + } + }, + { + "id": "place-continent", + "type": "symbol", + "metadata": { + "mapbox:group": "1444849242106.713" + }, + "source": "openmaptiles", + "source-layer": "place", + "maxzoom": 1, + "filter": [ + "==", + "class", + "continent" + ], + "layout": { + "text-font": [ + "Open Sans Bold" + ], + "text-field": "{name_en}", + "text-size": 14, + "text-max-width": 6.25, + "text-transform": "uppercase" + }, + "paint": { + "text-halo-blur": 1, + "text-color": "#334", + "text-halo-width": 2, + "text-halo-color": "rgba(255,255,255,0.8)" + } + } + ] +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b1060d8 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,11 @@ +services: + tile-server: + image: maptiler/tileserver-gl:latest + container_name: tile-server + env_file: + - .env + volumes: + - ${DATA_DIR}:/data/ + ports: + - ${PORT}:8080 + command: ["--file", "${MBTILES_FILE}"] diff --git a/init.sh b/init.sh new file mode 100755 index 0000000..0cd7822 --- /dev/null +++ b/init.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +if ! command -v jq &> /dev/null; then + echo "jq is not installed. Installing..." + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + sudo apt update && sudo apt install -y jq || sudo yum install -y jq + elif [[ "$OSTYPE" == "darwin"* ]]; then + brew install jq + else + echo "Unsupported OS. Please install jq manually." + exit 1 + fi +fi + + +CURRENT_PATH=$(pwd) +DATA_PATH=${CURRENT_PATH}/data +echo "Current DATA_PATH: ($DATA_PATH)" +read -p "Enter a new data path or press Enter to use the default: " USER_PATH +DATA_PATH=${USER_PATH:-$DATA_PATH} +echo "Using path: ($DATA_PATH)" +sed -i "s|^DATA_DIR=.*|DATA_DIR=${DATA_PATH}|" .env + + +DEFAULT_PORT=$(cat .env | awk -F'=' '/^PORT=/ {print $2}') +read -p "Enter a new port or press Enter to use the current: ${DEFAULT_PORT} " USER_PORT +DEFAULT_PORT=${USER_PORT:-$DEFAULT_PORT} +echo "Using Port: ($DEFAULT_PORT)" +sed -i "s|^PORT=.*|PORT=${DEFAULT_PORT}|" .env + +echo -e "\nDownloading mbtiles json" +wget https://cloud.silklaasboer.nl/s/oy9YTccKp9Lqfpy/download/osm-2020-02-10-v3.11_europe_netherlands.mbtiles +mv osm-2020-02-10-v3.11_europe_netherlands.mbtiles $DATA_PATH + +FILES=($(find . -type f -name "*.mbtiles")) +if [ ${#FILES[@]} -eq 0 ]; then + echo "No .mbtiles files found!" + exit 1 +fi +FILENAMES=() +for file in "${FILES[@]}"; do + FILENAMES+=("$(basename "$file")") +done +echo "Select an MBTiles file:" +for i in "${!FILENAMES[@]}"; do + echo "$((i+1))) ${FILENAMES[$i]}" +done +read -p "Enter the number of your choice: " SELECTION +if ! [[ "$SELECTION" =~ ^[0-9]+$ ]] || [ "$SELECTION" -lt 1 ] || [ "$SELECTION" -gt "${#FILENAMES[@]}" ]; then + echo "Invalid selection!" + exit 1 +fi +MBTILES_FILE="${FILENAMES[$((SELECTION-1))]}" +sed -i "s|^MBTILES_FILE=.*|MBTILES_FILE=${MBTILES_FILE}|" .env +echo "Updated .env with MBTILES_FILE=${MBTILES_FILE}" + +CONFIG_FILE="data/config.json" +if [ ! -f "$CONFIG_FILE" ]; then + echo "Error: config.json not found!" + exit 1 +fi + +STYLES_PATH=$(jq -r '.options.paths.styles' "$CONFIG_FILE") +STYLE_FILES=($(jq -r '.styles[].style' "$CONFIG_FILE")) +FONTS_PATH=$(jq -r '.options.paths.fonts' "$CONFIG_FILE") + +MISSING_FILES=() +for file in "${STYLE_FILES[@]}"; do + ABSOLUTE_PATH="$DATA_PATH/$STYLES_PATH/$file" + + if [ ! -f "$ABSOLUTE_PATH" ]; then + MISSING_FILES+=("$ABSOLUTE_PATH") + fi +done + +if [ ${#MISSING_FILES[@]} -gt 0 ]; then + echo -e "\nMissing style files:" + for file in "${MISSING_FILES[@]}"; do + echo " - $file" + done + exit 1 +else + echo "All style files are present." +fi + +echo -e "\n Downloading fonts" +wget https://github.com/maptiler/tileserver-gl/releases/download/v1.3.0/test_data.zip +unzip test_data.zip +rm -rf test_data.zip +rm -rf styles +rm -f zurich_switzerland.mbtiles +rm -f config.json +mv fonts $DATA_PATH + +echo "Starting container" +sudo docker compose up -d tile-server \ No newline at end of file