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 @@