diff --git a/web/.gitignore b/web/.gitignore
index cdd5d87..9ec2c47 100644
--- a/web/.gitignore
+++ b/web/.gitignore
@@ -1,6 +1,7 @@
node_modules
dist
dev-dist
+**/.DS_Store
public/pwa-*.png
public/maskable-icon-*.png
diff --git a/web/package-lock.json b/web/package-lock.json
index aceb795..37a7ed1 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -8,6 +8,9 @@
"name": "map.emfcamp.org",
"version": "1.0.0",
"license": "ISC",
+ "dependencies": {
+ "vite-plugin-render-svg": "^1.1.1"
+ },
"devDependencies": {
"@russss/maplibregl-layer-switcher": "^1.2.4",
"@turf/length": "^6.5.0",
@@ -1911,7 +1914,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"optional": true,
"os": [
"aix"
@@ -1927,7 +1929,6 @@
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -1943,7 +1944,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -1959,7 +1959,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -1975,7 +1974,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -1991,7 +1989,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -2007,7 +2004,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"freebsd"
@@ -2023,7 +2019,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"freebsd"
@@ -2039,7 +2034,6 @@
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2055,7 +2049,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2071,7 +2064,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2087,7 +2079,6 @@
"cpu": [
"loong64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2103,7 +2094,6 @@
"cpu": [
"mips64el"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2119,7 +2109,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2135,7 +2124,6 @@
"cpu": [
"riscv64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2151,7 +2139,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2167,7 +2154,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2183,7 +2169,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"netbsd"
@@ -2199,7 +2184,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"openbsd"
@@ -2215,7 +2199,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"sunos"
@@ -2231,7 +2214,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -2247,7 +2229,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -2263,7 +2244,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -2418,7 +2398,7 @@
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -2432,7 +2412,7 @@
"version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
@@ -2442,7 +2422,7 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=6.0.0"
}
@@ -2451,7 +2431,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=6.0.0"
}
@@ -2460,7 +2440,7 @@
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25"
@@ -2470,7 +2450,7 @@
"version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
@@ -2480,7 +2460,7 @@
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
- "dev": true
+ "devOptional": true
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
@@ -2575,7 +2555,6 @@
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -2588,7 +2567,6 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
"engines": {
"node": ">= 8"
}
@@ -2597,7 +2575,6 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -2606,6 +2583,208 @@
"node": ">= 8"
}
},
+ "node_modules/@resvg/resvg-js": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz",
+ "integrity": "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==",
+ "engines": {
+ "node": ">= 10"
+ },
+ "optionalDependencies": {
+ "@resvg/resvg-js-android-arm-eabi": "2.6.2",
+ "@resvg/resvg-js-android-arm64": "2.6.2",
+ "@resvg/resvg-js-darwin-arm64": "2.6.2",
+ "@resvg/resvg-js-darwin-x64": "2.6.2",
+ "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.2",
+ "@resvg/resvg-js-linux-arm64-gnu": "2.6.2",
+ "@resvg/resvg-js-linux-arm64-musl": "2.6.2",
+ "@resvg/resvg-js-linux-x64-gnu": "2.6.2",
+ "@resvg/resvg-js-linux-x64-musl": "2.6.2",
+ "@resvg/resvg-js-win32-arm64-msvc": "2.6.2",
+ "@resvg/resvg-js-win32-ia32-msvc": "2.6.2",
+ "@resvg/resvg-js-win32-x64-msvc": "2.6.2"
+ }
+ },
+ "node_modules/@resvg/resvg-js-android-arm-eabi": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz",
+ "integrity": "sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-android-arm64": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz",
+ "integrity": "sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-darwin-arm64": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz",
+ "integrity": "sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-darwin-x64": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz",
+ "integrity": "sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-linux-arm-gnueabihf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz",
+ "integrity": "sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-linux-arm64-gnu": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz",
+ "integrity": "sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-linux-arm64-musl": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz",
+ "integrity": "sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-linux-x64-gnu": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz",
+ "integrity": "sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-linux-x64-musl": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz",
+ "integrity": "sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-win32-arm64-msvc": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz",
+ "integrity": "sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-win32-ia32-msvc": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz",
+ "integrity": "sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-win32-x64-msvc": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz",
+ "integrity": "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/@rollup/plugin-node-resolve": {
"version": "15.2.3",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz",
@@ -2682,7 +2861,6 @@
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -2695,7 +2873,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"android"
@@ -2708,7 +2885,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -2721,7 +2897,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"darwin"
@@ -2734,7 +2909,6 @@
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2747,7 +2921,6 @@
"cpu": [
"arm"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2760,7 +2933,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2773,7 +2945,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2786,7 +2957,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2799,7 +2969,6 @@
"cpu": [
"riscv64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2812,7 +2981,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2825,7 +2993,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2838,7 +3005,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"linux"
@@ -2851,7 +3017,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -2864,7 +3029,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -2877,7 +3041,6 @@
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -3012,8 +3175,7 @@
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
},
"node_modules/@types/express": {
"version": "4.17.21",
@@ -3114,7 +3276,7 @@
"version": "20.12.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz",
"integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"undici-types": "~5.26.4"
}
@@ -3412,6 +3574,11 @@
"url": "https://github.com/sponsors/antfu"
}
},
+ "node_modules/@wasm-codecs/oxipng": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@wasm-codecs/oxipng/-/oxipng-1.0.1.tgz",
+ "integrity": "sha512-3+kFfX/nVvd96+HKNqX07QOQTMSTU9BMqnty58loVMnwFleORUII0guQh6o+qKv0k6Kl5OO1bsDWkWAO8p+N7w=="
+ },
"node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -3429,7 +3596,7 @@
"version": "8.11.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
- "dev": true,
+ "devOptional": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -3498,6 +3665,18 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
@@ -3738,6 +3917,17 @@
}
]
},
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
@@ -3801,7 +3991,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -3869,7 +4058,7 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
+ "devOptional": true
},
"node_modules/builtin-modules": {
"version": "3.3.0",
@@ -3985,6 +4174,40 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/chownr": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
@@ -4042,7 +4265,7 @@
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
+ "devOptional": true
},
"node_modules/common-tags": {
"version": "1.8.2",
@@ -4569,7 +4792,6 @@
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
"integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
- "dev": true,
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
@@ -4927,7 +5149,6 @@
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -4943,7 +5164,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -4968,7 +5188,6 @@
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
"integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
- "dev": true,
"dependencies": {
"reusify": "^1.0.4"
}
@@ -5017,7 +5236,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -5155,7 +5373,6 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@@ -5722,6 +5939,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-boolean-object": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
@@ -5820,7 +6048,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -5829,7 +6056,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -5859,7 +6085,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
"engines": {
"node": ">=0.12.0"
}
@@ -6372,7 +6597,6 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
"engines": {
"node": ">= 8"
}
@@ -6396,7 +6620,6 @@
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
"dependencies": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
@@ -6496,7 +6719,6 @@
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -6555,6 +6777,14 @@
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
"dev": true
},
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object-inspect": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
@@ -6750,14 +6980,12 @@
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
"engines": {
"node": ">=8.6"
},
@@ -6787,7 +7015,6 @@
"version": "8.4.38",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -6975,7 +7202,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -7074,6 +7300,17 @@
"node": ">= 6"
}
},
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
"node_modules/redom": {
"version": "3.29.1",
"resolved": "https://registry.npmjs.org/redom/-/redom-3.29.1.tgz",
@@ -7222,7 +7459,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -7248,7 +7484,6 @@
"version": "4.17.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz",
"integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==",
- "dev": true,
"dependencies": {
"@types/estree": "1.0.5"
},
@@ -7283,7 +7518,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -7698,7 +7932,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -7707,7 +7940,7 @@
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -7717,7 +7950,7 @@
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=0.10.0"
}
@@ -8022,7 +8255,7 @@
"version": "5.31.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz",
"integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
@@ -8068,7 +8301,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
@@ -8334,7 +8566,7 @@
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "dev": true
+ "devOptional": true
},
"node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
@@ -8504,7 +8736,6 @@
"version": "5.2.11",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz",
"integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==",
- "dev": true,
"dependencies": {
"esbuild": "^0.20.1",
"postcss": "^8.4.38",
@@ -8585,6 +8816,20 @@
}
}
},
+ "node_modules/vite-plugin-render-svg": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vite-plugin-render-svg/-/vite-plugin-render-svg-1.1.1.tgz",
+ "integrity": "sha512-c6tOjFzJgSUZSkXIqld+v4UhN9qD7e+66+8kHLhK3xbYu3o0v8Bv51qQ8m46yCBVkA9ntV5TAm++GFfbTX6z7g==",
+ "dependencies": {
+ "@resvg/resvg-js": "^2.6.0",
+ "@wasm-codecs/oxipng": "^1.0.1",
+ "chokidar": "^3.5.3",
+ "fast-glob": "^3.3.2"
+ },
+ "peerDependencies": {
+ "vite": ">2.0.0-0"
+ }
+ },
"node_modules/vt-pbf": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz",
diff --git a/web/package.json b/web/package.json
index a6a958d..eb25bcd 100644
--- a/web/package.json
+++ b/web/package.json
@@ -50,5 +50,8 @@
"vite-plugin-pwa": "^0.19.2",
"workbox-core": "^7.0.0",
"workbox-window": "^7.0.0"
+ },
+ "dependencies": {
+ "vite-plugin-render-svg": "^1.1.1"
}
}
diff --git a/web/public/fonts/Raleway SemiBold/0-255.pbf b/web/public/fonts/Raleway SemiBold/0-255.pbf
new file mode 100644
index 0000000..3ce98a1
Binary files /dev/null and b/web/public/fonts/Raleway SemiBold/0-255.pbf differ
diff --git a/web/src/icons/bar.svg b/web/src/icons/bar.svg
new file mode 100644
index 0000000..9d49bf9
--- /dev/null
+++ b/web/src/icons/bar.svg
@@ -0,0 +1,28 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/bus-stop.svg b/web/src/icons/bus-stop.svg
new file mode 100644
index 0000000..3993447
--- /dev/null
+++ b/web/src/icons/bus-stop.svg
@@ -0,0 +1,36 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/bus.svg b/web/src/icons/bus.svg
new file mode 100644
index 0000000..5b6fb6d
--- /dev/null
+++ b/web/src/icons/bus.svg
@@ -0,0 +1,95 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/bush-pale.svg b/web/src/icons/bush-pale.svg
new file mode 100644
index 0000000..030ebcc
--- /dev/null
+++ b/web/src/icons/bush-pale.svg
@@ -0,0 +1,45 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/bush.svg b/web/src/icons/bush.svg
new file mode 100644
index 0000000..167c86a
--- /dev/null
+++ b/web/src/icons/bush.svg
@@ -0,0 +1,45 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/camping.svg b/web/src/icons/camping.svg
new file mode 100644
index 0000000..87a22cf
--- /dev/null
+++ b/web/src/icons/camping.svg
@@ -0,0 +1,34 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/golf-buggy.svg b/web/src/icons/golf-buggy.svg
new file mode 100644
index 0000000..ad02a8e
--- /dev/null
+++ b/web/src/icons/golf-buggy.svg
@@ -0,0 +1,70 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/grass-pale.svg b/web/src/icons/grass-pale.svg
new file mode 100644
index 0000000..dd3db51
--- /dev/null
+++ b/web/src/icons/grass-pale.svg
@@ -0,0 +1,43 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/grass.svg b/web/src/icons/grass.svg
new file mode 100644
index 0000000..cba5f21
--- /dev/null
+++ b/web/src/icons/grass.svg
@@ -0,0 +1,43 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/no-access-pale.svg b/web/src/icons/no-access-pale.svg
new file mode 100644
index 0000000..423076c
--- /dev/null
+++ b/web/src/icons/no-access-pale.svg
@@ -0,0 +1,17 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/no-access.svg b/web/src/icons/no-access.svg
new file mode 100644
index 0000000..0abc62f
--- /dev/null
+++ b/web/src/icons/no-access.svg
@@ -0,0 +1,17 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/parking.svg b/web/src/icons/parking.svg
new file mode 100644
index 0000000..bbf164a
--- /dev/null
+++ b/web/src/icons/parking.svg
@@ -0,0 +1,44 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/shower.svg b/web/src/icons/shower.svg
new file mode 100644
index 0000000..6ebdf04
--- /dev/null
+++ b/web/src/icons/shower.svg
@@ -0,0 +1,91 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/telehandler.svg b/web/src/icons/telehandler.svg
new file mode 100644
index 0000000..abb3602
--- /dev/null
+++ b/web/src/icons/telehandler.svg
@@ -0,0 +1,564 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/toilet.svg b/web/src/icons/toilet.svg
new file mode 100644
index 0000000..6048c8d
--- /dev/null
+++ b/web/src/icons/toilet.svg
@@ -0,0 +1,27 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/tree.svg b/web/src/icons/tree.svg
new file mode 100644
index 0000000..d4d05a5
--- /dev/null
+++ b/web/src/icons/tree.svg
@@ -0,0 +1,72 @@
+
+
+
+
diff --git a/web/src/icons/water pale.svg b/web/src/icons/water pale.svg
new file mode 100644
index 0000000..cba63d6
--- /dev/null
+++ b/web/src/icons/water pale.svg
@@ -0,0 +1,39 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/water-point.svg b/web/src/icons/water-point.svg
new file mode 100644
index 0000000..71f10d3
--- /dev/null
+++ b/web/src/icons/water-point.svg
@@ -0,0 +1,22 @@
+
+
\ No newline at end of file
diff --git a/web/src/icons/water.svg b/web/src/icons/water.svg
new file mode 100644
index 0000000..1019800
--- /dev/null
+++ b/web/src/icons/water.svg
@@ -0,0 +1,39 @@
+
+
\ No newline at end of file
diff --git a/web/src/index.ts b/web/src/index.ts
index ebdb44f..7d8837e 100644
--- a/web/src/index.ts
+++ b/web/src/index.ts
@@ -1,7 +1,7 @@
import './index.css'
import { registerSW } from 'virtual:pwa-register'
import maplibregl from 'maplibre-gl'
-import map_style from './map_style.ts'
+import map_style from './style/map_style.ts'
import Marker from './marker'
import LayerSwitcher from '@russss/maplibregl-layer-switcher'
import URLHash from '@russss/maplibregl-layer-switcher/urlhash'
@@ -11,6 +11,7 @@ import VillagesEditor from './villages'
import { roundPosition } from './util'
import InstallControl from './installcontrol'
import ExportControl from './export/export'
+import { manifest } from 'virtual:render-svg'
if (import.meta.env.DEV) {
map_style.sources.villages.data = 'http://localhost:2342/api/villages.geojson'
@@ -18,6 +19,30 @@ if (import.meta.env.DEV) {
map_style.glyphs = 'http://localhost:8080/fonts/{fontstack}/{range}.pbf'
}
+async function loadIcons(map: maplibregl.Map) {
+ const ratio = Math.min(Math.round(window.devicePixelRatio), 2)
+ const icons = manifest[ratio.toString()]
+
+ const images = ['camping', 'no-access', 'water']
+
+ Promise.all(
+ images
+ .map((image) => async () => {
+ const img = await map.loadImage(icons[image])
+ map.addImage(image, img.data, { pixelRatio: ratio })
+ })
+ .map((f) => f())
+ )
+ /*
+ const sdfs = ['parking']
+
+ for (const sdf of sdfs) {
+ const img = await map.loadImage(`/sdf/${sdf}.png`)
+ map.addImage(sdf, img.data, { sdf: true })
+ }
+ */
+}
+
class EventMap {
layers: Record = {
Background: 'background_',
@@ -57,6 +82,7 @@ class EventMap {
dragRotate: false,
})
)
+ loadIcons(this.map)
this.map.touchZoomRotate.disableRotation()
diff --git a/web/src/map_style.ts b/web/src/map_style.ts
deleted file mode 100644
index bdffd72..0000000
--- a/web/src/map_style.ts
+++ /dev/null
@@ -1,2335 +0,0 @@
-export default {
- version: 8,
- name: 'EMF',
- center: [-2.3784, 52.0411],
- zoom: 16,
- bearing: 0,
- pitch: 0,
- sources: {
- openmaptiles: {
- type: 'vector',
- url: 'https://api.maptiler.com/tiles/v3/tiles.json?key=iiaOS0kq1MPr2LlHPTSa',
- },
- site_plan: {
- type: 'vector',
- url: 'https://map.emfcamp.org/capabilities/buildmap',
- },
- villages: {
- type: 'geojson',
- data: 'https://www.emfcamp.org/api/villages.geojson',
- },
- slope: {
- type: 'raster',
- tiles: ['https://map.emfcamp.org/data/slope/{z}/{x}/{y}'],
- attribution: 'Elevation data © Environment Agency 2022. All rights reserved.',
- },
- hillshade: {
- type: 'raster',
- tiles: ['https://map.emfcamp.org/data/hillshade/{z}/{x}/{y}'],
- attribution: 'Elevation data © Environment Agency 2022. All rights reserved.',
- },
- ortho: {
- type: 'raster',
- tiles: ['https://map.emfcamp.org/data/ortho/{z}/{x}/{y}'],
- },
- },
- sprite: 'https://openmaptiles.github.io/positron-gl-style/sprite',
- glyphs: 'https://map.emfcamp.org/fonts/{fontstack}/{range}.pbf',
- layers: [
- {
- id: 'background',
- type: 'background',
- paint: {
- 'background-color': 'rgba(240, 247, 240, 1)',
- },
- },
- {
- id: 'water',
- type: 'fill',
- source: 'openmaptiles',
- 'source-layer': 'water',
- filter: ['==', '$type', 'Polygon'],
- layout: {
- visibility: 'visible',
- },
- paint: {
- 'fill-color': 'rgb(194, 200, 202)',
- 'fill-antialias': true,
- },
- },
- {
- id: 'landcover_ice_shelf',
- type: 'fill',
- source: 'openmaptiles',
- 'source-layer': 'landcover',
- maxzoom: 8,
- filter: ['all', ['==', '$type', 'Polygon'], ['==', 'subclass', 'ice_shelf']],
- layout: {
- visibility: 'visible',
- },
- paint: {
- 'fill-color': 'hsl(0, 0%, 98%)',
- 'fill-opacity': 0.7,
- },
- },
- {
- id: 'landcover_glacier',
- type: 'fill',
- source: 'openmaptiles',
- 'source-layer': 'landcover',
- maxzoom: 8,
- filter: ['all', ['==', '$type', 'Polygon'], ['==', 'subclass', 'glacier']],
- layout: {
- visibility: 'visible',
- },
- paint: {
- 'fill-color': 'hsl(0, 0%, 98%)',
- 'fill-opacity': {
- base: 1,
- stops: [
- [0, 1],
- [8, 0.5],
- ],
- },
- },
- },
- {
- id: 'landuse_residential',
- type: 'fill',
- source: 'openmaptiles',
- 'source-layer': 'landuse',
- maxzoom: 16,
- filter: ['all', ['==', '$type', 'Polygon'], ['==', 'class', 'residential']],
- layout: {
- visibility: 'visible',
- },
- paint: {
- 'fill-color': 'rgb(234, 234, 230)',
- 'fill-opacity': {
- base: 0.6,
- stops: [
- [8, 0.8],
- [9, 0.6],
- ],
- },
- },
- },
- {
- id: 'waterway',
- type: 'line',
- source: 'openmaptiles',
- 'source-layer': 'waterway',
- filter: ['all', ['==', '$type', 'LineString']],
- layout: {
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'hsl(195, 17%, 78%)',
- },
- },
- {
- id: 'water_name',
- type: 'symbol',
- source: 'openmaptiles',
- 'source-layer': 'water_name',
- filter: ['==', '$type', 'LineString'],
- layout: {
- 'text-field': '{name:latin}\n{name:nonlatin}',
- 'symbol-placement': 'line',
- 'text-rotation-alignment': 'map',
- 'symbol-spacing': 500,
- 'text-font': ['Open Sans Regular'],
- 'text-size': 12,
- },
- paint: {
- 'text-color': 'rgb(157,169,177)',
- 'text-halo-color': 'rgb(242,243,240)',
- 'text-halo-width': 1,
- 'text-halo-blur': 1,
- },
- },
- {
- id: 'building',
- type: 'fill',
- source: 'openmaptiles',
- 'source-layer': 'building',
- minzoom: 12,
- paint: {
- 'fill-color': 'rgb(234, 234, 229)',
- 'fill-outline-color': 'rgb(219, 219, 218)',
- 'fill-antialias': true,
- },
- },
- {
- id: 'tunnel_motorway_casing',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 6,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['all', ['==', 'brunnel', 'tunnel'], ['==', 'class', 'motorway']],
- ],
- layout: {
- 'line-cap': 'butt',
- 'line-join': 'miter',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'rgb(213, 213, 213)',
- 'line-width': {
- base: 1.4,
- stops: [
- [5.8, 0],
- [6, 3],
- [20, 40],
- ],
- },
- 'line-opacity': 1,
- },
- },
- {
- id: 'tunnel_motorway_inner',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 6,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['all', ['==', 'brunnel', 'tunnel'], ['==', 'class', 'motorway']],
- ],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'rgb(234,234,234)',
- 'line-width': {
- base: 1.4,
- stops: [
- [4, 2],
- [6, 1.3],
- [20, 30],
- ],
- },
- },
- },
- {
- id: 'aeroway-taxiway',
- type: 'line',
- metadata: {
- 'mapbox:group': '1444849345966.4436',
- },
- source: 'openmaptiles',
- 'source-layer': 'aeroway',
- minzoom: 12,
- filter: ['all', ['in', 'class', 'taxiway']],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'hsl(0, 0%, 88%)',
- 'line-width': {
- base: 1.55,
- stops: [
- [13, 1.8],
- [20, 20],
- ],
- },
- 'line-opacity': 1,
- },
- },
- {
- id: 'aeroway-runway-casing',
- type: 'line',
- metadata: {
- 'mapbox:group': '1444849345966.4436',
- },
- source: 'openmaptiles',
- 'source-layer': 'aeroway',
- minzoom: 11,
- filter: ['all', ['in', 'class', 'runway']],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'hsl(0, 0%, 88%)',
- 'line-width': {
- base: 1.5,
- stops: [
- [11, 6],
- [17, 55],
- ],
- },
- 'line-opacity': 1,
- },
- },
- {
- id: 'aeroway-area',
- type: 'fill',
- metadata: {
- 'mapbox:group': '1444849345966.4436',
- },
- source: 'openmaptiles',
- 'source-layer': 'aeroway',
- minzoom: 4,
- filter: ['all', ['==', '$type', 'Polygon'], ['in', 'class', 'runway', 'taxiway']],
- layout: {
- visibility: 'visible',
- },
- paint: {
- 'fill-opacity': {
- base: 1,
- stops: [
- [13, 0],
- [14, 1],
- ],
- },
- 'fill-color': 'rgba(255, 255, 255, 1)',
- },
- },
- {
- id: 'aeroway-runway',
- type: 'line',
- metadata: {
- 'mapbox:group': '1444849345966.4436',
- },
- source: 'openmaptiles',
- 'source-layer': 'aeroway',
- minzoom: 11,
- maxzoom: 24,
- filter: ['all', ['in', 'class', 'runway'], ['==', '$type', 'LineString']],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'rgba(255, 255, 255, 1)',
- 'line-width': {
- base: 1.5,
- stops: [
- [11, 4],
- [17, 50],
- ],
- },
- 'line-opacity': 1,
- },
- },
- {
- id: 'highway_minor',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 8,
- filter: ['all', ['==', '$type', 'LineString'], ['in', 'class', 'minor', 'service', 'track']],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'hsl(0, 0%, 88%)',
- 'line-width': {
- base: 1.55,
- stops: [
- [13, 1.8],
- [20, 20],
- ],
- },
- 'line-opacity': 0.9,
- },
- },
- {
- id: 'highway_major_casing',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 11,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['in', 'class', 'primary', 'secondary', 'tertiary', 'trunk'],
- ],
- layout: {
- 'line-cap': 'butt',
- 'line-join': 'miter',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'rgb(213, 213, 213)',
- 'line-dasharray': [12, 0],
- 'line-width': {
- base: 1.3,
- stops: [
- [10, 3],
- [20, 23],
- ],
- },
- },
- },
- {
- id: 'highway_major_inner',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 11,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['in', 'class', 'primary', 'secondary', 'tertiary', 'trunk'],
- ],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- visibility: 'visible',
- },
- paint: {
- 'line-color': '#fff',
- 'line-width': {
- base: 1.3,
- stops: [
- [10, 2],
- [20, 20],
- ],
- },
- },
- },
- {
- id: 'highway_major_subtle',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- maxzoom: 11,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['in', 'class', 'primary', 'secondary', 'tertiary', 'trunk'],
- ],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'hsla(0, 0%, 85%, 0.69)',
- 'line-width': 2,
- },
- },
- {
- id: 'highway_motorway_casing',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 6,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['all', ['!in', 'brunnel', 'bridge', 'tunnel'], ['==', 'class', 'motorway']],
- ],
- layout: {
- 'line-cap': 'butt',
- 'line-join': 'miter',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'rgb(213, 213, 213)',
- 'line-width': {
- base: 1.4,
- stops: [
- [5.8, 0],
- [6, 3],
- [20, 40],
- ],
- },
- 'line-dasharray': [2, 0],
- 'line-opacity': 1,
- },
- },
- {
- id: 'highway_motorway_inner',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 6,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['all', ['!in', 'brunnel', 'bridge', 'tunnel'], ['==', 'class', 'motorway']],
- ],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- visibility: 'visible',
- },
- paint: {
- 'line-color': {
- base: 1,
- stops: [
- [5.8, 'hsla(0, 0%, 85%, 0.53)'],
- [6, '#fff'],
- ],
- },
- 'line-width': {
- base: 1.4,
- stops: [
- [4, 2],
- [6, 1.3],
- [20, 30],
- ],
- },
- },
- },
- {
- id: 'highway_motorway_subtle',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- maxzoom: 6,
- filter: ['all', ['==', '$type', 'LineString'], ['==', 'class', 'motorway']],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'hsla(0, 0%, 85%, 0.53)',
- 'line-width': {
- base: 1.4,
- stops: [
- [4, 2],
- [6, 1.3],
- ],
- },
- },
- },
- {
- id: 'railway_transit',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 16,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['all', ['==', 'class', 'transit'], ['!in', 'brunnel', 'tunnel']],
- ],
- layout: {
- visibility: 'visible',
- 'line-join': 'round',
- },
- paint: {
- 'line-color': '#dddddd',
- 'line-width': 3,
- },
- },
- {
- id: 'railway_transit_dashline',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 16,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['all', ['==', 'class', 'transit'], ['!in', 'brunnel', 'tunnel']],
- ],
- layout: {
- visibility: 'visible',
- 'line-join': 'round',
- },
- paint: {
- 'line-color': '#fafafa',
- 'line-width': 2,
- 'line-dasharray': [3, 3],
- },
- },
- {
- id: 'railway_service',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 16,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['all', ['==', 'class', 'rail'], ['has', 'service']],
- ],
- layout: {
- visibility: 'visible',
- 'line-join': 'round',
- },
- paint: {
- 'line-color': '#dddddd',
- 'line-width': 3,
- },
- },
- {
- id: 'railway_service_dashline',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 16,
- filter: ['all', ['==', '$type', 'LineString'], ['==', 'class', 'rail'], ['has', 'service']],
- layout: {
- visibility: 'visible',
- 'line-join': 'round',
- },
- paint: {
- 'line-color': '#fafafa',
- 'line-width': 2,
- 'line-dasharray': [3, 3],
- },
- },
- {
- id: 'railway',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 13,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['all', ['!has', 'service'], ['==', 'class', 'rail']],
- ],
- layout: {
- visibility: 'visible',
- 'line-join': 'round',
- },
- paint: {
- 'line-color': '#dddddd',
- 'line-width': {
- base: 1.3,
- stops: [
- [16, 3],
- [20, 7],
- ],
- },
- },
- },
- {
- id: 'railway_dashline',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 13,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['all', ['!has', 'service'], ['==', 'class', 'rail']],
- ],
- layout: {
- visibility: 'visible',
- 'line-join': 'round',
- },
- paint: {
- 'line-color': '#fafafa',
- 'line-width': {
- base: 1.3,
- stops: [
- [16, 2],
- [20, 6],
- ],
- },
- 'line-dasharray': [3, 3],
- },
- },
- {
- id: 'highway_motorway_bridge_casing',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 6,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['all', ['==', 'brunnel', 'bridge'], ['==', 'class', 'motorway']],
- ],
- layout: {
- 'line-cap': 'butt',
- 'line-join': 'miter',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'rgb(213, 213, 213)',
- 'line-width': {
- base: 1.4,
- stops: [
- [5.8, 0],
- [6, 5],
- [20, 45],
- ],
- },
- 'line-dasharray': [2, 0],
- 'line-opacity': 1,
- },
- },
- {
- id: 'highway_motorway_bridge_inner',
- type: 'line',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation',
- minzoom: 6,
- filter: [
- 'all',
- ['==', '$type', 'LineString'],
- ['all', ['==', 'brunnel', 'bridge'], ['==', 'class', 'motorway']],
- ],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- visibility: 'visible',
- },
- paint: {
- 'line-color': {
- base: 1,
- stops: [
- [5.8, 'hsla(0, 0%, 85%, 0.53)'],
- [6, '#fff'],
- ],
- },
- 'line-width': {
- base: 1.4,
- stops: [
- [4, 2],
- [6, 1.3],
- [20, 30],
- ],
- },
- },
- },
- {
- id: 'highway_name_motorway',
- type: 'symbol',
- metadata: {
- 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
- },
- source: 'openmaptiles',
- 'source-layer': 'transportation_name',
- filter: ['all', ['==', '$type', 'LineString'], ['==', 'class', 'motorway']],
- layout: {
- 'text-size': 10,
- 'symbol-spacing': 350,
- 'text-font': ['Open Sans Regular'],
- 'symbol-placement': 'line',
- visibility: 'visible',
- 'text-rotation-alignment': 'viewport',
- 'text-pitch-alignment': 'viewport',
- 'text-field': '{ref}',
- },
- paint: {
- 'text-color': 'rgb(117, 129, 145)',
- 'text-halo-color': 'hsl(0, 0%, 100%)',
- 'text-translate': [0, 2],
- 'text-halo-width': 1,
- 'text-halo-blur': 1,
- },
- },
- {
- id: 'boundary_state',
- type: 'line',
- metadata: {
- 'mapbox:group': 'a14c9607bc7954ba1df7205bf660433f',
- },
- source: 'openmaptiles',
- 'source-layer': 'boundary',
- filter: ['==', 'admin_level', 4],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- visibility: 'visible',
- },
- paint: {
- 'line-color': 'rgb(230, 204, 207)',
- 'line-width': {
- base: 1.3,
- stops: [
- [3, 1],
- [22, 15],
- ],
- },
- 'line-blur': 0.4,
- 'line-dasharray': [2, 2],
- 'line-opacity': 1,
- },
- },
- {
- id: 'boundary_country',
- type: 'line',
- metadata: {
- 'mapbox:group': 'a14c9607bc7954ba1df7205bf660433f',
- },
- source: 'openmaptiles',
- 'source-layer': 'boundary',
- filter: ['==', 'admin_level', 2],
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- },
- paint: {
- 'line-color': 'rgb(230, 204, 207)',
- 'line-width': {
- base: 1.1,
- stops: [
- [3, 1],
- [22, 20],
- ],
- },
- 'line-blur': {
- base: 1,
- stops: [
- [0, 0.4],
- [22, 4],
- ],
- },
- 'line-opacity': 1,
- },
- },
- {
- id: 'place_other',
- type: 'symbol',
- metadata: {
- 'mapbox:group': '101da9f13b64a08fa4b6ac1168e89e5f',
- },
- source: 'openmaptiles',
- 'source-layer': 'place',
- maxzoom: 14,
- filter: [
- 'all',
- ['in', 'class', 'continent', 'hamlet', 'neighbourhood', 'isolated_dwelling'],
- ['==', '$type', 'Point'],
- ],
- layout: {
- 'text-size': 10,
- 'text-transform': 'uppercase',
- 'text-font': ['Open Sans Regular'],
- 'text-justify': 'center',
- visibility: 'visible',
- 'text-offset': [0.5, 0],
- 'text-anchor': 'center',
- 'text-field': '{name:latin}\n{name:nonlatin}',
- },
- paint: {
- 'text-color': 'rgb(117, 129, 145)',
- 'text-halo-color': 'rgb(242,243,240)',
- 'text-halo-width': 1,
- 'text-halo-blur': 1,
- },
- },
- {
- id: 'place_suburb',
- type: 'symbol',
- metadata: {
- 'mapbox:group': '101da9f13b64a08fa4b6ac1168e89e5f',
- },
- source: 'openmaptiles',
- 'source-layer': 'place',
- maxzoom: 15,
- filter: ['all', ['==', '$type', 'Point'], ['==', 'class', 'suburb']],
- layout: {
- 'text-size': 10,
- 'text-transform': 'uppercase',
- 'text-font': ['Open Sans Regular'],
- 'text-justify': 'center',
- visibility: 'visible',
- 'text-offset': [0.5, 0],
- 'text-anchor': 'center',
- 'text-field': '{name:latin}\n{name:nonlatin}',
- },
- paint: {
- 'text-color': 'rgb(117, 129, 145)',
- 'text-halo-color': 'rgb(242,243,240)',
- 'text-halo-width': 1,
- 'text-halo-blur': 1,
- },
- },
- {
- id: 'place_village',
- type: 'symbol',
- metadata: {
- 'mapbox:group': '101da9f13b64a08fa4b6ac1168e89e5f',
- },
- source: 'openmaptiles',
- 'source-layer': 'place',
- maxzoom: 14,
- filter: ['all', ['==', '$type', 'Point'], ['==', 'class', 'village']],
- layout: {
- 'text-size': 10,
- 'text-transform': 'uppercase',
- 'text-font': ['Open Sans Regular'],
- 'text-justify': 'left',
- visibility: 'visible',
- 'text-offset': [0.5, 0.2],
- 'icon-size': 0.4,
- 'text-anchor': 'left',
- 'text-field': '{name:latin}\n{name:nonlatin}',
- },
- paint: {
- 'text-color': 'rgb(117, 129, 145)',
- 'text-halo-color': 'rgb(242,243,240)',
- 'text-halo-width': 1,
- 'text-halo-blur': 1,
- 'icon-opacity': 0.7,
- },
- },
- {
- id: 'place_town',
- type: 'symbol',
- metadata: {
- 'mapbox:group': '101da9f13b64a08fa4b6ac1168e89e5f',
- },
- source: 'openmaptiles',
- 'source-layer': 'place',
- maxzoom: 15,
- filter: ['all', ['==', '$type', 'Point'], ['==', 'class', 'town']],
- layout: {
- 'text-size': 10,
- 'icon-image': {
- base: 1,
- stops: [
- [0, 'circle-11'],
- [8, ''],
- ],
- },
- 'text-transform': 'uppercase',
- 'text-font': ['Open Sans Regular'],
- 'text-justify': 'left',
- visibility: 'visible',
- 'text-offset': [0.5, 0.2],
- 'icon-size': 0.4,
- 'text-anchor': {
- base: 1,
- stops: [
- [0, 'left'],
- [8, 'center'],
- ],
- },
- 'text-field': '{name:latin}\n{name:nonlatin}',
- },
- paint: {
- 'text-color': 'rgb(117, 129, 145)',
- 'text-halo-color': 'rgb(242,243,240)',
- 'text-halo-width': 1,
- 'text-halo-blur': 1,
- 'icon-opacity': 0.7,
- },
- },
- {
- id: 'place_city',
- type: 'symbol',
- metadata: {
- 'mapbox:group': '101da9f13b64a08fa4b6ac1168e89e5f',
- },
- source: 'openmaptiles',
- 'source-layer': 'place',
- maxzoom: 14,
- filter: [
- 'all',
- ['==', '$type', 'Point'],
- ['all', ['!=', 'capital', 2], ['==', 'class', 'city'], ['>', 'rank', 3]],
- ],
- layout: {
- 'text-size': 10,
- 'icon-image': {
- base: 1,
- stops: [
- [0, 'circle-11'],
- [8, ''],
- ],
- },
- 'text-transform': 'uppercase',
- 'text-font': ['Open Sans Regular'],
- 'text-justify': 'left',
- visibility: 'visible',
- 'text-offset': [0.5, 0.2],
- 'icon-size': 0.4,
- 'text-anchor': {
- base: 1,
- stops: [
- [0, 'left'],
- [8, 'center'],
- ],
- },
- 'text-field': '{name:latin}\n{name:nonlatin}',
- },
- paint: {
- 'text-color': 'rgb(117, 129, 145)',
- 'text-halo-color': 'rgb(242,243,240)',
- 'text-halo-width': 1,
- 'text-halo-blur': 1,
- 'icon-opacity': 0.7,
- },
- },
- {
- id: 'place_capital',
- type: 'symbol',
- metadata: {
- 'mapbox:group': '101da9f13b64a08fa4b6ac1168e89e5f',
- },
- source: 'openmaptiles',
- 'source-layer': 'place',
- maxzoom: 12,
- filter: ['all', ['==', '$type', 'Point'], ['all', ['==', 'capital', 2], ['==', 'class', 'city']]],
- layout: {
- 'text-size': 14,
- 'icon-image': {
- base: 1,
- stops: [
- [0, 'star-11'],
- [8, ''],
- ],
- },
- 'text-transform': 'uppercase',
- 'text-font': ['Open Sans Regular'],
- 'text-justify': 'left',
- visibility: 'visible',
- 'text-offset': [0.5, 0.2],
- 'icon-size': 1,
- 'text-anchor': {
- base: 1,
- stops: [
- [0, 'left'],
- [8, 'center'],
- ],
- },
- 'text-field': '{name:latin}\n{name:nonlatin}',
- },
- paint: {
- 'text-color': 'rgb(117, 129, 145)',
- 'text-halo-color': 'rgb(242,243,240)',
- 'text-halo-width': 1,
- 'text-halo-blur': 1,
- 'icon-opacity': 0.7,
- },
- },
- {
- id: 'place_city_large',
- type: 'symbol',
- metadata: {
- 'mapbox:group': '101da9f13b64a08fa4b6ac1168e89e5f',
- },
- source: 'openmaptiles',
- 'source-layer': 'place',
- maxzoom: 12,
- filter: [
- 'all',
- ['==', '$type', 'Point'],
- ['all', ['!=', 'capital', 2], ['<=', 'rank', 3], ['==', 'class', 'city']],
- ],
- layout: {
- 'text-size': 14,
- 'icon-image': {
- base: 1,
- stops: [
- [0, 'circle-11'],
- [8, ''],
- ],
- },
- 'text-transform': 'uppercase',
- 'text-font': ['Open Sans Regular'],
- 'text-justify': 'left',
- visibility: 'visible',
- 'text-offset': [0.5, 0.2],
- 'icon-size': 0.4,
- 'text-anchor': {
- base: 1,
- stops: [
- [0, 'left'],
- [8, 'center'],
- ],
- },
- 'text-field': '{name:latin}\n{name:nonlatin}',
- },
- paint: {
- 'text-color': 'rgb(117, 129, 145)',
- 'text-halo-color': 'rgb(242,243,240)',
- 'text-halo-width': 1,
- 'text-halo-blur': 1,
- 'icon-opacity': 0.7,
- },
- },
- {
- id: 'place_state',
- type: 'symbol',
- metadata: {
- 'mapbox:group': '101da9f13b64a08fa4b6ac1168e89e5f',
- },
- source: 'openmaptiles',
- 'source-layer': 'place',
- maxzoom: 12,
- filter: ['all', ['==', '$type', 'Point'], ['==', 'class', 'state']],
- layout: {
- visibility: 'visible',
- 'text-field': '{name:latin}\n{name:nonlatin}',
- 'text-font': ['Open Sans Regular'],
- 'text-transform': 'uppercase',
- 'text-size': 10,
- },
- paint: {
- 'text-color': 'rgb(113, 129, 144)',
- 'text-halo-color': 'rgb(242,243,240)',
- 'text-halo-width': 1,
- 'text-halo-blur': 1,
- },
- },
- {
- id: 'place_country_other',
- type: 'symbol',
- metadata: {
- 'mapbox:group': '101da9f13b64a08fa4b6ac1168e89e5f',
- },
- source: 'openmaptiles',
- 'source-layer': 'place',
- maxzoom: 8,
- filter: ['all', ['==', '$type', 'Point'], ['==', 'class', 'country'], ['!has', 'iso_a2']],
- layout: {
- visibility: 'visible',
- 'text-field': '{name:latin}',
- 'text-font': ['Open Sans Regular'],
- 'text-transform': 'uppercase',
- 'text-size': {
- base: 1,
- stops: [
- [0, 9],
- [6, 11],
- ],
- },
- },
- paint: {
- 'text-halo-width': 1.4,
- 'text-halo-color': 'rgba(236,236,234,0.7)',
- 'text-color': {
- base: 1,
- stops: [
- [3, 'rgb(157,169,177)'],
- [4, 'rgb(153, 153, 153)'],
- ],
- },
- },
- },
- {
- id: 'place_country_minor',
- type: 'symbol',
- metadata: {
- 'mapbox:group': '101da9f13b64a08fa4b6ac1168e89e5f',
- },
- source: 'openmaptiles',
- 'source-layer': 'place',
- maxzoom: 8,
- filter: [
- 'all',
- ['==', '$type', 'Point'],
- ['==', 'class', 'country'],
- ['>=', 'rank', 2],
- ['has', 'iso_a2'],
- ],
- layout: {
- visibility: 'visible',
- 'text-field': '{name:latin}',
- 'text-font': ['Open Sans Regular'],
- 'text-transform': 'uppercase',
- 'text-size': {
- base: 1,
- stops: [
- [0, 10],
- [6, 12],
- ],
- },
- },
- paint: {
- 'text-halo-width': 1.4,
- 'text-halo-color': 'rgba(236,236,234,0.7)',
- 'text-color': {
- base: 1,
- stops: [
- [3, 'rgb(157,169,177)'],
- [4, 'rgb(153, 153, 153)'],
- ],
- },
- },
- },
- {
- id: 'place_country_major',
- type: 'symbol',
- metadata: {
- 'mapbox:group': '101da9f13b64a08fa4b6ac1168e89e5f',
- },
- source: 'openmaptiles',
- 'source-layer': 'place',
- maxzoom: 6,
- filter: [
- 'all',
- ['==', '$type', 'Point'],
- ['<=', 'rank', 1],
- ['==', 'class', 'country'],
- ['has', 'iso_a2'],
- ],
- layout: {
- visibility: 'visible',
- 'text-field': '{name:latin}',
- 'text-font': ['Open Sans Regular'],
- 'text-transform': 'uppercase',
- 'text-size': {
- base: 1.4,
- stops: [
- [0, 10],
- [3, 12],
- [4, 14],
- ],
- },
- 'text-anchor': 'center',
- },
- paint: {
- 'text-halo-width': 1.4,
- 'text-halo-color': 'rgba(236,236,234,0.7)',
- 'text-color': {
- base: 1,
- stops: [
- [3, 'rgb(157,169,177)'],
- [4, 'rgb(153, 153, 153)'],
- ],
- },
- },
- },
- {
- id: 'bounding_box',
- type: 'fill',
- source: 'site_plan',
- 'source-layer': 'bounding_box',
- paint: {
- 'fill-color': 'rgba(240, 247, 240, 1)',
- },
- },
- {
- id: 'slope',
- type: 'raster',
- source: 'slope',
- minzoom: 5,
- },
- {
- id: 'hillshade',
- type: 'raster',
- source: 'hillshade',
- minzoom: 5,
- },
- {
- id: 'ortho',
- type: 'raster',
- source: 'ortho',
- minzoom: 15,
- },
- {
- id: 'background_areas_backstage',
- type: 'fill',
- source: 'site_plan',
- 'source-layer': 'areas_backstage_polygon',
- paint: {
- 'fill-color': 'rgba(232, 225, 225, 1)',
- },
- },
- {
- id: 'background_areas_camping_polygon',
- type: 'fill',
- source: 'site_plan',
- 'source-layer': 'areas_camping_polygon',
- paint: {
- 'fill-color': 'rgba(227, 245, 227, 1)',
- },
- },
- {
- id: 'background_areas_camping_outline',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'areas_camping_polygon',
- paint: {
- 'line-color': 'rgba(10, 100, 10, 0.4)',
- 'line-blur': 7,
- 'line-width': 3,
- },
- },
- {
- id: 'background_natural_woodland_polygon',
- type: 'fill',
- source: 'site_plan',
- 'source-layer': 'natural_woodland_polygon',
- layout: {},
- paint: {
- 'fill-color': 'rgba(139, 193, 105, 1)',
- },
- },
- {
- id: 'background_natural_hedges_polygon',
- type: 'fill',
- source: 'site_plan',
- 'source-layer': 'natural_hedges_polygon',
- layout: {},
- paint: {
- 'fill-color': 'rgba(139, 193, 105, 1)',
- },
- },
- {
- id: 'background_water_linestring',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'natural_water_linestring',
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- 'line-round-limit': 1.1,
- },
- paint: {
- 'line-color': 'rgba(78, 131, 199, 1)',
- 'line-width': {
- stops: [
- [13, 1],
- [15, 2],
- [18, 6],
- ],
- },
- },
- },
- {
- id: 'background_water_polygon',
- type: 'fill',
- source: 'site_plan',
- 'source-layer': 'natural_water_polygon',
- layout: {},
- paint: {
- 'fill-color': 'rgba(78, 131, 199, 1)',
- 'fill-antialias': true,
- },
- },
- {
- id: 'background_water_polygon_shadow',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'natural_water_polygon',
- layout: {},
- paint: {
- 'line-color': 'rgba(102, 102, 183, 1)',
- 'line-width': {
- stops: [
- [13, 0],
- [18, 2],
- ],
- },
- },
- },
- {
- id: 'heras',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'heras_internal__linestring',
- paint: {
- 'line-color': 'rgba(148, 63, 63, 1)',
- },
- },
- {
- id: 'paths_fire',
- type: 'fill',
- source: 'site_plan',
- 'source-layer': 'paths_fire_polygon',
- layout: {},
- paint: {
- 'fill-color': 'rgba(221, 226, 203, 1)',
- },
- },
- {
- id: 'paths_tracks_case',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'paths_roads_polygon',
- minzoom: 0,
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- },
- paint: {
- 'line-width': {
- stops: [
- [12, 0],
- [17, 5],
- ],
- },
- 'line-color': 'rgba(132, 131, 131, 1)',
- 'line-blur': 0.5,
- },
- },
- {
- id: 'paths_trackway_case',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'paths_trackway_polygon',
- layout: {},
- paint: {
- 'line-width': 3,
- 'line-color': 'rgba(140, 140, 140, 1)',
- },
- },
- {
- id: 'paths_trackway',
- type: 'fill',
- source: 'site_plan',
- 'source-layer': 'paths_trackway_polygon',
- layout: {},
- paint: {
- 'fill-color': 'rgba(185, 185, 185, 1)',
- },
- },
- {
- id: 'paths_tracks',
- type: 'fill',
- source: 'site_plan',
- 'source-layer': 'paths_roads_polygon',
- minzoom: 0,
- paint: {
- 'fill-color': 'rgba(177, 165, 147, 1)',
- 'fill-outline-color': 'rgba(98, 98, 97, 0)',
- },
- },
- {
- id: 'structures_shadow',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'structures_polygon',
- minzoom: 0,
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- },
- paint: {
- 'line-color': 'rgba(0, 0, 0, 0.3)',
- 'line-width': 6,
- 'line-blur': 3,
- },
- },
- {
- id: 'structures_polygon',
- type: 'fill',
- source: 'site_plan',
- 'source-layer': 'structures_polygon',
- minzoom: 0,
- paint: {
- 'fill-color': 'rgb(144, 204, 214)',
- },
- },
- {
- id: 'structures_outline',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'structures_polygon',
- minzoom: 0,
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- },
- paint: {
- 'line-color': 'rgba(90, 81, 31, 1)',
- },
- },
- {
- id: 'structures_linestring',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'structures_linestring',
- minzoom: 0,
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- },
- paint: {
- 'line-color': 'rgba(90, 81, 31, 1)',
- },
- },
- {
- id: 'structures_guys',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'structures_guys_&_poles_linestring',
- minzoom: 0,
- paint: {
- 'line-color': 'rgb(153, 144, 93)',
- },
- },
- {
- id: 'structures_exits',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'structures_exits_linestring',
- minzoom: 0,
- paint: {
- 'line-width': 3,
- 'line-color': 'rgb(153, 144, 93)',
- },
- },
- {
- id: 'structures_internal_linestring',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'structures_internal_linestring',
- minzoom: 0,
- paint: {
- 'line-color': 'rgba(90, 81, 31, 1)',
- },
- },
- {
- id: 'structures_internal_polygon',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'structures_internal_polygon',
- minzoom: 0,
- paint: {
- 'line-color': 'rgba(90, 81, 31, 1)',
- },
- },
- {
- id: 'walls',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'walls_linestring',
- },
- {
- id: 'fences',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'fences_linestring',
- paint: {
- 'line-color': 'rgba(134, 134, 101, 1)',
- },
- },
- {
- id: 'trees',
- type: 'circle',
- source: 'site_plan',
- 'source-layer': 'natural_trees_point',
- minzoom: 13,
- maxzoom: 0,
- layout: {},
- paint: {
- 'circle-color': 'rgba(135, 118, 29, 1)',
- 'circle-stroke-color': 'rgba(139, 193, 105, 1)',
- 'circle-stroke-width': {
- stops: [
- [15, 0.5],
- [19, 10],
- ],
- },
- 'circle-radius': {
- stops: [
- [15, 0],
- [17, 3],
- ],
- },
- 'circle-blur': 0,
- },
- },
- {
- id: 'buildings',
- type: 'fill-extrusion',
- source: 'site_plan',
- 'source-layer': 'buildings_polygon',
- layout: {},
- paint: {
- 'fill-extrusion-color': 'rgba(189, 170, 85, 1)',
- 'fill-extrusion-height': 4,
- },
- },
- {
- id: 'services_comms_ducts_case',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'services_comms_ducts_linestring',
- layout: {},
- paint: {
- 'line-color': 'rgba(150, 150, 150, 1)',
- 'line-width': 3,
- },
- },
- {
- id: 'services_comms_ducts',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'services_comms_ducts_linestring',
- layout: {},
- paint: {
- 'line-color': 'rgba(187, 0, 218, 1)',
- 'line-width': 2,
- },
- },
- {
- id: 'services_comms_lines',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'services_comms_buried_lines_linestring',
- layout: {},
- paint: {
- 'line-color': 'rgba(187, 0, 218, 1)',
- 'line-width': 2,
- },
- },
- {
- id: 'services_comms_manholes',
- type: 'circle',
- source: 'site_plan',
- 'source-layer': 'services_comms_manholes_point',
- minzoom: 15,
- paint: {
- 'circle-color': 'rgba(187, 0, 218, 1)',
- 'circle-stroke-width': 1,
- },
- },
- {
- id: 'services_comms_bt_poles',
- type: 'circle',
- source: 'site_plan',
- 'source-layer': 'services_comms_bt_poles_point',
- minzoom: 15,
- paint: {
- 'circle-color': 'rgba(136, 89, 6, 1)',
- 'circle-stroke-width': 1,
- },
- },
- {
- id: 'services_comms_cabinets',
- type: 'circle',
- source: 'site_plan',
- 'source-layer': 'services_comms_cabinets_point',
- minzoom: 15,
- paint: {
- 'circle-color': 'rgba(218, 0, 62, 1)',
- 'circle-stroke-width': 1,
- },
- },
- {
- id: 'services_comms_manholes_label-copy',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'services_comms_manholes_point',
- minzoom: 15,
- layout: {
- 'text-field': '{id}',
- 'text-font': ['Open Sans Regular'],
- 'text-size': 14,
- 'text-offset': [-1, 0],
- },
- paint: {
- 'text-halo-color': 'rgba(255, 255, 255, 1)',
- 'text-halo-width': 2,
- },
- },
- {
- id: 'services_comms_cabinets_label',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'services_comms_cabinets_point',
- minzoom: 15,
- layout: {
- 'text-field': '{name}',
- 'text-font': ['Open Sans Regular'],
- 'text-size': 12,
- 'text-offset': [-2, 0],
- },
- paint: {
- 'text-halo-color': 'rgba(255, 255, 255, 1)',
- 'text-halo-width': 2,
- },
- },
- {
- id: 'services_water_lines',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'services_water_lines_linestring',
- layout: {},
- paint: {
- 'line-color': '#00C5FF',
- 'line-width': 2,
- },
- },
- {
- id: 'services_water_points',
- type: 'circle',
- source: 'site_plan',
- 'source-layer': 'services_water_points_point',
- paint: {
- 'circle-color': 'rgba(0, 197, 255, 1)',
- 'circle-stroke-color': 'rgba(22, 0, 195, 1)',
- 'circle-stroke-width': 2,
- 'circle-radius': 3,
- },
- },
- {
- id: 'site_water_pipes',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'water_pipes_linestring',
- paint: {
- 'line-color': 'rgba(0, 89, 255, 1)',
- 'line-width': 2,
- },
- },
- {
- id: 'license_boundary',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'license_license_boundary_polygon',
- layout: {
- 'line-cap': 'round',
- 'line-join': 'round',
- },
- paint: {
- 'line-color': 'rgba(226, 11, 11, 1)',
- 'line-dasharray': [10, 3],
- 'line-width': {
- stops: [
- [10, 1],
- [17, 2],
- ],
- },
- },
- },
- {
- id: 'dk_radius',
- type: 'fill',
- source: 'site_plan',
- 'source-layer': 'noc_dk_radius_polygon',
- paint: {
- 'fill-color': 'rgba(169, 105, 163, 1)',
- 'fill-opacity': 0.3,
- },
- },
- {
- id: 'dk',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'noc_dk_polygon',
- layout: {},
- paint: {},
- },
- {
- id: 'dk_names',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'noc_dk_names_point',
- minzoom: 16,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'point',
- 'text-field': '{text}',
- 'text-font': ['Open Sans Regular'],
- 'text-justify': 'center',
- 'text-size': 14,
- 'text-padding': 2,
- 'symbol-avoid-edges': true,
- 'text-max-width': 8,
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(169, 105, 163, 1)',
- 'text-translate': [-4, 0],
- },
- },
- {
- id: 'noc_fiber',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'noc_fibre_linestring',
- paint: {
- 'line-opacity': 1,
- 'line-color': 'rgba(147, 84, 150, 1)',
- 'line-width': 2,
- },
- },
- {
- id: 'noc_fiber_labels',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'noc_fibre_linestring',
- minzoom: 19,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'line',
- 'text-field': 'Fiber ({length}m)',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-allow-overlap': false,
- 'text-offset': [0, -1],
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(147, 84, 150, 1)',
- },
- },
- {
- id: 'noc_copper',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'noc_copper_linestring',
- minzoom: 0,
- paint: {
- 'line-opacity': 1,
- 'line-color': 'rgba(174, 127, 176, 1)',
- 'line-width': 2,
- },
- },
- {
- id: 'noc_copper_labels',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'noc_copper_linestring',
- minzoom: 19,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'line',
- 'text-field': 'Cat5e ({length}m)',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-allow-overlap': false,
- 'text-offset': [0, -1],
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(174, 127, 176, 1)',
- },
- },
- {
- id: 'noc_switch',
- type: 'circle',
- source: 'site_plan',
- 'source-layer': 'noc_switch_point',
- minzoom: 0,
- maxzoom: 24,
- layout: {},
- paint: {
- 'circle-color': 'rgba(75, 0, 130, 1)',
- 'circle-radius': 3,
- },
- },
- {
- id: 'noc_switch_labels',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'noc_switch_point',
- minzoom: 19,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'point',
- 'symbol-spacing': 1000,
- 'symbol-avoid-edges': true,
- 'text-field': '{switch}',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-allow-overlap': false,
- 'text-anchor': 'right',
- 'text-offset': [-1, 0],
- 'text-justify': 'right',
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(75, 0, 130, 1)',
- },
- },
- {
- id: 'power_generator',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'power_generator_polygon',
- layout: {},
- paint: {
- 'line-color': 'magenta',
- },
- },
- {
- id: 'power_400_3',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'power_400_3_linestring',
- layout: {},
- paint: {
- 'line-color': 'rgba(255, 68, 0, 1)',
- 'line-width': 4,
- },
- },
- {
- id: 'power_125_3',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'power_125_3_linestring',
- layout: {},
- paint: {
- 'line-color': 'rgba(199, 33, 33, 1)',
- 'line-width': 3,
- },
- },
- {
- id: 'power_63_3',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'power_63_3_linestring',
- layout: {},
- paint: {
- 'line-color': 'rgba(199, 33, 33, 1)',
- 'line-width': 2,
- },
- },
- {
- id: 'power_32_3',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'power_32_3_linestring',
- layout: {},
- paint: {
- 'line-color': 'rgba(199, 33, 33, 1)',
- 'line-width': 1,
- },
- },
- {
- id: 'power_32_1',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'power_32_linestring',
- layout: {},
- paint: {
- 'line-color': 'rgba(11, 11, 214, 1)',
- 'line-width': 2,
- },
- },
- {
- id: 'power_16_1',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'power_16_linestring',
- layout: {},
- paint: {
- 'line-color': 'rgba(11, 11, 214, 1)',
- 'line-width': 1,
- },
- },
- {
- id: 'power_400_3_labels',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'power_400_3_linestring',
- minzoom: 19,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'line',
- 'text-field': '400A ({length}m)',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-allow-overlap': false,
- 'text-offset': [0, -1],
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(199, 33, 33, 1)',
- },
- },
- {
- id: 'power_125_3_labels',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'power_125_3_linestring',
- minzoom: 19,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'line',
- 'text-field': '125A ({length}m)',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-allow-overlap': false,
- 'text-offset': [0, -1],
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(199, 33, 33, 1)',
- },
- },
- {
- id: 'power_63_3_labels',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'power_63_3_linestring',
- minzoom: 19,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'line',
- 'text-field': '63A ({length}m)',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-allow-overlap': false,
- 'text-offset': [0, -1],
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(199, 33, 33, 1)',
- },
- },
- {
- id: 'power_32_3_labels',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'power_32_3_linestring',
- minzoom: 19,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'line',
- 'text-field': '32A ({length}m)',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-allow-overlap': false,
- 'text-offset': [0, -1],
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(199, 33, 33, 1)',
- },
- },
- {
- id: 'power_32_1_labels',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'power_32_linestring',
- minzoom: 19,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'line',
- 'text-field': '32A ({length}m)',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-allow-overlap': false,
- 'text-offset': [0, -1],
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(11, 11, 214, 1)',
- },
- },
- {
- id: 'power_16_1_labels',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'power_16_linestring',
- minzoom: 19,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'line',
- 'symbol-spacing': 1000,
- 'text-field': '16A ({length}m)',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-allow-overlap': false,
- 'text-offset': [0, -1],
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(11, 11, 214, 1)',
- },
- },
- {
- id: 'power_distro',
- type: 'circle',
- source: 'site_plan',
- 'source-layer': 'power_distro_point',
- layout: {},
- paint: {
- 'circle-color': [
- 'match',
- ['get', 'distro'],
- 'TOB/32',
- 'blue',
- 'TOB/16',
- 'blue',
- 'CABIN',
- 'blue',
- 'ColdRoom',
- 'blue',
- 'SOB',
- 'blue',
- 'SSB 1',
- 'blue',
- 'SSB 2',
- 'blue',
- 'MD1 32 1',
- 'blue',
- 'rgba(199, 33, 33, 1)',
- ],
- 'circle-radius': 3,
- },
- },
- {
- id: 'power_distro_labels',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'power_distro_point',
- minzoom: 19,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'point',
- 'symbol-spacing': 1000,
- 'symbol-avoid-edges': true,
- 'text-field': '{name}\n({distro})',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-allow-overlap': false,
- 'text-anchor': 'left',
- 'text-offset': [1, 0],
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': [
- 'match',
- ['get', 'distro'],
- 'TOB/32',
- 'blue',
- 'TOB/16',
- 'blue',
- 'CABIN',
- 'blue',
- 'ColdRoom',
- 'blue',
- 'SOB',
- 'blue',
- 'SSB 1',
- 'blue',
- 'SSB 2',
- 'blue',
- 'MD1 32 1',
- 'blue',
- 'rgba(199, 33, 33, 1)',
- ],
- },
- },
- {
- id: 'lighting_festoon',
- type: 'line',
- source: 'site_plan',
- 'source-layer': 'lighting_festoon_linestring',
- layout: {},
- paint: {
- 'line-color': 'rgba(200, 184, 42, 1)',
- 'line-width': 2,
- },
- },
- {
- id: 'lighting_festoon_labels',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'lighting_festoon_linestring',
- minzoom: 19,
- maxzoom: 24,
- layout: {
- 'symbol-placement': 'line',
- 'text-field': 'Festoon ({length}m)',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-allow-overlap': false,
- 'text-offset': [0, -1],
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(200, 184, 42, 1)',
- },
- },
- {
- id: 'labels_camping',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'camping_centroid',
- minzoom: 16,
- maxzoom: 24,
- layout: {
- 'text-field': 'Camping: {camping}',
- 'text-font': ['Open Sans Regular'],
- 'text-justify': 'center',
- 'text-size': 13,
- 'text-padding': 2,
- 'symbol-placement': 'point',
- 'symbol-spacing': 1000,
- 'symbol-avoid-edges': true,
- 'text-max-width': 8,
- },
- paint: {
- 'text-halo-width': 3,
- 'text-halo-blur': 1,
- 'text-halo-color': 'rgba(255, 255, 255, 0.29)',
- },
- },
- {
- id: 'labels_gate',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'labels_gate_labels_point',
- minzoom: 16,
- maxzoom: 24,
- layout: {
- 'text-field': '{text}',
- 'text-size': 12,
- 'text-optional': false,
- 'text-font': ['Open Sans Regular'],
- 'text-keep-upright': true,
- 'text-ignore-placement': false,
- 'text-allow-overlap': false,
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(0, 0, 0, 1)',
- },
- },
- {
- id: 'labels_main',
- type: 'symbol',
- source: 'site_plan',
- 'source-layer': 'labels_point',
- minzoom: 16,
- maxzoom: 24,
- layout: {
- 'text-field': '{text}',
- 'text-font': ['Open Sans Regular'],
- 'text-size': 12,
- 'text-optional': false,
- },
- paint: {
- 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
- 'text-halo-width': 3,
- 'text-color': 'rgba(0, 0, 0, 1)',
- },
- },
- {
- id: 'villages_symbol',
- type: 'circle',
- source: 'villages',
- 'source-layer': '',
- minzoom: 16,
- paint: {
- 'circle-color': 'rgb(246, 163, 24)',
- 'circle-radius': {
- stops: [
- [16, 6],
- [24, 26],
- ],
- },
- 'circle-blur': 0.5,
- 'circle-stroke-width': 0.5,
- },
- },
- {
- id: 'villages_text',
- type: 'symbol',
- source: 'villages',
- 'source-layer': '',
- minzoom: 17,
- maxzoom: 24,
- layout: {
- 'text-field': '{name}',
- 'text-font': ['Open Sans Regular'],
- 'text-offset': [0, -1.8],
- 'text-size': {
- stops: [
- [17, 11],
- [24, 16],
- ],
- },
- },
- paint: {
- 'text-halo-color': 'rgba(244, 235, 247, 0.73)',
- 'text-halo-width': 2,
- 'text-halo-blur': 1,
- },
- },
- ],
- id: 'positron',
- owner: '',
-}
diff --git a/web/src/style/basemap.ts b/web/src/style/basemap.ts
new file mode 100644
index 0000000..ef5b050
--- /dev/null
+++ b/web/src/style/basemap.ts
@@ -0,0 +1,773 @@
+import { LayerSpecificationWithZIndex } from './types'
+
+const layers: LayerSpecificationWithZIndex[] = [
+ {
+ id: 'water',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'water',
+ filter: ['==', '$type', 'Polygon'],
+ layout: {
+ visibility: 'visible',
+ },
+ paint: {
+ 'fill-color': 'rgb(194, 200, 202)',
+ 'fill-antialias': true,
+ },
+ },
+ {
+ id: 'landcover_ice_shelf',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'landcover',
+ maxzoom: 8,
+ filter: ['all', ['==', '$type', 'Polygon'], ['==', 'subclass', 'ice_shelf']],
+ layout: {
+ visibility: 'visible',
+ },
+ paint: {
+ 'fill-color': 'hsl(0, 0%, 98%)',
+ 'fill-opacity': 0.7,
+ },
+ },
+ {
+ id: 'landuse_residential',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'landuse',
+ maxzoom: 16,
+ filter: ['all', ['==', '$type', 'Polygon'], ['==', 'class', 'residential']],
+ layout: {
+ visibility: 'visible',
+ },
+ paint: {
+ 'fill-color': 'rgb(234, 234, 230)',
+ 'fill-opacity': ['interpolate', ['exponential', 0.6], ['zoom'], 8, 0.8, 9, 0.6],
+ },
+ },
+ {
+ id: 'waterway',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'waterway',
+ filter: ['all', ['==', '$type', 'LineString']],
+ layout: {
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'hsl(195, 17%, 78%)',
+ },
+ },
+ {
+ id: 'water_name',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'water_name',
+ filter: ['==', '$type', 'LineString'],
+ layout: {
+ 'text-field': '{name:latin}\n{name:nonlatin}',
+ 'symbol-placement': 'line',
+ 'text-rotation-alignment': 'map',
+ 'symbol-spacing': 500,
+ 'text-font': ['Open Sans Regular'],
+ 'text-size': 12,
+ },
+ paint: {
+ 'text-color': 'rgb(157,169,177)',
+ 'text-halo-color': 'rgb(242,243,240)',
+ 'text-halo-width': 1,
+ 'text-halo-blur': 1,
+ },
+ },
+ {
+ id: 'building',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'building',
+ minzoom: 12,
+ paint: {
+ 'fill-color': 'rgb(234, 234, 229)',
+ 'fill-outline-color': 'rgb(219, 219, 218)',
+ 'fill-antialias': true,
+ },
+ },
+ {
+ id: 'tunnel_motorway_casing',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 6,
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['all', ['==', 'brunnel', 'tunnel'], ['==', 'class', 'motorway']],
+ ],
+ layout: {
+ 'line-cap': 'butt',
+ 'line-join': 'miter',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'rgb(213, 213, 213)',
+ 'line-width': ['interpolate', ['exponential', 1.4], ['zoom'], 5.8, 0, 6, 3, 20, 40],
+ },
+ },
+ {
+ id: 'tunnel_motorway_inner',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 6,
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['all', ['==', 'brunnel', 'tunnel'], ['==', 'class', 'motorway']],
+ ],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'rgb(234,234,234)',
+ 'line-width': ['interpolate', ['exponential', 1.4], ['zoom'], 4, 2, 6, 1.3, 20, 30],
+ },
+ },
+ {
+ id: 'aeroway-taxiway',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'aeroway',
+ minzoom: 12,
+ filter: ['all', ['in', 'class', 'taxiway']],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'hsl(0, 0%, 88%)',
+ 'line-width': ['interpolate', ['exponential', 1.55], ['zoom'], 13, 1.8, 20, 20],
+ },
+ },
+ {
+ id: 'aeroway-runway-casing',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'aeroway',
+ minzoom: 11,
+ filter: ['all', ['in', 'class', 'runway']],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'hsl(0, 0%, 88%)',
+ 'line-width': ['interpolate', ['exponential', 1.5], ['zoom'], 11, 4, 17, 55],
+ },
+ },
+ {
+ id: 'aeroway-area',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'aeroway',
+ minzoom: 4,
+ filter: ['all', ['==', '$type', 'Polygon'], ['in', 'class', 'runway', 'taxiway']],
+ layout: {
+ visibility: 'visible',
+ },
+ paint: {
+ 'fill-opacity': ['interpolate', ['linear'], ['zoom'], 13, 0, 14, 1],
+ 'fill-color': 'rgba(255, 255, 255, 1)',
+ },
+ },
+ {
+ id: 'aeroway-runway',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'aeroway',
+ minzoom: 11,
+ maxzoom: 24,
+ filter: ['all', ['in', 'class', 'runway'], ['==', '$type', 'LineString']],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'rgba(255, 255, 255, 1)',
+ 'line-width': ['interpolate', ['exponential', 1.5], ['zoom'], 11, 4, 17, 50],
+ },
+ },
+ {
+ id: 'highway_minor',
+ type: 'line',
+ metadata: {
+ 'mapbox:group': 'b6371a3f2f5a9932464fa3867530a2e5',
+ },
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 8,
+ filter: ['all', ['==', '$type', 'LineString'], ['in', 'class', 'minor', 'service', 'track']],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'hsl(0, 0%, 88%)',
+ 'line-width': ['interpolate', ['exponential', 1.55], ['zoom'], 13, 1.8, 20, 20],
+ 'line-opacity': 0.9,
+ },
+ },
+ {
+ id: 'highway_major_casing',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 11,
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['in', 'class', 'primary', 'secondary', 'tertiary', 'trunk'],
+ ],
+ layout: {
+ 'line-cap': 'butt',
+ 'line-join': 'miter',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'rgb(213, 213, 213)',
+ 'line-dasharray': [12, 0],
+ 'line-width': ['interpolate', ['exponential', 1.3], ['zoom'], 10, 3, 20, 23],
+ },
+ },
+ {
+ id: 'highway_major_inner',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 11,
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['in', 'class', 'primary', 'secondary', 'tertiary', 'trunk'],
+ ],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': '#fff',
+ 'line-width': ['interpolate', ['exponential', 1.3], ['zoom'], 10, 2, 20, 20],
+ },
+ },
+ {
+ id: 'highway_major_subtle',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ maxzoom: 11,
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['in', 'class', 'primary', 'secondary', 'tertiary', 'trunk'],
+ ],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'hsla(0, 0%, 85%, 0.69)',
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'highway_motorway_casing',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 6,
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['all', ['!in', 'brunnel', 'bridge', 'tunnel'], ['==', 'class', 'motorway']],
+ ],
+ layout: {
+ 'line-cap': 'butt',
+ 'line-join': 'miter',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'rgb(213, 213, 213)',
+ 'line-width': ['interpolate', ['exponential', 1.4], ['zoom'], 5.8, 0, 6, 3, 20, 40],
+ 'line-dasharray': [2, 0],
+ },
+ },
+ {
+ id: 'highway_motorway_inner',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 6,
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['all', ['!in', 'brunnel', 'bridge', 'tunnel'], ['==', 'class', 'motorway']],
+ ],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': ['interpolate-hcl', ['linear'], ['zoom'], 6, 'hsla(0, 0%, 85%, 0.53)', 8, '#fff'],
+ 'line-width': ['interpolate', ['exponential', 1.4], ['zoom'], 4, 2, 6, 1.3, 20, 30],
+ },
+ },
+ {
+ id: 'highway_motorway_subtle',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ maxzoom: 6,
+ filter: ['all', ['==', '$type', 'LineString'], ['==', 'class', 'motorway']],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'hsla(0, 0%, 85%, 0.53)',
+ 'line-width': ['interpolate', ['exponential', 1.4], ['zoom'], 4, 2, 6, 1.3],
+ },
+ },
+ {
+ id: 'railway_transit',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 16,
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['all', ['==', 'class', 'transit'], ['!in', 'brunnel', 'tunnel']],
+ ],
+ layout: {
+ visibility: 'visible',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': '#dddddd',
+ 'line-width': 3,
+ },
+ },
+ {
+ id: 'railway_transit_dashline',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 16,
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['all', ['==', 'class', 'transit'], ['!in', 'brunnel', 'tunnel']],
+ ],
+ layout: {
+ visibility: 'visible',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': '#fafafa',
+ 'line-width': 2,
+ 'line-dasharray': [3, 3],
+ },
+ },
+ {
+ id: 'railway_service',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 16,
+ filter: ['all', ['==', '$type', 'LineString'], ['all', ['==', 'class', 'rail'], ['has', 'service']]],
+ layout: {
+ visibility: 'visible',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': '#dddddd',
+ 'line-width': 3,
+ },
+ },
+ {
+ id: 'railway_service_dashline',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 16,
+ filter: ['all', ['==', '$type', 'LineString'], ['==', 'class', 'rail'], ['has', 'service']],
+ layout: {
+ visibility: 'visible',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': '#fafafa',
+ 'line-width': 2,
+ 'line-dasharray': [3, 3],
+ },
+ },
+ {
+ id: 'railway',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 13,
+ filter: ['all', ['==', '$type', 'LineString'], ['all', ['!has', 'service'], ['==', 'class', 'rail']]],
+ layout: {
+ visibility: 'visible',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': '#dddddd',
+ 'line-width': ['interpolate', ['exponential', 1.3], ['zoom'], 9, 2, 20, 7],
+ },
+ },
+ {
+ id: 'railway_dashline',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 13,
+ filter: ['all', ['==', '$type', 'LineString'], ['all', ['!has', 'service'], ['==', 'class', 'rail']]],
+ layout: {
+ visibility: 'visible',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': '#fafafa',
+ 'line-width': ['interpolate', ['exponential', 1.3], ['zoom'], 9, 1, 20, 6],
+ 'line-dasharray': [3, 3],
+ },
+ },
+ {
+ id: 'highway_motorway_bridge_casing',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 6,
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['all', ['==', 'brunnel', 'bridge'], ['==', 'class', 'motorway']],
+ ],
+ layout: {
+ 'line-cap': 'butt',
+ 'line-join': 'miter',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'rgb(213, 213, 213)',
+ 'line-width': ['interpolate', ['exponential', 1.4], ['zoom'], 5.8, 0, 6, 5, 20, 45],
+ 'line-dasharray': [2, 0],
+ },
+ },
+ {
+ id: 'highway_motorway_bridge_inner',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 6,
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['all', ['==', 'brunnel', 'bridge'], ['==', 'class', 'motorway']],
+ ],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': ['interpolate-hcl', ['linear'], ['zoom'], 5.8, 'hsla(0, 0%, 85%, 0.53)', 6, '#fff'],
+ 'line-width': ['interpolate', ['exponential', 1.4], ['zoom'], 4, 2, 6, 1.3, 20, 30],
+ },
+ },
+ {
+ id: 'highway_name_motorway',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation_name',
+ filter: ['all', ['==', '$type', 'LineString'], ['==', 'class', 'motorway']],
+ layout: {
+ 'text-size': 10,
+ 'symbol-spacing': 350,
+ 'text-font': ['Open Sans Regular'],
+ 'symbol-placement': 'line',
+ visibility: 'visible',
+ 'text-rotation-alignment': 'viewport',
+ 'text-pitch-alignment': 'viewport',
+ 'text-field': '{ref}',
+ },
+ paint: {
+ 'text-color': 'rgb(117, 129, 145)',
+ 'text-halo-color': 'hsl(0, 0%, 100%)',
+ 'text-translate': [0, 2],
+ 'text-halo-width': 1,
+ 'text-halo-blur': 1,
+ },
+ },
+ {
+ id: 'boundary_state',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'boundary',
+ filter: ['==', 'admin_level', 4],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ visibility: 'visible',
+ },
+ paint: {
+ 'line-color': 'rgb(230, 204, 207)',
+ 'line-width': ['interpolate', ['linear'], ['zoom'], 3, 1, 22, 15],
+ 'line-blur': 0.4,
+ 'line-dasharray': [2, 2],
+ 'line-opacity': 1,
+ },
+ },
+ {
+ id: 'boundary_country',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'boundary',
+ filter: ['==', 'admin_level', 2],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': 'rgb(230, 204, 207)',
+ 'line-width': ['interpolate', ['exponential', 1.1], ['zoom'], 3, 1, 22, 20],
+ 'line-blur': ['interpolate', ['linear'], ['zoom'], 3, 0.4, 22, 4],
+ },
+ },
+ {
+ id: 'place_other',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ maxzoom: 14,
+ filter: [
+ 'all',
+ ['in', 'class', 'continent', 'hamlet', 'neighbourhood', 'isolated_dwelling'],
+ ['==', '$type', 'Point'],
+ ],
+ layout: {
+ 'text-size': 10,
+ 'text-transform': 'uppercase',
+ 'text-font': ['Open Sans Regular'],
+ 'text-justify': 'center',
+ visibility: 'visible',
+ 'text-offset': [0.5, 0],
+ 'text-anchor': 'center',
+ 'text-field': '{name:latin}\n{name:nonlatin}',
+ },
+ paint: {
+ 'text-color': 'rgb(117, 129, 145)',
+ 'text-halo-color': 'rgb(242,243,240)',
+ 'text-halo-width': 1,
+ 'text-halo-blur': 1,
+ },
+ },
+ {
+ id: 'place_suburb',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ maxzoom: 15,
+ filter: ['all', ['==', '$type', 'Point'], ['==', 'class', 'suburb']],
+ layout: {
+ 'text-size': 10,
+ 'text-transform': 'uppercase',
+ 'text-font': ['Open Sans Regular'],
+ 'text-justify': 'center',
+ visibility: 'visible',
+ 'text-offset': [0.5, 0],
+ 'text-anchor': 'center',
+ 'text-field': '{name:latin}\n{name:nonlatin}',
+ },
+ paint: {
+ 'text-color': 'rgb(117, 129, 145)',
+ 'text-halo-color': 'rgb(242,243,240)',
+ 'text-halo-width': 1,
+ 'text-halo-blur': 1,
+ },
+ },
+ {
+ id: 'place_village',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ maxzoom: 14,
+ filter: ['all', ['==', '$type', 'Point'], ['==', 'class', 'village']],
+ layout: {
+ 'text-size': 10,
+ 'text-transform': 'uppercase',
+ 'text-font': ['Open Sans Regular'],
+ 'text-justify': 'left',
+ visibility: 'visible',
+ 'text-offset': [0.5, 0.2],
+ 'icon-size': 0.4,
+ 'text-anchor': 'left',
+ 'text-field': '{name:latin}\n{name:nonlatin}',
+ },
+ paint: {
+ 'text-color': 'rgb(117, 129, 145)',
+ 'text-halo-color': 'rgb(242,243,240)',
+ 'text-halo-width': 1,
+ 'text-halo-blur': 1,
+ 'icon-opacity': 0.7,
+ },
+ },
+ {
+ id: 'place_town',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ maxzoom: 15,
+ filter: ['all', ['==', '$type', 'Point'], ['==', 'class', 'town']],
+ layout: {
+ 'text-size': 10,
+ 'icon-image': ['step', ['zoom'], 'circle-11', 8, ''],
+ 'text-transform': 'uppercase',
+ 'text-font': ['Open Sans Regular'],
+ 'text-justify': 'left',
+ visibility: 'visible',
+ 'text-offset': [0.5, 0.2],
+ 'icon-size': 0.4,
+ 'text-anchor': ['step', ['zoom'], 'left', 8, 'center'],
+ 'text-field': '{name:latin}\n{name:nonlatin}',
+ },
+ paint: {
+ 'text-color': 'rgb(117, 129, 145)',
+ 'text-halo-color': 'rgb(242,243,240)',
+ 'text-halo-width': 1,
+ 'text-halo-blur': 1,
+ 'icon-opacity': 0.7,
+ },
+ },
+ {
+ id: 'place_city',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ maxzoom: 14,
+ filter: [
+ 'all',
+ ['==', '$type', 'Point'],
+ ['all', ['!=', 'capital', 2], ['==', 'class', 'city'], ['>', 'rank', 3]],
+ ],
+ layout: {
+ 'text-size': 10,
+ 'icon-image': ['step', ['zoom'], 'circle-11', 8, ''],
+ 'text-transform': 'uppercase',
+ 'text-font': ['Open Sans Regular'],
+ 'text-justify': 'left',
+ visibility: 'visible',
+ 'text-offset': [0.5, 0.2],
+ 'icon-size': 0.4,
+ 'text-anchor': ['step', ['zoom'], 'left', 8, 'center'],
+ 'text-field': '{name:latin}\n{name:nonlatin}',
+ },
+ paint: {
+ 'text-color': 'rgb(117, 129, 145)',
+ 'text-halo-color': 'rgb(242,243,240)',
+ 'text-halo-width': 1,
+ 'text-halo-blur': 1,
+ 'icon-opacity': 0.7,
+ },
+ },
+ {
+ id: 'place_capital',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ maxzoom: 12,
+ filter: ['all', ['==', '$type', 'Point'], ['all', ['==', 'capital', 2], ['==', 'class', 'city']]],
+ layout: {
+ 'text-size': 14,
+ 'icon-image': ['step', ['zoom'], 'star-11', 8, ''],
+ 'text-transform': 'uppercase',
+ 'text-font': ['Open Sans Regular'],
+ 'text-justify': 'left',
+ visibility: 'visible',
+ 'text-offset': [0.5, 0.2],
+ 'icon-size': 1,
+ 'text-anchor': ['step', ['zoom'], 'left', 8, 'center'],
+ 'text-field': '{name:latin}\n{name:nonlatin}',
+ },
+ paint: {
+ 'text-color': 'rgb(117, 129, 145)',
+ 'text-halo-color': 'rgb(242,243,240)',
+ 'text-halo-width': 1,
+ 'text-halo-blur': 1,
+ 'icon-opacity': 0.7,
+ },
+ },
+ {
+ id: 'place_city_large',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ maxzoom: 12,
+ filter: [
+ 'all',
+ ['==', '$type', 'Point'],
+ ['all', ['!=', 'capital', 2], ['<=', 'rank', 3], ['==', 'class', 'city']],
+ ],
+ layout: {
+ 'text-size': 14,
+ 'icon-image': ['step', ['zoom'], 'circle-11', 8, ''],
+ 'text-transform': 'uppercase',
+ 'text-font': ['Open Sans Regular'],
+ 'text-justify': 'left',
+ visibility: 'visible',
+ 'text-offset': [0.5, 0.2],
+ 'icon-size': 0.4,
+ 'text-field': '{name:latin}\n{name:nonlatin}',
+ },
+ paint: {
+ 'text-color': 'rgb(117, 129, 145)',
+ 'text-halo-color': 'rgb(242,243,240)',
+ 'text-halo-width': 1,
+ 'text-halo-blur': 1,
+ 'icon-opacity': 0.7,
+ },
+ },
+ {
+ id: 'place_state',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ maxzoom: 12,
+ filter: ['all', ['==', '$type', 'Point'], ['==', 'class', 'state']],
+ layout: {
+ visibility: 'visible',
+ 'text-field': '{name:latin}\n{name:nonlatin}',
+ 'text-font': ['Open Sans Regular'],
+ 'text-transform': 'uppercase',
+ 'text-size': 10,
+ },
+ paint: {
+ 'text-color': 'rgb(113, 129, 144)',
+ 'text-halo-color': 'rgb(242,243,240)',
+ 'text-halo-width': 1,
+ 'text-halo-blur': 1,
+ },
+ },
+]
+
+export default layers
diff --git a/web/src/style/map_style.ts b/web/src/style/map_style.ts
new file mode 100644
index 0000000..78ef302
--- /dev/null
+++ b/web/src/style/map_style.ts
@@ -0,0 +1,1165 @@
+import sortBy from 'lodash.sortby'
+import { StyleSpecification } from 'maplibre-gl'
+import basemap from './basemap'
+import { LayerSpecificationWithZIndex } from './types'
+
+const backgroundColour = '#DBE8A5'
+const waterColour = '#2EADD9'
+
+const layers: LayerSpecificationWithZIndex[] = [
+ {
+ id: 'background',
+ type: 'background',
+ paint: {
+ 'background-color': backgroundColour,
+ },
+ },
+ ...basemap,
+ {
+ id: 'bounding_box',
+ type: 'fill',
+ source: 'site_plan',
+ 'source-layer': 'bounding_box',
+ paint: {
+ 'fill-color': backgroundColour,
+ },
+ },
+ {
+ id: 'slope',
+ type: 'raster',
+ source: 'slope',
+ minzoom: 5,
+ },
+ {
+ id: 'hillshade',
+ type: 'raster',
+ source: 'hillshade',
+ minzoom: 5,
+ },
+ {
+ id: 'ortho',
+ type: 'raster',
+ source: 'ortho',
+ minzoom: 15,
+ },
+ {
+ id: 'background_areas_backstage',
+ type: 'fill',
+ source: 'site_plan',
+ 'source-layer': 'areas_backstage_polygon',
+ paint: {
+ 'fill-pattern': 'no-access',
+ },
+ },
+ {
+ id: 'background_areas_camping_polygon',
+ type: 'fill',
+ source: 'site_plan',
+ 'source-layer': 'areas_camping_polygon',
+ paint: {
+ 'fill-color': '#AFC944',
+ },
+ },
+ {
+ id: 'background_areas_camping_outline',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'areas_camping_polygon',
+ paint: {
+ 'line-color': 'rgba(10, 100, 10, 0.4)',
+ 'line-blur': 7,
+ 'line-width': 3,
+ },
+ },
+ {
+ id: 'background_natural_woodland_polygon',
+ type: 'fill',
+ source: 'site_plan',
+ 'source-layer': 'natural_woodland_polygon',
+ layout: {},
+ paint: {
+ 'fill-color': '#528329',
+ },
+ },
+ {
+ id: 'background_natural_hedges_polygon',
+ type: 'fill',
+ source: 'site_plan',
+ 'source-layer': 'natural_hedges_polygon',
+ layout: {},
+ paint: {
+ 'fill-color': '#528329',
+ },
+ },
+ {
+ id: 'background_water_linestring',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'natural_water_linestring',
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ 'line-round-limit': 1.1,
+ },
+ paint: {
+ 'line-color': waterColour,
+ 'line-width': ['interpolate', ['linear'], ['zoom'], 13, 1, 15, 2, 18, 6],
+ },
+ },
+ {
+ id: 'background_water_polygon',
+ type: 'fill',
+ source: 'site_plan',
+ 'source-layer': 'natural_water_polygon',
+ layout: {},
+ paint: {
+ 'fill-pattern': 'water',
+ },
+ },
+ {
+ id: 'background_water_polygon_shadow',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'natural_water_polygon',
+ layout: {},
+ paint: {
+ 'line-color': '#1D718C',
+ 'line-width': ['interpolate', ['linear'], ['zoom'], 13, 0, 18, 2],
+ },
+ },
+ {
+ id: 'paths_fire',
+ type: 'fill',
+ source: 'site_plan',
+ 'source-layer': 'paths_fire_polygon',
+ layout: {},
+ paint: {
+ 'fill-color': backgroundColour,
+ },
+ },
+ {
+ id: 'paths_tracks_case',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'paths_roads_polygon',
+ minzoom: 0,
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-width': ['interpolate', ['linear'], ['zoom'], 12, 0, 17, 5],
+ 'line-color': 'rgba(132, 131, 131, 1)',
+ 'line-blur': 0.5,
+ },
+ },
+ {
+ id: 'paths_trackway_case',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'paths_trackway_polygon',
+ layout: {},
+ paint: {
+ 'line-width': 3,
+ 'line-color': 'rgba(140, 140, 140, 1)',
+ },
+ },
+ {
+ id: 'paths_trackway',
+ type: 'fill',
+ source: 'site_plan',
+ 'source-layer': 'paths_trackway_polygon',
+ layout: {},
+ paint: {
+ 'fill-color': 'rgba(185, 185, 185, 1)',
+ },
+ },
+ {
+ id: 'paths_tracks',
+ type: 'fill',
+ source: 'site_plan',
+ 'source-layer': 'paths_roads_polygon',
+ minzoom: 0,
+ paint: {
+ 'fill-color': 'rgba(177, 165, 147, 1)',
+ 'fill-outline-color': 'rgba(98, 98, 97, 0)',
+ },
+ },
+ {
+ id: 'heras',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'heras_internal__linestring',
+ paint: {
+ 'line-color': 'rgba(148, 63, 63, 1)',
+ },
+ },
+ {
+ id: 'structures_shadow',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'structures_polygon',
+ minzoom: 0,
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': 'rgba(0, 0, 0, 0.3)',
+ 'line-width': 6,
+ 'line-blur': 3,
+ },
+ },
+ {
+ id: 'structures_polygon',
+ type: 'fill',
+ source: 'site_plan',
+ 'source-layer': 'structures_polygon',
+ minzoom: 0,
+ paint: {
+ 'fill-color': '#F9E200',
+ },
+ },
+ {
+ id: 'structures_outline',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'structures_polygon',
+ minzoom: 0,
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': 'rgba(90, 81, 31, 1)',
+ },
+ },
+ {
+ id: 'structures_linestring',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'structures_linestring',
+ minzoom: 0,
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': 'rgba(90, 81, 31, 1)',
+ },
+ },
+ {
+ id: 'structures_guys',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'structures_guys_&_poles_linestring',
+ minzoom: 0,
+ paint: {
+ 'line-color': 'rgb(153, 144, 93)',
+ },
+ },
+ {
+ id: 'structures_exits',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'structures_exits_linestring',
+ minzoom: 0,
+ paint: {
+ 'line-width': 3,
+ 'line-color': 'rgb(153, 144, 93)',
+ },
+ },
+ {
+ id: 'structures_internal_linestring',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'structures_internal_linestring',
+ minzoom: 0,
+ paint: {
+ 'line-color': 'rgba(90, 81, 31, 1)',
+ },
+ },
+ {
+ id: 'structures_internal_polygon',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'structures_internal_polygon',
+ minzoom: 0,
+ paint: {
+ 'line-color': 'rgba(90, 81, 31, 1)',
+ },
+ },
+ {
+ id: 'walls',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'walls_linestring',
+ },
+ {
+ id: 'fences',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'fences_linestring',
+ paint: {
+ 'line-color': 'rgba(134, 134, 101, 1)',
+ },
+ },
+ {
+ id: 'trees',
+ type: 'circle',
+ source: 'site_plan',
+ 'source-layer': 'natural_trees_point',
+ minzoom: 13,
+ maxzoom: 0,
+ layout: {},
+ paint: {
+ 'circle-color': 'rgba(135, 118, 29, 1)',
+ 'circle-stroke-color': '#528329',
+ 'circle-stroke-width': ['interpolate', ['linear'], ['zoom'], 15, 0.5, 19, 10],
+ 'circle-radius': ['interpolate', ['linear'], ['zoom'], 15, 0, 17, 3],
+ 'circle-blur': 0,
+ },
+ },
+ {
+ id: 'buildings',
+ type: 'fill-extrusion',
+ source: 'site_plan',
+ 'source-layer': 'buildings_polygon',
+ layout: {},
+ paint: {
+ 'fill-extrusion-color': 'rgba(189, 170, 85, 1)',
+ 'fill-extrusion-height': 4,
+ },
+ },
+ {
+ id: 'services_comms_ducts_case',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'services_comms_ducts_linestring',
+ layout: {},
+ paint: {
+ 'line-color': 'rgba(150, 150, 150, 1)',
+ 'line-width': 3,
+ },
+ },
+ {
+ id: 'services_comms_ducts',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'services_comms_ducts_linestring',
+ layout: {},
+ paint: {
+ 'line-color': 'rgba(187, 0, 218, 1)',
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'services_comms_lines',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'services_comms_buried_lines_linestring',
+ layout: {},
+ paint: {
+ 'line-color': 'rgba(187, 0, 218, 1)',
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'services_comms_manholes',
+ type: 'circle',
+ source: 'site_plan',
+ 'source-layer': 'services_comms_manholes_point',
+ minzoom: 15,
+ paint: {
+ 'circle-color': 'rgba(187, 0, 218, 1)',
+ 'circle-stroke-width': 1,
+ },
+ },
+ {
+ id: 'services_comms_bt_poles',
+ type: 'circle',
+ source: 'site_plan',
+ 'source-layer': 'services_comms_bt_poles_point',
+ minzoom: 15,
+ paint: {
+ 'circle-color': 'rgba(136, 89, 6, 1)',
+ 'circle-stroke-width': 1,
+ },
+ },
+ {
+ id: 'services_comms_cabinets',
+ type: 'circle',
+ source: 'site_plan',
+ 'source-layer': 'services_comms_cabinets_point',
+ minzoom: 15,
+ paint: {
+ 'circle-color': 'rgba(218, 0, 62, 1)',
+ 'circle-stroke-width': 1,
+ },
+ },
+ {
+ id: 'services_comms_manholes_label-copy',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'services_comms_manholes_point',
+ minzoom: 15,
+ layout: {
+ 'text-field': '{id}',
+ 'text-font': ['Open Sans Regular'],
+ 'text-size': 14,
+ 'text-offset': [-1, 0],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(255, 255, 255, 1)',
+ 'text-halo-width': 2,
+ },
+ },
+ {
+ id: 'services_comms_cabinets_label',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'services_comms_cabinets_point',
+ minzoom: 15,
+ layout: {
+ 'text-field': '{name}',
+ 'text-font': ['Open Sans Regular'],
+ 'text-size': 12,
+ 'text-offset': [-2, 0],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(255, 255, 255, 1)',
+ 'text-halo-width': 2,
+ },
+ },
+ {
+ id: 'services_water_lines',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'services_water_lines_linestring',
+ layout: {},
+ paint: {
+ 'line-color': '#00C5FF',
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'services_water_points',
+ type: 'circle',
+ source: 'site_plan',
+ 'source-layer': 'services_water_points_point',
+ paint: {
+ 'circle-color': 'rgba(0, 197, 255, 1)',
+ 'circle-stroke-color': 'rgba(22, 0, 195, 1)',
+ 'circle-stroke-width': 2,
+ 'circle-radius': 3,
+ },
+ },
+ {
+ id: 'site_water_pipes',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'water_pipes_linestring',
+ paint: {
+ 'line-color': 'rgba(0, 89, 255, 1)',
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'boundary',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'heras_perimeter__linestring',
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': 'rgba(226, 11, 11, 1)',
+ 'line-dasharray': [10, 3],
+ 'line-width': ['interpolate', ['linear'], ['zoom'], 10, 1, 17, 2],
+ },
+ },
+ {
+ id: 'dk_radius',
+ type: 'fill',
+ source: 'site_plan',
+ 'source-layer': 'noc_dk_radius_polygon',
+ paint: {
+ 'fill-color': 'rgba(169, 105, 163, 1)',
+ 'fill-opacity': 0.3,
+ },
+ },
+ {
+ id: 'dk',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'noc_dk_polygon',
+ layout: {},
+ paint: {},
+ },
+ {
+ id: 'dk_names',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'noc_dk_names_point',
+ minzoom: 16,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'point',
+ 'text-field': '{text}',
+ 'text-font': ['Open Sans Regular'],
+ 'text-justify': 'center',
+ 'text-size': 14,
+ 'text-padding': 2,
+ 'symbol-avoid-edges': true,
+ 'text-max-width': 8,
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': 'rgba(169, 105, 163, 1)',
+ 'text-translate': [-4, 0],
+ },
+ },
+ {
+ id: 'noc_fiber',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'noc_fibre_linestring',
+ paint: {
+ 'line-opacity': 1,
+ 'line-color': 'rgba(147, 84, 150, 1)',
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'noc_fiber_labels',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'noc_fibre_linestring',
+ minzoom: 19,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'line',
+ 'text-field': 'Fiber ({length}m)',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-allow-overlap': false,
+ 'text-offset': [0, -1],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': 'rgba(147, 84, 150, 1)',
+ },
+ },
+ {
+ id: 'noc_copper',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'noc_copper_linestring',
+ minzoom: 0,
+ paint: {
+ 'line-opacity': 1,
+ 'line-color': 'rgba(174, 127, 176, 1)',
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'noc_copper_labels',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'noc_copper_linestring',
+ minzoom: 19,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'line',
+ 'text-field': 'Cat5e ({length}m)',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-allow-overlap': false,
+ 'text-offset': [0, -1],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': 'rgba(174, 127, 176, 1)',
+ },
+ },
+ {
+ id: 'noc_switch',
+ type: 'circle',
+ source: 'site_plan',
+ 'source-layer': 'noc_switch_point',
+ minzoom: 0,
+ maxzoom: 24,
+ layout: {},
+ paint: {
+ 'circle-color': 'rgba(75, 0, 130, 1)',
+ 'circle-radius': 3,
+ },
+ },
+ {
+ id: 'noc_switch_labels',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'noc_switch_point',
+ minzoom: 19,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'point',
+ 'symbol-spacing': 1000,
+ 'symbol-avoid-edges': true,
+ 'text-field': '{switch}',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-allow-overlap': false,
+ 'text-anchor': 'right',
+ 'text-offset': [-1, 0],
+ 'text-justify': 'right',
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': 'rgba(75, 0, 130, 1)',
+ },
+ },
+ {
+ id: 'power_generator',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'power_generator_polygon',
+ layout: {},
+ paint: {
+ 'line-color': 'magenta',
+ },
+ },
+ {
+ id: 'power_400_3',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'power_400_3_linestring',
+ layout: {},
+ paint: {
+ 'line-color': 'rgba(255, 68, 0, 1)',
+ 'line-width': 4,
+ },
+ },
+ {
+ id: 'power_125_3',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'power_125_3_linestring',
+ layout: {},
+ paint: {
+ 'line-color': 'rgba(199, 33, 33, 1)',
+ 'line-width': 3,
+ },
+ },
+ {
+ id: 'power_63_3',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'power_63_3_linestring',
+ layout: {},
+ paint: {
+ 'line-color': 'rgba(199, 33, 33, 1)',
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'power_32_3',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'power_32_3_linestring',
+ layout: {},
+ paint: {
+ 'line-color': 'rgba(199, 33, 33, 1)',
+ 'line-width': 1,
+ },
+ },
+ {
+ id: 'power_32_1',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'power_32_linestring',
+ layout: {},
+ paint: {
+ 'line-color': 'rgba(11, 11, 214, 1)',
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'power_16_1',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'power_16_linestring',
+ layout: {},
+ paint: {
+ 'line-color': 'rgba(11, 11, 214, 1)',
+ 'line-width': 1,
+ },
+ },
+ {
+ id: 'power_400_3_labels',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'power_400_3_linestring',
+ minzoom: 19,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'line',
+ 'text-field': '400A ({length}m)',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-allow-overlap': false,
+ 'text-offset': [0, -1],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': 'rgba(199, 33, 33, 1)',
+ },
+ },
+ {
+ id: 'power_125_3_labels',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'power_125_3_linestring',
+ minzoom: 19,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'line',
+ 'text-field': '125A ({length}m)',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-allow-overlap': false,
+ 'text-offset': [0, -1],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': 'rgba(199, 33, 33, 1)',
+ },
+ },
+ {
+ id: 'power_63_3_labels',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'power_63_3_linestring',
+ minzoom: 19,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'line',
+ 'text-field': '63A ({length}m)',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-allow-overlap': false,
+ 'text-offset': [0, -1],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': 'rgba(199, 33, 33, 1)',
+ },
+ },
+ {
+ id: 'power_32_3_labels',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'power_32_3_linestring',
+ minzoom: 19,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'line',
+ 'text-field': '32A ({length}m)',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-allow-overlap': false,
+ 'text-offset': [0, -1],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': 'rgba(199, 33, 33, 1)',
+ },
+ },
+ {
+ id: 'power_32_1_labels',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'power_32_linestring',
+ minzoom: 19,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'line',
+ 'text-field': '32A ({length}m)',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-allow-overlap': false,
+ 'text-offset': [0, -1],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': 'rgba(11, 11, 214, 1)',
+ },
+ },
+ {
+ id: 'power_16_1_labels',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'power_16_linestring',
+ minzoom: 19,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'line',
+ 'symbol-spacing': 1000,
+ 'text-field': '16A ({length}m)',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-allow-overlap': false,
+ 'text-offset': [0, -1],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': 'rgba(11, 11, 214, 1)',
+ },
+ },
+ {
+ id: 'power_distro',
+ type: 'circle',
+ source: 'site_plan',
+ 'source-layer': 'power_distro_point',
+ layout: {},
+ paint: {
+ 'circle-color': [
+ 'match',
+ ['get', 'distro'],
+ 'TOB/32',
+ 'blue',
+ 'TOB/16',
+ 'blue',
+ 'CABIN',
+ 'blue',
+ 'ColdRoom',
+ 'blue',
+ 'SOB',
+ 'blue',
+ 'SSB 1',
+ 'blue',
+ 'SSB 2',
+ 'blue',
+ 'MD1 32 1',
+ 'blue',
+ 'rgba(199, 33, 33, 1)',
+ ],
+ 'circle-radius': 3,
+ },
+ },
+ {
+ id: 'power_distro_labels',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'power_distro_point',
+ minzoom: 19,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'point',
+ 'symbol-spacing': 1000,
+ 'symbol-avoid-edges': true,
+ 'text-field': '{name}\n({distro})',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-allow-overlap': false,
+ 'text-anchor': 'left',
+ 'text-offset': [1, 0],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': [
+ 'match',
+ ['get', 'distro'],
+ 'TOB/32',
+ 'blue',
+ 'TOB/16',
+ 'blue',
+ 'CABIN',
+ 'blue',
+ 'ColdRoom',
+ 'blue',
+ 'SOB',
+ 'blue',
+ 'SSB 1',
+ 'blue',
+ 'SSB 2',
+ 'blue',
+ 'MD1 32 1',
+ 'blue',
+ 'rgba(199, 33, 33, 1)',
+ ],
+ },
+ },
+ {
+ id: 'lighting_festoon',
+ type: 'line',
+ source: 'site_plan',
+ 'source-layer': 'lighting_festoon_linestring',
+ layout: {},
+ paint: {
+ 'line-color': 'rgba(200, 184, 42, 1)',
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'lighting_festoon_labels',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'lighting_festoon_linestring',
+ minzoom: 19,
+ maxzoom: 24,
+ layout: {
+ 'symbol-placement': 'line',
+ 'text-field': 'Festoon ({length}m)',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-allow-overlap': false,
+ 'text-offset': [0, -1],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 0.8)',
+ 'text-halo-width': 3,
+ 'text-color': 'rgba(200, 184, 42, 1)',
+ },
+ },
+ {
+ id: 'villages_symbol',
+ type: 'circle',
+ source: 'villages',
+ 'source-layer': '',
+ minzoom: 16,
+ paint: {
+ 'circle-color': 'rgb(246, 163, 24)',
+ 'circle-radius': ['interpolate', ['linear'], ['zoom'], 16, 6, 24, 26],
+ 'circle-blur': 0.5,
+ 'circle-stroke-width': 0.5,
+ },
+ },
+ {
+ id: 'villages_text',
+ type: 'symbol',
+ source: 'villages',
+ 'source-layer': '',
+ minzoom: 17,
+ maxzoom: 24,
+ layout: {
+ 'text-field': '{name}',
+ 'text-font': ['Open Sans Regular'],
+ 'text-offset': [0, -1.8],
+ 'text-size': ['interpolate', ['linear'], ['zoom'], 17, 11, 24, 16],
+ },
+ paint: {
+ 'text-halo-color': 'rgba(244, 235, 247, 0.73)',
+ 'text-halo-width': 2,
+ 'text-halo-blur': 1,
+ },
+ },
+ {
+ id: 'labels_camping',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'camping_centroid',
+ minzoom: 16,
+ maxzoom: 24,
+ layout: {
+ 'text-field': 'Camping: {camping}',
+ 'text-font': ['Open Sans Regular'],
+ 'text-justify': 'center',
+ 'text-size': ['interpolate', ['linear'], ['zoom'], 16, 10, 24, 24],
+ 'text-padding': 2,
+ 'symbol-placement': 'point',
+ 'symbol-spacing': 1000,
+ 'symbol-avoid-edges': true,
+ 'text-max-width': 8,
+ },
+ paint: {
+ 'text-halo-width': 3,
+ 'text-halo-blur': 4,
+ 'text-halo-color': 'rgba(241, 241, 241, 1)',
+ },
+ },
+ {
+ id: 'labels_gate',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'labels_gate_labels_point',
+ minzoom: 16,
+ maxzoom: 24,
+ layout: {
+ 'text-field': '{text}',
+ 'text-size': 12,
+ 'text-optional': false,
+ 'text-font': ['Open Sans Regular'],
+ 'text-keep-upright': true,
+ 'text-ignore-placement': false,
+ 'text-allow-overlap': false,
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 1)',
+ 'text-halo-width': 3,
+ 'text-halo-blur': 4,
+ 'text-color': 'rgba(0, 0, 0, 1)',
+ },
+ },
+ {
+ id: 'labels_streets',
+ type: 'symbol',
+ source: 'site_plan',
+ 'source-layer': 'streets_linestring',
+ minzoom: 16,
+ layout: {
+ 'text-field': '{name}',
+ 'text-font': ['Raleway SemiBold'],
+ 'text-size': ['interpolate', ['linear'], ['zoom'], 16, 8, 17, 9, 23, 50],
+ 'text-max-angle': 10,
+ 'symbol-placement': 'line',
+ 'symbol-spacing': 500,
+ },
+ paint: {
+ 'text-halo-color': 'rgba(120, 120, 120, 1)',
+ 'text-halo-width': 15,
+ 'text-halo-blur': 40,
+ 'text-color': 'rgba(250, 250, 250, 1)',
+ },
+ },
+ {
+ id: 'labels_main_3',
+ type: 'symbol',
+ filter: ['!', ['has', 'priority']],
+ source: 'site_plan',
+ 'source-layer': 'labels_point',
+ minzoom: 17.5,
+ layout: {
+ 'text-field': '{text}',
+ 'text-font': ['Raleway SemiBold'],
+ 'text-size': 13,
+ 'text-optional': false,
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 1)',
+ 'text-halo-width': 3,
+ 'text-halo-blur': 1,
+ 'text-color': 'rgba(0, 0, 0, 1)',
+ },
+ },
+ {
+ id: 'labels_main_2',
+ type: 'symbol',
+ filter: ['==', ['get', 'priority'], '2'],
+ source: 'site_plan',
+ 'source-layer': 'labels_point',
+ minzoom: 16,
+ layout: {
+ 'text-field': '{text}',
+ 'text-font': ['Raleway SemiBold'],
+ 'text-size': ['interpolate', ['linear'], ['zoom'], 16, 6, 23, 30],
+ 'text-optional': false,
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 1)',
+ 'text-halo-width': 3,
+ 'text-halo-blur': 1,
+ 'text-color': 'rgba(0, 0, 0, 1)',
+ },
+ },
+ {
+ id: 'labels_main_1',
+ type: 'symbol',
+ filter: ['==', ['get', 'priority'], '1'],
+ source: 'site_plan',
+ 'source-layer': 'labels_point',
+ minzoom: 15,
+ layout: {
+ 'text-field': '{text}',
+ 'text-font': ['Raleway SemiBold'],
+ 'text-size': ['interpolate', ['linear'], ['zoom'], 15, 10, 23, 40],
+ 'text-optional': false,
+ },
+ paint: {
+ 'text-halo-color': 'rgba(241, 241, 241, 1)',
+ 'text-halo-width': 3,
+ 'text-halo-blur': 1,
+ 'text-color': 'rgba(0, 0, 0, 1)',
+ },
+ },
+]
+
+const style: StyleSpecification = {
+ version: 8,
+ name: 'EMF',
+ center: [-2.3784, 52.0411],
+ zoom: 16,
+ bearing: 0,
+ pitch: 0,
+ sources: {
+ openmaptiles: {
+ type: 'vector',
+ url: 'https://api.maptiler.com/tiles/v3/tiles.json?key=iiaOS0kq1MPr2LlHPTSa',
+ },
+ site_plan: {
+ type: 'vector',
+ url: 'https://map.emfcamp.org/capabilities/buildmap',
+ },
+ villages: {
+ type: 'geojson',
+ data: 'https://www.emfcamp.org/api/villages.geojson',
+ },
+ slope: {
+ type: 'raster',
+ tiles: ['https://map.emfcamp.org/data/slope/{z}/{x}/{y}'],
+ attribution: 'Elevation data © Environment Agency 2022. All rights reserved.',
+ },
+ hillshade: {
+ type: 'raster',
+ tiles: ['https://map.emfcamp.org/data/hillshade/{z}/{x}/{y}'],
+ attribution: 'Elevation data © Environment Agency 2022. All rights reserved.',
+ },
+ ortho: {
+ type: 'raster',
+ tiles: ['https://map.emfcamp.org/data/ortho/{z}/{x}/{y}'],
+ },
+ },
+ sprite: 'https://openmaptiles.github.io/positron-gl-style/sprite',
+ glyphs: 'https://map.emfcamp.org/fonts/{fontstack}/{range}.pbf',
+ layers: sortBy(layers, [(item) => item.zindex || 0]).map((item) => {
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ const { zindex: _, ...new_item } = item
+ return new_item
+ }),
+}
+
+export default style
diff --git a/web/src/style/types.ts b/web/src/style/types.ts
new file mode 100644
index 0000000..01df662
--- /dev/null
+++ b/web/src/style/types.ts
@@ -0,0 +1,5 @@
+import { LayerSpecification } from 'maplibre-gl'
+
+export type LayerSpecificationWithZIndex = LayerSpecification & {
+ zindex?: number
+}
diff --git a/web/vite.config.ts b/web/vite.config.ts
index db7fb82..0770e88 100644
--- a/web/vite.config.ts
+++ b/web/vite.config.ts
@@ -1,5 +1,6 @@
import { defineConfig } from 'vite'
import { VitePWA } from 'vite-plugin-pwa'
+import { renderSVG } from 'vite-plugin-render-svg'
export default defineConfig({
base: './',
@@ -56,5 +57,10 @@ export default defineConfig({
theme_color: '#FB48C4',
},
}),
+ renderSVG({
+ pattern: 'src/icons/*.svg',
+ urlPrefix: 'icons/',
+ outputOriginal: true,
+ }),
],
})