diff --git a/package-lock.json b/package-lock.json index 8bddb7d36..33b9bed33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "dayjs": "^1.11.13", "echarts": "^5.5.1", "lodash": "^4.17.21", + "maplibre-gl": "^5.0.1", "moment-timezone": "^0.5.46", "normalize.css": "^8.0.1", "pinia": "^2.0.28", @@ -4394,6 +4395,113 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "license": "ISC", + "dependencies": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/geojson-rewind/node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC" + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==", + "license": "BSD-2-Clause" + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause" + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "license": "ISC", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "23.1.0", + "resolved": "https://registry.npmmirror.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-23.1.0.tgz", + "integrity": "sha512-R6/ihEuC5KRexmKIYkWqUv84Gm+/QwsOUgHyt1yy2XqCdGdLvlBWVWIIeTZWN4NGdwmY6xDzdSGU2R9oBLNg2w==", + "license": "ISC", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "quickselect": "^3.0.0", + "rw": "^1.3.3", + "tinyqueue": "^3.0.0" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC" + }, + "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC" + }, "node_modules/@mars3d/heatmap.js": { "version": "2.0.7", "resolved": "https://registry.npmmirror.com/@mars3d/heatmap.js/-/heatmap.js-2.0.7.tgz", @@ -7410,6 +7518,15 @@ "integrity": "sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==", "license": "MIT" }, + "node_modules/@types/geojson-vt": { + "version": "3.2.5", + "resolved": "https://registry.npmmirror.com/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", + "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -7439,6 +7556,23 @@ "@types/lodash": "*" } }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==", + "license": "MIT" + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, "node_modules/@types/node": { "version": "18.19.68", "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.68.tgz", @@ -7448,6 +7582,12 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/pbf": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==", + "license": "MIT" + }, "node_modules/@types/semver": { "version": "7.5.8", "resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.8.tgz", @@ -7461,6 +7601,15 @@ "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", "license": "MIT" }, + "node_modules/@types/supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmmirror.com/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -10660,6 +10809,12 @@ "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==", "license": "MIT" }, + "node_modules/geojson-vt": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/geojson-vt/-/geojson-vt-4.0.2.tgz", + "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==", + "license": "ISC" + }, "node_modules/get-intrinsic": { "version": "1.2.6", "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.6.tgz", @@ -10693,6 +10848,18 @@ "node": ">=4" } }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-symbol-description": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz", @@ -10720,6 +10887,12 @@ "js-binary-schema-parser": "^2.0.3" } }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==", + "license": "MIT" + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", @@ -10755,6 +10928,44 @@ "node": ">=10.13.0" } }, + "node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "license": "MIT", + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/global-prefix/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", @@ -11059,6 +11270,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.1.0.tgz", @@ -11614,6 +11834,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==", + "license": "MIT" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", @@ -11652,6 +11878,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/kolorist": { "version": "1.8.0", "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz", @@ -11812,6 +12047,65 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/maplibre-gl": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/maplibre-gl/-/maplibre-gl-5.0.1.tgz", + "integrity": "sha512-kNvod1Tq0BcZvn43UAciA3DrzaEGmowqMoI6nh3kUo9rf+7m89mFJI9dELxkWzJ/N9Pgnkp7xF1jzTP08PGpCw==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@maplibre/maplibre-gl-style-spec": "^23.0.0", + "@types/geojson": "^7946.0.15", + "@types/geojson-vt": "3.2.5", + "@types/mapbox__point-geometry": "^0.1.4", + "@types/mapbox__vector-tile": "^1.3.4", + "@types/pbf": "^3.0.5", + "@types/supercluster": "^7.1.3", + "earcut": "^3.0.1", + "geojson-vt": "^4.0.2", + "gl-matrix": "^3.4.3", + "global-prefix": "^4.0.0", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^3.3.0", + "potpack": "^2.0.0", + "quickselect": "^3.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^3.0.0", + "vt-pbf": "^3.1.3" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } + }, + "node_modules/maplibre-gl/node_modules/earcut": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/earcut/-/earcut-3.0.1.tgz", + "integrity": "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==", + "license": "ISC" + }, + "node_modules/maplibre-gl/node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC" + }, + "node_modules/maplibre-gl/node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC" + }, "node_modules/marchingsquares": { "version": "1.3.3", "resolved": "https://registry.npmmirror.com/marchingsquares/-/marchingsquares-1.3.3.tgz", @@ -11989,6 +12283,12 @@ "dev": true, "license": "MIT" }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", + "license": "MIT" + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", @@ -12971,6 +13271,12 @@ "dev": true, "license": "MIT" }, + "node_modules/potpack": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/potpack/-/potpack-2.0.0.tgz", + "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==", + "license": "ISC" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -14323,6 +14629,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", + "dependencies": { + "kdbush": "^4.0.2" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", @@ -15250,6 +15565,17 @@ "vue": "^3.0.0" } }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "license": "MIT", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, "node_modules/vue": { "version": "3.5.13", "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz", diff --git a/package.json b/package.json index 8212ffcf6..35aed3c0a 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "dayjs": "^1.11.13", "echarts": "^5.5.1", "lodash": "^4.17.21", + "maplibre-gl": "^5.0.1", "moment-timezone": "^0.5.46", "normalize.css": "^8.0.1", "pinia": "^2.0.28", diff --git a/public/baseConfig.js b/public/baseConfig.js index 8359a15c7..ab5fc0dfc 100644 --- a/public/baseConfig.js +++ b/public/baseConfig.js @@ -6,10 +6,23 @@ window['settings'] = { base: { icon: './images/icons/base/党政首脑机关.png', color: '#ea7354', + model: './models/基地.glb', + }, + airport: { + icon: './images/icons/base/军用机场.png', + color: '#80b1d3', + model: './models/机场.glb', + }, + port: { + icon: './images/icons/base/军用港口.png', + color: '#fcee82', + model: './models/港口.glb', + }, + station: { + icon: './images/icons/base/民用机场.png', + color: '#8dd3c7', + model: './models/雷达.glb', }, - airport: { icon: './images/icons/base/军用机场.png', color: '#80b1d3' }, - port: { icon: './images/icons/base/军用港口.png', color: '#fcee82' }, - station: { icon: './images/icons/base/民用机场.png', color: '#8dd3c7' }, }, mbDict: { 甲: { diff --git a/public/models/基地.glb b/public/models/基地.glb new file mode 100644 index 000000000..c0b67a2db Binary files /dev/null and b/public/models/基地.glb differ diff --git a/public/models/机场.glb b/public/models/机场.glb new file mode 100644 index 000000000..4b5398ce1 Binary files /dev/null and b/public/models/机场.glb differ diff --git a/public/models/港口.glb b/public/models/港口.glb new file mode 100644 index 000000000..6e67974fd Binary files /dev/null and b/public/models/港口.glb differ diff --git a/public/models/雷达.glb b/public/models/雷达.glb new file mode 100644 index 000000000..aea242d28 Binary files /dev/null and b/public/models/雷达.glb differ diff --git a/public/style.json b/public/style.json new file mode 100644 index 000000000..c1a59fad7 --- /dev/null +++ b/public/style.json @@ -0,0 +1,6738 @@ +{ + "version": 8, + "name": "OSM OpenMapTiles", + "metadata": { "maputnik:renderer": "mbgljs" }, + "center": [0, 0], + "zoom": 1, + "bearing": 0, + "pitch": 0, + "sources": { + "openmaptiles": { + "type": "vector", + "scheme": "tms", + "tiles": [ + "http://192.168.10.187:18080/geoserver/gwc/service/tms/1.0.0/osm%3Aosm_admin@EPSG%3A900913@pbf/{z}/{x}/{y}.pbf" + ] + } + }, + "sprite": "http://219.238.106.206:9310/tileStyles/sprite", + "glyphs": "http://219.238.106.206:9310/tileStyles/fonts/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "layout": { "visibility": "visible" }, + "paint": { "background-color": "rgba(60, 62, 78, 1)" } + }, + { + "id": "buildings", + "source": "openmaptiles", + "source-layer": "building", + "type": "fill", + "paint": { + "fill-color": "#dfdcd7", + "fill-opacity": 1 + } + }, + + { + "id": "administrative", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "administrative" + }, + { + "id": "landuse_classes", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "landuse", + "minzoom": 7, + "filter": [ + "all", + [ + "in", + "class", + "railway", + "cemetery", + "military", + "residential", + "commercial", + "industrial", + "garages", + "retail", + "bus_station", + "school", + "university", + "kindergarten", + "college", + "hospital", + "stadium", + "pitch", + "playground", + "track", + "dam" + ], + ["==", "$type", "Polygon"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "fill-color": [ + "match", + ["get", "class"], + "railway", + "#ebdbe8", + "residential", + "#e0dfdf", + "cemetery", + "#aacbaf", + "military", + "#fceaea", + "commercial", + "#f2dad9", + "industrial", + "#ebdbe8", + "garages", + "#dfddce", + "retail", + "#ffd6d1", + "bus_station", + "#e9e7e2", + "school", + "#ffffe5", + "university", + "#ffffe5", + "kindergarten", + "#ffffe5", + "college", + "#ffffe5", + "hospital", + "#ffffe5", + "stadium", + "#d5ffd9", + "pitch", + "#aae0cb", + "playground", + "#d5ffd9", + "track", + "#aae0cb", + "dam", + "#adadad", + "#000" + ], + "fill-opacity": 1 + } + }, + { + "id": "landuse_residential", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "landuse", + "minzoom": 6, + "maxzoom": 24, + "filter": [ + "all", + ["in", "class", "residential", "suburbs", "neighbourhood"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "fill-color": { + "stops": [ + [7, "#d0d0d0"], + [11, "#dddddd"], + [12, "#e0dfdf"] + ] + } + } + }, + { + "id": "aeroway_fill", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "aeroway", + "minzoom": 11, + "filter": ["==", "$type", "Polygon"], + "layout": { "visibility": "visible" }, + "paint": { + "fill-color": { + "stops": [ + [6, "rgba(223, 223, 228, 1)"], + [12, "rgba(232, 231, 223, 1)"] + ] + }, + "fill-opacity": 1 + } + }, + { + "id": "landcover_classes", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "landcover", + "maxzoom": 13, + "filter": [ + "all", + ["in", "class", "farmland", "wood", "rock", "grass", "wetland", "sand"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "fill-color": [ + "match", + ["get", "class"], + "farmland", + "#eef0d5", + "wood", + "#add19e", + "rock", + "#eee5dc", + "grass", + "#cdebb0", + "sand", + "#f5e9c6", + "wetland", + "#add19e", + "#000" + ], + "fill-opacity": { + "stops": [ + [7, 0.5], + [10, 1] + ] + }, + "fill-antialias": false + } + }, + { + "id": "landcover_class_outline", + "type": "line", + "source": "openmaptiles", + "source-layer": "landcover", + "filter": ["all", ["in", "class", "farmland"]], + "layout": { "visibility": "visible" }, + "paint": { "line-color": "#c7c9ae", "line-width": 0.5 } + }, + { + "id": "landcover_park", + "type": "fill", + "source": "openmaptiles", + "source-layer": "landcover", + "minzoom": 13, + "filter": ["all", ["==", "subclass", "park"]], + "layout": { "visibility": "visible" }, + "paint": { "fill-color": "#c8facc", "fill-antialias": true } + }, + { + "id": "landcover_subclasses", + "type": "fill", + "source": "openmaptiles", + "source-layer": "landcover", + "minzoom": 13, + "filter": [ + "all", + [ + "in", + "subclass", + "allotments", + "bare_rock", + "beach", + "dune", + "scrub", + "farm", + "farmland", + "forest", + "garden", + "grass", + "grassland", + "golf_course", + "heath", + "meadow", + "orchard", + "plant_nursery", + "recreation_ground", + "reedbed", + "saltmarsh", + "sand", + "scree", + "swamp", + "tidalflat", + "tundra", + "village_green", + "vineyard", + "wet_meadow", + "wetland", + "wood" + ] + ], + "layout": { "visibility": "visible" }, + "paint": { + "fill-color": [ + "match", + ["get", "subclass"], + "allotments", + "#c9e1bf", + "bare_rock", + "#eee5dc", + "beach", + "#fff1ba", + "bog", + "#d6d99f", + "dune", + "#f5e9c6", + "scrub", + "#c8d7ab", + "farm", + "#f5dcba", + "farmland", + "#eef0d5", + "forest", + "#add19e", + "grass", + "#cdebb0", + "grassland", + "#cdebb0", + "golf_course", + "#def6c0", + "heath", + "#d6d99f", + "mangrove", + "#c8d7ab", + "meadow", + "#cdebb0", + "orchard", + "#aedfa3", + "park", + "#c8facc", + "garden", + "#cdebb0", + "plant_nursery", + "#aedfa3", + "recreation_ground", + "#d5ffd9", + "reedbed", + "#cdebb0", + "saltmarsh", + "#cdebb0", + "sand", + "#f5e9c6", + "scree", + "#eee5dc", + "swamp", + "#add19e", + "tidalflat", + "#DED6CF", + "village_green", + "#cdebb0", + "vineyard", + "#aedfa3", + "wet_meadow", + "#cdebb0", + "wetland", + "#add19e", + "wood", + "#add19e", + "marsh", + "#ff0", + "#FFFFFF" + ], + "fill-antialias": true + } + }, + { + "id": "landcover_subclass_patterns", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "landcover", + "minzoom": 13, + "filter": [ + "all", + [ + "in", + "subclass", + "allotments", + "bare_rock", + "beach", + "bog", + "dune", + "scrub", + "farm", + "farmland", + "forest", + "garden", + "grass", + "grassland", + "golf_course", + "heath", + "mangrove", + "marsh", + "meadow", + "orchard", + "park", + "plant_nursery", + "recreation_ground", + "reedbed", + "saltern", + "saltmarsh", + "sand", + "scree", + "swamp", + "village_green", + "vineyard", + "wet_meadow", + "wetland", + "wood" + ] + ], + "layout": { "visibility": "visible" }, + "paint": { + "fill-opacity": [ + "match", + ["get", "subclass"], + "beach", + 0.4, + "forest", + 0.4, + "bare_rock", + 0.3, + "scrub", + 0.6, + "garden", + 0.6, + "scree", + 0.3, + "wood", + 0.4, + 1 + ] + } + }, + { + "id": "landcover_subclass_outline", + "type": "line", + "source": "openmaptiles", + "source-layer": "landcover", + "minzoom": 15, + "filter": [ + "all", + [ + "in", + "subclass", + "allotments", + "farm", + "farmland", + "recreation_ground" + ] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": [ + "match", + ["get", "subclass"], + "allotments", + "#B1C6A8", + "farm", + "#d1b48c", + "farmland", + "#c7c9ae", + "recreation_ground", + "#3c6640", + "#000" + ], + "line-width": [ + "match", + ["get", "subclass"], + "recreation_ground", + 0.3, + 0.5 + ], + "line-opacity": 1 + } + }, + { + "id": "landcover_ice", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "landcover", + "minzoom": 5, + "filter": ["all", ["in", "class", "ice"]], + "paint": { "fill-color": "#ddecec", "fill-antialias": false } + }, + { + "id": "landcover_ice_outline", + "type": "line", + "source": "openmaptiles", + "source-layer": "landcover", + "minzoom": 5, + "filter": ["all", ["in", "class", "ice"]], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "#9cf", + "line-width": { + "stops": [ + [5, 1], + [10, 1.5] + ] + }, + "line-dasharray": { + "stops": [ + [5, [1, 0]], + [10, [4, 2]] + ] + } + } + }, + { + "id": "waterway_tunnel", + "type": "line", + "source": "openmaptiles", + "source-layer": "waterway", + "minzoom": 14, + "filter": ["all", ["==", "brunnel", "tunnel"]], + "layout": { "line-cap": "round", "visibility": "visible" }, + "paint": { + "line-color": "#a0c8f0", + "line-width": { + "base": 1.3, + "stops": [ + [13, 0.5], + [20, 6] + ] + }, + "line-dasharray": [2, 4] + } + }, + { + "id": "waterway_river", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "waterway", + "filter": [ + "all", + ["==", "class", "river"], + ["!=", "brunnel", "tunnel"], + ["!=", "intermittent", 1] + ], + "layout": { "line-cap": "round", "visibility": "visible" }, + "paint": { + "line-color": "#a0c8f0", + "line-width": { + "base": 1.2, + "stops": [ + [11, 0.5], + [20, 6] + ] + } + } + }, + { + "id": "waterway_river_intermittent", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "waterway", + "filter": [ + "all", + ["==", "class", "river"], + ["!=", "brunnel", "tunnel"], + ["==", "intermittent", 1] + ], + "layout": { "line-cap": "round" }, + "paint": { + "line-color": "#a0c8f0", + "line-width": { + "base": 1.2, + "stops": [ + [11, 0.5], + [20, 6] + ] + }, + "line-dasharray": [3, 2] + } + }, + { + "id": "waterway_other", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "waterway", + "filter": [ + "all", + ["!=", "class", "river"], + ["!=", "brunnel", "tunnel"], + ["!=", "intermittent", 1] + ], + "layout": { "line-cap": "round", "visibility": "visible" }, + "paint": { + "line-color": "#a0c8f0", + "line-width": { + "base": 1.3, + "stops": [ + [13, 0.5], + [20, 6] + ] + } + } + }, + { + "id": "waterway_other_intermittent", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "waterway", + "filter": [ + "all", + ["!=", "class", "river"], + ["!=", "brunnel", "tunnel"], + ["==", "intermittent", 1] + ], + "layout": { "line-cap": "round", "visibility": "visible" }, + "paint": { + "line-color": "#a0c8f0", + "line-width": { + "base": 1.3, + "stops": [ + [13, 0.5], + [20, 6] + ] + }, + "line-dasharray": [4, 3] + } + }, + { + "id": "water_intermittent", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "water", + "filter": ["all", ["==", "intermittent", 1]], + "layout": { "visibility": "visible" }, + "paint": { "fill-color": "rgba(172, 218, 251, 1)", "fill-opacity": 0.85 } + }, + { + "id": "water", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "water", + "filter": ["all", ["!=", "intermittent", 1], ["!=", "brunnel", "tunnel"]], + "layout": { "visibility": "visible" }, + "paint": { "fill-color": "#aad3df", "fill-translate-anchor": "map" } + }, + { + "id": "building", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "building", + "minzoom": 12, + "maxzoom": 24, + "layout": { "visibility": "visible" }, + "paint": { + "fill-color": { + "stops": [ + [13, "rgba(222, 213, 207, 1)"], + [16, "#d9d0c9"] + ] + }, + "fill-outline-color": { + "base": 1, + "stops": [ + [13, "#9A918A"], + [16, "rgba(166, 157, 150, 1)"] + ] + } + } + }, + { + "id": "national_parks", + "type": "line", + "source": "openmaptiles", + "source-layer": "park", + "minzoom": 8, + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "rgba(154, 199, 136, 1)", + "line-width": { + "base": 1, + "stops": [ + [8, 1.2], + [9, 1.5], + [10, 3.6], + [24, 3.6] + ] + }, + "line-offset": 1, + "line-opacity": 0.8 + } + }, + { + "id": "national_parks_thin", + "type": "line", + "source": "openmaptiles", + "source-layer": "park", + "minzoom": 10, + "layout": { "visibility": "none" }, + "paint": { "line-color": "rgba(93, 156, 76, 1)", "line-width": 1.5 } + }, + { + "id": "aeroway_runway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "aeroway", + "minzoom": 11, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "class", "runway"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "rgba(178, 181, 209, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [11, 3], + [20, 48] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "aeroway_taxiway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "aeroway", + "minzoom": 11, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "class", "taxiway"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "rgba(178, 181, 209, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [11, 1], + [20, 24] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "ferry", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 4, + "filter": ["all", ["in", "class", "ferry"]], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#66f", + "line-width": { + "stops": [ + [10, 0.5], + [14, 1.1] + ] + }, + "line-dasharray": [6, 6] + } + }, + { + "id": "landuse_class_pattern", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "landuse", + "filter": ["all", ["in", "class", "military", "cemetery"]], + "layout": { "visibility": "visible" }, + "paint": { "fill-color": "#000000", "fill-opacity": 1 } + }, + { + "id": "landuse_class_outline", + "type": "line", + "source": "openmaptiles", + "source-layer": "landuse", + "minzoom": 13, + "filter": [ + "all", + [ + "in", + "class", + "railway", + "military", + "residential", + "commercial", + "industrial", + "retail", + "school", + "university", + "kindergarten", + "college", + "hospital", + "stadium", + "pitch", + "playground", + "track", + "theme_park", + "zoo", + "dam" + ] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": [ + "match", + ["get", "class"], + "railway", + "#c6b3c3", + "military", + "#ff5555", + "residential", + "#b9b9b9", + "commercial", + "#f2dad9", + "industrial", + "#c6b3c3", + "retail", + "#d99c95", + "school", + "#A6A68C", + "university", + "#A6A68C", + "kindergarten", + "#A6A68C", + "college", + "#A6A68C", + "hospital", + "#A6A68C", + "stadium", + "#7ca680", + "pitch", + "#7aaa97", + "playground", + "#3c6640", + "track", + "#7aaa96", + "theme_park", + "#660033", + "zoo", + "#660033", + "dam", + "#444444", + "#000" + ], + "line-width": [ + "match", + ["get", "class"], + "railway", + 0.7, + "military", + 2, + "residential", + 0.5, + "commercial", + 0.5, + "industrial", + 0.5, + "retail", + 0.5, + "school", + 0.3, + "university", + 0.3, + "kindergarten", + 0.3, + "college", + 0.3, + "hospital", + 0.3, + "stadium", + 0.3, + "pitch", + 0.5, + "playground", + 0.3, + "track", + 0.5, + "theme_park", + 1, + "zoo", + 1, + "dam", + 2, + 1 + ], + "line-offset": ["match", ["get", "class"], "military", 1, 0], + "line-opacity": ["match", ["get", "class"], "military", 0.24, 1] + } + }, + { + "id": "landuse_class_themepark", + "type": "line", + "source": "openmaptiles", + "source-layer": "landuse", + "minzoom": 13, + "filter": ["all", ["in", "class", "theme_park", "zoo"]], + "layout": { + "line-cap": "square", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#660033", + "line-width": { + "stops": [ + [9, 3.5], + [14, 5.5] + ] + }, + "line-offset": 2, + "line-opacity": { + "stops": [ + [9, 0.1], + [12, 0.3] + ] + } + } + }, + { + "id": "tunnel_motorway_link_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["==", "class", "motorway_link"], + ["==", "ramp", 1], + ["==", "brunnel", "tunnel"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [11, "#c24e6b"], + [12, "#dc2a67"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [11, 1.5], + [12, 4], + [14, 7.8], + [16, 12], + [17, 13], + [18, 16], + [19, 17] + ] + } + } + }, + { + "id": "tunnel_service_track_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "service", "track"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#cfcdca", + "line-width": { + "base": 1.2, + "stops": [ + [15, 1], + [16, 4], + [20, 11] + ] + }, + "line-dasharray": [0.5, 0.25] + } + }, + { + "id": "tunnel_link_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "ramp", "1"], + ["==", "brunnel", "tunnel"], + [">", "layer", 0] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#e9ac77", + "line-width": { + "base": 1.2, + "stops": [ + [12, 1], + [13, 3], + [14, 4], + [20, 15] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "tunnel_street_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "street", "street_limited"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#cfcdca", + "line-width": { + "base": 1.2, + "stops": [ + [12, 0.5], + [13, 1], + [14, 4], + [20, 15] + ] + }, + "line-opacity": { + "stops": [ + [12, 0], + [12.5, 1] + ] + } + } + }, + { + "id": "tunnel_tertiary_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "tertiary"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#8f8f8f", + "line-width": { + "base": 1.2, + "stops": [ + [11, 2.5], + [12, 5], + [13, 5], + [14, 9], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + }, + "line-opacity": 1, + "line-dasharray": [0.5, 0.25] + } + }, + { + "id": "tunnel_secondary_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "secondary"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#707d05", + "line-width": { + "base": 1.2, + "stops": [ + [11, 3.5], + [12, 5], + [13, 5], + [14, 9], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + }, + "line-opacity": 1, + "line-dasharray": [0.5, 0.25] + } + }, + { + "id": "tunnel_trunk_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": ["all", ["==", "brunnel", "tunnel"], ["in", "class", "trunk"]], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [11, "#cf6649"], + [12, "#c84e2f"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [11, 3.5], + [12, 6], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + }, + "line-dasharray": [0.5, 0.25] + } + }, + { + "id": "tunnel_trunk_construction_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "trunk_construction"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "rgba(255, 255, 255, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [11, 3.5], + [12, 6], + [15, 10], + [16, 18], + [17, 21], + [18, 25] + ] + }, + "line-dasharray": [1, 0] + } + }, + { + "id": "tunnel_primary_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "primary"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [6, "#a06b00"], + [10, "rgba(160, 116, 0, 1)"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [11, 3.5], + [12, 6], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + }, + "line-dasharray": [0.5, 0.25] + } + }, + { + "id": "tunnel_motorway_construction_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "class", "motorway_construction"], + ["==", "brunnel", "tunnel"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [6, "#dc2a67"], + [10, "#c24e6b"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [5, 0], + [7, 1.75], + [18, 27] + ] + }, + "line-dasharray": [0.5, 0.25] + } + }, + { + "id": "tunnel_motorway_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "class", "motorway"], + ["==", "brunnel", "tunnel"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [6, "#dc2a67"], + [10, "#c24e6b"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [5, 0], + [7, 1.75], + [18, 27] + ] + }, + "line-dasharray": [0.5, 0.25] + } + }, + { + "id": "tunnel_path_casing_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "tunnel"], + ["==", "class", "path"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "rgba(50, 50, 50, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [13, 3.7], + [14, 4], + [15, 4.3], + [17, 4.3], + [18, 4.6] + ] + }, + "line-dasharray": [1, 0.5] + } + }, + { + "id": "tunnel_path_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "tunnel"], + ["==", "class", "path"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "rgba(255, 255, 255, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [13, 2.7], + [14, 3], + [15, 3.3], + [17, 3.3], + [18, 3.6] + ] + }, + "line-dasharray": [1, 0] + } + }, + { + "id": "tunnel_path_cycleway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "tunnel"], + ["in", "class", "path"], + ["any", ["==", "subclass", "cycleway"], ["==", "bicycle", "designated"]] + ], + "paint": { + "line-color": "#0000ff", + "line-width": { + "base": 1.2, + "stops": [ + [13, 0.8], + [14, 1], + [15, 1.3], + [17, 1.3], + [18, 1.6] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "tunnel_path_bridleway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "tunnel"], + ["in", "class", "path"], + ["any", ["==", "subclass", "bridleway"], ["==", "horse", "designated"]], + ["!=", "bicycle", "designated"] + ], + "paint": { + "line-color": "#008000", + "line-width": { + "base": 1.2, + "stops": [ + [13, 0.8], + [14, 1], + [15, 1.3], + [17, 1.3], + [18, 1.6] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "tunnel_path_footway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "tunnel"], + ["in", "class", "path"], + ["in", "subclass", "footway", "path"], + ["!=", "bicycle", "designated"], + ["!=", "horse", "designated"] + ], + "paint": { + "line-color": "#fa8072", + "line-width": { + "base": 1.2, + "stops": [ + [13, 0.8], + [14, 1], + [15, 1.3], + [17, 1.3], + [18, 1.6] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "tunnel_motorway_link", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 8, + "filter": [ + "all", + ["==", "class", "motorway"], + ["==", "ramp", 1], + ["==", "brunnel", "tunnel"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#f1bcc6", + "line-width": { + "base": 1.2, + "stops": [ + [8, 0.7], + [11, 0.9], + [12, 3], + [14, 6.6], + [16, 10.4], + [17, 11.4], + [18, 14.4], + [19, 15.4] + ] + }, + "line-opacity": 1, + "line-dasharray": [0.5, 0.25] + } + }, + { + "id": "tunnel_service_track", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 15, + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "service", "track"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#f2f2f2", + "line-width": { + "base": 1.2, + "stops": [ + [15, 0.8], + [16, 1.9], + [17, 3.1], + [18, 3.9], + [19, 6.9] + ] + } + } + }, + { + "id": "tunnel_service_track_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 15, + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "service_construction", "track_construction"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fff", + "line-width": { + "base": 1.2, + "stops": [ + [15, 0.8], + [16, 1.9], + [17, 3.1], + [18, 3.9], + [19, 6.9] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "tunnel_link", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "ramp", "1"], + ["==", "brunnel", "tunnel"], + [">", "layer", 0] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fff4c6", + "line-width": { + "base": 1.2, + "stops": [ + [12.5, 0], + [13, 1.5], + [14, 2.5], + [20, 11.5] + ] + } + } + }, + { + "id": "tunnel_minor", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": ["all", ["==", "brunnel", "tunnel"], ["in", "class", "minor"]], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fff", + "line-width": { + "base": 1.2, + "stops": [ + [13.5, 0], + [14, 2.5], + [20, 11.5] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "tunnel_minor_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "minor_construction"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fff", + "line-width": { + "base": 1.2, + "stops": [ + [13.5, 0], + [14, 2.5], + [20, 11.5] + ] + }, + "line-opacity": 1, + "line-dasharray": [2, 2] + } + }, + { + "id": "tunnel_tertiary", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "tertiary"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#ffffff", + "line-width": { + "base": 1.2, + "stops": [ + [11, 1.9], + [12, 3], + [13, 3.9], + [14, 7.8], + [15, 8.8], + [16, 16.4], + [17, 19.4], + [18, 25.4] + ] + } + } + }, + { + "id": "tunnel_tertiary_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "tertiary_construction"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#ffffff", + "line-width": { + "base": 1.2, + "stops": [ + [11, 1.9], + [12, 3], + [13, 3.9], + [14, 7.8], + [15, 8.8], + [16, 16.4], + [17, 19.4], + [18, 25.4] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "tunnel_secondary", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 8, + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "secondary"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fafcd7", + "line-width": { + "base": 1.2, + "stops": [ + [8, 1], + [9, 1.1], + [10, 1.1], + [11, 2.9], + [12, 4.3], + [12, 4.3], + [14, 7.6], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + } + } + }, + { + "id": "tunnel_secondary_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 8, + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "secondary_construction"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fafcd7", + "line-width": { + "base": 1.2, + "stops": [ + [8, 1], + [9, 1.1], + [10, 1.1], + [11, 2.9], + [12, 4.3], + [12, 4.3], + [14, 7.6], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "tunnel_primary", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "primary"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#feecd5", + "line-width": { + "base": 1.2, + "stops": [ + [5, 0.4], + [6, 0.6], + [7, 1], + [8, 1.4], + [9, 1.9], + [10, 1.9], + [11, 4.5], + [12, 5], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "tunnel_primary_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "primary_construction"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#feecd5", + "line-width": { + "base": 1.2, + "stops": [ + [5, 0.4], + [6, 0.6], + [7, 1], + [8, 1.4], + [9, 1.9], + [10, 1.9], + [11, 4.5], + [12, 5], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + }, + "line-opacity": 1, + "line-dasharray": [2, 2] + } + }, + { + "id": "tunnel_trunk", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": ["all", ["==", "brunnel", "tunnel"], ["in", "class", "trunk"]], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [5, "#f5977a"], + [11, "#fcd7cc"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [5, 0.4], + [6, 0.6], + [7, 1], + [8, 1.4], + [9, 1.9], + [10, 1.9], + [11, 4.5], + [12, 5], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "tunnel_trunk_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "tunnel"], + ["in", "class", "trunk_construction"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#f9b29c", + "line-width": { + "base": 1.2, + "stops": [ + [5, 0.4], + [6, 0.6], + [7, 1], + [8, 1.4], + [9, 1.9], + [10, 1.9], + [11, 4.5], + [12, 5], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + }, + "line-opacity": 1, + "line-dasharray": [2, 2] + } + }, + { + "id": "tunnel_motorway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "class", "motorway"], + ["==", "brunnel", "tunnel"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [5, "#e66e89"], + [11, "#f1bcc6"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [5, 0], + [7, 1], + [18, 25] + ] + } + } + }, + { + "id": "tunnel_motorway_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "class", "motorway_construction"], + ["==", "brunnel", "tunnel"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [5, "#e66e89"], + [11, "#f1bcc6"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [5, 0], + [7, 1], + [18, 25] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "tunnel_major_rail", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": ["all", ["==", "brunnel", "tunnel"], ["in", "class", "rail"]], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "rgba(166, 166, 166, 1)", + "line-width": { + "base": 1.4, + "stops": [ + [8, 0.8], + [15, 3], + [20, 5.4] + ] + } + } + }, + { + "id": "tunnel_major_rail_hatching", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 9, + "filter": [ + "all", + ["in", "brunnel", "tunnel", "tunnel"], + ["==", "class", "rail"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [8, "rgba(114, 114, 114, 0.44)"], + [10, "rgba(199, 199, 199, 1)"] + ] + }, + "line-width": { + "base": 1.4, + "stops": [ + [8, 0], + [15, 2], + [20, 4] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "road_area_pier", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": ["all", ["==", "$type", "Polygon"], ["==", "class", "pier"]], + "layout": { "visibility": "visible" }, + "paint": { + "fill-color": "rgba(246, 241, 229, 1)", + "fill-antialias": true + } + }, + { + "id": "road_pier", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": ["all", ["==", "$type", "LineString"], ["==", "class", "pier"]], + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "rgba(246, 241, 229, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [15, 1], + [17, 4] + ] + } + } + }, + { + "id": "road_area_bridge", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": ["all", ["==", "$type", "Polygon"], ["==", "class", "bridge"]], + "layout": { "visibility": "visible" }, + "paint": { "fill-color": "#b8b8b8", "fill-antialias": true } + }, + { + "id": "road_area_platform", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "$type", "Polygon"], + ["!has", "brunnel"], + ["==", "class", "path"], + ["==", "subclass", "platform"] + ], + "layout": { "visibility": "visible" }, + "paint": { "fill-color": "#bababa" } + }, + { + "id": "road_area_pedestrian", + "type": "fill", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "$type", "Polygon"], + ["!has", "brunnel"], + ["!in", "class", "bridge", "pier"] + ], + "layout": { "visibility": "visible" }, + "paint": { "fill-color": "#dddde8" } + }, + { + "id": "road_service_track_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "service", "track"] + ], + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#bbbbbb", + "line-width": { + "base": 1.2, + "stops": [ + [13, 2], + [15, 3.5], + [16, 7], + [17, 8.5], + [18, 11], + [19, 12] + ] + } + } + }, + { + "id": "road_primary_link_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["==", "ramp", 1], + ["in", "class", "primary"] + ], + "layout": { + "line-cap": "butt", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [11, "#c38a27"], + [12, "#a06b00"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [11, 1.5], + [12, 4], + [13, 4], + [14, 7.8], + [16, 12], + [17, 13], + [18, 16] + ] + } + } + }, + { + "id": "road_trunk_link_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["==", "ramp", 1], + ["in", "class", "trunk"] + ], + "layout": { + "line-cap": "butt", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [11, "#cf6649"], + [12, "#c84e2f"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [11, 1.5], + [12, 4], + [14, 7.8], + [16, 12], + [17, 13], + [18, 16] + ] + } + } + }, + { + "id": "road_motorway_link_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["==", "class", "motorway"], + ["==", "ramp", 1] + ], + "layout": { + "line-cap": "butt", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [11, "#c24e6b"], + [12, "#dc2a67"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [11, 1.5], + [12, 4], + [14, 7.8], + [16, 12], + [17, 13], + [18, 16], + [19, 17] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "road_minor_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "minor"], + ["!=", "ramp", "1"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#bbbbbb", + "line-width": { + "base": 1.2, + "stops": [ + [13, 3], + [14, 5], + [15, 6], + [16, 12], + [17, 13], + [18, 17] + ] + }, + "line-opacity": { + "stops": [ + [10, 0], + [12.5, 1] + ] + } + } + }, + { + "id": "road_tertiary_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "tertiary"], + ["!=", "ramp", 1] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#8f8f8f", + "line-width": { + "base": 1.2, + "stops": [ + [11, 2.5], + [12, 4], + [13, 5], + [14, 9], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "road_secondary_link_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "secondary"], + ["==", "ramp", 1] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [11, "#9eae23"], + [12, "#707d05"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [11, 3.5], + [12, 5], + [13, 5], + [14, 9], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "road_secondary_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "secondary"], + ["!=", "ramp", 1] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [11, "#9eae23"], + [12, "#707d05"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [11, 3.5], + [12, 5], + [13, 5], + [14, 9], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "road_trunk_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["!=", "ramp", 1], + ["in", "class", "trunk"], + ["!=", "ramp", 1] + ], + "layout": { + "line-cap": "butt", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [11, "rgba(160, 116, 0, 1)"], + [12, "#c84e2f"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [9, 6], + [11, 3.5], + [12, 5], + [13, 5], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "road_primary_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 9, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["!=", "ramp", 1], + ["in", "class", "primary"], + ["!=", "ramp", 1] + ], + "layout": { + "line-cap": "butt", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [10.9, "rgba(255, 250, 234, 0.47)"], + [11, "rgba(160, 116, 0, 1)"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [9, 6], + [11, 3.5], + [12, 5], + [13, 5], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "road_motorway_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 5, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["==", "class", "motorway"], + ["!=", "ramp", 1] + ], + "layout": { + "line-cap": "butt", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [11, "#c24e6b"], + [12, "#dc2a67"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [5, 0], + [7, 1.75], + [18, 27] + ] + } + } + }, + { + "id": "road_pedestrian_casing", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "class", "path"], + ["==", "subclass", "pedestrian"], + ["!=", "brunel", "tunnel"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "#999999", + "line-width": { + "stops": [ + [13, 3], + [14, 5], + [15, 6], + [16, 12], + [17, 13], + [18, 17] + ] + } + } + }, + { + "id": "road_pedestrian", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "class", "path"], + ["==", "subclass", "pedestrian"], + ["!=", "brunel", "tunnel"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "#dddde8", + "line-width": { + "stops": [ + [13, 1.9], + [14, 3.8], + [15, 4.8], + [16, 10.4], + [17, 11.4], + [18, 15.4] + ] + } + } + }, + { + "id": "road_path_steps_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 15, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "path"], + ["==", "subclass", "steps"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "rgba(236, 236, 236, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [14, 4], + [15, 4.3], + [17, 4.3], + [18, 4.6] + ] + }, + "line-opacity": 0.6 + } + }, + { + "id": "road_path_bridleway_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 15, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "path"], + ["any", ["==", "subclass", "bridleway"], ["==", "horse", "designated"]], + ["!=", "bicycle", "designated"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "rgba(236, 236, 236, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [14, 3], + [15, 3.3], + [17, 3.3], + [18, 3.6] + ] + }, + "line-opacity": 0.6 + } + }, + { + "id": "road_path_cycleway_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 15, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "path"], + ["any", ["==", "subclass", "cycleway"], ["==", "bicycle", "designated"]] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "rgba(236, 236, 236, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [14, 3], + [15, 3.3], + [17, 3.3], + [18, 3.6] + ] + }, + "line-opacity": 0.6 + } + }, + { + "id": "road_path_footway_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 15, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "path"], + ["in", "subclass", "footway", "path"], + ["!=", "bicycle", "designated"], + ["!=", "horse", "designated"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "rgba(236, 236, 236, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [14, 2.7], + [15, 3], + [17, 3.3], + [18, 3.6] + ] + }, + "line-opacity": 0.6 + } + }, + { + "id": "road_path_cycleway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 12, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "path"], + ["any", ["==", "subclass", "cycleway"], ["==", "bicycle", "designated"]] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#0000ff", + "line-width": { + "base": 1.2, + "stops": [ + [12, 0.7], + [14, 0.9], + [17, 1], + [18, 1.3] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "road_path_steps", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 12, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "path"], + ["==", "subclass", "steps"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fa8072", + "line-width": { + "base": 1.2, + "stops": [ + [12, 1.7], + [14, 1.9], + [17, 2], + [18, 2.3] + ] + }, + "line-dasharray": [0.5, 0.5] + } + }, + { + "id": "road_path_bridleway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 12, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "path"], + ["any", ["==", "subclass", "bridleway"], ["==", "horse", "designated"]], + ["!=", "bicycle", "designated"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#008000", + "line-width": { + "base": 1.2, + "stops": [ + [12, 0.7], + [14, 0.9], + [17, 1], + [18, 1.3] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "road_path_footway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 12, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "path"], + ["in", "subclass", "footway", "path"], + ["!=", "bicycle", "designated"], + ["!=", "horse", "designated"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fa8072", + "line-width": { + "base": 1.2, + "stops": [ + [13, 0.6], + [14, 1], + [15, 1.3], + [17, 1.3], + [18, 1.6] + ] + }, + "line-dasharray": [2, 1] + } + }, + { + "id": "road_primary_link", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["==", "ramp", 1], + ["in", "class", "primary"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#fcd6a4", + "line-width": { + "base": 1.2, + "stops": [ + [11, 1.5], + [12, 3], + [13, 3], + [14, 6.6], + [16, 10.4], + [17, 11.4], + [18, 14.4] + ] + } + } + }, + { + "id": "road_trunk_link", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["==", "ramp", 1], + ["in", "class", "trunk"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [6, "#fdb59e"], + [11, "#f9b29c"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [11, 0.9], + [12, 3], + [14, 6.6], + [16, 10.4], + [17, 11.4], + [18, 14.4] + ] + } + } + }, + { + "id": "road_motorway_link", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 8, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["==", "class", "motorway"], + ["==", "ramp", 1] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [6, "#e66e89"], + [10, "#e892a2"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [8, 0.7], + [11, 0.9], + [12, 3], + [14, 6.6], + [16, 10.4], + [17, 11.4], + [18, 14.4], + [19, 15.4] + ] + } + } + }, + { + "id": "road_service_track", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 12, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "service", "track"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#fff", + "line-width": { + "base": 1.2, + "stops": [ + [13, 0.9], + [15, 2.3], + [15, 0.5], + [16, 5.4], + [17, 6.9], + [18, 9.4], + [19, 10.4] + ] + } + } + }, + { + "id": "road_service_track_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 12, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "service_construction", "track_construction"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#fff", + "line-width": { + "base": 1.2, + "stops": [ + [13, 0.9], + [15, 2.3], + [15, 0.5], + [16, 5.4], + [17, 6.9], + [18, 9.4], + [19, 10.4] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "road_raceway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 9, + "filter": ["all", ["in", "class", "raceway"]], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "rgba(254, 190, 200, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [11, 0.7], + [12, 1.9], + [13, 3.9], + [14, 5.1], + [15, 5.1], + [16, 11.5], + [17, 11.5], + [18, 12.7] + ] + } + } + }, + { + "id": "road_minor", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 12, + "filter": [ + "all", + ["==", ["geometry-type"], "LineString"], + [ + "all", + ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true], + ["match", ["get", "class"], ["minor"], true, false] + ] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [12, "#d3d3d3"], + [13, "rgba(255, 255, 255, 1)"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [12, 1], + [13, 1.9], + [14, 3.8], + [15, 4.8], + [16, 10.4], + [17, 11.4], + [18, 15.4] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "road_minor_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 12, + "filter": [ + "all", + ["==", ["geometry-type"], "LineString"], + [ + "all", + ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true], + ["match", ["get", "class"], ["minor_construction"], true, false] + ] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [12, "#d3d3d3"], + [13, "rgba(255, 255, 255, 1)"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [12, 1], + [13, 1.9], + [14, 3.8], + [15, 4.8], + [16, 10.4], + [17, 11.4], + [18, 15.4] + ] + }, + "line-opacity": 1, + "line-dasharray": [2, 2] + } + }, + { + "id": "road_secondary", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 8, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "secondary"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [10.5, "#bbbbbb"], + [10.6, "#f7fabf"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [8, 1], + [9, 1.1], + [10, 1.1], + [11, 2.9], + [12, 4.3], + [13, 4.3], + [14, 7.6], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + } + } + }, + { + "id": "road_tertiary", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 9, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "tertiary"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [10.5, "#bbbbbb"], + [10.6, "#FFFFFF"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [9, 0.7], + [10, 0.7], + [11, 1.9], + [12, 3], + [13, 3.9], + [14, 7.8], + [15, 8.8], + [16, 16.4], + [17, 19.4], + [18, 25.4] + ] + } + } + }, + { + "id": "road_tertiary_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 9, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "tertiary_construction"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [10.5, "#bbbbbb"], + [10.6, "#fff"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [9, 0.7], + [11, 1.9], + [12, 3], + [13, 3.9], + [14, 7.8], + [15, 8.8], + [16, 16.4], + [17, 19.4], + [18, 25.4] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "road_secondary_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 8, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "secondary_construction"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [10.5, "#bbbbbb"], + [10.6, "#f7fabf"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [8, 1], + [9, 1.1], + [10, 1.1], + [11, 2.9], + [12, 4.3], + [13, 4.3], + [14, 7.6], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "road_primary_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 7, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["!=", "ramp", 1], + ["in", "class", "primary_construction"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [7, "#f3c380"], + [11, "#fcd6a4"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [7, 1], + [8, 1.4], + [9, 1.8], + [10, 1.8], + [11, 2.5], + [12, 4], + [13, 4], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + } + } + }, + { + "id": "road_primary", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 7, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["!=", "ramp", 1], + ["in", "class", "primary"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [7, "#f3c380"], + [11, "#fcd6a4"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [7, 1], + [8, 1.4], + [9, 1.8], + [10, 1.8], + [11, 2.5], + [12, 4], + [13, 4], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + } + } + }, + { + "id": "road_trunk", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 7, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["!=", "ramp", 1], + ["in", "class", "trunk"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [5, "#fdb59e"], + [11, "#f9b29c"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [7, 1], + [8, 1.4], + [9, 1.8], + [10, 1.8], + [11, 2.5], + [12, 4], + [13, 4], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + } + } + }, + { + "id": "road_trunk_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 7, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["!=", "ramp", 1], + ["in", "class", "trunk_construction"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [6, "#fdb59e"], + [11, "#f9b29c"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [7, 1], + [8, 1.4], + [9, 1.8], + [10, 1.8], + [11, 2.5], + [12, 4], + [13, 4], + [15, 8.6], + [16, 16], + [17, 19], + [18, 25] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "road_motorway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 5, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["==", "class", "motorway"], + ["!=", "ramp", 1] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "stops": [ + [6, "#e66e89"], + [10, "#e892a2"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [5, 0], + [7, 1], + [18, 25] + ] + } + } + }, + { + "id": "road_motorway_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 5, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["==", "class", "motorway_construction"], + ["!=", "ramp", 1] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": { + "base": 1, + "stops": [ + [6, "#e892a2"], + [10, "#e66e89"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [5, 0], + [7, 1], + [20, 18] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "rail_subway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "class", "transit"], + ["==", "subclass", "subway"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "#81817f", + "line-width": { + "stops": [ + [14, 1], + [18, 3] + ] + }, + "line-opacity": 1, + "line-dasharray": [1, 1.2] + } + }, + { + "id": "rail_major", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "class", "rail"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [8, "#787878"], + [14, "rgba(129, 129, 129, 1)"] + ] + }, + "line-width": { + "base": 1.4, + "stops": [ + [8, 0.8], + [11, 1.5], + [15, 3], + [20, 5.4] + ] + } + } + }, + { + "id": "rail_minor", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "subclass", "tram", "light_rail"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "rgba(129, 129, 129, 1)", + "line-width": { + "base": 1.4, + "stops": [ + [12, 0.8], + [15, 1.2], + [20, 4] + ] + } + } + }, + { + "id": "rail_major_hatching", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 8, + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["==", "class", "rail"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [8, "rgba(255, 255, 255, 0.44)"], + [10, "rgba(242, 242, 242, 0.44)"] + ] + }, + "line-width": { + "base": 1.4, + "stops": [ + [9, 0], + [15, 2], + [20, 4] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "rail_minor_hatching", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["!in", "brunnel", "bridge", "tunnel"], + ["in", "subclass", "tram", "light_rail"] + ], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": "#bbb", + "line-width": { + "base": 1.4, + "stops": [ + [14.5, 0], + [15, 2], + [20, 6] + ] + }, + "line-dasharray": [0.2, 4] + } + }, + { + "id": "waterway-bridge-case", + "type": "line", + "source": "openmaptiles", + "source-layer": "waterway", + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "bridge"] + ], + "layout": { "line-cap": "butt", "line-join": "miter" }, + "paint": { + "line-color": "#bbbbbb", + "line-width": { + "base": 1.6, + "stops": [ + [12, 0.5], + [20, 5] + ] + }, + "line-gap-width": { + "base": 1.3, + "stops": [ + [13, 0.5], + [20, 6] + ] + } + } + }, + { + "id": "waterway-bridge", + "type": "line", + "source": "openmaptiles", + "source-layer": "waterway", + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "bridge"] + ], + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "rgba(134, 204, 250, 1)", + "line-width": { + "base": 1.3, + "stops": [ + [13, 0.5], + [20, 6] + ] + } + } + }, + { + "id": "bridge_motorway_link_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "class", "motorway"], + ["==", "ramp", 1], + ["==", "brunnel", "bridge"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [11, "#c24e6b"], + [12, "#dc2a67"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [12, 4], + [14, 7], + [18, 16], + [19, 17] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "bridge_service_track_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "service", "track"] + ], + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#cfcdca", + "line-width": { + "base": 1.2, + "stops": [ + [15, 1], + [16, 4], + [20, 11] + ] + } + } + }, + { + "id": "bridge_link_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": ["all", ["==", "class", "link"], ["==", "brunnel", "bridge"]], + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#e9ac77", + "line-width": { + "base": 1.2, + "stops": [ + [12, 1], + [13, 3], + [14, 4], + [20, 15] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "bridge_street_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "street", "street_limited"] + ], + "layout": { "line-join": "round" }, + "paint": { + "line-color": "hsl(36, 6%, 74%)", + "line-width": { + "base": 1.2, + "stops": [ + [12, 0.5], + [13, 1], + [14, 4], + [20, 25] + ] + }, + "line-opacity": { + "stops": [ + [12, 0], + [12.5, 1] + ] + } + } + }, + { + "id": "bridge_path_casing_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "bridge"], + ["in", "class", "path"] + ], + "layout": { "line-join": "miter", "visibility": "visible" }, + "paint": { + "line-color": "rgba(0, 0, 0, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [13, 3.7], + [14, 4], + [15, 4.3], + [17, 4.3], + [18, 4.6] + ] + }, + "line-dasharray": [1, 0] + } + }, + { + "id": "bridge_path_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "bridge"], + ["in", "class", "path"] + ], + "layout": { "line-join": "miter", "visibility": "visible" }, + "paint": { + "line-color": "rgba(255, 255, 255, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [13, 2.7], + [14, 3], + [15, 3.3], + [17, 3.3], + [18, 3.6] + ] + }, + "line-dasharray": [1, 0] + } + }, + { + "id": "bridge_secondary_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 12, + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "secondary", "tertiary"] + ], + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#000000", + "line-width": { + "base": 1.2, + "stops": [ + [12, 5], + [13, 5], + [14, 9], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "bridge_tertiary_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "secondary", "tertiary"] + ], + "layout": { "line-join": "round" }, + "paint": { + "line-color": "rgba(195, 189, 187, 1)", + "line-width": { + "base": 1.2, + "stops": [ + [8, 1.5], + [20, 17] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "bridge_trunk_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": ["all", ["==", "brunnel", "bridge"], ["in", "class", "trunk"]], + "layout": { "line-join": "round" }, + "paint": { + "line-color": { + "stops": [ + [11, "#cf6649"], + [12, "#c84e2f"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [11, 3.5], + [12, 6], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + } + } + }, + { + "id": "bridge_primary_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 12, + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "primary"] + ], + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#000000", + "line-width": { + "base": 1.2, + "stops": [ + [12, 5], + [13, 5], + [15, 10], + [16, 18], + [17, 21], + [18, 27] + ] + } + } + }, + { + "id": "bridge_motorway_casing", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "class", "motorway"], + ["==", "brunnel", "bridge"], + ["!=", "ramp", 1] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#000000", + "line-width": { + "base": 1.2, + "stops": [ + [5, 0], + [7, 1.75], + [18, 27] + ] + } + } + }, + { + "id": "bridge_path_cycleway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "bridge"], + ["in", "class", "path"], + ["any", ["==", "subclass", "cycleway"], ["==", "bicycle", "designated"]] + ], + "paint": { + "line-color": "#0000ff", + "line-width": { + "base": 1.2, + "stops": [ + [13, 0.8], + [14, 1], + [15, 1.3], + [17, 1.3], + [18, 1.6] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "bridge_path_bridleway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "bridge"], + ["in", "class", "path"], + ["any", ["==", "subclass", "bridleway"], ["==", "horse", "designated"]], + ["!=", "bicycle", "designated"] + ], + "paint": { + "line-color": "#008000", + "line-width": { + "base": 1.2, + "stops": [ + [13, 0.8], + [14, 1], + [15, 1.3], + [17, 1.3], + [18, 1.6] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "bridge_path_footway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "brunnel", "bridge"], + ["in", "class", "path"], + ["in", "subclass", "footway", "path"], + ["!=", "bicycle", "designated"], + ["!=", "horse", "designated"] + ], + "paint": { + "line-color": "#fa8072", + "line-width": { + "base": 1.2, + "stops": [ + [13, 0.8], + [14, 1], + [15, 1.3], + [17, 1.3], + [18, 1.6] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "bridge_motorway_link", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "class", "motorway"], + ["==", "ramp", 1], + ["==", "brunnel", "bridge"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [6, "#e66e89"], + [10, "#e892a2"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [12, 3], + [14, 6], + [18, 15], + [19, 16] + ] + } + } + }, + { + "id": "bridge_service_track", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "service", "track"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fff", + "line-width": { + "base": 1.2, + "stops": [ + [15.5, 0], + [16, 2], + [20, 7.5] + ] + } + } + }, + { + "id": "bridge_service_track_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "service_construction", "track_construction"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fff", + "line-width": { + "base": 1.2, + "stops": [ + [15.5, 0], + [16, 2], + [20, 7.5] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "bridge_link", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": ["all", ["==", "class", "link"], ["==", "brunnel", "bridge"]], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fea", + "line-width": { + "base": 1.2, + "stops": [ + [12.5, 0], + [13, 1.5], + [14, 2.5], + [20, 11.5] + ] + } + } + }, + { + "id": "bridge_minor", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": ["all", ["==", "brunnel", "bridge"], ["in", "class", "minor"]], + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#fff", + "line-width": { + "base": 1.2, + "stops": [ + [13.5, 0], + [14, 2.5], + [20, 18] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "bridge_minor_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "minor_construction"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fff", + "line-width": { + "base": 1.2, + "stops": [ + [13.5, 0], + [14, 2.5], + [20, 18] + ] + }, + "line-opacity": 1, + "line-dasharray": [2, 2] + } + }, + { + "id": "bridge_tertiary", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "tertiary"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#ffffff", + "line-width": { + "base": 1.2, + "stops": [ + [11, 2.3], + [12, 3], + [13, 4], + [14, 7.5], + [15, 8.5], + [16, 16.4], + [17, 19.4], + [18, 25.4] + ] + } + } + }, + { + "id": "bridge_secondary", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 7, + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "secondary"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#f7fabf", + "line-width": { + "base": 1.2, + "stops": [ + [7, 1.5], + [11, 3.3], + [12, 4], + [13, 3.8], + [14, 7.5], + [15, 8.5], + [16, 16], + [17, 19], + [18, 25] + ] + } + } + }, + { + "id": "bridge_secondary_construction-copy", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "secondary_construction"] + ], + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#fff", + "line-width": { + "base": 1.2, + "stops": [ + [6.5, 0], + [8, 0.5], + [20, 13] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "bridge_tertiary_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "tertiary_construction"] + ], + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#fff", + "line-width": { + "base": 1.2, + "stops": [ + [6.5, 0], + [8, 0.5], + [20, 13] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "bridge_primary", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "primary"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fcd6a4", + "line-width": { + "base": 1.2, + "stops": [ + [7, 1.5], + [11, 3.3], + [12, 4], + [13, 4], + [15, 8.5], + [16, 16], + [17, 19], + [18, 25] + ] + } + } + }, + { + "id": "bridge_trunk", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": ["all", ["==", "brunnel", "bridge"], ["in", "class", "trunk"]], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#f9b29c", + "line-width": { + "base": 1.2, + "stops": [ + [7, 1.5], + [11, 4.5], + [12, 5], + [15, 8.5], + [16, 16], + [17, 19], + [18, 25] + ] + } + } + }, + { + "id": "bridge_trunk_primary_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "brunnel", "bridge"], + ["in", "class", "primary_construction", "trunk_construction"] + ], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#fea", + "line-width": { + "base": 1.2, + "stops": [ + [5, 0], + [7, 1], + [20, 18] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "bridge_motorway", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "class", "motorway"], + ["==", "brunnel", "bridge"], + ["!=", "ramp", 1] + ], + "layout": { "line-join": "round" }, + "paint": { + "line-color": { + "stops": [ + [6, "#e66e89"], + [10, "#e892a2"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [5, 0], + [7, 1], + [18, 25] + ] + } + } + }, + { + "id": "bridge_motorway_construction", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["==", "class", "motorway_construction"], + ["==", "brunnel", "bridge"], + ["!=", "ramp", 1] + ], + "layout": { "line-join": "round" }, + "paint": { + "line-color": { + "stops": [ + [6, "#e892a2"], + [10, "#e66e89"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [5, 0], + [7, 1], + [18, 25] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "bridge_major_rail", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "filter": ["all", ["==", "brunnel", "bridge"], ["in", "class", "rail"]], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [6, "rgba(147, 147, 147, 1)"], + [12, "rgba(139, 139, 139, 1)"], + [14, "rgba(129, 129, 129, 1)"] + ] + }, + "line-width": { + "base": 1.4, + "stops": [ + [8, 0.5], + [15, 3], + [20, 5.4] + ] + } + } + }, + { + "id": "bridge_major_rail_hatching", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 8, + "filter": ["all", ["==", "brunnel", "bridge"], ["==", "class", "rail"]], + "layout": { "visibility": "visible" }, + "paint": { + "line-color": { + "stops": [ + [8, "rgba(255, 255, 255, 0.44)"], + [10, "rgba(201, 201, 201, 1)"] + ] + }, + "line-width": { + "base": 1.4, + "stops": [ + [9, 0], + [15, 2], + [20, 4] + ] + }, + "line-dasharray": [2, 2] + } + }, + { + "id": "cablecar", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": ["==", "class", "aerialway"], + "layout": { "line-cap": "round", "visibility": "visible" }, + "paint": { + "line-color": "#808080", + "line-width": { + "base": 1, + "stops": [ + [11, 1], + [19, 2.5] + ] + } + } + }, + { + "id": "cablecar-dash", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": ["==", "class", "aerialway"], + "layout": { "line-cap": "round", "visibility": "visible" }, + "paint": { + "line-color": "rgba(67, 67, 67, 1)", + "line-width": { + "base": 1, + "stops": [ + [11, 1], + [19, 3] + ] + }, + "line-dasharray": [0.5, 10] + } + }, + { + "id": "boundary_3", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "boundary", + "minzoom": 3, + "filter": ["all", ["in", "admin_level", 3, 4], ["==", "maritime", 0]], + "layout": { "line-join": "round", "visibility": "visible" }, + "paint": { + "line-color": "#845283", + "line-width": { + "base": 1, + "stops": [ + [4, 0.4], + [5, 0.7], + [12, 1.6] + ] + }, + "line-opacity": { + "stops": [ + [3, 0.5], + [10, 1] + ] + }, + "line-dasharray": [5, 3] + } + }, + { + "id": "boundary_2", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "boundary", + "minzoom": 0, + "filter": [ + "all", + ["==", "admin_level", 2], + ["==", "maritime", 0], + ["==", "disputed", 0] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#a37da1", + "line-width": { + "base": 1, + "stops": [ + [3, 0.5], + [5, 1.2], + [12, 3] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "boundary_2_disputed", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "boundary", + "minzoom": 0, + "filter": [ + "all", + ["==", "admin_level", 2], + ["==", "disputed", 1], + ["==", "maritime", 0] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#a37da1", + "line-width": { + "base": 1, + "stops": [ + [3, 0.3], + [5, 1.2], + [12, 3] + ] + }, + "line-opacity": 1, + "line-dasharray": [4, 3] + } + }, + { + "id": "boundary_2_disputed_maritime", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "boundary", + "minzoom": 0, + "filter": [ + "all", + ["==", "admin_level", 2], + ["==", "disputed", 1], + ["==", "maritime", 1] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "rgba(129, 125, 163, 1)", + "line-width": { + "base": 1, + "stops": [ + [3, 0.5], + [5, 1.2], + [12, 3] + ] + }, + "line-opacity": 1, + "line-dasharray": [4, 3] + } + }, + { + "id": "boundary_2_maritime", + "type": "line", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "boundary", + "minzoom": 4, + "filter": [ + "all", + ["==", "admin_level", 2], + ["==", "disputed", 0], + ["==", "maritime", 1] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#a37da1", + "line-width": { + "base": 1, + "stops": [ + [3, 0.5], + [5, 1.2], + [12, 3] + ] + }, + "line-opacity": 1 + } + }, + { + "id": "water_way_name", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "waterway", + "minzoom": 0, + "filter": ["all", ["==", "$type", "LineString"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [11, 10], + [13, 12] + ] + }, + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "symbol-spacing": 400, + "text-max-width": 5, + "symbol-placement": "line" + }, + "paint": { + "text-color": "#4d80b3", + "text-halo-color": "rgba(255, 255, 255, 0.8)", + "text-halo-width": 1 + } + }, + { + "id": "water_name_line", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "water_name", + "minzoom": 0, + "filter": ["all", ["==", "$type", "LineString"]], + "layout": { + "text-font": ["hwxk"], + "text-size": 12, + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-max-width": 5, + "symbol-placement": "line" + }, + "paint": { + "text-color": "#5d60be", + "text-halo-color": "rgba(255,255,255,0.7)", + "text-halo-width": 1 + } + }, + { + "id": "water_name_point", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "water_name", + "minzoom": 2, + "maxzoom": 24, + "filter": ["all", ["==", "$type", "Point"], ["!=", "class", "ocean"]], + "layout": { + "text-font": ["hwxk"], + "text-size": 11, + "text-field": "{name:latin}{name:nolatin}", + "visibility": "visible", + "text-max-width": 5 + }, + "paint": { + "text-color": "rgba(76, 125, 173, 1)", + "text-halo-color": "rgba(255,255,255,0)", + "text-halo-width": 1 + } + }, + { + "id": "housenumber", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "housenumber", + "minzoom": 17, + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [17, 9], + [22, 11] + ] + }, + "text-field": "{housenumber}", + "text-padding": 3, + "text-line-height": -0.15, + "symbol-avoid-edges": false, + "text-allow-overlap": false, + "text-ignore-placement": false, + "visibility": "visible" + }, + "paint": { + "text-color": "rgba(102, 102, 102, 1)", + "text-halo-color": "rgba(255,255,255,0.8)", + "text-halo-width": 1 + } + }, + { + "id": "poi_shop-z17", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 17, + "filter": [ + "all", + [ + "in", + "class", + "shop", + "clothing_store", + "library", + "art_gallery", + "music", + "alcohol_shop", + "bakery" + ], + [ + "!in", + "subclass", + "mall", + "library", + "artwork", + "arts_centre", + "gallery" + ] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": [ + "match", + ["get", "subclass"], + "chocolate", + "confectionery", + "wine", + "alcohol", + "kiosk", + "newsagent", + "perfume", + "perfumery", + "wholesale", + "trade", + ["get", "subclass"] + ], + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.1], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": true + }, + "paint": { + "text-color": "#939", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_shop-z15", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 15, + "filter": ["all", ["==", "subclass", "supermarket"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": [ + "match", + ["get", "subclass"], + "chocolate", + "confectionery", + ["get", "subclass"] + ], + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.1], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": true + }, + "paint": { + "text-color": "#939", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_waste", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 18, + "filter": [ + "all", + [ + "in", + "class", + "recycling", + "waste_basket", + "drinking_water", + "toilets" + ] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 0.8], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#734a08", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_cemetery", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 14, + "filter": ["all", ["in", "class", "cemetery"]], + "layout": { + "icon-size": 1, + "text-font": ["hwxk"], + "text-size": 11, + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "icon-anchor": "bottom", + "icon-offset": [0, 0], + "text-anchor": "center", + "text-offset": [0, 0], + "text-padding": 2, + "icon-text-fit": "none", + "text-max-width": 14, + "icon-allow-overlap": false, + "icon-pitch-alignment": "viewport" + }, + "paint": { + "text-color": "#2d4931", + "icon-translate": [0, 0], + "text-translate": [0, 5], + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 0.8, + "icon-translate-anchor": "map", + "text-translate-anchor": "viewport" + } + }, + { + "id": "poi_school", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 16, + "filter": ["all", ["in", "class", "college", "school"]], + "layout": { + "icon-size": 1, + "text-font": ["hwxk"], + "text-size": 11, + "icon-image": "{subclass}", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "icon-anchor": "bottom", + "icon-offset": [0, 0], + "text-anchor": "center", + "text-offset": [0, 0], + "text-padding": 2, + "icon-text-fit": "none", + "text-max-width": 9, + "icon-allow-overlap": false, + "icon-pitch-alignment": "viewport" + }, + "paint": { + "text-color": "#4d4d00", + "icon-translate": [0, 0], + "text-translate": [0, 5], + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 0.8, + "icon-translate-anchor": "map", + "text-translate-anchor": "viewport" + } + }, + { + "id": "poi_outdoor", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 16, + "filter": [ + "all", + ["in", "class", "playground", "stile", "garden", "gate"] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.2], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#008c0d", + "icon-opacity": 1, + "text-halo-blur": 0, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_parking", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 15, + "filter": ["all", ["in", "class", "parking"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": { + "stops": [ + [15, ""], + [16, "{name:latin}\n{name:nonlatin}"] + ] + }, + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 0.9], + "text-padding": 2, + "text-max-width": 6, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#0066ff", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_golf", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 16, + "filter": ["all", ["in", "class", "golf"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "golf", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.2], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#008c0d", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_sport", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 16, + "filter": [ + "all", + [ + "in", + "class", + "stadium", + "swimming_pool", + "sports_centre", + "water_park" + ] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.2], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#008c0d", + "icon-opacity": 1, + "icon-halo-blur": 0, + "text-halo-blur": 1, + "text-halo-color": "#ffffff", + "text-halo-width": 0.2 + } + }, + { + "id": "poi_ferry", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 15, + "filter": [ + "all", + ["==", "subclass", "ferry_terminal"], + ["==", "class", "ferry_terminal"] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "ferry", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 0.7], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#5e3b9e", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_food", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 16, + "filter": [ + "all", + [ + "in", + "class", + "ice_cream", + "cafe", + "beer", + "bar", + "fast_food", + "restaurant" + ] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#C77400", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_water", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 7, + "filter": ["all", ["in", "class", "ice_rink"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.2], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#4d80b3", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_public", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 16, + "filter": [ + "all", + [ + "in", + "class", + "town_hall", + "post", + "library", + "police", + "information", + "cinema", + "theatre", + "fire_station", + "office" + ], + ["!=", "subclass", "books"] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": ["coalesce", ["get", "subclass"]], + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 0.8], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#734a08", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_cultural", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 15, + "filter": [ + "all", + [ + "in", + "class", + "cinema", + "library", + "museum", + "castle", + "monument", + "art_gallery" + ], + ["!in", "subclass", "books", "art"] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 0.8], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#734a08", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_attraction", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 15, + "filter": ["all", ["==", "class", "attraction"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.2], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#660033", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_car", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 17, + "filter": [ + "all", + ["in", "class", "car", "bicycle_parking", "fuel", "charging_station"] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": { + "stops": [ + [15, ""], + [16, "{name:latin}\n{name:nonlatin}"] + ] + }, + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.2], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false, + "icon-ignore-placement": false + }, + "paint": { + "text-color": "#0066ff", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_health", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 16, + "filter": ["all", ["in", "class", "pharmacy", "dentist", "veterinary"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [14, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.2], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#BF0000", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_hospital", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 14, + "filter": ["all", ["in", "class", "hospital"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [14, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": { + "stops": [ + [14, ""], + [16, "{name:latin}\n{name:nonlatin}"] + ] + }, + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.2], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#BF0000", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_campsite", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 16, + "filter": ["all", ["in", "class", "campsite"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "camping", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.2], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#0066ff", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_accommodation", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 17, + "filter": ["all", ["in", "class", "lodging", "campsite"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "{subclass}", + "text-field": { + "stops": [ + [17, ""], + [18, "{name:latin}\n{name:nonlatin}"] + ] + }, + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 0.6], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#0066ff", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_place_of_worship", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 16, + "filter": ["all", ["==", "class", "place_of_worship"]], + "layout": { + "icon-size": 1, + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 12] + ] + }, + "icon-image": "{subclass}", + "text-field": { + "stops": [ + [15, ""], + [16, "{name:latin}\n{name:nonlatin}"] + ] + }, + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.2], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false, + "text-allow-overlap": false + }, + "paint": { + "text-color": "rgba(56, 56, 71, 1)", + "text-halo-blur": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_busstop", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 17, + "filter": ["all", ["in", "class", "bus"]], + "layout": { + "icon-size": 1, + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 10], + [20, 11] + ] + }, + "icon-image": "bus_stop.12", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "icon-anchor": "bottom", + "text-anchor": "top", + "text-padding": 2, + "icon-text-fit": "none", + "text-max-width": 14, + "icon-keep-upright": true, + "icon-allow-overlap": false, + "icon-pitch-alignment": "viewport" + }, + "paint": { + "text-color": "#0066ff", + "icon-translate": [0, 0], + "text-translate": [0, 4], + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 0.8, + "icon-translate-anchor": "map", + "text-translate-anchor": "viewport" + } + }, + { + "id": "poi_bus", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 17, + "filter": [ + "all", + ["in", "class", "bus"], + ["!in", "subclass", "bus_stop"] + ], + "layout": { + "icon-size": 1, + "text-font": ["hwxk"], + "text-size": 11, + "icon-image": "{subclass}", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "icon-anchor": "bottom", + "icon-offset": [0, 0], + "text-anchor": "center", + "text-padding": 2, + "icon-text-fit": "none", + "text-max-width": 14, + "icon-keep-upright": true, + "icon-allow-overlap": false, + "icon-pitch-alignment": "viewport" + }, + "paint": { + "text-color": "#0066ff", + "icon-translate": [0, 0], + "text-translate": [0, 5], + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 0.8, + "icon-translate-anchor": "map", + "text-translate-anchor": "viewport" + } + }, + { + "id": "poi_harbor", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 16, + "filter": ["all", ["==", "class", "harbor"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [14, 13], + [20, 16] + ] + }, + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-padding": 2, + "text-max-width": 6, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#576ddf", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.1, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.2, + "text-halo-color": "#ffffff", + "text-halo-width": 0.3 + } + }, + { + "id": "poi_mall", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 15, + "filter": ["all", ["==", "class", "shop"], ["==", "subclass", "mall"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 12], + [20, 16] + ] + }, + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.1], + "text-padding": 2, + "text-max-width": 9, + "icon-allow-overlap": false + }, + "paint": { + "text-color": "#d11700", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "poi_train", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 10, + "filter": ["all", ["in", "class", "railway"]], + "layout": { + "icon-size": 1, + "text-font": ["hwxk"], + "text-size": 11, + "icon-image": "square_train", + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "icon-anchor": "bottom", + "icon-offset": [0, 0], + "text-anchor": "center", + "text-offset": [0, 0.5], + "text-padding": 2, + "icon-text-fit": "none", + "text-max-width": 12, + "icon-allow-overlap": false, + "text-allow-overlap": false, + "icon-pitch-alignment": "viewport" + }, + "paint": { + "text-color": "#4957ad", + "icon-translate": [0, 0], + "text-translate": [0, 1], + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 0.8, + "icon-translate-anchor": "map", + "text-translate-anchor": "viewport" + } + }, + { + "id": "road_path_oneway", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 15, + "filter": ["all", ["==", "oneway", 1], ["==", "class", "path"]], + "layout": { + "icon-size": { + "stops": [ + [15, 0.7], + [20, 1] + ] + }, + "icon-image": "oneway-path", + "visibility": "visible", + "icon-padding": 2, + "symbol-spacing": 125, + "symbol-placement": "line", + "icon-rotation-alignment": "map", + "text-font": ["hwxk"] + }, + "paint": { "icon-opacity": 1 } + }, + { + "id": "road_oneway", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 15, + "filter": [ + "all", + ["==", "oneway", 1], + [ + "in", + "class", + "motorway", + "trunk", + "primary", + "secondary", + "tertiary", + "minor", + "service" + ] + ], + "layout": { + "icon-size": { + "stops": [ + [15, 0.8], + [20, 1] + ] + }, + "icon-image": "oneway", + "visibility": "visible", + "icon-padding": 2, + "symbol-spacing": 95, + "symbol-placement": "line", + "icon-rotation-alignment": "map", + "text-font": ["hwxk"] + }, + "paint": { "icon-opacity": 1 } + }, + { + "id": "road_oneway_opposite", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 15, + "filter": [ + "all", + ["==", "oneway", -1], + [ + "in", + "class", + "motorway", + "trunk", + "primary", + "secondary", + "tertiary", + "minor", + "service" + ] + ], + "layout": { + "icon-size": { + "stops": [ + [15, 0.5], + [19, 1] + ] + }, + "icon-image": "oneway", + "visibility": "visible", + "icon-rotate": -90, + "icon-padding": 2, + "symbol-spacing": 75, + "symbol-placement": "line", + "icon-rotation-alignment": "map", + "text-font": ["hwxk"] + }, + "paint": { "icon-opacity": 0.5 } + }, + { + "id": "ferry_label", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 14, + "filter": ["all", ["==", "subclass", "ferry"]], + "layout": { + "text-font": ["hwxk"], + "text-size": 10, + "text-field": "{name}", + "text-anchor": "center", + "text-offset": [0, 0], + "symbol-placement": "line", + "visibility": "visible" + }, + "paint": { + "text-color": "#6666ff", + "text-halo-blur": 1, + "text-halo-color": "rgba(255, 255, 255, 0.34)", + "text-halo-width": 1 + } + }, + { + "id": "road_label", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 7, + "filter": ["all", ["!=", "subclass", "ferry"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "base": 1, + "stops": [ + [14, 9], + [18, 13] + ] + }, + "text-field": "{name}", + "text-anchor": "center", + "text-offset": [0, 0], + "symbol-placement": "line", + "visibility": "visible" + }, + "paint": { + "text-color": "#000000", + "text-halo-color": "rgba(255, 255, 255, 0.97)", + "text-halo-width": 1 + } + }, + { + "id": "highway-shield-tertiary", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 9, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "class", "tertiary"], + ["has", "ref"] + ], + "layout": { + "icon-size": 1, + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [9, 10], + [15, 11], + [17, 12] + ] + }, + "icon-image": "road_tertiary", + "text-field": "{ref}", + "visibility": "visible", + "icon-anchor": "center", + "icon-padding": 2, + "icon-text-fit": "both", + "symbol-spacing": 560, + "symbol-placement": { + "base": 1, + "stops": [ + [10, "point"], + [11, "line"] + ] + }, + "symbol-avoid-edges": true, + "icon-text-fit-padding": [3, 4, 3, 4], + "icon-rotation-alignment": "viewport", + "text-rotation-alignment": "viewport" + }, + "paint": { "text-color": "#3b3b3b" } + }, + { + "id": "highway-shield-secondary", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 9, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "class", "secondary"], + ["has", "ref"] + ], + "layout": { + "icon-size": 1, + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [9, 10], + [15, 11], + [17, 12] + ] + }, + "icon-image": "road_secondary", + "text-field": "{ref}", + "visibility": "visible", + "icon-anchor": "center", + "icon-padding": 2, + "icon-text-fit": "both", + "symbol-spacing": 560, + "symbol-placement": { + "base": 1, + "stops": [ + [10, "point"], + [11, "line"] + ] + }, + "symbol-avoid-edges": true, + "icon-text-fit-padding": [3, 4, 3, 4], + "icon-rotation-alignment": "viewport", + "text-rotation-alignment": "viewport" + }, + "paint": { "text-color": "#323b00" } + }, + { + "id": "highway-shield-motorway", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 7, + "filter": [ + "all", + ["==", "$type", "LineString"], + ["==", "class", "motorway"], + ["has", "ref"] + ], + "layout": { + "icon-size": 1, + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [9, 10], + [15, 11], + [17, 12] + ] + }, + "icon-image": "road_motorway", + "text-field": "{ref}", + "visibility": "visible", + "icon-anchor": "center", + "icon-padding": 2, + "icon-text-fit": "both", + "text-optional": false, + "symbol-spacing": 760, + "text-max-width": 10, + "symbol-placement": { + "base": 1, + "stops": [ + [7, "line"], + [11, "line"] + ] + }, + "text-keep-upright": true, + "symbol-avoid-edges": true, + "icon-text-fit-padding": [3, 4, 3, 4], + "icon-rotation-alignment": "viewport", + "text-rotation-alignment": "viewport", + "text-allow-overlap": false, + "text-ignore-placement": false + }, + "paint": { "text-color": "#620728" } + }, + { + "id": "airport-label-major", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "aerodrome_label", + "minzoom": 8, + "maxzoom": 17, + "filter": ["all", ["has", "iata"]], + "layout": { + "icon-size": 1, + "text-font": ["Noto Sans Italic"], + "text-size": { + "stops": [ + [8, 10], + [14, 12] + ] + }, + "icon-image": "aerodrome.12", + "text-field": { + "stops": [ + [8, " "], + [11, "{name:latin}\n{name:nonlatin}"] + ] + }, + "visibility": "none", + "text-anchor": "top", + "text-offset": [0, 0.6], + "text-padding": 2, + "text-optional": true, + "text-max-width": 9, + "icon-allow-overlap": false, + "text-allow-overlap": false + }, + "paint": { + "text-color": "#5e3b9e", + "text-halo-blur": 0.5, + "text-halo-color": "rgba(255, 255, 255, 0.8)", + "text-halo-width": 1 + } + }, + { + "id": "airport_label", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "aeroway", + "minzoom": 14, + "filter": ["all", ["in", "class", "runway", "taxiway"]], + "layout": { + "text-font": ["Noto Sans Italic", "Noto Sans Regular"], + "text-size": { + "stops": [ + [15, 9], + [19, 15] + ] + }, + "text-field": "{ref}", + "visibility": "none", + "symbol-placement": "line" + }, + "paint": { + "text-color": "#333333", + "text-halo-color": "rgba(255, 255, 255, 0.8)", + "text-halo-width": 1 + } + }, + { + "id": "airport_gate", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "aeroway", + "minzoom": 16.5, + "filter": ["all", ["==", "class", "gate"]], + "layout": { + "text-font": ["Noto Sans Regular"], + "text-size": { + "stops": [ + [17, 9], + [19, 15] + ] + }, + "text-field": "{ref}", + "visibility": "none" + }, + "paint": { + "text-color": "rgba(135, 135, 135, 1)", + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 1 + } + }, + { + "id": "place_other", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 8, + "filter": [ + "all", + [ + "in", + "class", + "hamlet", + "island", + "islet", + "neighbourhood", + "suburb", + "borough" + ] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "base": 1.2, + "stops": [ + [11, 10], + [14, 14], + [18, 16] + ] + }, + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "symbol-spacing": 150, + "text-max-width": 10, + "text-transform": "none" + }, + "paint": { + "text-color": { + "stops": [ + [12.5, "#222222"], + [12.6, "#777777"] + ] + }, + "text-halo-blur": 0, + "text-halo-color": { + "stops": [ + [11, "rgba(255,255,255,0.6)"], + [13, "#ffffff"] + ] + }, + "text-halo-width": { + "stops": [ + [8, 0.8], + [13, 1.5] + ] + } + } + }, + { + "id": "park-local", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 7, + "filter": ["all", ["==", "class", "park"], ["==", "subclass", "park"]], + "layout": { + "text-font": ["Noto Sans Italic"], + "text-size": { + "stops": [ + [15, 10], + [20, 13] + ] + }, + "text-field": "{name:latin}{name:nonlatin}", + "visibility": "none", + "symbol-spacing": 150, + "text-max-width": { + "stops": [ + [12, 5], + [18, 8] + ] + }, + "text-allow-overlap": false + }, + "paint": { + "text-color": "#0c8416", + "text-halo-blur": 0.5, + "text-halo-color": "rgba(255, 255, 255, 1)", + "text-halo-width": 1 + } + }, + { + "id": "park-national", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "park", + "minzoom": 7, + "maxzoom": 12, + "filter": ["all", ["<=", "rank", 2]], + "layout": { + "text-font": ["Noto Sans Italic"], + "text-size": 12, + "text-field": "{name:latin}{name:nonlatin}", + "visibility": "none", + "symbol-spacing": 150, + "text-allow-overlap": false + }, + "paint": { + "text-color": { + "stops": [ + [7, "rgba(70, 164, 70, 1)"], + [10, "#008000"] + ] + }, + "text-halo-blur": 0.1, + "text-halo-color": { + "stops": [ + [7, "rgba(241, 255, 234, 1)"], + [10, "rgba(208, 250, 200, 1)"] + ] + }, + "text-halo-width": 0.3 + } + }, + { + "id": "poi_zoo", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "poi", + "minzoom": 11, + "filter": ["all", ["==", "class", "zoo"], ["==", "subclass", "zoo"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [15, 12], + [20, 16] + ] + }, + "icon-image": "{subclass}", + "text-field": "{name}", + "visibility": "visible", + "text-anchor": "top", + "text-offset": [0, 1.2], + "text-padding": 2, + "text-max-width": 6, + "icon-allow-overlap": true + }, + "paint": { + "text-color": "#660033", + "icon-opacity": 1, + "icon-halo-blur": 1, + "text-halo-blur": 0.5, + "icon-halo-color": "rgba(255, 255, 255, 1)", + "icon-halo-width": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "mountain_peak", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "mountain_peak", + "maxzoom": 16, + "filter": ["all", ["!in", "class", "cliff", "volcano"]], + "layout": { + "text-size": 10, + "icon-image": "peak", + "text-field": { + "stops": [ + [6, " {name} "], + [10, "{name}\\n{ele}m"] + ] + }, + "text-anchor": "top", + "text-offset": [0, 0.5], + "text-max-width": 6, + "text-line-height": 1.1, + "text-font": ["hwxk"], + "visibility": "visible", + "icon-size": 1.3 + }, + "paint": { + "text-color": "#6e441e", + "text-halo-color": "rgba(255, 255, 255, .8)", + "text-halo-width": 1 + } + }, + { + "id": "mountain_peak_volcano", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "mountain_peak", + "maxzoom": 16, + "filter": ["all", ["==", "class", "volcano"]], + "layout": { + "text-size": 10, + "icon-image": "volcano", + "text-field": { + "stops": [ + [6, " "], + [12, "{name} {ele}m"] + ] + }, + "text-anchor": "top", + "text-offset": [0, 0.5], + "text-max-width": 6, + "text-line-height": 1.1, + "text-font": ["hwxk"], + "visibility": "visible" + }, + "paint": { + "text-color": "#d40000", + "text-halo-color": "rgba(255, 255, 255, .8)", + "text-halo-width": 1 + } + }, + { + "id": "place_village", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 8, + "filter": ["all", ["==", "class", "village"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "base": 1.2, + "stops": [ + [10, 10], + [15, 16] + ] + }, + "text-field": "{name:latin}\n{name:nonlatin}", + "visibility": "visible", + "text-max-width": 8 + }, + "paint": { + "text-color": "#333", + "text-halo-color": "rgba(255,255,255,0.8)", + "text-halo-width": 1.2 + } + }, + { + "id": "place_town", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 6, + "filter": ["all", ["==", "class", "town"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "base": 1.2, + "stops": [ + [7, 10], + [11, 13] + ] + }, + "text-field": "{name:nonlatin}", + "visibility": "visible", + "text-anchor": "bottom", + "text-offset": [0, 0], + "text-max-width": 8 + }, + "paint": { + "text-color": "#333", + "text-halo-color": "rgba(255,255,255,0.8)", + "text-halo-width": 1 + } + }, + { + "id": "place_state", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 4, + "maxzoom": 12, + "filter": ["all", ["==", "class", "state"], ["<", "rank", 3]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [3, 12], + [6, 14] + ] + }, + "text-field": "{name:nonlatin}", + "visibility": "visible", + "text-padding": 2, + "text-transform": "none", + "text-letter-spacing": 0 + }, + "paint": { + "text-color": "rgba(255, 77, 79, 1)", + "text-halo-color": "rgba(255,255,255,0.7)", + "text-halo-width": 0, + "icon-halo-width": 1 + } + }, + { + "id": "place_city", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 4, + "maxzoom": 14, + "filter": ["all", ["==", "class", "city"], ["!=", "rank", 1]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "base": 1.2, + "stops": [ + [4, 12], + [15, 12] + ] + }, + "icon-image": { + "stops": [ + [4, "place-6"], + [7, " "] + ] + }, + "text-field": "{name:nonlatin}", + "visibility": "visible", + "icon-offset": [0, 3], + "text-anchor": "bottom", + "text-offset": [0, 0], + "icon-optional": false, + "text-max-width": 8, + "icon-allow-overlap": true, + "text-allow-overlap": false, + "text-ignore-placement": false + }, + "paint": { + "text-color": { + "stops": [ + [6, "rgba(88, 88, 88, 1)"], + [14, "rgba(32, 32, 32, 1)"] + ] + }, + "text-halo-color": "rgba(255,255,255,0.8)", + "text-halo-width": 1 + } + }, + { + "id": "place_capital", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 3, + "maxzoom": 15, + "filter": ["all", ["==", "class", "city"], ["in", "capital", 1, 2]], + "layout": { + "icon-size": 1, + "text-font": ["hwxk"], + "text-size": { + "base": 1.2, + "stops": [ + [4, 11], + [12, 16] + ] + }, + "icon-image": { + "stops": [ + [6, "place-capital-8"], + [8, ""] + ] + }, + "text-field": "{name:nonlatin}", + "visibility": "visible", + "icon-offset": [0, 3], + "text-anchor": "bottom", + "text-offset": [0, 0], + "icon-optional": false, + "text-max-width": 8, + "icon-allow-overlap": true + }, + "paint": { + "text-color": { + "stops": [ + [6, "rgba(73, 73, 73, 1)"], + [14, "rgba(32, 32, 32, 1)"] + ] + }, + "text-halo-color": "rgba(255,255,255,0.8)", + "text-halo-width": 1.2 + } + }, + { + "id": "country_other", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 4, + "maxzoom": 15, + "filter": ["all", ["==", "class", "country"], ["!has", "iso_a2"]], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [3, 11], + [5, 13], + [7, 20] + ] + }, + "text-field": "{name:latin}", + "visibility": "visible", + "text-max-width": 6.25, + "text-transform": "none" + }, + "paint": { + "text-color": "rgba(131, 81, 130, 1)", + "text-halo-blur": 1, + "text-halo-color": "rgba(255,255,255,0.8)", + "text-halo-width": 0.8 + } + }, + { + "id": "country_3", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 5, + "maxzoom": 12, + "filter": [ + "all", + [">=", "rank", 3], + ["==", "class", "country"], + ["has", "iso_a2"] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [3, 11], + [5, 13], + [7, 17] + ] + }, + "text-field": "{name:latin}", + "visibility": "visible", + "text-max-width": 6.25, + "text-transform": "none" + }, + "paint": { + "text-color": { + "stops": [ + [3, "rgba(108, 78, 107, 1)"], + [10, "rgba(57, 37, 73, 1)"] + ] + }, + "text-halo-blur": 1, + "text-halo-color": "rgba(255,255,255,0.8)", + "text-halo-width": 0.8 + } + }, + { + "id": "country_2", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 2, + "maxzoom": 12, + "filter": [ + "all", + ["==", "rank", 2], + ["==", "class", "country"], + ["has", "iso_a2"] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [3, 11], + [5, 14], + [7, 19] + ] + }, + "text-field": "{name:latin}", + "visibility": "visible", + "text-max-width": 6.25, + "text-transform": "none" + }, + "paint": { + "text-color": { + "stops": [ + [3, "rgba(108, 78, 107, 1)"], + [10, "rgba(57, 37, 73, 1)"] + ] + }, + "text-halo-blur": 1, + "text-halo-color": "rgba(255,255,255,0.8)", + "text-halo-width": 0.8 + } + }, + { + "id": "country_1", + "type": "symbol", + "metadata": {}, + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 2, + "maxzoom": 12, + "filter": [ + "all", + ["==", "rank", 1], + ["==", "class", "country"], + ["has", "iso_a2"] + ], + "layout": { + "text-font": ["hwxk"], + "text-size": { + "stops": [ + [3, 14], + [5, 16], + [7, 18] + ] + }, + "text-field": "{name:nonlatin}", + "visibility": "visible", + "text-max-width": 6.25, + "text-transform": "none" + }, + "paint": { + "text-color": { + "stops": [ + [2, "rgba(108, 78, 107, 1)"], + [10, "rgba(57, 37, 73, 1)"] + ] + }, + "text-halo-color": "rgba(255,255,255,0.8)", + "text-halo-width": 1 + } + } + ], + "id": "openmaptiles" +} diff --git a/src/api/Hangjing/index.js b/src/api/Hangjing/index.js index 4c549c0af..16c46b0b2 100644 --- a/src/api/Hangjing/index.js +++ b/src/api/Hangjing/index.js @@ -15,3 +15,11 @@ export function getHangjing(data = {}) { data, }) } + +export function updateHjStyle(data = {}) { + return request({ + url: `${baseUrl}/hangjing/style`, + method: 'put', + data, + }) +} diff --git a/src/assets/base.css b/src/assets/base.css index 1d345c26c..5cf1dd73a 100644 --- a/src/assets/base.css +++ b/src/assets/base.css @@ -55,9 +55,10 @@ #71ffff77 ); - --color-bg: #1a222966; + /* --color-bg: #1a222966; */ + --color-bg: #1a222999; - --gradient-bg-title: linear-gradient(to right, #4fd2dd55, #4b877400); + --gradient-bg-title: linear-gradient(to right, #4fd2dd66, #4b877400); --tw-from-opacity: 33%; } diff --git a/src/assets/earth.scss b/src/assets/earth.scss new file mode 100644 index 000000000..2df667faf --- /dev/null +++ b/src/assets/earth.scss @@ -0,0 +1,3 @@ +.cesium-widget-credits { + display: none !important; +} \ No newline at end of file diff --git a/src/assets/main.css b/src/assets/main.css index e928b8781..124b8ccf5 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -1,6 +1,7 @@ @import './base.css'; @import './naiveui.css'; @import './detail.scss'; +@import './earth.scss'; #app { width: 100%; diff --git a/src/assets/naiveui.css b/src/assets/naiveui.css index 4130a1bfb..82b997e57 100644 --- a/src/assets/naiveui.css +++ b/src/assets/naiveui.css @@ -23,10 +23,10 @@ border-image-slice: 2; border-image-repeat: stretch; */ - position: relative; - margin-bottom: 10px; + /* position: relative; + margin-bottom: 10px; */ /* background: rgba(26, 34, 41, 0.8); */ - background: rgba(0, 0, 0, 0.8); + /* background: rgba(0, 0, 0, 0.8); */ } /* .n-notification-wrapper { width: 200px; @@ -38,14 +38,14 @@ } */ .n-message-wrapper::before { - border-radius: 5px; + /* border-radius: 5px; content: ''; position: absolute; top: -2px; bottom: -2px; left: -2px; right: -2px; - z-index: -1; + z-index: -1; */ /* background: linear-gradient( 45deg, #f7c30b, @@ -55,7 +55,7 @@ #f49805, #f7c30b ); */ - background: white; + /* background: white; background-size: 300% 300%; animation: gradientAnimation 3s ease infinite alternate; @@ -70,7 +70,7 @@ 2px 100%, 100% 100%, 100% 0% - ); + ); */ } @keyframes gradientAnimation { diff --git a/src/hooks/entity.ts b/src/hooks/entity.ts index ecd762e54..78b2f8cad 100644 --- a/src/hooks/entity.ts +++ b/src/hooks/entity.ts @@ -11,6 +11,7 @@ export const useEntity = () => { showEntity, getHisTraj, getMBEntityOpt, + iconOrModel, changeIconOrModel, } } @@ -89,7 +90,7 @@ function getMBEntityOpt({ scaleByDistance: new Cesium.NearFarScalar(7000000, 1.0, 18000000, 0.4), }, billboard: { - show: true, + show: !iconOrModel.value, image: mubiaoDict.icon, width: 30, height: 30, @@ -97,7 +98,7 @@ function getMBEntityOpt({ scaleByDistance: new Cesium.NearFarScalar(7000000, 1.0, 18000000, 0.4), }, model: { - show: false, + show: iconOrModel.value, uri: mubiaoDict.model, scale: 1000, minimumPixelSize: 50, @@ -124,8 +125,10 @@ function getMBEntityOpt({ } } +const iconOrModel = ref(false) function changeIconOrModel() { - ;[...mubiaoMap.values()].forEach(entity => { + iconOrModel.value = !iconOrModel.value + ;[...mubiaoMap.values(), ...baseMap.values()].forEach(entity => { entity.model.show = !entity.model.show._value entity.billboard.show = !entity.billboard.show._value }) diff --git a/src/router/index.ts b/src/router/index.ts index b853cb65f..f4b041a08 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -36,6 +36,11 @@ const router = createRouter({ }, ], }, + { + path: '/placename', + name: 'PlaceName', + component: () => import('@/views/PlaceName'), + }, ], }) diff --git a/src/views/BaseMB/hooks/base.ts b/src/views/BaseMB/hooks/base.ts index 732000168..3796690fe 100644 --- a/src/views/BaseMB/hooks/base.ts +++ b/src/views/BaseMB/hooks/base.ts @@ -10,7 +10,7 @@ import { useEntity } from '@/hooks/entity' const treeData = ref([]) -const { baseMap } = useEntity() +const { baseMap, iconOrModel } = useEntity() // const { baseMap } = storeToRefs(entity) // const allKeys = computed(() => getAllKeys(treeData)) @@ -48,10 +48,136 @@ export const useBase = () => { // console.log(nodes, '====') nodes.forEach(({ data, dataId }: TBase) => { const entity = addEntity(data) + // console.log(entity) addEventSub(dataId, entity, data) baseMap.set(dataId, entity) + + // console.log(entity) + // const boundingSphere = entity.computeBoundingSphere() + // const radius = boundingSphere.radius + + // // 计算模型的底部位置 + // const newPosition = Cesium.Cartesian3.subtract( + // entity.position.getValue(), + // Cesium.Cartesian3.multiplyByScalar( + // Cesium.Cartesian3.UNIT_Z, + // radius, + // new Cesium.Cartesian3() + // ) + // ) + + // // 设置模型的新的位置 + // entity.position = new Cesium.ConstantPositionProperty(newPosition) }) + + const modelUrls = Object.values(window.settings.baseMBDict).map( + item => item.model + ) + // console.log(viewer.scene.primitives) + + viewer.scene.preRender.addEventListener(() => { + viewer.scene.primitives._primitives.forEach(primitive => { + if (primitive instanceof Cesium.Model && primitive?._id?._name) { + const entity = baseMap.get(primitive._id._name) + if (!entity) { + return + } + if (primitive.ready && entity) { + // // 获取模型的 BoundingSphere + // const boundingSphere = primitive.boundingSphere + + // const entityPos = entity.position._value + // // 计算底部高度调整 + // const center = boundingSphere.center + // // const height = Cesium.Cartesian3.distance(center, entityPos) + // const radius = boundingSphere.radius + // // console.log(center, radius) + // const cartographic = Cesium.Cartographic.fromCartesian( + // entity.position._value + // ) + // // -(Math.sqrt(3) * radius) / 3 + // const adjustedHeight = radius * 0.8 + + // // + cartographic.height + // const newPosition = Cesium.Cartesian3.fromRadians( + // cartographic.longitude, + // cartographic.latitude, + // adjustedHeight + // ) + + let modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame( + entity.position._value + ) + const heightOffset = Cesium.Matrix4.fromTranslation( + new Cesium.Cartesian3( + 0, + 0, + primitive.boundingSphere.radius * 0.8 + ) + ) + modelMatrix = Cesium.Matrix4.multiply( + modelMatrix, + heightOffset, + new Cesium.Matrix4() + ) + primitive.modelMatrix = modelMatrix + + // Cesium.Matrix4.setTranslation( + // primitive.modelMatrix, + // newPosition, + // primitive.modelMatrix + // ) + } + } + }) + }) + + // console.log(viewer.scene.primitives._primitives) + // // 获取模型的 Primitive 实例 + // const primitiveModel = viewer.scene.primitives._primitives.filter( + // primitive => { + // console.log(primitive, modelUrls) + // return modelUrls.includes(primitive?._resource?.url) + // } + // ) + // console.log(primitiveModel) + // 等待模型加载完成并调整其位置 + // viewer.scene.preRender.addEventListener(() => { + // // 遍历场景中的所有 Primitive + // viewer.scene.primitives._primitives.forEach(primitive => { + // if ( + // primitive instanceof Cesium.Model && // 判断是否为 Model 类型 + // modelUrls.includes(primitive.uri) // 确保是我们需要的模型 + // ) { + // // 获取 BoundingSphere 信息 + // const boundingSphere = primitive.boundingSphere + // if (boundingSphere) { + // // 计算模型底部到中心的偏移量 + // const bottomOffset = boundingSphere.radius + + // // 获取模型当前的 Cartographic 坐标 + // const cartographic = Cesium.Cartographic.fromCartesian( + // modelEntity.position + // ) + + // // 调整高度,使模型底部贴地 + // const adjustedHeight = cartographic.height - bottomOffset + // const newPosition = Cesium.Cartesian3.fromRadians( + // cartographic.longitude, + // cartographic.latitude, + // adjustedHeight + // ) + + // // 更新 Entity 的位置 + // modelEntity.position = newPosition + + // // 删除监听器,防止重复调整 + // viewer.scene.preRender.removeEventListener(arguments.callee) + // } + // } + // }) + // }) } removeIds.forEach(id => { @@ -109,13 +235,13 @@ function getAllKeys(treeData: any) { } function addEntity(data: TBaseNode) { - const { sheShiName, sheShiType, geom } = data + const { id, sheShiName, sheShiType, geom } = data const pos = parseWKT(geom).coordinates const color = Cesium.Color.fromCssColorString( window.settings.baseMBDict[sheShiType].color ) const entity = viewer.entities.add({ - name: sheShiName, + name: id, position: Cesium.Cartesian3.fromDegrees(...pos), label: { text: `${sheShiName}`, @@ -135,6 +261,7 @@ function addEntity(data: TBaseNode) { scaleByDistance: new Cesium.NearFarScalar(7000000, 1.0, 18000000, 0.4), }, billboard: { + show: !iconOrModel.value, image: window.settings.baseMBDict[sheShiType].icon, width: 30, height: 30, @@ -144,6 +271,13 @@ function addEntity(data: TBaseNode) { // verticalOrigin: Cesium.VerticalOrigin.BOTTOM, }, + model: { + show: iconOrModel.value, + uri: window.settings.baseMBDict[sheShiType].model, + scale: 30, + minimumPixelSize: 30, + heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND, + }, }) return entity } diff --git a/src/views/Content/components/WidgetNav/components/BaseMap.jsx b/src/views/Content/components/WidgetNav/components/BaseMap.jsx index 02292b34b..8d2263e86 100644 --- a/src/views/Content/components/WidgetNav/components/BaseMap.jsx +++ b/src/views/Content/components/WidgetNav/components/BaseMap.jsx @@ -19,7 +19,45 @@ export default defineComponent({ tilingScheme: new Cesium[baseMapList[mapId].tilingScheme](), }) ) + // modifyMap() } + + function modifyMap() { + // 获取地图影像图层 + let baseLayer = viewer.imageryLayers.get(0) + //设置2个变量,用来判断是否进行颜色的翻转和过滤 + baseLayer.invertColor = true + + baseLayer.filterRGB = [60, 145, 172] //[255,255,255] = > [0,50,100] + // 更改底图着色器的代码 + const baseFragmentShader = + viewer.scene.globe._surfaceShaderSet.baseFragmentShaderSource.sources + // console.log(baseFragmentShader); + + // 循环修改着色器 + // for (let i = 0; i < baseFragmentShader.length; i++) { + // console.log(baseFragmentShader[i]); + const strS = 'color = czm_saturation(color, textureSaturation);\n#endif\n' + let strT = 'color = czm_saturation(color, textureSaturation);\n#endif\n' + if (baseLayer.invertColor) { + strT += ` + color.r = 1.0 - color.r; + color.g = 1.0 - color.g; + color.b = 1.0 - color.b; + ` + } + if (baseLayer.filterRGB) { + strT += ` + color.r = color.r*${baseLayer.filterRGB[0]}.0/255.0; + color.g = color.g*${baseLayer.filterRGB[1]}.0/255.0; + color.b = color.b*${baseLayer.filterRGB[2]}.0/255.0; + ` + } + + baseFragmentShader[2] = baseFragmentShader[2].replace(strS, strT) + // } + } + onMounted(() => { changeMap(Object.keys(baseMapList)[2]) }) diff --git a/src/views/Content/index.vue b/src/views/Content/index.vue index af9df7a0e..208291779 100644 --- a/src/views/Content/index.vue +++ b/src/views/Content/index.vue @@ -15,6 +15,8 @@ import MultiHisTrajectory from '../Mubiao/components/MultiHisTrajectory/index.vu import YsHangjing from '../YsHangjing/index.vue' import TextMessage from '../TextReport/components/Message' + +import Daodan from '../Daodan' // import HeatMap from '../Mubiao/components/HeatMap/index.vue' // import TextDetailModal from '../TextReport/components/DetailsModal/index.vue' @@ -22,6 +24,7 @@ import { useTextReport } from '../TextReport/hooks/text' import { useHisImage } from '../BaseMB/components/HisImages/hooks/hisImage' import { useMBTrajectory } from '../Mubiao/components/HisTrajectory/hooks/mbTraj' import { useMultiMBTrajectory } from '../Mubiao/components/MultiHisTrajectory/hooks/multiMbTraj' +import { useDaodan } from '../Daodan/daodan' // import { useWeather } from '../Weather/hooks/weather' import DetailsModal from './components/DetailsModal/index.vue' @@ -30,6 +33,7 @@ const { getTextConfigs, initWebSocket } = useTextReport() const { showHisImageCom } = useHisImage() const { showHisTrajCom } = useMBTrajectory() const { showMultiHisTrajCom } = useMultiMBTrajectory() +const { showDdConfigCom } = useDaodan() const getConfig = async () => { const res = await getTextConfigs() // console.log(res) @@ -122,9 +126,17 @@ const showOrHideTextReport = () => {
-
+
- - diff --git a/src/views/Hangjing/hooks/hangjing.ts b/src/views/Hangjing/hooks/hangjing.ts index 957d68186..76d828a10 100644 --- a/src/views/Hangjing/hooks/hangjing.ts +++ b/src/views/Hangjing/hooks/hangjing.ts @@ -2,6 +2,8 @@ import { difference } from 'lodash' import { useWebSocket } from '@vueuse/core' import { useTree } from '@/utils/tree' import { useHjPolygon } from './hangjingPolygon' +import { getHangjing } from '@/api/Hangjing' + interface IPolygonData { id: string position: number[] @@ -17,8 +19,8 @@ export const useHangjing = () => { onMounted(() => { initWebSocket() }) - const addHangjing = (ids, hangjingData) => { - addHangjingPolygon(ids, hangjingData) + const addHangjing = ids => { + addHangjingPolygon(ids, hjTreeData) } const removeHangjing = (id: string) => { @@ -28,6 +30,15 @@ export const useHangjing = () => { return { addHangjing, removeHangjing, + hjTreeData, + isLoading, + timeRange, + searchTitle, + type, + searchHangjing, + clearSelected, + getHangjingData, + checkedKeys, } } @@ -89,3 +100,44 @@ const initWebSocket = () => { } }) } + +const hjTreeData = ref([]) + +const isLoading = ref(false) +async function getHangjingData(params = {}) { + isLoading.value = true + const { code, data: resData } = await getHangjing(params) + + if (code === '200') { + hjTreeData.value = [resData] + } + isLoading.value = false +} +const timeRange = ref(null) + +const searchTitle = ref('') + +const type = ref('') + +async function searchHangjing(checked: string[]) { + // handleCheck([]) + await getHangjingData({ + timeBegin: timeRange.value?.[0], + timeEnd: timeRange.value?.[1], + // wkt: drawnArea.value, + hjType: type.value === '' ? null : type.value, + title: searchTitle.value, + }) + if (checked && checked.length > 0) { + checkedKeys.value = checked + } +} + +function clearSelected() { + timeRange.value = null + type.value = '' + searchTitle.value = '' + searchHangjing() +} + +const checkedKeys = ref>([]) diff --git a/src/views/Hangjing/hooks/hangjingDetail.jsx b/src/views/Hangjing/hooks/hangjingDetail.jsx index a4f865024..558c6e37d 100644 --- a/src/views/Hangjing/hooks/hangjingDetail.jsx +++ b/src/views/Hangjing/hooks/hangjingDetail.jsx @@ -13,7 +13,7 @@ function renderDetailsContent(data) {
基本信息
{Object.keys(data) - .filter(key => key !== 'geom') + .filter(key => !['geom', 'styleJsonData'].includes(key)) .map(key => (
{key}:{data[key]} diff --git a/src/views/Hangjing/hooks/hangjingPolygon.ts b/src/views/Hangjing/hooks/hangjingPolygon.ts index 7fd70adbe..3a5550b26 100644 --- a/src/views/Hangjing/hooks/hangjingPolygon.ts +++ b/src/views/Hangjing/hooks/hangjingPolygon.ts @@ -4,8 +4,9 @@ import { parseWKT } from '@/utils/parseWKT' import { difference } from 'lodash' import { polygonGradient } from '@/js/polygonGradient' import { polygonMaterial } from '@/js/polygon' -import { centerOfMass } from '@turf/turf' +import { centerOfMass, midpoint, point } from '@turf/turf' import { useTree } from '@/utils/tree' +import { cartesian32LonLat } from '@/utils/pos' import { useHangjingPopup } from './hangjingPopup' @@ -34,12 +35,14 @@ export const useHjPolygon = (polygonMap: Map) => { params: addIds, paramName: 'dataId', }) + // console.log(nodes, 'nodes') nodes.forEach(({ data: hjData, dataId: id }) => { // const item = data.find(item => item.id === id) if (hjData) { if (hjData.zoneList.length > 0) { hjData.zoneList.forEach(zone => { - addPolygon(zone, id) + // console.log(zone, 'zone') + addPolygon({ ...zone, styleJsonData: hjData.styleJsonData }, id) }) } else { addPolygon(hjData) @@ -49,7 +52,7 @@ export const useHjPolygon = (polygonMap: Map) => { } // 删除 if (removeIds.length > 0) { - console.log(removeIds, 'removeIds') + // console.log(removeIds, 'removeIds') removeIds.forEach(id => { removeEventSub(polygonMap.get(id)) removeHangjingPolygon(id) @@ -58,13 +61,13 @@ export const useHjPolygon = (polygonMap: Map) => { } function addPolygon(item, parentId: number | null = null) { - const { id, geom, title } = item + const { id, geom, title, styleJsonData } = item const feature = parseWKT(geom) const position = feature.coordinates[0].map(pos => { return Cesium.Cartesian3.fromDegrees(...pos) }) - const labels = addTextAlongCurve('Cesium中文垂直排列测试', position) + // const labels = addTextAlongCurve('Cesium中文垂直排列测试', position) // console.log(item, id, position, 'id, position, color') // const randomColor = @@ -86,10 +89,13 @@ export const useHjPolygon = (polygonMap: Map) => { } const color = colors.get(curId) + const style = JSON.parse(styleJsonData || '{}') const polygon = addPrimitivePolygon({ id, + title, color: color, position, + style, }) const centerPoint = centerOfMass(feature).geometry.coordinates @@ -117,12 +123,21 @@ export const useHjPolygon = (polygonMap: Map) => { function addPolygonCenter(centerPoint: number[]) { return viewer.entities.add({ - show: false, + show: true, position: Cesium.Cartesian3.fromDegrees(...centerPoint), point: { pixelSize: 10, color: Cesium.Color.RED, }, + label: { + text: centerPoint.toString(), + font: '14px sans-serif', + fillColor: Cesium.Color.RED, + outlineColor: Cesium.Color.BLACK, + outlineWidth: 2, + style: Cesium.LabelStyle.FILL_AND_OUTLINE, + pixelOffset: new Cesium.Cartesian2(0, -20), + }, }) } @@ -130,11 +145,24 @@ export const useHjPolygon = (polygonMap: Map) => { id, position, color, + style, + title, }: { id: string position: Cesium.Cartesian3[] color: string + style: Record + title: string }): Cesium.Primitive { + const { + fontFamily, + fontSize, + textColor, + polygonColor, + lineColor, + lineWidth, + lineType, + } = style // const polygonOptions = { // extrudedHeight: 5000, // polygonHierarchy: new Cesium.PolygonHierarchy(position), @@ -156,17 +184,37 @@ export const useHjPolygon = (polygonMap: Map) => { // }), // }) // return viewer.scene.primitives.add(primitive) - + const lineMaterial = Cesium.Color.fromCssColorString( + lineColor || 'rgba(255,0,0,1)' + ) return viewer.entities.add({ id, + position: findNorthernMostPoint(position), + label: { + show: true, + text: title, + font: `${fontSize || 14}px ${fontFamily || '微软雅黑'}`, + fillColor: Cesium.Color.fromCssColorString( + textColor || 'rgba(255,255,0,1)' + ), + pixelOffset: new Cesium.Cartesian2(0, -10), + // outlineColor: Cesium.Color.BLACK, + // outlineWidth: 2, + // style: Cesium.LabelStyle.FILL_AND_OUTLINE, + }, polyline: { positions: position, - width: 1, - material: Cesium.Color.RED, + width: lineWidth || 1, + material: + lineType === 'dashed' + ? new Cesium.PolylineDashMaterialProperty({ color: lineMaterial }) + : lineMaterial, }, polygon: { hierarchy: new Cesium.PolygonHierarchy(position), - material: Cesium.Color.fromCssColorString(color), + material: Cesium.Color.fromCssColorString( + polygonColor || 'rgba(255,255,255,0.5)' + ), // material: polygonMaterial(color), // material: polygonGradient(color), // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, @@ -225,120 +273,27 @@ export const useHjPolygon = (polygonMap: Map) => { } } -function addTextAlongCurve(text, polygonPoints) { - // 创建 Billboard 集合 - const billboardCollection = viewer.scene.primitives.add( - new Cesium.BillboardCollection() +function findNorthernMostPoint(positions) { + const cartographicPositions = positions.map(pos => + Cesium.Cartographic.fromCartesian(pos) ) - // 创建文字绘制的辅助函数 - function createTextTexture(text, angle) { - const canvas = document.createElement('canvas') - const context = canvas.getContext('2d') - - // 设置 Canvas 大小 - canvas.width = 20 - canvas.height = 20 - - // 设置文字样式 - context.font = '20px sans-serif' // 支持中文 - context.fillStyle = 'blue' - context.textAlign = 'center' - context.textBaseline = 'middle' - - // 将文字绘制到 Canvas,并进行旋转 - context.clearRect(0, 0, canvas.width, canvas.height) - context.save() - - // 旋转文字 - context.translate(canvas.width / 2, canvas.height / 2) - context.rotate(angle) - context.fillText(text, 0, 0) - - context.restore() - - return canvas - } - - // 动态生成字符标注 - function generateLabels(cameraHeight) { - billboardCollection.removeAll() // 清除之前的标注 - - let charIndex = 0 // 当前字符索引 - for (let i = 0; i < polygonPoints.length - 1; i++) { - const start = polygonPoints[i] // 当前边的起点 - const end = polygonPoints[i + 1] // 当前边的终点 - - // 计算线段的方向向量 - const direction = Cesium.Cartesian3.subtract( - end, - start, - new Cesium.Cartesian3() - ) - Cesium.Cartesian3.normalize(direction, direction) - - // 计算垂直于线段的方向向量 - const perpendicular = Cesium.Cartesian3.cross( - direction, - Cesium.Cartesian3.UNIT_Z, // 使用 Z 轴(垂直地球表面)计算垂直方向 - new Cesium.Cartesian3() - ) - Cesium.Cartesian3.normalize(perpendicular, perpendicular) - - // 计算线段的长度 - const length = Cesium.Cartesian3.distance(start, end) - - // 动态调整字符间隔,基于相机高度 - const baseSpacing = 50 // 基础字符间隔 - const charSpacing = Math.max((baseSpacing * cameraHeight) / 5000000, 30) - - // 按字符间隔放置文字 - let distance = 0 - while (distance < length && charIndex < text.length) { - // 计算字符的位置 - const fraction = distance / length // 当前字符在边上的位置比例 - const position = Cesium.Cartesian3.lerp( - start, - end, - fraction, - new Cesium.Cartesian3() - ) - - // 计算旋转角度,使文字垂直于线段 - const angle = Math.atan2(perpendicular.y, perpendicular.x) - - // 创建带旋转的文字纹理 - const canvas = createTextTexture(text[charIndex], angle) - - // 添加 Billboard 显示文字 - billboardCollection.add({ - position: position, - image: canvas, // 使用生成的文字纹理 - // pixelOffset: new Cesium.Cartesian2(10, 0), - verticalOrigin: Cesium.VerticalOrigin.BOTTOM, - }) - - // 更新字符索引和距离 - charIndex++ - console.log(charSpacing) - distance += charSpacing * 2000 - // distance *= 2 - console.log(distance) - } - - // 如果字符已用完,跳出循环 - if (charIndex >= text.length) { - break - } + let maxLatitude = -Infinity + cartographicPositions.forEach(carto => { + if (carto.latitude > maxLatitude) { + maxLatitude = carto.latitude } - } - - // 初始化标注(根据初始相机高度) - generateLabels(viewer.camera.positionCartographic.height) - - // 监听相机变化事件,动态更新字符间隔 - viewer.camera.changed.addEventListener(() => { - const cameraHeight = viewer.camera.positionCartographic.height - generateLabels(cameraHeight) }) + const northernMostPoints = cartographicPositions.filter( + carto => carto.latitude.toFixed(15) === maxLatitude.toFixed(15) + ) + const lat = Cesium.Math.toDegrees(northernMostPoints[0].latitude) + const startLon = Cesium.Math.toDegrees(northernMostPoints[0].longitude) + const endLon = Cesium.Math.toDegrees( + northernMostPoints[ + northernMostPoints.length - (northernMostPoints.length > 2 ? 2 : 1) + ].longitude + ) + const mid = midpoint(point([startLon, lat]), point([endLon, lat])) + return Cesium.Cartesian3.fromDegrees(...mid.geometry.coordinates) } diff --git a/src/views/Hangjing/hooks/hangjingStyle.jsx b/src/views/Hangjing/hooks/hangjingStyle.jsx index cfea8ed8b..26b48e7bc 100644 --- a/src/views/Hangjing/hooks/hangjingStyle.jsx +++ b/src/views/Hangjing/hooks/hangjingStyle.jsx @@ -7,23 +7,36 @@ import { NInputNumber, NButton, } from 'naive-ui' +import { useHangjing } from './hangjing' +import { updateHjStyle } from '@/api/hangjing' import { useModal } from '@/views/Content/hooks/modal' const { openDetailsModal } = useModal() -const styleForm = ref({ - fontFamily: '微软雅黑', - fontSize: 14, - textColor: 'rgba(255,255,0,1)', - polygonColor: 'rgba(255,0,0,0.3)', - lineColor: 'rgba(255,0,0,1)', - lineWidth: 1, - lineType: 'solid', -}) +const styleForm = ref({}) export const useHangjingStyle = () => { return { renderStyleContent, showStyleModal } } +function initStyle(data) { + const { styleJsonData } = data + const style = JSON.parse(styleJsonData || '{}') + if (Object.keys(style).length > 0) { + styleForm.value = style + } else { + styleForm.value = { + fontFamily: '微软雅黑', + fontSize: 14, + textColor: 'rgba(255,255,0,1)', + polygonColor: 'rgba(255,255,255,0.5)', + lineColor: 'rgba(255,0,0,1)', + lineWidth: 1, + lineType: 'solid', + } + } +} + function renderStyleContent(data) { + initStyle(data) return (
- + updateStyle(data)}> 确定 取消 @@ -110,6 +123,22 @@ function showStyleModal(title, data) { }) } -function updateStyle() { - // TODO: 更新样式 +const { checkedKeys, searchHangjing } = useHangjing() + +function updateStyle(data) { + updateHjStyle({ + id: data.id, + styleJsonData: JSON.stringify(styleForm.value), + }) + .then(res => { + if (res.code === '200') { + window.$message.success('保存样式成功') + const checkedBeforePut = JSON.parse(JSON.stringify(checkedKeys.value)) + checkedKeys.value = [] + searchHangjing(checkedBeforePut) + } + }) + .catch(err => { + window.$message.error(`保存样式失败。${err}`) + }) } diff --git a/src/views/Hangjing/index.vue b/src/views/Hangjing/index.vue index a323ce557..6aec53c1e 100644 --- a/src/views/Hangjing/index.vue +++ b/src/views/Hangjing/index.vue @@ -12,10 +12,6 @@ import { useHangjingDetail } from './hooks/hangjingDetail' // import { useHangjingStyle } from './hooks/hangjingStyle' import Tree from '@/components/Tree/index.vue' - - -const timeRange = ref(null) - const rangeShortcuts = { 近一天: () => { const cur = new Date().getTime() @@ -35,9 +31,6 @@ const rangeShortcuts = { }, } -const searchTitle = ref('') - -const type = ref('') const typeOptions = [ { label: '全', @@ -102,86 +95,69 @@ const drawArea = () => { } const { showDetailsModal } = useHangjingDetail() -// const { showStyleModal } = useHangjingStyle() - -const data = ref([]) const renderSuffix = ({ option }: { option: TreeOption }) => { - return option.data ? h('div', { class: 'flex items-center gap-2 pr-2' }, [ - h( - NButton, - { - text: true, - size: 'tiny', - type: 'info', - onClick: () => showDetailsModal(`${option.data.title}详情`, option.data), - }, - { default: () => '详情' } - ), - // h( - // NButton, - // { - // text: true, - // size: 'tiny', - // type: 'info', - // onClick: () => showStyleModal(`${option.data.title}样式配置`, option.data), - // }, - // { default: () => '样式配置' } - // ), - ]) : null + return option.data + ? h('div', { class: 'flex items-center gap-2 pr-2' }, [ + h( + NButton, + { + text: true, + size: 'tiny', + type: 'info', + onClick: () => + showDetailsModal(`${option.data.title}详情`, option.data), + }, + { default: () => '详情' } + ), + // h( + // NButton, + // { + // text: true, + // size: 'tiny', + // type: 'info', + // onClick: () => showStyleModal(`${option.data.title}样式配置`, option.data), + // }, + // { default: () => '样式配置' } + // ), + ]) + : null } -const checkedKeys = ref>([]) +// const checkedKeys = ref>([]) -const { addHangjing } = useHangjing() +const { + addHangjing, + hjTreeData, + isLoading, + timeRange, + searchTitle, + type, + searchHangjing, + clearSelected, + getHangjingData, + checkedKeys, +} = useHangjing() watch(checkedKeys, val => { - addHangjing(val, data) + addHangjing(val) }) -const handleCheck = (rowKeys: DataTableRowKey[]) => { - const selectedList = data.value.filter(item => rowKeys.includes(item.id)) - addHangjing(selectedList) -} - -const isLoading = ref(false) -const getHangjingData = async (params = {}) => { - isLoading.value = true - const { code, data: resData } = await getHangjing(params) - - if (code === '200') { - data.value = [resData] - } - isLoading.value = false -} - onMounted(() => { getHangjingData() }) - -const searchHangjing = () => { - handleCheck([]) - getHangjingData({ - timeBegin: timeRange.value?.[0], - timeEnd: timeRange.value?.[1], - wkt: drawnArea.value, - hjType: type.value === '' ? null : type.value, - title: searchTitle.value, - }) -} - -const clearSelected = () => { - timeRange.value = null - type.value = '' - searchTitle.value = '' - searchHangjing() -} diff --git a/src/views/Mubiao/hooks/mubiaoDetail.jsx b/src/views/Mubiao/hooks/mubiaoDetail.jsx index 507b1edb5..407d12221 100644 --- a/src/views/Mubiao/hooks/mubiaoDetail.jsx +++ b/src/views/Mubiao/hooks/mubiaoDetail.jsx @@ -1,86 +1,14 @@ // import { h } from 'vue' import { NDataTable, NInputNumber, NSwitch } from 'naive-ui' import { useModal } from '@/views/Content/hooks/modal' +import Detection from '@/views/Payload/Detection.jsx' +import Communication from '@/views/Payload/Communication.jsx' + const { openDetailsModal } = useModal() export const useMubiaoDetail = () => { return { showDetailsMubiao } } -const detectingLoadColumns = [ - { - title: '垂直起始角', - key: 'minimumClock', - width: 180, - render(row) { - return ( - - ) - }, - }, - // { - // title: '垂直终止角', - // key: 'maximumClock', - // width: 180, - // render(row) { - // return ( - // - // ) - // }, - // }, - { - title: '水平起始角', - key: 'minimumCone', - width: 180, - render(row) { - return ( - - ) - }, - }, - { - title: '水平终止角', - key: 'maximumCone', - width: 180, - render(row) { - return ( - - ) - }, - }, - { - title: '半径', - key: 'radius', - width: 180, - render(row) { - return ( - - ) - }, - }, - { - title: '是否开启', - key: 'status', - render(row) { - return - }, - }, -] - const data = ref([ { id: 3, @@ -111,11 +39,7 @@ function renderMubiaoDetailsContent(mbData) { ))}
探测载荷
- row.id} - columns={detectingLoadColumns} - data={data.value} - /> +
) } diff --git a/src/views/Mubiao/index.vue b/src/views/Mubiao/index.vue index 78e927054..62336f8bb 100644 --- a/src/views/Mubiao/index.vue +++ b/src/views/Mubiao/index.vue @@ -11,6 +11,7 @@ import { useMuBiaoPositionWS } from './hooks/mubiaoPos' import { useMuBiaoDisappearWS } from './hooks/mubiaoDisappear' import { useMubiaoDetail } from './hooks/mubiaoDetail' import { useMBTrajectory } from './components/HisTrajectory/hooks/mbTraj' +import { useDaodan } from '../Daodan/daodan' const { addMubiao, data } = useMubiao() const useMbPosWS = useMuBiaoPositionWS() @@ -37,30 +38,35 @@ watch(checkedKeys, val => { const { showDetailsMubiao } = useMubiaoDetail() const { showOrHideHisTraj } = useMBTrajectory() +const { showOrHideDdConfig } = useDaodan() const renderSuffix = ({ option }: { option: TreeOption }) => { // console.log(option.data) - return option.data - ? h('div', { class: 'flex items-center gap-2 pr-2' }, [ + if (!option.data) { + return undefined + } + return h('div', { class: 'flex items-center gap-2 pr-2' }, [ + h( + NButton, + { + text: true, + size: 'tiny', + type: 'info', + onClick: () => showDetailsMubiao(option.data), + }, + { default: () => '详情' } + ), + option.data.targetType === '丙' && h( NButton, { text: true, size: 'tiny', type: 'info', - onClick: () => showDetailsMubiao(option.data), + onClick: () => showOrHideDdConfig(option.data), }, - { default: () => '详情' } + { default: () => '试验配置' } ), - // h( - // NButton, - // { - // text: true, - // size: 'tiny', - // type: 'info', - // onClick: () => showDetailsMubiao(option.data), - // }, - // { default: () => '载荷' } - // ), + option.data.targetType !== '丙' && h( NButton, { @@ -71,8 +77,7 @@ const renderSuffix = ({ option }: { option: TreeOption }) => { }, { default: () => '轨迹回放' } ), - ]) - : undefined + ]) } @@ -99,8 +104,14 @@ const renderSuffix = ({ option }: { option: TreeOption }) => { @update:checked-row-keys="handleCheck" /> --> diff --git a/src/views/Payload/Communication.jsx b/src/views/Payload/Communication.jsx new file mode 100644 index 000000000..b31c69f5a --- /dev/null +++ b/src/views/Payload/Communication.jsx @@ -0,0 +1,44 @@ +import { NDataTable, NButton, NSelect, NInputNumber, NSwitch } from 'naive-ui' + +export default defineComponent({ + name: 'DetectionPayload', + props: {}, + setup(props) { + const communicationPayloadColumns = [ + { + title: '通信对象', + key: 'target', + render(row) { + return ( + + ) + }, + }, + { + title: '是否开启', + key: 'status', + width: 120, + render(row) { + return + }, + }, + ] + const communicationPayload = ref([ + { + id: 3, + target: '3', + status: true, + }, + ]) + return () => ( + row.id} + columns={communicationPayloadColumns} + data={communicationPayload.value} + /> + ) + }, +}) diff --git a/src/views/Payload/Detection.jsx b/src/views/Payload/Detection.jsx new file mode 100644 index 000000000..3241846ee --- /dev/null +++ b/src/views/Payload/Detection.jsx @@ -0,0 +1,172 @@ +import { NDataTable, NButton, NSelect, NInputNumber, NSwitch } from 'naive-ui' + +export default defineComponent({ + name: 'DetectionPayload', + props: { + type: { + type: String, + default: 'radar', + }, + data: { + type: Array, + default: () => [], + }, + }, + setup(props) { + const detectingPayloadColumns = { + radar: [ + { + title: '垂直起始角', + key: 'minimumClock', + width: 180, + render(row) { + return ( + + ) + }, + }, + // { + // title: '垂直终止角', + // key: 'maximumClock', + // width: 180, + // render(row) { + // return ( + // + // ) + // }, + // }, + { + title: '水平起始角', + key: 'minimumCone', + width: 180, + render(row) { + return ( + + ) + }, + }, + { + title: '水平终止角', + key: 'maximumCone', + width: 180, + render(row) { + return ( + + ) + }, + }, + { + title: '半径', + key: 'radius', + width: 180, + render(row) { + return ( + + ) + }, + }, + { + title: '是否开启', + key: 'status', + width: 120, + render(row) { + return + }, + }, + ], + corner: [ + // { + // title: '载荷类型', + // key: 'type', + // render(row) { + // return ( + // + // ) + // }, + // }, + { + title: '开合角', + key: 'angle', + render(row) { + return ( + + ) + }, + }, + // { + // title: '水平半角', + // key: 'xHalfAngle', + // width: 120, + // render(row) { + // return ( + // + // ) + // }, + // }, + // { + // title: '垂直半角', + // key: 'yHalfAngle', + // width: 120, + // render(row) { + // return ( + // + // ) + // }, + // }, + { + title: '是否开启', + key: 'status', + width: 120, + render(row) { + return + }, + }, + ], + } + + return () => ( + row.id} + columns={detectingPayloadColumns[props.type]} + data={props.data} + /> + ) + }, +}) diff --git a/src/views/PlaceName/hooks.jsx b/src/views/PlaceName/hooks.jsx new file mode 100644 index 000000000..403fef8c6 --- /dev/null +++ b/src/views/PlaceName/hooks.jsx @@ -0,0 +1,152 @@ +import { ref } from 'vue' + +let viewer = null +const model = ref({ + name: null, + lon: null, + lat: null, + level: null, +}) +export function usePlaceName() { + const showPlace = ref(true) + function addPlaceName() { + showPlace.value = !showPlace.value + } + + return { + model, + showPlace, + addPlaceName, + initViewer, + clickPoint, + } +} + +async function initViewer() { + viewer = new Cesium.Viewer('place-earth', { + selectionIndicator: false, + animation: false, + baseLayerPicker: false, + // geocoder: false, + timeline: false, + sceneModePicker: false, + navigationHelpButton: false, + infoBox: false, + fullscreenButton: false, + homeButton: false, + + imageryProvider: false, + geocoder: new OpenStreetMapNominatimGeocoder(), + // geocoder: new Cesium.CartographicGeocoderService(), + }) + + viewer.scene.debugShowFramesPerSecond = true + viewer.camera.setView({ + destination: Cesium.Cartesian3.fromDegrees(117.48, 30.67, 18000000.0), + }) + + viewer.clock.shouldAnimate = true + viewer.shadows = false + // viewer.scene.globe.enableLighting = true + + if (Cesium.FeatureDetection.supportsImageRenderingPixelated()) { + viewer.resolutionScale = window.devicePixelRatio + } + + // 开启抗锯齿 + // viewer.scene.fxaa = true + viewer.scene.postProcessStages.fxaa.enabled = true + viewer.scene.skyBox = new Cesium.SkyBox({ + sources: { + positiveX: 'GV/resources/theme/skyBox/PositiveX.jpg', + negativeX: 'GV/resources/theme/skyBox/NegativeX.jpg', + positiveY: 'GV/resources/theme/skyBox/PositiveY.jpg', + negativeY: 'GV/resources/theme/skyBox/NegativeY.jpg', + positiveZ: 'GV/resources/theme/skyBox/PositiveZ.jpg', + negativeZ: 'GV/resources/theme/skyBox/NegativeZ.jpg', + // positiveX: './images/skybox/skyCube2k_px.jpg', + // negativeX: './images/skybox/skyCube2k_mx.jpg', + // positiveY: './images/skybox/skyCube2k_py.jpg', + // negativeY: './images/skybox/skyCube2k_my.jpg', + // positiveZ: './images/skybox/skyCube2k_pz.jpg', + // negativeZ: './images/skybox/skyCube2k_mz.jpg', + }, + }) + + viewer.terrainProvider = await Cesium.CesiumTerrainProvider.fromUrl( + 'http://192.168.10.201:2022/api/maptilecache/service/terrain/taiwan-HeightMap-4326', + { + requestVertexNormals: true, + requestWaterMask: true, + } + ) + + viewer.imageryLayers.addImageryProvider( + new Cesium.UrlTemplateImageryProvider({ + url: window.settings.map[3].url, + tilingScheme: new Cesium[window.settings.map[3].tilingScheme](), + }) + ) +} + +let getPointHandler = null +function clickPoint() { + if (getPointHandler) { + return + } + getPointHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas) + viewer._container.style.cursor = 'crosshair' + getPointHandler.setInputAction(event => { + const cartesian = viewer.scene.pickPosition(event.position) + if (Cesium.defined(cartesian)) { + const cartographic = Cesium.Cartographic.fromCartesian(cartesian) + const longitude = Cesium.Math.toDegrees(cartographic.longitude) + const latitude = Cesium.Math.toDegrees(cartographic.latitude) + + model.value.lon = longitude + model.value.lat = latitude + } + + getPointHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK) + getPointHandler = null + viewer._container.style.cursor = '' + }, Cesium.ScreenSpaceEventType.LEFT_CLICK) +} + +function OpenStreetMapNominatimGeocoder() {} +OpenStreetMapNominatimGeocoder.prototype.geocode = function (input) { + const query = `format=jsonv2&accept-language=zh&polygon_geojson=1&countrycodes=cn&q=${input}` + const requestString = 'https://nominatim.openstreetmap.org/search?' + query + return Cesium.Resource.fetchJson(requestString) //请求url获取json数据 + .then(function (results) { + let bboxDegrees + return results.map(function (resultObject) { + bboxDegrees = resultObject.boundingbox + return { + displayName: resultObject.display_name, + destination: Cesium.Rectangle.fromDegrees( + bboxDegrees[2], + bboxDegrees[0], + bboxDegrees[3], + bboxDegrees[1] + ), + } + }) + }) +} + +function AMapNominatimGeocoder() {} +AMapNominatimGeocoder.prototype.geocode = function (input) { + const query = `key=****&keywords=${input}` + const requestString = 'https://restapi.amap.com/v3/place/text?' + query + return Cesium.Resource.fetchJson(requestString) //请求url获取json数据 + .then(function (results) { + return results.pois.map(function (bboxDegrees) { + let [lng, lat] = bboxDegrees['location'].split(',') + return { + displayName: bboxDegrees['name'], + destination: Cesium.Rectangle.fromDegrees(lng, lat, lng, lat), + } + }) + }) +} diff --git a/src/views/PlaceName/index.jsx b/src/views/PlaceName/index.jsx new file mode 100644 index 000000000..cadd1817a --- /dev/null +++ b/src/views/PlaceName/index.jsx @@ -0,0 +1,225 @@ +import { + NButton, + NForm, + NFormItem, + NInput, + NInputNumber, + NSelect, +} from 'naive-ui' +import { usePlaceName } from './hooks' +import maplibregl from 'maplibre-gl' +import 'maplibre-gl/dist/maplibre-gl.css' + +export default defineComponent({ + props: { + data: { + type: Array, + default: () => [], + }, + }, + setup() { + const { model, showPlace, addPlaceName, initViewer, clickPoint } = + usePlaceName() + onMounted(async () => { + const style = { + version: 8, + sources: { + composite: { + url: 'mapbox://mapbox.mapbox-streets-v8', + type: 'vector', + }, + os: { + type: 'vector', + scheme: 'tms', + tiles: [ + 'http://192.168.10.187:18080/geoserver/gwc/service/tms/1.0.0/osm%3Aosm_admin@EPSG%3A900913@pbf/{z}/{x}/{y}.pbf', + ], + }, + }, + sprite: 'mapbox://sprites/mapbox/streets-v8', + glyphs: 'mapbox://fonts/mapbox/{fontstack}/{range}.pbf', + layers: [ + { + id: 'background', + type: 'background', + paint: { + 'background-color': '#ffffff', + }, + interactive: true, + }, + { + id: 'traffic', + type: 'line', + source: 'os', + 'source-layer': 'traffic3857', + layout: { + 'line-join': 'round', + 'line-cap': 'round', + }, + paint: { + 'line-color': '#C1FFC1', + 'line-width': 2, + }, + interactive: true, + }, + { + id: 'hydro', + type: 'line', + source: 'os', + 'source-layer': 'hydro3857', + layout: { + 'line-join': 'round', + 'line-cap': 'round', + }, + paint: { + 'line-color': '#3031ff', + 'line-width': 1, + 'line-dasharray': [1.5, 3], + }, + }, + ], + } + const map = new maplibregl.Map({ + container: 'place-earth', // container id + // style: 'https://demotiles.maplibre.org/style.json', // style URL + style: '/style.json', // style URL + center: [120.85, 23.86], // starting position [lng, lat] + zoom: 7, + }) + + map.on('click', e => { + const features = map.queryRenderedFeatures(e.point) + + // Limit the number of properties we're displaying for + // legibility and performance + const displayProperties = [ + 'type', + 'properties', + 'id', + 'layer', + 'source', + 'sourceLayer', + 'state', + ] + + const displayFeatures = features.map(feat => { + console.log(feat) + // const displayFeat = {} + // displayProperties.forEach(prop => { + // displayFeat[prop] = feat[prop] + // }) + // return displayFeat + }) + + // console.log(displayFeatures) + // document.getElementById('features').innerHTML = JSON.stringify( + // displayFeatures, + // null, + // 2 + // ) + }) + // initViewer() + + // let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas) + + // handler.setInputAction(async function (event) { + // const pickRay = viewer.camera.getPickRay(event.position) + + // const cartesian = viewer.scene.pickPosition(event.position) + // if (Cesium.defined(cartesian)) { + // const cartographic = Cesium.Cartographic.fromCartesian(cartesian) + // const longitude = Cesium.Math.toDegrees(cartographic.longitude) + // const latitude = Cesium.Math.toDegrees(cartographic.latitude) + + // const results = new Cesium.CartographicGeocoderService().geocode( + // `${longitude} ${latitude}` + // ) + // console.log(results) + + // if (results && results.length > 0) { + // console.log('Picked Name:', results[0].displayName) + // } + // } + // }, Cesium.ScreenSpaceEventType.LEFT_CLICK) + }) + + return () => ( +
+
+
+ addPlaceName()}> + 添加地名 + +
+ + {showPlace.value && ( +
+ + + + + + + + + + + + + + + 坐标拾取 + + + +
+ { + showPlace.value = false + }} + > + 保存 + + { + showPlace.value = false + }} + > + 删除 + + { + showPlace.value = false + }} + > + 取消 + +
+
+ )} +
+ ) + }, +}) diff --git a/src/views/Satellite/components/SatDetail.jsx b/src/views/Satellite/components/SatDetail.jsx index 1590ff0db..673415255 100644 --- a/src/views/Satellite/components/SatDetail.jsx +++ b/src/views/Satellite/components/SatDetail.jsx @@ -1,91 +1,20 @@ import { useModal } from '@/views/Content/hooks/modal' -import { NDataTable, NSelect, NInputNumber, NSwitch } from 'naive-ui' - +import { NDataTable, NButton, NSelect, NInputNumber, NSwitch } from 'naive-ui' +import Detection from '@/views/Payload/Detection.jsx' +import Communication from '@/views/Payload/Communication.jsx' const { openDetailsModal } = useModal() -const detectingLoadColumns = [ - // { - // title: '载荷类型', - // key: 'type', - // render(row) { - // return ( - // - // ) - // }, - // }, - { - title: '开合角', - key: 'angle', - width: 120, - render(row) { - return ( - - ) - }, - }, - // { - // title: '水平半角', - // key: 'xHalfAngle', - // width: 120, - // render(row) { - // return ( - // - // ) - // }, - // }, - // { - // title: '垂直半角', - // key: 'yHalfAngle', - // width: 120, - // render(row) { - // return ( - // - // ) - // }, - // }, - { - title: '是否开启', - key: 'status', - render(row) { - return - }, - }, -] - -const data = ref([ - { - id: 3, - angle: 30, - // xHalfAngle: 20, - // yHalfAngle: 25, - // type: '电子', - status: true, - }, -]) - export function showDetailsSatellite(option) { + const detectingPayload = ref([ + { + id: 3, + angle: 30, + // xHalfAngle: 20, + // yHalfAngle: 25, + // type: '电子', + status: true, + }, + ]) openDetailsModal({ titleString: '' + option.name + ' 详情', contentSlot: () => ( @@ -103,17 +32,14 @@ export function showDetailsSatellite(option) {
探测载荷
- row.id} - columns={detectingLoadColumns} - data={data.value} - /> -
通信载荷
- {/* row.id} - columns={detectingLoadColumns} - data={data.value} - /> */} + +
+
通信载荷
+ + 添加 + +
+
), })