diff --git a/bun.lock b/bun.lock
index 1e9b887..343f7cf 100644
--- a/bun.lock
+++ b/bun.lock
@@ -13,6 +13,8 @@
"@capacitor/core": "^7.3.0",
"@diffusionstudio/vits-web": "^1.0.3",
"@eslint/js": "^9.29.0",
+ "@tauri-apps/plugin-fs": "~2",
+ "@tauri-apps/plugin-upload": "~2",
"@types/sql.js": "^1.4.9",
"buffer": "^6.0.3",
"eslint": "^9.29.0",
@@ -21,6 +23,7 @@
"libsodium-wrappers": "^0.7.15",
"opening_hours": "^3.8.0",
"pako": "^2.1.0",
+ "pmtiles": "^4.3.0",
"sql.js": "^1.13.0",
"svelte-maplibre-gl": "^0.1.8",
"tauri-plugin-keep-screen-on-api": "^0.1.4",
@@ -381,6 +384,10 @@
"@tauri-apps/cli-win32-x64-msvc": ["@tauri-apps/cli-win32-x64-msvc@2.7.1", "", { "os": "win32", "cpu": "x64" }, "sha512-D7Q9kDObutuirCNLxYQ7KAg2Xxg99AjcdYz/KuMw5HvyEPbkC9Q7JL0vOrQOrHEHxIQ2lYzFOZvKKoC2yyqXcg=="],
+ "@tauri-apps/plugin-fs": ["@tauri-apps/plugin-fs@2.4.1", "", { "dependencies": { "@tauri-apps/api": "^2.6.0" } }, "sha512-vJlKZVGF3UAFGoIEVT6Oq5L4HGDCD78WmA4uhzitToqYiBKWAvZR61M6zAyQzHqLs0ADemkE4RSy/5sCmZm6ZQ=="],
+
+ "@tauri-apps/plugin-upload": ["@tauri-apps/plugin-upload@2.3.1", "", { "dependencies": { "@tauri-apps/api": "^2.6.0" } }, "sha512-nqaMbmn78vdoFf/tiS8XtbEJ/S5MRUMzfFRZw+t49JKtXDPXUUsG3CYai9mGDpZQe5PW8zvfXHKto9eLj03/lg=="],
+
"@tsconfig/svelte": ["@tsconfig/svelte@5.0.4", "", {}, "sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q=="],
"@types/emscripten": ["@types/emscripten@1.40.1", "", {}, "sha512-sr53lnYkQNhjHNN0oJDdUm5564biioI5DuOpycufDVK7D3y+GR3oUswe2rlwY1nPNyusHbrJ9WoTyIHl4/Bpwg=="],
diff --git a/index.html b/index.html
index be6a39c..64a4031 100644
--- a/index.html
+++ b/index.html
@@ -3,7 +3,7 @@
-
+
TrafficCue
diff --git a/package.json b/package.json
index 22daaf8..5f9c3c5 100644
--- a/package.json
+++ b/package.json
@@ -46,6 +46,8 @@
"@capacitor/core": "^7.3.0",
"@diffusionstudio/vits-web": "^1.0.3",
"@eslint/js": "^9.29.0",
+ "@tauri-apps/plugin-fs": "~2",
+ "@tauri-apps/plugin-upload": "~2",
"@types/sql.js": "^1.4.9",
"buffer": "^6.0.3",
"eslint": "^9.29.0",
@@ -54,6 +56,7 @@
"libsodium-wrappers": "^0.7.15",
"opening_hours": "^3.8.0",
"pako": "^2.1.0",
+ "pmtiles": "^4.3.0",
"sql.js": "^1.13.0",
"svelte-maplibre-gl": "^0.1.8",
"tauri-plugin-keep-screen-on-api": "^0.1.4",
diff --git a/public/style.json b/public/style.json
index 5b2d844..5a805c6 100644
--- a/public/style.json
+++ b/public/style.json
@@ -1,3996 +1,8 @@
{
"version": 8,
"sources": {
- "ne2_shaded": {
- "maxzoom": 6,
- "tileSize": 256,
- "tiles": [
- "https://tiles.openfreemap.org/natural_earth/ne2sr/{z}/{x}/{y}.png"
- ],
- "type": "raster"
- },
- "openmaptiles": {
- "type": "vector",
- "tiles": ["tiles://planet/{z}/{x}/{y}"],
- "maxzoom": 14,
- "vector_layers": [
- {
- "id": "aerodrome_label",
- "fields": {
- "class": "String",
- "ele": "Number",
- "ele_ft": "Number",
- "iata": "String",
- "icao": "String",
- "name": "String",
- "name:am": "String",
- "name:ar": "String",
- "name:az": "String",
- "name:be": "String",
- "name:bg": "String",
- "name:bn": "String",
- "name:br": "String",
- "name:bs": "String",
- "name:ca": "String",
- "name:co": "String",
- "name:cs": "String",
- "name:cy": "String",
- "name:da": "String",
- "name:de": "String",
- "name:el": "String",
- "name:en": "String",
- "name:eo": "String",
- "name:es": "String",
- "name:et": "String",
- "name:eu": "String",
- "name:fa": "String",
- "name:fi": "String",
- "name:fr": "String",
- "name:fy": "String",
- "name:ga": "String",
- "name:gd": "String",
- "name:he": "String",
- "name:hi": "String",
- "name:hr": "String",
- "name:hu": "String",
- "name:hy": "String",
- "name:id": "String",
- "name:is": "String",
- "name:it": "String",
- "name:ja": "String",
- "name:ja-Hira": "String",
- "name:ja-Latn": "String",
- "name:ja_kana": "String",
- "name:ja_rm": "String",
- "name:ka": "String",
- "name:kk": "String",
- "name:kn": "String",
- "name:ko": "String",
- "name:ko-Latn": "String",
- "name:ku": "String",
- "name:la": "String",
- "name:latin": "String",
- "name:lb": "String",
- "name:lt": "String",
- "name:lv": "String",
- "name:mk": "String",
- "name:ml": "String",
- "name:mt": "String",
- "name:nl": "String",
- "name:no": "String",
- "name:nonlatin": "String",
- "name:oc": "String",
- "name:pa": "String",
- "name:pl": "String",
- "name:pnb": "String",
- "name:pt": "String",
- "name:rm": "String",
- "name:ro": "String",
- "name:ru": "String",
- "name:sk": "String",
- "name:sl": "String",
- "name:sq": "String",
- "name:sr": "String",
- "name:sr-Latn": "String",
- "name:sv": "String",
- "name:ta": "String",
- "name:te": "String",
- "name:th": "String",
- "name:tr": "String",
- "name:uk": "String",
- "name:ur": "String",
- "name:vi": "String",
- "name:zh": "String",
- "name:zh-Hans": "String",
- "name:zh-Hant": "String",
- "name_de": "String",
- "name_en": "String",
- "name_int": "String"
- },
- "minzoom": 8,
- "maxzoom": 14
- },
- {
- "id": "aeroway",
- "fields": { "class": "String", "ref": "String" },
- "minzoom": 10,
- "maxzoom": 14
- },
- {
- "id": "boundary",
- "fields": {
- "adm0_l": "String",
- "adm0_r": "String",
- "admin_level": "Number",
- "claimed_by": "String",
- "class": "String",
- "disputed": "Number",
- "disputed_name": "String",
- "maritime": "Number",
- "name": "String",
- "name:ar": "String",
- "name:az": "String",
- "name:be": "String",
- "name:bg": "String",
- "name:bn": "String",
- "name:br": "String",
- "name:bs": "String",
- "name:ca": "String",
- "name:co": "String",
- "name:cs": "String",
- "name:cy": "String",
- "name:da": "String",
- "name:de": "String",
- "name:el": "String",
- "name:en": "String",
- "name:eo": "String",
- "name:es": "String",
- "name:et": "String",
- "name:eu": "String",
- "name:fa": "String",
- "name:fi": "String",
- "name:fr": "String",
- "name:fy": "String",
- "name:ga": "String",
- "name:gd": "String",
- "name:he": "String",
- "name:hi": "String",
- "name:hr": "String",
- "name:hu": "String",
- "name:hy": "String",
- "name:id": "String",
- "name:is": "String",
- "name:it": "String",
- "name:ja": "String",
- "name:ka": "String",
- "name:kk": "String",
- "name:ko": "String",
- "name:ku": "String",
- "name:la": "String",
- "name:latin": "String",
- "name:lb": "String",
- "name:lt": "String",
- "name:lv": "String",
- "name:mk": "String",
- "name:ml": "String",
- "name:mt": "String",
- "name:nl": "String",
- "name:nonlatin": "String",
- "name:oc": "String",
- "name:pl": "String",
- "name:pt": "String",
- "name:rm": "String",
- "name:ro": "String",
- "name:ru": "String",
- "name:sk": "String",
- "name:sl": "String",
- "name:sq": "String",
- "name:sr": "String",
- "name:sv": "String",
- "name:ta": "String",
- "name:th": "String",
- "name:tr": "String",
- "name:uk": "String",
- "name:ur": "String",
- "name:vi": "String",
- "name:zh": "String",
- "name_de": "String",
- "name_en": "String",
- "name_int": "String"
- },
- "minzoom": 0,
- "maxzoom": 14
- },
- {
- "id": "building",
- "fields": {
- "colour": "String",
- "hide_3d": "Boolean",
- "render_height": "Number",
- "render_min_height": "Number"
- },
- "minzoom": 13,
- "maxzoom": 14
- },
- {
- "id": "housenumber",
- "fields": { "housenumber": "String" },
- "minzoom": 14,
- "maxzoom": 14
- },
- {
- "id": "landcover",
- "fields": { "class": "String", "subclass": "String" },
- "minzoom": 0,
- "maxzoom": 14
- },
- {
- "id": "landuse",
- "fields": { "class": "String" },
- "minzoom": 4,
- "maxzoom": 14
- },
- {
- "id": "mountain_peak",
- "fields": {
- "class": "String",
- "customary_ft": "Number",
- "ele": "Number",
- "ele_ft": "Number",
- "name": "String",
- "name:am": "String",
- "name:ar": "String",
- "name:az": "String",
- "name:be": "String",
- "name:bg": "String",
- "name:bn": "String",
- "name:br": "String",
- "name:bs": "String",
- "name:ca": "String",
- "name:co": "String",
- "name:cs": "String",
- "name:cy": "String",
- "name:da": "String",
- "name:de": "String",
- "name:el": "String",
- "name:en": "String",
- "name:eo": "String",
- "name:es": "String",
- "name:et": "String",
- "name:eu": "String",
- "name:fa": "String",
- "name:fi": "String",
- "name:fr": "String",
- "name:fy": "String",
- "name:ga": "String",
- "name:gd": "String",
- "name:he": "String",
- "name:hi": "String",
- "name:hr": "String",
- "name:hu": "String",
- "name:hy": "String",
- "name:id": "String",
- "name:is": "String",
- "name:it": "String",
- "name:ja": "String",
- "name:ja-Hira": "String",
- "name:ja-Latn": "String",
- "name:ja_kana": "String",
- "name:ja_rm": "String",
- "name:ka": "String",
- "name:kk": "String",
- "name:kn": "String",
- "name:ko": "String",
- "name:ko-Latn": "String",
- "name:ku": "String",
- "name:la": "String",
- "name:latin": "String",
- "name:lb": "String",
- "name:lt": "String",
- "name:lv": "String",
- "name:mk": "String",
- "name:ml": "String",
- "name:mt": "String",
- "name:nl": "String",
- "name:no": "String",
- "name:nonlatin": "String",
- "name:oc": "String",
- "name:pa": "String",
- "name:pl": "String",
- "name:pnb": "String",
- "name:pt": "String",
- "name:rm": "String",
- "name:ro": "String",
- "name:ru": "String",
- "name:sk": "String",
- "name:sl": "String",
- "name:sq": "String",
- "name:sr": "String",
- "name:sr-Latn": "String",
- "name:sv": "String",
- "name:ta": "String",
- "name:te": "String",
- "name:th": "String",
- "name:tr": "String",
- "name:uk": "String",
- "name:ur": "String",
- "name:vi": "String",
- "name:zh": "String",
- "name:zh-Hans": "String",
- "name:zh-Hant": "String",
- "name_de": "String",
- "name_en": "String",
- "name_int": "String",
- "rank": "Number"
- },
- "minzoom": 7,
- "maxzoom": 14
- },
- {
- "id": "park",
- "fields": {
- "class": "String",
- "name": "String",
- "name:am": "String",
- "name:ar": "String",
- "name:az": "String",
- "name:be": "String",
- "name:bg": "String",
- "name:bn": "String",
- "name:br": "String",
- "name:bs": "String",
- "name:ca": "String",
- "name:co": "String",
- "name:cs": "String",
- "name:cy": "String",
- "name:da": "String",
- "name:de": "String",
- "name:el": "String",
- "name:en": "String",
- "name:eo": "String",
- "name:es": "String",
- "name:et": "String",
- "name:eu": "String",
- "name:fa": "String",
- "name:fi": "String",
- "name:fr": "String",
- "name:fy": "String",
- "name:ga": "String",
- "name:gd": "String",
- "name:he": "String",
- "name:hi": "String",
- "name:hr": "String",
- "name:hu": "String",
- "name:hy": "String",
- "name:id": "String",
- "name:is": "String",
- "name:it": "String",
- "name:ja": "String",
- "name:ja-Hira": "String",
- "name:ja-Latn": "String",
- "name:ja_kana": "String",
- "name:ja_rm": "String",
- "name:ka": "String",
- "name:kk": "String",
- "name:kn": "String",
- "name:ko": "String",
- "name:ko-Latn": "String",
- "name:ku": "String",
- "name:la": "String",
- "name:latin": "String",
- "name:lb": "String",
- "name:lt": "String",
- "name:lv": "String",
- "name:mk": "String",
- "name:ml": "String",
- "name:mt": "String",
- "name:nl": "String",
- "name:no": "String",
- "name:nonlatin": "String",
- "name:oc": "String",
- "name:pa": "String",
- "name:pl": "String",
- "name:pnb": "String",
- "name:pt": "String",
- "name:rm": "String",
- "name:ro": "String",
- "name:ru": "String",
- "name:sk": "String",
- "name:sl": "String",
- "name:sq": "String",
- "name:sr": "String",
- "name:sr-Latn": "String",
- "name:sv": "String",
- "name:ta": "String",
- "name:te": "String",
- "name:th": "String",
- "name:tr": "String",
- "name:uk": "String",
- "name:ur": "String",
- "name:vi": "String",
- "name:zh": "String",
- "name:zh-Hans": "String",
- "name:zh-Hant": "String",
- "name_de": "String",
- "name_en": "String",
- "name_int": "String",
- "rank": "Number"
- },
- "minzoom": 4,
- "maxzoom": 14
- },
- {
- "id": "place",
- "fields": {
- "capital": "Number",
- "class": "String",
- "iso_a2": "String",
- "name": "String",
- "name:am": "String",
- "name:ar": "String",
- "name:az": "String",
- "name:be": "String",
- "name:bg": "String",
- "name:bn": "String",
- "name:br": "String",
- "name:bs": "String",
- "name:ca": "String",
- "name:co": "String",
- "name:cs": "String",
- "name:cy": "String",
- "name:da": "String",
- "name:de": "String",
- "name:el": "String",
- "name:en": "String",
- "name:eo": "String",
- "name:es": "String",
- "name:et": "String",
- "name:eu": "String",
- "name:fa": "String",
- "name:fi": "String",
- "name:fr": "String",
- "name:fy": "String",
- "name:ga": "String",
- "name:gd": "String",
- "name:he": "String",
- "name:hi": "String",
- "name:hr": "String",
- "name:hu": "String",
- "name:hy": "String",
- "name:id": "String",
- "name:is": "String",
- "name:it": "String",
- "name:ja": "String",
- "name:ja-Hira": "String",
- "name:ja-Latn": "String",
- "name:ja_kana": "String",
- "name:ja_rm": "String",
- "name:ka": "String",
- "name:kk": "String",
- "name:kn": "String",
- "name:ko": "String",
- "name:ko-Latn": "String",
- "name:ku": "String",
- "name:la": "String",
- "name:latin": "String",
- "name:lb": "String",
- "name:lt": "String",
- "name:lv": "String",
- "name:mk": "String",
- "name:ml": "String",
- "name:mt": "String",
- "name:nl": "String",
- "name:no": "String",
- "name:nonlatin": "String",
- "name:oc": "String",
- "name:pa": "String",
- "name:pl": "String",
- "name:pnb": "String",
- "name:pt": "String",
- "name:rm": "String",
- "name:ro": "String",
- "name:ru": "String",
- "name:sk": "String",
- "name:sl": "String",
- "name:sq": "String",
- "name:sr": "String",
- "name:sr-Latn": "String",
- "name:sv": "String",
- "name:ta": "String",
- "name:te": "String",
- "name:th": "String",
- "name:tr": "String",
- "name:uk": "String",
- "name:ur": "String",
- "name:vi": "String",
- "name:zh": "String",
- "name:zh-Hans": "String",
- "name:zh-Hant": "String",
- "name_de": "String",
- "name_en": "String",
- "name_int": "String",
- "rank": "Number"
- },
- "minzoom": 0,
- "maxzoom": 14
- },
- {
- "id": "poi",
- "fields": {
- "agg_stop": "Number",
- "class": "String",
- "indoor": "Number",
- "layer": "Number",
- "level": "Number",
- "name": "String",
- "name:am": "String",
- "name:ar": "String",
- "name:az": "String",
- "name:be": "String",
- "name:bg": "String",
- "name:bn": "String",
- "name:br": "String",
- "name:bs": "String",
- "name:ca": "String",
- "name:co": "String",
- "name:cs": "String",
- "name:cy": "String",
- "name:da": "String",
- "name:de": "String",
- "name:el": "String",
- "name:en": "String",
- "name:eo": "String",
- "name:es": "String",
- "name:et": "String",
- "name:eu": "String",
- "name:fa": "String",
- "name:fi": "String",
- "name:fr": "String",
- "name:fy": "String",
- "name:ga": "String",
- "name:gd": "String",
- "name:he": "String",
- "name:hi": "String",
- "name:hr": "String",
- "name:hu": "String",
- "name:hy": "String",
- "name:id": "String",
- "name:is": "String",
- "name:it": "String",
- "name:ja": "String",
- "name:ja-Hira": "String",
- "name:ja-Latn": "String",
- "name:ja_kana": "String",
- "name:ja_rm": "String",
- "name:ka": "String",
- "name:kk": "String",
- "name:kn": "String",
- "name:ko": "String",
- "name:ko-Latn": "String",
- "name:ku": "String",
- "name:la": "String",
- "name:latin": "String",
- "name:lb": "String",
- "name:lt": "String",
- "name:lv": "String",
- "name:mk": "String",
- "name:ml": "String",
- "name:mt": "String",
- "name:nl": "String",
- "name:no": "String",
- "name:nonlatin": "String",
- "name:oc": "String",
- "name:pa": "String",
- "name:pl": "String",
- "name:pnb": "String",
- "name:pt": "String",
- "name:rm": "String",
- "name:ro": "String",
- "name:ru": "String",
- "name:sk": "String",
- "name:sl": "String",
- "name:sq": "String",
- "name:sr": "String",
- "name:sr-Latn": "String",
- "name:sv": "String",
- "name:ta": "String",
- "name:te": "String",
- "name:th": "String",
- "name:tr": "String",
- "name:uk": "String",
- "name:ur": "String",
- "name:vi": "String",
- "name:zh": "String",
- "name:zh-Hans": "String",
- "name:zh-Hant": "String",
- "name_de": "String",
- "name_en": "String",
- "name_int": "String",
- "rank": "Number",
- "subclass": "String"
- },
- "minzoom": 11,
- "maxzoom": 14
- },
- {
- "id": "transportation",
- "fields": {
- "access": "String",
- "bicycle": "String",
- "brunnel": "String",
- "class": "String",
- "expressway": "Number",
- "foot": "String",
- "horse": "String",
- "indoor": "Number",
- "layer": "Number",
- "level": "Number",
- "mtb_scale": "String",
- "network": "String",
- "oneway": "Number",
- "ramp": "Number",
- "service": "String",
- "subclass": "String",
- "surface": "String",
- "toll": "Number"
- },
- "minzoom": 4,
- "maxzoom": 14
- },
- {
- "id": "transportation_name",
- "fields": {
- "class": "String",
- "indoor": "Number",
- "layer": "Number",
- "level": "Number",
- "name": "String",
- "name:am": "String",
- "name:ar": "String",
- "name:az": "String",
- "name:be": "String",
- "name:bg": "String",
- "name:bn": "String",
- "name:br": "String",
- "name:bs": "String",
- "name:ca": "String",
- "name:co": "String",
- "name:cs": "String",
- "name:cy": "String",
- "name:da": "String",
- "name:de": "String",
- "name:el": "String",
- "name:en": "String",
- "name:eo": "String",
- "name:es": "String",
- "name:et": "String",
- "name:eu": "String",
- "name:fa": "String",
- "name:fi": "String",
- "name:fr": "String",
- "name:fy": "String",
- "name:ga": "String",
- "name:gd": "String",
- "name:he": "String",
- "name:hi": "String",
- "name:hr": "String",
- "name:hu": "String",
- "name:hy": "String",
- "name:id": "String",
- "name:is": "String",
- "name:it": "String",
- "name:ja": "String",
- "name:ja-Hira": "String",
- "name:ja-Latn": "String",
- "name:ja_kana": "String",
- "name:ja_rm": "String",
- "name:ka": "String",
- "name:kk": "String",
- "name:kn": "String",
- "name:ko": "String",
- "name:ko-Latn": "String",
- "name:ku": "String",
- "name:la": "String",
- "name:latin": "String",
- "name:lb": "String",
- "name:lt": "String",
- "name:lv": "String",
- "name:mk": "String",
- "name:ml": "String",
- "name:mt": "String",
- "name:nl": "String",
- "name:no": "String",
- "name:nonlatin": "String",
- "name:oc": "String",
- "name:pa": "String",
- "name:pl": "String",
- "name:pnb": "String",
- "name:pt": "String",
- "name:rm": "String",
- "name:ro": "String",
- "name:ru": "String",
- "name:sk": "String",
- "name:sl": "String",
- "name:sq": "String",
- "name:sr": "String",
- "name:sr-Latn": "String",
- "name:sv": "String",
- "name:ta": "String",
- "name:te": "String",
- "name:th": "String",
- "name:tr": "String",
- "name:uk": "String",
- "name:ur": "String",
- "name:vi": "String",
- "name:zh": "String",
- "name:zh-Hans": "String",
- "name:zh-Hant": "String",
- "name_de": "String",
- "name_en": "String",
- "name_int": "String",
- "network": "String",
- "ref": "String",
- "ref_length": "Number",
- "route_10_colour": "String",
- "route_10_name": "String",
- "route_10_network": "String",
- "route_10_ref": "String",
- "route_11_colour": "String",
- "route_11_name": "String",
- "route_11_network": "String",
- "route_11_ref": "String",
- "route_12_colour": "String",
- "route_12_name": "String",
- "route_12_network": "String",
- "route_12_ref": "String",
- "route_13_colour": "String",
- "route_13_name": "String",
- "route_13_network": "String",
- "route_13_ref": "String",
- "route_14_colour": "String",
- "route_14_name": "String",
- "route_14_network": "String",
- "route_14_ref": "String",
- "route_15_colour": "String",
- "route_15_name": "String",
- "route_15_network": "String",
- "route_15_ref": "String",
- "route_16_colour": "String",
- "route_16_name": "String",
- "route_16_network": "String",
- "route_16_ref": "String",
- "route_17_name": "String",
- "route_17_network": "String",
- "route_17_ref": "String",
- "route_18_name": "String",
- "route_18_network": "String",
- "route_18_ref": "String",
- "route_19_name": "String",
- "route_19_network": "String",
- "route_1_colour": "String",
- "route_1_name": "String",
- "route_1_network": "String",
- "route_1_ref": "String",
- "route_20_name": "String",
- "route_20_network": "String",
- "route_21_name": "String",
- "route_21_network": "String",
- "route_2_colour": "String",
- "route_2_name": "String",
- "route_2_network": "String",
- "route_2_ref": "String",
- "route_3_colour": "String",
- "route_3_name": "String",
- "route_3_network": "String",
- "route_3_ref": "String",
- "route_4_colour": "String",
- "route_4_name": "String",
- "route_4_network": "String",
- "route_4_ref": "String",
- "route_5_colour": "String",
- "route_5_name": "String",
- "route_5_network": "String",
- "route_5_ref": "String",
- "route_6_colour": "String",
- "route_6_name": "String",
- "route_6_network": "String",
- "route_6_ref": "String",
- "route_7_colour": "String",
- "route_7_name": "String",
- "route_7_network": "String",
- "route_7_ref": "String",
- "route_8_colour": "String",
- "route_8_name": "String",
- "route_8_network": "String",
- "route_8_ref": "String",
- "route_9_colour": "String",
- "route_9_name": "String",
- "route_9_network": "String",
- "route_9_ref": "String",
- "subclass": "String"
- },
- "minzoom": 6,
- "maxzoom": 14
- },
- {
- "id": "water",
- "fields": {
- "brunnel": "String",
- "class": "String",
- "id": "Number",
- "intermittent": "Number"
- },
- "minzoom": 0,
- "maxzoom": 14
- },
- {
- "id": "water_name",
- "fields": {
- "class": "String",
- "intermittent": "Number",
- "name": "String",
- "name:am": "String",
- "name:ar": "String",
- "name:az": "String",
- "name:be": "String",
- "name:bg": "String",
- "name:bn": "String",
- "name:br": "String",
- "name:bs": "String",
- "name:ca": "String",
- "name:co": "String",
- "name:cs": "String",
- "name:cy": "String",
- "name:da": "String",
- "name:de": "String",
- "name:el": "String",
- "name:en": "String",
- "name:eo": "String",
- "name:es": "String",
- "name:et": "String",
- "name:eu": "String",
- "name:fa": "String",
- "name:fi": "String",
- "name:fr": "String",
- "name:fy": "String",
- "name:ga": "String",
- "name:gd": "String",
- "name:he": "String",
- "name:hi": "String",
- "name:hr": "String",
- "name:hu": "String",
- "name:hy": "String",
- "name:id": "String",
- "name:is": "String",
- "name:it": "String",
- "name:ja": "String",
- "name:ja-Hira": "String",
- "name:ja-Latn": "String",
- "name:ja_kana": "String",
- "name:ja_rm": "String",
- "name:ka": "String",
- "name:kk": "String",
- "name:kn": "String",
- "name:ko": "String",
- "name:ko-Latn": "String",
- "name:ku": "String",
- "name:la": "String",
- "name:latin": "String",
- "name:lb": "String",
- "name:lt": "String",
- "name:lv": "String",
- "name:mk": "String",
- "name:ml": "String",
- "name:mt": "String",
- "name:nl": "String",
- "name:no": "String",
- "name:nonlatin": "String",
- "name:oc": "String",
- "name:pa": "String",
- "name:pl": "String",
- "name:pnb": "String",
- "name:pt": "String",
- "name:rm": "String",
- "name:ro": "String",
- "name:ru": "String",
- "name:sk": "String",
- "name:sl": "String",
- "name:sq": "String",
- "name:sr": "String",
- "name:sr-Latn": "String",
- "name:sv": "String",
- "name:ta": "String",
- "name:te": "String",
- "name:th": "String",
- "name:tr": "String",
- "name:uk": "String",
- "name:ur": "String",
- "name:vi": "String",
- "name:zh": "String",
- "name:zh-Hans": "String",
- "name:zh-Hant": "String",
- "name_de": "String",
- "name_en": "String",
- "name_int": "String"
- },
- "minzoom": 0,
- "maxzoom": 14
- },
- {
- "id": "waterway",
- "fields": {
- "brunnel": "String",
- "class": "String",
- "intermittent": "Number",
- "name": "String",
- "name:am": "String",
- "name:ar": "String",
- "name:az": "String",
- "name:be": "String",
- "name:bg": "String",
- "name:bn": "String",
- "name:br": "String",
- "name:bs": "String",
- "name:ca": "String",
- "name:co": "String",
- "name:cs": "String",
- "name:cy": "String",
- "name:da": "String",
- "name:de": "String",
- "name:el": "String",
- "name:en": "String",
- "name:eo": "String",
- "name:es": "String",
- "name:et": "String",
- "name:eu": "String",
- "name:fa": "String",
- "name:fi": "String",
- "name:fr": "String",
- "name:fy": "String",
- "name:ga": "String",
- "name:gd": "String",
- "name:he": "String",
- "name:hi": "String",
- "name:hr": "String",
- "name:hu": "String",
- "name:hy": "String",
- "name:id": "String",
- "name:is": "String",
- "name:it": "String",
- "name:ja": "String",
- "name:ja-Hira": "String",
- "name:ja-Latn": "String",
- "name:ja_kana": "String",
- "name:ja_rm": "String",
- "name:ka": "String",
- "name:kk": "String",
- "name:kn": "String",
- "name:ko": "String",
- "name:ko-Latn": "String",
- "name:ku": "String",
- "name:la": "String",
- "name:latin": "String",
- "name:lb": "String",
- "name:lt": "String",
- "name:lv": "String",
- "name:mk": "String",
- "name:ml": "String",
- "name:mt": "String",
- "name:nl": "String",
- "name:no": "String",
- "name:nonlatin": "String",
- "name:oc": "String",
- "name:pa": "String",
- "name:pl": "String",
- "name:pnb": "String",
- "name:pt": "String",
- "name:rm": "String",
- "name:ro": "String",
- "name:ru": "String",
- "name:sk": "String",
- "name:sl": "String",
- "name:sq": "String",
- "name:sr": "String",
- "name:sr-Latn": "String",
- "name:sv": "String",
- "name:ta": "String",
- "name:te": "String",
- "name:th": "String",
- "name:tr": "String",
- "name:uk": "String",
- "name:ur": "String",
- "name:vi": "String",
- "name:zh": "String",
- "name:zh-Hans": "String",
- "name:zh-Hant": "String",
- "name_de": "String",
- "name_en": "String",
- "name_int": "String"
- },
- "minzoom": 3,
- "maxzoom": 14
- }
- ]
- }
},
"sprite": "https://tiles.openfreemap.org/sprites/ofm_f384/ofm",
"glyphs": "https://tiles.openfreemap.org/fonts/{fontstack}/{range}.pbf",
- "layers": [
- {
- "id": "background",
- "type": "background",
- "paint": {
- "background-color": "#f8f4f0"
- }
- },
- {
- "id": "natural_earth",
- "type": "raster",
- "source": "ne2_shaded",
- "maxzoom": 7,
- "paint": {
- "raster-opacity": [
- "interpolate",
- ["exponential", 1.5],
- ["zoom"],
- 0,
- 0.6,
- 6,
- 0.1
- ]
- }
- },
- {
- "id": "park",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "park",
- "paint": {
- "fill-color": "#d8e8c8",
- "fill-opacity": 0.7,
- "fill-outline-color": "rgba(95, 208, 100, 1)"
- }
- },
- {
- "id": "park_outline",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "park",
- "paint": {
- "line-color": "rgba(228, 241, 215, 1)",
- "line-dasharray": [1, 1.5]
- }
- },
- {
- "id": "landuse_residential",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "landuse",
- "maxzoom": 12,
- "filter": ["==", ["get", "class"], "residential"],
- "paint": {
- "fill-color": [
- "interpolate",
- ["linear"],
- ["zoom"],
- 9,
- "hsla(0,3%,85%,0.84)",
- 12,
- "hsla(35,57%,88%,0.49)"
- ]
- }
- },
- {
- "id": "landcover_wood",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "landcover",
- "filter": ["==", ["get", "class"], "wood"],
- "paint": {
- "fill-antialias": false,
- "fill-color": "hsla(98,61%,72%,0.7)",
- "fill-opacity": 0.4
- }
- },
- {
- "id": "landcover_grass",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "landcover",
- "filter": ["==", ["get", "class"], "grass"],
- "paint": {
- "fill-antialias": false,
- "fill-color": "rgba(176, 213, 154, 1)",
- "fill-opacity": 0.3
- }
- },
- {
- "id": "landcover_ice",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "landcover",
- "filter": ["==", ["get", "class"], "ice"],
- "paint": {
- "fill-antialias": false,
- "fill-color": "rgba(224, 236, 236, 1)",
- "fill-opacity": 0.8
- }
- },
- {
- "id": "landcover_wetland",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "landcover",
- "minzoom": 12,
- "filter": ["==", ["get", "class"], "wetland"],
- "paint": {
- "fill-antialias": true,
- "fill-opacity": 0.8,
- "fill-pattern": "wetland_bg_11",
- "fill-translate-anchor": "map"
- }
- },
- {
- "id": "landuse_pitch",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "landuse",
- "filter": ["==", ["get", "class"], "pitch"],
- "paint": {
- "fill-color": "#DEE3CD"
- }
- },
- {
- "id": "landuse_track",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "landuse",
- "filter": ["==", ["get", "class"], "track"],
- "paint": {
- "fill-color": "#DEE3CD"
- }
- },
- {
- "id": "landuse_cemetery",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "landuse",
- "filter": ["==", ["get", "class"], "cemetery"],
- "paint": {
- "fill-color": "hsl(75,37%,81%)"
- }
- },
- {
- "id": "landuse_hospital",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "landuse",
- "filter": ["==", ["get", "class"], "hospital"],
- "paint": {
- "fill-color": "#fde"
- }
- },
- {
- "id": "landuse_school",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "landuse",
- "filter": ["==", ["get", "class"], "school"],
- "paint": {
- "fill-color": "rgb(236,238,204)"
- }
- },
- {
- "id": "waterway_tunnel",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "waterway",
- "filter": ["==", ["get", "brunnel"], "tunnel"],
- "paint": {
- "line-color": "#a0c8f0",
- "line-dasharray": [3, 3],
- "line-gap-width": ["interpolate", ["linear"], ["zoom"], 12, 0, 20, 6],
- "line-opacity": 1,
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 8,
- 1,
- 20,
- 2
- ]
- }
- },
- {
- "id": "waterway_river",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "waterway",
- "filter": [
- "all",
- ["==", ["get", "class"], "river"],
- ["!=", ["get", "brunnel"], "tunnel"]
- ],
- "layout": {
- "line-cap": "round"
- },
- "paint": {
- "line-color": "#a0c8f0",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 11,
- 0.5,
- 20,
- 6
- ]
- }
- },
- {
- "id": "waterway_other",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "waterway",
- "filter": [
- "all",
- ["!=", ["get", "class"], "river"],
- ["!=", ["get", "brunnel"], "tunnel"]
- ],
- "layout": {
- "line-cap": "round"
- },
- "paint": {
- "line-color": "#a0c8f0",
- "line-width": [
- "interpolate",
- ["exponential", 1.3],
- ["zoom"],
- 13,
- 0.5,
- 20,
- 6
- ]
- }
- },
- {
- "id": "water",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "water",
- "filter": ["!=", ["get", "brunnel"], "tunnel"],
- "paint": {
- "fill-color": "rgb(158,189,255)"
- }
- },
- {
- "id": "landcover_sand",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "landcover",
- "filter": ["==", ["get", "class"], "sand"],
- "paint": {
- "fill-color": "rgba(247, 239, 195, 1)"
- }
- },
- {
- "id": "aeroway_fill",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "aeroway",
- "minzoom": 11,
- "filter": [
- "match",
- ["geometry-type"],
- ["MultiPolygon", "Polygon"],
- true,
- false
- ],
- "paint": {
- "fill-color": "rgba(229, 228, 224, 1)",
- "fill-opacity": 0.7
- }
- },
- {
- "id": "aeroway_runway",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "aeroway",
- "minzoom": 11,
- "filter": [
- "all",
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- ["==", ["get", "class"], "runway"]
- ],
- "paint": {
- "line-color": "#f0ede9",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 11,
- 3,
- 20,
- 16
- ]
- }
- },
- {
- "id": "aeroway_taxiway",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "aeroway",
- "minzoom": 11,
- "filter": [
- "all",
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- ["==", ["get", "class"], "taxiway"]
- ],
- "paint": {
- "line-color": "#f0ede9",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 11,
- 0.5,
- 20,
- 6
- ]
- }
- },
- {
- "id": "tunnel_motorway_link_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "motorway"],
- ["==", ["get", "ramp"], 1],
- ["==", ["get", "brunnel"], "tunnel"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-dasharray": [0.5, 0.25],
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12,
- 1,
- 13,
- 3,
- 14,
- 4,
- 20,
- 15
- ]
- }
- },
- {
- "id": "tunnel_service_track_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["match", ["get", "class"], ["service", "track"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#cfcdca",
- "line-dasharray": [0.5, 0.25],
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 15,
- 1,
- 16,
- 4,
- 20,
- 11
- ]
- }
- },
- {
- "id": "tunnel_link_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "ramp"], 1],
- ["==", ["get", "brunnel"], "tunnel"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12,
- 1,
- 13,
- 3,
- 14,
- 4,
- 20,
- 15
- ]
- }
- },
- {
- "id": "tunnel_street_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["match", ["get", "class"], ["street", "street_limited"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#cfcdca",
- "line-opacity": ["interpolate", ["linear"], ["zoom"], 12, 0, 12.5, 1],
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12,
- 0.5,
- 13,
- 1,
- 14,
- 4,
- 20,
- 15
- ]
- }
- },
- {
- "id": "tunnel_secondary_tertiary_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["match", ["get", "class"], ["secondary", "tertiary"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 8,
- 1.5,
- 20,
- 17
- ]
- }
- },
- {
- "id": "tunnel_trunk_primary_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["match", ["get", "class"], ["primary", "trunk"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0.4,
- 6,
- 0.7,
- 7,
- 1.75,
- 20,
- 22
- ]
- }
- },
- {
- "id": "tunnel_motorway_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "motorway"],
- ["!=", ["get", "ramp"], 1],
- ["==", ["get", "brunnel"], "tunnel"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-dasharray": [0.5, 0.25],
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0.4,
- 6,
- 0.7,
- 7,
- 1.75,
- 20,
- 22
- ]
- }
- },
- {
- "id": "tunnel_path_pedestrian",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- ["==", ["get", "brunnel"], "tunnel"],
- ["match", ["get", "class"], ["path", "pedestrian"], true, false]
- ],
- "paint": {
- "line-color": "hsl(0,0%,100%)",
- "line-dasharray": [1, 0.75],
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 14,
- 0.5,
- 20,
- 10
- ]
- }
- },
- {
- "id": "tunnel_motorway_link",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "motorway"],
- ["==", ["get", "ramp"], 1],
- ["==", ["get", "brunnel"], "tunnel"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fc8",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12.5,
- 0,
- 13,
- 1.5,
- 14,
- 2.5,
- 20,
- 11.5
- ]
- }
- },
- {
- "id": "tunnel_service_track",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["match", ["get", "class"], ["service", "track"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fff",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 15.5,
- 0,
- 16,
- 2,
- 20,
- 7.5
- ]
- }
- },
- {
- "id": "tunnel_link",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "ramp"], 1],
- ["==", ["get", "brunnel"], "tunnel"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fff4c6",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12.5,
- 0,
- 13,
- 1.5,
- 14,
- 2.5,
- 20,
- 11.5
- ]
- }
- },
- {
- "id": "tunnel_minor",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["match", ["get", "class"], ["minor"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fff",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 13.5,
- 0,
- 14,
- 2.5,
- 20,
- 11.5
- ]
- }
- },
- {
- "id": "tunnel_secondary_tertiary",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["match", ["get", "class"], ["secondary", "tertiary"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fff4c6",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 6.5,
- 0,
- 7,
- 0.5,
- 20,
- 10
- ]
- }
- },
- {
- "id": "tunnel_trunk_primary",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["match", ["get", "class"], ["primary", "trunk"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fff4c6",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0,
- 7,
- 1,
- 20,
- 18
- ]
- }
- },
- {
- "id": "tunnel_motorway",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "motorway"],
- ["!=", ["get", "ramp"], 1],
- ["==", ["get", "brunnel"], "tunnel"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#ffdaa6",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0,
- 7,
- 1,
- 20,
- 18
- ]
- }
- },
- {
- "id": "tunnel_major_rail",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["match", ["get", "class"], ["rail"], true, false]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14,
- 0.4,
- 15,
- 0.75,
- 20,
- 2
- ]
- }
- },
- {
- "id": "tunnel_major_rail_hatching",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["==", ["get", "class"], "rail"]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-dasharray": [0.2, 8],
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14.5,
- 0,
- 15,
- 3,
- 20,
- 8
- ]
- }
- },
- {
- "id": "tunnel_transit_rail",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["match", ["get", "class"], ["transit"], true, false]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14,
- 0.4,
- 15,
- 0.75,
- 20,
- 2
- ]
- }
- },
- {
- "id": "tunnel_transit_rail_hatching",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "tunnel"],
- ["==", ["get", "class"], "transit"]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-dasharray": [0.2, 8],
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14.5,
- 0,
- 15,
- 3,
- 20,
- 8
- ]
- }
- },
- {
- "id": "road_area_pattern",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "match",
- ["geometry-type"],
- ["MultiPolygon", "Polygon"],
- true,
- false
- ],
- "paint": {
- "fill-pattern": "pedestrian_polygon"
- }
- },
- {
- "id": "road_motorway_link_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "minzoom": 12,
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["==", ["get", "class"], "motorway"],
- ["==", ["get", "ramp"], 1]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12,
- 1,
- 13,
- 3,
- 14,
- 4,
- 20,
- 15
- ]
- }
- },
- {
- "id": "road_service_track_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["match", ["get", "class"], ["service", "track"], true, false]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#cfcdca",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 15,
- 1,
- 16,
- 4,
- 20,
- 11
- ]
- }
- },
- {
- "id": "road_link_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "minzoom": 13,
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- [
- "match",
- ["get", "class"],
- ["motorway", "path", "pedestrian", "service", "track"],
- false,
- true
- ],
- ["==", ["get", "ramp"], 1]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12,
- 1,
- 13,
- 3,
- 14,
- 4,
- 20,
- 15
- ]
- }
- },
- {
- "id": "road_minor_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["match", ["get", "class"], ["minor"], true, false],
- ["!=", ["get", "ramp"], 1]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#cfcdca",
- "line-opacity": ["interpolate", ["linear"], ["zoom"], 12, 0, 12.5, 1],
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12,
- 0.5,
- 13,
- 1,
- 14,
- 4,
- 20,
- 20
- ]
- }
- },
- {
- "id": "road_secondary_tertiary_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["match", ["get", "class"], ["secondary", "tertiary"], true, false],
- ["!=", ["get", "ramp"], 1]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 8,
- 1.5,
- 20,
- 17
- ]
- }
- },
- {
- "id": "road_trunk_primary_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["match", ["get", "class"], ["primary", "trunk"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0.4,
- 6,
- 0.7,
- 7,
- 1.75,
- 20,
- 22
- ]
- }
- },
- {
- "id": "road_motorway_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "minzoom": 5,
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["==", ["get", "class"], "motorway"],
- ["!=", ["get", "ramp"], 1]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0.4,
- 6,
- 0.7,
- 7,
- 1.75,
- 20,
- 22
- ]
- }
- },
- {
- "id": "road_path_pedestrian",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "minzoom": 14,
- "filter": [
- "all",
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["match", ["get", "class"], ["path", "pedestrian"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "hsl(0,0%,100%)",
- "line-dasharray": [1, 0.7],
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 14,
- 1,
- 20,
- 10
- ]
- }
- },
- {
- "id": "road_motorway_link",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "minzoom": 12,
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["==", ["get", "class"], "motorway"],
- ["==", ["get", "ramp"], 1]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fc8",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12.5,
- 0,
- 13,
- 1.5,
- 14,
- 2.5,
- 20,
- 11.5
- ]
- }
- },
- {
- "id": "road_service_track",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["match", ["get", "class"], ["service", "track"], true, false]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fff",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 15.5,
- 0,
- 16,
- 2,
- 20,
- 7.5
- ]
- }
- },
- {
- "id": "road_link",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "minzoom": 13,
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["==", ["get", "ramp"], 1],
- [
- "match",
- ["get", "class"],
- ["motorway", "path", "pedestrian", "service", "track"],
- false,
- true
- ]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fea",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12.5,
- 0,
- 13,
- 1.5,
- 14,
- 2.5,
- 20,
- 11.5
- ]
- }
- },
- {
- "id": "road_minor",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["match", ["get", "class"], ["minor"], true, false]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fff",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 13.5,
- 0,
- 14,
- 2.5,
- 20,
- 18
- ]
- }
- },
- {
- "id": "road_secondary_tertiary",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["match", ["get", "class"], ["secondary", "tertiary"], true, false]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fea",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 6.5,
- 0,
- 8,
- 0.5,
- 20,
- 13
- ]
- }
- },
- {
- "id": "road_trunk_primary",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["match", ["get", "class"], ["primary", "trunk"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fea",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0,
- 7,
- 1,
- 20,
- 18
- ]
- }
- },
- {
- "id": "road_motorway",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "minzoom": 5,
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["==", ["get", "class"], "motorway"],
- ["!=", ["get", "ramp"], 1]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": [
- "interpolate",
- ["linear"],
- ["zoom"],
- 5,
- "hsl(26,87%,62%)",
- 6,
- "#fc8"
- ],
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0,
- 7,
- 1,
- 20,
- 18
- ]
- }
- },
- {
- "id": "road_major_rail",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["==", ["get", "class"], "rail"]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14,
- 0.4,
- 15,
- 0.75,
- 20,
- 2
- ]
- }
- },
- {
- "id": "road_major_rail_hatching",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["==", ["get", "class"], "rail"]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-dasharray": [0.2, 8],
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14.5,
- 0,
- 15,
- 3,
- 20,
- 8
- ]
- }
- },
- {
- "id": "road_transit_rail",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["==", ["get", "class"], "transit"]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14,
- 0.4,
- 15,
- 0.75,
- 20,
- 2
- ]
- }
- },
- {
- "id": "road_transit_rail_hatching",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true],
- ["==", ["get", "class"], "transit"]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-dasharray": [0.2, 8],
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14.5,
- 0,
- 15,
- 3,
- 20,
- 8
- ]
- }
- },
- {
- "id": "road_one_way_arrow",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "minzoom": 16,
- "filter": ["==", ["get", "oneway"], 1],
- "layout": {
- "icon-image": "arrow",
- "symbol-placement": "line"
- }
- },
- {
- "id": "road_one_way_arrow_opposite",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "minzoom": 16,
- "filter": ["==", ["get", "oneway"], -1],
- "layout": {
- "icon-image": "arrow",
- "icon-rotate": 180,
- "symbol-placement": "line"
- }
- },
- {
- "id": "bridge_motorway_link_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "motorway"],
- ["==", ["get", "ramp"], 1],
- ["==", ["get", "brunnel"], "bridge"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12,
- 1,
- 13,
- 3,
- 14,
- 4,
- 20,
- 15
- ]
- }
- },
- {
- "id": "bridge_service_track_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "bridge"],
- ["match", ["get", "class"], ["service", "track"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#cfcdca",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 15,
- 1,
- 16,
- 4,
- 20,
- 11
- ]
- }
- },
- {
- "id": "bridge_link_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "link"],
- ["==", ["get", "brunnel"], "bridge"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12,
- 1,
- 13,
- 3,
- 14,
- 4,
- 20,
- 15
- ]
- }
- },
- {
- "id": "bridge_street_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "bridge"],
- ["match", ["get", "class"], ["street", "street_limited"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "hsl(36,6%,74%)",
- "line-opacity": ["interpolate", ["linear"], ["zoom"], 12, 0, 12.5, 1],
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12,
- 0.5,
- 13,
- 1,
- 14,
- 4,
- 20,
- 25
- ]
- }
- },
- {
- "id": "bridge_path_pedestrian_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- ["==", ["get", "brunnel"], "bridge"],
- ["match", ["get", "class"], ["path", "pedestrian"], true, false]
- ],
- "paint": {
- "line-color": "hsl(35,6%,80%)",
- "line-dasharray": [1, 0],
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 14,
- 1.5,
- 20,
- 18
- ]
- }
- },
- {
- "id": "bridge_secondary_tertiary_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "bridge"],
- ["match", ["get", "class"], ["secondary", "tertiary"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 8,
- 1.5,
- 20,
- 17
- ]
- }
- },
- {
- "id": "bridge_trunk_primary_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "bridge"],
- ["match", ["get", "class"], ["primary", "trunk"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0.4,
- 6,
- 0.7,
- 7,
- 1.75,
- 20,
- 22
- ]
- }
- },
- {
- "id": "bridge_motorway_casing",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "motorway"],
- ["!=", ["get", "ramp"], 1],
- ["==", ["get", "brunnel"], "bridge"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#e9ac77",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0.4,
- 6,
- 0.7,
- 7,
- 1.75,
- 20,
- 22
- ]
- }
- },
- {
- "id": "bridge_path_pedestrian",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- ["==", ["get", "brunnel"], "bridge"],
- ["match", ["get", "class"], ["path", "pedestrian"], true, false]
- ],
- "paint": {
- "line-color": "hsl(0,0%,100%)",
- "line-dasharray": [1, 0.3],
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 14,
- 0.5,
- 20,
- 10
- ]
- }
- },
- {
- "id": "bridge_motorway_link",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "motorway"],
- ["==", ["get", "ramp"], 1],
- ["==", ["get", "brunnel"], "bridge"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fc8",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12.5,
- 0,
- 13,
- 1.5,
- 14,
- 2.5,
- 20,
- 11.5
- ]
- }
- },
- {
- "id": "bridge_service_track",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "bridge"],
- ["match", ["get", "class"], ["service", "track"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fff",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 15.5,
- 0,
- 16,
- 2,
- 20,
- 7.5
- ]
- }
- },
- {
- "id": "bridge_link",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "link"],
- ["==", ["get", "brunnel"], "bridge"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fea",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 12.5,
- 0,
- 13,
- 1.5,
- 14,
- 2.5,
- 20,
- 11.5
- ]
- }
- },
- {
- "id": "bridge_street",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "bridge"],
- ["match", ["get", "class"], ["minor"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fff",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 13.5,
- 0,
- 14,
- 2.5,
- 20,
- 18
- ]
- }
- },
- {
- "id": "bridge_secondary_tertiary",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "bridge"],
- ["match", ["get", "class"], ["secondary", "tertiary"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fea",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 6.5,
- 0,
- 7,
- 0.5,
- 20,
- 10
- ]
- }
- },
- {
- "id": "bridge_trunk_primary",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "brunnel"], "bridge"],
- ["match", ["get", "class"], ["primary", "trunk"], true, false]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fea",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0,
- 7,
- 1,
- 20,
- 18
- ]
- }
- },
- {
- "id": "bridge_motorway",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "motorway"],
- ["!=", ["get", "ramp"], 1],
- ["==", ["get", "brunnel"], "bridge"]
- ],
- "layout": {
- "line-join": "round"
- },
- "paint": {
- "line-color": "#fc8",
- "line-width": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 5,
- 0,
- 7,
- 1,
- 20,
- 18
- ]
- }
- },
- {
- "id": "bridge_major_rail",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "rail"],
- ["==", ["get", "brunnel"], "bridge"]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14,
- 0.4,
- 15,
- 0.75,
- 20,
- 2
- ]
- }
- },
- {
- "id": "bridge_major_rail_hatching",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "rail"],
- ["==", ["get", "brunnel"], "bridge"]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-dasharray": [0.2, 8],
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14.5,
- 0,
- 15,
- 3,
- 20,
- 8
- ]
- }
- },
- {
- "id": "bridge_transit_rail",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "transit"],
- ["==", ["get", "brunnel"], "bridge"]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14,
- 0.4,
- 15,
- 0.75,
- 20,
- 2
- ]
- }
- },
- {
- "id": "bridge_transit_rail_hatching",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "transportation",
- "filter": [
- "all",
- ["==", ["get", "class"], "transit"],
- ["==", ["get", "brunnel"], "bridge"]
- ],
- "paint": {
- "line-color": "#bbb",
- "line-dasharray": [0.2, 8],
- "line-width": [
- "interpolate",
- ["exponential", 1.4],
- ["zoom"],
- 14.5,
- 0,
- 15,
- 3,
- 20,
- 8
- ]
- }
- },
- {
- "id": "building",
- "type": "fill",
- "source": "openmaptiles",
- "source-layer": "building",
- "minzoom": 13,
- "maxzoom": 14,
- "paint": {
- "fill-color": "hsl(35,8%,85%)",
- "fill-outline-color": [
- "interpolate",
- ["linear"],
- ["zoom"],
- 13,
- "hsla(35,6%,79%,0.32)",
- 14,
- "hsl(35,6%,79%)"
- ]
- }
- },
- {
- "id": "building-3d",
- "type": "fill-extrusion",
- "source": "openmaptiles",
- "source-layer": "building",
- "minzoom": 14,
- "paint": {
- "fill-extrusion-base": ["get", "render_min_height"],
- "fill-extrusion-color": "hsl(35,8%,85%)",
- "fill-extrusion-height": ["get", "render_height"],
- "fill-extrusion-opacity": 0.8
- }
- },
- {
- "id": "boundary_3",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "boundary",
- "minzoom": 5,
- "filter": [
- "all",
- [">=", ["get", "admin_level"], 3],
- ["<=", ["get", "admin_level"], 6],
- ["!=", ["get", "maritime"], 1],
- ["!=", ["get", "disputed"], 1],
- ["!", ["has", "claimed_by"]]
- ],
- "paint": {
- "line-color": "hsl(0,0%,70%)",
- "line-dasharray": [1, 1],
- "line-width": ["interpolate", ["linear", 1], ["zoom"], 7, 1, 11, 2]
- }
- },
- {
- "id": "boundary_2",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "boundary",
- "filter": [
- "all",
- ["==", ["get", "admin_level"], 2],
- ["!=", ["get", "maritime"], 1],
- ["!=", ["get", "disputed"], 1],
- ["!", ["has", "claimed_by"]]
- ],
- "layout": {
- "line-cap": "round",
- "line-join": "round"
- },
- "paint": {
- "line-color": "hsl(248,1%,41%)",
- "line-opacity": ["interpolate", ["linear"], ["zoom"], 0, 0.4, 4, 1],
- "line-width": ["interpolate", ["linear"], ["zoom"], 3, 1, 5, 1.2, 12, 3]
- }
- },
- {
- "id": "boundary_disputed",
- "type": "line",
- "source": "openmaptiles",
- "source-layer": "boundary",
- "filter": [
- "all",
- ["!=", ["get", "maritime"], 1],
- ["==", ["get", "disputed"], 1]
- ],
- "paint": {
- "line-color": "hsl(248,1%,41%)",
- "line-dasharray": [1, 2],
- "line-width": ["interpolate", ["linear"], ["zoom"], 3, 1, 5, 1.2, 12, 3]
- }
- },
- {
- "id": "waterway_line_label",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "waterway",
- "minzoom": 10,
- "filter": [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- "layout": {
- "symbol-placement": "line",
- "symbol-spacing": 350,
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], " ", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Italic"],
- "text-letter-spacing": 0.2,
- "text-max-width": 5,
- "text-size": 14
- },
- "paint": {
- "text-color": "#74aee9",
- "text-halo-color": "rgba(255,255,255,0.7)",
- "text-halo-width": 1.5
- }
- },
- {
- "id": "water_name_point_label",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "water_name",
- "filter": [
- "match",
- ["geometry-type"],
- ["MultiPoint", "Point"],
- true,
- false
- ],
- "layout": {
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Italic"],
- "text-letter-spacing": 0.2,
- "text-max-width": 5,
- "text-size": ["interpolate", ["linear"], ["zoom"], 0, 10, 8, 14]
- },
- "paint": {
- "text-color": "#495e91",
- "text-halo-color": "rgba(255,255,255,0.7)",
- "text-halo-width": 1.5
- }
- },
- {
- "id": "water_name_line_label",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "water_name",
- "filter": [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- "layout": {
- "symbol-placement": "line",
- "symbol-spacing": 350,
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], " ", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Italic"],
- "text-letter-spacing": 0.2,
- "text-max-width": 5,
- "text-size": 14
- },
- "paint": {
- "text-color": "#495e91",
- "text-halo-color": "rgba(255,255,255,0.7)",
- "text-halo-width": 1.5
- }
- },
- {
- "id": "poi_r20",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "poi",
- "minzoom": 17,
- "filter": [
- "all",
- ["match", ["geometry-type"], ["MultiPoint", "Point"], true, false],
- [">=", ["get", "rank"], 20]
- ],
- "layout": {
- "icon-image": [
- "match",
- ["get", "subclass"],
- ["florist", "furniture"],
- ["get", "subclass"],
- ["get", "class"]
- ],
- "text-anchor": "top",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Italic"],
- "text-max-width": 9,
- "text-offset": [0, 0.6],
- "text-size": 12
- },
- "paint": {
- "text-color": "#666",
- "text-halo-blur": 0.5,
- "text-halo-color": "#ffffff",
- "text-halo-width": 1
- }
- },
- {
- "id": "poi_r7",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "poi",
- "minzoom": 16,
- "filter": [
- "all",
- ["match", ["geometry-type"], ["MultiPoint", "Point"], true, false],
- [">=", ["get", "rank"], 7],
- ["<", ["get", "rank"], 20]
- ],
- "layout": {
- "icon-image": [
- "match",
- ["get", "subclass"],
- ["florist", "furniture"],
- ["get", "subclass"],
- ["get", "class"]
- ],
- "text-anchor": "top",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Italic"],
- "text-max-width": 9,
- "text-offset": [0, 0.6],
- "text-size": 12
- },
- "paint": {
- "text-color": "#666",
- "text-halo-blur": 0.5,
- "text-halo-color": "#ffffff",
- "text-halo-width": 1
- }
- },
- {
- "id": "poi_r1",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "poi",
- "minzoom": 15,
- "filter": [
- "all",
- ["match", ["geometry-type"], ["MultiPoint", "Point"], true, false],
- [">=", ["get", "rank"], 1],
- ["<", ["get", "rank"], 7]
- ],
- "layout": {
- "icon-image": [
- "match",
- ["get", "subclass"],
- ["florist", "furniture"],
- ["get", "subclass"],
- ["get", "class"]
- ],
- "text-anchor": "top",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Italic"],
- "text-max-width": 9,
- "text-offset": [0, 0.6],
- "text-size": 12
- },
- "paint": {
- "text-color": "#666",
- "text-halo-blur": 0.5,
- "text-halo-color": "#ffffff",
- "text-halo-width": 1
- }
- },
- {
- "id": "poi_transit",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "poi",
- "filter": [
- "match",
- ["get", "class"],
- ["airport", "bus", "rail"],
- true,
- false
- ],
- "layout": {
- "icon-image": ["to-string", ["get", "class"]],
- "icon-size": 0.7,
- "text-anchor": "left",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Italic"],
- "text-max-width": 9,
- "text-offset": [0.9, 0],
- "text-size": 12
- },
- "paint": {
- "text-color": "#2e5a80",
- "text-halo-blur": 0.5,
- "text-halo-color": "#ffffff",
- "text-halo-width": 1
- }
- },
- {
- "id": "highway-name-path",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "transportation_name",
- "minzoom": 15.5,
- "filter": ["==", ["get", "class"], "path"],
- "layout": {
- "symbol-placement": "line",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], " ", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Regular"],
- "text-rotation-alignment": "map",
- "text-size": ["interpolate", ["linear"], ["zoom"], 13, 12, 14, 13]
- },
- "paint": {
- "text-color": "hsl(30,23%,62%)",
- "text-halo-color": "#f8f4f0",
- "text-halo-width": 0.5
- }
- },
- {
- "id": "highway-name-minor",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "transportation_name",
- "minzoom": 15,
- "filter": [
- "all",
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- ["match", ["get", "class"], ["minor", "service", "track"], true, false]
- ],
- "layout": {
- "symbol-placement": "line",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], " ", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Regular"],
- "text-rotation-alignment": "map",
- "text-size": ["interpolate", ["linear"], ["zoom"], 13, 12, 14, 13]
- },
- "paint": {
- "text-color": "#666",
- "text-halo-blur": 0.5,
- "text-halo-width": 1
- }
- },
- {
- "id": "highway-name-major",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "transportation_name",
- "minzoom": 12.2,
- "filter": [
- "match",
- ["get", "class"],
- ["primary", "secondary", "tertiary", "trunk"],
- true,
- false
- ],
- "layout": {
- "symbol-placement": "line",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], " ", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Regular"],
- "text-rotation-alignment": "map",
- "text-size": ["interpolate", ["linear"], ["zoom"], 13, 12, 14, 13]
- },
- "paint": {
- "text-color": "#666",
- "text-halo-blur": 0.5,
- "text-halo-width": 1
- }
- },
- {
- "id": "highway-shield-non-us",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "transportation_name",
- "minzoom": 8,
- "filter": [
- "all",
- ["<=", ["get", "ref_length"], 6],
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- [
- "match",
- ["get", "network"],
- ["us-highway", "us-interstate", "us-state"],
- false,
- true
- ]
- ],
- "layout": {
- "icon-image": ["concat", "road_", ["get", "ref_length"]],
- "icon-rotation-alignment": "viewport",
- "icon-size": 1,
- "symbol-placement": ["step", ["zoom"], "point", 11, "line"],
- "symbol-spacing": 200,
- "text-field": ["to-string", ["get", "ref"]],
- "text-font": ["Noto Sans Regular"],
- "text-rotation-alignment": "viewport",
- "text-size": 10
- }
- },
- {
- "id": "highway-shield-us-interstate",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "transportation_name",
- "minzoom": 7,
- "filter": [
- "all",
- ["<=", ["get", "ref_length"], 6],
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- ["match", ["get", "network"], ["us-interstate"], true, false]
- ],
- "layout": {
- "icon-image": [
- "concat",
- ["get", "network"],
- "_",
- ["get", "ref_length"]
- ],
- "icon-rotation-alignment": "viewport",
- "icon-size": 1,
- "symbol-placement": ["step", ["zoom"], "point", 7, "line", 8, "line"],
- "symbol-spacing": 200,
- "text-field": ["to-string", ["get", "ref"]],
- "text-font": ["Noto Sans Regular"],
- "text-rotation-alignment": "viewport",
- "text-size": 10
- }
- },
- {
- "id": "road_shield_us",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "transportation_name",
- "minzoom": 9,
- "filter": [
- "all",
- ["<=", ["get", "ref_length"], 6],
- [
- "match",
- ["geometry-type"],
- ["LineString", "MultiLineString"],
- true,
- false
- ],
- ["match", ["get", "network"], ["us-highway", "us-state"], true, false]
- ],
- "layout": {
- "icon-image": [
- "concat",
- ["get", "network"],
- "_",
- ["get", "ref_length"]
- ],
- "icon-rotation-alignment": "viewport",
- "icon-size": 1,
- "symbol-placement": ["step", ["zoom"], "point", 11, "line"],
- "symbol-spacing": 200,
- "text-field": ["to-string", ["get", "ref"]],
- "text-font": ["Noto Sans Regular"],
- "text-rotation-alignment": "viewport",
- "text-size": 10
- }
- },
- {
- "id": "airport",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "aerodrome_label",
- "minzoom": 10,
- "filter": ["all", ["has", "iata"]],
- "layout": {
- "icon-image": "airport_11",
- "icon-size": 1,
- "text-anchor": "top",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Regular"],
- "text-max-width": 9,
- "text-offset": [0, 0.6],
- "text-optional": true,
- "text-padding": 2,
- "text-size": 12
- },
- "paint": {
- "text-color": "#666",
- "text-halo-blur": 0.5,
- "text-halo-color": "#ffffff",
- "text-halo-width": 1
- }
- },
- {
- "id": "label_other",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "place",
- "minzoom": 8,
- "filter": [
- "match",
- ["get", "class"],
- ["city", "continent", "country", "state", "town", "village"],
- false,
- true
- ],
- "layout": {
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Italic"],
- "text-letter-spacing": 0.1,
- "text-max-width": 9,
- "text-size": ["interpolate", ["linear"], ["zoom"], 8, 9, 12, 10],
- "text-transform": "uppercase"
- },
- "paint": {
- "text-color": "#333",
- "text-halo-blur": 1,
- "text-halo-color": "#fff",
- "text-halo-width": 1
- }
- },
- {
- "id": "label_village",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "place",
- "minzoom": 9,
- "filter": ["==", ["get", "class"], "village"],
- "layout": {
- "icon-allow-overlap": true,
- "icon-image": ["step", ["zoom"], "circle_11_black", 10, ""],
- "icon-optional": false,
- "icon-size": 0.2,
- "text-anchor": "bottom",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Regular"],
- "text-max-width": 8,
- "text-size": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 7,
- 10,
- 11,
- 12
- ]
- },
- "paint": {
- "text-color": "#000",
- "text-halo-blur": 1,
- "text-halo-color": "#fff",
- "text-halo-width": 1
- }
- },
- {
- "id": "label_town",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "place",
- "minzoom": 6,
- "filter": ["==", ["get", "class"], "town"],
- "layout": {
- "icon-allow-overlap": true,
- "icon-image": ["step", ["zoom"], "circle_11_black", 10, ""],
- "icon-optional": false,
- "icon-size": 0.2,
- "text-anchor": "bottom",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Regular"],
- "text-max-width": 8,
- "text-size": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 7,
- 12,
- 11,
- 14
- ]
- },
- "paint": {
- "text-color": "#000",
- "text-halo-blur": 1,
- "text-halo-color": "#fff",
- "text-halo-width": 1
- }
- },
- {
- "id": "label_state",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "place",
- "minzoom": 5,
- "maxzoom": 8,
- "filter": ["==", ["get", "class"], "state"],
- "layout": {
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Italic"],
- "text-letter-spacing": 0.2,
- "text-max-width": 9,
- "text-size": ["interpolate", ["linear"], ["zoom"], 5, 10, 8, 14],
- "text-transform": "uppercase"
- },
- "paint": {
- "text-color": "#333",
- "text-halo-blur": 1,
- "text-halo-color": "#fff",
- "text-halo-width": 1
- }
- },
- {
- "id": "label_city",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "place",
- "minzoom": 3,
- "filter": [
- "all",
- ["==", ["get", "class"], "city"],
- ["!=", ["get", "capital"], 2]
- ],
- "layout": {
- "icon-allow-overlap": true,
- "icon-image": ["step", ["zoom"], "circle_11_black", 9, ""],
- "icon-optional": false,
- "icon-size": 0.4,
- "text-anchor": "bottom",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Regular"],
- "text-max-width": 8,
- "text-offset": [0, -0.1],
- "text-size": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 4,
- 11,
- 7,
- 13,
- 11,
- 18
- ]
- },
- "paint": {
- "text-color": "#000",
- "text-halo-blur": 1,
- "text-halo-color": "#fff",
- "text-halo-width": 1
- }
- },
- {
- "id": "label_city_capital",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "place",
- "minzoom": 3,
- "filter": [
- "all",
- ["==", ["get", "class"], "city"],
- ["==", ["get", "capital"], 2]
- ],
- "layout": {
- "icon-allow-overlap": true,
- "icon-image": ["step", ["zoom"], "circle_11_black", 9, ""],
- "icon-optional": false,
- "icon-size": 0.5,
- "text-anchor": "bottom",
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Bold"],
- "text-max-width": 8,
- "text-offset": [0, -0.2],
- "text-size": [
- "interpolate",
- ["exponential", 1.2],
- ["zoom"],
- 4,
- 12,
- 7,
- 14,
- 11,
- 20
- ]
- },
- "paint": {
- "text-color": "#000",
- "text-halo-blur": 1,
- "text-halo-color": "#fff",
- "text-halo-width": 1
- }
- },
- {
- "id": "label_country_3",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "place",
- "minzoom": 2,
- "maxzoom": 9,
- "filter": [
- "all",
- ["==", ["get", "class"], "country"],
- [">=", ["get", "rank"], 3]
- ],
- "layout": {
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Bold"],
- "text-max-width": 6.25,
- "text-size": ["interpolate", ["linear"], ["zoom"], 3, 9, 7, 17]
- },
- "paint": {
- "text-color": "#000",
- "text-halo-blur": 1,
- "text-halo-color": "#fff",
- "text-halo-width": 1
- }
- },
- {
- "id": "label_country_2",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "place",
- "maxzoom": 9,
- "filter": [
- "all",
- ["==", ["get", "class"], "country"],
- ["==", ["get", "rank"], 2]
- ],
- "layout": {
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Bold"],
- "text-max-width": 6.25,
- "text-size": ["interpolate", ["linear"], ["zoom"], 2, 9, 5, 17]
- },
- "paint": {
- "text-color": "#000",
- "text-halo-blur": 1,
- "text-halo-color": "#fff",
- "text-halo-width": 1
- }
- },
- {
- "id": "label_country_1",
- "type": "symbol",
- "source": "openmaptiles",
- "source-layer": "place",
- "maxzoom": 9,
- "filter": [
- "all",
- ["==", ["get", "class"], "country"],
- ["==", ["get", "rank"], 1]
- ],
- "layout": {
- "text-field": [
- "case",
- ["has", "name:nonlatin"],
- ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]],
- ["coalesce", ["get", "name_en"], ["get", "name"]]
- ],
- "text-font": ["Noto Sans Bold"],
- "text-max-width": 6.25,
- "text-size": ["interpolate", ["linear"], ["zoom"], 1, 9, 4, 17]
- },
- "paint": {
- "text-color": "#000",
- "text-halo-blur": 1,
- "text-halo-color": "#fff",
- "text-halo-width": 1
- }
- }
- ]
+ "layers": []
}
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index 80478b3..0964961 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -99,8 +99,10 @@ dependencies = [
"serde_json",
"tauri",
"tauri-build",
+ "tauri-plugin-fs",
"tauri-plugin-keep-screen-on",
"tauri-plugin-log",
+ "tauri-plugin-upload",
]
[[package]]
@@ -484,6 +486,16 @@ dependencies = [
"version_check",
]
+[[package]]
+name = "core-foundation"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
[[package]]
name = "core-foundation"
version = "0.10.1"
@@ -507,7 +519,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
dependencies = [
"bitflags 2.9.1",
- "core-foundation",
+ "core-foundation 0.10.1",
"core-graphics-types",
"foreign-types",
"libc",
@@ -520,7 +532,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
dependencies = [
"bitflags 2.9.1",
- "core-foundation",
+ "core-foundation 0.10.1",
"libc",
]
@@ -921,6 +933,21 @@ dependencies = [
"new_debug_unreachable",
]
+[[package]]
+name = "futures"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
[[package]]
name = "futures-channel"
version = "0.3.31"
@@ -928,6 +955,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [
"futures-core",
+ "futures-sink",
]
[[package]]
@@ -982,6 +1010,7 @@ version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [
+ "futures-channel",
"futures-core",
"futures-io",
"futures-macro",
@@ -1129,8 +1158,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
dependencies = [
"cfg-if",
+ "js-sys",
"libc",
"wasi 0.11.1+wasi-snapshot-preview1",
+ "wasm-bindgen",
]
[[package]]
@@ -1140,9 +1171,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
dependencies = [
"cfg-if",
+ "js-sys",
"libc",
"r-efi",
"wasi 0.14.2+wasi-0.2.4",
+ "wasm-bindgen",
]
[[package]]
@@ -1378,6 +1411,12 @@ dependencies = [
"pin-project-lite",
]
+[[package]]
+name = "http-range"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
+
[[package]]
name = "httparse"
version = "1.10.1"
@@ -1403,6 +1442,23 @@ dependencies = [
"want",
]
+[[package]]
+name = "hyper-rustls"
+version = "0.27.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
+dependencies = [
+ "http",
+ "hyper",
+ "hyper-util",
+ "rustls",
+ "rustls-pki-types",
+ "tokio",
+ "tokio-rustls",
+ "tower-service",
+ "webpki-roots",
+]
+
[[package]]
name = "hyper-util"
version = "0.1.16"
@@ -1421,10 +1477,12 @@ dependencies = [
"libc",
"percent-encoding",
"pin-project-lite",
- "socket2",
+ "socket2 0.6.0",
+ "system-configuration",
"tokio",
"tower-service",
"tracing",
+ "windows-registry",
]
[[package]]
@@ -1819,6 +1877,12 @@ dependencies = [
"value-bag",
]
+[[package]]
+name = "lru-slab"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
+
[[package]]
name = "mac"
version = "0.1.1"
@@ -2592,6 +2656,61 @@ dependencies = [
"memchr",
]
+[[package]]
+name = "quinn"
+version = "0.11.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8"
+dependencies = [
+ "bytes",
+ "cfg_aliases 0.2.1",
+ "pin-project-lite",
+ "quinn-proto",
+ "quinn-udp",
+ "rustc-hash",
+ "rustls",
+ "socket2 0.5.10",
+ "thiserror 2.0.12",
+ "tokio",
+ "tracing",
+ "web-time",
+]
+
+[[package]]
+name = "quinn-proto"
+version = "0.11.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e"
+dependencies = [
+ "bytes",
+ "getrandom 0.3.3",
+ "lru-slab",
+ "rand 0.9.2",
+ "ring",
+ "rustc-hash",
+ "rustls",
+ "rustls-pki-types",
+ "slab",
+ "thiserror 2.0.12",
+ "tinyvec",
+ "tracing",
+ "web-time",
+]
+
+[[package]]
+name = "quinn-udp"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970"
+dependencies = [
+ "cfg_aliases 0.2.1",
+ "libc",
+ "once_cell",
+ "socket2 0.5.10",
+ "tracing",
+ "windows-sys 0.59.0",
+]
+
[[package]]
name = "quote"
version = "1.0.40"
@@ -2638,6 +2757,16 @@ dependencies = [
"rand_core 0.6.4",
]
+[[package]]
+name = "rand"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
+dependencies = [
+ "rand_chacha 0.9.0",
+ "rand_core 0.9.3",
+]
+
[[package]]
name = "rand_chacha"
version = "0.2.2"
@@ -2658,6 +2787,16 @@ dependencies = [
"rand_core 0.6.4",
]
+[[package]]
+name = "rand_chacha"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.9.3",
+]
+
[[package]]
name = "rand_core"
version = "0.5.1"
@@ -2676,6 +2815,15 @@ dependencies = [
"getrandom 0.2.16",
]
+[[package]]
+name = "rand_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
+dependencies = [
+ "getrandom 0.3.3",
+]
+
[[package]]
name = "rand_hc"
version = "0.2.0"
@@ -2700,6 +2848,17 @@ version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
+[[package]]
+name = "read-progress-stream"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6435842fc2fea44b528719eb8c32203bbc1bb2f5b619fbe0c0a3d8350fd8d2a8"
+dependencies = [
+ "bytes",
+ "futures",
+ "pin-project-lite",
+]
+
[[package]]
name = "redox_syscall"
version = "0.5.17"
@@ -2792,16 +2951,21 @@ dependencies = [
"http-body",
"http-body-util",
"hyper",
+ "hyper-rustls",
"hyper-util",
"js-sys",
"log",
"percent-encoding",
"pin-project-lite",
+ "quinn",
+ "rustls",
+ "rustls-pki-types",
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper",
"tokio",
+ "tokio-rustls",
"tokio-util",
"tower",
"tower-http",
@@ -2811,6 +2975,21 @@ dependencies = [
"wasm-bindgen-futures",
"wasm-streams",
"web-sys",
+ "webpki-roots",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "getrandom 0.2.16",
+ "libc",
+ "untrusted",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -2864,6 +3043,12 @@ version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
+[[package]]
+name = "rustc-hash"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
+
[[package]]
name = "rustc_version"
version = "0.4.1"
@@ -2873,6 +3058,41 @@ dependencies = [
"semver",
]
+[[package]]
+name = "rustls"
+version = "0.23.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc"
+dependencies = [
+ "once_cell",
+ "ring",
+ "rustls-pki-types",
+ "rustls-webpki",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "rustls-pki-types"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79"
+dependencies = [
+ "web-time",
+ "zeroize",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.103.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc"
+dependencies = [
+ "ring",
+ "rustls-pki-types",
+ "untrusted",
+]
+
[[package]]
name = "rustversion"
version = "1.0.21"
@@ -3196,6 +3416,16 @@ version = "1.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+[[package]]
+name = "socket2"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
[[package]]
name = "socket2"
version = "0.6.0"
@@ -3291,6 +3521,12 @@ version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+[[package]]
+name = "subtle"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+
[[package]]
name = "swift-rs"
version = "1.0.7"
@@ -3356,6 +3592,27 @@ dependencies = [
"syn 2.0.104",
]
+[[package]]
+name = "system-configuration"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
+dependencies = [
+ "bitflags 2.9.1",
+ "core-foundation 0.9.4",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
[[package]]
name = "system-deps"
version = "6.2.2"
@@ -3376,7 +3633,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a"
dependencies = [
"bitflags 2.9.1",
- "core-foundation",
+ "core-foundation 0.10.1",
"core-graphics",
"crossbeam-channel",
"dispatch",
@@ -3447,6 +3704,7 @@ dependencies = [
"gtk",
"heck 0.5.0",
"http",
+ "http-range",
"jni",
"libc",
"log",
@@ -3561,6 +3819,28 @@ dependencies = [
"walkdir",
]
+[[package]]
+name = "tauri-plugin-fs"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99"
+dependencies = [
+ "anyhow",
+ "dunce",
+ "glob",
+ "percent-encoding",
+ "schemars 0.8.22",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "tauri",
+ "tauri-plugin",
+ "tauri-utils",
+ "thiserror 2.0.12",
+ "toml 0.8.2",
+ "url",
+]
+
[[package]]
name = "tauri-plugin-keep-screen-on"
version = "0.1.4"
@@ -3595,6 +3875,25 @@ dependencies = [
"time",
]
+[[package]]
+name = "tauri-plugin-upload"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3a3a78df0924a08d166d2d8041c6b9e752e6d94913177b52f1bfa11b5f73d3"
+dependencies = [
+ "futures-util",
+ "log",
+ "read-progress-stream",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tauri",
+ "tauri-plugin",
+ "thiserror 2.0.12",
+ "tokio",
+ "tokio-util",
+]
+
[[package]]
name = "tauri-runtime"
version = "2.7.1"
@@ -3815,10 +4114,20 @@ dependencies = [
"mio",
"pin-project-lite",
"slab",
- "socket2",
+ "socket2 0.6.0",
"windows-sys 0.59.0",
]
+[[package]]
+name = "tokio-rustls"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
[[package]]
name = "tokio-util"
version = "0.7.16"
@@ -4073,6 +4382,12 @@ version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
[[package]]
name = "url"
version = "2.5.4"
@@ -4299,6 +4614,16 @@ dependencies = [
"wasm-bindgen",
]
+[[package]]
+name = "web-time"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
[[package]]
name = "webkit2gtk"
version = "2.0.1"
@@ -4343,6 +4668,15 @@ dependencies = [
"system-deps",
]
+[[package]]
+name = "webpki-roots"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2"
+dependencies = [
+ "rustls-pki-types",
+]
+
[[package]]
name = "webview2-com"
version = "0.38.0"
@@ -4509,6 +4843,17 @@ dependencies = [
"windows-link",
]
+[[package]]
+name = "windows-registry"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
+dependencies = [
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
[[package]]
name = "windows-result"
version = "0.3.4"
@@ -4536,6 +4881,15 @@ dependencies = [
"windows-targets 0.42.2",
]
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
[[package]]
name = "windows-sys"
version = "0.59.0"
@@ -4937,6 +5291,12 @@ dependencies = [
"synstructure",
]
+[[package]]
+name = "zeroize"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
+
[[package]]
name = "zerotrie"
version = "0.2.2"
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index a8d8e56..dbbd005 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -21,6 +21,8 @@ tauri-build = { version = "2.3.1", features = [] }
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
log = "0.4"
-tauri = { version = "2.7.0", features = [] }
+tauri = { version = "2.7.0", features = ["protocol-asset"] }
tauri-plugin-log = "2"
tauri-plugin-keep-screen-on = "0.1.2"
+tauri-plugin-upload = "2"
+tauri-plugin-fs = "2"
diff --git a/src-tauri/build.rs b/src-tauri/build.rs
index 795b9b7..d860e1e 100644
--- a/src-tauri/build.rs
+++ b/src-tauri/build.rs
@@ -1,3 +1,3 @@
fn main() {
- tauri_build::build()
+ tauri_build::build()
}
diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json
index c135d7f..f1067c7 100644
--- a/src-tauri/capabilities/default.json
+++ b/src-tauri/capabilities/default.json
@@ -6,6 +6,34 @@
"main"
],
"permissions": [
- "core:default"
+ "core:default",
+ "upload:default",
+ "fs:allow-app-read",
+ "fs:allow-app-write",
+ {
+ "identifier": "fs:allow-write-file",
+ "allow": [
+ {
+ "path": "$APPDATA/**/*"
+ }
+ ]
+ },
+ "fs:read-files",
+ "fs:read-dirs",
+ {
+ "identifier": "fs:scope",
+ "allow": [
+ {
+ "path": "**"
+ },
+ {
+ "path": "$APPDATA/**/*"
+ },
+ {
+ "path": "$APPDATA/**/.*"
+ }
+ ]
+ },
+ "upload:allow-download"
]
-}
+}
\ No newline at end of file
diff --git a/src-tauri/gen/android/.gitignore b/src-tauri/gen/android/.gitignore
index b248203..4c2fae4 100644
--- a/src-tauri/gen/android/.gitignore
+++ b/src-tauri/gen/android/.gitignore
@@ -16,4 +16,6 @@ local.properties
key.properties
/.tauri
-/tauri.settings.gradle
\ No newline at end of file
+/tauri.settings.gradle
+
+keystore.properties
diff --git a/src-tauri/gen/android/app/build.gradle.kts b/src-tauri/gen/android/app/build.gradle.kts
index 448bb66..d6dcbd5 100644
--- a/src-tauri/gen/android/app/build.gradle.kts
+++ b/src-tauri/gen/android/app/build.gradle.kts
@@ -1,4 +1,5 @@
import java.util.Properties
+import java.io.FileInputStream
plugins {
id("com.android.application")
@@ -24,6 +25,20 @@ android {
versionCode = tauriProperties.getProperty("tauri.android.versionCode", "1").toInt()
versionName = tauriProperties.getProperty("tauri.android.versionName", "1.0")
}
+ signingConfigs {
+ create("release") {
+ val keystorePropertiesFile = rootProject.file("keystore.properties")
+ val keystoreProperties = Properties()
+ if (keystorePropertiesFile.exists()) {
+ keystoreProperties.load(FileInputStream(keystorePropertiesFile))
+ }
+
+ keyAlias = keystoreProperties["keyAlias"] as String
+ keyPassword = keystoreProperties["password"] as String
+ storeFile = file(keystoreProperties["storeFile"] as String)
+ storePassword = keystoreProperties["password"] as String
+ }
+ }
buildTypes {
getByName("debug") {
manifestPlaceholders["usesCleartextTraffic"] = "true"
@@ -43,6 +58,7 @@ android {
.plus(getDefaultProguardFile("proguard-android-optimize.txt"))
.toList().toTypedArray()
)
+ signingConfig = signingConfigs.getByName("release")
}
}
kotlinOptions {
@@ -67,4 +83,4 @@ dependencies {
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0")
}
-apply(from = "tauri.build.gradle.kts")
\ No newline at end of file
+apply(from = "tauri.build.gradle.kts")
diff --git a/src-tauri/gen/android/app/src/main/AndroidManifest.xml b/src-tauri/gen/android/app/src/main/AndroidManifest.xml
index ea86fc6..61575e2 100644
--- a/src-tauri/gen/android/app/src/main/AndroidManifest.xml
+++ b/src-tauri/gen/android/app/src/main/AndroidManifest.xml
@@ -1,7 +1,10 @@
-
+
+
+
+
diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs
index 8c56743..6700075 100644
--- a/src-tauri/src/lib.rs
+++ b/src-tauri/src/lib.rs
@@ -1,17 +1,19 @@
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
- tauri::Builder::default()
- .plugin(tauri_plugin_keep_screen_on::init())
- .setup(|app| {
- if cfg!(debug_assertions) {
- app.handle().plugin(
- tauri_plugin_log::Builder::default()
- .level(log::LevelFilter::Info)
- .build(),
- )?;
- }
- Ok(())
- })
- .run(tauri::generate_context!())
- .expect("error while running tauri application");
+ tauri::Builder::default()
+ .plugin(tauri_plugin_fs::init())
+ .plugin(tauri_plugin_upload::init())
+ .plugin(tauri_plugin_keep_screen_on::init())
+ .setup(|app| {
+ if cfg!(debug_assertions) {
+ app.handle().plugin(
+ tauri_plugin_log::Builder::default()
+ .level(log::LevelFilter::Info)
+ .build(),
+ )?;
+ }
+ Ok(())
+ })
+ .run(tauri::generate_context!())
+ .expect("error while running tauri application");
}
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index ad5fe83..69c3a72 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -2,5 +2,5 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
- app_lib::run();
+ app_lib::run();
}
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 28abade..78b974e 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -20,8 +20,15 @@
}
],
"security": {
+ "assetProtocol": {
+ "enable": true,
+ "scope": {
+ "allow": ["$APPDATA/**"]
+ }
+ },
"csp": null
- }
+ },
+ "withGlobalTauri": true
},
"bundle": {
"active": true,
diff --git a/src/lib/components/lnv/FullscreenMap.svelte b/src/lib/components/lnv/FullscreenMap.svelte
index 6e14a1f..cdd6e8c 100644
--- a/src/lib/components/lnv/FullscreenMap.svelte
+++ b/src/lib/components/lnv/FullscreenMap.svelte
@@ -8,9 +8,10 @@
routing,
} from "$lib/services/navigation/routing.svelte";
import { location } from "./location.svelte";
- import { protocol } from "$lib/services/OfflineTiles";
import { saved } from "$lib/saved.svelte";
import RoutingLayers from "$lib/services/navigation/RoutingLayers.svelte";
+ import { protocol } from "$lib/services/OfflineTiles";
+ import { layers, worldLayers } from "$lib/mapLayers";
onMount(() => {
window.addEventListener("resize", map.updateMapPadding);
@@ -26,7 +27,9 @@
const DEBUG_POINTS = false; // Set to true to show debug points on the map
-
+
+
+
map.value!.addLayer(l));
+ // }
+
+ // const url = await getPMTiles("tiles");
+ // console.log(url)
+ // if(url) {
+ map.value!.addSource("openmaptiles", {
+ type: "vector",
+ url: "pmtiles://tiles"
+ })
+
+
+ // @ts-expect-error - not typed correctly
+ layers.forEach(l => map.value!.addLayer(l));
+ // }
}}
onclick={(e) => {
if (view.current.type == "main" || view.current.type == "info") {
diff --git a/src/lib/components/lnv/Sidebar.svelte b/src/lib/components/lnv/Sidebar.svelte
index 198f7bb..4c7eae4 100644
--- a/src/lib/components/lnv/Sidebar.svelte
+++ b/src/lib/components/lnv/Sidebar.svelte
@@ -28,7 +28,7 @@
import { routing } from "$lib/services/navigation/routing.svelte";
import InRouteSidebar from "./sidebar/InRouteSidebar.svelte";
import say from "$lib/services/navigation/TTS";
- import { test } from "$lib/services/OfflineTiles";
+ import { downloadPMTiles } from "$lib/services/OfflineTiles";
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const views: Record> = {
@@ -211,9 +211,11 @@