From 85eda602564b462d2027661b09bbc3b2a4a13e20 Mon Sep 17 00:00:00 2001 From: Tom <58078313+reed-tom@users.noreply.github.com> Date: Thu, 28 Mar 2024 09:38:05 -0400 Subject: [PATCH] Feature/arcgis support (#225) * removed secondary waste collection day * re-enabled crossOrigin flag * merge from private repo to include various changes to support arcgis layers and many other enhancements * various bug fixes * fixed layer visiblility issue on themes * removed unused code --- .env.sample | 6 + package-lock.json | 509 +- package.json | 6 + public/auth.html | 1 + public/basemap/ESRI_LightGrey.json | 5021 ++++++++++++++- .../ESRI_Streets_Night_Background.json | 5460 ++++++++++++++++- src/App.js | 5 +- src/AppSecure.jsx | 256 + src/ErrorBoundary.jsx | 30 + src/authConfig.js | 51 + src/config-secured.json | 16 + src/helpers/AttributeTable.jsx | 540 +- src/helpers/Identify.js | 173 + src/helpers/InfoTable.css | 28 + src/helpers/InfoTable.jsx | 45 + src/helpers/OLHelpers.js | 114 +- src/helpers/api.js | 71 +- src/helpers/date.js | 51 + src/helpers/esriHelpers.js | 153 + src/helpers/helpers.js | 248 +- src/helpers/storage.js | 57 + src/index.js | 38 +- src/layerInfo/App.js | 14 +- src/legend/LegendItem.jsx | 99 +- src/legend/helpers.js | 1 - src/map/Attachments.jsx | 11 +- src/map/BasemapSwitcherContext.js | 2 +- src/map/Identify.jsx | 22 +- src/map/IdentifyQuery.jsx | 76 + src/map/PropertyReport.css | 121 - src/map/PropertyReportClick.css | 29 +- src/map/PropertyReportClick.jsx | 364 +- src/map/SCMap.jsx | 25 +- src/map/Screenshot.jsx | 3 +- src/map/basemapSwitcherConfig.json | 18 +- src/map/extensions/Sample.extension.js | 55 + src/map/extensions/_loader.js | 22 + src/map/extensions/config.json | 3 + src/map/extensions/sample.config.json | 3 + src/reports/PropertyReport.css | 121 + src/{map => reports}/PropertyReport.jsx | 0 src/sidebar/MenuButton.jsx | 70 +- src/sidebar/Sidebar.jsx | 1 - src/sidebar/SidebarItemList.css | 70 +- src/sidebar/SidebarItemList.jsx | 134 +- .../components/mymaps/FeatureReportPopup.jsx | 1 - src/sidebar/components/mymaps/MyMaps.jsx | 72 +- .../components/mymaps/MyMapsAdvanced.jsx | 183 +- .../components/mymaps/MyMapsFooter.jsx | 116 +- src/sidebar/components/mymaps/MyMapsPopup.jsx | 3 + .../extensions/ReportProblem.extension.js | 51 + .../components/mymaps/extensions/_loader.js | 22 + .../components/mymaps/extensions/config.json | 3 + .../CommercialRealEstate.jsx | 18 +- .../CommercialRealEstateLayerToggler.jsx | 4 +- .../CommercialRealEstateResults.jsx | 144 +- .../themes/commercialrealestate/config.json | 77 +- .../five11livefeeds/Five11LayerToggler.jsx | 10 +- .../five11livefeeds/Five11LiveFeeds.jsx | 3 +- .../ImmigrationServicesLayerToggler.jsx | 2 +- .../LocalRealEstateImageSlider.jsx | 23 +- .../LocalRealEstateLayerToggler.jsx | 39 +- .../LocalRealEstateRecents.jsx | 134 +- .../themeComponents/ThemeBaseLayers.jsx | 295 +- .../themes/themeComponents/ThemeContainer.jsx | 74 +- .../themes/themeComponents/ThemeData.jsx | 91 +- .../themes/themeComponents/ThemeDataList.jsx | 199 +- .../themeComponents/ThemeLayerToggler.jsx | 271 +- .../themes/themeComponents/ThemeLayers.css | 7 + .../themes/themeComponents/ThemeLayers.jsx | 62 +- .../themeComponents/ThemePopupContent.css | 10 +- .../themeComponents/ThemePopupContent.jsx | 70 +- .../themeComponents/ThemeServiceToggler.css | 77 + .../themeComponents/ThemeServiceToggler.jsx | 310 + src/sidebar/components/toc/TOC.jsx | 49 +- .../components/toc/common/TOCHeader.css | 1 - .../components/toc/common/TOCHeader.jsx | 1 - .../components/toc/common/TOCHelpers.jsx | 152 +- .../components/tools/addlayer/AddLayer.jsx | 5 +- .../components/tools/addlayer/config.json | 6 +- .../lotandconcession/LotAndConcession.jsx | 15 +- src/sidebar/components/tools/print/Print.jsx | 32 +- .../tools/print/printRequest/printRequest.js | 12 +- .../tools/searchaddresses/SearchAddresses.css | 24 +- .../tools/searchaddresses/SearchAddresses.jsx | 45 +- .../components/tools/settings/Settings.jsx | 44 +- .../tools/settings/SettingsComponents.jsx | 72 +- src/sidebar/images/lock-icon.png | Bin 0 -> 841 bytes 88 files changed, 14896 insertions(+), 2076 deletions(-) create mode 100644 .env.sample create mode 100644 public/auth.html create mode 100644 src/AppSecure.jsx create mode 100644 src/ErrorBoundary.jsx create mode 100644 src/authConfig.js create mode 100644 src/config-secured.json create mode 100644 src/helpers/Identify.js create mode 100644 src/helpers/InfoTable.css create mode 100644 src/helpers/InfoTable.jsx create mode 100644 src/helpers/date.js create mode 100644 src/helpers/esriHelpers.js create mode 100644 src/helpers/storage.js create mode 100644 src/map/IdentifyQuery.jsx delete mode 100644 src/map/PropertyReport.css create mode 100644 src/map/extensions/Sample.extension.js create mode 100644 src/map/extensions/_loader.js create mode 100644 src/map/extensions/config.json create mode 100644 src/map/extensions/sample.config.json create mode 100644 src/reports/PropertyReport.css rename src/{map => reports}/PropertyReport.jsx (100%) create mode 100644 src/sidebar/components/mymaps/extensions/ReportProblem.extension.js create mode 100644 src/sidebar/components/mymaps/extensions/_loader.js create mode 100644 src/sidebar/components/mymaps/extensions/config.json create mode 100644 src/sidebar/components/themes/themeComponents/ThemeServiceToggler.css create mode 100644 src/sidebar/components/themes/themeComponents/ThemeServiceToggler.jsx create mode 100644 src/sidebar/images/lock-icon.png diff --git a/.env.sample b/.env.sample new file mode 100644 index 00000000..d602a299 --- /dev/null +++ b/.env.sample @@ -0,0 +1,6 @@ +REACT_APP_SECURED="false" +REACT_APP_TENANT="TENANT_ID" +REACT_APP_DEFAULT_SCOPE="DEFAULT_SCOPE" +REACT_APP_CLIENTID="CLIENT_ID" +REACT_APP_AUTHORITY="AUTHORITY" + diff --git a/package-lock.json b/package-lock.json index 9f832cf5..abd2802b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "opengis", "version": "1.4.2", "dependencies": { + "@arcgis/core": "^4.26.5", + "@azure/msal-browser": "^3.7.1", + "@azure/msal-react": "^2.0.10", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@mui/material": "^5.14.4", @@ -50,6 +53,9 @@ "slick-carousel": "^1.8.1", "styled-components": "^5.3.6", "url": "^0.11.1" + }, + "devDependencies": { + "dotenv": "^16.4.5" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -83,6 +89,52 @@ "node": ">=6.0.0" } }, + "node_modules/@arcgis/core": { + "version": "4.29.8", + "resolved": "https://registry.npmjs.org/@arcgis/core/-/core-4.29.8.tgz", + "integrity": "sha512-H6vdmGwmGdX80wRMiTxEyTHcDG69a5iEWTi46sC+apAVGnubAbAqU8fsGj/5K3qiTqkZdGIVKSB9WqDH0oenfw==", + "dependencies": { + "@esri/arcgis-html-sanitizer": "~3.0.1", + "@esri/calcite-colors": "~6.1.0", + "@esri/calcite-components": "^2.4.0", + "@popperjs/core": "~2.11.8", + "@vaadin/grid": "~24.3.6", + "@zip.js/zip.js": "~2.7.34", + "luxon": "~3.4.4", + "sortablejs": "~1.15.2" + } + }, + "node_modules/@azure/msal-browser": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.10.0.tgz", + "integrity": "sha512-mnmi8dCXVNZI+AGRq0jKQ3YiodlIC4W9npr6FCB9WN6NQT+6rq+cIlxgUb//BjLyzKsnYo+i4LROGeMyU+6v1A==", + "dependencies": { + "@azure/msal-common": "14.7.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "14.7.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.7.1.tgz", + "integrity": "sha512-v96btzjM7KrAu4NSEdOkhQSTGOuNUIIsUdB8wlyB9cdgl5KqEKnTonHUZ8+khvZ6Ap542FCErbnTyDWl8lZ2rA==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-react": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@azure/msal-react/-/msal-react-2.0.12.tgz", + "integrity": "sha512-23HKdajBWQ5SSzcwwFKHAWaOCpq4UCthoOBgKpab3UoHx0OuFMQiq6CrNBzBKtBFdyxCjadBGzWshRgl0Nvk1g==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@azure/msal-browser": "^3.10.0", + "react": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/@babel/code-frame": { "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", @@ -2550,6 +2602,41 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@esri/arcgis-html-sanitizer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@esri/arcgis-html-sanitizer/-/arcgis-html-sanitizer-3.0.1.tgz", + "integrity": "sha512-cwZJwsYCJZwtBQU2AmaiIVFg5nZcVwInPYja1/OgC9iKYO+ytZRoc5h+0S9/ygbFNoS8Nd0RX9A85stLX/BgiA==", + "dependencies": { + "xss": "1.0.13" + } + }, + "node_modules/@esri/calcite-colors": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@esri/calcite-colors/-/calcite-colors-6.1.0.tgz", + "integrity": "sha512-wHQYWFtDa6c328EraXEVZvgOiaQyYr0yuaaZ0G3cB4C3lSkWefW34L/e5TLAhtuG3zJ/wR6pl5X1YYNfBc0/4Q==" + }, + "node_modules/@esri/calcite-components": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@esri/calcite-components/-/calcite-components-2.6.0.tgz", + "integrity": "sha512-GbpascF/mI3TvC5EQejzMi8zDG/wv0pzGU5HzUsrzHqIkIwRruuIe7qdg/srjaEQkXwwpJKxfd8r5QaBXjlQWw==", + "dependencies": { + "@floating-ui/dom": "1.6.3", + "@stencil/core": "4.9.0", + "@types/color": "3.0.6", + "color": "4.2.3", + "composed-offset-position": "0.0.4", + "dayjs": "1.11.10", + "focus-trap": "7.5.4", + "lodash-es": "4.17.21", + "sortablejs": "1.15.1", + "timezone-groups": "0.8.0" + } + }, + "node_modules/@esri/calcite-components/node_modules/sortablejs": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.1.tgz", + "integrity": "sha512-P5Cjvb0UG1ZVNiDPj/n4V+DinttXG6K8n7vM/HQf0C25K3YKQTQY6fsr/sEGsJGpQ9exmPxluHxKBc0mLKU1lQ==" + }, "node_modules/@floating-ui/core": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", @@ -2559,14 +2646,19 @@ } }, "node_modules/@floating-ui/dom": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.2.tgz", - "integrity": "sha512-6ArmenS6qJEWmwzczWyhvrXRdI/rI78poBcW0h/456+onlabit+2G+QxHx5xTOX60NBJQXjsCLFbW2CmsXpUog==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", "dependencies": { - "@floating-ui/core": "^1.4.1", - "@floating-ui/utils": "^0.1.1" + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" } }, + "node_modules/@floating-ui/dom/node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, "node_modules/@floating-ui/react-dom": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz", @@ -3350,6 +3442,19 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz", + "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==" + }, + "node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, "node_modules/@mapbox/jsonlint-lines-primitives": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", @@ -3681,6 +3786,11 @@ "node": ">= 8" } }, + "node_modules/@open-wc/dedupe-mixin": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.4.0.tgz", + "integrity": "sha512-Sj7gKl1TLcDbF7B6KUhtvr+1UCxdhMbNY5KxdU5IfMFWqL8oy1ZeAcCANjoB1TL0AJTcPmcCFsCbHf8X2jGDUA==" + }, "node_modules/@petamoriken/float16": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.3.tgz", @@ -3743,6 +3853,14 @@ "node": ">= 8" } }, + "node_modules/@polymer/polymer": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@polymer/polymer/-/polymer-3.5.1.tgz", + "integrity": "sha512-JlAHuy+1qIC6hL1ojEUfIVD58fzTpJAoCxFwV5yr0mYTXV1H8bz5zy0+rC963Cgr9iNXQ4T9ncSjC2fkF9BQfw==", + "dependencies": { + "@webcomponents/shadycss": "^1.9.1" + } + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -3898,6 +4016,18 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@stencil/core": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.9.0.tgz", + "integrity": "sha512-aWSkhBmk3yPwRAkUwBbzRwmdhb8hKiQ/JMr9m5jthpBZLjtppYbzz6PN2MhSMDfRp6K93eQw5WogSEH4HHuB6w==", + "bin": { + "stencil": "bin/stencil" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.10.0" + } + }, "node_modules/@surma/rollup-plugin-off-main-thread": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", @@ -4186,6 +4316,27 @@ "@types/node": "*" } }, + "node_modules/@types/color": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/color/-/color-3.0.6.tgz", + "integrity": "sha512-NMiNcZFRUAiUUCCf7zkAelY8eV3aKqfbzyFQlXpPIEeoNDbsEHGpb854V3gzTsGKYj830I5zPuOwU/TP5/cW6A==", + "dependencies": { + "@types/color-convert": "*" + } + }, + "node_modules/@types/color-convert": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.3.tgz", + "integrity": "sha512-2Q6wzrNiuEvYxVQqhh7sXM2mhIhvZR/Paq4FdsQkOMgWsCIkKvSGj8Le1/XalulrmgOzPMqNa0ix+ePY4hTrfg==", + "dependencies": { + "@types/color-name": "*" + } + }, + "node_modules/@types/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-87W6MJCKZYDhLAx/J1ikW8niMvmGRyY+rpUxWpL1cO7F8Uu5CHuQoFv+R0/L5pgNdW4jTyda42kv60uwVIPjLw==" + }, "node_modules/@types/connect": { "version": "3.4.36", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", @@ -4670,6 +4821,172 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@vaadin/a11y-base": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/a11y-base/-/a11y-base-24.3.9.tgz", + "integrity": "sha512-4oD42LX8WuhGmJoFENb6viaHGelcXhZxzxcq5HjRi/w5MvIk6PgFcRYlzrW7i+vzh5YeHeSl1RxAMQX88xIe6Q==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~24.3.9", + "lit": "^3.0.0" + } + }, + "node_modules/@vaadin/checkbox": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/checkbox/-/checkbox-24.3.9.tgz", + "integrity": "sha512-bdw9UU1OZjkhF5XwYMVxIsP1ILv1y3+jyyiJgWsBCUuLY4LCtNvd+xRuecePv+UWzhjfW2Ci3ieTGRW1AANyIw==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@polymer/polymer": "^3.0.0", + "@vaadin/a11y-base": "~24.3.9", + "@vaadin/component-base": "~24.3.9", + "@vaadin/field-base": "~24.3.9", + "@vaadin/vaadin-lumo-styles": "~24.3.9", + "@vaadin/vaadin-material-styles": "~24.3.9", + "@vaadin/vaadin-themable-mixin": "~24.3.9", + "lit": "^3.0.0" + } + }, + "node_modules/@vaadin/component-base": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/component-base/-/component-base-24.3.9.tgz", + "integrity": "sha512-SZ4tV9CeI6EZjpxEmoezwzdTd8td0BrQ7fU3H0JKZNSrfPEm85MdtFd4+ob0MSZRIV0oiukQhXxpU3WtCvU4OQ==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@polymer/polymer": "^3.0.0", + "@vaadin/vaadin-development-mode-detector": "^2.0.0", + "@vaadin/vaadin-usage-statistics": "^2.1.0", + "lit": "^3.0.0" + } + }, + "node_modules/@vaadin/field-base": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/field-base/-/field-base-24.3.9.tgz", + "integrity": "sha512-2au/ad6s5PgQdCE8osWHsdUTsjykUBBcP2+wO0bi4rgV3KWgU3HVmftfDZC96cGXGlwB5DmnOBgumiWwwl9Mqw==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@polymer/polymer": "^3.0.0", + "@vaadin/a11y-base": "~24.3.9", + "@vaadin/component-base": "~24.3.9", + "lit": "^3.0.0" + } + }, + "node_modules/@vaadin/grid": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/grid/-/grid-24.3.9.tgz", + "integrity": "sha512-0gOUE4NfxcifadOxTBkAh5S5tSYNIT4Jmm9K19FHAnN935z3xJMlASzllywn0eKkISvk6ms2GXJ62gTgjjZHMA==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@polymer/polymer": "^3.0.0", + "@vaadin/a11y-base": "~24.3.9", + "@vaadin/checkbox": "~24.3.9", + "@vaadin/component-base": "~24.3.9", + "@vaadin/lit-renderer": "~24.3.9", + "@vaadin/text-field": "~24.3.9", + "@vaadin/vaadin-lumo-styles": "~24.3.9", + "@vaadin/vaadin-material-styles": "~24.3.9", + "@vaadin/vaadin-themable-mixin": "~24.3.9" + } + }, + "node_modules/@vaadin/icon": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/icon/-/icon-24.3.9.tgz", + "integrity": "sha512-gisYrtL2auElq2EnDcFLaIeUBiHzrwSzbrUvoupSWbotDnKIYRZVMGyPLRkWCQBqdncH+R0Doj9AuM6No7Pdag==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~24.3.9", + "@vaadin/vaadin-lumo-styles": "~24.3.9", + "@vaadin/vaadin-themable-mixin": "~24.3.9", + "lit": "^3.0.0" + } + }, + "node_modules/@vaadin/input-container": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/input-container/-/input-container-24.3.9.tgz", + "integrity": "sha512-d6dcN+TIhE4wq8a1/ONv6zSNV6L0pfaCbbc9XMkOtWsY4IrPsrbLKTfaAD0CG/V7I4xQIR64I/5fKUGPqn+jsg==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~24.3.9", + "@vaadin/vaadin-lumo-styles": "~24.3.9", + "@vaadin/vaadin-material-styles": "~24.3.9", + "@vaadin/vaadin-themable-mixin": "~24.3.9", + "lit": "^3.0.0" + } + }, + "node_modules/@vaadin/lit-renderer": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/lit-renderer/-/lit-renderer-24.3.9.tgz", + "integrity": "sha512-KaOwU8Up4UGUE51H3wgsGyDGplkvL1pP7cyduO7b+wVu8enqboarkKIAHb5jSS5/ImZzfs9lZZLh5zQVlejgpw==", + "dependencies": { + "lit": "^3.0.0" + } + }, + "node_modules/@vaadin/text-field": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/text-field/-/text-field-24.3.9.tgz", + "integrity": "sha512-q3lvEfhBTD/iaqDysH0nNyfkbyoTWIuk3/wRaWxwahzQ8zH9VajHUm6gifLVM6DBDgQJHTu3kSA15l2ka3b/pw==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@polymer/polymer": "^3.0.0", + "@vaadin/a11y-base": "~24.3.9", + "@vaadin/component-base": "~24.3.9", + "@vaadin/field-base": "~24.3.9", + "@vaadin/input-container": "~24.3.9", + "@vaadin/vaadin-lumo-styles": "~24.3.9", + "@vaadin/vaadin-material-styles": "~24.3.9", + "@vaadin/vaadin-themable-mixin": "~24.3.9", + "lit": "^3.0.0" + } + }, + "node_modules/@vaadin/vaadin-development-mode-detector": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-development-mode-detector/-/vaadin-development-mode-detector-2.0.6.tgz", + "integrity": "sha512-N6a5nLT/ytEUlpPo+nvdCKIGoyNjPsj3rzPGvGYK8x9Ceg76OTe1xI/GtN71mRW9e2HUScR0kCNOkl1Z63YDjw==" + }, + "node_modules/@vaadin/vaadin-lumo-styles": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-24.3.9.tgz", + "integrity": "sha512-ZLgLpM97JH5eyAvVdbIaLNm+AHnyVhVlTfPEieYPNcJAv1bBCRDf3DFVuX2+A61u2imik+JfMtlqgEzJd7U9zg==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~24.3.9", + "@vaadin/icon": "~24.3.9", + "@vaadin/vaadin-themable-mixin": "~24.3.9" + } + }, + "node_modules/@vaadin/vaadin-material-styles": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-material-styles/-/vaadin-material-styles-24.3.9.tgz", + "integrity": "sha512-pXLWn6IEX1sBnlXmUzhBs77D+fyu0VlbvFonjV9ImbcA3DzFqpf8vtT82pL0SGBeJRfdimGQmjDS+R0FMjPlyw==", + "dependencies": { + "@polymer/polymer": "^3.0.0", + "@vaadin/component-base": "~24.3.9", + "@vaadin/vaadin-themable-mixin": "~24.3.9" + } + }, + "node_modules/@vaadin/vaadin-themable-mixin": { + "version": "24.3.9", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-24.3.9.tgz", + "integrity": "sha512-PB/zz+E8Y6ly7FASMTyOI7ibKwWg4O+ud+OjD1OK9KqKasPLdj33rU11y/T6DrRD7k46Wk5FFy26olbUfg3/QQ==", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "lit": "^3.0.0" + } + }, + "node_modules/@vaadin/vaadin-usage-statistics": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-usage-statistics/-/vaadin-usage-statistics-2.1.2.tgz", + "integrity": "sha512-xKs1PvRfTXsG0eWWcImLXWjv7D+f1vfoIvovppv6pZ5QX8xgcxWUdNgERlOOdGt3CTuxQXukTBW3+Qfva+OXSg==", + "hasInstallScript": true, + "dependencies": { + "@vaadin/vaadin-development-mode-detector": "^2.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", @@ -4801,6 +5118,11 @@ "@xtuc/long": "4.2.2" } }, + "node_modules/@webcomponents/shadycss": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.2.tgz", + "integrity": "sha512-vRq+GniJAYSBmTRnhCYPAPq6THYqovJ/gzGThWbgEZUQaBccndGTi1hdiUP15HzEco0I6t4RCtXyX0rsSmwgPw==" + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -4811,6 +5133,16 @@ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, + "node_modules/@zip.js/zip.js": { + "version": "2.7.40", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.40.tgz", + "integrity": "sha512-kSYwO0Wth6G66QM4CejZqG0nRhBsVVTaR18M/Ta8EcqcvaV0dYrnDDyKAstfy0V5+ejK4b9w5xc1W0ECATJTvA==", + "engines": { + "bun": ">=0.7.0", + "deno": ">=1.0.0", + "node": ">=16.5.0" + } + }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -6084,6 +6416,18 @@ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -6097,6 +6441,31 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -6144,6 +6513,11 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, + "node_modules/composed-offset-position": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/composed-offset-position/-/composed-offset-position-0.0.4.tgz", + "integrity": "sha512-vMlvu1RuNegVE0YsCDSV/X4X10j56mq7PCIyOKK74FxkXzGLwhOUmdkJLSdOBOMwWycobGUMgft2lp+YgTe8hw==" + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -6604,6 +6978,11 @@ "node": ">=4" } }, + "node_modules/cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==" + }, "node_modules/cssnano": { "version": "5.1.15", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", @@ -6772,6 +7151,11 @@ "url": "https://opencollective.com/date-fns" } }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7092,11 +7476,15 @@ } }, "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dotenv-expand": { @@ -8426,6 +8814,14 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, + "node_modules/focus-trap": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "dependencies": { + "tabbable": "^6.2.0" + } + }, "node_modules/follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", @@ -12241,6 +12637,34 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/lit": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.2.tgz", + "integrity": "sha512-VZx5iAyMtX7CV4K8iTLdCkMaYZ7ipjJZ0JcSdJ0zIdGxxyurjIn7yuuSxNBD7QmjvcNJwr0JS4cAdAtsy7gZ6w==", + "dependencies": { + "@lit/reactive-element": "^2.0.4", + "lit-element": "^4.0.4", + "lit-html": "^3.1.2" + } + }, + "node_modules/lit-element": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.4.tgz", + "integrity": "sha512-98CvgulX6eCPs6TyAIQoJZBCQPo80rgXR+dVBs61cstJXqtI+USQZAbA4gFHh6L/mxBx9MrgPLHLsUgDUHAcCQ==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.1.2" + } + }, + "node_modules/lit-html": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.2.tgz", + "integrity": "sha512-3OBZSUrPnAHoKJ9AMjRL/m01YJxQMf+TMHanNtTHG68ubjnZxK0RFl102DPzsw4mWnHibfZIBJm3LWCZ/LmMvg==", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -12338,6 +12762,14 @@ "yallist": "^3.0.2" } }, + "node_modules/luxon": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "engines": { + "node": ">=12" + } + }, "node_modules/magic-string": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", @@ -15373,6 +15805,14 @@ } } }, + "node_modules/react-scripts/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, "node_modules/react-select": { "version": "5.7.4", "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.4.tgz", @@ -16375,6 +16815,19 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -16434,6 +16887,11 @@ "node": ">=0.10.0" } }, + "node_modules/sortablejs": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz", + "integrity": "sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA==" + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -17095,6 +17553,11 @@ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + }, "node_modules/tailwindcss": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", @@ -17292,6 +17755,14 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "node_modules/timezone-groups": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/timezone-groups/-/timezone-groups-0.8.0.tgz", + "integrity": "sha512-t7E/9sPfCU0m0ZbS7Cqw52D6CB/UyeaiIBmyJCokI1SyOyOgA/ESiQ/fbreeFaUG9QSenGlZSSk/7rEbkipbOA==", + "bin": { + "timezone-groups": "dist/cli.cjs" + } + }, "node_modules/tinycolor2": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", @@ -18745,6 +19216,26 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, + "node_modules/xss": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.13.tgz", + "integrity": "sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q==", + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/xss/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index fcc4aa7a..1793bd1b 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,9 @@ "version": "1.4.2", "private": true, "dependencies": { + "@arcgis/core": "^4.26.5", + "@azure/msal-browser": "^3.7.1", + "@azure/msal-react": "^2.0.10", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@mui/material": "^5.14.4", @@ -65,5 +68,8 @@ "jshintConfig": { "loopfunc": true, "jsx-a11y/anchor-is-valid": true + }, + "devDependencies": { + "dotenv": "^16.4.5" } } diff --git a/public/auth.html b/public/auth.html new file mode 100644 index 00000000..e41f1c04 --- /dev/null +++ b/public/auth.html @@ -0,0 +1 @@ + diff --git a/public/basemap/ESRI_LightGrey.json b/public/basemap/ESRI_LightGrey.json index 7654e242..f878cbdb 100644 --- a/public/basemap/ESRI_LightGrey.json +++ b/public/basemap/ESRI_LightGrey.json @@ -1 +1,5020 @@ -{"version":8,"sprite":"https://www.arcgis.com/sharing/rest/content/items/0baf45ff172d4917b12f3a691bc87553/resources/styles/sprite-1569437124838","glyphs":"https://tiles.arcgis.com/tiles/B6yKvIZqzuOr0jBR/arcgis/rest/services/Canada_Topographic/VectorTileServer/resources/styles/../fonts/{fontstack}/{range}.pbf","sources":{"esri":{"type":"vector","url":"https://tiles.arcgis.com/tiles/B6yKvIZqzuOr0jBR/arcgis/rest/services/Canada_Topographic/VectorTileServer","tiles":["https://tiles.arcgis.com/tiles/B6yKvIZqzuOr0jBR/arcgis/rest/services/Canada_Topographic/VectorTileServer/tile/{z}/{y}/{x}.pbf"]}},"layers":[{"id":"Topo Layers/Landbase","type":"fill","source":"esri","source-layer":"Landbase","minzoom":2,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[0,"#f4f4f4"],[7,"#efefef"]]}}},{"id":"Topo Layers/Owner Parcel","type":"fill","source":"esri","source-layer":"Owner Parcel","minzoom":16,"layout":{},"paint":{"fill-opacity":0.6,"fill-color":{"base":1,"stops":[[0,"#f4f4f4"],[7,"#efefef"]]}}},{"id":"Topo Layers/Urban Area/00000000001111111111111/1","type":"fill","source":"esri","source-layer":"Urban Area","filter":["==","_symbol",0],"minzoom":13,"maxzoom":14,"layout":{},"paint":{"fill-color":"#ecedec"}},{"id":"Topo Layers/Urban Area/00000000001111111111111_5/1","type":"fill","source":"esri","source-layer":"Urban Area","filter":["==","_symbol",0],"minzoom":3,"maxzoom":9,"layout":{},"paint":{"fill-color":"#e5e8e7"}},{"id":"Topo Layers/Urban Area/00000000001111111111111_4/1","type":"fill","source":"esri","source-layer":"Urban Area","filter":["==","_symbol",0],"minzoom":9,"maxzoom":10,"layout":{},"paint":{"fill-color":"#e5e8e7"}},{"id":"Topo Layers/Urban Area/00000000001111111111111_3/1","type":"fill","source":"esri","source-layer":"Urban Area","filter":["==","_symbol",0],"minzoom":10,"maxzoom":11,"layout":{},"paint":{"fill-color":"#ecedec"}},{"id":"Topo Layers/Urban Area/00000000001111111111111_2/1","type":"fill","source":"esri","source-layer":"Urban Area","filter":["==","_symbol",0],"minzoom":11,"maxzoom":12,"layout":{},"paint":{"fill-color":"#ecedec"}},{"id":"Topo Layers/Urban Area/00000000001111111111111_1/1","type":"fill","source":"esri","source-layer":"Urban Area","filter":["==","_symbol",0],"minzoom":12,"maxzoom":13,"layout":{},"paint":{"fill-color":"#ecedec"}},{"id":"Topo Layers/Parcel Outline","type":"line","source":"esri","source-layer":"Parcel Outline","minzoom":16,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#e7e7e7","line-width":1.06658}},{"id":"Topo Layers/First Nations/1","type":"line","source":"esri","source-layer":"First Nations","minzoom":10,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-opacity":0.47,"line-color":"#dddedb","line-width":4.66667}},{"id":"Topo Layers/First Nations/0","type":"line","source":"esri","source-layer":"First Nations","minzoom":10,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#9C9C9C","line-dasharray":[6.41026,3.84615],"line-width":1.04,"line-opacity":0.47}},{"id":"Topo Layers/International / Provincial Boundaries:2/","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:2","filter":["==","_symbol",0],"minzoom":10,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dddedb","line-width":{"stops":[[10,1.33333],[18,2.66667]]}},"showProperties":false},{"id":"Topo Layers/International / Provincial Boundaries:2/3","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:2","filter":["==","_symbol",1],"minzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#9c9c9c","line-width":0.933333,"line-dasharray":[9.71429,6.85714]}},{"id":"Topo Layers/International / Provincial Boundaries:2/4","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:2","filter":["==","_symbol",2],"minzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#9C9C9C","line-dasharray":[7.14286,4.28571],"line-width":0.933333}},{"id":"Topo Layers/International / Provincial Boundaries:2/13","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:2","filter":["==","_symbol",3],"minzoom":10,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dddedb","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/Small Scale Landuse/825 - Park: Territorial; 823 - Park: National; 824 - Park: Provincial/1","type":"fill","source":"esri","source-layer":"Small Scale Landuse","filter":["==","_symbol",0],"minzoom":5,"maxzoom":8,"layout":{},"paint":{"fill-color":"#eceeea"},"showProperties":false},{"id":"Topo Layers/Small Scale Landuse/825 - Park: Territorial; 823 - Park: National; 824 - Park: Provincial/0","type":"line","source":"esri","source-layer":"Small Scale Landuse","filter":["==","_symbol",0],"minzoom":5,"maxzoom":8,"layout":{"visibility":"none","line-cap":"round","line-join":"round"},"paint":{"line-opacity":0.36,"line-color":"#e7eae6","line-width":2},"showProperties":false},{"id":"Topo Layers/Landuse/900/1","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",2],"minzoom":8,"layout":{},"paint":{"fill-opacity":0.5,"fill-color":"#e4e8e4"},"showProperties":false},{"id":"Topo Layers/Landuse/1105 - Helipad / Heliport / Helistop","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",27],"minzoom":8,"layout":{},"paint":{"fill-opacity":0.5,"fill-color":"#e4e8e4"}},{"id":"Topo Layers/Landuse/1100 - Airport Facility","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",25],"minzoom":8,"layout":{},"paint":{"fill-opacity":0.5,"fill-color":"#e4e8e4"}},{"id":"Topo Layers/Landuse/1102 - Airport Runway / Airfield/1","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",26],"minzoom":8,"layout":{},"paint":{"fill-color":"#D1D1D1","fill-opacity":0.5},"showProperties":false},{"id":"Topo Layers/Landuse/849 - Zoo","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",24],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/831 - Playground","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",19],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/830 - Picnic Area","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",18],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/828 - Park: Municipal","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",17],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/827 - Park: Upper Municipal","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",16],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/826 - Park: Municipal Region Area","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",15],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/825 - Park: Territorial","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",14],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[18,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/824 - Park: Provincial","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",13],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/823 - Park: National","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",12],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/821 - Open Space","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",11],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/807 - Campground","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",6],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/800 - General Recreation","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",1],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/815 - Golf Course Facility","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",10],"minzoom":8,"layout":{},"paint":{"fill-color":{"base":1,"stops":[[6,"#eceeea"],[11,"#e4e8e4"]]},"fill-outline-color":"#e7eae6"},"showProperties":false},{"id":"Topo Layers/Landuse/836 - Racetrack (Track and Field)","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",21],"minzoom":14,"layout":{},"paint":{"fill-opacity":0.1,"fill-color":"rgba(91,113,91,0.88)","fill-outline-color":"rgba(91,113,91,0.88)"},"showProperties":false},{"id":"Topo Layers/Landuse/845 - Tennis Courts","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",23],"minzoom":14,"layout":{},"paint":{"fill-opacity":0.1,"fill-color":"rgba(91,113,91,0.88)","fill-outline-color":"#FFFFFF"},"showProperties":false},{"id":"Topo Layers/Landuse/842 - Soccer Field","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",22],"minzoom":14,"layout":{},"paint":{"fill-opacity":0.1,"fill-color":"rgba(91,113,91,0.88)","fill-outline-color":"#FFFFFF"},"showProperties":false},{"id":"Topo Layers/Landuse/838 - Rugby Field","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",20],"minzoom":14,"layout":{},"paint":{"fill-opacity":0.1,"fill-color":"rgba(91,113,91,0.88)","fill-outline-color":"#FFFFFF"},"showProperties":false},{"id":"Topo Layers/Landuse/814 - Football Facility","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",9],"minzoom":14,"layout":{},"paint":{"fill-opacity":0.1,"fill-color":"rgba(91,113,91,0.88)","fill-outline-color":"#FFFFFF"},"showProperties":false},{"id":"Topo Layers/Landuse/813 - Fair / Exhibition / Rodeo Grounds","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",8],"minzoom":14,"layout":{},"paint":{"fill-opacity":0.1,"fill-color":"rgba(91,113,91,0.88)"},"showProperties":false},{"id":"Topo Layers/Landuse/809 - Cricket Facility","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",7],"minzoom":14,"layout":{},"paint":{"fill-opacity":0.1,"fill-color":"rgba(91,113,91,0.88)","fill-outline-color":"#FFFFFF"},"showProperties":false},{"id":"Topo Layers/Landuse/806 - Basketball Courts","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",5],"minzoom":14,"layout":{},"paint":{"fill-opacity":0.1,"fill-color":"rgba(91,113,91,0.88)","fill-outline-color":"#FFFFFF"},"showProperties":false},{"id":"Topo Layers/Landuse/805 - Baseball Facility","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",4],"minzoom":14,"layout":{},"paint":{"fill-opacity":0.1,"fill-color":"rgba(91,113,91,0.88)","fill-outline-color":"#FFFFFF"},"showProperties":false},{"id":"Topo Layers/Landuse/803 - Athletic / Sports Field","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",3],"minzoom":14,"layout":{},"paint":{"fill-opacity":0.1,"fill-color":"rgba(91,113,91,0.88)","fill-outline-color":"#FFFFFF"},"showProperties":false},{"id":"Topo Layers/Landuse/720 - Cemetery","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",0],"minzoom":8,"layout":{},"paint":{"fill-color":"#e4e8e4"},"showProperties":false},{"id":"Topo Layers/Landuse/","type":"fill","source":"esri","source-layer":"Landuse","filter":["==","_symbol",28],"minzoom":8,"layout":{},"paint":{"fill-color":"#828282","fill-opacity":0.5,"fill-outline-color":"#6E6E6E"},"showProperties":false},{"id":"Topo Layers/Bathymetry/1/1","type":"fill","source":"esri","source-layer":"Bathymetry","filter":["==","_symbol",0],"minzoom":7,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Bathymetry/1_1/1","type":"fill","source":"esri","source-layer":"Bathymetry","filter":["==","_symbol",0],"maxzoom":7,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Bathymetry/2/1","type":"fill","source":"esri","source-layer":"Bathymetry","filter":["==","_symbol",1],"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Bathymetry/3/1","type":"fill","source":"esri","source-layer":"Bathymetry","filter":["==","_symbol",2],"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Bathymetry/4/1","type":"fill","source":"esri","source-layer":"Bathymetry","filter":["==","_symbol",3],"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Bathymetry/5/1","type":"fill","source":"esri","source-layer":"Bathymetry","filter":["==","_symbol",4],"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Waterline_9M/","type":"line","source":"esri","source-layer":"Waterline_9M","filter":["==","_symbol",0],"minzoom":8,"maxzoom":7,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/Waterline 9M","type":"line","source":"esri","source-layer":"Waterline 9M","minzoom":5,"maxzoom":6,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/Waterline 4M","type":"line","source":"esri","source-layer":"Waterline 4M","minzoom":6,"maxzoom":7,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/Waterline 1M","type":"line","source":"esri","source-layer":"Waterline 1M","minzoom":7,"maxzoom":9,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/Waterline 577k","type":"line","source":"esri","source-layer":"Waterline 577k","minzoom":9,"maxzoom":11,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Canal","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",0],"minzoom":15,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.06667,"line-dasharray":[3.75,2.5]},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Creek","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",1],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Creek_1","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",1],"minzoom":11,"maxzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Diversion","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",3],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Diversion_1","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",3],"minzoom":11,"maxzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Double Line River","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",4],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Double Line River_1","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",4],"minzoom":11,"maxzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Other","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",5],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Other_1","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",5],"minzoom":11,"maxzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/River","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",6],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/River_1","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",6],"minzoom":11,"maxzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Side Channel","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",7],"minzoom":11,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Side Channel_1","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",7],"minzoom":11,"maxzoom":11,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Stream","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",8],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Stream_1","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",8],"minzoom":11,"maxzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Tidal River","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",9],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Tidal River_1","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",9],"minzoom":11,"maxzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Unknown","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",10],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Unknown_1","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",10],"minzoom":11,"maxzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Watercourse","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",11],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/Watercourse_1","type":"line","source":"esri","source-layer":"RiverSegment_MUN","filter":["==","_symbol",11],"minzoom":11,"maxzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/Waterbody small scale/1","type":"fill","source":"esri","source-layer":"Waterbody small scale","maxzoom":7,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false,"minzoom":2},{"id":"Topo Layers/Waterbody small scale/0","type":"line","source":"esri","source-layer":"Waterbody small scale","maxzoom":7,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":{"property":"size","default":0.666667,"stops":[[887872000,0],[17578800000,0.666667]]}},"minzoom":2,"showProperties":false},{"id":"Topo Layers/Waterbody 1M/1","type":"fill","source":"esri","source-layer":"Waterbody 1M","minzoom":7,"maxzoom":9,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Water 250k/20: Not Identified / Non identifié/1","type":"fill","source":"esri","source-layer":"Water 250k","filter":["==","_symbol",0],"minzoom":9,"maxzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Water 250k/59: Permanent / Permanent/1","type":"fill","source":"esri","source-layer":"Water 250k","filter":["==","_symbol",1],"minzoom":9,"maxzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Water 250k/60: Intermittent / Intermittent/2","type":"fill","source":"esri","source-layer":"Water 250k","filter":["==","_symbol",2],"minzoom":9,"maxzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Water 250k/60: Intermittent / Intermittent/1","type":"fill","source":"esri","source-layer":"Water 250k","filter":["==","_symbol",2],"minzoom":9,"maxzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Water 250k/60: Intermittent / Intermittent/0","type":"line","source":"esri","source-layer":"Water 250k","filter":["==","_symbol",2],"minzoom":9,"maxzoom":11,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#cfd3d4","line-width":0.666667},"showProperties":false},{"id":"Topo Layers/Water 250k//1","type":"fill","source":"esri","source-layer":"Water 250k","filter":["==","_symbol",3],"minzoom":9,"maxzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Artificial Path","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",0],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Bay Inlet","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",1],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Canal","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",2],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Conduit","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",3],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Connector","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",4],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Creek","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",5],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Ditch","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",6],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Diversion","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",7],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Double Line River","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",8],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Estuary","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",9],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Flume","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",10],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Ford","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",11],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Ice Mass","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",12],"minzoom":11,"layout":{"visibility":"none"},"paint":{"fill-pattern":"Topo Layers/Community Waterbodies/Ice Mass"}},{"id":"Topo Layers/Community Waterbodies/Lake","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",13],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Marsh","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",14],"minzoom":11,"layout":{"visibility":"none"},"paint":{"fill-pattern":"Topo Layers/Community Waterbodies/Marsh"}},{"id":"Topo Layers/Community Waterbodies/None","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",15],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Ocean","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",16],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Other","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",17],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Playa","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",18],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Pond","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",19],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Rapids/2","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",20],"minzoom":11,"layout":{"visibility":"none"},"paint":{"fill-pattern":"Topo Layers/Community Waterbodies/Rapids/2"}},{"id":"Topo Layers/Community Waterbodies/Rapids/1","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",20],"minzoom":11,"layout":{"visibility":"none"},"paint":{"fill-pattern":"Topo Layers/Community Waterbodies/Rapids/1"}},{"id":"Topo Layers/Community Waterbodies/Rapids/0","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",20],"minzoom":11,"layout":{"visibility":"none"},"paint":{"fill-pattern":"Topo Layers/Community Waterbodies/Rapids/0"}},{"id":"Topo Layers/Community Waterbodies/Reef","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",21],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Reservoir","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",22],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Rise","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",23],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/River","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",24],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Sea","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",25],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Seep","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",26],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Side Channel","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",27],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Stream","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",28],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Swamp","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",29],"minzoom":11,"layout":{"visibility":"none"},"paint":{"fill-pattern":"Topo Layers/Community Waterbodies/Swamp"}},{"id":"Topo Layers/Community Waterbodies/Tidal Flat/1","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",30],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Tidal Flat/0","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",30],"minzoom":11,"layout":{"visibility":"visible"},"paint":{"fill-opacity":1,"fill-color":"#cfd3d4","fill-antialias":true,"fill-translate":[0,0],"fill-translate-anchor":"map"}},{"id":"Topo Layers/Community Waterbodies/Tidal River","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",31],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Unknown","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",32],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Watercourse","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",33],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/Waterfall/2","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",34],"minzoom":11,"layout":{},"paint":{"fill-pattern":"Topo Layers/Community Waterbodies/Waterfall/2"}},{"id":"Topo Layers/Community Waterbodies/Waterfall/1","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",34],"minzoom":11,"layout":{},"paint":{"fill-pattern":"Topo Layers/Community Waterbodies/Waterfall/1"}},{"id":"Topo Layers/Community Waterbodies/Waterfall/0","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",34],"minzoom":11,"layout":{},"paint":{"fill-color":"#cfd3d4"}},{"id":"Topo Layers/Community Waterbodies/Dam","type":"fill","source":"esri","source-layer":"Community Waterbodies","filter":["==","_symbol",35],"minzoom":11,"layout":{},"paint":{"fill-color":"#9C9C9C","fill-outline-color":"#686868"}},{"id":"Topo Layers/Surface/300 - Pool / Water Fountain","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",13],"minzoom":12,"layout":{},"paint":{"fill-color":"#cfd3d4","fill-outline-color":"#cfd3d4"},"showProperties":false},{"id":"Topo Layers/Surface/209 - Walking Path","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",12],"minzoom":12,"layout":{},"paint":{"fill-color":"#f2f2f1"},"showProperties":false},{"id":"Topo Layers/Surface/208 - Street","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",11],"minzoom":12,"layout":{"visibility":"none"},"paint":{"fill-color":"rgba(234,233,231,0.6)"},"showProperties":false},{"id":"Topo Layers/Surface/207 - Sidewalk","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",10],"minzoom":12,"layout":{},"paint":{"fill-color":"#f2f2f1"},"showProperties":false},{"id":"Topo Layers/Surface/206 - Parking Lot","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",9],"minzoom":12,"layout":{"visibility":"none"},"paint":{"fill-color":"#f2f2f1"},"showProperties":false},{"id":"Topo Layers/Surface/201 - Asphalt","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",8],"minzoom":12,"layout":{"visibility":"none"},"paint":{"fill-color":"rgba(225,225,225,0.7)"},"showProperties":false},{"id":"Topo Layers/Surface/112 - Glacier ","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",7],"minzoom":10,"layout":{"visibility":"none"},"paint":{"fill-pattern":"Topo Layers/Surface/112 - Glacier "}},{"id":"Topo Layers/Surface/110 - Deck/Patio","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",6],"minzoom":12,"layout":{},"paint":{"fill-color":"#f2f2f1","fill-outline-color":"#f2f2f1"},"showProperties":false},{"id":"Topo Layers/Surface/109 - Turf","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",5],"minzoom":14,"layout":{"visibility":"none"},"paint":{"fill-opacity":0.3,"fill-color":"rgba(91,113,91,0.88)","fill-outline-color":"#FFFFFF"},"showProperties":false},{"id":"Topo Layers/Surface/108 - Sand","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",4],"minzoom":12,"layout":{},"paint":{"fill-color":"#f2f2f1"},"showProperties":false},{"id":"Topo Layers/Surface/103 - Gravel/2","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",3],"minzoom":14,"layout":{"visibility":"none"},"paint":{"fill-pattern":"Topo Layers/Surface/103 - Gravel/2"}},{"id":"Topo Layers/Surface/103 - Gravel/1","type":"line","source":"esri","source-layer":"Surface","filter":["==","_symbol",3],"minzoom":14,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"rgba(204,204,204,0.6)","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/Surface/103 - Gravel/0","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",3],"minzoom":14,"layout":{"visibility":"none"},"paint":{"fill-pattern":"Topo Layers/Surface/103 - Gravel/0"}},{"id":"Topo Layers/Surface/102 - Grass","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",2],"minzoom":12,"layout":{},"paint":{"fill-color":"#e4e8e4"},"showProperties":false},{"id":"Topo Layers/Surface/101 - Dirt/1","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",1],"minzoom":12,"layout":{},"paint":{"fill-color":"#f2f2f1"},"showProperties":false},{"id":"Topo Layers/Surface/100 - Clay/1","type":"fill","source":"esri","source-layer":"Surface","filter":["==","_symbol",0],"minzoom":12,"layout":{},"paint":{"fill-color":"rgba(91,113,91,0.88)"},"showProperties":false},{"id":"Topo Layers/Surface/100 - Clay/0","type":"line","source":"esri","source-layer":"Surface","filter":["==","_symbol",0],"minzoom":12,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"rgba(91,113,91,0.88)","line-width":{"stops":[[12,1.06667],[17,1.06667],[18,1.06667]]}},"showProperties":false},{"id":"Topo Layers/Wetland//1","type":"fill","source":"esri","source-layer":"Wetland","filter":["==","_symbol",0],"minzoom":10,"layout":{"visibility":"none"},"paint":{"fill-pattern":"Topo Layers/Wetland//1"}},{"id":"Topo Layers/Piers/2","type":"fill","source":"esri","source-layer":"Piers","minzoom":13,"layout":{},"paint":{"fill-color":"rgba(204,204,204,0.6)"},"showProperties":false},{"id":"Topo Layers/Piers/1","type":"fill","source":"esri","source-layer":"Piers","minzoom":13,"layout":{},"paint":{"fill-color":"rgba(204,204,204,0.6)"},"showProperties":false},{"id":"Topo Layers/Piers/0","type":"line","source":"esri","source-layer":"Piers","minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"rgba(204,204,204,0.6)","line-width":0.666667},"showProperties":false},{"id":"Topo Layers/International / Provincial Boundaries:1/1/1","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:1","filter":["==","_symbol",0],"minzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#dddedb","line-width":6.66667}},{"id":"Topo Layers/International / Provincial Boundaries:1/1/0","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:1","filter":["==","_symbol",0],"minzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#9c9c9c","line-width":1.04,"line-dasharray":[8.71795,6.15385]}},{"id":"Topo Layers/International / Provincial Boundaries:1/1_2/1","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:1","filter":["==","_symbol",0],"minzoom":1,"maxzoom":2,"layout":{"line-join":"round"},"paint":{"line-color":"#CCCCCC","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/International / Provincial Boundaries:1/1_1/1","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:1","filter":["==","_symbol",0],"minzoom":2,"maxzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#dddedb","line-width":3.33333}},{"id":"Topo Layers/International / Provincial Boundaries:1/1_1/0","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:1","filter":["==","_symbol",0],"minzoom":2,"maxzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":{"base":1,"stops":[[5,"#cccccc"],[7,"#9c9c9c"]]},"line-width":0.624,"line-dasharray":[8.71795,6.15385]},"showProperties":false},{"id":"Topo Layers/International / Provincial Boundaries:1/2/1","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:1","filter":["==","_symbol",1],"minzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#dfe0dd","line-width":{"stops":[[6,5.06667],[10,5.33333],[15,5.33333],[18,5.33333]]}},"showProperties":false},{"id":"Topo Layers/International / Provincial Boundaries:1/2/0","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:1","filter":["==","_symbol",1],"minzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":{"base":1,"stops":[[7,"#c8c8c8"],[12,"#9c9c9c"]]},"line-width":{"stops":[[6,0.633333],[10,0.666667],[15,0.666667],[18,0.666667]]},"line-dasharray":[13.6,9.6]},"showProperties":false},{"id":"Topo Layers/International / Provincial Boundaries:1/2_2/1","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:1","filter":["==","_symbol",1],"minzoom":3,"maxzoom":7,"layout":{"line-join":"round"},"paint":{"line-color":"rgba(204,204,204,0.8)","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/International / Provincial Boundaries:1/2_1/1","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:1","filter":["==","_symbol",1],"minzoom":7,"maxzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#dddedb","line-width":4},"showProperties":false},{"id":"Topo Layers/International / Provincial Boundaries:1/2_1/0","type":"line","source":"esri","source-layer":"International / Provincial Boundaries:1","filter":["==","_symbol",1],"minzoom":7,"maxzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#9c9c9c","line-width":0.266667,"line-dasharray":[25,25]}},{"id":"Topo Layers/Trails/","type":"symbol","source":"esri","source-layer":"Trails","filter":["==","_symbol",0],"minzoom":15,"layout":{"symbol-placement":"line","icon-image":"Topo Layers/Trails/","symbol-spacing":10.6667,"icon-rotation-alignment":"map","icon-allow-overlap":true},"paint":{"icon-color":"#B8B09C","icon-opacity":0.6},"showProperties":false},{"id":"Topo Layers/Road Segment/Ferry","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",9],"minzoom":9,"layout":{"line-join":"round"},"paint":{"line-color":"#ebedeb","line-dasharray":[4.54545,1.81818],"line-width":1.46667},"showProperties":false},{"id":"Topo Layers/Road Segment/Highways/1","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",0],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#e3e5e2","line-width":{"stops":[[0,2.66667],[5,3.33333],[9,3.33333],[10,3.33333],[11,4],[12,4.26667],[13,6.10667],[14,6.25333],[15,10.5867],[16,18.6667],[18,24]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Arterial/1","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",1],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#e3e5e2","line-width":{"stops":[[0,1.33333],[9,1.33333],[10,1.33333],[11,1.33333],[12,4],[13,4],[14,4],[15,8],[16,16],[17,24],[18,25.3333]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Collector/1","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",2],"minzoom":13,"layout":{"line-join":"round"},"paint":{"line-color":"#e3e5e2","line-width":{"stops":[[12,1.33333],[13,3.33333],[14,4.26667],[15,6.66667],[16,7.6],[17,14.6667],[18,21.3333]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Local Roads/1","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",3],"minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#e3e5e2","line-width":{"stops":[[12,1.33333],[13,3.33333],[14,4],[15,6.66667],[16,7.6],[17,14.6667],[18,21.3333]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/HIghway Ramps/1","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",4],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#e3e5e2","line-width":{"stops":[[0,13.7793],[9,2.84],[10,2.84],[11,2.84],[12,2.84],[13,3.33333],[14,6.05333],[15,6.05333],[16,6.8],[17,7.33333],[18,9.33333]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Arterial Ramps/1","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",5],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#e3e5e2","line-width":{"stops":[[0,13.7793],[9,2.64],[10,2.64],[11,2.64],[12,2.66667],[13,3.33333],[14,5.33333],[15,5.33333],[16,6.8],[17,7.33333],[18,9.33333]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Local Ramps/1","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",6],"minzoom":13,"layout":{"line-join":"round"},"paint":{"line-color":"#e3e5e2","line-width":{"stops":[[12,1.33333],[13,3.77333],[14,4.72],[15,7.18667],[16,7.93333],[17,14.6667],[18,21.6]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Recreation/1","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",7],"minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#e3e5e2","line-width":{"stops":[[12,1.33333],[13,2.64],[14,2.64],[15,3.77333],[16,4.53333],[17,9.33333],[18,11.0667]]},"line-dasharray":[0.60241,0.361446]},"showProperties":false},{"id":"Topo Layers/Road Segment/Service/1","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",8],"minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#e3e5e2","line-width":{"stops":[[12,1.33333],[13,2.64],[14,2.64],[15,3.77333],[16,4.53333],[17,8],[18,11.1129]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Service/0","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",8],"minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#FDFDFD","line-width":{"stops":[[12,1.09336],[13,2.16485],[14,2.16485],[15,3.0942],[16,3.71741],[17,6.56014],[18,9.1128]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Recreation/0","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",7],"minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#FFFFFF","line-width":{"stops":[[12,1.01205],[13,2.00386],[14,2.00386],[15,2.8641],[16,3.44096],[17,7.08434],[18,8.4]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Local Ramps/0","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",6],"minzoom":13,"layout":{},"paint":{"line-color":"#FDFDFD","line-width":{"stops":[[12,1.14872],[13,3.25087],[14,4.06645],[15,6.19158],[16,6.83486],[17,12.6359],[18,18.6092]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Arterial Ramps/0","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",5],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#ffffff","line-width":{"stops":[[0,9.33333],[9,1.78819],[10,1.78819],[11,1.78819],[12,1.80625],[13,2.25781],[14,3.6125],[15,3.6125],[16,4.60593],[17,4.96718],[18,6.32187]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/HIghway Ramps/0","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",4],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#ffffff","line-width":{"stops":[[0,9.33333],[9,1.92365],[10,1.92365],[11,1.92365],[12,1.92365],[13,2.25781],[14,4.10018],[15,4.10018],[16,4.60593],[17,4.96718],[18,6.32187]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Local Roads/0","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",3],"minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#FDFDFD","line-width":{"stops":[[12,1.12821],[13,2.82051],[14,3.38462],[15,5.64103],[16,6.43077],[17,12.4103],[18,18.0513]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Local Roads_1/0","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",3],"minzoom":12,"maxzoom":13,"layout":{},"paint":{"line-color":"#fafafa","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/Road Segment/Collector/0","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",2],"minzoom":13,"layout":{},"paint":{"line-color":"#FDFDFD","line-width":{"stops":[[12,1.12821],[13,2.82051],[14,3.61026],[15,5.64103],[16,6.43077],[17,12.4103],[18,18.0513]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Collector_1/0","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",2],"minzoom":12,"maxzoom":13,"layout":{},"paint":{"line-color":"#fafafa","line-width":1.33333},"showProperties":false},{"id":"Topo Layers/Road Segment/Arterial/0","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",1],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#ffffff","line-width":{"stops":[[0,0.985372],[9,0.985372],[10,0.985372],[11,0.985372],[12,2.95612],[13,2.95612],[14,2.95612],[15,5.91223],[16,11.8245],[17,17.7367],[18,18.7221]]}},"showProperties":false},{"id":"Topo Layers/Road Segment/Highways/0","type":"line","source":"esri","source-layer":"Road Segment","filter":["==","_symbol",0],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#ffffff","line-width":{"stops":[[0,1.48148],[5,1.85185],[9,1.85185],[10,1.85185],[11,2.22222],[12,2.37037],[13,3.39259],[14,3.47407],[15,5.88148],[16,10.3704],[18,13.3333]]}},"showProperties":false},{"id":"Topo Layers/Small scale roads/Major Arterial","type":"line","source":"esri","source-layer":"Small scale roads","filter":["==","_symbol",0],"minzoom":7,"maxzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#fafafa"},"showProperties":false},{"id":"Topo Layers/Small scale roads/Major Arterial_1","type":"line","source":"esri","source-layer":"Small scale roads","filter":["==","_symbol",0],"minzoom":6,"maxzoom":7,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#fafafa"},"showProperties":false},{"id":"Topo Layers/Small scale roads/Freeway; Highway Ramp; Highway","type":"line","source":"esri","source-layer":"Small scale roads","filter":["==","_symbol",1],"minzoom":7,"maxzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#fafafa"},"showProperties":false},{"id":"Topo Layers/Small scale roads/Freeway; Highway Ramp; Highway_1","type":"line","source":"esri","source-layer":"Small scale roads","filter":["==","_symbol",1],"minzoom":6,"maxzoom":7,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#fafafa"},"showProperties":false},{"id":"Topo Layers/Rail/Connecting/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",0],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Connecting/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",0],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Rail/Crossover/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",1],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Crossover/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",1],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Rail/Ferry Route/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",2],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Ferry Route/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",2],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Rail/Main/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",3],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Main/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",3],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Rail/Other/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",4],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Other/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",4],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Rail/Siding/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",5],"minzoom":12,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Siding/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",5],"minzoom":12,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Rail/Spur/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",6],"minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Spur/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",6],"minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Rail/Spur_1/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",6],"minzoom":12,"maxzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Spur_1/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",6],"minzoom":12,"maxzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Rail/Unknown/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",7],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Unknown/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",7],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Rail/Wye/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",8],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Wye/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",8],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Rail/Yard/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",9],"minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Yard/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",9],"minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Rail/Yard_1/1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",9],"minzoom":12,"maxzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail/Yard_1/0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",9],"minzoom":12,"maxzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"rgba(230,230,230,0.5)","line-dasharray":[10.5839,12.3479],"line-width":0.755867},"showProperties":false},{"id":"Topo Layers/Rail//1","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",10],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddda","line-width":1.88973},"showProperties":false},{"id":"Topo Layers/Rail//0","type":"line","source":"esri","source-layer":"Rail","filter":["==","_symbol",10],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#efefef","line-width":0.755867,"line-dasharray":[10.5839,12.3479]}},{"id":"Topo Layers/Ferry Lines","type":"line","source":"esri","source-layer":"Ferry Lines","minzoom":9,"layout":{"line-join":"round"},"paint":{"line-color":"#ebedeb","line-width":1.46667,"line-dasharray":[4.54545,1.81818]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/General/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",0],"minzoom":15,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/General/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",0],"minzoom":15,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/General/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",0],"minzoom":15,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#BFBFBF","line-width":0.453333},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/General_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",0],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/General_1/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",0],"minzoom":13,"maxzoom":15,"layout":{},"paint":{"fill-color":"#dfe1e2"}},{"id":"Topo Layers/BuildingFootprint/Government/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",1],"minzoom":16,"layout":{},"paint":{"fill-color":"#efefef","fill-translate":[0.666667,0.666667]}},{"id":"Topo Layers/BuildingFootprint/Government/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",1],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Government/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",1],"minzoom":16,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddde","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Government_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",1],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Government_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",1],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Medical/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",2],"minzoom":16,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Medical/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",2],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Medical/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",2],"minzoom":16,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#BFBFBF","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Medical_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",2],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Medical_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",2],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Education/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",3],"minzoom":16,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Education/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",3],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Education/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",3],"minzoom":16,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#BFBFBF","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Education_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",3],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Education_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",3],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Transportation/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",4],"minzoom":16,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Transportation/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",4],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Transportation/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",4],"minzoom":16,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddde","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Transportation_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",4],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Transportation_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",4],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Commercial/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",5],"minzoom":16,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Commercial/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",5],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Commercial/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",5],"minzoom":16,"layout":{"visibility":"none","line-cap":"round","line-join":"round"},"paint":{"line-color":"#dcddde","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Commercial_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",5],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Commercial_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",5],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Religious/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",6],"minzoom":16,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Religious/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",6],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Religious/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",6],"minzoom":16,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#BFBFBF","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Religious_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",6],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Religious_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",6],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Recreation/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",7],"minzoom":16,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Recreation/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",7],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Recreation/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",7],"minzoom":16,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#BFBFBF","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Recreation_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",7],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Recreation_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",7],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Cultural/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",8],"minzoom":16,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Cultural/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",8],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Cultural/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",8],"minzoom":16,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#BFBFBF","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Cultural_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",8],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Cultural_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",8],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Hotel/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",9],"minzoom":16,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Hotel/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",9],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Hotel/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",9],"minzoom":16,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#BFBFBF","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Hotel_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",9],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Hotel_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",9],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Airport/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",10],"minzoom":16,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Airport/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",10],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Airport/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",10],"minzoom":16,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#BFBFBF","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Airport_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",10],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Airport_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",10],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Industrial/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",11],"minzoom":16,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Industrial/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",11],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Industrial/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",11],"minzoom":16,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#BFBFBF","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Industrial_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",11],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Industrial_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",11],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Community Center/2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",12],"minzoom":16,"layout":{},"paint":{"fill-color":"#dcddde","fill-translate":[0.666667,0.666667]},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Community Center/1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",12],"minzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/BuildingFootprint/Community Center/0","type":"line","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",12],"minzoom":16,"layout":{"line-cap":"round","line-join":"round","visibility":"none"},"paint":{"line-color":"#BFBFBF","line-width":0.466667},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Community Center_2","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",12],"minzoom":11,"maxzoom":13,"layout":{},"paint":{"fill-color":"#dcddde"},"showProperties":false},{"id":"Topo Layers/BuildingFootprint/Community Center_1","type":"fill","source":"esri","source-layer":"BuildingFootprint","filter":["==","_symbol",12],"minzoom":13,"maxzoom":16,"layout":{},"paint":{"fill-color":"#dfe1e2","fill-outline-color":"#efefef"}},{"id":"Topo Layers/Tree","type":"symbol","source":"esri","source-layer":"Tree","minzoom":17,"layout":{"icon-image":"Topo Layers/Tree","icon-allow-overlap":true,"visibility":"none"},"paint":{"icon-color":"#D1DCB6"},"showProperties":false},{"id":"Topo Layers/Powerlines/Powerline/1","type":"line","source":"esri","source-layer":"Powerlines","filter":["==","_symbol",0],"minzoom":13,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#9C9C9C","line-width":1.33333,"line-opacity":0.4}},{"id":"Topo Layers/Powerlines/Powerline/0","type":"symbol","source":"esri","source-layer":"Powerlines","filter":["==","_symbol",0],"minzoom":13,"layout":{"symbol-placement":"line","icon-image":"Topo Layers/Powerlines/Powerline/0","symbol-spacing":53.3333,"icon-rotation-alignment":"map","icon-allow-overlap":true},"paint":{"icon-color":"#9C9C9C","icon-opacity":0.4}},{"id":"Provinces/","type":"symbol","source":"esri","source-layer":"Provinces","filter":["==","_symbol",0],"layout":{"icon-image":"Provinces/","icon-allow-overlap":true},"paint":{"icon-color":"rgba(130,130,130,0)"},"showProperties":false},{"id":"Site Address Point","type":"symbol","source":"esri","source-layer":"Site Address Point","minzoom":17,"layout":{"icon-image":"Site Address Point","icon-allow-overlap":true},"paint":{"icon-color":"rgba(118,138,63,0)"},"showProperties":false},{"id":"Topo Layers/Landforms/label/Long 9pt","type":"symbol","source":"esri","source-layer":"Landforms/label","filter":["all",["==","_label_class",4],["==","$type","LineString"]],"minzoom":9,"layout":{"symbol-placement":"line","symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":12,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landforms/label/Long 9pt/point","type":"symbol","source":"esri","source-layer":"Landforms/label","filter":["all",["==","_label_class",4],["==","$type","Point"]],"minzoom":9,"layout":{"text-font":["Arial Italic"],"text-size":12,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landforms/label/Oblong 9pt","type":"symbol","source":"esri","source-layer":"Landforms/label","filter":["all",["==","_label_class",2],["==","$type","LineString"]],"minzoom":9,"layout":{"symbol-placement":"line","symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":12,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landforms/label/Oblong 9pt/point","type":"symbol","source":"esri","source-layer":"Landforms/label","filter":["all",["==","_label_class",2],["==","$type","Point"]],"minzoom":9,"layout":{"text-font":["Arial Italic"],"text-size":12,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Point of Interest/label/First Nations Reserve / Hamlet","type":"symbol","source":"esri","source-layer":"Point of Interest","minzoom":13,"layout":{"text-font":["Palatino Linotype Bold"],"text-size":10.6667,"text-anchor":"bottom-left","text-offset":[0.0883883,0.211612],"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E","text-halo-color":"rgba(255,255,255,0.99)","text-halo-width":1.33333},"showProperties":false},{"id":"Topo Layers/Point of Interest/label/General Water Feature","type":"symbol","source":"esri","source-layer":"Point of Interest","minzoom":13,"layout":{"text-size":10.6667,"text-font":["Arial Italic"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Landuse/label/Airport","type":"symbol","source":"esri","source-layer":"Landuse/label","filter":["==","_label_class",0],"minzoom":12,"layout":{"text-font":["Arial Regular"],"text-size":11.3333,"text-letter-spacing":0.09,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/BuildingFootprint/label/BuildingFootprint","type":"symbol","source":"esri","source-layer":"BuildingFootprint/label","minzoom":11,"layout":{"text-size":10.6667,"text-font":["Arial Regular"],"text-letter-spacing":0.09,"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":0.7},"showProperties":false},{"id":"Topo Layers/Point of Interest/label/General Feature","type":"symbol","source":"esri","source-layer":"Point of Interest","minzoom":13,"layout":{"text-size":10.6667,"text-font":["Arial Regular"],"text-letter-spacing":0.09,"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.0883883,0.211612],"text-field":"{_name}"},"paint":{"text-color":"#939d8c","text-halo-color":"#ebedeb","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Landforms/label/Oblong 10pt","type":"symbol","source":"esri","source-layer":"Landforms/label","filter":["all",["==","_label_class",0],["==","$type","LineString"]],"minzoom":9,"layout":{"symbol-placement":"line","symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":13.3333,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landforms/label/Oblong 10pt/point","type":"symbol","source":"esri","source-layer":"Landforms/label","filter":["all",["==","_label_class",0],["==","$type","Point"]],"minzoom":9,"layout":{"text-font":["Arial Italic"],"text-size":13.3333,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landforms/label/Roundish 9pt","type":"symbol","source":"esri","source-layer":"Landforms/label","filter":["==","_label_class",3],"minzoom":9,"layout":{"text-font":["Arial Italic"],"text-size":12,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landforms/label/Roundish 10pt","type":"symbol","source":"esri","source-layer":"Landforms/label","filter":["==","_label_class",1],"minzoom":9,"layout":{"text-font":["Arial Italic"],"text-size":13.3333,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landforms/label/Long 10pt","type":"symbol","source":"esri","source-layer":"Landforms/label","filter":["all",["==","_label_class",5],["==","$type","LineString"]],"minzoom":9,"layout":{"symbol-placement":"line","symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":13.3333,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landforms/label/Long 10pt/point","type":"symbol","source":"esri","source-layer":"Landforms/label","filter":["all",["==","_label_class",5],["==","$type","Point"]],"minzoom":9,"layout":{"text-font":["Arial Italic"],"text-size":13.3333,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Trails/label/Trail","type":"symbol","source":"esri","source-layer":"Trails/label","filter":["==","_label_class",0],"minzoom":15,"layout":{"text-size":9,"text-font":["Arial Regular"],"text-letter-spacing":0.08,"text-optional":true,"symbol-placement":"line","symbol-spacing":288,"text-anchor":"bottom","text-offset":[0,0.05],"text-field":"{_name}"},"paint":{"text-color":"#666666","text-halo-color":"#ffffff","text-halo-width":1},"showProperties":false},{"id":"Topo Layers/First Nations/label/SmallReserves","type":"symbol","source":"esri","source-layer":"First Nations/label","filter":["==","_label_class",1],"minzoom":11,"layout":{"text-size":13.3333,"text-font":["Arial Regular"],"text-letter-spacing":0.06,"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#595959","text-halo-color":"#efefef","text-halo-width":1.33333}},{"id":"Topo Layers/First Nations/label/Class 1","type":"symbol","source":"esri","source-layer":"First Nations/label","filter":["==","_label_class",0],"minzoom":10,"layout":{"text-size":13.3333,"text-font":["Arial Regular"],"text-letter-spacing":0.06,"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#595959","text-halo-color":"#efefef","text-halo-width":1}},{"id":"Topo Layers/Small Scale Landuse/label/National Parks","type":"symbol","source":"esri","source-layer":"Small Scale Landuse/label","filter":["==","_label_class",5],"minzoom":5,"maxzoom":8,"layout":{"text-font":["Arial Regular"],"text-size":10.6667,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Small Scale Landuse/label/Nat/Prov Park - QC","type":"symbol","source":"esri","source-layer":"Small Scale Landuse/label","filter":["==","_label_class",4],"minzoom":5,"maxzoom":8,"layout":{"text-font":["Tahoma Regular"],"text-size":10.6667,"text-field":"{_name}","text-optional":true},"paint":{}},{"id":"Topo Layers/Small Scale Landuse/label/Provincial Park","type":"symbol","source":"esri","source-layer":"Small Scale Landuse/label","filter":["==","_label_class",1],"minzoom":5,"maxzoom":8,"layout":{"text-font":["Arial Regular"],"text-size":10.6667,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landuse/label/NatPark - Victoria Islands","type":"symbol","source":"esri","source-layer":"Landuse/label","filter":["==","_label_class",10],"minzoom":10,"layout":{"text-font":["Arial Regular"],"text-size":10.6667,"text-letter-spacing":0.06,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landuse/label/Provincial Park - QC","type":"symbol","source":"esri","source-layer":"Landuse/label","filter":["==","_label_class",9],"minzoom":8,"layout":{"text-font":["Arial Regular"],"text-size":10.6667,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landuse/label/Provincial Park","type":"symbol","source":"esri","source-layer":"Landuse/label","filter":["==","_label_class",8],"minzoom":8,"layout":{"text-size":10.6667,"text-font":["Arial Regular"],"text-allow-overlap":true,"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#939d8c","text-halo-color":"#ebedeb","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Landuse/label/MedScaleParks","type":"symbol","source":"esri","source-layer":"Landuse/label","filter":["==","_label_class",7],"minzoom":13,"maxzoom":14,"layout":{"text-size":9.33333,"text-font":["Arial Regular"],"text-letter-spacing":0.06,"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#939d8c","text-halo-color":"#ebedeb","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Landuse/label/SmallScaleParks","type":"symbol","source":"esri","source-layer":"Landuse/label","filter":["==","_label_class",6],"minzoom":12,"maxzoom":13,"layout":{"text-size":12,"text-font":["Arial Regular"],"text-letter-spacing":0.06,"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#939d8c","text-halo-color":"#ebedeb","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Landuse/label/SmallScaleGolf","type":"symbol","source":"esri","source-layer":"Landuse/label","filter":["==","_label_class",5],"minzoom":12,"maxzoom":14,"layout":{"text-font":["Arial Regular"],"text-size":11.3333,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landuse/label/SmallScaleCemetery","type":"symbol","source":"esri","source-layer":"Landuse/label","filter":["==","_label_class",4],"minzoom":13,"maxzoom":14,"layout":{"text-font":["Arial Regular"],"text-size":10.6667,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Landuse/label/Landuse","type":"symbol","source":"esri","source-layer":"Landuse/label","filter":["==","_label_class",3],"minzoom":14,"layout":{"text-size":10.6667,"text-font":["Arial Regular"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#939d8c","text-halo-color":"#ebedeb","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Landuse/label/Parks","type":"symbol","source":"esri","source-layer":"Landuse/label","filter":["==","_label_class",2],"minzoom":14,"layout":{"text-size":10.6667,"text-font":["Arial Regular"],"text-letter-spacing":0.06,"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#939d8c","text-halo-color":"#ebedeb","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Landuse/label/National Park","type":"symbol","source":"esri","source-layer":"Landuse/label","filter":["==","_label_class",1],"minzoom":8,"layout":{"text-font":["Arial Regular"],"text-size":10.6667,"text-letter-spacing":0.06,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#4E4E4E"}},{"id":"Topo Layers/Waterline 4M/label/Class 1","type":"symbol","source":"esri","source-layer":"Waterline 4M/label","minzoom":6,"maxzoom":7,"layout":{"text-size":12,"text-font":["Arial Italic"],"text-letter-spacing":0.1,"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-anchor":"bottom","text-offset":[0,0.188889],"text-field":"{_name}"},"paint":{"text-color":"#cfd3d4","text-halo-color":"#efefef"},"showProperties":false},{"id":"Topo Layers/Waterline 1M/label/Water 1M-288k","type":"symbol","source":"esri","source-layer":"Waterline 1M/label","filter":["==","_label_class",1],"minzoom":8,"maxzoom":9,"layout":{"visibility":"none","text-size":10.6667,"text-font":["Arial Italic"],"text-letter-spacing":0.1,"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-anchor":"bottom","text-offset":[0,0.175],"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Waterline 1M/label/Class 1","type":"symbol","source":"esri","source-layer":"Waterline 1M/label","filter":["==","_label_class",0],"minzoom":7,"maxzoom":8,"layout":{"visibility":"none","text-size":10.6667,"text-font":["Arial Italic"],"text-letter-spacing":0.1,"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-anchor":"bottom","text-offset":[0,0.175],"text-field":"{_name}"},"paint":{"text-color":"#cfd3d4","text-halo-color":"#efefef"},"showProperties":false},{"id":"Topo Layers/Waterline Labels/label/Water 1M-288k","type":"symbol","source":"esri","source-layer":"Waterline Labels/label","filter":["==","_label_class",1],"minzoom":9,"maxzoom":11,"layout":{"visibility":"none","text-size":10.6667,"text-font":["Arial Italic"],"text-letter-spacing":0.1,"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-anchor":"bottom","text-offset":[0,0.175],"text-field":"{_name}"},"paint":{"text-color":"#cfd3d4","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/RiverSegment_MUN/label/Stream or River","type":"symbol","source":"esri","source-layer":"RiverSegment_MUN/label","filter":["==","_label_class",1],"minzoom":11,"layout":{"text-size":10.6667,"text-font":["Arial Italic"],"text-letter-spacing":0.1,"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-anchor":"bottom","text-offset":[0,0.175],"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1},"showProperties":false},{"id":"Topo Layers/Waterbody_CANVEC1M/label/Rivers","type":"symbol","source":"esri","source-layer":"Waterbody_CANVEC1M/label","filter":["all",["==","_label_class",3],["==","$type","LineString"]],"minzoom":9,"maxzoom":11,"layout":{"text-size":10.6667,"text-font":["Arial Italic"],"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Waterbody_CANVEC1M/label/Rivers/point","type":"symbol","source":"esri","source-layer":"Waterbody_CANVEC1M/label","filter":["all",["==","_label_class",3],["==","$type","Point"]],"minzoom":9,"maxzoom":11,"layout":{"text-size":10.6667,"text-font":["Palatino Linotype Bold Italic"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Waterbody_CANVEC1M/label/All lakes","type":"symbol","source":"esri","source-layer":"Waterbody_CANVEC1M/label","filter":["==","_label_class",2],"minzoom":9,"maxzoom":11,"layout":{"text-size":10,"text-font":["Arial Italic"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#888f91","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1}},{"id":"Topo Layers/Waterbody_CANVEC1M/label/Lakes","type":"symbol","source":"esri","source-layer":"Waterbody_CANVEC1M/label","filter":["==","_label_class",1],"minzoom":6,"maxzoom":9,"layout":{"text-size":10,"text-font":["Arial Italic"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#888f91","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1}},{"id":"Topo Layers/Waterbody_CANVEC1M/label/Class 1","type":"symbol","source":"esri","source-layer":"Waterbody_CANVEC1M/label","filter":["==","_label_class",0],"minzoom":4.62,"maxzoom":9,"layout":{"text-size":10,"text-font":["Arial Italic"],"text-letter-spacing":0.1,"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#888f91","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1}},{"id":"Topo Layers/Community Waterbodies/label/SmallLake/Ponds","type":"symbol","source":"esri","source-layer":"Community Waterbodies/label","filter":["==","_label_class",7],"minzoom":12,"layout":{"text-size":11.3333,"text-font":["Arial Italic"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/label/Lake/Ponds","type":"symbol","source":"esri","source-layer":"Community Waterbodies/label","filter":["==","_label_class",6],"minzoom":12,"layout":{"text-size":11.3333,"text-font":["Arial Italic"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/label/Ponds","type":"symbol","source":"esri","source-layer":"Community Waterbodies/label","filter":["==","_label_class",5],"minzoom":14,"layout":{"text-size":9.33333,"text-font":["Arial Italic"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#888f91","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1}},{"id":"Topo Layers/Community Waterbodies/label/Bays","type":"symbol","source":"esri","source-layer":"Community Waterbodies/label","filter":["==","_label_class",4],"minzoom":11,"layout":{"text-size":10.6667,"text-font":["Arial Italic"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#888f91","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1}},{"id":"Topo Layers/Community Waterbodies/label/Sea/Ocean","type":"symbol","source":"esri","source-layer":"Community Waterbodies/label","filter":["==","_label_class",3],"minzoom":11,"layout":{"text-size":13.3333,"text-font":["Arial Italic"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Community Waterbodies/label/LargeLakes","type":"symbol","source":"esri","source-layer":"Community Waterbodies/label","filter":["==","_label_class",2],"minzoom":11,"layout":{"text-size":12,"text-font":["Arial Italic"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#888f91","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1}},{"id":"Topo Layers/Community Waterbodies/label/Rivers","type":"symbol","source":"esri","source-layer":"Community Waterbodies/label","filter":["all",["==","_label_class",1],["==","$type","LineString"]],"minzoom":11,"layout":{"text-size":12,"text-font":["Arial Italic"],"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-field":"{_name}"},"paint":{"text-color":"#888f91","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1}},{"id":"Topo Layers/Community Waterbodies/label/Rivers/point","type":"symbol","source":"esri","source-layer":"Community Waterbodies/label","filter":["all",["==","_label_class",1],["==","$type","Point"]],"minzoom":11,"layout":{"text-size":12,"text-font":["Arial Italic"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Island/label/LargeIslands - LargeScale","type":"symbol","source":"esri","source-layer":"Island/label","filter":["==","_label_class",2],"minzoom":11,"layout":{"text-size":18.6667,"text-font":["Arial Italic"],"text-letter-spacing":0.11,"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":2},"showProperties":false},{"id":"Topo Layers/Island/label/Islands - Large","type":"symbol","source":"esri","source-layer":"Island/label","filter":["==","_label_class",1],"minzoom":5,"maxzoom":11,"layout":{"text-size":13.3333,"text-font":["Arial Italic"],"text-letter-spacing":0.09,"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":2,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Island/label/Class 1","type":"symbol","source":"esri","source-layer":"Island/label","filter":["==","_label_class",0],"minzoom":12,"layout":{"text-size":10.6667,"text-font":["Arial Regular"],"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":2,"text-halo-blur":1}},{"id":"Topo Layers/Road Segment/label/Ferry","type":"symbol","source":"esri","source-layer":"Road Segment/label","filter":["==","_label_class",7],"minzoom":9,"layout":{"text-size":10,"text-font":["Arial Regular"],"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-anchor":"bottom","text-offset":[0,0.166667],"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Road Segment/label/Service/Rec/Resource","type":"symbol","source":"esri","source-layer":"Road Segment/label","filter":["==","_label_class",6],"minzoom":13,"layout":{"text-size":10.6667,"text-font":["Arial Regular"],"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-field":"{_name}"},"paint":{"text-color":"#666666","text-halo-color":"#FFFFFF","text-halo-width":1.33333},"showProperties":false},{"id":"Topo Layers/Road Segment/label/Collector/Local","type":"symbol","source":"esri","source-layer":"Road Segment/label","filter":["==","_label_class",5],"minzoom":13,"layout":{"text-size":10,"text-font":["Arial Regular"],"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-field":"{_name}"},"paint":{"text-color":"#666666","text-halo-color":"#FFFFFF","text-halo-width":1},"showProperties":false},{"id":"Topo Layers/Road Segment/label/Arterial","type":"symbol","source":"esri","source-layer":"Road Segment/label","filter":["==","_label_class",4],"minzoom":12,"layout":{"text-size":{"base":1,"stops":[[0,10],[18,10]]},"text-font":["Arial Regular"],"text-letter-spacing":0.01,"text-optional":true,"symbol-placement":"line","symbol-spacing":576,"text-field":"{_name}"},"paint":{"text-color":"#666666","text-halo-color":"#FFFFFF","text-halo-width":1},"showProperties":false},{"id":"Topo Layers/Road Segment/label/Freeway/Highway","type":"symbol","source":"esri","source-layer":"Road Segment/label","filter":["==","_label_class",3],"minzoom":12,"layout":{"text-size":10,"text-font":["Arial Regular"],"text-optional":true,"symbol-placement":"line","symbol-spacing":576,"text-field":"{_name}"},"paint":{"text-color":"#666666","text-halo-color":"#FFFFFF","text-halo-width":1},"showProperties":false},{"id":"Topo Layers/Road Segment/label/Regional Hwy","type":"symbol","source":"esri","source-layer":"Road Segment/label","filter":["==","_label_class",2],"minzoom":12,"layout":{"text-size":10.6667,"text-font":["Arial Bold"],"text-letter-spacing":0.013,"text-rotation-alignment":"viewport","icon-rotation-alignment":"viewport","symbol-placement":"line","symbol-spacing":576,"text-offset":[0,0.125],"text-field":"{_name}","icon-image":"Topo Layers/Road Segment/Regional Hwy"},"paint":{"icon-opacity":0.85,"text-color":"#4E4E4E"}},{"id":"Topo Layers/Road Segment/label/LocalHwy","type":"symbol","source":"esri","source-layer":"Road Segment/label","filter":["==","_label_class",1],"minzoom":9,"layout":{"text-size":9.33333,"text-font":["Arial Regular"],"text-padding":30,"text-letter-spacing":0.01,"text-rotation-alignment":"viewport","icon-rotation-alignment":"viewport","symbol-placement":"line","symbol-spacing":672,"text-field":"{_name}","icon-image":"Topo Layers/Road Segment/LocalHwy"},"paint":{"icon-opacity":0.7}},{"id":"Topo Layers/Road Segment/label/Class 1","type":"symbol","source":"esri","source-layer":"Road Segment/label","filter":["==","_label_class",0],"minzoom":9,"layout":{"text-size":9.33333,"text-font":["Arial Regular"],"text-padding":30,"text-letter-spacing":0.01,"text-rotation-alignment":"viewport","icon-rotation-alignment":"viewport","symbol-placement":"line","symbol-spacing":480,"text-offset":[0,0.142857],"text-field":"{_name}","icon-image":"Topo Layers/Road Segment/Class 1"},"paint":{"text-halo-color":"#FFFFFF","text-halo-width":0.666667},"showProperties":false},{"id":"Topo Layers/Rail/label/Class 1","type":"symbol","source":"esri","source-layer":"Rail/label","minzoom":15,"layout":{"text-size":8,"text-font":["Arial Regular"],"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-anchor":"bottom","text-offset":[0,0.133333],"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1},"showProperties":false},{"id":"Topo Layers/Ferry Lines/label/Class 1","type":"symbol","source":"esri","source-layer":"Ferry Lines/label","minzoom":11,"layout":{"text-size":9.33333,"text-font":["Arial Regular"],"text-optional":true,"symbol-placement":"line","symbol-spacing":1000,"text-field":"{_name}"},"paint":{"text-color":"#888f91","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Spot Elevation","type":"symbol","source":"esri","source-layer":"Spot Elevation","minzoom":8,"layout":{"icon-image":"Topo Layers/Spot Elevation","icon-allow-overlap":true,"text-font":["Arial Italic"],"text-size":10.6667,"text-anchor":"bottom-left","text-offset":[0.213388,0.0866117],"text-field":"{_name}","text-optional":true},"paint":{"icon-color":"#7D7368","icon-opacity":0.79,"text-color":"#828282","text-halo-color":"#FFFFFF","text-halo-width":1.33333},"showProperties":false},{"id":"Topo Layers/Water Label/label/General Water Feature","type":"symbol","source":"esri","source-layer":"Water Label","minzoom":13,"layout":{"text-size":10.6667,"text-font":["Arial Italic"],"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.0883883,0.211612],"text-field":"{_name}"},"paint":{"text-color":"#888f91","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1}},{"id":"Topo Layers/Water Label/label/Bays","type":"symbol","source":"esri","source-layer":"Water Label","minzoom":12,"layout":{"text-size":10.6667,"text-font":["Arial Italic"],"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.0883883,0.211612],"text-field":"{_name}"},"paint":{"text-color":"#888f91","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1}},{"id":"Topo Layers/Water Label/label/Islands","type":"symbol","source":"esri","source-layer":"Water Label","minzoom":12,"layout":{"text-size":10.6667,"text-font":["Arial Italic"],"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.0883883,0.211612],"text-field":"{_name}"},"paint":{"text-color":"#808080","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Topo Layers/Point of Interest/label/General Feature - QC","type":"symbol","source":"esri","source-layer":"Point of Interest","minzoom":13,"layout":{"text-font":["Arial Regular"],"text-size":10.6667,"text-anchor":"bottom-left","text-offset":[0.0883883,0.211612],"text-letter-spacing":0.09,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#343434"}},{"id":"Topo Layers/Point of Interest/label/General Feature - NS","type":"symbol","source":"esri","source-layer":"Point of Interest","minzoom":14,"layout":{"text-font":["Arial Regular"],"text-size":10.6667,"text-anchor":"bottom-left","text-offset":[0.0883883,0.211612],"text-letter-spacing":0.09,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#343434"}},{"id":"Topo Layers/Landform_ESRI/label/288k Labels","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",11],["==","$type","LineString"]],"minzoom":10,"maxzoom":13,"layout":{"symbol-placement":"line","symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.27,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/288k Labels/point","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",11],["==","$type","Point"]],"minzoom":10,"maxzoom":13,"layout":{"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.27,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/577k Labels","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",10],["==","$type","LineString"]],"minzoom":9,"maxzoom":12,"layout":{"symbol-placement":"line","symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.27,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/577k Labels/point","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",10],["==","$type","Point"]],"minzoom":9,"maxzoom":12,"layout":{"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.27,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/1mLabels","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",9],["==","$type","LineString"]],"minzoom":8,"maxzoom":12,"layout":{"symbol-placement":"line","symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.1,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/1mLabels/point","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",9],["==","$type","Point"]],"minzoom":8,"maxzoom":12,"layout":{"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.1,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/Mountains - 4m","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",8],["==","$type","LineString"]],"minzoom":6,"maxzoom":8,"layout":{"symbol-placement":"line","symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":9.33333,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/Mountains - 4m/point","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",8],["==","$type","Point"]],"minzoom":6,"maxzoom":8,"layout":{"text-font":["Arial Italic"],"text-size":9.33333,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/2mlabels","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["==","_label_class",7],"minzoom":7,"maxzoom":9,"layout":{"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.27,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/9mlabels","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["==","_label_class",5],"minzoom":5,"maxzoom":8,"layout":{"text-font":["Arial Italic"],"text-size":9.33333,"text-letter-spacing":0.27,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/ArcticLarge","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["==","_label_class",4],"minzoom":4,"maxzoom":6,"layout":{"text-font":["Arial Italic"],"text-size":13.3333,"text-letter-spacing":0.5,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/Ranges","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",2],["==","$type","LineString"]],"minzoom":4,"maxzoom":8,"layout":{"symbol-placement":"line","symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":10.6667,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/Ranges/point","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",2],["==","$type","Point"]],"minzoom":4,"maxzoom":8,"layout":{"text-font":["Arial Italic"],"text-size":10.6667,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/IslandsLarge","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",1],["==","$type","LineString"]],"minzoom":4,"maxzoom":6,"layout":{"symbol-placement":"line","symbol-spacing":1000,"text-font":["Arial Italic"],"text-letter-spacing":0.5,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/IslandsLarge/point","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["all",["==","_label_class",1],["==","$type","Point"]],"minzoom":4,"maxzoom":6,"layout":{"text-font":["Arial Italic"],"text-letter-spacing":0.5,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Topo Layers/Landform_ESRI/label/SmallScaleIslands","type":"symbol","source":"esri","source-layer":"Landform_ESRI/label","filter":["==","_label_class",0],"minzoom":4,"maxzoom":7,"layout":{"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.27,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#686868","text-halo-color":"#E1E1E1","text-halo-width":0.266667},"showProperties":false},{"id":"Cities - largest scale/label/Pclass0","type":"symbol","source":"esri","source-layer":"Cities - largest scale","minzoom":12,"layout":{"text-size":{"base":1,"stops":[[10,10],[16,13]]},"text-font":["Arial Regular"],"text-letter-spacing":0.05,"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.083189,0.216811],"text-field":"{_name3}"},"paint":{"text-color":"#353635","text-halo-color":"#efefef","text-halo-width":1},"showProperties":false},{"id":"Cities - largest scale/label/Neighbourhoods","type":"symbol","source":"esri","source-layer":"Cities - largest scale","minzoom":11,"layout":{"text-size":{"base":1,"stops":[[10,9.5],[16,15]]},"text-font":["Arial Regular"],"text-letter-spacing":0.05,"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.0883883,0.211612],"text-field":"{_name2}"},"paint":{"text-color":"#353635","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Cities - largest scale/label/Pclass467","type":"symbol","source":"esri","source-layer":"Cities - largest scale","minzoom":11,"layout":{"text-size":14.6667,"text-font":["Arial Regular"],"text-letter-spacing":0.11,"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.0642824,0.235718],"text-field":"{_name1}"},"paint":{"text-color":"#353635","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Cities - largest scale/label/Pclass8","type":"symbol","source":"esri","source-layer":"Cities - largest scale","minzoom":11,"layout":{"text-size":17.3333,"text-font":["Arial Regular"],"text-letter-spacing":0.11,"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.0543928,0.245607],"text-field":"{_name}"},"paint":{"text-color":"#353635","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Cities -mid scale/label/pclass6","type":"symbol","source":"esri","source-layer":"Cities -mid scale","minzoom":6,"maxzoom":8,"layout":{"text-size":11,"text-font":["Arial Regular"],"text-letter-spacing":0.09,"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.083189,0.216811],"text-field":"{_name2}"},"paint":{"text-color":"#353635","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Cities -mid scale/label/Pclass7","type":"symbol","source":"esri","source-layer":"Cities -mid scale","minzoom":6,"maxzoom":8,"layout":{"text-size":12.6667,"text-font":["Arial Regular"],"text-letter-spacing":0.09,"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.0744323,0.225568],"text-field":"{_name1}"},"paint":{"text-color":"#353635","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Cities -mid scale/label/Pclass8","type":"symbol","source":"esri","source-layer":"Cities -mid scale","minzoom":6,"maxzoom":8,"layout":{"text-size":13.3333,"text-font":["Arial Regular"],"text-letter-spacing":0.09,"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.0707107,0.229289],"text-field":"{_name}"},"paint":{"text-color":"#353635","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Cities - large scale/label/Under500k","type":"symbol","source":"esri","source-layer":"Cities - large scale","minzoom":10,"maxzoom":11,"layout":{"text-size":11.3333,"text-font":["Arial Regular"],"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.083189,0.216811],"text-field":"{_name3}"},"paint":{"text-color":"#353635","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Cities - large scale/label/Under1M","type":"symbol","source":"esri","source-layer":"Cities - large scale","minzoom":9,"maxzoom":11,"layout":{"text-font":["Arial Regular"],"text-size":11.3333,"text-anchor":"bottom-left","text-offset":[0.083189,0.216811],"text-field":"{_name2}","text-optional":true},"paint":{"text-color":"#343434","text-halo-color":"#FFFFFF","text-halo-width":2},"showProperties":false},{"id":"Cities - large scale/label/Under2M - Smaller","type":"symbol","source":"esri","source-layer":"Cities - large scale","minzoom":8,"maxzoom":11,"layout":{"text-font":["Arial Regular"],"text-size":13.3333,"text-anchor":"bottom-left","text-offset":[0.0707107,0.229289],"text-field":"{_name1}","text-optional":true},"paint":{"text-color":"#343434","text-halo-color":"#FFFFFF","text-halo-width":2},"showProperties":false},{"id":"Cities - large scale/label/Under 2M-LargeCities","type":"symbol","source":"esri","source-layer":"Cities - large scale","minzoom":8,"maxzoom":11,"layout":{"text-size":13.3333,"text-font":["Arial Regular"],"text-letter-spacing":0.09,"text-optional":true,"text-anchor":"bottom-left","text-offset":[0.0707107,0.229289],"text-field":"{_name}"},"paint":{"text-color":"#353635","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Major Cities - small scale","type":"symbol","source":"esri","source-layer":"Major Cities - small scale","minzoom":4,"maxzoom":5,"layout":{"text-size":10.6667,"text-font":["Arial Regular"],"text-letter-spacing":0.09,"text-optional":true,"icon-allow-overlap":true,"text-anchor":"bottom-left","text-offset":[0.369638,-0.0696383],"text-field":"{_name}"},"paint":{"text-color":"#343434","text-halo-color":"#FFFFFF","text-halo-width":2},"showProperties":false},{"id":"Capital Cities - small scale","type":"symbol","source":"esri","source-layer":"Capital Cities - small scale","minzoom":3,"maxzoom":6,"layout":{"text-size":11,"text-font":["Arial Regular"],"text-letter-spacing":0.09,"text-optional":true,"icon-allow-overlap":true,"text-anchor":"bottom-left","text-offset":[0.463388,-0.163388],"text-field":"{_name}"},"paint":{"text-color":"#353635","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Cities - small scale ","type":"symbol","source":"esri","source-layer":"Cities - small scale ","minzoom":5,"maxzoom":6,"layout":{"text-size":11,"text-font":["Arial Regular"],"text-letter-spacing":0.09,"text-optional":true,"icon-allow-overlap":true,"text-anchor":"bottom-left","text-offset":[0.369638,-0.0696383],"text-field":"{_name}"},"paint":{"text-color":"#353635","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Site Address Point/label/GeneralBuildings","type":"symbol","source":"esri","source-layer":"Site Address Point","minzoom":17,"layout":{"text-font":["Tahoma Regular"],"text-size":9.33333,"text-anchor":"bottom-left","text-offset":[0.101015,0.198985],"text-field":"{_name1}","text-optional":true},"paint":{"text-color":"#9C9C9C"}},{"id":"Site Address Point/label/Units","type":"symbol","source":"esri","source-layer":"Site Address Point","minzoom":17,"layout":{"text-font":["Tahoma Regular"],"text-size":9.33333,"text-anchor":"bottom-left","text-offset":[0.101015,0.198985],"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#9C9C9C"}},{"id":"Province Label small scale/label/Canada","type":"symbol","source":"esri","source-layer":"Province Label small scale","minzoom":2,"maxzoom":5,"layout":{"text-size":14.6667,"text-font":["Arial Bold"],"text-letter-spacing":0.3,"text-optional":true,"text-field":"{_name3}"},"paint":{"text-color":"#aaafac","text-halo-color":"#f7f7f7","text-halo-width":1,"text-halo-blur":1},"showProperties":false},{"id":"Province Label small scale/label/PEI","type":"symbol","source":"esri","source-layer":"Province Label small scale","minzoom":5,"maxzoom":6,"layout":{"text-font":["Arial Regular"],"text-size":10.6667,"text-anchor":"bottom-left","text-offset":[0.0883883,0.211612],"text-letter-spacing":0.1,"text-field":"{_name2}","text-optional":true},"paint":{"text-color":"#797B7D","text-halo-color":"#FFFFFF","text-halo-width":1.33333},"showProperties":false},{"id":"Province Label small scale/label/NS","type":"symbol","source":"esri","source-layer":"Province Label small scale","minzoom":4,"maxzoom":6,"layout":{"text-font":["Arial Regular"],"text-size":10.6667,"text-anchor":"bottom-left","text-offset":[0.0883883,0.211612],"text-letter-spacing":0.1,"text-field":"{_name1}","text-optional":true},"paint":{"text-color":"#797B7D","text-halo-color":"#FFFFFF","text-halo-width":1.33333},"showProperties":false},{"id":"Province Label small scale/label/Class 1","type":"symbol","source":"esri","source-layer":"Province Label small scale","minzoom":4,"maxzoom":6,"layout":{"text-size":12,"text-font":["Arial Regular"],"text-letter-spacing":0.1,"text-optional":true,"text-field":"{_name}"},"paint":{"text-color":"#b4b4b4","text-halo-color":"#efefef","text-halo-width":1,"text-halo-blur":1}},{"id":"Province Label/label/PEI","type":"symbol","source":"esri","source-layer":"Province Label","minzoom":6,"maxzoom":8,"layout":{"text-font":["Arial Bold"],"text-size":12.6667,"text-anchor":"bottom-left","text-offset":[0.0744323,0.225568],"text-letter-spacing":0.1,"text-field":"{_name2}","text-optional":true},"paint":{"text-color":"#797B7D","text-halo-color":"#FFFFFF","text-halo-width":1.33333},"showProperties":false},{"id":"Province Label/label/NS","type":"symbol","source":"esri","source-layer":"Province Label","minzoom":6,"maxzoom":8,"layout":{"text-font":["Arial Bold"],"text-size":12.6667,"text-anchor":"bottom-left","text-offset":[0.0744323,0.225568],"text-letter-spacing":0.1,"text-field":"{_name1}","text-optional":true},"paint":{"text-color":"#797B7D","text-halo-color":"#FFFFFF","text-halo-width":1.33333},"showProperties":false},{"id":"Province Label/label/Class 1","type":"symbol","source":"esri","source-layer":"Province Label","minzoom":6,"maxzoom":8,"layout":{"text-font":["Arial Regular"],"text-size":14.6667,"text-letter-spacing":0.1,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#797B7D","text-halo-color":"#FFFFFF","text-halo-width":1.33333},"showProperties":false}],"metadata":{"arcgisStyleUrl":"https://www.arcgis.com/sharing/rest/content/items/0baf45ff172d4917b12f3a691bc87553/resources/styles/root.json","arcgisOriginalItemTitle":"Light Grey Community Map","arcgisQuickEditorWarning":true,"arcgisEditorExtents":[{"spatialReference":{"wkid":102100},"xmin":-7913441.505121151,"ymin":5899440.250227741,"xmax":-7901631.984251108,"ymax":5907198.6085986765},{"spatialReference":{"latestWkid":3857,"wkid":102100},"xmin":-19322061.05146325,"ymin":4451995.507110002,"xmax":-2111480.984136753,"ymax":18986540.259090003},{"spatialReference":{"latestWkid":3857,"wkid":102100},"xmin":-19322061.05146325,"ymin":4451995.507110002,"xmax":-2111480.984136753,"ymax":18986540.259090003},{"spatialReference":{"latestWkid":3857,"wkid":102100},"xmin":-19322061.05146325,"ymin":4451995.507110002,"xmax":-2111480.984136753,"ymax":18986540.259090003}],"arcgisMinimapVisibility":false}} \ No newline at end of file +{ + "version": 8, + "sprite": "https://www.arcgis.com/sharing/rest/content/items/0baf45ff172d4917b12f3a691bc87553/resources/styles/sprite-1569437124838", + "glyphs": "https://tiles.arcgis.com/tiles/B6yKvIZqzuOr0jBR/arcgis/rest/services/Canada_Topographic/VectorTileServer/resources/styles/../fonts/{fontstack}/{range}.pbf", + "sources": { + "esri": { + "type": "vector", + "url": "https://tiles.arcgis.com/tiles/B6yKvIZqzuOr0jBR/arcgis/rest/services/Canada_Topographic/VectorTileServer", + "tiles": ["https://tiles.arcgis.com/tiles/B6yKvIZqzuOr0jBR/arcgis/rest/services/Canada_Topographic/VectorTileServer/tile/{z}/{y}/{x}.pbf"] + } + }, + "layers": [ + { + "id": "Topo Layers/Landbase", + "type": "fill", + "source": "esri", + "source-layer": "Landbase", + "minzoom": 2, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [0, "#f4f4f4"], + [7, "#efefef"] + ] + } + } + }, + { + "id": "Topo Layers/Owner Parcel", + "type": "fill", + "source": "esri", + "source-layer": "Owner Parcel", + "minzoom": 16, + "layout": {}, + "paint": { + "fill-opacity": 0.6, + "fill-color": { + "base": 1, + "stops": [ + [0, "#f4f4f4"], + [7, "#efefef"] + ] + } + } + }, + { + "id": "Topo Layers/Urban Area/00000000001111111111111/1", + "type": "fill", + "source": "esri", + "source-layer": "Urban Area", + "filter": ["==", "_symbol", 0], + "minzoom": 13, + "maxzoom": 14, + "layout": {}, + "paint": { "fill-color": "#ecedec" } + }, + { + "id": "Topo Layers/Urban Area/00000000001111111111111_5/1", + "type": "fill", + "source": "esri", + "source-layer": "Urban Area", + "filter": ["==", "_symbol", 0], + "minzoom": 3, + "maxzoom": 9, + "layout": {}, + "paint": { "fill-color": "#e5e8e7" } + }, + { + "id": "Topo Layers/Urban Area/00000000001111111111111_4/1", + "type": "fill", + "source": "esri", + "source-layer": "Urban Area", + "filter": ["==", "_symbol", 0], + "minzoom": 9, + "maxzoom": 10, + "layout": {}, + "paint": { "fill-color": "#e5e8e7" } + }, + { + "id": "Topo Layers/Urban Area/00000000001111111111111_3/1", + "type": "fill", + "source": "esri", + "source-layer": "Urban Area", + "filter": ["==", "_symbol", 0], + "minzoom": 10, + "maxzoom": 11, + "layout": {}, + "paint": { "fill-color": "#ecedec" } + }, + { + "id": "Topo Layers/Urban Area/00000000001111111111111_2/1", + "type": "fill", + "source": "esri", + "source-layer": "Urban Area", + "filter": ["==", "_symbol", 0], + "minzoom": 11, + "maxzoom": 12, + "layout": {}, + "paint": { "fill-color": "#ecedec" } + }, + { + "id": "Topo Layers/Urban Area/00000000001111111111111_1/1", + "type": "fill", + "source": "esri", + "source-layer": "Urban Area", + "filter": ["==", "_symbol", 0], + "minzoom": 12, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#ecedec" } + }, + { + "id": "Topo Layers/Parcel Outline", + "type": "line", + "source": "esri", + "source-layer": "Parcel Outline", + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#e7e7e7", "line-width": 1.06658 } + }, + { + "id": "Topo Layers/First Nations/1", + "type": "line", + "source": "esri", + "source-layer": "First Nations", + "minzoom": 10, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-opacity": 0.47, "line-color": "#dddedb", "line-width": 4.66667 } + }, + { + "id": "Topo Layers/First Nations/0", + "type": "line", + "source": "esri", + "source-layer": "First Nations", + "minzoom": 10, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#9C9C9C", "line-dasharray": [6.41026, 3.84615], "line-width": 1.04, "line-opacity": 0.47 } + }, + { + "id": "Topo Layers/International / Provincial Boundaries:2/", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:2", + "filter": ["==", "_symbol", 0], + "minzoom": 10, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#dddedb", + "line-width": { + "stops": [ + [10, 1.33333], + [18, 2.66667] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/International / Provincial Boundaries:2/3", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:2", + "filter": ["==", "_symbol", 1], + "minzoom": 10, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#9c9c9c", "line-width": 0.933333, "line-dasharray": [9.71429, 6.85714] } + }, + { + "id": "Topo Layers/International / Provincial Boundaries:2/4", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:2", + "filter": ["==", "_symbol", 2], + "minzoom": 10, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#9C9C9C", "line-dasharray": [7.14286, 4.28571], "line-width": 0.933333 } + }, + { + "id": "Topo Layers/International / Provincial Boundaries:2/13", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:2", + "filter": ["==", "_symbol", 3], + "minzoom": 10, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dddedb", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Small Scale Landuse/825 - Park: Territorial; 823 - Park: National; 824 - Park: Provincial/1", + "type": "fill", + "source": "esri", + "source-layer": "Small Scale Landuse", + "filter": ["==", "_symbol", 0], + "minzoom": 5, + "maxzoom": 8, + "layout": {}, + "paint": { "fill-color": "#eceeea" }, + "showProperties": false + }, + { + "id": "Topo Layers/Small Scale Landuse/825 - Park: Territorial; 823 - Park: National; 824 - Park: Provincial/0", + "type": "line", + "source": "esri", + "source-layer": "Small Scale Landuse", + "filter": ["==", "_symbol", 0], + "minzoom": 5, + "maxzoom": 8, + "layout": { "visibility": "none", "line-cap": "round", "line-join": "round" }, + "paint": { "line-opacity": 0.36, "line-color": "#e7eae6", "line-width": 2 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/900/1", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 2], + "minzoom": 8, + "layout": {}, + "paint": { "fill-opacity": 0.5, "fill-color": "#e4e8e4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/1105 - Helipad / Heliport / Helistop", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 27], + "minzoom": 8, + "layout": {}, + "paint": { "fill-opacity": 0.5, "fill-color": "#e4e8e4" } + }, + { + "id": "Topo Layers/Landuse/1100 - Airport Facility", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 25], + "minzoom": 8, + "layout": {}, + "paint": { "fill-opacity": 0.5, "fill-color": "#e4e8e4" } + }, + { + "id": "Topo Layers/Landuse/1102 - Airport Runway / Airfield/1", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 26], + "minzoom": 8, + "layout": {}, + "paint": { "fill-color": "#D1D1D1", "fill-opacity": 0.5 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/849 - Zoo", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 24], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/831 - Playground", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 19], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/830 - Picnic Area", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 18], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/828 - Park: Municipal", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 17], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/827 - Park: Upper Municipal", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 16], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/826 - Park: Municipal Region Area", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 15], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/825 - Park: Territorial", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 14], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [18, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/824 - Park: Provincial", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 13], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/823 - Park: National", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 12], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/821 - Open Space", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 11], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/807 - Campground", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 6], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/800 - General Recreation", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 1], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/815 - Golf Course Facility", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 10], + "minzoom": 8, + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [6, "#eceeea"], + [11, "#e4e8e4"] + ] + }, + "fill-outline-color": "#e7eae6" + }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/836 - Racetrack (Track and Field)", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 21], + "minzoom": 14, + "layout": {}, + "paint": { "fill-opacity": 0.1, "fill-color": "rgba(91,113,91,0.88)", "fill-outline-color": "rgba(91,113,91,0.88)" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/845 - Tennis Courts", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 23], + "minzoom": 14, + "layout": {}, + "paint": { "fill-opacity": 0.1, "fill-color": "rgba(91,113,91,0.88)", "fill-outline-color": "#FFFFFF" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/842 - Soccer Field", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 22], + "minzoom": 14, + "layout": {}, + "paint": { "fill-opacity": 0.1, "fill-color": "rgba(91,113,91,0.88)", "fill-outline-color": "#FFFFFF" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/838 - Rugby Field", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 20], + "minzoom": 14, + "layout": {}, + "paint": { "fill-opacity": 0.1, "fill-color": "rgba(91,113,91,0.88)", "fill-outline-color": "#FFFFFF" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/814 - Football Facility", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 9], + "minzoom": 14, + "layout": {}, + "paint": { "fill-opacity": 0.1, "fill-color": "rgba(91,113,91,0.88)", "fill-outline-color": "#FFFFFF" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/813 - Fair / Exhibition / Rodeo Grounds", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 8], + "minzoom": 14, + "layout": {}, + "paint": { "fill-opacity": 0.1, "fill-color": "rgba(91,113,91,0.88)" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/809 - Cricket Facility", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 7], + "minzoom": 14, + "layout": {}, + "paint": { "fill-opacity": 0.1, "fill-color": "rgba(91,113,91,0.88)", "fill-outline-color": "#FFFFFF" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/806 - Basketball Courts", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 5], + "minzoom": 14, + "layout": {}, + "paint": { "fill-opacity": 0.1, "fill-color": "rgba(91,113,91,0.88)", "fill-outline-color": "#FFFFFF" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/805 - Baseball Facility", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 4], + "minzoom": 14, + "layout": {}, + "paint": { "fill-opacity": 0.1, "fill-color": "rgba(91,113,91,0.88)", "fill-outline-color": "#FFFFFF" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/803 - Athletic / Sports Field", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 3], + "minzoom": 14, + "layout": {}, + "paint": { "fill-opacity": 0.1, "fill-color": "rgba(91,113,91,0.88)", "fill-outline-color": "#FFFFFF" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/720 - Cemetery", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 0], + "minzoom": 8, + "layout": {}, + "paint": { "fill-color": "#e4e8e4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/", + "type": "fill", + "source": "esri", + "source-layer": "Landuse", + "filter": ["==", "_symbol", 28], + "minzoom": 8, + "layout": {}, + "paint": { "fill-color": "#828282", "fill-opacity": 0.5, "fill-outline-color": "#6E6E6E" }, + "showProperties": false + }, + { + "id": "Topo Layers/Bathymetry/1/1", + "type": "fill", + "source": "esri", + "source-layer": "Bathymetry", + "filter": ["==", "_symbol", 0], + "minzoom": 7, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Bathymetry/1_1/1", + "type": "fill", + "source": "esri", + "source-layer": "Bathymetry", + "filter": ["==", "_symbol", 0], + "maxzoom": 7, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Bathymetry/2/1", + "type": "fill", + "source": "esri", + "source-layer": "Bathymetry", + "filter": ["==", "_symbol", 1], + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Bathymetry/3/1", + "type": "fill", + "source": "esri", + "source-layer": "Bathymetry", + "filter": ["==", "_symbol", 2], + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Bathymetry/4/1", + "type": "fill", + "source": "esri", + "source-layer": "Bathymetry", + "filter": ["==", "_symbol", 3], + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Bathymetry/5/1", + "type": "fill", + "source": "esri", + "source-layer": "Bathymetry", + "filter": ["==", "_symbol", 4], + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterline_9M/", + "type": "line", + "source": "esri", + "source-layer": "Waterline_9M", + "filter": ["==", "_symbol", 0], + "minzoom": 8, + "maxzoom": 7, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterline 9M", + "type": "line", + "source": "esri", + "source-layer": "Waterline 9M", + "minzoom": 5, + "maxzoom": 6, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterline 4M", + "type": "line", + "source": "esri", + "source-layer": "Waterline 4M", + "minzoom": 6, + "maxzoom": 7, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterline 1M", + "type": "line", + "source": "esri", + "source-layer": "Waterline 1M", + "minzoom": 7, + "maxzoom": 9, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterline 577k", + "type": "line", + "source": "esri", + "source-layer": "Waterline 577k", + "minzoom": 9, + "maxzoom": 11, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Canal", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 0], + "minzoom": 15, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.06667, "line-dasharray": [3.75, 2.5] }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Creek", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 1], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Creek_1", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 1], + "minzoom": 11, + "maxzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Diversion", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 3], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Diversion_1", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 3], + "minzoom": 11, + "maxzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Double Line River", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 4], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Double Line River_1", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 4], + "minzoom": 11, + "maxzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Other", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 5], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Other_1", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 5], + "minzoom": 11, + "maxzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/River", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 6], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/River_1", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 6], + "minzoom": 11, + "maxzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Side Channel", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 7], + "minzoom": 11, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Side Channel_1", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 7], + "minzoom": 11, + "maxzoom": 11, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Stream", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 8], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Stream_1", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 8], + "minzoom": 11, + "maxzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Tidal River", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 9], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Tidal River_1", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 9], + "minzoom": 11, + "maxzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Unknown", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 10], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Unknown_1", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 10], + "minzoom": 11, + "maxzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Watercourse", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 11], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/Watercourse_1", + "type": "line", + "source": "esri", + "source-layer": "RiverSegment_MUN", + "filter": ["==", "_symbol", 11], + "minzoom": 11, + "maxzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterbody small scale/1", + "type": "fill", + "source": "esri", + "source-layer": "Waterbody small scale", + "maxzoom": 7, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false, + "minzoom": 2 + }, + { + "id": "Topo Layers/Waterbody small scale/0", + "type": "line", + "source": "esri", + "source-layer": "Waterbody small scale", + "maxzoom": 7, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#cfd3d4", + "line-width": { + "property": "size", + "default": 0.666667, + "stops": [ + [887872000, 0], + [17578800000, 0.666667] + ] + } + }, + "minzoom": 2, + "showProperties": false + }, + { + "id": "Topo Layers/Waterbody 1M/1", + "type": "fill", + "source": "esri", + "source-layer": "Waterbody 1M", + "minzoom": 7, + "maxzoom": 9, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Water 250k/20: Not Identified / Non identifié/1", + "type": "fill", + "source": "esri", + "source-layer": "Water 250k", + "filter": ["==", "_symbol", 0], + "minzoom": 9, + "maxzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Water 250k/59: Permanent / Permanent/1", + "type": "fill", + "source": "esri", + "source-layer": "Water 250k", + "filter": ["==", "_symbol", 1], + "minzoom": 9, + "maxzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Water 250k/60: Intermittent / Intermittent/2", + "type": "fill", + "source": "esri", + "source-layer": "Water 250k", + "filter": ["==", "_symbol", 2], + "minzoom": 9, + "maxzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Water 250k/60: Intermittent / Intermittent/1", + "type": "fill", + "source": "esri", + "source-layer": "Water 250k", + "filter": ["==", "_symbol", 2], + "minzoom": 9, + "maxzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Water 250k/60: Intermittent / Intermittent/0", + "type": "line", + "source": "esri", + "source-layer": "Water 250k", + "filter": ["==", "_symbol", 2], + "minzoom": 9, + "maxzoom": 11, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#cfd3d4", "line-width": 0.666667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Water 250k//1", + "type": "fill", + "source": "esri", + "source-layer": "Water 250k", + "filter": ["==", "_symbol", 3], + "minzoom": 9, + "maxzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Artificial Path", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 0], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Bay Inlet", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 1], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Canal", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 2], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Conduit", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 3], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Connector", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 4], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Creek", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 5], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Ditch", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 6], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Diversion", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 7], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Double Line River", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 8], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Estuary", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 9], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Flume", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 10], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Ford", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 11], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Ice Mass", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 12], + "minzoom": 11, + "layout": { "visibility": "none" }, + "paint": { "fill-pattern": "Topo Layers/Community Waterbodies/Ice Mass" } + }, + { + "id": "Topo Layers/Community Waterbodies/Lake", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 13], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Marsh", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 14], + "minzoom": 11, + "layout": { "visibility": "none" }, + "paint": { "fill-pattern": "Topo Layers/Community Waterbodies/Marsh" } + }, + { + "id": "Topo Layers/Community Waterbodies/None", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 15], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Ocean", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 16], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Other", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 17], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Playa", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 18], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Pond", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 19], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Rapids/2", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 20], + "minzoom": 11, + "layout": { "visibility": "none" }, + "paint": { "fill-pattern": "Topo Layers/Community Waterbodies/Rapids/2" } + }, + { + "id": "Topo Layers/Community Waterbodies/Rapids/1", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 20], + "minzoom": 11, + "layout": { "visibility": "none" }, + "paint": { "fill-pattern": "Topo Layers/Community Waterbodies/Rapids/1" } + }, + { + "id": "Topo Layers/Community Waterbodies/Rapids/0", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 20], + "minzoom": 11, + "layout": { "visibility": "none" }, + "paint": { "fill-pattern": "Topo Layers/Community Waterbodies/Rapids/0" } + }, + { + "id": "Topo Layers/Community Waterbodies/Reef", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 21], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Reservoir", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 22], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Rise", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 23], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/River", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 24], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Sea", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 25], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Seep", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 26], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Side Channel", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 27], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Stream", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 28], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Swamp", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 29], + "minzoom": 11, + "layout": { "visibility": "none" }, + "paint": { "fill-pattern": "Topo Layers/Community Waterbodies/Swamp" } + }, + { + "id": "Topo Layers/Community Waterbodies/Tidal Flat/1", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 30], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Tidal Flat/0", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 30], + "minzoom": 11, + "layout": { "visibility": "visible" }, + "paint": { "fill-opacity": 1, "fill-color": "#cfd3d4", "fill-antialias": true, "fill-translate": [0, 0], "fill-translate-anchor": "map" } + }, + { + "id": "Topo Layers/Community Waterbodies/Tidal River", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 31], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Unknown", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 32], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Watercourse", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 33], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/Waterfall/2", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 34], + "minzoom": 11, + "layout": {}, + "paint": { "fill-pattern": "Topo Layers/Community Waterbodies/Waterfall/2" } + }, + { + "id": "Topo Layers/Community Waterbodies/Waterfall/1", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 34], + "minzoom": 11, + "layout": {}, + "paint": { "fill-pattern": "Topo Layers/Community Waterbodies/Waterfall/1" } + }, + { + "id": "Topo Layers/Community Waterbodies/Waterfall/0", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 34], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#cfd3d4" } + }, + { + "id": "Topo Layers/Community Waterbodies/Dam", + "type": "fill", + "source": "esri", + "source-layer": "Community Waterbodies", + "filter": ["==", "_symbol", 35], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#9C9C9C", "fill-outline-color": "#686868" } + }, + { + "id": "Topo Layers/Surface/300 - Pool / Water Fountain", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 13], + "minzoom": 12, + "layout": {}, + "paint": { "fill-color": "#cfd3d4", "fill-outline-color": "#cfd3d4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/209 - Walking Path", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 12], + "minzoom": 12, + "layout": {}, + "paint": { "fill-color": "#f2f2f1" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/208 - Street", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 11], + "minzoom": 12, + "layout": { "visibility": "none" }, + "paint": { "fill-color": "rgba(234,233,231,0.6)" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/207 - Sidewalk", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 10], + "minzoom": 12, + "layout": {}, + "paint": { "fill-color": "#f2f2f1" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/206 - Parking Lot", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 9], + "minzoom": 12, + "layout": { "visibility": "none" }, + "paint": { "fill-color": "#f2f2f1" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/201 - Asphalt", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 8], + "minzoom": 12, + "layout": { "visibility": "none" }, + "paint": { "fill-color": "rgba(225,225,225,0.7)" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/112 - Glacier ", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 7], + "minzoom": 10, + "layout": { "visibility": "none" }, + "paint": { "fill-pattern": "Topo Layers/Surface/112 - Glacier " } + }, + { + "id": "Topo Layers/Surface/110 - Deck/Patio", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 6], + "minzoom": 12, + "layout": {}, + "paint": { "fill-color": "#f2f2f1", "fill-outline-color": "#f2f2f1" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/109 - Turf", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 5], + "minzoom": 14, + "layout": { "visibility": "none" }, + "paint": { "fill-opacity": 0.3, "fill-color": "rgba(91,113,91,0.88)", "fill-outline-color": "#FFFFFF" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/108 - Sand", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 4], + "minzoom": 12, + "layout": {}, + "paint": { "fill-color": "#f2f2f1" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/103 - Gravel/2", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 3], + "minzoom": 14, + "layout": { "visibility": "none" }, + "paint": { "fill-pattern": "Topo Layers/Surface/103 - Gravel/2" } + }, + { + "id": "Topo Layers/Surface/103 - Gravel/1", + "type": "line", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 3], + "minzoom": 14, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "rgba(204,204,204,0.6)", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/103 - Gravel/0", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 3], + "minzoom": 14, + "layout": { "visibility": "none" }, + "paint": { "fill-pattern": "Topo Layers/Surface/103 - Gravel/0" } + }, + { + "id": "Topo Layers/Surface/102 - Grass", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 2], + "minzoom": 12, + "layout": {}, + "paint": { "fill-color": "#e4e8e4" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/101 - Dirt/1", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 1], + "minzoom": 12, + "layout": {}, + "paint": { "fill-color": "#f2f2f1" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/100 - Clay/1", + "type": "fill", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 0], + "minzoom": 12, + "layout": {}, + "paint": { "fill-color": "rgba(91,113,91,0.88)" }, + "showProperties": false + }, + { + "id": "Topo Layers/Surface/100 - Clay/0", + "type": "line", + "source": "esri", + "source-layer": "Surface", + "filter": ["==", "_symbol", 0], + "minzoom": 12, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "rgba(91,113,91,0.88)", + "line-width": { + "stops": [ + [12, 1.06667], + [17, 1.06667], + [18, 1.06667] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Wetland//1", + "type": "fill", + "source": "esri", + "source-layer": "Wetland", + "filter": ["==", "_symbol", 0], + "minzoom": 10, + "layout": { "visibility": "none" }, + "paint": { "fill-pattern": "Topo Layers/Wetland//1" } + }, + { + "id": "Topo Layers/Piers/2", + "type": "fill", + "source": "esri", + "source-layer": "Piers", + "minzoom": 13, + "layout": {}, + "paint": { "fill-color": "rgba(204,204,204,0.6)" }, + "showProperties": false + }, + { + "id": "Topo Layers/Piers/1", + "type": "fill", + "source": "esri", + "source-layer": "Piers", + "minzoom": 13, + "layout": {}, + "paint": { "fill-color": "rgba(204,204,204,0.6)" }, + "showProperties": false + }, + { + "id": "Topo Layers/Piers/0", + "type": "line", + "source": "esri", + "source-layer": "Piers", + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "rgba(204,204,204,0.6)", "line-width": 0.666667 }, + "showProperties": false + }, + { + "id": "Topo Layers/International / Provincial Boundaries:1/1/1", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:1", + "filter": ["==", "_symbol", 0], + "minzoom": 10, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#dddedb", "line-width": 6.66667 } + }, + { + "id": "Topo Layers/International / Provincial Boundaries:1/1/0", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:1", + "filter": ["==", "_symbol", 0], + "minzoom": 10, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#9c9c9c", "line-width": 1.04, "line-dasharray": [8.71795, 6.15385] } + }, + { + "id": "Topo Layers/International / Provincial Boundaries:1/1_2/1", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:1", + "filter": ["==", "_symbol", 0], + "minzoom": 1, + "maxzoom": 2, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#CCCCCC", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/International / Provincial Boundaries:1/1_1/1", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:1", + "filter": ["==", "_symbol", 0], + "minzoom": 2, + "maxzoom": 10, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#dddedb", "line-width": 3.33333 } + }, + { + "id": "Topo Layers/International / Provincial Boundaries:1/1_1/0", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:1", + "filter": ["==", "_symbol", 0], + "minzoom": 2, + "maxzoom": 10, + "layout": { "line-join": "round" }, + "paint": { + "line-color": { + "base": 1, + "stops": [ + [5, "#cccccc"], + [7, "#9c9c9c"] + ] + }, + "line-width": 0.624, + "line-dasharray": [8.71795, 6.15385] + }, + "showProperties": false + }, + { + "id": "Topo Layers/International / Provincial Boundaries:1/2/1", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:1", + "filter": ["==", "_symbol", 1], + "minzoom": 10, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#dfe0dd", + "line-width": { + "stops": [ + [6, 5.06667], + [10, 5.33333], + [15, 5.33333], + [18, 5.33333] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/International / Provincial Boundaries:1/2/0", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:1", + "filter": ["==", "_symbol", 1], + "minzoom": 10, + "layout": { "line-join": "round" }, + "paint": { + "line-color": { + "base": 1, + "stops": [ + [7, "#c8c8c8"], + [12, "#9c9c9c"] + ] + }, + "line-width": { + "stops": [ + [6, 0.633333], + [10, 0.666667], + [15, 0.666667], + [18, 0.666667] + ] + }, + "line-dasharray": [13.6, 9.6] + }, + "showProperties": false + }, + { + "id": "Topo Layers/International / Provincial Boundaries:1/2_2/1", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:1", + "filter": ["==", "_symbol", 1], + "minzoom": 3, + "maxzoom": 7, + "layout": { "line-join": "round" }, + "paint": { "line-color": "rgba(204,204,204,0.8)", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/International / Provincial Boundaries:1/2_1/1", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:1", + "filter": ["==", "_symbol", 1], + "minzoom": 7, + "maxzoom": 10, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#dddedb", "line-width": 4 }, + "showProperties": false + }, + { + "id": "Topo Layers/International / Provincial Boundaries:1/2_1/0", + "type": "line", + "source": "esri", + "source-layer": "International / Provincial Boundaries:1", + "filter": ["==", "_symbol", 1], + "minzoom": 7, + "maxzoom": 10, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#9c9c9c", "line-width": 0.266667, "line-dasharray": [25, 25] } + }, + { + "id": "Topo Layers/Trails/", + "type": "symbol", + "source": "esri", + "source-layer": "Trails", + "filter": ["==", "_symbol", 0], + "minzoom": 15, + "layout": { "symbol-placement": "line", "icon-image": "Topo Layers/Trails/", "symbol-spacing": 10.6667, "icon-rotation-alignment": "map", "icon-allow-overlap": true }, + "paint": { "icon-color": "#B8B09C", "icon-opacity": 0.6 }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Ferry", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 9], + "minzoom": 9, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#ebedeb", "line-dasharray": [4.54545, 1.81818], "line-width": 1.46667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Highways/1", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 0], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#e3e5e2", + "line-width": { + "stops": [ + [0, 2.66667], + [5, 3.33333], + [9, 3.33333], + [10, 3.33333], + [11, 4], + [12, 4.26667], + [13, 6.10667], + [14, 6.25333], + [15, 10.5867], + [16, 18.6667], + [18, 24] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Arterial/1", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 1], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#e3e5e2", + "line-width": { + "stops": [ + [0, 1.33333], + [9, 1.33333], + [10, 1.33333], + [11, 1.33333], + [12, 4], + [13, 4], + [14, 4], + [15, 8], + [16, 16], + [17, 24], + [18, 25.3333] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Collector/1", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 2], + "minzoom": 13, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#e3e5e2", + "line-width": { + "stops": [ + [12, 1.33333], + [13, 3.33333], + [14, 4.26667], + [15, 6.66667], + [16, 7.6], + [17, 14.6667], + [18, 21.3333] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Local Roads/1", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 3], + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#e3e5e2", + "line-width": { + "stops": [ + [12, 1.33333], + [13, 3.33333], + [14, 4], + [15, 6.66667], + [16, 7.6], + [17, 14.6667], + [18, 21.3333] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/HIghway Ramps/1", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 4], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#e3e5e2", + "line-width": { + "stops": [ + [0, 13.7793], + [9, 2.84], + [10, 2.84], + [11, 2.84], + [12, 2.84], + [13, 3.33333], + [14, 6.05333], + [15, 6.05333], + [16, 6.8], + [17, 7.33333], + [18, 9.33333] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Arterial Ramps/1", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 5], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#e3e5e2", + "line-width": { + "stops": [ + [0, 13.7793], + [9, 2.64], + [10, 2.64], + [11, 2.64], + [12, 2.66667], + [13, 3.33333], + [14, 5.33333], + [15, 5.33333], + [16, 6.8], + [17, 7.33333], + [18, 9.33333] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Local Ramps/1", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 6], + "minzoom": 13, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#e3e5e2", + "line-width": { + "stops": [ + [12, 1.33333], + [13, 3.77333], + [14, 4.72], + [15, 7.18667], + [16, 7.93333], + [17, 14.6667], + [18, 21.6] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Recreation/1", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 7], + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#e3e5e2", + "line-width": { + "stops": [ + [12, 1.33333], + [13, 2.64], + [14, 2.64], + [15, 3.77333], + [16, 4.53333], + [17, 9.33333], + [18, 11.0667] + ] + }, + "line-dasharray": [0.60241, 0.361446] + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Service/1", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 8], + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#e3e5e2", + "line-width": { + "stops": [ + [12, 1.33333], + [13, 2.64], + [14, 2.64], + [15, 3.77333], + [16, 4.53333], + [17, 8], + [18, 11.1129] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Service/0", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 8], + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#FDFDFD", + "line-width": { + "stops": [ + [12, 1.09336], + [13, 2.16485], + [14, 2.16485], + [15, 3.0942], + [16, 3.71741], + [17, 6.56014], + [18, 9.1128] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Recreation/0", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 7], + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#FFFFFF", + "line-width": { + "stops": [ + [12, 1.01205], + [13, 2.00386], + [14, 2.00386], + [15, 2.8641], + [16, 3.44096], + [17, 7.08434], + [18, 8.4] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Local Ramps/0", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 6], + "minzoom": 13, + "layout": {}, + "paint": { + "line-color": "#FDFDFD", + "line-width": { + "stops": [ + [12, 1.14872], + [13, 3.25087], + [14, 4.06645], + [15, 6.19158], + [16, 6.83486], + [17, 12.6359], + [18, 18.6092] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Arterial Ramps/0", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 5], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#ffffff", + "line-width": { + "stops": [ + [0, 9.33333], + [9, 1.78819], + [10, 1.78819], + [11, 1.78819], + [12, 1.80625], + [13, 2.25781], + [14, 3.6125], + [15, 3.6125], + [16, 4.60593], + [17, 4.96718], + [18, 6.32187] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/HIghway Ramps/0", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 4], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#ffffff", + "line-width": { + "stops": [ + [0, 9.33333], + [9, 1.92365], + [10, 1.92365], + [11, 1.92365], + [12, 1.92365], + [13, 2.25781], + [14, 4.10018], + [15, 4.10018], + [16, 4.60593], + [17, 4.96718], + [18, 6.32187] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Local Roads/0", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 3], + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#FDFDFD", + "line-width": { + "stops": [ + [12, 1.12821], + [13, 2.82051], + [14, 3.38462], + [15, 5.64103], + [16, 6.43077], + [17, 12.4103], + [18, 18.0513] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Local Roads_1/0", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 3], + "minzoom": 12, + "maxzoom": 13, + "layout": {}, + "paint": { "line-color": "#fafafa", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Collector/0", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 2], + "minzoom": 13, + "layout": {}, + "paint": { + "line-color": "#FDFDFD", + "line-width": { + "stops": [ + [12, 1.12821], + [13, 2.82051], + [14, 3.61026], + [15, 5.64103], + [16, 6.43077], + [17, 12.4103], + [18, 18.0513] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Collector_1/0", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 2], + "minzoom": 12, + "maxzoom": 13, + "layout": {}, + "paint": { "line-color": "#fafafa", "line-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Arterial/0", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 1], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#ffffff", + "line-width": { + "stops": [ + [0, 0.985372], + [9, 0.985372], + [10, 0.985372], + [11, 0.985372], + [12, 2.95612], + [13, 2.95612], + [14, 2.95612], + [15, 5.91223], + [16, 11.8245], + [17, 17.7367], + [18, 18.7221] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/Highways/0", + "type": "line", + "source": "esri", + "source-layer": "Road Segment", + "filter": ["==", "_symbol", 0], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#ffffff", + "line-width": { + "stops": [ + [0, 1.48148], + [5, 1.85185], + [9, 1.85185], + [10, 1.85185], + [11, 2.22222], + [12, 2.37037], + [13, 3.39259], + [14, 3.47407], + [15, 5.88148], + [16, 10.3704], + [18, 13.3333] + ] + } + }, + "showProperties": false + }, + { + "id": "Topo Layers/Small scale roads/Major Arterial", + "type": "line", + "source": "esri", + "source-layer": "Small scale roads", + "filter": ["==", "_symbol", 0], + "minzoom": 7, + "maxzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#fafafa" }, + "showProperties": false + }, + { + "id": "Topo Layers/Small scale roads/Major Arterial_1", + "type": "line", + "source": "esri", + "source-layer": "Small scale roads", + "filter": ["==", "_symbol", 0], + "minzoom": 6, + "maxzoom": 7, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#fafafa" }, + "showProperties": false + }, + { + "id": "Topo Layers/Small scale roads/Freeway; Highway Ramp; Highway", + "type": "line", + "source": "esri", + "source-layer": "Small scale roads", + "filter": ["==", "_symbol", 1], + "minzoom": 7, + "maxzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#fafafa" }, + "showProperties": false + }, + { + "id": "Topo Layers/Small scale roads/Freeway; Highway Ramp; Highway_1", + "type": "line", + "source": "esri", + "source-layer": "Small scale roads", + "filter": ["==", "_symbol", 1], + "minzoom": 6, + "maxzoom": 7, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#fafafa" }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Connecting/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 0], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Connecting/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 0], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Rail/Crossover/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 1], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Crossover/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 1], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Rail/Ferry Route/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 2], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Ferry Route/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 2], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Rail/Main/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 3], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Main/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 3], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Rail/Other/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 4], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Other/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 4], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Rail/Siding/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 5], + "minzoom": 12, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Siding/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 5], + "minzoom": 12, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Rail/Spur/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 6], + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Spur/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 6], + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Rail/Spur_1/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 6], + "minzoom": 12, + "maxzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Spur_1/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 6], + "minzoom": 12, + "maxzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Rail/Unknown/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 7], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Unknown/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 7], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Rail/Wye/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 8], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Wye/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 8], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Rail/Yard/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 9], + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Yard/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 9], + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Rail/Yard_1/1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 9], + "minzoom": 12, + "maxzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/Yard_1/0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 9], + "minzoom": 12, + "maxzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "rgba(230,230,230,0.5)", "line-dasharray": [10.5839, 12.3479], "line-width": 0.755867 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail//1", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 10], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddda", "line-width": 1.88973 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail//0", + "type": "line", + "source": "esri", + "source-layer": "Rail", + "filter": ["==", "_symbol", 10], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#efefef", "line-width": 0.755867, "line-dasharray": [10.5839, 12.3479] } + }, + { + "id": "Topo Layers/Ferry Lines", + "type": "line", + "source": "esri", + "source-layer": "Ferry Lines", + "minzoom": 9, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#ebedeb", "line-width": 1.46667, "line-dasharray": [4.54545, 1.81818] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/General/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 0], + "minzoom": 15, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/General/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 0], + "minzoom": 15, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/General/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 0], + "minzoom": 15, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#BFBFBF", "line-width": 0.453333 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/General_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 0], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/General_1/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 0], + "minzoom": 13, + "maxzoom": 15, + "layout": {}, + "paint": { "fill-color": "#dfe1e2" } + }, + { + "id": "Topo Layers/BuildingFootprint/Government/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 1], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#efefef", "fill-translate": [0.666667, 0.666667] } + }, + { + "id": "Topo Layers/BuildingFootprint/Government/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 1], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Government/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 1], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddde", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Government_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 1], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Government_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 1], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Medical/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 2], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Medical/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 2], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Medical/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 2], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#BFBFBF", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Medical_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 2], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Medical_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 2], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Education/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 3], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Education/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 3], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Education/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 3], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#BFBFBF", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Education_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 3], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Education_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 3], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Transportation/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 4], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Transportation/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 4], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Transportation/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 4], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddde", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Transportation_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 4], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Transportation_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 4], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Commercial/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 5], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Commercial/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 5], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Commercial/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 5], + "minzoom": 16, + "layout": { "visibility": "none", "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#dcddde", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Commercial_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 5], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Commercial_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 5], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Religious/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 6], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Religious/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 6], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Religious/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 6], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#BFBFBF", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Religious_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 6], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Religious_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 6], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Recreation/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 7], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Recreation/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 7], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Recreation/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 7], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#BFBFBF", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Recreation_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 7], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Recreation_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 7], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Cultural/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 8], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Cultural/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 8], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Cultural/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 8], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#BFBFBF", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Cultural_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 8], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Cultural_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 8], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Hotel/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 9], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Hotel/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 9], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Hotel/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 9], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#BFBFBF", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Hotel_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 9], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Hotel_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 9], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Airport/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 10], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Airport/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 10], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Airport/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 10], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#BFBFBF", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Airport_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 10], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Airport_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 10], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Industrial/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 11], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Industrial/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 11], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Industrial/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 11], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#BFBFBF", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Industrial_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 11], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Industrial_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 11], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Community Center/2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 12], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dcddde", "fill-translate": [0.666667, 0.666667] }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Community Center/1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 12], + "minzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/BuildingFootprint/Community Center/0", + "type": "line", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 12], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round", "visibility": "none" }, + "paint": { "line-color": "#BFBFBF", "line-width": 0.466667 }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Community Center_2", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 12], + "minzoom": 11, + "maxzoom": 13, + "layout": {}, + "paint": { "fill-color": "#dcddde" }, + "showProperties": false + }, + { + "id": "Topo Layers/BuildingFootprint/Community Center_1", + "type": "fill", + "source": "esri", + "source-layer": "BuildingFootprint", + "filter": ["==", "_symbol", 12], + "minzoom": 13, + "maxzoom": 16, + "layout": {}, + "paint": { "fill-color": "#dfe1e2", "fill-outline-color": "#efefef" } + }, + { + "id": "Topo Layers/Tree", + "type": "symbol", + "source": "esri", + "source-layer": "Tree", + "minzoom": 17, + "layout": { "icon-image": "Topo Layers/Tree", "icon-allow-overlap": true, "visibility": "none" }, + "paint": { "icon-color": "#D1DCB6" }, + "showProperties": false + }, + { + "id": "Topo Layers/Powerlines/Powerline/1", + "type": "line", + "source": "esri", + "source-layer": "Powerlines", + "filter": ["==", "_symbol", 0], + "minzoom": 13, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#9C9C9C", "line-width": 1.33333, "line-opacity": 0.4 } + }, + { + "id": "Topo Layers/Powerlines/Powerline/0", + "type": "symbol", + "source": "esri", + "source-layer": "Powerlines", + "filter": ["==", "_symbol", 0], + "minzoom": 13, + "layout": { "symbol-placement": "line", "icon-image": "Topo Layers/Powerlines/Powerline/0", "symbol-spacing": 53.3333, "icon-rotation-alignment": "map", "icon-allow-overlap": true }, + "paint": { "icon-color": "#9C9C9C", "icon-opacity": 0.4 } + }, + { + "id": "Provinces/", + "type": "symbol", + "source": "esri", + "source-layer": "Provinces", + "filter": ["==", "_symbol", 0], + "layout": { "icon-image": "Provinces/", "icon-allow-overlap": true }, + "paint": { "icon-color": "rgba(130,130,130,0)" }, + "showProperties": false + }, + { + "id": "Site Address Point", + "type": "symbol", + "source": "esri", + "source-layer": "Site Address Point", + "minzoom": 17, + "layout": { "icon-image": "Site Address Point", "icon-allow-overlap": true }, + "paint": { "icon-color": "rgba(118,138,63,0)" }, + "showProperties": false + }, + { + "id": "Topo Layers/Landforms/label/Long 9pt", + "type": "symbol", + "source": "esri", + "source-layer": "Landforms/label", + "filter": ["all", ["==", "_label_class", 4], ["==", "$type", "LineString"]], + "minzoom": 9, + "layout": { "symbol-placement": "line", "symbol-spacing": 1000, "text-font": ["Arial Italic"], "text-size": 12, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landforms/label/Long 9pt/point", + "type": "symbol", + "source": "esri", + "source-layer": "Landforms/label", + "filter": ["all", ["==", "_label_class", 4], ["==", "$type", "Point"]], + "minzoom": 9, + "layout": { "text-font": ["Arial Italic"], "text-size": 12, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landforms/label/Oblong 9pt", + "type": "symbol", + "source": "esri", + "source-layer": "Landforms/label", + "filter": ["all", ["==", "_label_class", 2], ["==", "$type", "LineString"]], + "minzoom": 9, + "layout": { "symbol-placement": "line", "symbol-spacing": 1000, "text-font": ["Arial Italic"], "text-size": 12, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landforms/label/Oblong 9pt/point", + "type": "symbol", + "source": "esri", + "source-layer": "Landforms/label", + "filter": ["all", ["==", "_label_class", 2], ["==", "$type", "Point"]], + "minzoom": 9, + "layout": { "text-font": ["Arial Italic"], "text-size": 12, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Point of Interest/label/First Nations Reserve / Hamlet", + "type": "symbol", + "source": "esri", + "source-layer": "Point of Interest", + "minzoom": 13, + "layout": { "text-font": ["Palatino Linotype Bold"], "text-size": 10.6667, "text-anchor": "bottom-left", "text-offset": [0.0883883, 0.211612], "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E", "text-halo-color": "rgba(255,255,255,0.99)", "text-halo-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Point of Interest/label/General Water Feature", + "type": "symbol", + "source": "esri", + "source-layer": "Point of Interest", + "minzoom": 13, + "layout": { "text-size": 10.6667, "text-font": ["Arial Italic"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/label/Airport", + "type": "symbol", + "source": "esri", + "source-layer": "Landuse/label", + "filter": ["==", "_label_class", 0], + "minzoom": 12, + "layout": { "text-font": ["Arial Regular"], "text-size": 11.3333, "text-letter-spacing": 0.09, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/BuildingFootprint/label/BuildingFootprint", + "type": "symbol", + "source": "esri", + "source-layer": "BuildingFootprint/label", + "minzoom": 11, + "layout": { "text-size": 10.6667, "text-font": ["Arial Regular"], "text-letter-spacing": 0.09, "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 0.7 }, + "showProperties": false + }, + { + "id": "Topo Layers/Point of Interest/label/General Feature", + "type": "symbol", + "source": "esri", + "source-layer": "Point of Interest", + "minzoom": 13, + "layout": { + "text-size": 10.6667, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.09, + "text-optional": true, + "text-anchor": "bottom-left", + "text-offset": [0.0883883, 0.211612], + "text-field": "{_name}" + }, + "paint": { "text-color": "#939d8c", "text-halo-color": "#ebedeb", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landforms/label/Oblong 10pt", + "type": "symbol", + "source": "esri", + "source-layer": "Landforms/label", + "filter": ["all", ["==", "_label_class", 0], ["==", "$type", "LineString"]], + "minzoom": 9, + "layout": { "symbol-placement": "line", "symbol-spacing": 1000, "text-font": ["Arial Italic"], "text-size": 13.3333, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landforms/label/Oblong 10pt/point", + "type": "symbol", + "source": "esri", + "source-layer": "Landforms/label", + "filter": ["all", ["==", "_label_class", 0], ["==", "$type", "Point"]], + "minzoom": 9, + "layout": { "text-font": ["Arial Italic"], "text-size": 13.3333, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landforms/label/Roundish 9pt", + "type": "symbol", + "source": "esri", + "source-layer": "Landforms/label", + "filter": ["==", "_label_class", 3], + "minzoom": 9, + "layout": { "text-font": ["Arial Italic"], "text-size": 12, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landforms/label/Roundish 10pt", + "type": "symbol", + "source": "esri", + "source-layer": "Landforms/label", + "filter": ["==", "_label_class", 1], + "minzoom": 9, + "layout": { "text-font": ["Arial Italic"], "text-size": 13.3333, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landforms/label/Long 10pt", + "type": "symbol", + "source": "esri", + "source-layer": "Landforms/label", + "filter": ["all", ["==", "_label_class", 5], ["==", "$type", "LineString"]], + "minzoom": 9, + "layout": { "symbol-placement": "line", "symbol-spacing": 1000, "text-font": ["Arial Italic"], "text-size": 13.3333, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landforms/label/Long 10pt/point", + "type": "symbol", + "source": "esri", + "source-layer": "Landforms/label", + "filter": ["all", ["==", "_label_class", 5], ["==", "$type", "Point"]], + "minzoom": 9, + "layout": { "text-font": ["Arial Italic"], "text-size": 13.3333, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Trails/label/Trail", + "type": "symbol", + "source": "esri", + "source-layer": "Trails/label", + "filter": ["==", "_label_class", 0], + "minzoom": 15, + "layout": { + "text-size": 9, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.08, + "text-optional": true, + "symbol-placement": "line", + "symbol-spacing": 288, + "text-anchor": "bottom", + "text-offset": [0, 0.05], + "text-field": "{_name}" + }, + "paint": { "text-color": "#666666", "text-halo-color": "#ffffff", "text-halo-width": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/First Nations/label/SmallReserves", + "type": "symbol", + "source": "esri", + "source-layer": "First Nations/label", + "filter": ["==", "_label_class", 1], + "minzoom": 11, + "layout": { "text-size": 13.3333, "text-font": ["Arial Regular"], "text-letter-spacing": 0.06, "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#595959", "text-halo-color": "#efefef", "text-halo-width": 1.33333 } + }, + { + "id": "Topo Layers/First Nations/label/Class 1", + "type": "symbol", + "source": "esri", + "source-layer": "First Nations/label", + "filter": ["==", "_label_class", 0], + "minzoom": 10, + "layout": { "text-size": 13.3333, "text-font": ["Arial Regular"], "text-letter-spacing": 0.06, "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#595959", "text-halo-color": "#efefef", "text-halo-width": 1 } + }, + { + "id": "Topo Layers/Small Scale Landuse/label/National Parks", + "type": "symbol", + "source": "esri", + "source-layer": "Small Scale Landuse/label", + "filter": ["==", "_label_class", 5], + "minzoom": 5, + "maxzoom": 8, + "layout": { "text-font": ["Arial Regular"], "text-size": 10.6667, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Small Scale Landuse/label/Nat/Prov Park - QC", + "type": "symbol", + "source": "esri", + "source-layer": "Small Scale Landuse/label", + "filter": ["==", "_label_class", 4], + "minzoom": 5, + "maxzoom": 8, + "layout": { "text-font": ["Tahoma Regular"], "text-size": 10.6667, "text-field": "{_name}", "text-optional": true }, + "paint": {} + }, + { + "id": "Topo Layers/Small Scale Landuse/label/Provincial Park", + "type": "symbol", + "source": "esri", + "source-layer": "Small Scale Landuse/label", + "filter": ["==", "_label_class", 1], + "minzoom": 5, + "maxzoom": 8, + "layout": { "text-font": ["Arial Regular"], "text-size": 10.6667, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landuse/label/NatPark - Victoria Islands", + "type": "symbol", + "source": "esri", + "source-layer": "Landuse/label", + "filter": ["==", "_label_class", 10], + "minzoom": 10, + "layout": { "text-font": ["Arial Regular"], "text-size": 10.6667, "text-letter-spacing": 0.06, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landuse/label/Provincial Park - QC", + "type": "symbol", + "source": "esri", + "source-layer": "Landuse/label", + "filter": ["==", "_label_class", 9], + "minzoom": 8, + "layout": { "text-font": ["Arial Regular"], "text-size": 10.6667, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landuse/label/Provincial Park", + "type": "symbol", + "source": "esri", + "source-layer": "Landuse/label", + "filter": ["==", "_label_class", 8], + "minzoom": 8, + "layout": { "text-size": 10.6667, "text-font": ["Arial Regular"], "text-allow-overlap": true, "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#939d8c", "text-halo-color": "#ebedeb", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/label/MedScaleParks", + "type": "symbol", + "source": "esri", + "source-layer": "Landuse/label", + "filter": ["==", "_label_class", 7], + "minzoom": 13, + "maxzoom": 14, + "layout": { "text-size": 9.33333, "text-font": ["Arial Regular"], "text-letter-spacing": 0.06, "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#939d8c", "text-halo-color": "#ebedeb", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/label/SmallScaleParks", + "type": "symbol", + "source": "esri", + "source-layer": "Landuse/label", + "filter": ["==", "_label_class", 6], + "minzoom": 12, + "maxzoom": 13, + "layout": { "text-size": 12, "text-font": ["Arial Regular"], "text-letter-spacing": 0.06, "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#939d8c", "text-halo-color": "#ebedeb", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/label/SmallScaleGolf", + "type": "symbol", + "source": "esri", + "source-layer": "Landuse/label", + "filter": ["==", "_label_class", 5], + "minzoom": 12, + "maxzoom": 14, + "layout": { "text-font": ["Arial Regular"], "text-size": 11.3333, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landuse/label/SmallScaleCemetery", + "type": "symbol", + "source": "esri", + "source-layer": "Landuse/label", + "filter": ["==", "_label_class", 4], + "minzoom": 13, + "maxzoom": 14, + "layout": { "text-font": ["Arial Regular"], "text-size": 10.6667, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Landuse/label/Landuse", + "type": "symbol", + "source": "esri", + "source-layer": "Landuse/label", + "filter": ["==", "_label_class", 3], + "minzoom": 14, + "layout": { "text-size": 10.6667, "text-font": ["Arial Regular"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#939d8c", "text-halo-color": "#ebedeb", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/label/Parks", + "type": "symbol", + "source": "esri", + "source-layer": "Landuse/label", + "filter": ["==", "_label_class", 2], + "minzoom": 14, + "layout": { "text-size": 10.6667, "text-font": ["Arial Regular"], "text-letter-spacing": 0.06, "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#939d8c", "text-halo-color": "#ebedeb", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landuse/label/National Park", + "type": "symbol", + "source": "esri", + "source-layer": "Landuse/label", + "filter": ["==", "_label_class", 1], + "minzoom": 8, + "layout": { "text-font": ["Arial Regular"], "text-size": 10.6667, "text-letter-spacing": 0.06, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Waterline 4M/label/Class 1", + "type": "symbol", + "source": "esri", + "source-layer": "Waterline 4M/label", + "minzoom": 6, + "maxzoom": 7, + "layout": { + "text-size": 12, + "text-font": ["Arial Italic"], + "text-letter-spacing": 0.1, + "text-optional": true, + "symbol-placement": "line", + "symbol-spacing": 1000, + "text-anchor": "bottom", + "text-offset": [0, 0.188889], + "text-field": "{_name}" + }, + "paint": { "text-color": "#cfd3d4", "text-halo-color": "#efefef" }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterline 1M/label/Water 1M-288k", + "type": "symbol", + "source": "esri", + "source-layer": "Waterline 1M/label", + "filter": ["==", "_label_class", 1], + "minzoom": 8, + "maxzoom": 9, + "layout": { + "visibility": "none", + "text-size": 10.6667, + "text-font": ["Arial Italic"], + "text-letter-spacing": 0.1, + "text-optional": true, + "symbol-placement": "line", + "symbol-spacing": 1000, + "text-anchor": "bottom", + "text-offset": [0, 0.175], + "text-field": "{_name}" + }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterline 1M/label/Class 1", + "type": "symbol", + "source": "esri", + "source-layer": "Waterline 1M/label", + "filter": ["==", "_label_class", 0], + "minzoom": 7, + "maxzoom": 8, + "layout": { + "visibility": "none", + "text-size": 10.6667, + "text-font": ["Arial Italic"], + "text-letter-spacing": 0.1, + "text-optional": true, + "symbol-placement": "line", + "symbol-spacing": 1000, + "text-anchor": "bottom", + "text-offset": [0, 0.175], + "text-field": "{_name}" + }, + "paint": { "text-color": "#cfd3d4", "text-halo-color": "#efefef" }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterline Labels/label/Water 1M-288k", + "type": "symbol", + "source": "esri", + "source-layer": "Waterline Labels/label", + "filter": ["==", "_label_class", 1], + "minzoom": 9, + "maxzoom": 11, + "layout": { + "visibility": "none", + "text-size": 10.6667, + "text-font": ["Arial Italic"], + "text-letter-spacing": 0.1, + "text-optional": true, + "symbol-placement": "line", + "symbol-spacing": 1000, + "text-anchor": "bottom", + "text-offset": [0, 0.175], + "text-field": "{_name}" + }, + "paint": { "text-color": "#cfd3d4", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/RiverSegment_MUN/label/Stream or River", + "type": "symbol", + "source": "esri", + "source-layer": "RiverSegment_MUN/label", + "filter": ["==", "_label_class", 1], + "minzoom": 11, + "layout": { + "text-size": 10.6667, + "text-font": ["Arial Italic"], + "text-letter-spacing": 0.1, + "text-optional": true, + "symbol-placement": "line", + "symbol-spacing": 1000, + "text-anchor": "bottom", + "text-offset": [0, 0.175], + "text-field": "{_name}" + }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterbody_CANVEC1M/label/Rivers", + "type": "symbol", + "source": "esri", + "source-layer": "Waterbody_CANVEC1M/label", + "filter": ["all", ["==", "_label_class", 3], ["==", "$type", "LineString"]], + "minzoom": 9, + "maxzoom": 11, + "layout": { "text-size": 10.6667, "text-font": ["Arial Italic"], "text-optional": true, "symbol-placement": "line", "symbol-spacing": 1000, "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterbody_CANVEC1M/label/Rivers/point", + "type": "symbol", + "source": "esri", + "source-layer": "Waterbody_CANVEC1M/label", + "filter": ["all", ["==", "_label_class", 3], ["==", "$type", "Point"]], + "minzoom": 9, + "maxzoom": 11, + "layout": { "text-size": 10.6667, "text-font": ["Palatino Linotype Bold Italic"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Waterbody_CANVEC1M/label/All lakes", + "type": "symbol", + "source": "esri", + "source-layer": "Waterbody_CANVEC1M/label", + "filter": ["==", "_label_class", 2], + "minzoom": 9, + "maxzoom": 11, + "layout": { "text-size": 10, "text-font": ["Arial Italic"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#888f91", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 } + }, + { + "id": "Topo Layers/Waterbody_CANVEC1M/label/Lakes", + "type": "symbol", + "source": "esri", + "source-layer": "Waterbody_CANVEC1M/label", + "filter": ["==", "_label_class", 1], + "minzoom": 6, + "maxzoom": 9, + "layout": { "text-size": 10, "text-font": ["Arial Italic"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#888f91", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 } + }, + { + "id": "Topo Layers/Waterbody_CANVEC1M/label/Class 1", + "type": "symbol", + "source": "esri", + "source-layer": "Waterbody_CANVEC1M/label", + "filter": ["==", "_label_class", 0], + "minzoom": 4.62, + "maxzoom": 9, + "layout": { "text-size": 10, "text-font": ["Arial Italic"], "text-letter-spacing": 0.1, "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#888f91", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 } + }, + { + "id": "Topo Layers/Community Waterbodies/label/SmallLake/Ponds", + "type": "symbol", + "source": "esri", + "source-layer": "Community Waterbodies/label", + "filter": ["==", "_label_class", 7], + "minzoom": 12, + "layout": { "text-size": 11.3333, "text-font": ["Arial Italic"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/label/Lake/Ponds", + "type": "symbol", + "source": "esri", + "source-layer": "Community Waterbodies/label", + "filter": ["==", "_label_class", 6], + "minzoom": 12, + "layout": { "text-size": 11.3333, "text-font": ["Arial Italic"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/label/Ponds", + "type": "symbol", + "source": "esri", + "source-layer": "Community Waterbodies/label", + "filter": ["==", "_label_class", 5], + "minzoom": 14, + "layout": { "text-size": 9.33333, "text-font": ["Arial Italic"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#888f91", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 } + }, + { + "id": "Topo Layers/Community Waterbodies/label/Bays", + "type": "symbol", + "source": "esri", + "source-layer": "Community Waterbodies/label", + "filter": ["==", "_label_class", 4], + "minzoom": 11, + "layout": { "text-size": 10.6667, "text-font": ["Arial Italic"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#888f91", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 } + }, + { + "id": "Topo Layers/Community Waterbodies/label/Sea/Ocean", + "type": "symbol", + "source": "esri", + "source-layer": "Community Waterbodies/label", + "filter": ["==", "_label_class", 3], + "minzoom": 11, + "layout": { "text-size": 13.3333, "text-font": ["Arial Italic"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Community Waterbodies/label/LargeLakes", + "type": "symbol", + "source": "esri", + "source-layer": "Community Waterbodies/label", + "filter": ["==", "_label_class", 2], + "minzoom": 11, + "layout": { "text-size": 12, "text-font": ["Arial Italic"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#888f91", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 } + }, + { + "id": "Topo Layers/Community Waterbodies/label/Rivers", + "type": "symbol", + "source": "esri", + "source-layer": "Community Waterbodies/label", + "filter": ["all", ["==", "_label_class", 1], ["==", "$type", "LineString"]], + "minzoom": 11, + "layout": { "text-size": 12, "text-font": ["Arial Italic"], "text-optional": true, "symbol-placement": "line", "symbol-spacing": 1000, "text-field": "{_name}" }, + "paint": { "text-color": "#888f91", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 } + }, + { + "id": "Topo Layers/Community Waterbodies/label/Rivers/point", + "type": "symbol", + "source": "esri", + "source-layer": "Community Waterbodies/label", + "filter": ["all", ["==", "_label_class", 1], ["==", "$type", "Point"]], + "minzoom": 11, + "layout": { "text-size": 12, "text-font": ["Arial Italic"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Island/label/LargeIslands - LargeScale", + "type": "symbol", + "source": "esri", + "source-layer": "Island/label", + "filter": ["==", "_label_class", 2], + "minzoom": 11, + "layout": { "text-size": 18.6667, "text-font": ["Arial Italic"], "text-letter-spacing": 0.11, "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 2 }, + "showProperties": false + }, + { + "id": "Topo Layers/Island/label/Islands - Large", + "type": "symbol", + "source": "esri", + "source-layer": "Island/label", + "filter": ["==", "_label_class", 1], + "minzoom": 5, + "maxzoom": 11, + "layout": { "text-size": 13.3333, "text-font": ["Arial Italic"], "text-letter-spacing": 0.09, "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 2, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Island/label/Class 1", + "type": "symbol", + "source": "esri", + "source-layer": "Island/label", + "filter": ["==", "_label_class", 0], + "minzoom": 12, + "layout": { "text-size": 10.6667, "text-font": ["Arial Regular"], "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 2, "text-halo-blur": 1 } + }, + { + "id": "Topo Layers/Road Segment/label/Ferry", + "type": "symbol", + "source": "esri", + "source-layer": "Road Segment/label", + "filter": ["==", "_label_class", 7], + "minzoom": 9, + "layout": { + "text-size": 10, + "text-font": ["Arial Regular"], + "text-optional": true, + "symbol-placement": "line", + "symbol-spacing": 1000, + "text-anchor": "bottom", + "text-offset": [0, 0.166667], + "text-field": "{_name}" + }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/label/Service/Rec/Resource", + "type": "symbol", + "source": "esri", + "source-layer": "Road Segment/label", + "filter": ["==", "_label_class", 6], + "minzoom": 13, + "layout": { "text-size": 10.6667, "text-font": ["Arial Regular"], "text-optional": true, "symbol-placement": "line", "symbol-spacing": 1000, "text-field": "{_name}" }, + "paint": { "text-color": "#666666", "text-halo-color": "#FFFFFF", "text-halo-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/label/Collector/Local", + "type": "symbol", + "source": "esri", + "source-layer": "Road Segment/label", + "filter": ["==", "_label_class", 5], + "minzoom": 13, + "layout": { "text-size": 10, "text-font": ["Arial Regular"], "text-optional": true, "symbol-placement": "line", "symbol-spacing": 1000, "text-field": "{_name}" }, + "paint": { "text-color": "#666666", "text-halo-color": "#FFFFFF", "text-halo-width": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/label/Arterial", + "type": "symbol", + "source": "esri", + "source-layer": "Road Segment/label", + "filter": ["==", "_label_class", 4], + "minzoom": 12, + "layout": { + "text-size": { + "base": 1, + "stops": [ + [0, 10], + [18, 10] + ] + }, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.01, + "text-optional": true, + "symbol-placement": "line", + "symbol-spacing": 576, + "text-field": "{_name}" + }, + "paint": { "text-color": "#666666", "text-halo-color": "#FFFFFF", "text-halo-width": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/label/Freeway/Highway", + "type": "symbol", + "source": "esri", + "source-layer": "Road Segment/label", + "filter": ["==", "_label_class", 3], + "minzoom": 12, + "layout": { "text-size": 10, "text-font": ["Arial Regular"], "text-optional": true, "symbol-placement": "line", "symbol-spacing": 576, "text-field": "{_name}" }, + "paint": { "text-color": "#666666", "text-halo-color": "#FFFFFF", "text-halo-width": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Road Segment/label/Regional Hwy", + "type": "symbol", + "source": "esri", + "source-layer": "Road Segment/label", + "filter": ["==", "_label_class", 2], + "minzoom": 12, + "layout": { + "text-size": 10.6667, + "text-font": ["Arial Bold"], + "text-letter-spacing": 0.013, + "text-rotation-alignment": "viewport", + "icon-rotation-alignment": "viewport", + "symbol-placement": "line", + "symbol-spacing": 576, + "text-offset": [0, 0.125], + "text-field": "{_name}", + "icon-image": "Topo Layers/Road Segment/Regional Hwy" + }, + "paint": { "icon-opacity": 0.85, "text-color": "#4E4E4E" } + }, + { + "id": "Topo Layers/Road Segment/label/LocalHwy", + "type": "symbol", + "source": "esri", + "source-layer": "Road Segment/label", + "filter": ["==", "_label_class", 1], + "minzoom": 9, + "layout": { + "text-size": 9.33333, + "text-font": ["Arial Regular"], + "text-padding": 30, + "text-letter-spacing": 0.01, + "text-rotation-alignment": "viewport", + "icon-rotation-alignment": "viewport", + "symbol-placement": "line", + "symbol-spacing": 672, + "text-field": "{_name}", + "icon-image": "Topo Layers/Road Segment/LocalHwy" + }, + "paint": { "icon-opacity": 0.7 } + }, + { + "id": "Topo Layers/Road Segment/label/Class 1", + "type": "symbol", + "source": "esri", + "source-layer": "Road Segment/label", + "filter": ["==", "_label_class", 0], + "minzoom": 9, + "layout": { + "text-size": 9.33333, + "text-font": ["Arial Regular"], + "text-padding": 30, + "text-letter-spacing": 0.01, + "text-rotation-alignment": "viewport", + "icon-rotation-alignment": "viewport", + "symbol-placement": "line", + "symbol-spacing": 480, + "text-offset": [0, 0.142857], + "text-field": "{_name}", + "icon-image": "Topo Layers/Road Segment/Class 1" + }, + "paint": { "text-halo-color": "#FFFFFF", "text-halo-width": 0.666667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Rail/label/Class 1", + "type": "symbol", + "source": "esri", + "source-layer": "Rail/label", + "minzoom": 15, + "layout": { + "text-size": 8, + "text-font": ["Arial Regular"], + "text-optional": true, + "symbol-placement": "line", + "symbol-spacing": 1000, + "text-anchor": "bottom", + "text-offset": [0, 0.133333], + "text-field": "{_name}" + }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Ferry Lines/label/Class 1", + "type": "symbol", + "source": "esri", + "source-layer": "Ferry Lines/label", + "minzoom": 11, + "layout": { "text-size": 9.33333, "text-font": ["Arial Regular"], "text-optional": true, "symbol-placement": "line", "symbol-spacing": 1000, "text-field": "{_name}" }, + "paint": { "text-color": "#888f91", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Spot Elevation", + "type": "symbol", + "source": "esri", + "source-layer": "Spot Elevation", + "minzoom": 8, + "layout": { + "icon-image": "Topo Layers/Spot Elevation", + "icon-allow-overlap": true, + "text-font": ["Arial Italic"], + "text-size": 10.6667, + "text-anchor": "bottom-left", + "text-offset": [0.213388, 0.0866117], + "text-field": "{_name}", + "text-optional": true + }, + "paint": { "icon-color": "#7D7368", "icon-opacity": 0.79, "text-color": "#828282", "text-halo-color": "#FFFFFF", "text-halo-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Topo Layers/Water Label/label/General Water Feature", + "type": "symbol", + "source": "esri", + "source-layer": "Water Label", + "minzoom": 13, + "layout": { "text-size": 10.6667, "text-font": ["Arial Italic"], "text-optional": true, "text-anchor": "bottom-left", "text-offset": [0.0883883, 0.211612], "text-field": "{_name}" }, + "paint": { "text-color": "#888f91", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 } + }, + { + "id": "Topo Layers/Water Label/label/Bays", + "type": "symbol", + "source": "esri", + "source-layer": "Water Label", + "minzoom": 12, + "layout": { "text-size": 10.6667, "text-font": ["Arial Italic"], "text-optional": true, "text-anchor": "bottom-left", "text-offset": [0.0883883, 0.211612], "text-field": "{_name}" }, + "paint": { "text-color": "#888f91", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 } + }, + { + "id": "Topo Layers/Water Label/label/Islands", + "type": "symbol", + "source": "esri", + "source-layer": "Water Label", + "minzoom": 12, + "layout": { "text-size": 10.6667, "text-font": ["Arial Italic"], "text-optional": true, "text-anchor": "bottom-left", "text-offset": [0.0883883, 0.211612], "text-field": "{_name}" }, + "paint": { "text-color": "#808080", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Topo Layers/Point of Interest/label/General Feature - QC", + "type": "symbol", + "source": "esri", + "source-layer": "Point of Interest", + "minzoom": 13, + "layout": { + "text-font": ["Arial Regular"], + "text-size": 10.6667, + "text-anchor": "bottom-left", + "text-offset": [0.0883883, 0.211612], + "text-letter-spacing": 0.09, + "text-field": "{_name}", + "text-optional": true + }, + "paint": { "text-color": "#343434" } + }, + { + "id": "Topo Layers/Point of Interest/label/General Feature - NS", + "type": "symbol", + "source": "esri", + "source-layer": "Point of Interest", + "minzoom": 14, + "layout": { + "text-font": ["Arial Regular"], + "text-size": 10.6667, + "text-anchor": "bottom-left", + "text-offset": [0.0883883, 0.211612], + "text-letter-spacing": 0.09, + "text-field": "{_name}", + "text-optional": true + }, + "paint": { "text-color": "#343434" } + }, + { + "id": "Topo Layers/Landform_ESRI/label/288k Labels", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 11], ["==", "$type", "LineString"]], + "minzoom": 10, + "maxzoom": 13, + "layout": { "symbol-placement": "line", "symbol-spacing": 1000, "text-font": ["Arial Italic"], "text-size": 10, "text-letter-spacing": 0.27, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/288k Labels/point", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 11], ["==", "$type", "Point"]], + "minzoom": 10, + "maxzoom": 13, + "layout": { "text-font": ["Arial Italic"], "text-size": 10, "text-letter-spacing": 0.27, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/577k Labels", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 10], ["==", "$type", "LineString"]], + "minzoom": 9, + "maxzoom": 12, + "layout": { "symbol-placement": "line", "symbol-spacing": 1000, "text-font": ["Arial Italic"], "text-size": 10, "text-letter-spacing": 0.27, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/577k Labels/point", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 10], ["==", "$type", "Point"]], + "minzoom": 9, + "maxzoom": 12, + "layout": { "text-font": ["Arial Italic"], "text-size": 10, "text-letter-spacing": 0.27, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/1mLabels", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 9], ["==", "$type", "LineString"]], + "minzoom": 8, + "maxzoom": 12, + "layout": { "symbol-placement": "line", "symbol-spacing": 1000, "text-font": ["Arial Italic"], "text-size": 10, "text-letter-spacing": 0.1, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/1mLabels/point", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 9], ["==", "$type", "Point"]], + "minzoom": 8, + "maxzoom": 12, + "layout": { "text-font": ["Arial Italic"], "text-size": 10, "text-letter-spacing": 0.1, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/Mountains - 4m", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 8], ["==", "$type", "LineString"]], + "minzoom": 6, + "maxzoom": 8, + "layout": { "symbol-placement": "line", "symbol-spacing": 1000, "text-font": ["Arial Italic"], "text-size": 9.33333, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/Mountains - 4m/point", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 8], ["==", "$type", "Point"]], + "minzoom": 6, + "maxzoom": 8, + "layout": { "text-font": ["Arial Italic"], "text-size": 9.33333, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/2mlabels", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["==", "_label_class", 7], + "minzoom": 7, + "maxzoom": 9, + "layout": { "text-font": ["Arial Italic"], "text-size": 10, "text-letter-spacing": 0.27, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/9mlabels", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["==", "_label_class", 5], + "minzoom": 5, + "maxzoom": 8, + "layout": { "text-font": ["Arial Italic"], "text-size": 9.33333, "text-letter-spacing": 0.27, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/ArcticLarge", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["==", "_label_class", 4], + "minzoom": 4, + "maxzoom": 6, + "layout": { "text-font": ["Arial Italic"], "text-size": 13.3333, "text-letter-spacing": 0.5, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/Ranges", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 2], ["==", "$type", "LineString"]], + "minzoom": 4, + "maxzoom": 8, + "layout": { "symbol-placement": "line", "symbol-spacing": 1000, "text-font": ["Arial Italic"], "text-size": 10.6667, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/Ranges/point", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 2], ["==", "$type", "Point"]], + "minzoom": 4, + "maxzoom": 8, + "layout": { "text-font": ["Arial Italic"], "text-size": 10.6667, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/IslandsLarge", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 1], ["==", "$type", "LineString"]], + "minzoom": 4, + "maxzoom": 6, + "layout": { "symbol-placement": "line", "symbol-spacing": 1000, "text-font": ["Arial Italic"], "text-letter-spacing": 0.5, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/IslandsLarge/point", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["all", ["==", "_label_class", 1], ["==", "$type", "Point"]], + "minzoom": 4, + "maxzoom": 6, + "layout": { "text-font": ["Arial Italic"], "text-letter-spacing": 0.5, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Topo Layers/Landform_ESRI/label/SmallScaleIslands", + "type": "symbol", + "source": "esri", + "source-layer": "Landform_ESRI/label", + "filter": ["==", "_label_class", 0], + "minzoom": 4, + "maxzoom": 7, + "layout": { "text-font": ["Arial Italic"], "text-size": 10, "text-letter-spacing": 0.27, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#686868", "text-halo-color": "#E1E1E1", "text-halo-width": 0.266667 }, + "showProperties": false + }, + { + "id": "Cities - largest scale/label/Pclass0", + "type": "symbol", + "source": "esri", + "source-layer": "Cities - largest scale", + "minzoom": 12, + "layout": { + "text-size": { + "base": 1, + "stops": [ + [10, 10], + [16, 13] + ] + }, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.05, + "text-optional": true, + "text-anchor": "bottom-left", + "text-offset": [0.083189, 0.216811], + "text-field": "{_name3}" + }, + "paint": { "text-color": "#353635", "text-halo-color": "#efefef", "text-halo-width": 1 }, + "showProperties": false + }, + { + "id": "Cities - largest scale/label/Neighbourhoods", + "type": "symbol", + "source": "esri", + "source-layer": "Cities - largest scale", + "minzoom": 11, + "layout": { + "text-size": { + "base": 1, + "stops": [ + [10, 9.5], + [16, 15] + ] + }, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.05, + "text-optional": true, + "text-anchor": "bottom-left", + "text-offset": [0.0883883, 0.211612], + "text-field": "{_name2}" + }, + "paint": { "text-color": "#353635", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Cities - largest scale/label/Pclass467", + "type": "symbol", + "source": "esri", + "source-layer": "Cities - largest scale", + "minzoom": 11, + "layout": { + "text-size": 14.6667, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.11, + "text-optional": true, + "text-anchor": "bottom-left", + "text-offset": [0.0642824, 0.235718], + "text-field": "{_name1}" + }, + "paint": { "text-color": "#353635", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Cities - largest scale/label/Pclass8", + "type": "symbol", + "source": "esri", + "source-layer": "Cities - largest scale", + "minzoom": 11, + "layout": { + "text-size": 17.3333, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.11, + "text-optional": true, + "text-anchor": "bottom-left", + "text-offset": [0.0543928, 0.245607], + "text-field": "{_name}" + }, + "paint": { "text-color": "#353635", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Cities -mid scale/label/pclass6", + "type": "symbol", + "source": "esri", + "source-layer": "Cities -mid scale", + "minzoom": 6, + "maxzoom": 8, + "layout": { + "text-size": 11, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.09, + "text-optional": true, + "text-anchor": "bottom-left", + "text-offset": [0.083189, 0.216811], + "text-field": "{_name2}" + }, + "paint": { "text-color": "#353635", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Cities -mid scale/label/Pclass7", + "type": "symbol", + "source": "esri", + "source-layer": "Cities -mid scale", + "minzoom": 6, + "maxzoom": 8, + "layout": { + "text-size": 12.6667, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.09, + "text-optional": true, + "text-anchor": "bottom-left", + "text-offset": [0.0744323, 0.225568], + "text-field": "{_name1}" + }, + "paint": { "text-color": "#353635", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Cities -mid scale/label/Pclass8", + "type": "symbol", + "source": "esri", + "source-layer": "Cities -mid scale", + "minzoom": 6, + "maxzoom": 8, + "layout": { + "text-size": 13.3333, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.09, + "text-optional": true, + "text-anchor": "bottom-left", + "text-offset": [0.0707107, 0.229289], + "text-field": "{_name}" + }, + "paint": { "text-color": "#353635", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Cities - large scale/label/Under500k", + "type": "symbol", + "source": "esri", + "source-layer": "Cities - large scale", + "minzoom": 10, + "maxzoom": 11, + "layout": { "text-size": 11.3333, "text-font": ["Arial Regular"], "text-optional": true, "text-anchor": "bottom-left", "text-offset": [0.083189, 0.216811], "text-field": "{_name3}" }, + "paint": { "text-color": "#353635", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Cities - large scale/label/Under1M", + "type": "symbol", + "source": "esri", + "source-layer": "Cities - large scale", + "minzoom": 9, + "maxzoom": 11, + "layout": { "text-font": ["Arial Regular"], "text-size": 11.3333, "text-anchor": "bottom-left", "text-offset": [0.083189, 0.216811], "text-field": "{_name2}", "text-optional": true }, + "paint": { "text-color": "#343434", "text-halo-color": "#FFFFFF", "text-halo-width": 2 }, + "showProperties": false + }, + { + "id": "Cities - large scale/label/Under2M - Smaller", + "type": "symbol", + "source": "esri", + "source-layer": "Cities - large scale", + "minzoom": 8, + "maxzoom": 11, + "layout": { "text-font": ["Arial Regular"], "text-size": 13.3333, "text-anchor": "bottom-left", "text-offset": [0.0707107, 0.229289], "text-field": "{_name1}", "text-optional": true }, + "paint": { "text-color": "#343434", "text-halo-color": "#FFFFFF", "text-halo-width": 2 }, + "showProperties": false + }, + { + "id": "Cities - large scale/label/Under 2M-LargeCities", + "type": "symbol", + "source": "esri", + "source-layer": "Cities - large scale", + "minzoom": 8, + "maxzoom": 11, + "layout": { + "text-size": 13.3333, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.09, + "text-optional": true, + "text-anchor": "bottom-left", + "text-offset": [0.0707107, 0.229289], + "text-field": "{_name}" + }, + "paint": { "text-color": "#353635", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Major Cities - small scale", + "type": "symbol", + "source": "esri", + "source-layer": "Major Cities - small scale", + "minzoom": 4, + "maxzoom": 5, + "layout": { + "text-size": 10.6667, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.09, + "text-optional": true, + "icon-allow-overlap": true, + "text-anchor": "bottom-left", + "text-offset": [0.369638, -0.0696383], + "text-field": "{_name}" + }, + "paint": { "text-color": "#343434", "text-halo-color": "#FFFFFF", "text-halo-width": 2 }, + "showProperties": false + }, + { + "id": "Capital Cities - small scale", + "type": "symbol", + "source": "esri", + "source-layer": "Capital Cities - small scale", + "minzoom": 3, + "maxzoom": 6, + "layout": { + "text-size": 11, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.09, + "text-optional": true, + "icon-allow-overlap": true, + "text-anchor": "bottom-left", + "text-offset": [0.463388, -0.163388], + "text-field": "{_name}" + }, + "paint": { "text-color": "#353635", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Cities - small scale ", + "type": "symbol", + "source": "esri", + "source-layer": "Cities - small scale ", + "minzoom": 5, + "maxzoom": 6, + "layout": { + "text-size": 11, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.09, + "text-optional": true, + "icon-allow-overlap": true, + "text-anchor": "bottom-left", + "text-offset": [0.369638, -0.0696383], + "text-field": "{_name}" + }, + "paint": { "text-color": "#353635", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Site Address Point/label/GeneralBuildings", + "type": "symbol", + "source": "esri", + "source-layer": "Site Address Point", + "minzoom": 17, + "layout": { "text-font": ["Tahoma Regular"], "text-size": 9.33333, "text-anchor": "bottom-left", "text-offset": [0.101015, 0.198985], "text-field": "{_name1}", "text-optional": true }, + "paint": { "text-color": "#9C9C9C" } + }, + { + "id": "Site Address Point/label/Units", + "type": "symbol", + "source": "esri", + "source-layer": "Site Address Point", + "minzoom": 17, + "layout": { "text-font": ["Tahoma Regular"], "text-size": 9.33333, "text-anchor": "bottom-left", "text-offset": [0.101015, 0.198985], "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#9C9C9C" } + }, + { + "id": "Province Label small scale/label/Canada", + "type": "symbol", + "source": "esri", + "source-layer": "Province Label small scale", + "minzoom": 2, + "maxzoom": 5, + "layout": { "text-size": 14.6667, "text-font": ["Arial Bold"], "text-letter-spacing": 0.3, "text-optional": true, "text-field": "{_name3}" }, + "paint": { "text-color": "#aaafac", "text-halo-color": "#f7f7f7", "text-halo-width": 1, "text-halo-blur": 1 }, + "showProperties": false + }, + { + "id": "Province Label small scale/label/PEI", + "type": "symbol", + "source": "esri", + "source-layer": "Province Label small scale", + "minzoom": 5, + "maxzoom": 6, + "layout": { + "text-font": ["Arial Regular"], + "text-size": 10.6667, + "text-anchor": "bottom-left", + "text-offset": [0.0883883, 0.211612], + "text-letter-spacing": 0.1, + "text-field": "{_name2}", + "text-optional": true + }, + "paint": { "text-color": "#797B7D", "text-halo-color": "#FFFFFF", "text-halo-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Province Label small scale/label/NS", + "type": "symbol", + "source": "esri", + "source-layer": "Province Label small scale", + "minzoom": 4, + "maxzoom": 6, + "layout": { + "text-font": ["Arial Regular"], + "text-size": 10.6667, + "text-anchor": "bottom-left", + "text-offset": [0.0883883, 0.211612], + "text-letter-spacing": 0.1, + "text-field": "{_name1}", + "text-optional": true + }, + "paint": { "text-color": "#797B7D", "text-halo-color": "#FFFFFF", "text-halo-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Province Label small scale/label/Class 1", + "type": "symbol", + "source": "esri", + "source-layer": "Province Label small scale", + "minzoom": 4, + "maxzoom": 6, + "layout": { "text-size": 12, "text-font": ["Arial Regular"], "text-letter-spacing": 0.1, "text-optional": true, "text-field": "{_name}" }, + "paint": { "text-color": "#b4b4b4", "text-halo-color": "#efefef", "text-halo-width": 1, "text-halo-blur": 1 } + }, + { + "id": "Province Label/label/PEI", + "type": "symbol", + "source": "esri", + "source-layer": "Province Label", + "minzoom": 6, + "maxzoom": 8, + "layout": { + "text-font": ["Arial Bold"], + "text-size": 12.6667, + "text-anchor": "bottom-left", + "text-offset": [0.0744323, 0.225568], + "text-letter-spacing": 0.1, + "text-field": "{_name2}", + "text-optional": true + }, + "paint": { "text-color": "#797B7D", "text-halo-color": "#FFFFFF", "text-halo-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Province Label/label/NS", + "type": "symbol", + "source": "esri", + "source-layer": "Province Label", + "minzoom": 6, + "maxzoom": 8, + "layout": { + "text-font": ["Arial Bold"], + "text-size": 12.6667, + "text-anchor": "bottom-left", + "text-offset": [0.0744323, 0.225568], + "text-letter-spacing": 0.1, + "text-field": "{_name1}", + "text-optional": true + }, + "paint": { "text-color": "#797B7D", "text-halo-color": "#FFFFFF", "text-halo-width": 1.33333 }, + "showProperties": false + }, + { + "id": "Province Label/label/Class 1", + "type": "symbol", + "source": "esri", + "source-layer": "Province Label", + "minzoom": 6, + "maxzoom": 8, + "layout": { "text-font": ["Arial Regular"], "text-size": 14.6667, "text-letter-spacing": 0.1, "text-field": "{_name}", "text-optional": true }, + "paint": { "text-color": "#797B7D", "text-halo-color": "#FFFFFF", "text-halo-width": 1.33333 }, + "showProperties": false + } + ], + "metadata": { + "arcgisStyleUrl": "https://www.arcgis.com/sharing/rest/content/items/0baf45ff172d4917b12f3a691bc87553/resources/styles/root.json", + "arcgisOriginalItemTitle": "Light Grey Community Map", + "arcgisQuickEditorWarning": true, + "arcgisEditorExtents": [ + { "spatialReference": { "wkid": 102100 }, "xmin": -7913441.505121151, "ymin": 5899440.250227741, "xmax": -7901631.984251108, "ymax": 5907198.6085986765 }, + { "spatialReference": { "latestWkid": 3857, "wkid": 102100 }, "xmin": -19322061.05146325, "ymin": 4451995.507110002, "xmax": -2111480.984136753, "ymax": 18986540.259090003 }, + { "spatialReference": { "latestWkid": 3857, "wkid": 102100 }, "xmin": -19322061.05146325, "ymin": 4451995.507110002, "xmax": -2111480.984136753, "ymax": 18986540.259090003 }, + { "spatialReference": { "latestWkid": 3857, "wkid": 102100 }, "xmin": -19322061.05146325, "ymin": 4451995.507110002, "xmax": -2111480.984136753, "ymax": 18986540.259090003 } + ], + "arcgisMinimapVisibility": false + } +} diff --git a/public/basemap/ESRI_Streets_Night_Background.json b/public/basemap/ESRI_Streets_Night_Background.json index 02489976..9756ea5a 100644 --- a/public/basemap/ESRI_Streets_Night_Background.json +++ b/public/basemap/ESRI_Streets_Night_Background.json @@ -1 +1,5459 @@ -{"version":8,"sprite":"https://cdn.arcgis.com/sharing/rest/content/items/86f556a2d1fd468181855a35e344567f/resources/styles/../sprites/sprite","glyphs":"https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer/resources/fonts/{fontstack}/{range}.pbf","sources":{"esri":{"type":"vector","url":"https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer"}},"layers":[{"id":"background","type":"background","paint":{"background-color":"#000f1a"},"layout":{}},{"id":"Land/Not ice","type":"fill","source":"esri","source-layer":"Land","filter":["==","_symbol",0],"minzoom":0,"layout":{},"paint":{"fill-color":"#2a2a28"}},{"id":"Land/Ice","type":"fill","source":"esri","source-layer":"Land","filter":["==","_symbol",1],"minzoom":0,"layout":{},"paint":{"fill-color":"#20262e"}},{"id":"Urban area","type":"fill","source":"esri","source-layer":"Urban area","minzoom":5,"maxzoom":12,"layout":{},"paint":{"fill-color":"#323230"}},{"id":"Openspace or forest","type":"fill","source":"esri","source-layer":"Openspace or forest","minzoom":9,"layout":{},"paint":{"fill-color":"#263323"}},{"id":"Admin0 forest or park","type":"fill","source":"esri","source-layer":"Admin0 forest or park","minzoom":5,"layout":{},"paint":{"fill-color":{"stops":[[5,"#282f26"],[6,"#263323"]]}}},{"id":"Admin1 forest or park","type":"fill","source":"esri","source-layer":"Admin1 forest or park","minzoom":6,"layout":{},"paint":{"fill-color":"#263323"}},{"id":"Zoo","type":"fill","source":"esri","source-layer":"Zoo","minzoom":11,"layout":{},"paint":{"fill-color":"#263323"}},{"id":"Military","type":"fill","source":"esri","source-layer":"Military","minzoom":6,"layout":{},"paint":{"fill-color":"#2F3238","fill-outline-color":"#2F3238"}},{"id":"Port","type":"fill","source":"esri","source-layer":"Port","minzoom":13,"layout":{},"paint":{"fill-color":"#3A3C45"}},{"id":"Transportation","type":"fill","source":"esri","source-layer":"Transportation","minzoom":13,"layout":{},"paint":{"fill-color":"#3A3C45"}},{"id":"Industry","type":"fill","source":"esri","source-layer":"Industry","minzoom":13,"layout":{},"paint":{"fill-color":"#3A3C45"}},{"id":"Indigenous","type":"fill","source":"esri","source-layer":"Indigenous","minzoom":7,"layout":{},"paint":{"fill-color":"#302D25"}},{"id":"Golf course","type":"fill","source":"esri","source-layer":"Golf course","minzoom":11,"layout":{},"paint":{"fill-color":"#263323"}},{"id":"Airport/Airport property","type":"fill","source":"esri","source-layer":"Airport","filter":["==","_symbol",1],"minzoom":9,"layout":{},"paint":{"fill-color":"#2F3238"}},{"id":"Airport/Airport runway","type":"fill","source":"esri","source-layer":"Airport","filter":["==","_symbol",0],"minzoom":11,"layout":{},"paint":{"fill-color":"#3A3C45"}},{"id":"Retail","type":"fill","source":"esri","source-layer":"Retail","minzoom":13,"layout":{},"paint":{"fill-color":"#38324D"}},{"id":"Education","type":"fill","source":"esri","source-layer":"Education","minzoom":11,"layout":{},"paint":{"fill-color":"#402C2E"}},{"id":"Medical","type":"fill","source":"esri","source-layer":"Medical","minzoom":11,"layout":{},"paint":{"fill-color":"#453108"}},{"id":"Park or farming","type":"fill","source":"esri","source-layer":"Park or farming","minzoom":11,"layout":{},"paint":{"fill-color":"#263323"}},{"id":"Water and wastewater","type":"fill","source":"esri","source-layer":"Water and wastewater","minzoom":13,"layout":{},"paint":{"fill-color":"#000F1A"}},{"id":"Freight","type":"fill","source":"esri","source-layer":"Freight","minzoom":13,"layout":{},"paint":{"fill-color":"#3A3C45"}},{"id":"Cemetery","type":"fill","source":"esri","source-layer":"Cemetery","minzoom":13,"layout":{},"paint":{"fill-color":"#283827"}},{"id":"Landmark","type":"fill","source":"esri","source-layer":"Landmark","minzoom":13,"layout":{},"paint":{"fill-color":"#243021"}},{"id":"Finance","type":"fill","source":"esri","source-layer":"Finance","minzoom":13,"layout":{},"paint":{"fill-color":"#38324D"}},{"id":"Government","type":"fill","source":"esri","source-layer":"Government","minzoom":13,"layout":{},"paint":{"fill-color":"#453108"}},{"id":"Emergency","type":"fill","source":"esri","source-layer":"Emergency","minzoom":13,"layout":{},"paint":{"fill-color":"#453108"}},{"id":"Pedestrian","type":"fill","source":"esri","source-layer":"Pedestrian","minzoom":13,"layout":{},"paint":{"fill-color":"#403e38"}},{"id":"Special area of interest/Green openspace","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",11],"minzoom":14,"layout":{},"paint":{"fill-color":"#283827"}},{"id":"Special area of interest/Grass","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",8],"minzoom":14,"layout":{},"paint":{"fill-color":"#283827"}},{"id":"Marine area/1","type":"fill","source":"esri","source-layer":"Marine area","minzoom":0,"layout":{},"paint":{"fill-color":"#000F1A"}},{"id":"Bathymetry","type":"fill","source":"esri","source-layer":"Bathymetry","filter":["in","_symbol",0,1,2,3,4,5],"maxzoom":11,"layout":{"visibility":"visible"},"paint":{"fill-color":"#000F1A"}},{"id":"Water line small scale","type":"line","source":"esri","source-layer":"Water line small scale","minzoom":1,"maxzoom":5,"layout":{"line-join":"round"},"paint":{"line-color":"#000F23","line-width":{"base":1.2,"stops":[[1,0.5],[5,1.33]]}}},{"id":"Water line medium scale","type":"line","source":"esri","source-layer":"Water line medium scale","minzoom":5,"maxzoom":7,"layout":{"line-join":"round"},"paint":{"line-color":"#000F23","line-width":{"base":1.2,"stops":[[5,0.5],[7,1.33]]}}},{"id":"Water line large scale","type":"line","source":"esri","source-layer":"Water line large scale","minzoom":7,"maxzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#000F23","line-width":{"base":1.2,"stops":[[7,1],[11,1.33]]}}},{"id":"Water line/Canal or ditch","type":"line","source":"esri","source-layer":"Water line","filter":["==","_symbol",1],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#000F23","line-width":{"base":1.2,"stops":[[11,1],[14,1.33],[17,2.67]]},"line-dasharray":[7.5,2.5]}},{"id":"Water line/Stream or river intermittent","type":"line","source":"esri","source-layer":"Water line","filter":["==","_symbol",4],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#000F23","line-dasharray":[10.5,1.75],"line-width":{"base":1.2,"stops":[[11,1],[14,1.33],[17,2]]}}},{"id":"Water line/Stream or river","type":"line","source":"esri","source-layer":"Water line","filter":["==","_symbol",0],"minzoom":11,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#000F23","line-width":{"base":1.2,"stops":[[11,1],[14,1.33],[17,2.67]]}}},{"id":"Water area small scale","type":"fill","source":"esri","source-layer":"Water area small scale","minzoom":1,"maxzoom":5,"layout":{},"paint":{"fill-color":"#000F1A"}},{"id":"Water area medium scale/Lake intermittent","type":"fill","source":"esri","source-layer":"Water area medium scale","filter":["==","_symbol",1],"minzoom":5,"maxzoom":7,"layout":{},"paint":{"fill-pattern":"Water area/Lake or river intermittent"}},{"id":"Water area medium scale/Lake or river","type":"fill","source":"esri","source-layer":"Water area medium scale","filter":["==","_symbol",0],"minzoom":5,"maxzoom":7,"layout":{},"paint":{"fill-color":"#000F1A"}},{"id":"Water area large scale/Lake intermittent","type":"fill","source":"esri","source-layer":"Water area large scale","filter":["==","_symbol",1],"minzoom":7,"maxzoom":11,"layout":{},"paint":{"fill-pattern":"Water area/Lake or river intermittent"}},{"id":"Water area large scale/Lake or river","type":"fill","source":"esri","source-layer":"Water area large scale","filter":["==","_symbol",0],"minzoom":7,"maxzoom":11,"layout":{},"paint":{"fill-color":"#000F1A"}},{"id":"Water area/Lake, river or bay","type":"fill","source":"esri","source-layer":"Water area","filter":["==","_symbol",7],"minzoom":11,"layout":{},"paint":{"fill-color":"#000F1A"}},{"id":"Water area/Lake or river intermittent","type":"fill","source":"esri","source-layer":"Water area","filter":["==","_symbol",6],"minzoom":11,"layout":{},"paint":{"fill-pattern":"Water area/Lake or river intermittent"}},{"id":"Water area/Swamp or marsh","type":"fill","source":"esri","source-layer":"Water area","filter":["==","_symbol",3],"minzoom":11,"layout":{},"paint":{"fill-pattern":"Water area/Swamp or marsh"}},{"id":"Water area/Playa","type":"fill","source":"esri","source-layer":"Water area","filter":["==","_symbol",1],"minzoom":12,"layout":{},"paint":{"fill-pattern":"Water area/Playa"}},{"id":"Water area/Ice mass","type":"fill","source":"esri","source-layer":"Water area","filter":["==","_symbol",2],"minzoom":11,"layout":{},"paint":{"fill-pattern":"Water area/Ice mass"}},{"id":"Special area of interest/Mulch or dirt","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",14],"minzoom":14,"layout":{},"paint":{"fill-color":"#2a2a28"}},{"id":"Special area of interest/Water","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",7],"minzoom":14,"layout":{},"paint":{"fill-color":"#000F1A"}},{"id":"Special area of interest/Football field or court","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",4],"minzoom":14,"layout":{},"paint":{"fill-color":"#47443c"}},{"id":"Special area of interest/Baseball field or other grounds","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",1],"minzoom":14,"layout":{},"paint":{"fill-color":"#47443c"}},{"id":"Special area of interest/Athletic track","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",0],"minzoom":14,"layout":{},"paint":{"fill-color":"#47443c"}},{"id":"Special area of interest/Hardcourt","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",10],"minzoom":14,"layout":{},"paint":{"fill-color":"#47443c"}},{"id":"Special area of interest/Parking","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",15],"minzoom":15,"layout":{},"paint":{"fill-color":"#44464F"}},{"id":"Special area of interest/Bike, walk or pedestrian","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",2],"minzoom":15,"layout":{},"paint":{"fill-color":"#403e38"}},{"id":"Special area of interest/Curb","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",3],"minzoom":14,"layout":{},"paint":{"fill-color":"#403e38"}},{"id":"Special area of interest/Garden path","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",12],"minzoom":14,"layout":{},"paint":{"fill-color":"#403e38"}},{"id":"Special area of interest/Groundcover","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",13],"minzoom":17,"layout":{},"paint":{"fill-color":"#263323"}},{"id":"Special area of interest/Sand","type":"fill","source":"esri","source-layer":"Special area of interest","filter":["==","_symbol",6],"minzoom":15,"layout":{},"paint":{"fill-color":"#2a2a28"}},{"id":"Special area of interest line/Dock or pier","type":"line","source":"esri","source-layer":"Special area of interest line","filter":["==","_symbol",0],"minzoom":17,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#626153","line-width":0.75}},{"id":"Special area of interest line/Parking lot","type":"line","source":"esri","source-layer":"Special area of interest line","filter":["==","_symbol",5],"minzoom":16,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#333440","line-width":0.67}},{"id":"Special area of interest line/Sports field","type":"line","source":"esri","source-layer":"Special area of interest line","filter":["==","_symbol",6],"minzoom":16,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#403e38","line-width":0.67}},{"id":"Railroad/casing","type":"line","source":"esri","source-layer":"Railroad","minzoom":12,"layout":{"line-join":"round"},"paint":{"line-color":"#506880","line-width":3.33}},{"id":"Railroad/line","type":"line","source":"esri","source-layer":"Railroad","minzoom":12,"layout":{"line-join":"round"},"paint":{"line-color":"#28282A","line-width":1.33}},{"id":"Ferry/Rail ferry/casing","type":"line","source":"esri","source-layer":"Ferry","filter":["all",["==","_symbol",1],["!in","Viz",3]],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#506880","line-width":3.33}},{"id":"Ferry/Rail ferry/line","type":"line","source":"esri","source-layer":"Ferry","filter":["all",["==","_symbol",1],["!in","Viz",3]],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#28282A","line-width":1.33}},{"id":"Ferry/Ferry","type":"line","source":"esri","source-layer":"Ferry","filter":["all",["==","_symbol",0],["!in","Viz",3]],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#1D4391","line-width":{"base":1.2,"stops":[[11,1.33],[14,1.5],[17,1.5]]},"line-dasharray":[6,3]}},{"id":"Building","type":"fill","source":"esri","source-layer":"Building","minzoom":15,"layout":{},"paint":{"fill-color":"#373845","fill-outline-color":"#515461"}},{"id":"Trail or path","type":"line","source":"esri","source-layer":"Trail or path","minzoom":15,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#403e38","line-width":{"base":1.2,"stops":[[14,1.6],[18,2.6]]}}},{"id":"Road/4WD/casing","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",10],["!in","Viz",3]],"minzoom":13,"layout":{"line-join":"round"},"paint":{"line-color":"#3161a0","line-dasharray":[3,1],"line-width":{"base":1.2,"stops":[[12,1.33],[14,2],[17,4]]}}},{"id":"Road/Service/casing","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",8],["!in","Viz",3]],"minzoom":13,"layout":{"line-join":"round"},"paint":{"line-color":"#30588d","line-width":{"base":1.2,"stops":[[13,2.25],[14,2.83],[17,4.5]]}}},{"id":"Road/Local/casing","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",7],["!in","Viz",3]],"minzoom":12,"layout":{"line-join":"round"},"paint":{"line-color":{"stops":[[12,"#324154"],[13,"#30588D"],[14,"#3161a0"]]},"line-width":{"base":1.2,"stops":[[12,1.5],[13,2.25],[14,4.5],[17,8.5]]}}},{"id":"Road/Minor/casing","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",5],["!in","Viz",3]],"minzoom":12,"layout":{"line-join":"round"},"paint":{"line-color":"#316ab3","line-width":{"base":1.2,"stops":[[12,3.5],[14,4.5],[17,8.5]]}}},{"id":"Road/Minor, ramp or traffic circle/casing","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",6],["!in","Viz",3]],"minzoom":12,"layout":{"line-join":"round"},"paint":{"line-color":"#316ab3","line-width":{"base":1.2,"stops":[[12,3.5],[14,4.5],[17,8.5]]}}},{"id":"Road/Major/casing","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",3],["!in","Viz",3]],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#4697ff","line-width":{"base":1.2,"stops":[[10,2],[11,3],[14,7.3],[17,14.3]]}}},{"id":"Road/Major, ramp or traffic circle/casing","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",4],["!in","Viz",3]],"minzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#4697ff","line-width":{"base":1.2,"stops":[[12,2.5],[14,4.7],[17,7.7]]}}},{"id":"Road/Highway/casing","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",1],["!in","Viz",3]],"minzoom":9,"layout":{"line-join":"round"},"paint":{"line-color":"#66a8ff","line-width":{"base":1.2,"stops":[[9,1],[14,6.8],[17,14.3]]}}},{"id":"Road/Freeway Motorway/casing","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",0],["!in","Viz",3]],"minzoom":9,"layout":{"line-join":"round"},"paint":{"line-color":"#66a8ff","line-width":{"base":1.2,"stops":[[9,1.5],[14,7.33],[17,14.3]]}}},{"id":"Road/Freeway Motorway Highway, ramp or traffic circle/casing","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",2],["!in","Viz",3]],"minzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#4697ff","line-width":{"base":1.2,"stops":[[9,1.5],[14,4.7],[17,8.2]]}}},{"id":"Road/Pedestrian","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",9],["!in","Viz",3]],"minzoom":15,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#403e38","line-width":{"base":1.2,"stops":[[14,1.6],[18,2.6]]}}},{"id":"Road/4WD/line","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",10],["!in","Viz",3]],"minzoom":13,"layout":{"line-join":"round"},"paint":{"line-color":"#152d4d","line-width":{"base":1.2,"stops":[[12,0.85],[14,1],[17,2]]}}},{"id":"Road/Service/line","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",8],["!in","Viz",3]],"minzoom":13,"layout":{"line-join":"round"},"paint":{"line-color":"#404759","line-width":{"base":1.2,"stops":[[13,0.75],[14,1.33],[17,2.33]]}}},{"id":"Road/Local/line","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",7],["!in","Viz",3]],"minzoom":13,"layout":{"line-join":"round"},"paint":{"line-color":"#152d4d","line-width":{"base":1.2,"stops":[[13,0.75],[14,2.5],[17,4.5]]}}},{"id":"Road/Minor/line","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",5],["!in","Viz",3]],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#1e4678","line-width":{"base":1.2,"stops":[[9,0.5],[11,2],[14,2.5],[17,4.5]]}}},{"id":"Road/Minor, ramp or traffic circle/line","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",6],["!in","Viz",3]],"minzoom":10,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#1e4678","line-width":{"base":1.2,"stops":[[9,0.5],[11,2],[14,2.5],[17,4.5]]}}},{"id":"Road/Major/line","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",3],["!in","Viz",3]],"minzoom":8,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#26528c","line-width":{"base":1.2,"stops":[[8,0.75],[14,5.33],[17,10.33]]}}},{"id":"Road/Major, ramp or traffic circle/line","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",4],["!in","Viz",3]],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#26528c","line-width":{"base":1.2,"stops":[[9,0.75],[14,2.7],[17,4.7]]}}},{"id":"Road/Highway/line","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",1],["!in","Viz",3]],"minzoom":7,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":{"stops":[[6,"#234b80"],[8,"#2c5ea0"],[9,"#3470bf"]]},"line-width":{"base":1.2,"stops":[[6,0.75],[14,4.8],[17,10.33]]}}},{"id":"Road/Freeway Motorway/line","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",0],["!in","Viz",3]],"minzoom":7,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":{"stops":[[5,"#2a4b61"],[8,"#3470bf"]]},"line-width":{"base":1.2,"stops":[[4,0.75],[14,5.33],[17,10.33]]}}},{"id":"Road/Freeway Motorway Highway, ramp or traffic circle/line","type":"line","source":"esri","source-layer":"Road","filter":["all",["==","_symbol",2],["!in","Viz",3]],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#26528c","line-width":{"base":1.2,"stops":[[9,0.75],[14,2.7],[17,4.7]]}}},{"id":"Road tunnel/4WD/casing","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",10],["!in","Viz",3]],"minzoom":13,"layout":{"line-join":"round"},"paint":{"line-color":"#3161a0","line-opacity":0.3,"line-width":{"base":1.2,"stops":[[12,1.33],[14,2],[17,4]]}}},{"id":"Road tunnel/Service/casing","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",8],["!in","Viz",3]],"minzoom":13,"layout":{"line-join":"round"},"paint":{"line-color":"#30588d","line-opacity":0.3,"line-width":{"base":1.2,"stops":[[14,1.5],[17,4.5]]}}},{"id":"Road tunnel/Local/casing","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",7],["!in","Viz",3]],"minzoom":12,"layout":{"line-join":"round"},"paint":{"line-opacity":0.3,"line-color":"#30588D","line-width":{"base":1.2,"stops":[[12,1.5],[14,4.5],[17,8.5]]}}},{"id":"Road tunnel/Minor/casing","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",5],["!in","Viz",3]],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#316ab3","line-opacity":0.3,"line-width":{"base":1.2,"stops":[[10,1.5],[14,4.5],[17,8.5]]}}},{"id":"Road tunnel/Minor, ramp or traffic circle/casing","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",6],["!in","Viz",3]],"minzoom":11,"layout":{"line-join":"round"},"paint":{"line-color":"#4697ff","line-opacity":0.3,"line-width":{"base":1.2,"stops":[[9,1.5],[14,4.7],[17,7.7]]}}},{"id":"Road tunnel/Major/casing","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",3],["!in","Viz",3]],"minzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#4697ff","line-opacity":0.3,"line-width":{"base":1.2,"stops":[[11,3],[14,7.33],[17,14.33]]}}},{"id":"Road tunnel/Major, ramp or traffic circle/casing","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",4],["!in","Viz",3]],"minzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#4697ff","line-opacity":0.3,"line-width":{"base":1.2,"stops":[[9,1.5],[14,4.7],[17,7.7]]}}},{"id":"Road tunnel/Highway/casing","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",1],["!in","Viz",3]],"minzoom":9,"layout":{"line-join":"round"},"paint":{"line-color":"#58b9ff","line-opacity":0.3,"line-width":{"base":1.2,"stops":[[9,1.5],[14,4.7],[17,7.7]]}}},{"id":"Road tunnel/Freeway Motorway/casing","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",0],["!in","Viz",3]],"minzoom":9,"layout":{"line-join":"round"},"paint":{"line-color":"#58b9ff","line-opacity":0.3,"line-width":{"base":1.2,"stops":[[9,1.5],[14,7.3],[17,14.3]]}}},{"id":"Road tunnel/Freeway Motorway Highway, ramp or traffic circle/casing","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",2],["!in","Viz",3]],"minzoom":9,"layout":{"line-join":"round"},"paint":{"line-color":"#58b9ff","line-opacity":0.3,"line-width":{"base":1.2,"stops":[[9,1.5],[14,4.7],[17,8.7]]}}},{"id":"Road tunnel/Pedestrian","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",9],["!in","Viz",3]],"minzoom":15,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#403e38","line-opacity":0.3,"line-width":{"base":1.2,"stops":[[14,1.6],[17,2.6]]}}},{"id":"Road tunnel/4WD/line","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",10],["!in","Viz",3]],"minzoom":13,"layout":{"line-join":"round"},"paint":{"line-color":"#152d4d","line-opacity":0.5,"line-width":{"base":1.2,"stops":[[11,0.75],[14,1],[17,2]]}}},{"id":"Road tunnel/Service/line","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",8],["!in","Viz",3]],"minzoom":13,"layout":{"line-join":"round"},"paint":{"line-color":"#404759","line-opacity":0.5,"line-width":{"base":1.2,"stops":[[11,0.75],[14,1.33],[17,2.33]]}}},{"id":"Road tunnel/Local/line","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",7],["!in","Viz",3]],"minzoom":12,"layout":{"line-join":"round"},"paint":{"line-opacity":0.5,"line-color":"#152d4d","line-width":{"base":1.2,"stops":[[11,0.75],[14,2.5],[17,4.5]]}}},{"id":"Road tunnel/Minor/line","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",5],["!in","Viz",3]],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-opacity":0.5,"line-color":"#1e4678","line-width":{"base":1.2,"stops":[[9,0.5],[11,2],[14,2.5],[17,4.5]]}}},{"id":"Road tunnel/Minor, ramp or traffic circle/line","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",6],["!in","Viz",3]],"minzoom":10,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-opacity":0.5,"line-color":"#1e4678","line-width":{"base":1.2,"stops":[[9,0.5],[11,2],[14,2.5],[17,4.5]]}}},{"id":"Road tunnel/Major/line","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",3],["!in","Viz",3]],"minzoom":8,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#26528c","line-opacity":0.5,"line-width":{"base":1.2,"stops":[[8,0.75],[14,5.33],[17,10.33]]}}},{"id":"Road tunnel/Major, ramp or traffic circle/line","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",4],["!in","Viz",3]],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#26528c","line-opacity":0.5,"line-width":{"base":1.2,"stops":[[9,0.75],[14,2.7],[17,4.7]]}}},{"id":"Road tunnel/Highway/line","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",1],["!in","Viz",3]],"minzoom":6,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-opacity":0.5,"line-color":"#2a6b99","line-width":{"base":1.2,"stops":[[6,0.75],[14,5.33],[17,10.33]]}}},{"id":"Road tunnel/Freeway Motorway/line","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",0],["!in","Viz",3]],"minzoom":4,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#2a6b99","line-opacity":0.5,"line-width":{"base":1.2,"stops":[[4,0.75],[14,5.33],[17,10.33]]}}},{"id":"Road tunnel/Freeway Motorway Highway, ramp or traffic circle/0","type":"line","source":"esri","source-layer":"Road tunnel","filter":["all",["==","_symbol",2],["!in","Viz",3]],"minzoom":9,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#2a6b99","line-opacity":0.5,"line-width":{"base":1.2,"stops":[[9,0.75],[14,2.7],[17,4.7]]}}},{"id":"Boundary line/Disputed admin5","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",11],["!in","Viz",3]],"minzoom":16,"layout":{"line-join":"round"},"paint":{"line-color":"#847689","line-width":1.2,"line-dasharray":[6,3]}},{"id":"Boundary line/Disputed admin4","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",10],["!in","Viz",3]],"minzoom":16,"layout":{"line-join":"round"},"paint":{"line-color":"#847689","line-width":1.2,"line-dasharray":[6,3]}},{"id":"Boundary line/Disputed admin3","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",9],["!in","Viz",3]],"minzoom":16,"layout":{"line-join":"round"},"paint":{"line-color":"#847689","line-width":1.2,"line-dasharray":[6,3]}},{"id":"Boundary line/Disputed admin2","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",8],["!in","Viz",3]],"minzoom":10,"layout":{"line-join":"round"},"paint":{"line-color":"#847689","line-width":{"base":1.2,"stops":[[10,1.33],[14,1.6]]},"line-dasharray":[6,3]}},{"id":"Boundary line/Disputed admin1","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",7],["!in","Viz",3]],"minzoom":3,"layout":{"line-join":"round"},"paint":{"line-color":{"stops":[[1,"#625866"],[8,"#847689"]]},"line-dasharray":[6,3],"line-width":{"base":1.2,"stops":[[3,0.75],[10,1.33],[14,1.6]]}}},{"id":"Boundary line/Disputed admin0","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",6],["!in","Viz",3],["!in","DisputeID",8,16,90,96,0]],"minzoom":1,"layout":{"line-join":"round"},"paint":{"line-color":{"stops":[[1,"#625866"],[5,"#847689"]]},"line-width":{"base":1.2,"stops":[[4,0.75],[8,1.5],[14,1.6]]},"line-dasharray":[6,3]}},{"id":"Boundary line/Admin2/casing","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",2],["!in","Viz",3]],"minzoom":8,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#2a2a28","line-width":{"base":1.2,"stops":[[8,1.33],[14,2.7]]}}},{"id":"Boundary line/Admin1/casing","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",1],["!in","Viz",3]],"minzoom":10,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#13111A","line-width":{"base":1.2,"stops":[[8,5],[14,8]]}}},{"id":"Boundary line/Admin0/casing","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",0],["!in","Viz",3]],"minzoom":4,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-width":{"base":1.2,"stops":[[4,4.33],[14,9.33],[17,9.33]]}}},{"id":"Boundary line/Admin5","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",5],["!in","Viz",3]],"minzoom":16,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#7e5c8c","line-width":1.33,"line-dasharray":[6.5,4]}},{"id":"Boundary line/Admin4","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",4],["!in","Viz",3]],"minzoom":16,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#7e5c8c","line-width":1.33,"line-dasharray":[6.5,4]}},{"id":"Boundary line/Admin3","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",3],["!in","Viz",3]],"minzoom":16,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#7e5c8c","line-width":1.33,"line-dasharray":[6.5,4]}},{"id":"Boundary line/Admin2/line","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",2],["!in","Viz",3]],"minzoom":8,"layout":{"line-join":"round"},"paint":{"line-color":"#7E5C8C","line-dasharray":[8,7],"line-width":{"base":1.2,"stops":[[8,0.5],[14,1.33],[18,1.5]]}}},{"id":"Boundary line/Admin1/line","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",1],["!in","Viz",3]],"minzoom":3,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":{"stops":[[3,"#383240"],[4,"#5a5066"],[8,"#726480"]]},"line-width":{"base":1.2,"stops":[[6,0.75],[14,1.33],[17,1.33]]}}},{"id":"Boundary line/Admin0/line","type":"line","source":"esri","source-layer":"Boundary line","filter":["all",["==","_symbol",0],["!in","Viz",3]],"minzoom":1,"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":{"stops":[[1,"#716480"],[5,"#887899"],[8,"#9f8cb3"]]},"line-width":{"base":1.2,"stops":[[1,0.75],[8,1.5],[17,2]]}}},{"id":"Ferry/label/Ferry","type":"symbol","source":"esri","source-layer":"Ferry/label","filter":["all",["==","_label_class",0],["!in","Viz",3]],"minzoom":12,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.5,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}","text-padding":30},"paint":{"text-color":"#5785B3","text-halo-color":"#2A2A28","text-halo-width":1}},{"id":"Water point/Stream or river","type":"symbol","source":"esri","source-layer":"Water point","filter":["==","_label_class",3],"minzoom":9,"layout":{"icon-image":"Water point","icon-allow-overlap":true,"text-font":["Arial Italic"],"text-size":11.3,"text-letter-spacing":0.01,"text-max-width":5,"text-field":"{_name_global}","text-padding":15},"paint":{"text-color":"#5C9BD9","text-halo-blur":1,"text-halo-color":"#2a2a28","text-halo-width":1}},{"id":"Water point/Lake or reservoir","type":"symbol","source":"esri","source-layer":"Water point","filter":["==","_label_class",2],"minzoom":9,"layout":{"icon-image":"Water point","icon-allow-overlap":true,"text-font":["Arial Italic"],"text-size":11.3,"text-letter-spacing":0.01,"text-max-width":5,"text-field":"{_name_global}","text-padding":15},"paint":{"text-color":"#5C9BD9","text-halo-blur":1,"text-halo-color":"#2a2a28","text-halo-width":1}},{"id":"Water point/Bay or inlet","type":"symbol","source":"esri","source-layer":"Water point","filter":["==","_label_class",1],"minzoom":9,"layout":{"icon-image":"Water point","icon-allow-overlap":true,"text-font":["Arial Italic"],"text-size":12,"text-letter-spacing":0.15,"text-max-width":8,"text-field":"{_name_global}","text-padding":15},"paint":{"text-color":"#5C9BD9","text-halo-blur":1,"text-halo-color":"#2a2a28","text-halo-width":1}},{"id":"Water point/Sea or ocean","type":"symbol","source":"esri","source-layer":"Water point","filter":["==","_label_class",0],"minzoom":9,"layout":{"icon-image":"Water point","icon-allow-overlap":true,"text-font":["Arial Italic"],"text-letter-spacing":0.1,"text-max-width":7,"text-field":"{_name_global}","text-padding":15},"paint":{"text-color":"#5C9BD9"}},{"id":"Water point/Canal or ditch","type":"symbol","source":"esri","source-layer":"Water point","filter":["==","_label_class",4],"minzoom":11,"layout":{"icon-image":"Water point","icon-allow-overlap":true,"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.01,"text-max-width":5,"text-field":"{_name_global}","text-padding":15},"paint":{"text-color":"#5C9BD9","text-halo-blur":1,"text-halo-color":"#2a2a28","text-halo-width":1}},{"id":"Water point/Island","type":"symbol","source":"esri","source-layer":"Water point","filter":["==","_label_class",7],"minzoom":11,"layout":{"icon-image":"Water point","icon-allow-overlap":true,"text-font":["Arial Italic"],"text-size":10.67,"text-letter-spacing":0.05,"text-max-width":5,"text-field":"{_name_global}","text-padding":15},"paint":{"text-color":"#96968C","text-halo-blur":1,"text-halo-color":"#2a2a28","text-halo-width":1}},{"id":"Water line/label/Default","type":"symbol","source":"esri","source-layer":"Water line/label","minzoom":12,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.07,"text-max-width":8,"text-max-angle":30,"text-field":"{_name_global}","text-offset":[0,-0.5]},"paint":{"text-color":"#5C9BD9"}},{"id":"Marine park/label/Default","type":"symbol","source":"esri","source-layer":"Marine park/label","minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#5C9BAA"}},{"id":"Water area/label/Canal or ditch","type":"symbol","source":"esri","source-layer":"Water area/label","filter":["==","_label_class",2],"minzoom":11,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.01,"text-max-width":5,"text-field":"{_name_global}"},"paint":{"text-color":"#5C9BD9","text-halo-color":"#000f1a","text-halo-width":1}},{"id":"Water area/label/Small river","type":"symbol","source":"esri","source-layer":"Water area/label","filter":["==","_label_class",7],"minzoom":11,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":11.33,"text-letter-spacing":0.01,"text-max-width":5,"text-field":"{_name_global}"},"paint":{"text-color":"#5C9BD9","text-halo-color":"#000f1a","text-halo-width":1}},{"id":"Water area/label/Large river","type":"symbol","source":"esri","source-layer":"Water area/label","filter":["==","_label_class",4],"minzoom":11,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":13.33,"text-letter-spacing":0.01,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#5C9BD9","text-halo-color":"#000f1a","text-halo-width":1}},{"id":"Water area/label/Small lake or reservoir","type":"symbol","source":"esri","source-layer":"Water area/label","filter":["==","_label_class",6],"minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":11.33,"text-letter-spacing":0.01,"text-max-width":5,"text-field":"{_name_global}"},"paint":{"text-color":"#5C9BD9"}},{"id":"Water area/label/Large lake or reservoir","type":"symbol","source":"esri","source-layer":"Water area/label","filter":["==","_label_class",3],"minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":13.33,"text-letter-spacing":0.01,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#5C9BD9"}},{"id":"Water area/label/Bay or inlet","type":"symbol","source":"esri","source-layer":"Water area/label","filter":["==","_label_class",1],"minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":12,"text-letter-spacing":0.15,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#5C9BD9"}},{"id":"Water area/label/Small island","type":"symbol","source":"esri","source-layer":"Water area/label","filter":["==","_label_class",0],"minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":10.67,"text-letter-spacing":0.05,"text-max-width":5,"text-field":"{_name_global}"},"paint":{"text-color":"#96968C"}},{"id":"Water area/label/Large island","type":"symbol","source":"esri","source-layer":"Water area/label","filter":["==","_label_class",5],"minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":13.33,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#96968C"}},{"id":"Water area large scale/label/River","type":"symbol","source":"esri","source-layer":"Water area large scale/label","filter":["==","_label_class",1],"minzoom":7,"maxzoom":11,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Italic"],"text-size":9.33,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#5C9BD9","text-halo-color":"#000f1a","text-halo-width":1}},{"id":"Water area large scale/label/Lake or lake intermittent","type":"symbol","source":"esri","source-layer":"Water area large scale/label","filter":["==","_label_class",0],"minzoom":7,"maxzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":9.33,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#5C9BD9","text-halo-color":"#000f1a","text-halo-width":1}},{"id":"Water area medium scale/label/Default","type":"symbol","source":"esri","source-layer":"Water area medium scale/label","minzoom":5,"maxzoom":7,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":9.33,"text-max-width":5,"text-field":"{_name}","text-letter-spacing":0.05,"visibility":"none"},"paint":{"text-color":"#5C9BD9","text-halo-color":"#000f1a","text-halo-width":1}},{"id":"Water area small scale/label/Default","type":"symbol","source":"esri","source-layer":"Water area small scale/label","minzoom":1,"maxzoom":5,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":9.33,"text-letter-spacing":0.05,"text-max-width":5,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#5C9BD9","text-halo-color":"#000f1a","text-halo-width":1}},{"id":"Marine area/label/Default","type":"symbol","source":"esri","source-layer":"Marine area/label","minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":10,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#497AAB"}},{"id":"Marine waterbody/label/small","type":"symbol","source":"esri","source-layer":"Marine waterbody/label","filter":["==","_label_class",4],"minzoom":1,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.1,"text-max-width":6,"text-field":"{_name}","text-padding":15},"paint":{"text-color":"#5C9BD9"}},{"id":"Marine waterbody/label/medium","type":"symbol","source":"esri","source-layer":"Marine waterbody/label","filter":["==","_label_class",3],"minzoom":1,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":10,"text-letter-spacing":0.1,"text-max-width":6,"text-field":"{_name}","text-padding":15},"paint":{"text-color":"#5C9BD9"}},{"id":"Marine waterbody/label/large","type":"symbol","source":"esri","source-layer":"Marine waterbody/label","filter":["==","_label_class",2],"minzoom":1,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":11,"text-letter-spacing":0.1,"text-max-width":6,"text-field":"{_name}","text-padding":15},"paint":{"text-color":"#5C9BD9"}},{"id":"Marine waterbody/label/x large","type":"symbol","source":"esri","source-layer":"Marine waterbody/label","filter":["==","_label_class",1],"minzoom":1,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":11,"text-letter-spacing":0.1,"text-max-width":6,"text-field":"{_name}","text-padding":15,"visibility":"none"},"paint":{"text-color":"#5C9BD9"}},{"id":"Marine waterbody/label/2x large","type":"symbol","source":"esri","source-layer":"Marine waterbody/label","filter":["==","_label_class",0],"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Italic"],"text-size":{"stops":[[0,10],[1,12]]},"text-letter-spacing":0.1,"text-max-width":6,"text-field":"{_name}","text-padding":15},"paint":{"text-color":"#5C9BD9"}},{"id":"Ferry/label/Rail ferry","type":"symbol","source":"esri","source-layer":"Ferry/label","filter":["all",["==","_label_class",1],["!in","Viz",3]],"minzoom":12,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.1,"text-max-width":8,"text-field":"{_name_global}","text-offset":[0,-0.6]},"paint":{"text-color":"#95BDE6","text-halo-color":"#2A2A28","text-halo-width":1}},{"id":"Railroad/label/Default","type":"symbol","source":"esri","source-layer":"Railroad/label","minzoom":14,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.1,"text-max-width":8,"text-field":"{_name_global}","text-offset":[0,-0.6]},"paint":{"text-color":"#95BDE6","text-halo-color":"#2A2A28","text-halo-width":1.5}},{"id":"Trail or path/label/Default","type":"symbol","source":"esri","source-layer":"Trail or path/label","minzoom":15,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":9.33,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#9DC5F2","text-halo-color":"#2A2A28","text-halo-width":1}},{"id":"Road tunnel/label/Pedestrian","type":"symbol","source":"esri","source-layer":"Road tunnel/label","filter":["all",["==","_label_class",6],["!in","Viz",3]],"minzoom":15,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Regular"],"text-size":9.33,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#bfbdbb","text-halo-color":"#2a2a28","text-halo-width":1}},{"id":"Road tunnel/label/Local","type":"symbol","source":"esri","source-layer":"Road tunnel/label","filter":["all",["==","_label_class",5],["!in","Viz",3]],"minzoom":12,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Regular"],"text-size":{"stops":[[12,9],[14,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#9DC5F2","text-halo-color":"#262624","text-halo-width":1.5}},{"id":"Road tunnel/label/Minor","type":"symbol","source":"esri","source-layer":"Road tunnel/label","filter":["all",["==","_label_class",4],["!in","Viz",3]],"minzoom":10,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#9DC5F2","text-halo-color":"#262624","text-halo-width":1}},{"id":"Road tunnel/label/Major, alt name","type":"symbol","source":"esri","source-layer":"Road tunnel/label","filter":["all",["==","_label_class",3],["!in","Viz",3]],"minzoom":10,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name}"},"paint":{"text-color":"#9DC5F2","text-halo-color":"#262624","text-halo-width":1}},{"id":"Road tunnel/label/Major","type":"symbol","source":"esri","source-layer":"Road tunnel/label","filter":["all",["==","_label_class",2],["!in","Viz",3]],"minzoom":10,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#9DC5F2","text-halo-color":"#262624","text-halo-width":1}},{"id":"Road tunnel/label/Freeway Motorway, alt name","type":"symbol","source":"esri","source-layer":"Road tunnel/label","filter":["all",["==","_label_class",1],["!in","Viz",3]],"minzoom":10,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name}"},"paint":{"text-color":"#9DC5F2","text-halo-color":"#262624","text-halo-width":1}},{"id":"Road tunnel/label/Highway","type":"symbol","source":"esri","source-layer":"Road tunnel/label","filter":["all",["==","_label_class",7],["!in","Viz",3]],"minzoom":10,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#9DC5F2","text-halo-color":"#262624","text-halo-width":1}},{"id":"Road tunnel/label/Freeway Motorway","type":"symbol","source":"esri","source-layer":"Road tunnel/label","filter":["all",["==","_label_class",0],["!in","Viz",3]],"minzoom":10,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#9DC5F2","text-halo-color":"#262624"}},{"id":"Road/label/Rectangle hexagon brown white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",72],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle hexagon brown white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle hexagon green white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",70],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle hexagon green white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle hexagon red white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",68],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle hexagon red white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle hexagon blue white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",66],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle hexagon blue white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle hexagon brown white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",71],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle hexagon brown white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle hexagon green white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",69],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle hexagon green white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle hexagon red white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",67],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle hexagon red white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle hexagon blue white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",65],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle hexagon blue white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Octagon green white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",74],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.02,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Octagon green white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Hexagon orange black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",64],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.3,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Hexagon orange black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Hexagon green white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",62],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.3,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Hexagon green white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Hexagon red white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",60],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.3,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Hexagon red white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Hexagon white black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",56],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.3,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Hexagon white black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Pentagon green yellow (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",54],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon green yellow (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffff00"}},{"id":"Road/label/Pentagon green white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",52],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon green white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Pentagon yellow black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",50],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.02,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon yellow black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Pentagon blue white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",48],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-letter-spacing":0.02,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon blue white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Pentagon white black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",46],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon white black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.3],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Pentagon inverse white black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",44],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon inverse white black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.3],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle green yellow (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",42],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle green yellow (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffff00"}},{"id":"Road/label/Rectangle green white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",40],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle green white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle yellow black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",38],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle yellow black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Hexagon blue white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",58],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.3,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Hexagon blue white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport"},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle red white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",36],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle red white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle blue white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",34],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle blue white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle white black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",32],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle white black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30,"visibility":"none"},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/V-shaped white black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",30],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/V-shaped white black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped blue white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",28],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-letter-spacing":0.02,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped blue white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped red white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",26],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped red white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped yellow black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",24],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-letter-spacing":0.02,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped yellow black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped green leaf (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",22],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped green leaf (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped white green (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",20],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped white green (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30,"visibility":"none"},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped white black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",18],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped white black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Secondary Hwy red white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",16],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Secondary Hwy red white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Secondary Hwy green white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",14],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Secondary Hwy green white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Secondary Hwy white black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",12],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Secondary Hwy white black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30,"visibility":"none"},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Shield white black (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",10],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Shield white black (Alt)/{_len}","icon-rotation-alignment":"viewport","text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Shield blue white (Alt)","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",8],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Shield blue white (Alt)/{_len}","icon-rotation-alignment":"viewport","text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Octagon green white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",73],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.02,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Octagon green white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Hexagon orange black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",63],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.3,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Hexagon orange black/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Hexagon green white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",61],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.3,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Hexagon green white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Hexagon red white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",59],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.3,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Hexagon red white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Hexagon white black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",55],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.3,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Hexagon white black/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Pentagon green yellow","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",53],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon green yellow/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffff00"}},{"id":"Road/label/Pentagon green white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",51],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon green white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Pentagon yellow black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",49],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.02,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon yellow black/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Pentagon blue white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",47],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-letter-spacing":0.02,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon blue white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Pentagon white black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",45],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon white black/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.3],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Pentagon inverse white black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",43],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Pentagon inverse white black/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.3],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle green yellow","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",41],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle green yellow/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffff00"}},{"id":"Road/label/Rectangle green white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",39],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle green white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle yellow black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",37],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle yellow black/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Hexagon blue white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",57],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.3,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Hexagon blue white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport"},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle red white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",35],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle red white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle blue white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",33],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle blue white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Rectangle white black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",31],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Rectangle white black/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.2],"text-rotation-alignment":"viewport","text-padding":30,"visibility":"none"},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/V-shaped white black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",29],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/V-shaped white black/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped blue white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",27],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-letter-spacing":0.02,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped blue white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped red white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",25],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped red white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped yellow black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",23],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-letter-spacing":0.02,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped yellow black/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped green leaf","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",21],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped green leaf/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped white green","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",19],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped white green/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30,"visibility":"none"},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/U-shaped white black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",17],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/U-shaped white black/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Secondary Hwy red white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",15],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":8.67,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Secondary Hwy red white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Secondary Hwy green white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",13],["!in","Viz",3]],"minzoom":6,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-max-width":8,"text-field":"{_name}","icon-image":"Road/Secondary Hwy green white/{_len}","icon-rotation-alignment":"viewport","text-offset":[0,0.1],"text-rotation-alignment":"viewport","text-padding":30,"visibility":"none"},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Secondary Hwy white black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",11],["!in","Viz",3]],"minzoom":11,"layout":{"text-size":8.67,"text-font":["Arial Regular"],"text-max-width":8,"text-padding":30,"text-rotation-alignment":"viewport","icon-rotation-alignment":"viewport","symbol-placement":"line","symbol-avoid-edges":true,"text-offset":[0,0.1],"text-field":"{_name}","icon-image":"Road/Secondary Hwy white black/{_len}"},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Shield white black","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",9],["!in","Viz",3]],"minzoom":11,"layout":{"text-size":9.33,"text-font":["Arial Regular"],"text-max-width":8,"text-padding":30,"text-rotation-alignment":"viewport","icon-rotation-alignment":"viewport","symbol-placement":"line","symbol-avoid-edges":true,"text-field":"{_name}","icon-image":"Road/Shield white black/{_len}"},"paint":{"text-color":"#ffffff"}},{"id":"Road/label/Shield blue white","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",7],["!in","Viz",3]],"minzoom":11,"layout":{"text-size":8.67,"text-font":["Arial Regular"],"text-max-width":8,"text-padding":30,"text-rotation-alignment":"viewport","icon-rotation-alignment":"viewport","symbol-placement":"line","symbol-avoid-edges":true,"text-field":"{_name}","icon-image":"Road/Shield blue white/{_len}"},"paint":{"text-color":"#ffffff"}},{"id":"Pedestrian/label/Default","type":"symbol","source":"esri","source-layer":"Pedestrian/label","minzoom":15,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#bfbdbb","text-halo-color":"#2a2a28","text-halo-width":1}},{"id":"Road/label/Pedestrian","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",6],["!in","Viz",3]],"minzoom":15,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Regular"],"text-size":9.33,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#bfbdbb","text-halo-color":"#2a2a28","text-halo-width":1}},{"id":"Road/label/Local","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",5],["!in","Viz",3]],"minzoom":12,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Regular"],"text-size":{"stops":[[12,9],[14,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":{"stops":[[12,"#9dc5f2"],[13,"#a5d0ff"]]},"text-halo-color":"#262624","text-halo-width":1.5}},{"id":"Road/label/Minor","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",4],["!in","Viz",3]],"minzoom":11,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#9dc5f2","text-halo-color":"#262624","text-halo-width":1.5}},{"id":"Road/label/Major, alt name","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",3],["!in","Viz",3]],"minzoom":10,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name}"},"paint":{"text-color":"#9dc5f2","text-halo-color":"#262624","text-halo-width":1.5}},{"id":"Road/label/Major","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",2],["!in","Viz",3]],"minzoom":10,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#9dc5f2","text-halo-color":"#262624","text-halo-width":1.5}},{"id":"Road/label/Freeway Motorway, alt name","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",1],["!in","Viz",3]],"minzoom":10,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name}"},"paint":{"text-color":"#9dc5f2","text-halo-color":"#262624","text-halo-width":1.5}},{"id":"Road/label/Highway","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",75],["!in","Viz",3]],"minzoom":10,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#9dc5f2","text-halo-color":"#262624","text-halo-width":1.5}},{"id":"Road/label/Freeway Motorway","type":"symbol","source":"esri","source-layer":"Road/label","filter":["all",["==","_label_class",0],["!in","Viz",3]],"minzoom":10,"layout":{"symbol-placement":"line","symbol-avoid-edges":true,"symbol-spacing":1000,"text-font":["Arial Bold"],"text-size":{"stops":[[10,9],[12,10.67]]},"text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#9dc5f2","text-halo-color":"#262624","text-halo-width":1.5}},{"id":"Cemetery/label/Default","type":"symbol","source":"esri","source-layer":"Cemetery/label","minzoom":13,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#6a9963","text-halo-color":"#262624","text-halo-width":1}},{"id":"Freight/label/Default","type":"symbol","source":"esri","source-layer":"Freight/label","minzoom":13,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Water and wastewater/label/Default","type":"symbol","source":"esri","source-layer":"Water and wastewater/label","minzoom":13,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Port/label/Default","type":"symbol","source":"esri","source-layer":"Port/label","minzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-transform":"uppercase","text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Industry/label/Default","type":"symbol","source":"esri","source-layer":"Industry/label","minzoom":13,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Government/label/Default","type":"symbol","source":"esri","source-layer":"Government/label","minzoom":13,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Finance/label/Default","type":"symbol","source":"esri","source-layer":"Finance/label","minzoom":13,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Emergency/label/Default","type":"symbol","source":"esri","source-layer":"Emergency/label","minzoom":13,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Indigenous/label/Default","type":"symbol","source":"esri","source-layer":"Indigenous/label","minzoom":7,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}","visibility":"none"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Military/label/Default","type":"symbol","source":"esri","source-layer":"Military/label","minzoom":6,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}","text-padding":25,"visibility":"none"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Transportation/label/Default","type":"symbol","source":"esri","source-layer":"Transportation/label","minzoom":13,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Beach/label/Default","type":"symbol","source":"esri","source-layer":"Beach/label","minzoom":13,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.33,"text-letter-spacing":0.08,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#6a9963","text-halo-color":"#262624","text-halo-width":1}},{"id":"Golf course/label/Default","type":"symbol","source":"esri","source-layer":"Golf course/label","minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#6a9963","text-halo-color":"#262624","text-halo-width":1}},{"id":"Zoo/label/Default","type":"symbol","source":"esri","source-layer":"Zoo/label","minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#6a9963","text-halo-color":"#262624","text-halo-width":1}},{"id":"Retail/label/Default","type":"symbol","source":"esri","source-layer":"Retail/label","minzoom":13,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Landmark/label/Default","type":"symbol","source":"esri","source-layer":"Landmark/label","minzoom":13,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Openspace or forest/label/Default","type":"symbol","source":"esri","source-layer":"Openspace or forest/label","minzoom":9,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}","visibility":"none"},"paint":{"text-color":"#6a9963","text-halo-color":"#262624","text-halo-width":1}},{"id":"Park or farming/label/Default","type":"symbol","source":"esri","source-layer":"Park or farming/label","minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}","text-padding":25},"paint":{"text-color":"#6a9963","text-halo-color":"#262624","text-halo-width":1}},{"id":"Point of interest/Park","type":"symbol","source":"esri","source-layer":"Point of interest","filter":["==","_label_class",1],"minzoom":9,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.08,"text-max-width":8,"text-field":"{_name_global}","visibility":"none"},"paint":{"text-color":"#6a9963","text-halo-color":"#262624","text-halo-width":1}},{"id":"Education/label/Default","type":"symbol","source":"esri","source-layer":"Education/label","minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Medical/label/Default","type":"symbol","source":"esri","source-layer":"Medical/label","minzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}"},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Admin1 forest or park/label/Default","type":"symbol","source":"esri","source-layer":"Admin1 forest or park/label","minzoom":9,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}","text-padding":25,"visibility":"none"},"paint":{"text-color":"#6a9963","text-halo-color":"#262624","text-halo-width":1}},{"id":"Admin0 forest or park/label/Default","type":"symbol","source":"esri","source-layer":"Admin0 forest or park/label","minzoom":6,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}","text-padding":25,"visibility":"none"},"paint":{"text-color":"#6a9963","text-halo-color":"#262624","text-halo-width":1}},{"id":"Airport/label/Airport property","type":"symbol","source":"esri","source-layer":"Airport/label","minzoom":9,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10.67,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}","text-padding":15},"paint":{"text-color":"#a6a664","text-halo-color":"#262624","text-halo-width":1}},{"id":"Exit/Default","type":"symbol","source":"esri","source-layer":"Exit","minzoom":15,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Bold"],"text-size":12,"text-letter-spacing":0.05,"text-max-width":8,"text-field":"{_name_global}","text-rotation-alignment":"viewport"},"paint":{"text-color":"#6eff24","text-halo-blur":1.3,"text-halo-color":"#000000","text-halo-width":1}},{"id":"Point of interest/Bus station","type":"symbol","source":"esri","source-layer":"Point of interest","filter":["==","_symbol",2],"minzoom":9,"layout":{"symbol-avoid-edges":true,"icon-image":"Point of interest/Bus station","icon-allow-overlap":true,"icon-padding":1,"icon-size":{"stops":[[13,0.85],[16,1.3]]},"text-font":["Arial Regular"],"text-size":10.67,"text-anchor":"bottom","text-letter-spacing":0.04,"text-max-width":8,"text-field":"{_name_global}","text-offset":[0,-0.9]},"paint":{"text-color":{"stops":[[11,"#80804d"],[12,"#a6a664"]]},"text-halo-color":"#262624","text-halo-width":1}},{"id":"Point of interest/Rail station","type":"symbol","source":"esri","source-layer":"Point of interest","filter":["==","_symbol",3],"minzoom":9,"layout":{"symbol-avoid-edges":true,"icon-image":"Point of interest/Rail station","icon-allow-overlap":true,"icon-padding":1,"icon-size":{"stops":[[13,0.85],[16,1.3]]},"text-font":["Arial Regular"],"text-size":10.67,"text-anchor":"bottom","text-letter-spacing":0.04,"text-max-width":8,"text-field":"{_name_global}","text-offset":[0,-0.9]},"paint":{"text-color":{"stops":[[11,"#80804d"],[12,"#a6a664"]]},"text-halo-color":"#262624","text-halo-width":1}},{"id":"Point of interest/General","type":"symbol","source":"esri","source-layer":"Point of interest","filter":["==","_label_class",0],"minzoom":9,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":10,"text-letter-spacing":0.08,"text-max-width":8,"text-field":"{_name_global}","text-padding":15},"paint":{"text-color":{"stops":[[11,"#80804d"],[12,"#a6a664"]]},"text-halo-color":"#262624","text-halo-width":1}},{"id":"Admin2 area/label/small","type":"symbol","source":"esri","source-layer":"Admin2 area/label","filter":["==","_label_class",1],"minzoom":8,"maxzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":{"stops":[[8,10],[10,12]]},"text-max-width":9,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#716480","text-halo-width":1,"text-halo-color":"#262624"}},{"id":"Admin2 area/label/large","type":"symbol","source":"esri","source-layer":"Admin2 area/label","filter":["==","_label_class",0],"minzoom":8,"maxzoom":11,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":12,"text-max-width":8,"text-field":"{_name}"},"paint":{"text-color":"#716480","text-halo-width":1,"text-halo-color":"#262624"}},{"id":"Admin1 area/label/x small","type":"symbol","source":"esri","source-layer":"Admin1 area/label","filter":["==","_label_class",5],"minzoom":6,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-max-width":8,"text-field":"{_name}","text-size":{"stops":[[6,9],[9,11]]}},"paint":{"text-color":"#9378a6","text-halo-width":1,"text-halo-color":"#262624"}},{"id":"Admin1 area/label/small","type":"symbol","source":"esri","source-layer":"Admin1 area/label","filter":["==","_label_class",4],"minzoom":6,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-max-width":8,"text-field":"{_name}","text-size":{"stops":[[6,10],[9,12]]}},"paint":{"text-color":"#9378a6","text-halo-width":1,"text-halo-color":"#262624"}},{"id":"Admin1 area/label/medium","type":"symbol","source":"esri","source-layer":"Admin1 area/label","filter":["==","_label_class",3],"minzoom":6,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-max-width":8,"text-field":"{_name}","text-size":{"stops":[[6,12],[9,14]]}},"paint":{"text-color":"#9378a6","text-halo-width":1,"text-halo-color":"#262624"}},{"id":"Admin1 area/label/large","type":"symbol","source":"esri","source-layer":"Admin1 area/label","filter":["==","_label_class",2],"minzoom":4,"maxzoom":10,"layout":{"text-size":{"stops":[[3,9],[6,12.5],[8,14.5]]},"text-font":["Arial Regular"],"text-max-width":8,"text-letter-spacing":0.1,"symbol-avoid-edges":true,"text-field":"{_name}"},"paint":{"text-color":"#9378a6","text-halo-color":"#262624","text-halo-width":1}},{"id":"Admin1 area/label/x large","type":"symbol","source":"esri","source-layer":"Admin1 area/label","filter":["==","_label_class",1],"minzoom":4,"maxzoom":10,"layout":{"text-size":{"stops":[[3,9],[6,12.5],[8,14.5]]},"text-font":["Arial Regular"],"text-max-width":8,"text-letter-spacing":0.1,"symbol-avoid-edges":true,"text-field":"{_name}"},"paint":{"text-color":"#9378a6","text-halo-color":"#262624","text-halo-width":1}},{"id":"Admin1 area/label/2x large","type":"symbol","source":"esri","source-layer":"Admin1 area/label","filter":["==","_label_class",0],"minzoom":3,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-max-width":8,"text-field":"{_name}","text-size":{"stops":[[3,9],[6,12.5],[8,14.5]]},"text-letter-spacing":0.1},"paint":{"text-color":"#9378a6","text-halo-width":1,"text-halo-color":"#262624"}},{"id":"Admin0 point/x small","type":"symbol","source":"esri","source-layer":"Admin0 point","filter":["==","_label_class",5],"minzoom":5,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-letter-spacing":0.15,"text-max-width":8,"text-field":"{_name}","text-size":{"stops":[[5,8],[9,11]]},"text-transform":"uppercase"},"paint":{"text-color":"#bb93d9","text-halo-color":"#262624","text-halo-width":1}},{"id":"Admin0 point/small","type":"symbol","source":"esri","source-layer":"Admin0 point","filter":["==","_label_class",4],"minzoom":4,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-letter-spacing":0.15,"text-max-width":8,"text-field":"{_name}","text-size":{"stops":[[4,8],[9,11]]},"text-transform":"uppercase"},"paint":{"text-color":"#bb93d9","text-halo-color":"#262624","text-halo-width":1}},{"id":"Admin0 point/medium","type":"symbol","source":"esri","source-layer":"Admin0 point","filter":["==","_label_class",3],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-letter-spacing":0.15,"text-max-width":6,"text-field":"{_name}","text-size":{"stops":[[2,9],[9,12]]},"text-transform":"uppercase"},"paint":{"text-color":"#bb93d9","text-halo-color":"#262624","text-halo-width":1}},{"id":"Admin0 point/large","type":"symbol","source":"esri","source-layer":"Admin0 point","filter":["==","_label_class",2],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-letter-spacing":0.15,"text-max-width":8,"text-field":"{_name}","text-size":{"stops":[[2,10],[9,13]]},"text-transform":"uppercase"},"paint":{"text-color":"#bb93d9","text-halo-color":"#262624","text-halo-width":1}},{"id":"Admin0 point/x large","type":"symbol","source":"esri","source-layer":"Admin0 point","filter":["==","_label_class",1],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Bold"],"text-letter-spacing":0.25,"text-max-width":8,"text-field":"{_name}","text-size":{"stops":[[2,10],[9,16]]},"text-transform":"uppercase"},"paint":{"text-color":"#bb93d9","text-halo-color":"#262624","text-halo-width":1}},{"id":"Admin0 point/2x large","type":"symbol","source":"esri","source-layer":"Admin0 point","filter":["==","_label_class",0],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Bold"],"text-letter-spacing":0.25,"text-max-width":8,"text-field":"{_name}","text-size":{"stops":[[2,12],[8,17]]},"text-transform":"uppercase"},"paint":{"text-color":"#bb93d9","text-halo-color":"#262624","text-halo-width":1}},{"id":"Neighborhood","type":"symbol","source":"esri","source-layer":"Neighborhood","minzoom":14,"maxzoom":17,"layout":{"symbol-avoid-edges":true,"icon-image":"Neighborhood","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":8,"text-transform":"uppercase","text-anchor":"bottom-left","text-letter-spacing":0.25,"text-max-width":8.5,"text-field":"{_name_global}","text-padding":1},"paint":{"text-color":"#bebebe","text-halo-width":1.33,"text-halo-color":"#262624"}},{"id":"City large scale/town small","type":"symbol","source":"esri","source-layer":"City large scale","filter":["==","_label_class",5],"minzoom":10,"maxzoom":17,"layout":{"symbol-avoid-edges":true,"icon-image":"City large scale","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10,"text-anchor":"bottom-left","text-letter-spacing":0.08,"text-max-width":8,"text-field":"{_name_global}","text-padding":1},"paint":{"text-color":{"stops":[[10,"#8c8c8c"],[11,"#a5a5a5"],[12,"#bebebe"]]},"text-halo-width":1.33,"text-halo-color":"#262624"}},{"id":"City large scale/town large","type":"symbol","source":"esri","source-layer":"City large scale","filter":["==","_label_class",4],"minzoom":10,"maxzoom":17,"layout":{"symbol-avoid-edges":true,"icon-image":"City large scale","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10.5,"text-anchor":"bottom-left","text-letter-spacing":0.09,"text-max-width":8,"text-field":"{_name_global}","text-padding":1},"paint":{"text-color":"#bebebe","text-halo-width":1.33,"text-halo-color":"#262624"}},{"id":"City large scale/small","type":"symbol","source":"esri","source-layer":"City large scale","filter":["==","_label_class",3],"minzoom":10,"maxzoom":17,"layout":{"symbol-avoid-edges":true,"icon-image":"City large scale","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":12,"text-anchor":"bottom-left","text-letter-spacing":0.1,"text-max-width":8,"text-field":"{_name_global}","text-padding":1},"paint":{"text-color":"#bebebe","text-halo-width":1.33,"text-halo-color":"#262624"}},{"id":"City large scale/medium","type":"symbol","source":"esri","source-layer":"City large scale","filter":["==","_label_class",2],"minzoom":10,"maxzoom":17,"layout":{"symbol-avoid-edges":true,"icon-image":"City large scale","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":12,"text-anchor":"bottom-left","text-letter-spacing":0.1,"text-max-width":8,"text-field":"{_name_global}","text-padding":1},"paint":{"text-color":"#bebebe","text-halo-width":1.33,"text-halo-color":"#262624"}},{"id":"City large scale/large","type":"symbol","source":"esri","source-layer":"City large scale","filter":["==","_label_class",1],"minzoom":10,"maxzoom":17,"layout":{"symbol-avoid-edges":true,"icon-image":"City large scale","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Bold"],"text-size":12,"text-anchor":"bottom-left","text-letter-spacing":0.1,"text-max-width":8,"text-field":"{_name_global}","text-padding":1},"paint":{"text-color":"#bebebe","text-halo-width":1.33,"text-halo-color":"#262624"}},{"id":"City large scale/x large","type":"symbol","source":"esri","source-layer":"City large scale","filter":["==","_label_class",0],"minzoom":10,"maxzoom":17,"layout":{"symbol-avoid-edges":true,"icon-image":"City large scale","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Bold"],"text-size":13.5,"text-anchor":"bottom-left","text-letter-spacing":0.1,"text-max-width":8,"text-field":"{_name_global}","text-padding":1},"paint":{"text-color":"#bebebe","text-halo-width":1.33,"text-halo-color":"#262624"}},{"id":"City small scale/town small non capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",17],"minzoom":2,"maxzoom":10,"layout":{"visibility":"none","text-size":10,"text-font":["Arial Regular"],"text-max-width":8,"text-justify":"left","icon-allow-overlap":true,"symbol-avoid-edges":true,"text-anchor":"bottom-left","text-field":"{_name}","icon-image":"City small scale/town small non capital"},"paint":{"text-color":"#969696","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/town large non capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",15],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/town large non capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/small non capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",12],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/small non capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/medium non capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",9],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/medium non capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/other capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",18],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/other capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/town large other capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",14],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/town large other capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/small other capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",11],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/small other capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/medium other capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",8],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/medium other capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/town small admin0 capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",16],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/town small admin0 capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/town large admin0 capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",13],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/town large admin0 capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/small admin0 capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",10],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/small admin0 capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/medium admin0 capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",7],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/medium admin0 capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Bold"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/large other capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",5],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/large other capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/x large admin2 capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",2],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/x large admin2 capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":12,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/large non capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",6],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/large non capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Bold"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/large admin0 capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",4],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/large admin0 capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Bold"],"text-size":10.5,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#aaaaaa","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/x large non capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",3],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/x large non capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Bold"],"text-size":12,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#c0c0c0","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/x large admin1 capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",1],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/x large admin1 capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":12,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":"#c0c0c0","text-halo-color":"#262624","text-halo-width":1.33}},{"id":"City small scale/x large admin0 capital","type":"symbol","source":"esri","source-layer":"City small scale","filter":["==","_symbol",0],"minzoom":2,"maxzoom":10,"layout":{"symbol-avoid-edges":true,"icon-image":"City small scale/x large admin0 capital","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Bold"],"text-size":12,"text-anchor":"bottom-left","text-justify":"left","text-max-width":8,"text-field":"{_name}","visibility":"none"},"paint":{"text-color":{"stops":[[4,"#aaaaaa"],[5,"#c0c0c0"]]},"text-halo-color":"#262624","text-halo-width":1.33}},{"id":"Building/label/Default","type":"symbol","source":"esri","source-layer":"Building/label","minzoom":15,"layout":{"symbol-avoid-edges":true,"text-font":["Arial Regular"],"text-size":9.5,"text-letter-spacing":0.08,"text-max-width":8,"text-field":"{_name_global}","text-padding":20},"paint":{"text-color":"#969696","text-halo-width":1,"text-halo-color":"#2A2A28"}},{"id":"Continent","type":"symbol","source":"esri","source-layer":"Continent","minzoom":0,"maxzoom":2,"layout":{"symbol-avoid-edges":true,"icon-image":"Continent","icon-allow-overlap":true,"icon-padding":1,"text-font":["Arial Regular"],"text-size":{"stops":[[0,8.5],[1,11.5]]},"text-letter-spacing":0.35,"text-max-width":8,"text-line-height":1.75,"text-field":"{_name_global}","text-transform":"uppercase","visibility":"none"},"paint":{"text-color":"#cccccc"}},{"id":"Disputed label point/Island","type":"symbol","source":"esri","source-layer":"Disputed label point","filter":["all",["==","_label_class",1],["in","DisputeID",0]],"minzoom":11,"layout":{"icon-image":"Disputed label point","icon-allow-overlap":true,"text-font":["Arial Regular"],"text-size":10.5,"text-letter-spacing":0.1,"text-max-width":8,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#96968C"}},{"id":"Disputed label point/Waterbody","type":"symbol","source":"esri","source-layer":"Disputed label point","filter":["all",["==","_label_class",0],["in","DisputeID",1006]],"minzoom":2,"maxzoom":10,"layout":{"icon-image":"Disputed label point","icon-allow-overlap":true,"text-font":["Arial Italic"],"text-size":10.5,"text-letter-spacing":0.1,"text-max-width":7,"text-field":"{_name}","text-optional":true},"paint":{"text-color":"#5C9BD9"}},{"id":"Disputed label point/Admin0","type":"symbol","source":"esri","source-layer":"Disputed label point","filter":["all",["==","_label_class",2],["in","DisputeID",1021]],"minzoom":2,"maxzoom":10,"layout":{"icon-image":"Disputed label point","icon-allow-overlap":true,"text-font":["Arial Regular"],"text-size":{"stops":[[2,9],[8,11.5]]},"text-letter-spacing":0.1,"text-max-width":8,"text-field":"{_name}","text-transform":"uppercase","text-optional":true},"paint":{"text-color":"#bb93d9","text-halo-color":"#262624","text-halo-width":1}}],"metadata":{"arcgisStyleUrl":"https://www.arcgis.com/sharing/rest/content/items/77cdce3e37204a06be9da9572e892fde/resources/styles/root.json","arcgisOriginalItemTitle":"World Street Map Canvas (Night)","arcgisQuickEditorWarning":true,"arcgisEditorExtents":[{"spatialReference":{"wkid":102100},"xmin":-18800994.962717548,"ymin":4132400.31525453,"xmax":-3303203.608260519,"ymax":12605308.972426113},{"spatialReference":{"latestWkid":3857,"wkid":102100},"xmin":-1295782.795658164,"ymin":5988848.323580071,"xmax":1267614.5117078347,"ymax":7417306.365089368},{"spatialReference":{"latestWkid":3857,"wkid":102100},"xmin":-8655258.605290867,"ymin":4660747.33454408,"xmax":-8495046.273580492,"ymax":4750025.962138412},{"spatialReference":{"latestWkid":3857,"wkid":102100},"xmin":16829782.370097805,"ymin":-4012773.2826673286,"xmax":16834789.005463753,"ymax":-4009983.325555006}],"arcgisMinimapVisibility":true}} \ No newline at end of file +{ + "version": 8, + "sprite": "https://cdn.arcgis.com/sharing/rest/content/items/86f556a2d1fd468181855a35e344567f/resources/styles/../sprites/sprite", + "glyphs": "https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer/resources/fonts/{fontstack}/{range}.pbf", + "sources": { "esri": { "type": "vector", "url": "https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer" } }, + "layers": [ + { "id": "background", "type": "background", "paint": { "background-color": "#000f1a" }, "layout": {} }, + { "id": "Land/Not ice", "type": "fill", "source": "esri", "source-layer": "Land", "filter": ["==", "_symbol", 0], "minzoom": 0, "layout": {}, "paint": { "fill-color": "#2a2a28" } }, + { "id": "Land/Ice", "type": "fill", "source": "esri", "source-layer": "Land", "filter": ["==", "_symbol", 1], "minzoom": 0, "layout": {}, "paint": { "fill-color": "#20262e" } }, + { "id": "Urban area", "type": "fill", "source": "esri", "source-layer": "Urban area", "minzoom": 5, "maxzoom": 12, "layout": {}, "paint": { "fill-color": "#323230" } }, + { "id": "Openspace or forest", "type": "fill", "source": "esri", "source-layer": "Openspace or forest", "minzoom": 9, "layout": {}, "paint": { "fill-color": "#263323" } }, + { + "id": "Admin0 forest or park", + "type": "fill", + "source": "esri", + "source-layer": "Admin0 forest or park", + "minzoom": 5, + "layout": {}, + "paint": { + "fill-color": { + "stops": [ + [5, "#282f26"], + [6, "#263323"] + ] + } + } + }, + { "id": "Admin1 forest or park", "type": "fill", "source": "esri", "source-layer": "Admin1 forest or park", "minzoom": 6, "layout": {}, "paint": { "fill-color": "#263323" } }, + { "id": "Zoo", "type": "fill", "source": "esri", "source-layer": "Zoo", "minzoom": 11, "layout": {}, "paint": { "fill-color": "#263323" } }, + { "id": "Military", "type": "fill", "source": "esri", "source-layer": "Military", "minzoom": 6, "layout": {}, "paint": { "fill-color": "#2F3238", "fill-outline-color": "#2F3238" } }, + { "id": "Port", "type": "fill", "source": "esri", "source-layer": "Port", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#3A3C45" } }, + { "id": "Transportation", "type": "fill", "source": "esri", "source-layer": "Transportation", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#3A3C45" } }, + { "id": "Industry", "type": "fill", "source": "esri", "source-layer": "Industry", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#3A3C45" } }, + { "id": "Indigenous", "type": "fill", "source": "esri", "source-layer": "Indigenous", "minzoom": 7, "layout": {}, "paint": { "fill-color": "#302D25" } }, + { "id": "Golf course", "type": "fill", "source": "esri", "source-layer": "Golf course", "minzoom": 11, "layout": {}, "paint": { "fill-color": "#263323" } }, + { "id": "Airport/Airport property", "type": "fill", "source": "esri", "source-layer": "Airport", "filter": ["==", "_symbol", 1], "minzoom": 9, "layout": {}, "paint": { "fill-color": "#2F3238" } }, + { "id": "Airport/Airport runway", "type": "fill", "source": "esri", "source-layer": "Airport", "filter": ["==", "_symbol", 0], "minzoom": 11, "layout": {}, "paint": { "fill-color": "#3A3C45" } }, + { "id": "Retail", "type": "fill", "source": "esri", "source-layer": "Retail", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#38324D" } }, + { "id": "Education", "type": "fill", "source": "esri", "source-layer": "Education", "minzoom": 11, "layout": {}, "paint": { "fill-color": "#402C2E" } }, + { "id": "Medical", "type": "fill", "source": "esri", "source-layer": "Medical", "minzoom": 11, "layout": {}, "paint": { "fill-color": "#453108" } }, + { "id": "Park or farming", "type": "fill", "source": "esri", "source-layer": "Park or farming", "minzoom": 11, "layout": {}, "paint": { "fill-color": "#263323" } }, + { "id": "Water and wastewater", "type": "fill", "source": "esri", "source-layer": "Water and wastewater", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#000F1A" } }, + { "id": "Freight", "type": "fill", "source": "esri", "source-layer": "Freight", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#3A3C45" } }, + { "id": "Cemetery", "type": "fill", "source": "esri", "source-layer": "Cemetery", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#283827" } }, + { "id": "Landmark", "type": "fill", "source": "esri", "source-layer": "Landmark", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#243021" } }, + { "id": "Finance", "type": "fill", "source": "esri", "source-layer": "Finance", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#38324D" } }, + { "id": "Government", "type": "fill", "source": "esri", "source-layer": "Government", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#453108" } }, + { "id": "Emergency", "type": "fill", "source": "esri", "source-layer": "Emergency", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#453108" } }, + { "id": "Pedestrian", "type": "fill", "source": "esri", "source-layer": "Pedestrian", "minzoom": 13, "layout": {}, "paint": { "fill-color": "#403e38" } }, + { + "id": "Special area of interest/Green openspace", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 11], + "minzoom": 14, + "layout": {}, + "paint": { "fill-color": "#283827" } + }, + { + "id": "Special area of interest/Grass", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 8], + "minzoom": 14, + "layout": {}, + "paint": { "fill-color": "#283827" } + }, + { "id": "Marine area/1", "type": "fill", "source": "esri", "source-layer": "Marine area", "minzoom": 0, "layout": {}, "paint": { "fill-color": "#000F1A" } }, + { + "id": "Bathymetry", + "type": "fill", + "source": "esri", + "source-layer": "Bathymetry", + "filter": ["in", "_symbol", 0, 1, 2, 3, 4, 5], + "maxzoom": 11, + "layout": { "visibility": "visible" }, + "paint": { "fill-color": "#000F1A" } + }, + { + "id": "Water line small scale", + "type": "line", + "source": "esri", + "source-layer": "Water line small scale", + "minzoom": 1, + "maxzoom": 5, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#000F23", + "line-width": { + "base": 1.2, + "stops": [ + [1, 0.5], + [5, 1.33] + ] + } + } + }, + { + "id": "Water line medium scale", + "type": "line", + "source": "esri", + "source-layer": "Water line medium scale", + "minzoom": 5, + "maxzoom": 7, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#000F23", + "line-width": { + "base": 1.2, + "stops": [ + [5, 0.5], + [7, 1.33] + ] + } + } + }, + { + "id": "Water line large scale", + "type": "line", + "source": "esri", + "source-layer": "Water line large scale", + "minzoom": 7, + "maxzoom": 11, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#000F23", + "line-width": { + "base": 1.2, + "stops": [ + [7, 1], + [11, 1.33] + ] + } + } + }, + { + "id": "Water line/Canal or ditch", + "type": "line", + "source": "esri", + "source-layer": "Water line", + "filter": ["==", "_symbol", 1], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#000F23", + "line-width": { + "base": 1.2, + "stops": [ + [11, 1], + [14, 1.33], + [17, 2.67] + ] + }, + "line-dasharray": [7.5, 2.5] + } + }, + { + "id": "Water line/Stream or river intermittent", + "type": "line", + "source": "esri", + "source-layer": "Water line", + "filter": ["==", "_symbol", 4], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#000F23", + "line-dasharray": [10.5, 1.75], + "line-width": { + "base": 1.2, + "stops": [ + [11, 1], + [14, 1.33], + [17, 2] + ] + } + } + }, + { + "id": "Water line/Stream or river", + "type": "line", + "source": "esri", + "source-layer": "Water line", + "filter": ["==", "_symbol", 0], + "minzoom": 11, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#000F23", + "line-width": { + "base": 1.2, + "stops": [ + [11, 1], + [14, 1.33], + [17, 2.67] + ] + } + } + }, + { "id": "Water area small scale", "type": "fill", "source": "esri", "source-layer": "Water area small scale", "minzoom": 1, "maxzoom": 5, "layout": {}, "paint": { "fill-color": "#000F1A" } }, + { + "id": "Water area medium scale/Lake intermittent", + "type": "fill", + "source": "esri", + "source-layer": "Water area medium scale", + "filter": ["==", "_symbol", 1], + "minzoom": 5, + "maxzoom": 7, + "layout": {}, + "paint": { "fill-pattern": "Water area/Lake or river intermittent" } + }, + { + "id": "Water area medium scale/Lake or river", + "type": "fill", + "source": "esri", + "source-layer": "Water area medium scale", + "filter": ["==", "_symbol", 0], + "minzoom": 5, + "maxzoom": 7, + "layout": {}, + "paint": { "fill-color": "#000F1A" } + }, + { + "id": "Water area large scale/Lake intermittent", + "type": "fill", + "source": "esri", + "source-layer": "Water area large scale", + "filter": ["==", "_symbol", 1], + "minzoom": 7, + "maxzoom": 11, + "layout": {}, + "paint": { "fill-pattern": "Water area/Lake or river intermittent" } + }, + { + "id": "Water area large scale/Lake or river", + "type": "fill", + "source": "esri", + "source-layer": "Water area large scale", + "filter": ["==", "_symbol", 0], + "minzoom": 7, + "maxzoom": 11, + "layout": {}, + "paint": { "fill-color": "#000F1A" } + }, + { + "id": "Water area/Lake, river or bay", + "type": "fill", + "source": "esri", + "source-layer": "Water area", + "filter": ["==", "_symbol", 7], + "minzoom": 11, + "layout": {}, + "paint": { "fill-color": "#000F1A" } + }, + { + "id": "Water area/Lake or river intermittent", + "type": "fill", + "source": "esri", + "source-layer": "Water area", + "filter": ["==", "_symbol", 6], + "minzoom": 11, + "layout": {}, + "paint": { "fill-pattern": "Water area/Lake or river intermittent" } + }, + { + "id": "Water area/Swamp or marsh", + "type": "fill", + "source": "esri", + "source-layer": "Water area", + "filter": ["==", "_symbol", 3], + "minzoom": 11, + "layout": {}, + "paint": { "fill-pattern": "Water area/Swamp or marsh" } + }, + { + "id": "Water area/Playa", + "type": "fill", + "source": "esri", + "source-layer": "Water area", + "filter": ["==", "_symbol", 1], + "minzoom": 12, + "layout": {}, + "paint": { "fill-pattern": "Water area/Playa" } + }, + { + "id": "Water area/Ice mass", + "type": "fill", + "source": "esri", + "source-layer": "Water area", + "filter": ["==", "_symbol", 2], + "minzoom": 11, + "layout": {}, + "paint": { "fill-pattern": "Water area/Ice mass" } + }, + { + "id": "Special area of interest/Mulch or dirt", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 14], + "minzoom": 14, + "layout": {}, + "paint": { "fill-color": "#2a2a28" } + }, + { + "id": "Special area of interest/Water", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 7], + "minzoom": 14, + "layout": {}, + "paint": { "fill-color": "#000F1A" } + }, + { + "id": "Special area of interest/Football field or court", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 4], + "minzoom": 14, + "layout": {}, + "paint": { "fill-color": "#47443c" } + }, + { + "id": "Special area of interest/Baseball field or other grounds", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 1], + "minzoom": 14, + "layout": {}, + "paint": { "fill-color": "#47443c" } + }, + { + "id": "Special area of interest/Athletic track", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 0], + "minzoom": 14, + "layout": {}, + "paint": { "fill-color": "#47443c" } + }, + { + "id": "Special area of interest/Hardcourt", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 10], + "minzoom": 14, + "layout": {}, + "paint": { "fill-color": "#47443c" } + }, + { + "id": "Special area of interest/Parking", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 15], + "minzoom": 15, + "layout": {}, + "paint": { "fill-color": "#44464F" } + }, + { + "id": "Special area of interest/Bike, walk or pedestrian", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 2], + "minzoom": 15, + "layout": {}, + "paint": { "fill-color": "#403e38" } + }, + { + "id": "Special area of interest/Curb", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 3], + "minzoom": 14, + "layout": {}, + "paint": { "fill-color": "#403e38" } + }, + { + "id": "Special area of interest/Garden path", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 12], + "minzoom": 14, + "layout": {}, + "paint": { "fill-color": "#403e38" } + }, + { + "id": "Special area of interest/Groundcover", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 13], + "minzoom": 17, + "layout": {}, + "paint": { "fill-color": "#263323" } + }, + { + "id": "Special area of interest/Sand", + "type": "fill", + "source": "esri", + "source-layer": "Special area of interest", + "filter": ["==", "_symbol", 6], + "minzoom": 15, + "layout": {}, + "paint": { "fill-color": "#2a2a28" } + }, + { + "id": "Special area of interest line/Dock or pier", + "type": "line", + "source": "esri", + "source-layer": "Special area of interest line", + "filter": ["==", "_symbol", 0], + "minzoom": 17, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#626153", "line-width": 0.75 } + }, + { + "id": "Special area of interest line/Parking lot", + "type": "line", + "source": "esri", + "source-layer": "Special area of interest line", + "filter": ["==", "_symbol", 5], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#333440", "line-width": 0.67 } + }, + { + "id": "Special area of interest line/Sports field", + "type": "line", + "source": "esri", + "source-layer": "Special area of interest line", + "filter": ["==", "_symbol", 6], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#403e38", "line-width": 0.67 } + }, + { + "id": "Railroad/casing", + "type": "line", + "source": "esri", + "source-layer": "Railroad", + "minzoom": 12, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#506880", "line-width": 3.33 } + }, + { + "id": "Railroad/line", + "type": "line", + "source": "esri", + "source-layer": "Railroad", + "minzoom": 12, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#28282A", "line-width": 1.33 } + }, + { + "id": "Ferry/Rail ferry/casing", + "type": "line", + "source": "esri", + "source-layer": "Ferry", + "filter": ["all", ["==", "_symbol", 1], ["!in", "Viz", 3]], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#506880", "line-width": 3.33 } + }, + { + "id": "Ferry/Rail ferry/line", + "type": "line", + "source": "esri", + "source-layer": "Ferry", + "filter": ["all", ["==", "_symbol", 1], ["!in", "Viz", 3]], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#28282A", "line-width": 1.33 } + }, + { + "id": "Ferry/Ferry", + "type": "line", + "source": "esri", + "source-layer": "Ferry", + "filter": ["all", ["==", "_symbol", 0], ["!in", "Viz", 3]], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#1D4391", + "line-width": { + "base": 1.2, + "stops": [ + [11, 1.33], + [14, 1.5], + [17, 1.5] + ] + }, + "line-dasharray": [6, 3] + } + }, + { "id": "Building", "type": "fill", "source": "esri", "source-layer": "Building", "minzoom": 15, "layout": {}, "paint": { "fill-color": "#373845", "fill-outline-color": "#515461" } }, + { + "id": "Trail or path", + "type": "line", + "source": "esri", + "source-layer": "Trail or path", + "minzoom": 15, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#403e38", + "line-width": { + "base": 1.2, + "stops": [ + [14, 1.6], + [18, 2.6] + ] + } + } + }, + { + "id": "Road/4WD/casing", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 10], ["!in", "Viz", 3]], + "minzoom": 13, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#3161a0", + "line-dasharray": [3, 1], + "line-width": { + "base": 1.2, + "stops": [ + [12, 1.33], + [14, 2], + [17, 4] + ] + } + } + }, + { + "id": "Road/Service/casing", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 8], ["!in", "Viz", 3]], + "minzoom": 13, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#30588d", + "line-width": { + "base": 1.2, + "stops": [ + [13, 2.25], + [14, 2.83], + [17, 4.5] + ] + } + } + }, + { + "id": "Road/Local/casing", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 7], ["!in", "Viz", 3]], + "minzoom": 12, + "layout": { "line-join": "round" }, + "paint": { + "line-color": { + "stops": [ + [12, "#324154"], + [13, "#30588D"], + [14, "#3161a0"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [12, 1.5], + [13, 2.25], + [14, 4.5], + [17, 8.5] + ] + } + } + }, + { + "id": "Road/Minor/casing", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 5], ["!in", "Viz", 3]], + "minzoom": 12, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#316ab3", + "line-width": { + "base": 1.2, + "stops": [ + [12, 3.5], + [14, 4.5], + [17, 8.5] + ] + } + } + }, + { + "id": "Road/Minor, ramp or traffic circle/casing", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 6], ["!in", "Viz", 3]], + "minzoom": 12, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#316ab3", + "line-width": { + "base": 1.2, + "stops": [ + [12, 3.5], + [14, 4.5], + [17, 8.5] + ] + } + } + }, + { + "id": "Road/Major/casing", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 3], ["!in", "Viz", 3]], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#4697ff", + "line-width": { + "base": 1.2, + "stops": [ + [10, 2], + [11, 3], + [14, 7.3], + [17, 14.3] + ] + } + } + }, + { + "id": "Road/Major, ramp or traffic circle/casing", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 4], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#4697ff", + "line-width": { + "base": 1.2, + "stops": [ + [12, 2.5], + [14, 4.7], + [17, 7.7] + ] + } + } + }, + { + "id": "Road/Highway/casing", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 1], ["!in", "Viz", 3]], + "minzoom": 9, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#66a8ff", + "line-width": { + "base": 1.2, + "stops": [ + [9, 1], + [14, 6.8], + [17, 14.3] + ] + } + } + }, + { + "id": "Road/Freeway Motorway/casing", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 0], ["!in", "Viz", 3]], + "minzoom": 9, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#66a8ff", + "line-width": { + "base": 1.2, + "stops": [ + [9, 1.5], + [14, 7.33], + [17, 14.3] + ] + } + } + }, + { + "id": "Road/Freeway Motorway Highway, ramp or traffic circle/casing", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 2], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#4697ff", + "line-width": { + "base": 1.2, + "stops": [ + [9, 1.5], + [14, 4.7], + [17, 8.2] + ] + } + } + }, + { + "id": "Road/Pedestrian", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 9], ["!in", "Viz", 3]], + "minzoom": 15, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#403e38", + "line-width": { + "base": 1.2, + "stops": [ + [14, 1.6], + [18, 2.6] + ] + } + } + }, + { + "id": "Road/4WD/line", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 10], ["!in", "Viz", 3]], + "minzoom": 13, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#152d4d", + "line-width": { + "base": 1.2, + "stops": [ + [12, 0.85], + [14, 1], + [17, 2] + ] + } + } + }, + { + "id": "Road/Service/line", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 8], ["!in", "Viz", 3]], + "minzoom": 13, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#404759", + "line-width": { + "base": 1.2, + "stops": [ + [13, 0.75], + [14, 1.33], + [17, 2.33] + ] + } + } + }, + { + "id": "Road/Local/line", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 7], ["!in", "Viz", 3]], + "minzoom": 13, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#152d4d", + "line-width": { + "base": 1.2, + "stops": [ + [13, 0.75], + [14, 2.5], + [17, 4.5] + ] + } + } + }, + { + "id": "Road/Minor/line", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 5], ["!in", "Viz", 3]], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#1e4678", + "line-width": { + "base": 1.2, + "stops": [ + [9, 0.5], + [11, 2], + [14, 2.5], + [17, 4.5] + ] + } + } + }, + { + "id": "Road/Minor, ramp or traffic circle/line", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 6], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#1e4678", + "line-width": { + "base": 1.2, + "stops": [ + [9, 0.5], + [11, 2], + [14, 2.5], + [17, 4.5] + ] + } + } + }, + { + "id": "Road/Major/line", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 3], ["!in", "Viz", 3]], + "minzoom": 8, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#26528c", + "line-width": { + "base": 1.2, + "stops": [ + [8, 0.75], + [14, 5.33], + [17, 10.33] + ] + } + } + }, + { + "id": "Road/Major, ramp or traffic circle/line", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 4], ["!in", "Viz", 3]], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#26528c", + "line-width": { + "base": 1.2, + "stops": [ + [9, 0.75], + [14, 2.7], + [17, 4.7] + ] + } + } + }, + { + "id": "Road/Highway/line", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 1], ["!in", "Viz", 3]], + "minzoom": 7, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": { + "stops": [ + [6, "#234b80"], + [8, "#2c5ea0"], + [9, "#3470bf"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [6, 0.75], + [14, 4.8], + [17, 10.33] + ] + } + } + }, + { + "id": "Road/Freeway Motorway/line", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 0], ["!in", "Viz", 3]], + "minzoom": 7, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": { + "stops": [ + [5, "#2a4b61"], + [8, "#3470bf"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [4, 0.75], + [14, 5.33], + [17, 10.33] + ] + } + } + }, + { + "id": "Road/Freeway Motorway Highway, ramp or traffic circle/line", + "type": "line", + "source": "esri", + "source-layer": "Road", + "filter": ["all", ["==", "_symbol", 2], ["!in", "Viz", 3]], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#26528c", + "line-width": { + "base": 1.2, + "stops": [ + [9, 0.75], + [14, 2.7], + [17, 4.7] + ] + } + } + }, + { + "id": "Road tunnel/4WD/casing", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 10], ["!in", "Viz", 3]], + "minzoom": 13, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#3161a0", + "line-opacity": 0.3, + "line-width": { + "base": 1.2, + "stops": [ + [12, 1.33], + [14, 2], + [17, 4] + ] + } + } + }, + { + "id": "Road tunnel/Service/casing", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 8], ["!in", "Viz", 3]], + "minzoom": 13, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#30588d", + "line-opacity": 0.3, + "line-width": { + "base": 1.2, + "stops": [ + [14, 1.5], + [17, 4.5] + ] + } + } + }, + { + "id": "Road tunnel/Local/casing", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 7], ["!in", "Viz", 3]], + "minzoom": 12, + "layout": { "line-join": "round" }, + "paint": { + "line-opacity": 0.3, + "line-color": "#30588D", + "line-width": { + "base": 1.2, + "stops": [ + [12, 1.5], + [14, 4.5], + [17, 8.5] + ] + } + } + }, + { + "id": "Road tunnel/Minor/casing", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 5], ["!in", "Viz", 3]], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#316ab3", + "line-opacity": 0.3, + "line-width": { + "base": 1.2, + "stops": [ + [10, 1.5], + [14, 4.5], + [17, 8.5] + ] + } + } + }, + { + "id": "Road tunnel/Minor, ramp or traffic circle/casing", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 6], ["!in", "Viz", 3]], + "minzoom": 11, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#4697ff", + "line-opacity": 0.3, + "line-width": { + "base": 1.2, + "stops": [ + [9, 1.5], + [14, 4.7], + [17, 7.7] + ] + } + } + }, + { + "id": "Road tunnel/Major/casing", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 3], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#4697ff", + "line-opacity": 0.3, + "line-width": { + "base": 1.2, + "stops": [ + [11, 3], + [14, 7.33], + [17, 14.33] + ] + } + } + }, + { + "id": "Road tunnel/Major, ramp or traffic circle/casing", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 4], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#4697ff", + "line-opacity": 0.3, + "line-width": { + "base": 1.2, + "stops": [ + [9, 1.5], + [14, 4.7], + [17, 7.7] + ] + } + } + }, + { + "id": "Road tunnel/Highway/casing", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 1], ["!in", "Viz", 3]], + "minzoom": 9, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#58b9ff", + "line-opacity": 0.3, + "line-width": { + "base": 1.2, + "stops": [ + [9, 1.5], + [14, 4.7], + [17, 7.7] + ] + } + } + }, + { + "id": "Road tunnel/Freeway Motorway/casing", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 0], ["!in", "Viz", 3]], + "minzoom": 9, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#58b9ff", + "line-opacity": 0.3, + "line-width": { + "base": 1.2, + "stops": [ + [9, 1.5], + [14, 7.3], + [17, 14.3] + ] + } + } + }, + { + "id": "Road tunnel/Freeway Motorway Highway, ramp or traffic circle/casing", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 2], ["!in", "Viz", 3]], + "minzoom": 9, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#58b9ff", + "line-opacity": 0.3, + "line-width": { + "base": 1.2, + "stops": [ + [9, 1.5], + [14, 4.7], + [17, 8.7] + ] + } + } + }, + { + "id": "Road tunnel/Pedestrian", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 9], ["!in", "Viz", 3]], + "minzoom": 15, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#403e38", + "line-opacity": 0.3, + "line-width": { + "base": 1.2, + "stops": [ + [14, 1.6], + [17, 2.6] + ] + } + } + }, + { + "id": "Road tunnel/4WD/line", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 10], ["!in", "Viz", 3]], + "minzoom": 13, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#152d4d", + "line-opacity": 0.5, + "line-width": { + "base": 1.2, + "stops": [ + [11, 0.75], + [14, 1], + [17, 2] + ] + } + } + }, + { + "id": "Road tunnel/Service/line", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 8], ["!in", "Viz", 3]], + "minzoom": 13, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#404759", + "line-opacity": 0.5, + "line-width": { + "base": 1.2, + "stops": [ + [11, 0.75], + [14, 1.33], + [17, 2.33] + ] + } + } + }, + { + "id": "Road tunnel/Local/line", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 7], ["!in", "Viz", 3]], + "minzoom": 12, + "layout": { "line-join": "round" }, + "paint": { + "line-opacity": 0.5, + "line-color": "#152d4d", + "line-width": { + "base": 1.2, + "stops": [ + [11, 0.75], + [14, 2.5], + [17, 4.5] + ] + } + } + }, + { + "id": "Road tunnel/Minor/line", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 5], ["!in", "Viz", 3]], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-opacity": 0.5, + "line-color": "#1e4678", + "line-width": { + "base": 1.2, + "stops": [ + [9, 0.5], + [11, 2], + [14, 2.5], + [17, 4.5] + ] + } + } + }, + { + "id": "Road tunnel/Minor, ramp or traffic circle/line", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 6], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-opacity": 0.5, + "line-color": "#1e4678", + "line-width": { + "base": 1.2, + "stops": [ + [9, 0.5], + [11, 2], + [14, 2.5], + [17, 4.5] + ] + } + } + }, + { + "id": "Road tunnel/Major/line", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 3], ["!in", "Viz", 3]], + "minzoom": 8, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#26528c", + "line-opacity": 0.5, + "line-width": { + "base": 1.2, + "stops": [ + [8, 0.75], + [14, 5.33], + [17, 10.33] + ] + } + } + }, + { + "id": "Road tunnel/Major, ramp or traffic circle/line", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 4], ["!in", "Viz", 3]], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#26528c", + "line-opacity": 0.5, + "line-width": { + "base": 1.2, + "stops": [ + [9, 0.75], + [14, 2.7], + [17, 4.7] + ] + } + } + }, + { + "id": "Road tunnel/Highway/line", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 1], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-opacity": 0.5, + "line-color": "#2a6b99", + "line-width": { + "base": 1.2, + "stops": [ + [6, 0.75], + [14, 5.33], + [17, 10.33] + ] + } + } + }, + { + "id": "Road tunnel/Freeway Motorway/line", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 0], ["!in", "Viz", 3]], + "minzoom": 4, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#2a6b99", + "line-opacity": 0.5, + "line-width": { + "base": 1.2, + "stops": [ + [4, 0.75], + [14, 5.33], + [17, 10.33] + ] + } + } + }, + { + "id": "Road tunnel/Freeway Motorway Highway, ramp or traffic circle/0", + "type": "line", + "source": "esri", + "source-layer": "Road tunnel", + "filter": ["all", ["==", "_symbol", 2], ["!in", "Viz", 3]], + "minzoom": 9, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#2a6b99", + "line-opacity": 0.5, + "line-width": { + "base": 1.2, + "stops": [ + [9, 0.75], + [14, 2.7], + [17, 4.7] + ] + } + } + }, + { + "id": "Boundary line/Disputed admin5", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 11], ["!in", "Viz", 3]], + "minzoom": 16, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#847689", "line-width": 1.2, "line-dasharray": [6, 3] } + }, + { + "id": "Boundary line/Disputed admin4", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 10], ["!in", "Viz", 3]], + "minzoom": 16, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#847689", "line-width": 1.2, "line-dasharray": [6, 3] } + }, + { + "id": "Boundary line/Disputed admin3", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 9], ["!in", "Viz", 3]], + "minzoom": 16, + "layout": { "line-join": "round" }, + "paint": { "line-color": "#847689", "line-width": 1.2, "line-dasharray": [6, 3] } + }, + { + "id": "Boundary line/Disputed admin2", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 8], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#847689", + "line-width": { + "base": 1.2, + "stops": [ + [10, 1.33], + [14, 1.6] + ] + }, + "line-dasharray": [6, 3] + } + }, + { + "id": "Boundary line/Disputed admin1", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 7], ["!in", "Viz", 3]], + "minzoom": 3, + "layout": { "line-join": "round" }, + "paint": { + "line-color": { + "stops": [ + [1, "#625866"], + [8, "#847689"] + ] + }, + "line-dasharray": [6, 3], + "line-width": { + "base": 1.2, + "stops": [ + [3, 0.75], + [10, 1.33], + [14, 1.6] + ] + } + } + }, + { + "id": "Boundary line/Disputed admin0", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 6], ["!in", "Viz", 3], ["!in", "DisputeID", 8, 16, 90, 96, 0]], + "minzoom": 1, + "layout": { "line-join": "round" }, + "paint": { + "line-color": { + "stops": [ + [1, "#625866"], + [5, "#847689"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [4, 0.75], + [8, 1.5], + [14, 1.6] + ] + }, + "line-dasharray": [6, 3] + } + }, + { + "id": "Boundary line/Admin2/casing", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 2], ["!in", "Viz", 3]], + "minzoom": 8, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#2a2a28", + "line-width": { + "base": 1.2, + "stops": [ + [8, 1.33], + [14, 2.7] + ] + } + } + }, + { + "id": "Boundary line/Admin1/casing", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 1], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": "#13111A", + "line-width": { + "base": 1.2, + "stops": [ + [8, 5], + [14, 8] + ] + } + } + }, + { + "id": "Boundary line/Admin0/casing", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 0], ["!in", "Viz", 3]], + "minzoom": 4, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-width": { + "base": 1.2, + "stops": [ + [4, 4.33], + [14, 9.33], + [17, 9.33] + ] + } + } + }, + { + "id": "Boundary line/Admin5", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 5], ["!in", "Viz", 3]], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#7e5c8c", "line-width": 1.33, "line-dasharray": [6.5, 4] } + }, + { + "id": "Boundary line/Admin4", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 4], ["!in", "Viz", 3]], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#7e5c8c", "line-width": 1.33, "line-dasharray": [6.5, 4] } + }, + { + "id": "Boundary line/Admin3", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 3], ["!in", "Viz", 3]], + "minzoom": 16, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { "line-color": "#7e5c8c", "line-width": 1.33, "line-dasharray": [6.5, 4] } + }, + { + "id": "Boundary line/Admin2/line", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 2], ["!in", "Viz", 3]], + "minzoom": 8, + "layout": { "line-join": "round" }, + "paint": { + "line-color": "#7E5C8C", + "line-dasharray": [8, 7], + "line-width": { + "base": 1.2, + "stops": [ + [8, 0.5], + [14, 1.33], + [18, 1.5] + ] + } + } + }, + { + "id": "Boundary line/Admin1/line", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 1], ["!in", "Viz", 3]], + "minzoom": 3, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": { + "stops": [ + [3, "#383240"], + [4, "#5a5066"], + [8, "#726480"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [6, 0.75], + [14, 1.33], + [17, 1.33] + ] + } + } + }, + { + "id": "Boundary line/Admin0/line", + "type": "line", + "source": "esri", + "source-layer": "Boundary line", + "filter": ["all", ["==", "_symbol", 0], ["!in", "Viz", 3]], + "minzoom": 1, + "layout": { "line-cap": "round", "line-join": "round" }, + "paint": { + "line-color": { + "stops": [ + [1, "#716480"], + [5, "#887899"], + [8, "#9f8cb3"] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [1, 0.75], + [8, 1.5], + [17, 2] + ] + } + } + }, + { + "id": "Ferry/label/Ferry", + "type": "symbol", + "source": "esri", + "source-layer": "Ferry/label", + "filter": ["all", ["==", "_label_class", 0], ["!in", "Viz", 3]], + "minzoom": 12, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.5, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 30 + }, + "paint": { "text-color": "#5785B3", "text-halo-color": "#2A2A28", "text-halo-width": 1 } + }, + { + "id": "Water point/Stream or river", + "type": "symbol", + "source": "esri", + "source-layer": "Water point", + "filter": ["==", "_label_class", 3], + "minzoom": 9, + "layout": { + "icon-image": "Water point", + "icon-allow-overlap": true, + "text-font": ["Arial Italic"], + "text-size": 11.3, + "text-letter-spacing": 0.01, + "text-max-width": 5, + "text-field": "{_name_global}", + "text-padding": 15 + }, + "paint": { "text-color": "#5C9BD9", "text-halo-blur": 1, "text-halo-color": "#2a2a28", "text-halo-width": 1 } + }, + { + "id": "Water point/Lake or reservoir", + "type": "symbol", + "source": "esri", + "source-layer": "Water point", + "filter": ["==", "_label_class", 2], + "minzoom": 9, + "layout": { + "icon-image": "Water point", + "icon-allow-overlap": true, + "text-font": ["Arial Italic"], + "text-size": 11.3, + "text-letter-spacing": 0.01, + "text-max-width": 5, + "text-field": "{_name_global}", + "text-padding": 15 + }, + "paint": { "text-color": "#5C9BD9", "text-halo-blur": 1, "text-halo-color": "#2a2a28", "text-halo-width": 1 } + }, + { + "id": "Water point/Bay or inlet", + "type": "symbol", + "source": "esri", + "source-layer": "Water point", + "filter": ["==", "_label_class", 1], + "minzoom": 9, + "layout": { + "icon-image": "Water point", + "icon-allow-overlap": true, + "text-font": ["Arial Italic"], + "text-size": 12, + "text-letter-spacing": 0.15, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 15 + }, + "paint": { "text-color": "#5C9BD9", "text-halo-blur": 1, "text-halo-color": "#2a2a28", "text-halo-width": 1 } + }, + { + "id": "Water point/Sea or ocean", + "type": "symbol", + "source": "esri", + "source-layer": "Water point", + "filter": ["==", "_label_class", 0], + "minzoom": 9, + "layout": { + "icon-image": "Water point", + "icon-allow-overlap": true, + "text-font": ["Arial Italic"], + "text-letter-spacing": 0.1, + "text-max-width": 7, + "text-field": "{_name_global}", + "text-padding": 15 + }, + "paint": { "text-color": "#5C9BD9" } + }, + { + "id": "Water point/Canal or ditch", + "type": "symbol", + "source": "esri", + "source-layer": "Water point", + "filter": ["==", "_label_class", 4], + "minzoom": 11, + "layout": { + "icon-image": "Water point", + "icon-allow-overlap": true, + "text-font": ["Arial Italic"], + "text-size": 10, + "text-letter-spacing": 0.01, + "text-max-width": 5, + "text-field": "{_name_global}", + "text-padding": 15 + }, + "paint": { "text-color": "#5C9BD9", "text-halo-blur": 1, "text-halo-color": "#2a2a28", "text-halo-width": 1 } + }, + { + "id": "Water point/Island", + "type": "symbol", + "source": "esri", + "source-layer": "Water point", + "filter": ["==", "_label_class", 7], + "minzoom": 11, + "layout": { + "icon-image": "Water point", + "icon-allow-overlap": true, + "text-font": ["Arial Italic"], + "text-size": 10.67, + "text-letter-spacing": 0.05, + "text-max-width": 5, + "text-field": "{_name_global}", + "text-padding": 15 + }, + "paint": { "text-color": "#96968C", "text-halo-blur": 1, "text-halo-color": "#2a2a28", "text-halo-width": 1 } + }, + { + "id": "Water line/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Water line/label", + "minzoom": 12, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Italic"], + "text-size": 10, + "text-letter-spacing": 0.07, + "text-max-width": 8, + "text-max-angle": 30, + "text-field": "{_name_global}", + "text-offset": [0, -0.5] + }, + "paint": { "text-color": "#5C9BD9" } + }, + { + "id": "Marine park/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Marine park/label", + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#5C9BAA" } + }, + { + "id": "Water area/label/Canal or ditch", + "type": "symbol", + "source": "esri", + "source-layer": "Water area/label", + "filter": ["==", "_label_class", 2], + "minzoom": 11, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Italic"], + "text-size": 10, + "text-letter-spacing": 0.01, + "text-max-width": 5, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#5C9BD9", "text-halo-color": "#000f1a", "text-halo-width": 1 } + }, + { + "id": "Water area/label/Small river", + "type": "symbol", + "source": "esri", + "source-layer": "Water area/label", + "filter": ["==", "_label_class", 7], + "minzoom": 11, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Italic"], + "text-size": 11.33, + "text-letter-spacing": 0.01, + "text-max-width": 5, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#5C9BD9", "text-halo-color": "#000f1a", "text-halo-width": 1 } + }, + { + "id": "Water area/label/Large river", + "type": "symbol", + "source": "esri", + "source-layer": "Water area/label", + "filter": ["==", "_label_class", 4], + "minzoom": 11, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Italic"], + "text-size": 13.33, + "text-letter-spacing": 0.01, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#5C9BD9", "text-halo-color": "#000f1a", "text-halo-width": 1 } + }, + { + "id": "Water area/label/Small lake or reservoir", + "type": "symbol", + "source": "esri", + "source-layer": "Water area/label", + "filter": ["==", "_label_class", 6], + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 11.33, "text-letter-spacing": 0.01, "text-max-width": 5, "text-field": "{_name_global}" }, + "paint": { "text-color": "#5C9BD9" } + }, + { + "id": "Water area/label/Large lake or reservoir", + "type": "symbol", + "source": "esri", + "source-layer": "Water area/label", + "filter": ["==", "_label_class", 3], + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 13.33, "text-letter-spacing": 0.01, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#5C9BD9" } + }, + { + "id": "Water area/label/Bay or inlet", + "type": "symbol", + "source": "esri", + "source-layer": "Water area/label", + "filter": ["==", "_label_class", 1], + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 12, "text-letter-spacing": 0.15, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#5C9BD9" } + }, + { + "id": "Water area/label/Small island", + "type": "symbol", + "source": "esri", + "source-layer": "Water area/label", + "filter": ["==", "_label_class", 0], + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 10.67, "text-letter-spacing": 0.05, "text-max-width": 5, "text-field": "{_name_global}" }, + "paint": { "text-color": "#96968C" } + }, + { + "id": "Water area/label/Large island", + "type": "symbol", + "source": "esri", + "source-layer": "Water area/label", + "filter": ["==", "_label_class", 5], + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 13.33, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#96968C" } + }, + { + "id": "Water area large scale/label/River", + "type": "symbol", + "source": "esri", + "source-layer": "Water area large scale/label", + "filter": ["==", "_label_class", 1], + "minzoom": 7, + "maxzoom": 11, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Italic"], + "text-size": 9.33, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#5C9BD9", "text-halo-color": "#000f1a", "text-halo-width": 1 } + }, + { + "id": "Water area large scale/label/Lake or lake intermittent", + "type": "symbol", + "source": "esri", + "source-layer": "Water area large scale/label", + "filter": ["==", "_label_class", 0], + "minzoom": 7, + "maxzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 9.33, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name}", "visibility": "none" }, + "paint": { "text-color": "#5C9BD9", "text-halo-color": "#000f1a", "text-halo-width": 1 } + }, + { + "id": "Water area medium scale/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Water area medium scale/label", + "minzoom": 5, + "maxzoom": 7, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 9.33, "text-max-width": 5, "text-field": "{_name}", "text-letter-spacing": 0.05, "visibility": "none" }, + "paint": { "text-color": "#5C9BD9", "text-halo-color": "#000f1a", "text-halo-width": 1 } + }, + { + "id": "Water area small scale/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Water area small scale/label", + "minzoom": 1, + "maxzoom": 5, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 9.33, "text-letter-spacing": 0.05, "text-max-width": 5, "text-field": "{_name}", "visibility": "none" }, + "paint": { "text-color": "#5C9BD9", "text-halo-color": "#000f1a", "text-halo-width": 1 } + }, + { + "id": "Marine area/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Marine area/label", + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 10, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#497AAB" } + }, + { + "id": "Marine waterbody/label/small", + "type": "symbol", + "source": "esri", + "source-layer": "Marine waterbody/label", + "filter": ["==", "_label_class", 4], + "minzoom": 1, + "maxzoom": 10, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 10, "text-letter-spacing": 0.1, "text-max-width": 6, "text-field": "{_name}", "text-padding": 15 }, + "paint": { "text-color": "#5C9BD9" } + }, + { + "id": "Marine waterbody/label/medium", + "type": "symbol", + "source": "esri", + "source-layer": "Marine waterbody/label", + "filter": ["==", "_label_class", 3], + "minzoom": 1, + "maxzoom": 10, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 10, "text-letter-spacing": 0.1, "text-max-width": 6, "text-field": "{_name}", "text-padding": 15 }, + "paint": { "text-color": "#5C9BD9" } + }, + { + "id": "Marine waterbody/label/large", + "type": "symbol", + "source": "esri", + "source-layer": "Marine waterbody/label", + "filter": ["==", "_label_class", 2], + "minzoom": 1, + "maxzoom": 10, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Italic"], "text-size": 11, "text-letter-spacing": 0.1, "text-max-width": 6, "text-field": "{_name}", "text-padding": 15 }, + "paint": { "text-color": "#5C9BD9" } + }, + { + "id": "Marine waterbody/label/x large", + "type": "symbol", + "source": "esri", + "source-layer": "Marine waterbody/label", + "filter": ["==", "_label_class", 1], + "minzoom": 1, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Italic"], + "text-size": 11, + "text-letter-spacing": 0.1, + "text-max-width": 6, + "text-field": "{_name}", + "text-padding": 15, + "visibility": "none" + }, + "paint": { "text-color": "#5C9BD9" } + }, + { + "id": "Marine waterbody/label/2x large", + "type": "symbol", + "source": "esri", + "source-layer": "Marine waterbody/label", + "filter": ["==", "_label_class", 0], + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Italic"], + "text-size": { + "stops": [ + [0, 10], + [1, 12] + ] + }, + "text-letter-spacing": 0.1, + "text-max-width": 6, + "text-field": "{_name}", + "text-padding": 15 + }, + "paint": { "text-color": "#5C9BD9" } + }, + { + "id": "Ferry/label/Rail ferry", + "type": "symbol", + "source": "esri", + "source-layer": "Ferry/label", + "filter": ["all", ["==", "_label_class", 1], ["!in", "Viz", 3]], + "minzoom": 12, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 10, + "text-letter-spacing": 0.1, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-offset": [0, -0.6] + }, + "paint": { "text-color": "#95BDE6", "text-halo-color": "#2A2A28", "text-halo-width": 1 } + }, + { + "id": "Railroad/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Railroad/label", + "minzoom": 14, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Regular"], + "text-size": 10, + "text-letter-spacing": 0.1, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-offset": [0, -0.6] + }, + "paint": { "text-color": "#95BDE6", "text-halo-color": "#2A2A28", "text-halo-width": 1.5 } + }, + { + "id": "Trail or path/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Trail or path/label", + "minzoom": 15, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": 9.33, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#9DC5F2", "text-halo-color": "#2A2A28", "text-halo-width": 1 } + }, + { + "id": "Road tunnel/label/Pedestrian", + "type": "symbol", + "source": "esri", + "source-layer": "Road tunnel/label", + "filter": ["all", ["==", "_label_class", 6], ["!in", "Viz", 3]], + "minzoom": 15, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#bfbdbb", "text-halo-color": "#2a2a28", "text-halo-width": 1 } + }, + { + "id": "Road tunnel/label/Local", + "type": "symbol", + "source": "esri", + "source-layer": "Road tunnel/label", + "filter": ["all", ["==", "_label_class", 5], ["!in", "Viz", 3]], + "minzoom": 12, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Regular"], + "text-size": { + "stops": [ + [12, 9], + [14, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#9DC5F2", "text-halo-color": "#262624", "text-halo-width": 1.5 } + }, + { + "id": "Road tunnel/label/Minor", + "type": "symbol", + "source": "esri", + "source-layer": "Road tunnel/label", + "filter": ["all", ["==", "_label_class", 4], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#9DC5F2", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Road tunnel/label/Major, alt name", + "type": "symbol", + "source": "esri", + "source-layer": "Road tunnel/label", + "filter": ["all", ["==", "_label_class", 3], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name}" + }, + "paint": { "text-color": "#9DC5F2", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Road tunnel/label/Major", + "type": "symbol", + "source": "esri", + "source-layer": "Road tunnel/label", + "filter": ["all", ["==", "_label_class", 2], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#9DC5F2", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Road tunnel/label/Freeway Motorway, alt name", + "type": "symbol", + "source": "esri", + "source-layer": "Road tunnel/label", + "filter": ["all", ["==", "_label_class", 1], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name}" + }, + "paint": { "text-color": "#9DC5F2", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Road tunnel/label/Highway", + "type": "symbol", + "source": "esri", + "source-layer": "Road tunnel/label", + "filter": ["all", ["==", "_label_class", 7], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#9DC5F2", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Road tunnel/label/Freeway Motorway", + "type": "symbol", + "source": "esri", + "source-layer": "Road tunnel/label", + "filter": ["all", ["==", "_label_class", 0], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#9DC5F2", "text-halo-color": "#262624" } + }, + { + "id": "Road/label/Rectangle hexagon brown white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 72], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle hexagon brown white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle hexagon green white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 70], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle hexagon green white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle hexagon red white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 68], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle hexagon red white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle hexagon blue white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 66], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle hexagon blue white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle hexagon brown white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 71], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle hexagon brown white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle hexagon green white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 69], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle hexagon green white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle hexagon red white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 67], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle hexagon red white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle hexagon blue white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 65], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle hexagon blue white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Octagon green white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 74], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.02, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Octagon green white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Hexagon orange black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 64], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.3, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Hexagon orange black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Hexagon green white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 62], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.3, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Hexagon green white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Hexagon red white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 60], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.3, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Hexagon red white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Hexagon white black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 56], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.3, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Hexagon white black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Pentagon green yellow (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 54], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon green yellow (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffff00" } + }, + { + "id": "Road/label/Pentagon green white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 52], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon green white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Pentagon yellow black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 50], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.02, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon yellow black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Pentagon blue white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 48], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-letter-spacing": 0.02, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon blue white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Pentagon white black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 46], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon white black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.3], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Pentagon inverse white black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 44], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon inverse white black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.3], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle green yellow (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 42], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle green yellow (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffff00" } + }, + { + "id": "Road/label/Rectangle green white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 40], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle green white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle yellow black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 38], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle yellow black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Hexagon blue white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 58], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.3, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Hexagon blue white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport" + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle red white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 36], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle red white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle blue white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 34], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle blue white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle white black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 32], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle white black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30, + "visibility": "none" + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/V-shaped white black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 30], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/V-shaped white black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped blue white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 28], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-letter-spacing": 0.02, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped blue white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped red white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 26], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped red white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped yellow black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 24], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-letter-spacing": 0.02, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped yellow black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped green leaf (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 22], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped green leaf (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped white green (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 20], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped white green (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30, + "visibility": "none" + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped white black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 18], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped white black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Secondary Hwy red white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 16], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Secondary Hwy red white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Secondary Hwy green white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 14], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Secondary Hwy green white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Secondary Hwy white black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 12], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Secondary Hwy white black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30, + "visibility": "none" + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Shield white black (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 10], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Shield white black (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Shield blue white (Alt)", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 8], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Shield blue white (Alt)/{_len}", + "icon-rotation-alignment": "viewport", + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Octagon green white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 73], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.02, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Octagon green white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Hexagon orange black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 63], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.3, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Hexagon orange black/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Hexagon green white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 61], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.3, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Hexagon green white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Hexagon red white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 59], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.3, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Hexagon red white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Hexagon white black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 55], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.3, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Hexagon white black/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Pentagon green yellow", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 53], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon green yellow/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffff00" } + }, + { + "id": "Road/label/Pentagon green white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 51], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon green white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Pentagon yellow black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 49], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.02, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon yellow black/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Pentagon blue white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 47], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-letter-spacing": 0.02, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon blue white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Pentagon white black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 45], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon white black/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.3], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Pentagon inverse white black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 43], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Pentagon inverse white black/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.3], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle green yellow", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 41], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle green yellow/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffff00" } + }, + { + "id": "Road/label/Rectangle green white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 39], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle green white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle yellow black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 37], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle yellow black/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Hexagon blue white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 57], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.3, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Hexagon blue white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport" + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle red white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 35], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle red white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle blue white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 33], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle blue white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Rectangle white black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 31], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Rectangle white black/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.2], + "text-rotation-alignment": "viewport", + "text-padding": 30, + "visibility": "none" + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/V-shaped white black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 29], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/V-shaped white black/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped blue white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 27], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-letter-spacing": 0.02, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped blue white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped red white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 25], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped red white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped yellow black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 23], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-letter-spacing": 0.02, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped yellow black/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped green leaf", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 21], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped green leaf/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped white green", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 19], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped white green/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30, + "visibility": "none" + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/U-shaped white black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 17], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/U-shaped white black/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Secondary Hwy red white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 15], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 8.67, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Secondary Hwy red white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30 + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Secondary Hwy green white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 13], ["!in", "Viz", 3]], + "minzoom": 6, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-max-width": 8, + "text-field": "{_name}", + "icon-image": "Road/Secondary Hwy green white/{_len}", + "icon-rotation-alignment": "viewport", + "text-offset": [0, 0.1], + "text-rotation-alignment": "viewport", + "text-padding": 30, + "visibility": "none" + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Secondary Hwy white black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 11], ["!in", "Viz", 3]], + "minzoom": 11, + "layout": { + "text-size": 8.67, + "text-font": ["Arial Regular"], + "text-max-width": 8, + "text-padding": 30, + "text-rotation-alignment": "viewport", + "icon-rotation-alignment": "viewport", + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-offset": [0, 0.1], + "text-field": "{_name}", + "icon-image": "Road/Secondary Hwy white black/{_len}" + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Shield white black", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 9], ["!in", "Viz", 3]], + "minzoom": 11, + "layout": { + "text-size": 9.33, + "text-font": ["Arial Regular"], + "text-max-width": 8, + "text-padding": 30, + "text-rotation-alignment": "viewport", + "icon-rotation-alignment": "viewport", + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-field": "{_name}", + "icon-image": "Road/Shield white black/{_len}" + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Road/label/Shield blue white", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 7], ["!in", "Viz", 3]], + "minzoom": 11, + "layout": { + "text-size": 8.67, + "text-font": ["Arial Regular"], + "text-max-width": 8, + "text-padding": 30, + "text-rotation-alignment": "viewport", + "icon-rotation-alignment": "viewport", + "symbol-placement": "line", + "symbol-avoid-edges": true, + "text-field": "{_name}", + "icon-image": "Road/Shield blue white/{_len}" + }, + "paint": { "text-color": "#ffffff" } + }, + { + "id": "Pedestrian/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Pedestrian/label", + "minzoom": 15, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 9.33, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#bfbdbb", "text-halo-color": "#2a2a28", "text-halo-width": 1 } + }, + { + "id": "Road/label/Pedestrian", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 6], ["!in", "Viz", 3]], + "minzoom": 15, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Regular"], + "text-size": 9.33, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#bfbdbb", "text-halo-color": "#2a2a28", "text-halo-width": 1 } + }, + { + "id": "Road/label/Local", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 5], ["!in", "Viz", 3]], + "minzoom": 12, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Regular"], + "text-size": { + "stops": [ + [12, 9], + [14, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { + "text-color": { + "stops": [ + [12, "#9dc5f2"], + [13, "#a5d0ff"] + ] + }, + "text-halo-color": "#262624", + "text-halo-width": 1.5 + } + }, + { + "id": "Road/label/Minor", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 4], ["!in", "Viz", 3]], + "minzoom": 11, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#9dc5f2", "text-halo-color": "#262624", "text-halo-width": 1.5 } + }, + { + "id": "Road/label/Major, alt name", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 3], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name}" + }, + "paint": { "text-color": "#9dc5f2", "text-halo-color": "#262624", "text-halo-width": 1.5 } + }, + { + "id": "Road/label/Major", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 2], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#9dc5f2", "text-halo-color": "#262624", "text-halo-width": 1.5 } + }, + { + "id": "Road/label/Freeway Motorway, alt name", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 1], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name}" + }, + "paint": { "text-color": "#9dc5f2", "text-halo-color": "#262624", "text-halo-width": 1.5 } + }, + { + "id": "Road/label/Highway", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 75], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#9dc5f2", "text-halo-color": "#262624", "text-halo-width": 1.5 } + }, + { + "id": "Road/label/Freeway Motorway", + "type": "symbol", + "source": "esri", + "source-layer": "Road/label", + "filter": ["all", ["==", "_label_class", 0], ["!in", "Viz", 3]], + "minzoom": 10, + "layout": { + "symbol-placement": "line", + "symbol-avoid-edges": true, + "symbol-spacing": 1000, + "text-font": ["Arial Bold"], + "text-size": { + "stops": [ + [10, 9], + [12, 10.67] + ] + }, + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#9dc5f2", "text-halo-color": "#262624", "text-halo-width": 1.5 } + }, + { + "id": "Cemetery/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Cemetery/label", + "minzoom": 13, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#6a9963", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Freight/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Freight/label", + "minzoom": 13, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Water and wastewater/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Water and wastewater/label", + "minzoom": 13, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Port/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Port/label", + "minzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 10, + "text-transform": "uppercase", + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name_global}" + }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Industry/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Industry/label", + "minzoom": 13, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Government/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Government/label", + "minzoom": 13, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Finance/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Finance/label", + "minzoom": 13, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Emergency/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Emergency/label", + "minzoom": 13, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Indigenous/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Indigenous/label", + "minzoom": 7, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}", "visibility": "none" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Military/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Military/label", + "minzoom": 6, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 10, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 25, + "visibility": "none" + }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Transportation/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Transportation/label", + "minzoom": 13, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Beach/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Beach/label", + "minzoom": 13, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 9.33, "text-letter-spacing": 0.08, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#6a9963", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Golf course/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Golf course/label", + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#6a9963", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Zoo/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Zoo/label", + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#6a9963", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Retail/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Retail/label", + "minzoom": 13, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Landmark/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Landmark/label", + "minzoom": 13, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Openspace or forest/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Openspace or forest/label", + "minzoom": 9, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}", "visibility": "none" }, + "paint": { "text-color": "#6a9963", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Park or farming/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Park or farming/label", + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}", "text-padding": 25 }, + "paint": { "text-color": "#6a9963", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Point of interest/Park", + "type": "symbol", + "source": "esri", + "source-layer": "Point of interest", + "filter": ["==", "_label_class", 1], + "minzoom": 9, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.08, "text-max-width": 8, "text-field": "{_name_global}", "visibility": "none" }, + "paint": { "text-color": "#6a9963", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Education/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Education/label", + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Medical/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Medical/label", + "minzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.05, "text-max-width": 8, "text-field": "{_name_global}" }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Admin1 forest or park/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Admin1 forest or park/label", + "minzoom": 9, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 10, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 25, + "visibility": "none" + }, + "paint": { "text-color": "#6a9963", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Admin0 forest or park/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Admin0 forest or park/label", + "minzoom": 6, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 10, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 25, + "visibility": "none" + }, + "paint": { "text-color": "#6a9963", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Airport/label/Airport property", + "type": "symbol", + "source": "esri", + "source-layer": "Airport/label", + "minzoom": 9, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": 10.67, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 15 + }, + "paint": { "text-color": "#a6a664", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Exit/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Exit", + "minzoom": 15, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Bold"], + "text-size": 12, + "text-letter-spacing": 0.05, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-rotation-alignment": "viewport" + }, + "paint": { "text-color": "#6eff24", "text-halo-blur": 1.3, "text-halo-color": "#000000", "text-halo-width": 1 } + }, + { + "id": "Point of interest/Bus station", + "type": "symbol", + "source": "esri", + "source-layer": "Point of interest", + "filter": ["==", "_symbol", 2], + "minzoom": 9, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "Point of interest/Bus station", + "icon-allow-overlap": true, + "icon-padding": 1, + "icon-size": { + "stops": [ + [13, 0.85], + [16, 1.3] + ] + }, + "text-font": ["Arial Regular"], + "text-size": 10.67, + "text-anchor": "bottom", + "text-letter-spacing": 0.04, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-offset": [0, -0.9] + }, + "paint": { + "text-color": { + "stops": [ + [11, "#80804d"], + [12, "#a6a664"] + ] + }, + "text-halo-color": "#262624", + "text-halo-width": 1 + } + }, + { + "id": "Point of interest/Rail station", + "type": "symbol", + "source": "esri", + "source-layer": "Point of interest", + "filter": ["==", "_symbol", 3], + "minzoom": 9, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "Point of interest/Rail station", + "icon-allow-overlap": true, + "icon-padding": 1, + "icon-size": { + "stops": [ + [13, 0.85], + [16, 1.3] + ] + }, + "text-font": ["Arial Regular"], + "text-size": 10.67, + "text-anchor": "bottom", + "text-letter-spacing": 0.04, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-offset": [0, -0.9] + }, + "paint": { + "text-color": { + "stops": [ + [11, "#80804d"], + [12, "#a6a664"] + ] + }, + "text-halo-color": "#262624", + "text-halo-width": 1 + } + }, + { + "id": "Point of interest/General", + "type": "symbol", + "source": "esri", + "source-layer": "Point of interest", + "filter": ["==", "_label_class", 0], + "minzoom": 9, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 10, "text-letter-spacing": 0.08, "text-max-width": 8, "text-field": "{_name_global}", "text-padding": 15 }, + "paint": { + "text-color": { + "stops": [ + [11, "#80804d"], + [12, "#a6a664"] + ] + }, + "text-halo-color": "#262624", + "text-halo-width": 1 + } + }, + { + "id": "Admin2 area/label/small", + "type": "symbol", + "source": "esri", + "source-layer": "Admin2 area/label", + "filter": ["==", "_label_class", 1], + "minzoom": 8, + "maxzoom": 11, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-size": { + "stops": [ + [8, 10], + [10, 12] + ] + }, + "text-max-width": 9, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#716480", "text-halo-width": 1, "text-halo-color": "#262624" } + }, + { + "id": "Admin2 area/label/large", + "type": "symbol", + "source": "esri", + "source-layer": "Admin2 area/label", + "filter": ["==", "_label_class", 0], + "minzoom": 8, + "maxzoom": 11, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 12, "text-max-width": 8, "text-field": "{_name}" }, + "paint": { "text-color": "#716480", "text-halo-width": 1, "text-halo-color": "#262624" } + }, + { + "id": "Admin1 area/label/x small", + "type": "symbol", + "source": "esri", + "source-layer": "Admin1 area/label", + "filter": ["==", "_label_class", 5], + "minzoom": 6, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-max-width": 8, + "text-field": "{_name}", + "text-size": { + "stops": [ + [6, 9], + [9, 11] + ] + } + }, + "paint": { "text-color": "#9378a6", "text-halo-width": 1, "text-halo-color": "#262624" } + }, + { + "id": "Admin1 area/label/small", + "type": "symbol", + "source": "esri", + "source-layer": "Admin1 area/label", + "filter": ["==", "_label_class", 4], + "minzoom": 6, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-max-width": 8, + "text-field": "{_name}", + "text-size": { + "stops": [ + [6, 10], + [9, 12] + ] + } + }, + "paint": { "text-color": "#9378a6", "text-halo-width": 1, "text-halo-color": "#262624" } + }, + { + "id": "Admin1 area/label/medium", + "type": "symbol", + "source": "esri", + "source-layer": "Admin1 area/label", + "filter": ["==", "_label_class", 3], + "minzoom": 6, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-max-width": 8, + "text-field": "{_name}", + "text-size": { + "stops": [ + [6, 12], + [9, 14] + ] + } + }, + "paint": { "text-color": "#9378a6", "text-halo-width": 1, "text-halo-color": "#262624" } + }, + { + "id": "Admin1 area/label/large", + "type": "symbol", + "source": "esri", + "source-layer": "Admin1 area/label", + "filter": ["==", "_label_class", 2], + "minzoom": 4, + "maxzoom": 10, + "layout": { + "text-size": { + "stops": [ + [3, 9], + [6, 12.5], + [8, 14.5] + ] + }, + "text-font": ["Arial Regular"], + "text-max-width": 8, + "text-letter-spacing": 0.1, + "symbol-avoid-edges": true, + "text-field": "{_name}" + }, + "paint": { "text-color": "#9378a6", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Admin1 area/label/x large", + "type": "symbol", + "source": "esri", + "source-layer": "Admin1 area/label", + "filter": ["==", "_label_class", 1], + "minzoom": 4, + "maxzoom": 10, + "layout": { + "text-size": { + "stops": [ + [3, 9], + [6, 12.5], + [8, 14.5] + ] + }, + "text-font": ["Arial Regular"], + "text-max-width": 8, + "text-letter-spacing": 0.1, + "symbol-avoid-edges": true, + "text-field": "{_name}" + }, + "paint": { "text-color": "#9378a6", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Admin1 area/label/2x large", + "type": "symbol", + "source": "esri", + "source-layer": "Admin1 area/label", + "filter": ["==", "_label_class", 0], + "minzoom": 3, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-max-width": 8, + "text-field": "{_name}", + "text-size": { + "stops": [ + [3, 9], + [6, 12.5], + [8, 14.5] + ] + }, + "text-letter-spacing": 0.1 + }, + "paint": { "text-color": "#9378a6", "text-halo-width": 1, "text-halo-color": "#262624" } + }, + { + "id": "Admin0 point/x small", + "type": "symbol", + "source": "esri", + "source-layer": "Admin0 point", + "filter": ["==", "_label_class", 5], + "minzoom": 5, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.15, + "text-max-width": 8, + "text-field": "{_name}", + "text-size": { + "stops": [ + [5, 8], + [9, 11] + ] + }, + "text-transform": "uppercase" + }, + "paint": { "text-color": "#bb93d9", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Admin0 point/small", + "type": "symbol", + "source": "esri", + "source-layer": "Admin0 point", + "filter": ["==", "_label_class", 4], + "minzoom": 4, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.15, + "text-max-width": 8, + "text-field": "{_name}", + "text-size": { + "stops": [ + [4, 8], + [9, 11] + ] + }, + "text-transform": "uppercase" + }, + "paint": { "text-color": "#bb93d9", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Admin0 point/medium", + "type": "symbol", + "source": "esri", + "source-layer": "Admin0 point", + "filter": ["==", "_label_class", 3], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.15, + "text-max-width": 6, + "text-field": "{_name}", + "text-size": { + "stops": [ + [2, 9], + [9, 12] + ] + }, + "text-transform": "uppercase" + }, + "paint": { "text-color": "#bb93d9", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Admin0 point/large", + "type": "symbol", + "source": "esri", + "source-layer": "Admin0 point", + "filter": ["==", "_label_class", 2], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Regular"], + "text-letter-spacing": 0.15, + "text-max-width": 8, + "text-field": "{_name}", + "text-size": { + "stops": [ + [2, 10], + [9, 13] + ] + }, + "text-transform": "uppercase" + }, + "paint": { "text-color": "#bb93d9", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Admin0 point/x large", + "type": "symbol", + "source": "esri", + "source-layer": "Admin0 point", + "filter": ["==", "_label_class", 1], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Bold"], + "text-letter-spacing": 0.25, + "text-max-width": 8, + "text-field": "{_name}", + "text-size": { + "stops": [ + [2, 10], + [9, 16] + ] + }, + "text-transform": "uppercase" + }, + "paint": { "text-color": "#bb93d9", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Admin0 point/2x large", + "type": "symbol", + "source": "esri", + "source-layer": "Admin0 point", + "filter": ["==", "_label_class", 0], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "text-font": ["Arial Bold"], + "text-letter-spacing": 0.25, + "text-max-width": 8, + "text-field": "{_name}", + "text-size": { + "stops": [ + [2, 12], + [8, 17] + ] + }, + "text-transform": "uppercase" + }, + "paint": { "text-color": "#bb93d9", "text-halo-color": "#262624", "text-halo-width": 1 } + }, + { + "id": "Neighborhood", + "type": "symbol", + "source": "esri", + "source-layer": "Neighborhood", + "minzoom": 14, + "maxzoom": 17, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "Neighborhood", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 8, + "text-transform": "uppercase", + "text-anchor": "bottom-left", + "text-letter-spacing": 0.25, + "text-max-width": 8.5, + "text-field": "{_name_global}", + "text-padding": 1 + }, + "paint": { "text-color": "#bebebe", "text-halo-width": 1.33, "text-halo-color": "#262624" } + }, + { + "id": "City large scale/town small", + "type": "symbol", + "source": "esri", + "source-layer": "City large scale", + "filter": ["==", "_label_class", 5], + "minzoom": 10, + "maxzoom": 17, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City large scale", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10, + "text-anchor": "bottom-left", + "text-letter-spacing": 0.08, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 1 + }, + "paint": { + "text-color": { + "stops": [ + [10, "#8c8c8c"], + [11, "#a5a5a5"], + [12, "#bebebe"] + ] + }, + "text-halo-width": 1.33, + "text-halo-color": "#262624" + } + }, + { + "id": "City large scale/town large", + "type": "symbol", + "source": "esri", + "source-layer": "City large scale", + "filter": ["==", "_label_class", 4], + "minzoom": 10, + "maxzoom": 17, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City large scale", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-letter-spacing": 0.09, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 1 + }, + "paint": { "text-color": "#bebebe", "text-halo-width": 1.33, "text-halo-color": "#262624" } + }, + { + "id": "City large scale/small", + "type": "symbol", + "source": "esri", + "source-layer": "City large scale", + "filter": ["==", "_label_class", 3], + "minzoom": 10, + "maxzoom": 17, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City large scale", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 12, + "text-anchor": "bottom-left", + "text-letter-spacing": 0.1, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 1 + }, + "paint": { "text-color": "#bebebe", "text-halo-width": 1.33, "text-halo-color": "#262624" } + }, + { + "id": "City large scale/medium", + "type": "symbol", + "source": "esri", + "source-layer": "City large scale", + "filter": ["==", "_label_class", 2], + "minzoom": 10, + "maxzoom": 17, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City large scale", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 12, + "text-anchor": "bottom-left", + "text-letter-spacing": 0.1, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 1 + }, + "paint": { "text-color": "#bebebe", "text-halo-width": 1.33, "text-halo-color": "#262624" } + }, + { + "id": "City large scale/large", + "type": "symbol", + "source": "esri", + "source-layer": "City large scale", + "filter": ["==", "_label_class", 1], + "minzoom": 10, + "maxzoom": 17, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City large scale", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Bold"], + "text-size": 12, + "text-anchor": "bottom-left", + "text-letter-spacing": 0.1, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 1 + }, + "paint": { "text-color": "#bebebe", "text-halo-width": 1.33, "text-halo-color": "#262624" } + }, + { + "id": "City large scale/x large", + "type": "symbol", + "source": "esri", + "source-layer": "City large scale", + "filter": ["==", "_label_class", 0], + "minzoom": 10, + "maxzoom": 17, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City large scale", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Bold"], + "text-size": 13.5, + "text-anchor": "bottom-left", + "text-letter-spacing": 0.1, + "text-max-width": 8, + "text-field": "{_name_global}", + "text-padding": 1 + }, + "paint": { "text-color": "#bebebe", "text-halo-width": 1.33, "text-halo-color": "#262624" } + }, + { + "id": "City small scale/town small non capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 17], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "visibility": "none", + "text-size": 10, + "text-font": ["Arial Regular"], + "text-max-width": 8, + "text-justify": "left", + "icon-allow-overlap": true, + "symbol-avoid-edges": true, + "text-anchor": "bottom-left", + "text-field": "{_name}", + "icon-image": "City small scale/town small non capital" + }, + "paint": { "text-color": "#969696", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/town large non capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 15], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/town large non capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/small non capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 12], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/small non capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/medium non capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 9], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/medium non capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/other capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 18], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/other capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/town large other capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 14], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/town large other capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/small other capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 11], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/small other capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/medium other capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 8], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/medium other capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/town small admin0 capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 16], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/town small admin0 capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/town large admin0 capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 13], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/town large admin0 capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/small admin0 capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 10], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/small admin0 capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/medium admin0 capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 7], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/medium admin0 capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Bold"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/large other capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 5], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/large other capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/x large admin2 capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 2], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/x large admin2 capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 12, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/large non capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 6], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/large non capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Bold"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/large admin0 capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 4], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/large admin0 capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Bold"], + "text-size": 10.5, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#aaaaaa", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/x large non capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 3], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/x large non capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Bold"], + "text-size": 12, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#c0c0c0", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/x large admin1 capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 1], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/x large admin1 capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": 12, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { "text-color": "#c0c0c0", "text-halo-color": "#262624", "text-halo-width": 1.33 } + }, + { + "id": "City small scale/x large admin0 capital", + "type": "symbol", + "source": "esri", + "source-layer": "City small scale", + "filter": ["==", "_symbol", 0], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "City small scale/x large admin0 capital", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Bold"], + "text-size": 12, + "text-anchor": "bottom-left", + "text-justify": "left", + "text-max-width": 8, + "text-field": "{_name}", + "visibility": "none" + }, + "paint": { + "text-color": { + "stops": [ + [4, "#aaaaaa"], + [5, "#c0c0c0"] + ] + }, + "text-halo-color": "#262624", + "text-halo-width": 1.33 + } + }, + { + "id": "Building/label/Default", + "type": "symbol", + "source": "esri", + "source-layer": "Building/label", + "minzoom": 15, + "layout": { "symbol-avoid-edges": true, "text-font": ["Arial Regular"], "text-size": 9.5, "text-letter-spacing": 0.08, "text-max-width": 8, "text-field": "{_name_global}", "text-padding": 20 }, + "paint": { "text-color": "#969696", "text-halo-width": 1, "text-halo-color": "#2A2A28" } + }, + { + "id": "Continent", + "type": "symbol", + "source": "esri", + "source-layer": "Continent", + "minzoom": 0, + "maxzoom": 2, + "layout": { + "symbol-avoid-edges": true, + "icon-image": "Continent", + "icon-allow-overlap": true, + "icon-padding": 1, + "text-font": ["Arial Regular"], + "text-size": { + "stops": [ + [0, 8.5], + [1, 11.5] + ] + }, + "text-letter-spacing": 0.35, + "text-max-width": 8, + "text-line-height": 1.75, + "text-field": "{_name_global}", + "text-transform": "uppercase", + "visibility": "none" + }, + "paint": { "text-color": "#cccccc" } + }, + { + "id": "Disputed label point/Island", + "type": "symbol", + "source": "esri", + "source-layer": "Disputed label point", + "filter": ["all", ["==", "_label_class", 1], ["in", "DisputeID", 0]], + "minzoom": 11, + "layout": { + "icon-image": "Disputed label point", + "icon-allow-overlap": true, + "text-font": ["Arial Regular"], + "text-size": 10.5, + "text-letter-spacing": 0.1, + "text-max-width": 8, + "text-field": "{_name}", + "text-optional": true + }, + "paint": { "text-color": "#96968C" } + }, + { + "id": "Disputed label point/Waterbody", + "type": "symbol", + "source": "esri", + "source-layer": "Disputed label point", + "filter": ["all", ["==", "_label_class", 0], ["in", "DisputeID", 1006]], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "icon-image": "Disputed label point", + "icon-allow-overlap": true, + "text-font": ["Arial Italic"], + "text-size": 10.5, + "text-letter-spacing": 0.1, + "text-max-width": 7, + "text-field": "{_name}", + "text-optional": true + }, + "paint": { "text-color": "#5C9BD9" } + }, + { + "id": "Disputed label point/Admin0", + "type": "symbol", + "source": "esri", + "source-layer": "Disputed label point", + "filter": ["all", ["==", "_label_class", 2], ["in", "DisputeID", 1021]], + "minzoom": 2, + "maxzoom": 10, + "layout": { + "icon-image": "Disputed label point", + "icon-allow-overlap": true, + "text-font": ["Arial Regular"], + "text-size": { + "stops": [ + [2, 9], + [8, 11.5] + ] + }, + "text-letter-spacing": 0.1, + "text-max-width": 8, + "text-field": "{_name}", + "text-transform": "uppercase", + "text-optional": true + }, + "paint": { "text-color": "#bb93d9", "text-halo-color": "#262624", "text-halo-width": 1 } + } + ], + "metadata": { + "arcgisStyleUrl": "https://www.arcgis.com/sharing/rest/content/items/77cdce3e37204a06be9da9572e892fde/resources/styles/root.json", + "arcgisOriginalItemTitle": "World Street Map Canvas (Night)", + "arcgisQuickEditorWarning": true, + "arcgisEditorExtents": [ + { "spatialReference": { "wkid": 102100 }, "xmin": -18800994.962717548, "ymin": 4132400.31525453, "xmax": -3303203.608260519, "ymax": 12605308.972426113 }, + { "spatialReference": { "latestWkid": 3857, "wkid": 102100 }, "xmin": -1295782.795658164, "ymin": 5988848.323580071, "xmax": 1267614.5117078347, "ymax": 7417306.365089368 }, + { "spatialReference": { "latestWkid": 3857, "wkid": 102100 }, "xmin": -8655258.605290867, "ymin": 4660747.33454408, "xmax": -8495046.273580492, "ymax": 4750025.962138412 }, + { "spatialReference": { "latestWkid": 3857, "wkid": 102100 }, "xmin": 16829782.370097805, "ymin": -4012773.2826673286, "xmax": 16834789.005463753, "ymax": -4009983.325555006 } + ], + "arcgisMinimapVisibility": true + } +} diff --git a/src/App.js b/src/App.js index f076cfa3..caae88ff 100644 --- a/src/App.js +++ b/src/App.js @@ -65,6 +65,9 @@ const MapApp = (props) => { link.href = icon; }; useEffect(() => { + window.security = []; + helpers.addIsLoaded("security"); + // LISTEN FOR MAP TO MOUNT const mapLoadedListener = () => setMapLoading(false); window.emitter.addListener("mapLoaded", mapLoadedListener); @@ -78,7 +81,7 @@ const MapApp = (props) => { window.app = packageJson.name; window.homepage = packageJson.homepage; window.version = packageJson.version; - helpers.loadConfig(() => { + helpers.loadConfig(undefined, () => { document.title = window.config.title; if (window.config.favicon) changeIcon(window.config.favicon); helpers.addIsLoaded("settings"); diff --git a/src/AppSecure.jsx b/src/AppSecure.jsx new file mode 100644 index 00000000..1a7aeff4 --- /dev/null +++ b/src/AppSecure.jsx @@ -0,0 +1,256 @@ +import React, { useEffect, useState } from "react"; +import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; +import { MsalProvider, MsalAuthenticationTemplate, UnauthenticatedTemplate, useMsal, useIsAuthenticated } from "@azure/msal-react"; +import { PublicClientApplication, InteractionStatus } from "@azure/msal-browser"; +import { msalConfig } from "./authConfig"; +import { ErrorBoundary } from "./ErrorBoundary.jsx"; + +import "./App.css"; +import Header from "./header/Header"; +import Sidebar from "./sidebar/Sidebar"; +import SCMap from "./map/SCMap"; +import "./helpers/SC.css"; +import mainConfig from "./config.json"; +import configSecured from "./config-secured.json"; +import LoadingScreen from "./helpers/LoadingScreen.jsx"; + +import ReactGA from "react-ga4"; +import * as helpers from "./helpers/helpers"; +import { getUserStorage } from "./helpers/storage"; + +import * as helpersEsri from "./helpers/esriHelpers"; +import { get } from "./helpers/api"; +import packageJson from "../package.json"; +import LegendApp from "./legend/App"; +import LayerInfoApp from "./layerInfo/App"; + +const msalInstance = new PublicClientApplication(msalConfig); +await msalInstance.initialize(); +const apiUrl = configSecured.apiUrlSecured; +var securityCalled = false; +window.security = []; +window.isAppSecured = true; + +// SECURED VERSION +document.title = mainConfig.title; + +// GOOGLE ANALYTICS +const enableAnalytics = helpers.getURLParameter("ANALYTICS") !== "off"; +if (mainConfig.googleAnalyticsID !== undefined && mainConfig.googleAnalyticsID !== "" && enableAnalytics) { + ReactGA.initialize(mainConfig.googleAnalyticsID); + ReactGA.send({ hitType: "pageview", page: window.location.pathname + window.location.search }); +} + +const InProgressComponent = ({ inProgress }) => { + return

{inProgress} In Progress. Please wait.

; +}; +const LoginComponent = (props) => { + return ( +
props.handleLogin(props.instance)} title="Login"> + Login +
+ ); +}; +function handleLogin(instance) { + instance.loginRedirect(msalConfig).catch((e) => { + console.error(e); + }); +} +const ErrorComponent = ({ error }) => { + return ( +

+ This Web Map is a secured page and the following error occurred during authentication: {error.errorCode} +

+ ); +}; + +const MainContent = () => { + const { instance, accounts, inProgress } = useMsal(); + const [mapLoading, setMapLoading] = useState(true); + const [sidebarLoading, setSidebarLoading] = useState(true); + const [headerLoading, setHeaderLoading] = useState(true); + const isAuthenticated = useIsAuthenticated(); + + // LISTEN FOR ESRI LOGIN CALLBACK + window.emitter.addListener("esriLoginComplete", (esriLogin) => { + helpersEsri.processToken(esriLogin); + }); + + // LISTEN FOR MAP TO MOUNT + window.emitter.addListener("mapLoaded", () => setMapLoading(false)); + // LISTEN FOR SIDEBAR TO MOUNT + window.emitter.addListener("sidebarLoaded", () => setSidebarLoading(false)); + // LISTEN FOR HEADER TO MOUNT + window.emitter.addListener("headerLoaded", () => setHeaderLoading(false)); + const changeIcon = (icon) => { + var link = document.getElementById("favicon"); + if (!link) { + link = document.createElement("link"); + link.rel = "icon"; + link.id = "favicon"; + document.getElementsByTagName("head")[0].appendChild(link); + } + let urlArray = link.href.split("/"); + urlArray.pop(); + icon = `${urlArray.join("/")}/${icon}`; + link.href = icon; + }; + + useEffect(() => { + if (!isAuthenticated && inProgress === InteractionStatus.None) { + handleLogin(instance); + } else { + let account = undefined; + const tenantId = msalConfig.tenant; + if (accounts.length === 0) return; + //console.log(accounts); + account = accounts.filter((item) => { + return item.tenantId === tenantId; + })[0]; + if (!account) { + //something went wrong, clear the user login cache and try again + clearUserToken(); + handleLogin(instance); + } + window.instance = instance; + window.account = account; + setSecurity(account); + } + }, [instance, accounts, inProgress, isAuthenticated]); + + useEffect(() => { + window.app = packageJson.name; + window.homepage = packageJson.homepage; + window.version = packageJson.version; + helpers.waitForLoad("security", Date.now(), 30, () => { + getUserStorage(() => { + setControlPreferences(); + versionCleanup(); + helpers.loadConfig(configSecured, () => { + document.title = window.config.title; + if (window.config.favicon) changeIcon(window.config.favicon); + helpers.addIsLoaded("settings"); + if (window.config.default_theme !== undefined) window.emitter.emit("activateSidebarItem", window.config.default_theme, "themes"); + if (window.config.default_tool !== undefined) window.emitter.emit("activateSidebarItem", window.config.default_tool, "tools"); + }); + }); + }); + }, []); + return ( +
+ + +
+
+ +
+ + + {/* */} +
+ + + + +

Unauthenticated.

+ +
+
+ ); +}; + +export default function AppSecure() { + return ( + + + } /> + } /> + } /> + } /> + } /> + } /> + + + ); +} + +const clearUserToken = () => { + //remove previous cached login information + Object.keys(localStorage).forEach((key) => { + if (key.indexOf("login.microsoftonline.com") !== -1 || key.indexOf("login.windows.net") !== -1 || key.indexOf("msal.") !== -1) { + localStorage.removeItem(key); + } + }); +}; +const versionCleanup = () => { + if (packageJson.version !== helpers.getItemsFromStorage("cacheVersion")) { + let previousVersion = helpers.getItemsFromStorage("cacheVersion"); + previousVersion = !previousVersion ? packageJson.version : previousVersion; + let majorVersion = parseInt(previousVersion.split(".")[0]); + let minorVersion = parseInt(previousVersion.split(".")[1]); + let patchVersion = parseInt(previousVersion.split(".")[2]); + console.log("Version has changed from " + previousVersion + " to " + packageJson.version); + console.log("Major Version: " + majorVersion); + console.log("Minor Version: " + minorVersion); + console.log("Patch Version: " + patchVersion); + helpers.removeFromStorage("cacheVersion"); + helpers.saveToStorage("cacheVersion", packageJson.version); + //ADD ANY CLEANUP CODE HERE + if (majorVersion <= 1 && minorVersion <= 1 && patchVersion <= 8) helpers.removeFromStorage("avlLive"); //remove old avlLive as prior to version 1.1.9 geotab options didn't exist + if (majorVersion <= 1 && minorVersion <= 1 && patchVersion <= 1) helpers.removeFromStorage("ArcGIS_Token"); //remove old ArcGIS Tokens as prior to version 1.1.2 they had an incorrect expiry date + if (majorVersion <= 1 && minorVersion <= 1 && patchVersion <= 14) clearUserToken(); //remove old authentication tokens + } +}; +const MapApp = () => { + return ( + + + + ); +}; +const setSecurity = (account) => { + if (securityCalled) return; + console.log("setting security"); + securityCalled = true; + helpers.addAppStat("SECURITY_LOG_ON", account.name); + + //===========USE SECURITY ROLES================= + // window.security = account.idTokenClaims && account.idTokenClaims.roles ? account.idTokenClaims.roles : []; + // console.log(account); + // console.log("Emitting security complete without errors"); + // window.emitter.emit("securityComplete", window.security); + // helpers.addIsLoaded("security"); + + //===========USE API FOR SECURITY ROLES================= + get(apiUrl + "secure/security/" + account.localAccountId, { useBearerToken: true }, (result) => { + if (!result || !result.toString().includes("error")) { + window.security = result; + console.log("Emitting security complete without errors"); + window.emitter.emit("securityComplete", result); + helpers.addIsLoaded("security"); + } + }); +}; + +const setControlPreferences = () => { + const localMapControls = helpers.getItemsFromStorage("Map Control Settings"); + window.mapControls = mainConfig.controls; + if (localMapControls) { + if (localMapControls.rotate) window.mapControls.rotate = localMapControls.rotate; + if (localMapControls.fullScreen) window.mapControls.fullScreen = localMapControls.fullScreen; + if (localMapControls.zoomInOut) window.mapControls.zoomInOut = localMapControls.zoomInOut; + if (localMapControls.currentLocation) window.mapControls.currentLocation = localMapControls.currentLocation; + if (localMapControls.zoomExtent) window.mapControls.zoomExtent = localMapControls.zoomExtent; + if (localMapControls.scale) window.mapControls.scale = localMapControls.scale; + if (localMapControls.scaleLine) window.mapControls.scaleLine = localMapControls.scaleLine; + if (localMapControls.basemap) window.mapControls.basemap = localMapControls.basemap; + if (localMapControls.gitHubButton) window.mapControls.gitHubButton = localMapControls.gitHubButton; + if (localMapControls.scaleSelector) window.mapControls.scaleSelector = localMapControls.scaleSelector; + } +}; +const OAuthCallback = () => { + useEffect(() => { + window.location.href = process.env.PUBLIC_URL + "oauth-callback.html"; + }, []); + return
; +}; diff --git a/src/ErrorBoundary.jsx b/src/ErrorBoundary.jsx new file mode 100644 index 00000000..8b3e1ca8 --- /dev/null +++ b/src/ErrorBoundary.jsx @@ -0,0 +1,30 @@ +import React from "react"; + +export class ErrorBoundary extends React.Component { + constructor(props) { + super(props); + this.state = { + hasError: false, + error: "", + }; + } + + componentDidCatch(e) { + this.setState({ + hasError: true, + error: e.errorCode, + }); + } + + render() { + if (this.hasError) { + return ( +
+ This is a protected page and the following error occurred during authentication: {this.state.error} +
+ ); + } + + return this.props.children; + } +} diff --git a/src/authConfig.js b/src/authConfig.js new file mode 100644 index 00000000..71a5f45e --- /dev/null +++ b/src/authConfig.js @@ -0,0 +1,51 @@ +import { LogLevel } from "@azure/msal-browser"; +// Config object to be passed to Msal on creation +export const msalConfig = { + tenant: process.env.REACT_APP_TENANT, + defaultScope: process.env.REACT_APP_DEFAULT_SCOPE, + auth: { + clientId: process.env.REACT_APP_CLIENTID, + authority: process.env.REACT_APP_AUTHORITY, + }, + scopes: ["openid", "profile", "email", "offline_access"], + + cache: { + cacheLocation: "localStorage", + storeAuthStateInCookie: true, + }, + system: { + loggerOptions: { + loggerCallback: (level, message, containsPii) => { + if (containsPii) { + console.log(`MSAL Logging - Level: ${level}, Message: ${message}, Contains PII: ${containsPii}`); + } + switch (level) { + case LogLevel.Error: + console.error(message); + return; + case LogLevel.Info: + console.info(message); + return; + case LogLevel.Verbose: + console.debug(message); + return; + case LogLevel.Warning: + console.warn(message); + return; + default: + console.info(message); + return; + } + }, + piiLoggingEnabled: false, + logLevel: LogLevel.Error, + }, + }, +}; + +export const loginRequest = { + scopes: ["openid", "profile", "email", "offline_access"], +}; +export const graphConfig = { + graphMeEndpoint: "https://graph.microsoft.com/v1.0/me", +}; diff --git a/src/config-secured.json b/src/config-secured.json new file mode 100644 index 00000000..f60d9b16 --- /dev/null +++ b/src/config-secured.json @@ -0,0 +1,16 @@ +{ + "apiUrlSecured": "", + "assessmentParcelLayer": { + "url": "https://opengis.simcoe.ca/geoserver/wfs?service=wfs&version=2.0.0&request=GetFeature&typeNames=simcoe:Assessment%20Parcel&outputFormat=application/json", + "rollNumberFieldName": "ARN" + }, + "ownershipParcelLayer": { + "url": "https://opengis.simcoe.ca/geoserver/wfs?service=wfs&version=2.0.0&request=GetFeature&typeNames=simcoe:Ownership_Parcel&outputFormat=application/json", + "rollNumberFieldName": "pin" + }, + "securedArcGIS": { + "appId": "", + "portalUrl": "", + "maxActiveTime": 43200000 + } +} diff --git a/src/helpers/AttributeTable.jsx b/src/helpers/AttributeTable.jsx index 8737428b..10723d42 100644 --- a/src/helpers/AttributeTable.jsx +++ b/src/helpers/AttributeTable.jsx @@ -9,298 +9,298 @@ import Portal from "../helpers/Portal.jsx"; import ReactDOM from "react-dom"; class AttrbuteTable extends Component { - constructor(props) { - super(props); + constructor(props) { + super(props); - this.numRecordsToPull = 200; - this.state = { - visible: false, - items: [], - mapWidth: 100, - height: 0, - isLoading: false, - }; + this.numRecordsToPull = 200; + this.state = { + visible: false, + items: [], + mapWidth: 100, + height: 0, + isLoading: false, + }; - // LISTEN - window.emitter.addListener("openAttributeTable", (serverUrl, layerName) => this.onEmitter(serverUrl, layerName)); + // LISTEN + window.emitter.addListener("openAttributeTable", (serverUrl, layerName) => this.onEmitter(serverUrl, layerName)); - // LISTEN FOR MAP TO MOUNT - window.emitter.addListener("mapParametersComplete", () => this.onMapLoad()); + // LISTEN FOR MAP TO MOUNT + window.emitter.addListener("mapParametersComplete", () => this.onMapLoad()); - // LISTEN FOR MAP TO MOUNT - window.emitter.addListener("mapResize", () => this.onMapResize()); + // LISTEN FOR MAP TO MOUNT + window.emitter.addListener("mapResize", () => this.onMapResize()); - window.isAttributeTableResizing = false; - } + window.isAttributeTableResizing = false; + } - onMapResize = () => { - this.resizeFromMap(); - }; + onMapResize = () => { + this.resizeFromMap(); + }; - onMapLoad = () => { - this.resizeFromMap(); - window.emitter.emit("attributeTableResize", this.state.height); - }; + onMapLoad = () => { + this.resizeFromMap(); + window.emitter.emit("attributeTableResize", this.state.height); + }; - resizeFromMap = () => { - const mapWidth = document.getElementById("map").offsetWidth; - this.resizable.updateSize({ - width: mapWidth, - height: this.resizable.resizable.offsetHeight, - }); - this.setState({ - mapWidth: mapWidth, - height: this.resizable.resizable.offsetHeight, - }); - }; + resizeFromMap = () => { + const mapWidth = document.getElementById("map").offsetWidth; + this.resizable.updateSize({ + width: mapWidth, + height: this.resizable.resizable.offsetHeight, + }); + this.setState({ + mapWidth: mapWidth, + height: this.resizable.resizable.offsetHeight, + }); + }; - onEmitter = (serverUrl, layerName) => { - let name = ""; - if (layerName.indexOf(":") !== -1) { - name = layerName.split(":")[1]; - } else name = layerName; + onEmitter = (serverUrl, layerName) => { + let name = ""; + if (layerName.indexOf(":") !== -1) { + name = layerName.split(":")[1]; + } else name = layerName; - const item = { - name: helpers.replaceAllInString(name, "_", " "), - geoJson: [], - serverUrl: serverUrl, - layerName: layerName, - maxRecords: this.numRecordsToPull, - sortFields: "", - scrollTop: 0, - }; - this.getData(item, (item) => {}); - }; + const item = { + name: helpers.replaceAllInString(name, "_", " "), + geoJson: [], + serverUrl: serverUrl, + layerName: layerName, + maxRecords: this.numRecordsToPull, + sortFields: "", + scrollTop: 0, + }; + this.getData(item, (item) => {}); + }; - getData = (item, callback) => { - this.setState({ isLoading: true }, () => { - helpers.getWFSGeoJSON( - item.serverUrl, - item.layerName, - (result) => { - if (result.length === 0) return; + getData = (item, callback) => { + this.setState({ isLoading: true }, () => { + helpers.getWFSGeoJSON( + item.serverUrl, + item.layerName, + (result) => { + if (result.length === 0) return; - // ATTACH GEOJSON - item.geoJson = result; + // ATTACH GEOJSON + item.geoJson = result; - // GET TOTAL NUM RECORDS - helpers.getWFSLayerRecordCount(item.serverUrl, item.layerName, (count) => { - item.total = count; - let itemFound = this.getItemByname(item.name); - const isVisible = this.state.visible; - if (itemFound === undefined) { - this.setState( - (prevState) => ({ - visible: true, - items: [item, ...prevState.items], - isLoading: false, - }), - () => { - if (!isVisible) { - this.updateSize(); - } - } - ); - } else { - this.setState( - { - // UPDATE ITEMS - items: this.state.items.map((stateItem) => (stateItem.name === item.name ? Object.assign({}, stateItem, { geoJson: result }) : stateItem)), - isLoading: false, - }, - () => { - if (!isVisible) { - this.updateSize(); - } - } - ); - } - }); - }, - item.sortFields, - null, - null, - item.maxRecords - ); - }); - }; + // GET TOTAL NUM RECORDS + helpers.getWFSLayerRecordCount({ serverUrl: item.serverUrl, layerName: item.layerName }, (count) => { + item.total = count; + let itemFound = this.getItemByname(item.name); + const isVisible = this.state.visible; + if (itemFound === undefined) { + this.setState( + (prevState) => ({ + visible: true, + items: [item, ...prevState.items], + isLoading: false, + }), + () => { + if (!isVisible) { + this.updateSize(); + } + } + ); + } else { + this.setState( + { + // UPDATE ITEMS + items: this.state.items.map((stateItem) => (stateItem.name === item.name ? Object.assign({}, stateItem, { geoJson: result }) : stateItem)), + isLoading: false, + }, + () => { + if (!isVisible) { + this.updateSize(); + } + } + ); + } + }); + }, + item.sortFields, + null, + null, + item.maxRecords + ); + }); + }; - updateSize = () => { - const mapWidth = document.getElementById("map").offsetWidth; - this.resizable.updateSize({ width: mapWidth, height: 200 }); - this.setState({ mapWidth: mapWidth, height: 200 }); - window.emitter.emit("attributeTableResize", 200); - }; - getItemByname = (name) => { - let item = this.state.items.filter((item) => { - return item.name === name; - })[0]; - return item; - }; - onResize = (e, direction, ref, d) => { - // window.emitter.emit("attributeTableResize", ref.offsetHeight); - this.setState({ height: ref.offsetHeight }); - }; + updateSize = () => { + const mapWidth = document.getElementById("map").offsetWidth; + this.resizable.updateSize({ width: mapWidth, height: 200 }); + this.setState({ mapWidth: mapWidth, height: 200 }); + window.emitter.emit("attributeTableResize", 200); + }; + getItemByname = (name) => { + let item = this.state.items.filter((item) => { + return item.name === name; + })[0]; + return item; + }; + onResize = (e, direction, ref, d) => { + // window.emitter.emit("attributeTableResize", ref.offsetHeight); + this.setState({ height: ref.offsetHeight }); + }; - onResizeStart = (e, direction, ref, d) => { - window.isAttributeTableResizing = true; - }; + onResizeStart = (e, direction, ref, d) => { + window.isAttributeTableResizing = true; + }; - onResizeStop = (e, direction, ref, d) => { - window.isAttributeTableResizing = false; - window.emitter.emit("attributeTableResize", ref.offsetHeight); - }; + onResizeStop = (e, direction, ref, d) => { + window.isAttributeTableResizing = false; + window.emitter.emit("attributeTableResize", ref.offsetHeight); + }; - onTabClose = (name) => { - this.setState( - { - items: this.state.items.filter(function (item) { - return name !== item.name; - }), - }, - () => { - if (this.state.items.length === 0) { - this.setState({ visible: false }); - window.emitter.emit("attributeTableResize", 0); - } - } - ); - }; + onTabClose = (name) => { + this.setState( + { + items: this.state.items.filter(function (item) { + return name !== item.name; + }), + }, + () => { + if (this.state.items.length === 0) { + this.setState({ visible: false }); + window.emitter.emit("attributeTableResize", 0); + } + } + ); + }; - onClose = () => { - this.setState({ visible: false, items: [] }); - window.emitter.emit("attributeTableResize", 0); - }; + onClose = () => { + this.setState({ visible: false, items: [] }); + window.emitter.emit("attributeTableResize", 0); + }; - onHeaderClick = (evt, layerName, column) => { - const headerName = column.Header; - var evtClone = Object.assign({}, evt); - const menu = ( - - { - this.onHeaderMenuItemClick(key, layerName, headerName); - }} - autoY={true} - autoX={true} - > - - - - - - - - - ); - ReactDOM.render(menu, document.getElementById("portal-root")); - }; + onHeaderClick = (evt, layerName, column) => { + const headerName = column.Header; + var evtClone = Object.assign({}, evt); + const menu = ( + + { + this.onHeaderMenuItemClick(key, layerName, headerName); + }} + autoY={true} + autoX={true} + > + + + + + + + + + ); + ReactDOM.render(menu, document.getElementById("portal-root")); + }; - onRowClick = (evt, item, rowIndex) => { - var evtClone = Object.assign({}, evt); - const menu = ( - - { - this.onRowMenuItemClick(key, item, rowIndex); - }} - autoY={true} - autoX={true} - > - - - - - - ); - ReactDOM.render(menu, document.getElementById("portal-root")); - }; + onRowClick = (evt, item, rowIndex) => { + var evtClone = Object.assign({}, evt); + const menu = ( + + { + this.onRowMenuItemClick(key, item, rowIndex); + }} + autoY={true} + autoX={true} + > + + + + + + ); + ReactDOM.render(menu, document.getElementById("portal-root")); + }; - onRowMenuItemClick = (key, item, rowIndex) => { - if (key === "sc-floating-menu-zoom") { - helpers.zoomToFeature(item.geoJson[rowIndex]); - } - }; + onRowMenuItemClick = (key, item, rowIndex) => { + if (key === "sc-floating-menu-zoom") { + helpers.zoomToFeature(item.geoJson[rowIndex]); + } + }; - onHeaderMenuItemClick = (key, layerName, headerName) => { - if (key === "sc-floating-menu-asc") { - let newItem = this.state.items.filter((item) => { - return item.name === layerName; - })[0]; - newItem.sortFields = headerName + "+A"; - this.getData(newItem); - } else if (key === "sc-floating-menu-desc") { - let newItem = this.state.items.filter((item) => { - return item.name === layerName; - })[0]; - newItem.sortFields = headerName + "+D"; - this.getData(newItem); - } - }; + onHeaderMenuItemClick = (key, layerName, headerName) => { + if (key === "sc-floating-menu-asc") { + let newItem = this.state.items.filter((item) => { + return item.name === layerName; + })[0]; + newItem.sortFields = headerName + "+A"; + this.getData(newItem); + } else if (key === "sc-floating-menu-desc") { + let newItem = this.state.items.filter((item) => { + return item.name === layerName; + })[0]; + newItem.sortFields = headerName + "+D"; + this.getData(newItem); + } + }; - onLoadMoreClick = (item) => { - if (item.maxRecords === item.total) return; + onLoadMoreClick = (item) => { + if (item.maxRecords === item.total) return; - const nextNumRecords = item.maxRecords + this.numRecordsToPull; - if (nextNumRecords > item.total) item.maxRecords = item.total; - else item.maxRecords = nextNumRecords; - this.getData(item); - }; - onLoadAllClick = (item) => { - if (item.maxRecords === item.total) return; + const nextNumRecords = item.maxRecords + this.numRecordsToPull; + if (nextNumRecords > item.total) item.maxRecords = item.total; + else item.maxRecords = nextNumRecords; + this.getData(item); + }; + onLoadAllClick = (item) => { + if (item.maxRecords === item.total) return; - item.maxRecords = item.total; - this.getData(item); - }; - render() { - return ( -
- { - this.resizable = c; - }} - defaultSize={{ - // width: 320, - height: 0, - }} - > - -
- close table -
-
-
- ); - } + item.maxRecords = item.total; + this.getData(item); + }; + render() { + return ( +
+ { + this.resizable = c; + }} + defaultSize={{ + // width: 320, + height: 0, + }} + > + +
+ close table +
+
+
+ ); + } } export default AttrbuteTable; @@ -308,7 +308,7 @@ export default AttrbuteTable; // IMPORT ALL IMAGES const images = importAllImages(require.context("./images", false, /\.(png|jpe?g|svg)$/)); function importAllImages(r) { - let images = {}; - r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); - return images; + let images = {}; + r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); + return images; } diff --git a/src/helpers/Identify.js b/src/helpers/Identify.js new file mode 100644 index 00000000..ff18d8da --- /dev/null +++ b/src/helpers/Identify.js @@ -0,0 +1,173 @@ +import { LayerHelpers, OL_LAYER_TYPES, OL_DATA_TYPES } from "./OLHelpers"; +import * as helpers from "./helpers"; +import { get } from "./api"; + +import { GeoJSON, EsriJSON } from "ol/format.js"; +import Feature from "ol/Feature"; + +export class Identify { + static QueryLayers(geometry, layerFilter = undefined, callback = undefined) { + let layers = window.map.getLayers().getArray(); + layers = layers.filter((item) => item.get("queryable") === true); + if (layerFilter) layers = layers.filter((item) => item.get("displayName") === layerFilter); + else layers = layers.filter((item) => item.getVisible()); + + let layerList = []; + let allPromises = []; + + layers.forEach((layer) => { + const name = layer.get("name"); + let displayName = ""; + let type = layer.get("tocDisplayName"); + let wfsUrl = layer.get("wfsUrl"); + let attachmentUrl = layer.get("attachmentUrl"); + const secured = layer.get("secured"); + const minScale = layer.get("minScale"); + const hasAttachments = layer.get("hasAttachments"); + if (LayerHelpers.getLayerType(layer) !== OL_LAYER_TYPES.Vector) { + const params = {}; + params["headers"] = {}; + if (secured) { + params["useBearerToken"] = true; + params["mode"] = "cors"; + } + const isArcGISLayer = LayerHelpers.getLayerSourceType(layer.getSource()) === OL_DATA_TYPES.ImageArcGISRest; + if (isArcGISLayer) { + wfsUrl = this.ComposeWFSQuery(wfsUrl, geometry, "arcgis"); + } else { + wfsUrl = this.ComposeWFSQuery(wfsUrl, geometry, "geoserver"); + } + if (wfsUrl.length > 8000) { + helpers.showMessage("Geometry too complex", "The geometry you are trying to use is too complex to identify.", helpers.messageColors.red); + } else { + const promise = new Promise((resolve, reject) => { + get(wfsUrl, params, (result) => { + const featureList = isArcGISLayer ? LayerHelpers.parseESRIIdentify(result) : new GeoJSON().readFeatures(result); + if (featureList.length > 0) { + if (displayName === "" || displayName === undefined) displayName = this.FindDisplayNameFromFeature(featureList[0]); + let features = []; + featureList.forEach((feature) => { + const keys = feature.getKeys(); + const objectId = feature.get(keys.filter((item) => item.indexOf("OBJECTID") !== -1)[0]); + if (hasAttachments) feature.values_["attachmentUrl"] = attachmentUrl.replace("#OBJECTID#", objectId); + features.push(feature); + }); + if (features.length > 0) + layerList.push({ + name: name, + features: features, + displayName: displayName, + type: type, + minScale: minScale, + }); + } + resolve(); + }); + }); + allPromises.push(promise); + } + } else { + let featureList = []; + let pixel = window.map.getPixelFromCoordinate(geometry.flatCoordinates); + window.map.forEachFeatureAtPixel(pixel, (feature, layer) => { + if (layer.get("name") !== undefined && layer.get("name") === name) featureList.push(feature); + }); + + if (featureList.length > 0) { + if (displayName === "" || displayName === undefined) displayName = this.FindDisplayNameFromFeature(featureList[0]); + let features = []; + featureList.forEach((feature) => { + features.push(feature); + }); + if (features.length > 0) + layerList.push({ + name: name, + features: features, + displayName: displayName, + type: type, + minScale: minScale, + }); + } + } + }); + + if (allPromises.length > 0) + Promise.all(allPromises).then(() => { + if (callback) callback(layerList); + else return layerList; + }); + else { + if (callback) callback(layerList); + else return layerList; + } + } + static ComposeWFSQuery(wfsUrl, geometry, type) { + switch (type) { + case "arcgis": + var esri = new EsriJSON(); + const esriFeature = esri.writeGeometry(geometry); + const arcgisResolution = `${window.map.getSize()[0]},${window.map.getSize()[1]},96`; + const extent = window.map.getView().calculateExtent(); + wfsUrl = wfsUrl + .replace("#GEOMETRY#", encodeURIComponent(esriFeature)) + .replace("#GEOMETRYTYPE#", geometry.getType() !== "Point" ? "esriGeometryPolygon" : "esriGeometryPoint") + .replace("#TOLERANCE#", 3) + .replace("#EXTENT#", extent.join(",")) + .replace("#RESOLUTION#", arcgisResolution); + break; + case "geoserver": + const targetFeature = new Feature(geometry); + const wktString = helpers.getWKTStringFromFeature(targetFeature); + if (geometry.getType() === "MultiPolygon") { + let intersectQuery = []; + geometry.getPolygons().forEach((poly) => { + const tmpFeature = new Feature(poly); + const tmpWKTString = helpers.getWKTStringFromFeature(tmpFeature); + intersectQuery.push("INTERSECTS(geom," + tmpWKTString + ")"); + }); + wfsUrl += intersectQuery.join(" OR "); + } else { + wfsUrl += "INTERSECTS(geom," + wktString + ")"; + } + break; + default: + break; + } + return wfsUrl; + } + + static FindDisplayNameFromFeature(feature) { + // LOOK FOR EXISTING FIELDS + const nameFields = ["name", "display_name", "Name", "Display Name"]; + let displayName = ""; + const displayFieldName = feature.get("displayFieldName"); + if (displayFieldName !== undefined && displayFieldName !== null) nameFields.push(displayFieldName); + nameFields.forEach((fieldName) => { + if (fieldName.substring(0, 1) !== "_") { + const name = feature.get(fieldName); + if (name !== undefined) { + displayName = fieldName; + return displayName; + } + } + }); + + // FIND FIRST STRING FIELD + if (displayName === "") { + for (const [fieldName, value] of Object.entries(feature.values_)) { + if (fieldName.substring(0, 1) !== "_") { + if (typeof value === "string" || value instanceof String) { + displayName = fieldName; + return displayName; + } + } + } + } + + //console.log(displayName); + // STILL NOTHING, SO TAKE FIRST FIELD + if (displayName === "") displayName = Object.keys(feature.values_)[0]; + + return displayName; + } +} diff --git a/src/helpers/InfoTable.css b/src/helpers/InfoTable.css new file mode 100644 index 00000000..99dcc938 --- /dev/null +++ b/src/helpers/InfoTable.css @@ -0,0 +1,28 @@ +.sc-info-table { + font-family: Arial, Helvetica, sans-serif; + border-collapse: collapse; + width: 100%; + margin-top: 5px; +} + +.sc-info-table td, +.sc-info-table th { + border: 1px solid #ddd; + padding: 8px; +} + +.sc-info-table tr:nth-child(even) { + background-color: #f2f2f2; +} + +.sc-info-table tr:hover { + background-color: #ddd; +} + +.sc-info-table th { + padding-top: 12px; + padding-bottom: 12px; + text-align: left; + background-color: #3980cc; + color: white; +} diff --git a/src/helpers/InfoTable.jsx b/src/helpers/InfoTable.jsx new file mode 100644 index 00000000..21518313 --- /dev/null +++ b/src/helpers/InfoTable.jsx @@ -0,0 +1,45 @@ +import React from "react"; +import * as helpers from "./helpers"; +import "./InfoTable.css"; + +export const InfoTable = (props) => { + const { info } = props; + if (!info) return
No results found.
; + return ( + + + + + + {info.map((item) => ( + + ))} + +
+ ); +}; +export default InfoTable; + +const InfoTableHeaderRow = (props) => { + return ( + + {Object.keys(props.info).map((key) => ( + + {key} + + ))} + + ); +}; + +const InfoTableRow = (props) => { + return ( + + {Object.values(props.info).map((val) => ( + + {val} + + ))} + + ); +}; diff --git a/src/helpers/OLHelpers.js b/src/helpers/OLHelpers.js index e310fb89..e91fbc83 100644 --- a/src/helpers/OLHelpers.js +++ b/src/helpers/OLHelpers.js @@ -1,4 +1,6 @@ import * as helpers from "./helpers"; +import * as esriHelpers from "./esriHelpers"; +import { get, createObjectURL } from "../helpers/api"; // OPEN LAYERS import { Image as ImageLayer, Tile as TileLayer, Vector as VectorLayer, Group as LayerGroup, VectorTile as VectorTileLayer } from "ol/layer.js"; import { ImageWMS, OSM, TileArcGISRest, ImageArcGISRest, TileWMS, TileImage, Vector, Stamen, XYZ, ImageStatic } from "ol/source.js"; @@ -160,11 +162,10 @@ export class LayerHelpers { let attachmentUrl = layer.get("attachmentUrl"); const hasAttachments = layer.get("hasAttachments"); const params = {}; - const secureKey = layer.get("secureKey"); - if (secureKey !== undefined) { - const headers = {}; - headers[secureKey] = "GIS"; - params["headers"] = headers; + const secured = layer.get("secured"); + + if (secured) { + params["useBearerToken"] = true; } if (isArcGISLayer) { const arcgisResolution = `${window.map.getSize()[0]},${window.map.getSize()[1]},96`; @@ -179,7 +180,7 @@ export class LayerHelpers { .replace("#RESOLUTION#", arcgisResolution); } if (url) { - await helpers.getJSONWaitWithParams(url, params, (result) => { + get(url, params, (result) => { let features = isArcGISLayer ? LayerHelpers.parseESRIIdentify(result) : new GeoJSON().readFeatures(result); if (hasAttachments) { features = features.map((feature) => { @@ -210,11 +211,9 @@ export class LayerHelpers { const hasAttachments = layer.get("hasAttachments"); const params = {}; - const secureKey = layer.get("secureKey"); - if (secureKey !== undefined) { - const headers = {}; - headers[secureKey] = "GIS"; - params["headers"] = headers; + const secured = layer.get("secured"); + if (secured) { + params["useBearerToken"] = true; } if (isArcGISLayer) { const arcgisResolution = `${window.map.getSize()[0]},${window.map.getSize()[1]},96`; @@ -229,7 +228,7 @@ export class LayerHelpers { .replace("#RESOLUTION#", arcgisResolution); } if (url) { - helpers.getJSONWithParams(url, params, (result) => { + get(url, params, (result) => { let features = isArcGISLayer ? LayerHelpers.parseESRIIdentify(result) : new GeoJSON().readFeatures(result); if (hasAttachments) { features = features.map((feature) => { @@ -274,7 +273,6 @@ export class LayerHelpers { url = root_url; } let layers = []; - var parser; var response; var service; if (url.indexOf("Capabilities") === -1) { @@ -311,8 +309,8 @@ export class LayerHelpers { try { switch (type) { case "wmts": - parser = new WMTSCapabilities(); - response = parser.read(responseText); + const wmtsParser = new WMTSCapabilities(); + response = wmtsParser.read(responseText); response.Contents.Layer.forEach((layer) => { layers.push({ label: layer.Title, @@ -326,8 +324,8 @@ export class LayerHelpers { callback(layers); break; case "wms": - parser = new WMSCapabilities(); - response = parser.read(responseText); + const wmsParser = new WMSCapabilities(); + response = wmsParser.read(responseText); let layerGroup = response.Capability.Layer.Layer; if (layerGroup[0].Layer !== undefined) layerGroup = layerGroup[0].Layer; layerGroup.forEach((layer) => { @@ -385,8 +383,8 @@ export class LayerHelpers { attributeNamePrefix: "", // Default is an underscore. Set to null to disable it attributesGroupName: "$", // XML node attributes group name prefix }; - const parser = new XMLParser(options); - let result = parser.parse(responseText); + const xmlParser = new XMLParser(options); + let result = xmlParser.parse(responseText); result["wfs:WFS_Capabilities"].FeatureTypeList[0].FeatureType.forEach((layer) => { var layerTitle = layer.Title[0]; var layerName = layer.Name[0]; @@ -409,11 +407,22 @@ export class LayerHelpers { }; if (options.token) { url = `${url}&token=${options.token}`; - helpers.httpGetTextWithParams(url, params, (responseText) => { + get(url, { ...params, type: "text" }, (responseText) => { parseResponseText(responseText, options.token); }); + } else if (options.secured) { + esriHelpers.getAccessToken((token) => { + url = `${url}&token=${token}`; + get(url, { ...params, type: "text" }, (responseText) => { + parseResponseText(responseText, token); + }); + }); + } else if (options.securedOAuth) { + get(url, { ...params, useBearerToken: true, type: "text" }, (responseText) => { + parseResponseText(responseText); + }); } else { - helpers.httpGetTextWithParams(url, params, (responseText) => { + get(url, { ...params, type: "text" }, (responseText) => { parseResponseText(responseText); }); } @@ -506,7 +515,8 @@ export class LayerHelpers { } static getESRILegend(url, callback) { - helpers.httpGetText(url, (responseText) => { + get(url, { type: "text" }, (responseText) => { + // helpers.httpGetText(url, (responseText) => { var response = JSON.parse(responseText); if (response.layers === undefined) callback(); else callback(response.layers); @@ -649,7 +659,7 @@ export class LayerHelpers { let file = options.file; let extent = options.extent !== undefined ? options.extent : []; let name = options.name !== undefined ? options.name : ""; - let secureKey = options.secureKey; + let secured = options.secured; let background = options.background !== undefined ? options.background : null; let rootPath = options.rootPath !== undefined ? options.rootPath : null; let spritePath = options.spritePath !== undefined ? options.spritePath : null; @@ -773,7 +783,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ maxZoom: 19 })) : LoadingStrategyAll, format: new GML3({ srsName: projection }), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -788,7 +798,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ maxZoom: 19 })) : LoadingStrategyAll, format: new GML2({ srsName: projection }), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -803,7 +813,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ maxZoom: 19 })) : LoadingStrategyAll, format: new GPX(), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -818,7 +828,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ maxZoom: 19 })) : LoadingStrategyAll, format: new KML(), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -833,7 +843,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ maxZoom: 19 })) : LoadingStrategyAll, format: new OSMXML(), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -848,7 +858,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ tileSize: 512, maxZoom: 19 })) : LoadingStrategyAll, format: new EsriJSON(), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), style: style, }) @@ -864,7 +874,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ maxZoom: 19 })) : LoadingStrategyAll, format: new GeoJSON(), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -879,7 +889,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ maxZoom: 19 })) : LoadingStrategyAll, format: new TopoJSON(), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -894,7 +904,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ maxZoom: 19 })) : LoadingStrategyAll, format: new IGC(), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -909,7 +919,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ maxZoom: 19 })) : LoadingStrategyAll, format: new Polyline(), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -924,7 +934,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ maxZoom: 19 })) : LoadingStrategyAll, format: new WKT(), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -939,7 +949,7 @@ export class LayerHelpers { strategy: tiled ? LoadingStrategyTile(TileGrid.createXYZ({ maxZoom: 19 })) : LoadingStrategyAll, format: new MVT(), loader: Vector_FileLoader, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -958,7 +968,7 @@ export class LayerHelpers { url: url + "/tile/{z}/{y}/{x}.pbf", minZoom: minZoom || undefined, maxZoom: maxZoom || undefined, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }); rootPath = rootPath || url + "/resources/styles/root.json"; @@ -976,18 +986,10 @@ export class LayerHelpers { break; case OL_DATA_TYPES.ImageWMS: const securedImageWMS = function (image, src) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", src); - xhr.responseType = "arraybuffer"; - if (secureKey !== undefined) xhr.setRequestHeader(secureKey, "GIS"); - xhr.onload = function () { - var arrayBufferView = new Uint8Array(this.response); - var blob = new Blob([arrayBufferView], { type: "image/png" }); - var urlCreator = window.URL || window.webkitURL; - var imageUrl = urlCreator.createObjectURL(blob); + get(src, { useBearerToken: secured, type: "blob" }, (result) => { + var imageUrl = createObjectURL(result); image.getImage().src = imageUrl; - }; - xhr.send(); + }); }; callback( new ImageLayer({ @@ -1003,7 +1005,7 @@ export class LayerHelpers { ratio: 1, hidpi: false, serverType: "geoserver", - // crossOrigin: "anonymous", + crossOrigin: "anonymous", imageLoadFunction: securedImageWMS, }), }) @@ -1023,11 +1025,11 @@ export class LayerHelpers { tiled: true, cql_filter: null, }, - // tileOptions: { crossOriginKeyword: "anonymous" }, + tileOptions: { crossOriginKeyword: "anonymous" }, ratio: 1, hidpi: false, serverType: "geoserver", - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -1049,7 +1051,7 @@ export class LayerHelpers { params: params || { LAYERS: `SHOW:${url_layer}` }, ratio: 1, projection: projection, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }; if (token) { sourceParams.params["TOKEN"] = token; @@ -1069,10 +1071,12 @@ export class LayerHelpers { return transform([extent[0], extent[1]], sourceCoord, targetCoord).concat(transform([extent[2], extent[3]], sourceCoord, targetCoord)); }; const wmtsCap = (url, callback) => { - helpers.httpGetText(url.indexOf("Capabilities") === -1 ? (/\?/.test(url) ? url + "&" : url + "?") + "REQUEST=GetCapabilities&SERVICE=WMTS" : url, (responseText) => { + get(url.indexOf("Capabilities") === -1 ? (/\?/.test(url) ? url + "&" : url + "?") + "REQUEST=GetCapabilities&SERVICE=WMTS" : url, { type: "text" }, (responseText) => { + // helpers.httpGetText(url.indexOf("Capabilities") === -1 ? (/\?/.test(url) ? url + "&" : url + "?") + "REQUEST=GetCapabilities&SERVICE=WMTS" : url, (responseText) => { try { var parser = new WMTSCapabilities(); - callback(parser.read(responseText)); + const parsedText = parser.read(responseText); + callback(parsedText); } catch (error) { console.warn("Unexpected error: " + error.message); } @@ -1129,7 +1133,7 @@ export class LayerHelpers { source: new XYZ({ url: url, //projection: projection , - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }) ); @@ -1148,7 +1152,7 @@ export class LayerHelpers { let source = new TileImage({ url: url, tileGrid: tileGrid, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }); // source.on("tileloaderror", function(event) { // event.tile.getImage().src = ""; diff --git a/src/helpers/api.js b/src/helpers/api.js index 5874e57e..f997d86f 100644 --- a/src/helpers/api.js +++ b/src/helpers/api.js @@ -1,10 +1,16 @@ -function getBearerToken(callback) { +import { msalConfig } from "../authConfig"; + +function getBearerToken(options = undefined, callback) { + let { scope } = options; + window.instance .acquireTokenSilent({ account: window.account, + authority: msalConfig.auth.authority, + scopes: scope || [msalConfig.defaultScope], }) .then((response) => { - callback(`bearer ${response.idToken}`); + callback(`Bearer ${response.accessToken}`); }) .catch((error) => { window.instance @@ -24,18 +30,24 @@ function privateFetch(url, method, headers, mode, type, body, callback) { mode: mode, headers: headers, body: body, + //cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached + //referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url + credentials: "omit", // include, same-origin, *omit + //redirect: "follow", // manual, *follow, error }) .then((response) => { - switch (type) { - case "json": - return response.json(); - case "text": - return response.text(); - case "blob": - return response.blob(); - default: - return response.json(); - } + if (response.status === 200) + switch (type) { + case "json": + return response.json(); + case "text": + return response.text(); + case "blob": + return response.blob(); + default: + return response.json(); + } + else return `ERROR - ${response.status}`; }) .then((responseValue) => { // CALLBACK WITH RESULT @@ -44,12 +56,11 @@ function privateFetch(url, method, headers, mode, type, body, callback) { .catch((error) => { console.log("Error - " + url); console.log(error); - callback({ result: { error: 1 } }); + callback(`ERROR - ${error}`); }); } - export function get(url, params = {}, callback) { - let { mode, headers, useBearerToken, type, body, redirect, referrer, xhrFields } = params; + let { mode, headers, scope, useBearerToken, type, body, redirect, referrer, xhrFields } = params; const method = "GET"; if (!mode) mode = "cors"; if (!useBearerToken) useBearerToken = false; @@ -60,11 +71,11 @@ export function get(url, params = {}, callback) { if (!xhrFields) xhrFields = {}; if (params.useBearerToken) { - getBearerToken((token) => { + getBearerToken({ scope: scope }, (token) => { headers = { Authorization: token, + ...headers, }; - //console.log(url, method, headers, mode, type, body); privateFetch(url, method, headers, mode, type, body, (result) => { callback(result); }); @@ -77,7 +88,7 @@ export function get(url, params = {}, callback) { } export function post(url, params = {}, callback) { - let { mode, headers, useBearerToken, type, body } = params; + let { mode, headers, useBearerToken, type, body, scope } = params; const method = "POST"; if (!mode) mode = "cors"; if (!useBearerToken) useBearerToken = false; @@ -85,9 +96,10 @@ export function post(url, params = {}, callback) { if (!headers) headers = { "Content-Type": "application/json" }; if (params.useBearerToken) { - getBearerToken((token) => { + getBearerToken({ scope: scope }, (token) => { headers = { Authorization: token, + ...headers, }; return privateFetch(url, method, headers, mode, type, body, (result) => { callback(result); @@ -101,17 +113,19 @@ export function post(url, params = {}, callback) { } export function del(url, params = {}, callback) { - let { mode, headers, useBearerToken, type, body } = params; + let { mode, headers, useBearerToken, type, body, scope } = params; const method = "DELETE"; if (!mode) mode = "cors"; if (!useBearerToken) useBearerToken = false; + if (!type) type = "json"; if (!headers) headers = {}; if (params.useBearerToken) { - getBearerToken((token) => { + getBearerToken({ scope: scope }, (token) => { headers = { Authorization: token, + ...headers, }; return privateFetch(url, method, headers, mode, type, body, (result) => { callback(result); @@ -125,11 +139,12 @@ export function del(url, params = {}, callback) { } export function downloadFile(url, params = {}, callback = undefined) { + const { scope } = params; params["type"] = "blob"; params["xhrFields"] = { responseType: "blob" }; params["redirect"] = "follow"; // manual, *follow, error params["referrer"] = "no-referrer"; // no-referrer, *client - getBearerToken((token) => { + getBearerToken({ scope: scope }, (token) => { fetch(url, { method: "GET", // *GET, POST, PUT, DELETE, etc. mode: "cors", // no-cors, cors, *same-origin @@ -149,12 +164,20 @@ export function downloadFile(url, params = {}, callback = undefined) { }); }); } - +export function createObjectURL(blob) { + if (window.webkitURL) { + return window.webkitURL.createObjectURL(blob); + } else if (window.URL && window.URL.createObjectURL) { + return window.URL.createObjectURL(blob); + } else { + return null; + } +} function download(url, filename = undefined, options = undefined) { if (!options) options = {}; try { if (options.isBlob) { - url = window.URL.createObjectURL(url); + url = this.createObjectURL(url); } var link = document.createElement("a"); link.setAttribute("href", url); diff --git a/src/helpers/date.js b/src/helpers/date.js new file mode 100644 index 00000000..65cb925c --- /dev/null +++ b/src/helpers/date.js @@ -0,0 +1,51 @@ +export function getFriendlyDateString(dt) { + // var time = new Date(); + // var timeString = time.toLocaleString("en-US", { hour: "numeric", hour12: true }); + + //var dtstring = dt.getFullYear() + "-" + this.pad2(dt.getMonth() + 1) + "-" + this.pad2(dt.getDate()) + " " + this.pad2(dt.getHours()) + ":" + this.pad2(dt.getMinutes()) + ":" + this.pad2(dt.getSeconds()); + var dtstring = dt.getFullYear() + "-" + pad2(dt.getMonth() + 1) + "-" + pad2(dt.getDate()) + " " + formatAMPM(dt); + return dtstring; +} + +export function getSqlDateString(dt) { + var dtstring = dt.getFullYear() + "-" + pad2(dt.getMonth() + 1) + "-" + pad2(dt.getDate()) + " " + pad2(dt.getHours()) + ":" + pad2(dt.getMinutes()) + ":" + pad2(dt.getSeconds()); + return dtstring; +} + +export function getEsriInsertDate() { + const date = new Date(); + // adjust 0 before single digit date + let day = ("0" + date.getDate()).slice(-2); + // current month + let month = ("0" + (date.getMonth() + 1)).slice(-2); + // current year + let year = date.getFullYear(); + // current hours + let hours = ("0" + (date.getHours() + 1)).slice(-2); + // current minutes + let minutes = ("0" + (date.getMinutes() + 1)).slice(-2); + // current seconds + let seconds = ("0" + (date.getSeconds() + 1)).slice(-2); + + const dateString = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + return dateString; +} +function pad2(number) { + var str = "" + number; + while (str.length < 2) { + str = "0" + str; + } + + return str; +} + +function formatAMPM(date) { + var hours = date.getHours(); + var minutes = date.getMinutes(); + var ampm = hours >= 12 ? "pm" : "am"; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? "0" + minutes : minutes; + var strTime = hours + ":" + minutes + " " + ampm; + return strTime.toUpperCase(); +} diff --git a/src/helpers/esriHelpers.js b/src/helpers/esriHelpers.js new file mode 100644 index 00000000..5779c808 --- /dev/null +++ b/src/helpers/esriHelpers.js @@ -0,0 +1,153 @@ +// "esri/portal/Portal", +// "esri/identity/OAuthInfo", +// "esri/identity/IdentityManager", +// "esri/portal/PortalQueryParams"; +// import PortalQueryParams from "@arcgis/core/portal/PortalQueryParams"; +import OAuthInfo from "@arcgis/core/identity/OAuthInfo"; +import IdentityManager from "@arcgis/core/identity/IdentityManager"; +import { post } from "./api"; +import * as helpers from "./helpers"; + +let credential = undefined; + +let oauthInfo = undefined; +const initialize = (appId, portalUrl) => { + if (!oauthInfo) { + oauthInfo = new OAuthInfo({ + appId, + portalUrl, + flowType: "implicit", + preserveUrlHash: false, + popup: false, + expiration: 20160, //Set to max allowed (14 days) but this will be limited by the server max value + }); + IdentityManager.registerOAuthInfos([oauthInfo]); + } +}; +const checkCurrentStatus = async () => IdentityManager.checkSignInStatus(`${oauthInfo.portalUrl}/sharing`); +const signIn = async () => { + if (!credential) { + try { + credential = await checkCurrentStatus(); + } catch (error) { + credential = await fetchCredentials(); + } + } + return credential; +}; +const signOut = async () => { + // make sure the identitymanager has + // the credential so it can destroy it + await signIn(); + IdentityManager.destroyCredentials(); +}; +const fetchCredentials = async () => { + credential = await IdentityManager.getCredential(`${oauthInfo.portalUrl}/sharing`, { + error: null, + oAuthPopupConfirmation: false, + token: null, + }); + return credential; +}; +export const login = (callback) => { + let configSecured = {}; + helpers.waitForLoad("settings", Date.now(), 30, () => { + configSecured = window.config.configSecured; + + initialize(configSecured.securedArcGIS.appId, configSecured.securedArcGIS.portalUrl); + let creds = signIn().then( + (result) => { + return result; + }, + (error) => { + console.error(error); + } + ); + + if (!callback) return creds; + else callback(creds); + }); +}; + +export function processToken(esriLogin) { + let configSecured = {}; + helpers.waitForLoad("settings", Date.now(), 30, () => { + configSecured = window.config.configSecured; + }); + //Process session object if redirect option was used instead of popup + if (esriLogin["/"]) { + const esriServer = Object.keys(esriLogin["/"])[0]; + esriLogin["expires_in"] = esriLogin["/"][esriServer].expires - Date.now(); + esriLogin["username"] = esriLogin["/"][esriServer].userId; + esriLogin["ssl"] = esriLogin["/"][esriServer].ssl; + esriLogin["access_token"] = esriLogin["/"][esriServer].token; + esriLogin["state"] = { portalUrl: esriServer }; + delete esriLogin["/"]; + } + const currentTime = Date.now(); + if (!esriLogin["IssueDate"]) esriLogin["IssueDate"] = currentTime; + if (!esriLogin["RenewalDate"]) esriLogin["RenewalDate"] = currentTime + parseInt(esriLogin.expires_in) - configSecured.securedArcGIS.maxActiveTime; //maxActiveTime = 43200000 = 12 hours in ms + if (esriLogin["access_token"]) sessionStorage.removeItem("esriJSAPIOAuth"); + helpers.saveToStorage("ArcGIS_Token", esriLogin); + helpers.addIsLoaded("esriLogin"); +} + +export async function getAccessToken(callback) { + let configSecured = {}; + helpers.waitForLoad("settings", Date.now(), 30, () => { + configSecured = window.config.configSecured; + }); + const forceAppRefresh = (tokenInfo) => { + const refreshDelay = 5000; + const reloadTimeout = tokenInfo.RenewalDate - Date.now(); + + setTimeout(() => { + //force refresh of page if left active for longer than the maxActiveTime + helpers.showMessage("ArcGIS Token expired!", "ArcGIS Token expired, refreshing page...", helpers.messageColors.red, refreshDelay, true); + console.warn("ArcGIS Token expired. Page will automatically refresh."); + setTimeout(() => { + window.location.reload(); + }, refreshDelay); + }, reloadTimeout - refreshDelay); + }; + let esriLogin = sessionStorage.getItem("esriJSAPIOAuth"); + if (esriLogin) processToken(JSON.parse(esriLogin)); + esriLogin = helpers.getItemsFromStorage("ArcGIS_Token"); + + if (esriLogin && esriLogin.access_token && Date.now() < esriLogin.RenewalDate) { + forceAppRefresh(esriLogin); + if (callback) callback(esriLogin.access_token); + else return esriLogin.access_token; + } else { + login((esriLogin) => { + processToken({ + expires_in: esriLogin["expires"] - Date.now(), + IssueDate: esriLogin["creationTime"], + ExpiryDate: esriLogin["expires"], + RenewalDate: parseInt(esriLogin["expires"]) - configSecured.securedArcGIS.maxActiveTime, //maxActiveTime = 43200000 = 12 hours in ms + username: esriLogin["userId"], + ssl: esriLogin["ssl"], + access_token: esriLogin["token"], + state: { portalUrl: esriLogin["server"] }, + }); + + //autoLogin(); + helpers.waitForLoad(["esriLogin"], Date.now(), 60, () => { + const esriLogin = helpers.getItemsFromStorage("ArcGIS_Token"); + forceAppRefresh(esriLogin); + if (esriLogin && Date.now() < esriLogin.RenewalDate) callback(esriLogin.access_token); + }); + }); + } +} + +export function getAppAccessToken(requestUrl, callback) { + let configSecured = {}; + helpers.waitForLoad("settings", Date.now(), 30, () => { + configSecured = window.config.configSecured; + }); + const url = `${configSecured.apiUrlSecured}secure/arcgis/token`; + post(url, { useBearerToken: true, body: JSON.stringify({ requestedUrl: requestUrl }) }, (result) => { + callback(result); + }); +} diff --git a/src/helpers/helpers.js b/src/helpers/helpers.js index 53bd6ce5..6bda436d 100644 --- a/src/helpers/helpers.js +++ b/src/helpers/helpers.js @@ -42,6 +42,8 @@ import ShowWindow from "./ShowWindow.jsx"; import mainConfig from "../config.json"; import { InfoRow } from "./InfoRow.jsx"; import blankImage from "./images/blank.png"; +import { getUserStorage, setUserStorage } from "./storage.js"; +import { get } from "./api"; // REGISTER CUSTOM PROJECTIONS proj4.defs([["EPSG:26917", "+proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs "]]); @@ -129,7 +131,6 @@ export function showWindow(contents, options = { title: "Information", showFoote // SHOW URL WINDOW export function showURLWindow(url, showFooter = false, mode = "normal", honorDontShow = false, hideScroll = false) { - console.log(url); let isSameOrigin = true; waitForLoad("settings", Date.now(), 30, () => { if (window.config.restrictOriginForUrlWindow) { @@ -152,34 +153,9 @@ export function getArcGISTiledLayer(url) { return new TileLayer({ source: new TileArcGISRest({ url: url, - // crossOrigin: "anonymous", - // tileLoadFunction: function(tile, src) { - // var xhr = new XMLHttpRequest(); - - // // var to = null; - // // var handle = setTimeout(() => { - // // console.log("image took too long"); - // // to = "yes"; - // // return null; - // // }, 1000); - // // console.log(handle); - // xhr.open("GET", src); - // xhr.responseType = "arraybuffer"; - - // xhr.onload = function() { - // // console.log(handle); - // // console.log(to); - - // var arrayBufferView = new Uint8Array(this.response); - // var blob = new Blob([arrayBufferView], { type: "image/png" }); - // var urlCreator = window.URL || window.webkitURL; - // var imageUrl = urlCreator.createObjectURL(blob); - // tile.getImage().src = imageUrl; - // }; - // xhr.send(); - // }, + crossOrigin: "anonymous", }), - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }); } @@ -193,7 +169,7 @@ export function getESRITileXYZLayer(url) { source: new XYZ({ attributions: 'Tiles © ArcGIS', url: url + "/tile/{z}/{y}/{x}", - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }); } @@ -206,19 +182,18 @@ export function getOSMTileXYZLayer(url) { return new TileLayer({ rebuildParams: rebuildParams, source: new OSM({ url: url + "/{z}/{x}/{y}.png" }), - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }); } export function getXYZLayer(url) { return new TileLayer({ source: new XYZ({ url: url + "/{z}/{x}/{y}.png" }), - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }); } export function getSimcoeTileXYZLayer(url) { - // console.log(url); const resolutions = [ 305.74811314055756, 152.87405657041106, 76.43702828507324, 38.21851414253662, 19.10925707126831, 9.554628535634155, 4.77731426794937, 2.388657133974685, 1.1943285668550503, 0.5971642835598172, 0.29858214164761665, 0.1492252984505969, @@ -249,7 +224,7 @@ export function getSimcoeTileXYZLayer(url) { return url + "/tile/" + z + "/" + y + "/" + x; }, tileGrid: tileGrid, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }); source.on("tileloaderror", function (event) { // BROWSER STILL KICKS OUT 404 ERRORS. ANYBODY KNOW A WAY TO PREVENT THE ERRORS IN THE BROWSER? @@ -283,7 +258,7 @@ export function getOSMLayer() { return new TileLayer({ rebuildParams: rebuildParams, source: new OSM(), - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }); } export function shouldCancelPopup(coord, startTime) { @@ -300,7 +275,6 @@ export function getViewRotation() { export function updateWMSRotation() { const layers = window.map.getLayers(); let currentRotation = getViewRotation(); - console.log(getViewRotation()); if (layers.array_.length > 0) { layers.forEach((layer) => { if (layer instanceof ImageLayer) { @@ -332,7 +306,7 @@ export function getImageWMSLayer(serverURL, layers, serverType = "geoserver", cq params: { VERSION: "1.3.0", LAYERS: layers, cql_filter: cqlFilter }, ratio: 1, serverType: serverType, - // crossOrigin: "anonymous", + crossOrigin: "anonymous", }), }); @@ -470,9 +444,7 @@ export function showMessage(title = "Info", messageText = "Message", color = mes if (existingMsg !== undefined && existingMsg !== null) existingMsg.remove(); try { ReactDOM.unmountComponentAtNode(document.getElementById("sc-sidebar-message-container")); - } catch (e) { - console.log("Error unmounting message", e); - } + } catch {} const message = ReactDOM.render( , document.getElementById("sc-sidebar-message-container"), @@ -486,18 +458,6 @@ export function showMessage(title = "Info", messageText = "Message", color = mes }, timeout); } ); - - //console.log(message); - // setTimeout(() => { - // try { - // ReactDOM.unmountComponentAtNode(message.myRef.current.parentNode); - // } catch (err) { - // const domId = "sc-show-message-content"; - // var existingMsg = document.getElementById(domId); - // if (existingMsg !== undefined && existingMsg !== null) existingMsg.remove(); - // console.log(err); - // } - // }, timeout); } export function searchArrayByKey(nameKey, myArray) { @@ -529,7 +489,6 @@ export function httpGetText(url, callback) { if (callback !== undefined) callback(responseText); }) .catch((error) => { - //httpGetText(url.replace("opengis.simcoe.ca", "opengis2.simcoe.ca"), callback); console.error(url, error); if (callback !== undefined) callback(); }); @@ -544,7 +503,6 @@ export function httpGetTextWithParams(url, params = undefined, callback) { if (callback) callback(responseText); }) .catch((error) => { - //httpGetText(url.replace("opengis.simcoe.ca", "opengis2.simcoe.ca"), callback); console.error(url, error); if (callback) callback(); }); @@ -555,14 +513,12 @@ export async function httpGetTextWait(url, callback) { let data = await fetch(url) .then((response) => { const resp = response.text(); - //console.log(resp); return resp; }) .catch((err) => { console.log("Error: ", err); }); if (callback !== undefined) { - //console.log(data); callback(data); } return data; @@ -581,55 +537,6 @@ export function getJSON(url, callback) { }); } -// GET JSON (NO WAITING) -export function getJSONWithParams(url, params = undefined, callback) { - return fetch(url, params) - .then((response) => response.json()) - .then((responseJson) => { - // CALLBACK WITH RESULT - if (callback !== undefined) callback(responseJson); - }) - .catch((error) => { - console.error("Error: ", error, "URL:", url); - }); -} -// GET JSON WAIT -export async function getJSONWaitWithParams(url, params = undefined, callback) { - let data = await await fetch(url, params) - .then((res) => { - const resp = res.json(); - //console.log(resp); - return resp; - }) - .catch((err) => { - console.log("Error: ", err, "URL:", url); - }); - if (callback !== undefined) { - //console.log(data); - callback(data); - } - - return await data; -} -// GET JSON WAIT -export async function getJSONWait(url, callback) { - let data = await await fetch(url) - .then((res) => { - const resp = res.json(); - //console.log(resp); - return resp; - }) - .catch((err) => { - console.log("Error: ", err, "URL:", url); - }); - if (callback !== undefined) { - //console.log(data); - callback(data); - } - - return await data; -} - export function getObjectFromXMLUrl(url, callback) { return fetch(url) .then((response) => response.text()) @@ -670,7 +577,8 @@ export function getWFSVectorSource(serverUrl, layerName, callback, sortField = " } //https://opengis.simcoe.ca/geoserver/wfs?service=wfs&version=2.0.0&request=GetFeature&typeNames=simcoe:Bag%20Tag%20Locations&outputFormat=application/json -export function getWFSGeoJSON(serverUrl, layerName, callback, sortField = null, extent = null, cqlFilter = null, count = null) { +export function getWFSGeoJSON(options, callback) { + const { serverUrl, layerName, sortField = null, extent = null, cqlFilter = null, count = null, secure = false } = options; // SORTING let additionalParams = ""; if (sortField !== null) additionalParams += "&sortBy=" + sortField; @@ -696,16 +604,17 @@ export function getWFSGeoJSON(serverUrl, layerName, callback, sortField = null, // USE TEMPLATE FOR READABILITY const wfsUrlTemplate = (serverURL, layerName) => `${serverURL}wfs?service=wfs&version=2.0.0&request=GetFeature&typeNames=${layerName}&maxFeatures=Y&outputFormat=application/json`; const wfsUrl = wfsUrlTemplate(serverUrl, layerName) + additionalParams; - getJSON(wfsUrl, (result) => { + get(wfsUrl, { useBearerToken: secure }, (result) => { const geoJSON = new GeoJSON().readFeatures(result); callback(geoJSON); }); } -export function getWFSLayerRecordCount(serverUrl, layerName, callback) { +export function getWFSLayerRecordCount(options, callback) { + let { serverUrl, layerName, secured } = options; + if (secured === undefined) secured = false; const recordCountUrlTemplate = (serverURL, layerName) => `${serverURL}wfs?REQUEST=GetFeature&VERSION=1.1&typeName=${layerName}&RESULTTYPE=hits`; const recordCountUrl = recordCountUrlTemplate(serverUrl, layerName); - getObjectFromXMLUrl(recordCountUrl, (result) => { callback(result["wfs:FeatureCollection"]["$"].numberOfFeatures); }); @@ -823,55 +732,10 @@ function pulsate(vectorLayer, color, feature, duration, mstyle, callback) { window.map.render(); }); - - // var key = window.map.on("postrender", function(event) { - // console.log(event); - // //var vectorContext = getVectorContext(event); - // if (event.vectorContext === undefined) return; - // var vectorContext = event.vectorContext; - // var frameState = event.frameState; - // var flashGeom = feature.getGeometry().clone(); - // var elapsed = frameState.time - start; - // var elapsedRatio = elapsed / duration; - // var radius = easeOut(elapsedRatio) * 35 + 5; - // var opacity = easeOut(1 - elapsedRatio); - // var fillOpacity = easeOut(0.5 - elapsedRatio); - - // vectorContext.setStyle( - // new Style({ - // image: new CircleStyle({ - // radius: radius, - // snapToPixel: false, - // fill: new Fill({ - // color: "rgba(119, 170, 203, " + fillOpacity + ")" - // }), - // stroke: new Stroke({ - // color: "rgba(119, 170, 203, " + opacity + ")", - // width: 2 + opacity - // }) - // }) - // }) - // ); - - // vectorContext.drawGeometry(flashGeom); - - // // Draw the marker (again) - // vectorContext.setStyle(mstyle); - // vectorContext.drawGeometry(feature.getGeometry()); - - // if (elapsed > duration) { - // unByKey(key); - // //pulsate(color, feature, duration); // recursive function - // callback(); - // } - - // window.map.render(); - // }); } export function centerMap(coords, zoom) { var extent = window.map.getView().calculateExtent(); - console.log(extent); var xMin = extent[0]; var xMax = extent[2]; var total = (Math.abs(xMin) - Math.abs(xMax)) * 0.04; @@ -947,7 +811,6 @@ export function createTextStyle( outlineColor = "black", outlineWidth = 1 ) { - //console.log(align) offsetX = parseInt(offsetX, 10); offsetY = parseInt(offsetY, 10); maxAngleDegrees = parseFloat(maxAngleDegrees * 0.0174533); @@ -969,8 +832,6 @@ export function createTextStyle( overflow: overflow, rotation: rotation, }); - - //console.log(texts) return texts; } @@ -1018,6 +879,16 @@ export function saveToStorage(storageKey, item) { console.log(e); cleanupStorage(); } + if (window.security.includes("saveToServer")) setUserStorage(); +} +export function removeFromStorage(storageKey) { + try { + window.localStorage.removeItem(storageKey); + } catch (e) { + console.log(e); + cleanupStorage(); + } + if (window.security.includes("saveToServer")) setUserStorage(); } export function cleanupStorage() { const keys = ["searchHistory"]; @@ -1036,6 +907,7 @@ export function cleanupStorage() { } window.localStorage.setItem(key, localStore); }); + if (window.security.includes("saveToServer")) setUserStorage(); } export function appendToStorage(storageKey, item, limit = undefined) { @@ -1052,15 +924,25 @@ export function appendToStorage(storageKey, item, limit = undefined) { console.log(e); cleanupStorage(); } + if (window.security.includes("saveToServer")) setUserStorage(); } export function getItemsFromStorage(key) { - const storage = window.localStorage.getItem(key); - if (storage === null) return undefined; - try { - return JSON.parse(storage); - } catch (e) { - return storage; + if (window.security.includes("saveToServer") && !window.isUserStoreLoaded) { + getUserStorage(() => { + const storage = window.localStorage.getItem(key); + if (storage === null) return undefined; + const data = JSON.parse(storage); + return data; + }); + } else { + const storage = window.localStorage.getItem(key); + if (storage === null) return undefined; + try { + return JSON.parse(storage); + } catch (e) { + return storage; + } } } @@ -1124,18 +1006,7 @@ export function getWKTFeature(wktString) { export function getWKTStringFromFeature(feature) { var wkt = new WKT(); const wktString = wkt.writeFeature(feature); - //console.log(wktString); return wktString; - - // if (wktString === undefined) return; - - // // READ WKT - // var wkt = new WKT(); - // var feature = wkt.readFeature(wktString, { - // dataProjection: "EPSG:3857", - // featureProjection: "EPSG:3857" - // }); - // return feature; } export function formatReplace(fmt, ...args) { @@ -1485,7 +1356,7 @@ export function getBase64FromImageUrlWithParams(url, params = undefined, callbac } var img = new Image(); - // img.setAttribute("crossOrigin", "anonymous"); + img.setAttribute("crossOrigin", "anonymous"); img.onload = function () { var canvas = document.createElement("canvas"); @@ -1509,7 +1380,7 @@ export function getBase64FromImageUrlWithParams(url, params = undefined, callbac export function getBase64FromImageUrl(url, callback) { var img = new Image(); - // img.setAttribute("crossOrigin", "anonymous"); + img.setAttribute("crossOrigin", "anonymous"); img.onload = function () { var canvas = document.createElement("canvas"); @@ -1534,7 +1405,6 @@ export function waitForLoad(items, startTime = Date.now(), timeout = 30, callbac console.error("timeout loading", items); } else { if (isLoaded(items)) { - //console.log("wait for load", items, Date.now() - startTime); callback(); } else { setTimeout(() => waitForLoad(items, startTime, timeout, callback), 50); @@ -1559,7 +1429,7 @@ export function removeIsLoaded(item) { if (window.loaded.includes(item.toLowerCase())) window.loaded.splice(window.loaded.indexOf(item.toLowerCase()), 1); } -export function loadConfig(callback) { +export function loadConfig(configSecured = {}, callback) { const storageMapDefaultsKey = "Map Defaults"; //url parameters @@ -1569,6 +1439,8 @@ export function loadConfig(callback) { //get url parameters let config = mainConfig; + config["configSecured"] = configSecured; + //let localSettings = localStorage; //config = mergeObj(config, localSettings); @@ -1633,10 +1505,12 @@ export function loadConfig(callback) { if (config.useMapConfigApi || (mapId !== null && mapId !== undefined && mapId.trim() !== "")) { config.toc["loaderType"] = "MAPID"; const mapSettingURL = (apiUrl, mapId) => { - if (mapId === null || mapId === undefined || mapId.trim() === "") return `${apiUrl}public/map/default`; - else return `${apiUrl}public/map/${mapId}`; + if (mapId === null || mapId === undefined || mapId.trim() === "") return `${apiUrl}/map/default`; + else return `${apiUrl}/map/${mapId}`; }; - getJSON(mapSettingURL(config.apiUrl, mapId), (result) => { + const apiUrl = configSecured.apiUrlSecured ? `${configSecured.apiUrlSecured}secure` : `${config.apiUrl}public`; + const url = mapSettingURL(apiUrl, mapId); + get(url, { useBearerToken: configSecured.apiUrlSecured !== undefined ? true : false }, (result) => { if (result.json === undefined) { setTimeout(() => { showMessage("Map ID Failed", "Map ID failed to load", messageColors.red); @@ -1722,14 +1596,12 @@ export function mergeObjArray(targetArray, sourceArray) { } export function mergeObj(targetObj, sourceObj, append = false) { Object.keys(sourceObj).forEach((key) => { - if (key !== "__proto__" && key !== "constructor") { - if (typeof targetObj[key] === "object" && !(targetObj[key] instanceof Array)) { - targetObj[key] = mergeObj(targetObj[key], sourceObj[key]); - } else { - if (targetObj[key] instanceof Array && append) { - targetObj[key] = [].concat(sourceObj[key], targetObj[key]); - } else targetObj[key] = sourceObj[key]; - } + if (typeof targetObj[key] === "object" && !(targetObj[key] instanceof Array)) { + targetObj[key] = mergeObj(targetObj[key], sourceObj[key]); + } else { + if (targetObj[key] instanceof Array && append) { + targetObj[key] = [].concat(sourceObj[key], targetObj[key]); + } else targetObj[key] = sourceObj[key]; } }); return targetObj; diff --git a/src/helpers/storage.js b/src/helpers/storage.js new file mode 100644 index 00000000..78461020 --- /dev/null +++ b/src/helpers/storage.js @@ -0,0 +1,57 @@ +import { get, post } from "./api"; +import { default as configSecured } from "../config-secured.json"; + +const userStorageUrl = (apiUrl) => { + return `${apiUrl}secure/user/storage`; +}; + +export function getUserStorage(callback) { + if (window.security.includes("saveToServer")) { + const url = userStorageUrl(configSecured.apiUrlSecured); + get(url, { useBearerToken: true }, (data) => { + try { + data = JSON.parse(data); + } catch (e) { + console.log(e); + } + if (data && typeof data === "object") + //filter out any authentication information + Object.keys(data) + .filter((key) => { + return key.indexOf("login.microsoftonline.com") === -1 && key.indexOf("login.windows.net") === -1 && key.indexOf("msal.") === -1 && key.indexOf("cacheVersion") === -1; + }) + .forEach((key) => { + localStorage.setItem(key, data[key]); + }); + window.isUserStoreLoaded = true; + callback(); + }); + } else { + window.isUserStoreLoaded = true; + + callback(); + } +} + +export function clearUserStorage(callback) { + if (window.security.includes("saveToServer")) { + const url = userStorageUrl(configSecured.apiUrlSecured); + post(url, { useBearerToken: true }, (result) => { + if (callback) callback(); + }); + } else { + callback(); + } +} +export function setUserStorage() { + if (window.security.includes("saveToServer")) { + const url = userStorageUrl(configSecured.apiUrlSecured); + //remove any authentication information + let dataKeys = Object.keys(localStorage).filter((key) => { + return key.indexOf("login.microsoftonline.com") === -1 && key.indexOf("login.windows.net") === -1 && key.indexOf("msal.") === -1 && key.indexOf("cacheVersion") === -1; + }); + let data = {}; + dataKeys.forEach((key) => (data[key] = localStorage.getItem(key))); + post(url, { useBearerToken: true, body: JSON.stringify(data) }, (result) => {}); + } +} diff --git a/src/index.js b/src/index.js index 8866d376..df59ac05 100644 --- a/src/index.js +++ b/src/index.js @@ -3,11 +3,43 @@ import React from "react"; import ReactDOM from "react-dom"; import "./index.css"; import * as serviceWorker from "./serviceWorker"; -import App from "./App"; +import { MsalProvider } from "@azure/msal-react"; +import { Configuration, PublicClientApplication } from "@azure/msal-browser"; import "alertifyjs/build/css/alertify.css"; import "alertifyjs/build/css/themes/default.min.css"; +if (process.env.REACT_APP_SECURED === "true") { + import(`./AppSecure.jsx`) + .then((module) => { + const AppSecure = module.default; + // MSAL configuration + const configuration: Configuration = { + auth: { + clientId: process.env.REACT_APP_CLIENTID, + }, + }; + const pca = new PublicClientApplication(configuration); + ReactDOM.render( + + + , + document.getElementById("root") + ); + }) + .catch((error) => { + console.log(error); + }); +} else { + import(`./App.js`) + .then((module) => { + const App = module.default; + ReactDOM.render(, document.getElementById("root")); + }) + .catch((error) => { + console.log(error); + }); +} -const EventEmitter = require("events"); +const { EventEmitter } = require("events"); // GLOBAL VARIABLES window.map = null; // MAIN MAP OBJECT @@ -21,8 +53,6 @@ window.isCoordinateToolOpen = false; window.isMeasuring = false; window.loaded = []; window.config = {}; -ReactDOM.render(, document.getElementById("root")); -console.log("getMaxListeners", window.emitter.getMaxListeners()); // If you want your app to work offline and load faster, you can change // unregister() to register() below. Note this comes with some pitfalls. diff --git a/src/layerInfo/App.js b/src/layerInfo/App.js index a71baf1c..c341e800 100644 --- a/src/layerInfo/App.js +++ b/src/layerInfo/App.js @@ -2,7 +2,7 @@ import React, { Component } from "react"; import "./App.css"; import * as layerInfoHelpers from "./helpers"; import * as helpers from "../helpers/helpers"; - +import { get } from "../helpers/api"; import mainConfig from "./config.json"; import ReactGA from "react-ga4"; @@ -62,7 +62,7 @@ class LayerInfoApp extends Component { // GET LAYER INFO FROM URL async getInfo() { if (this.state.layerURL && this.state.layerURL != "null" && this.state.layerURL !== "") - helpers.getJSONWithParams(this.state.layerURL, this.state.params, (response) => { + get(this.state.layerURL, { ...this.state.params, useBearerToken: this.props.secure || false }, (response) => { if (response.coverage !== undefined) { this.setState({ layerInfo: response.coverage }); } else if (response.featureType === undefined) { @@ -116,7 +116,7 @@ class LayerInfoApp extends Component { const epsgUrl = (wkt) => `https://epsg.io/${wkt}.wkt`; if (featureInfo.sourceSpatialReference.latestWkid === undefined) callback(featureType); else - helpers.httpGetText(epsgUrl(featureInfo.sourceSpatialReference.latestWkid), (projection) => { + get(epsgUrl(featureInfo.sourceSpatialReference.latestWkid), { type: "text" }, (projection) => { if (projection !== "ERROR") featureType.nativeCRS["$"] = projection; callback(featureType); }); @@ -170,7 +170,13 @@ class LayerInfoApp extends Component { onDownloadClick = (evt) => { const workspace = this.state.layerInfo.namespace.name; const layerName = this.state.layerInfo.name; - window.open(downloadTemplate(serverUrl(this.state.layerURL), workspace, layerName), "_blank"); + if (this.state.layerURL.indexOf(mainConfig.geoserverURL) !== -1) { + get(downloadTemplate(serverUrl(this.state.layerURL), workspace, layerName), { useBearerToken: true, type: "blob" }, (result) => { + helpers.download(result, layerName, { isBlob: true }); + }); + } else { + window.open(downloadTemplate(serverUrl(this.state.layerURL), workspace, layerName), "_blank"); + } }; render() { if (this.state.layerInfo === undefined || this.state.layerInfo.nativeCRS === undefined) diff --git a/src/legend/LegendItem.jsx b/src/legend/LegendItem.jsx index 8e7cc72b..fcfced61 100644 --- a/src/legend/LegendItem.jsx +++ b/src/legend/LegendItem.jsx @@ -1,61 +1,64 @@ import React, { useState } from "react"; import styles from "./LegendItem.module.css"; import * as helpers from "../helpers/helpers"; +import { get, createObjectURL } from "../helpers/api"; + import cx from "classnames"; function LegendItem(props) { - const { layer } = props; - const [legendImage, setLegendImage] = useState(layer.layer === undefined ? (layer.imageUrl === undefined ? layer.styleUrl : layer.imageUrl) : undefined); - if (layer.imageUrl === undefined ? layer.styleUrl : layer.imageUrl) { - const params = {}; - const secureKey = layer.layer !== undefined ? layer.layer.get("secureKey") : undefined; - if (secureKey !== undefined) { - params[secureKey] = "GIS"; - helpers.getBase64FromImageUrlWithParams(layer.imageUrl === undefined ? layer.styleUrl : layer.imageUrl, params, (height, returnImage) => { - setLegendImage(returnImage); - }); - } else { - if (legendImage === undefined) setLegendImage(layer.imageUrl === undefined ? layer.styleUrl : layer.imageUrl); - } - } - return ( -
- - -
- ); + const { layer } = props; + const [legendImage, setLegendImage] = useState(layer.layer === undefined ? (layer.imageUrl === undefined ? layer.styleUrl : layer.imageUrl) : undefined); + if (layer.imageUrl === undefined ? layer.styleUrl : layer.imageUrl) { + const params = {}; + const secured = layer.layer !== undefined ? layer.layer.get("secured") : undefined; + if (secured) { + params["useBearerToken"] = true; + get(layer.imageUrl === undefined ? layer.styleUrl : layer.imageUrl, { ...params, type: "blob" }, (results) => { + var imageUrl = createObjectURL(results); + setLegendImage(imageUrl); + }); + } else { + if (legendImage === undefined) setLegendImage(layer.imageUrl === undefined ? layer.styleUrl : layer.imageUrl); + } + } + return ( +
+ + +
+ ); } const Legend = ({ legendImage, legendObj, center }) => { - if (legendImage !== undefined && legendImage !== null && legendImage !== "") { - return style; - } else if (legendObj !== undefined) { - if (legendObj.legend === undefined) return
; - return ( -
    - {legendObj.legend.map((item) => { - return ; - })} -
- ); - } else { - return
; - } + if (legendImage !== undefined && legendImage !== null && legendImage !== "") { + return style; + } else if (legendObj !== undefined) { + if (legendObj.legend === undefined) return
; + return ( +
    + {legendObj.legend.map((item) => { + return ; + })} +
+ ); + } else { + return
; + } }; const LegendRow = ({ legend }) => { - return ( -
  • - style -
    - {legend.label.trim()} -
    -
  • - ); + return ( +
  • + style +
    + {legend.label.trim()} +
    +
  • + ); }; export default LegendItem; diff --git a/src/legend/helpers.js b/src/legend/helpers.js index 7487ff92..00dbc23d 100644 --- a/src/legend/helpers.js +++ b/src/legend/helpers.js @@ -66,7 +66,6 @@ export function httpGetText(url, callback) { if (callback !== undefined) callback(responseText); }) .catch((error) => { - //httpGetText(url.replace("opengis.simcoe.ca", "opengis2.simcoe.ca"), callback); console.error(error); }); } diff --git a/src/map/Attachments.jsx b/src/map/Attachments.jsx index fdbc345d..f821ce76 100644 --- a/src/map/Attachments.jsx +++ b/src/map/Attachments.jsx @@ -1,13 +1,18 @@ import React, { useEffect, useState } from "react"; import * as helpers from "../helpers/helpers"; +import { get } from "../helpers/api"; const Attachments = (props) => { const [attachments, setAttachments] = useState([]); + const [token, setToken] = useState(); useEffect(() => { - helpers.getJSONWithParams(props.attachmentUrl, {}, (attachments) => { + var url = new URL(props.attachmentUrl); + const urlParams = new URLSearchParams(url.searchParams); + const url_token = urlParams.get("token"); + setToken(url_token); + get(props.attachmentUrl, {}, (attachments) => { if (attachments.attachmentGroups && attachments.attachmentGroups.length > 0) { setAttachments(attachments.attachmentGroups[0].attachmentInfos); - //console.log(attachments.attachmentGroups[0].attachmentInfos); } }); }, [props.attachmentUrl]); @@ -15,7 +20,7 @@ const Attachments = (props) => { return (
    {attachments.map((attachment) => ( - + ))}
    ); diff --git a/src/map/BasemapSwitcherContext.js b/src/map/BasemapSwitcherContext.js index a09d8e33..5a5e7110 100644 --- a/src/map/BasemapSwitcherContext.js +++ b/src/map/BasemapSwitcherContext.js @@ -153,7 +153,7 @@ export function BasemapSwitcherProvider({ children }) { tiled: true, name: layerName, background: service.background, - rootPath: service.rootPath, + rootPath: service.rootPath.indexOf("http") === -1 ? `/${window.homepage}/${service.rootPath}` : service.rootPath, spritePath: service.spritePath, pngPath: service.pngPath, minZoom: service.minZoom, diff --git a/src/map/Identify.jsx b/src/map/Identify.jsx index 70628d9e..42dce8bc 100644 --- a/src/map/Identify.jsx +++ b/src/map/Identify.jsx @@ -9,7 +9,7 @@ import { Vector as VectorSource } from "ol/source.js"; import VectorLayer from "ol/layer/Vector"; import { Circle as CircleStyle, Fill, Stroke, Style } from "ol/style.js"; import useIframeContentHeight from "../components/react-use-iframe-content-height"; - +import { get } from "../helpers/api"; class Identify extends Component { constructor(props) { super(props); @@ -64,19 +64,12 @@ class Identify extends Component { let type = layer.get("tocDisplayName"); let wfsUrl = layer.get("wfsUrl"); let attachmentUrl = layer.get("attachmentUrl"); - // https://maps2.simcoe.ca/arcgis/rest/services/OroMedonte/Oro_OperationalLayers_Dynamic/MapServer/74/queryAttachments?objectIds=56&globalIds=&definitionExpression=&attachmentsDefinitionExpression=&attachmentTypes=&size=&keywords=&resultOffset=&resultRecordCount=&returnUrl=true&f=pjson - const secureKey = layer.get("secureKey"); + const secured = layer.get("secured"); const minScale = layer.get("minScale"); const hasAttachments = layer.get("hasAttachments"); const params = {}; - params["headers"] = {}; - if (secureKey !== undefined) { - const headers = {}; - headers[secureKey] = "GIS"; - params["mode"] = "cors"; - params.headers = headers; - } + if (secured) params["useBearerToken"] = secured; const isArcGISLayer = LayerHelpers.getLayerSourceType(layer.getSource()) === OL_DATA_TYPES.ImageArcGISRest; if (wfsUrl !== undefined && (geometry.getType() !== "Point" || isArcGISLayer)) { const feature = new Feature(geometry); @@ -110,7 +103,7 @@ class Identify extends Component { if (wfsUrl.length > 8000) { helpers.showMessage("Geometry too complex", "The geometry you are trying to use is too complex to identify.", helpers.messageColors.red); } else { - helpers.getJSONWithParams(wfsUrl, params, (result) => { + get(wfsUrl, params, (result) => { const featureList = isArcGISLayer ? LayerHelpers.parseESRIIdentify(result) : new GeoJSON().readFeatures(result); if (featureList.length > 0) { if (displayName === "" || displayName === undefined) displayName = this.getDisplayNameFromFeature(featureList[0]); @@ -150,17 +143,13 @@ class Identify extends Component { : ""; if (url) { url += "&feature_count=1000000"; - //console.log(url); - params.headers["Content-Type"] = "application/text"; - helpers.httpGetTextWithParams(url, params, (result) => { + get(url, { ...params, type: "text" }, (result) => { let tempResult = helpers.tryParseJSON(result); - //console.log(tempResult); if (tempResult !== false) { result = tempResult; } else { return; } - //console.log(result); const featureList = new GeoJSON().readFeatures(result); if (featureList.length === 0) { return; @@ -189,7 +178,6 @@ class Identify extends Component { let displayName = ""; let type = layer.get("tocDisplayName"); const minScale = layer.get("minScale"); - const params = {}; let featureList = []; let pixel = window.map.getPixelFromCoordinate(geometry.flatCoordinates); window.map.forEachFeatureAtPixel(pixel, (feature, layer) => { diff --git a/src/map/IdentifyQuery.jsx b/src/map/IdentifyQuery.jsx new file mode 100644 index 00000000..e5c93e94 --- /dev/null +++ b/src/map/IdentifyQuery.jsx @@ -0,0 +1,76 @@ +import React, { useState, useEffect } from "react"; +import "./Identify.css"; +import * as helpers from "../helpers/helpers"; +import * as esriHelpers from "../helpers/esriHelpers"; + +import Collapsible from "react-collapsible"; +import InfoRow from "../helpers/InfoRow.jsx"; + +function IdentifyQuery(props) { + const [features, setFeatures] = useState([]); + const [isLoading, setIsLoading] = useState(false); + + useEffect(() => { + setIsLoading(true); + let url = `${props.layerURL}/${props.layerId}/query?where=${props.where.replace("{arn}", props.arn)}&outFields=${props.fields.join(",")}&featureEncoding=esriDefault&f=json`; + if (props.secured) { + esriHelpers.getAccessToken((token) => { + url = `${url}&token=${token}`; + helpers.getJSON(url, (results) => { + setFeatures(results.features ? results.features : []); + setIsLoading(false); + }); + }); + } else { + helpers.getJSON(url, (results) => { + setFeatures(results.features ? results.features : []); + setIsLoading(false); + }); + } + }, [props]); + return ( +
    +
    + Loading +
    +
    + {features.map((feature) => ( + + ))} +
    +
    + ); +} + +export default IdentifyQuery; + +const Feature = (props) => { + const [open, setOpen] = useState(true); + const [keys, setKeys] = useState([]); + const [feature, setfeature] = useState(props.feature); + useEffect(() => { + if (props.feature) { + setKeys(Object.keys(props.feature.attributes)); + } + setfeature(props.feature.attributes); + }, [props.feature]); + return ( +
    + +
    + {keys.map((key) => ( + + ))} +
    +
    +
    + ); +}; + +// IMPORT ALL IMAGES +const images = importAllImages(require.context("./images", false, /\.(png|jpe?g|svg|gif)$/)); +function importAllImages(r) { + let images = {}; + r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); + return images; +} diff --git a/src/map/PropertyReport.css b/src/map/PropertyReport.css deleted file mode 100644 index 6dc8ed5d..00000000 --- a/src/map/PropertyReport.css +++ /dev/null @@ -1,121 +0,0 @@ -.sc-property-report-container { - bottom: 0; - top: 0; -} - -.sc-property-report-html-title { - font-size: 18px; - color: #185b82; - border-bottom: 1px solid #bbbbbb; - padding-bottom: 7px; - background-color: #e6e6e6; - color: #4a4a4a; - text-align: center; - padding-top: 6px; - text-shadow: 1px 1px 0px rgba(255, 255, 255, 1); -} - -.sc-property-report-html-container { - border-left: 1px solid #ccc; - border-right: 1px solid #ccc; - border-bottom: 1px solid #ccc; - margin-bottom: 10px; - padding: 5px; - border-radius: 0px 0px 3px 3px; - -moz-border-radius: 0px 0px 3px 3px; - -webkit-border-radius: 0px 0px 3px 3px; - /* color: #666 !important; */ -} - -.sc-property-report-html-heading { - font-size: 12px; - font-weight: bold; - color: #494949; - padding-top: 5px; - padding-left: 5px; - /* border-bottom: 1px solid #DDDDDD; */ - text-transform: uppercase; - /* margin-bottom: 4px; */ - background-color: #dfdfdf; - padding: 6px; - border: 1px solid #ccc; - border-radius: 3px 3px 0px 0px; - -moz-border-radius: 3px 3px 0px 0px; - -webkit-border-radius: 3px 3px 0px 0px; -} - -.sc-property-report-html-heading.icon { - background-repeat: no-repeat; - background-position: 5px 5px; - padding-left: 30px; -} - -.sc-property-report-html-heading.general { - background-image: url("./images/information.png"); -} - -.sc-property-report-html-heading.emergency { - background-image: url("./images/emergency.png"); -} - -.sc-property-report-html-heading.waste { - background-image: url("./images/waste.png"); -} - -.sc-property-report-html-heading.school { - background-image: url("./images/school.png"); -} - -.sc-property-report-html-heading.other { - background-image: url("./images/other.png"); -} - -.sc-property-report-html-heading.pdf { - background-image: url("./images/pdf.png"); -} - -.sc-property-report-html-label { - font-size: 13px; - font-weight: bolder; -} - -.sc-property-report-html-value { - font-size: 12px; - padding-bottom: 2px; - padding-top: 2px; - padding-left: 20px; - background-image: url("./images/arrow_curve.gif"); - background-position-y: 1px; - background-repeat: no-repeat; - color: #666 !important; -} - -.sc-property-report-html-value.sub { - padding-left: 30px; - background-position-x: 10px; -} -.sc-property-report-html-value:hover { - color: #ff0000; -} - -.sc-property-report-html-title-address { - border-bottom: 1px solid #d6d6d6; - padding-bottom: 5px; -} - -.sc-property-report-html-title-button-container { - padding-top: 5px; - text-align: center; -} - -.sc-property-report-info-container { - padding-left: 10px; - padding-right: 10px; - padding-top: 5px; -} - -.sc-property-report-html-market { - font-size: 9px; - color: #555; - padding-bottom: 4px !important; -} diff --git a/src/map/PropertyReportClick.css b/src/map/PropertyReportClick.css index d75e27b4..9e0ce43c 100644 --- a/src/map/PropertyReportClick.css +++ b/src/map/PropertyReportClick.css @@ -1,17 +1,26 @@ .sc-property-report-click-more-info { - width: 150px; - margin-right: 5px; - margin-top: 5px; + width: 150px; + margin-right: 5px; + margin-top: 5px; } .sc-property-report-click-close { - width: 100px; + width: 100px; } .sc-property-report-top-container { - position: relative; - top: 0px; - bottom: 0px; - overflow-x: hidden; - overflow-y: auto; - max-height: 200px; + position: relative; + top: 0px; + bottom: 0px; + overflow-x: hidden; + overflow-y: auto; + max-height: 200px; +} + +.sc-property-report-click-propertylink { + width: 99%; + margin-top: 5px; +} +.sc-property-report-click-start-ticket { + width: 99%; + margin-top: 5px; } diff --git a/src/map/PropertyReportClick.jsx b/src/map/PropertyReportClick.jsx index 11d4b4ae..f856d6a8 100644 --- a/src/map/PropertyReportClick.jsx +++ b/src/map/PropertyReportClick.jsx @@ -1,27 +1,35 @@ -import React, { Component } from "react"; +import React, { Component, Fragment } from "react"; import * as helpers from "../helpers/helpers"; +import { get } from "../helpers/api"; + import "./PropertyReportClick.css"; import InfoRow from "../helpers/InfoRow.jsx"; import { CopyToClipboard } from "react-copy-to-clipboard"; import GeoJSON from "ol/format/GeoJSON.js"; +import Point from "ol/geom/Point"; import { Vector as VectorLayer } from "ol/layer.js"; import { Vector as VectorSource } from "ol/source.js"; -import { Stroke, Style } from "ol/style.js"; -import PropertyReport from "./PropertyReport"; +import { Stroke, Fill, Style } from "ol/style.js"; +import PropertyReport from "../reports/PropertyReport"; import copy from "copy-to-clipboard"; import { Image as ImageLayer } from "ol/layer.js"; -import { LayerHelpers } from "../helpers/OLHelpers"; - +import { LayerHelpers, OL_DATA_TYPES } from "../helpers/OLHelpers"; +import Identify from "./Identify.jsx"; +import IdentifyQuery from "./IdentifyQuery.jsx"; +import { getArea } from "ol/sphere.js"; // https://opengis.simcoe.ca/geoserver/wfs?service=wfs&version=2.0.0&request=GetFeature&typeNames=simcoe:Assessment%20Parcel&outputFormat=application/json&cql_filter=INTERSECTS(geom,%20POINT%20(-8874151.72%205583068.78)) const parcelURLTemplate = (mainURL, x, y) => `${mainURL}&cql_filter=INTERSECTS(geom,%20POINT%20(${x}%20${y}))`; - -let parcelLayer = new VectorLayer({ - style: new Style({ - stroke: new Stroke({ - color: "#E78080", - width: 3, - }), +let parcelLayerStyle = new Style({ + fill: new Fill({ + color: [0, 0, 0, 0.0], // USE OPACITY + }), + stroke: new Stroke({ + color: [231, 128, 128, 0.8], + width: 3, }), +}); +let parcelLayer = new VectorLayer({ + style: parcelLayerStyle, source: new VectorSource(), }); parcelLayer.setZIndex(500); @@ -30,38 +38,40 @@ class PropertyReportClick extends Component { constructor(props) { super(props); //wait for toc and map to load + this.extensions = this.props.extensions || []; helpers.waitForLoad(["map", "toc"], Date.now(), 30, () => this.onMapLoad()); - helpers.waitForLoad(["settings"], Date.now(), 30, () => { - this.parcelLayer = window.config.parcelLayer; - this.termsUrl = window.config.termsUrl; - this.propertyReportUrl = window.config.propertyReportUrl; - }); - // LISTEN FOR CALLS - window.emitter.addListener("showPropertyReport", (coords) => { - helpers.waitForLoad(["map", "toc"], Date.now(), 30, () => { - this.onPropertyEmitter(coords); - }); - }); this.state = { propInfo: null, feature: null, }; } + componentDidMount() { + this.extensions = this.props.extensions || []; + } + componentDidUpdate(prevProps) { + if (this.extensions.length !== this.props.extensions.length) { + this.extensions = this.props.extensions || []; + } + } onMapLoad() { window.map.addLayer(parcelLayer); // HANDLE URL PARAMETERS - const urlARN = helpers.getURLParameter("ARN"); - if (urlARN !== null) { - const parcelURLARNTemplate = (mainURL, arn) => `${mainURL}&cql_filter=arn='${arn}'`; - const parcelARNURL = parcelURLARNTemplate(this.parcelLayer.url, urlARN); - this.showPropertyWindow(parcelARNURL); - } + helpers.waitForLoad(["security", "sidebar", "toc", "settings"], Date.now(), 30, () => { + const urlARN = helpers.getURLParameter("ARN"); + if (urlARN !== null) { + const parcelURLARNTemplate = (mainURL, arn) => `${mainURL}&cql_filter=arn='${arn}'`; + let parcelUrl = window.config.configSecured.assessmentParcelLayer ? window.config.configSecured.assessmentParcelLayer.url : window.config.parcelLayer.url; + const parcelARNURL = parcelURLARNTemplate(parcelUrl || window.config.parcelLayer.url, urlARN); + this.showPropertyWindow(parcelARNURL); + } + }); // LISTEN FOR MAP CLICK window.map.on("singleclick", async (evt) => { + this.setState({ userClickCoords: evt.coordinate }); // SCALE if (helpers.getMapScale() > 20000) return; @@ -89,41 +99,89 @@ class PropertyReportClick extends Component { // IMAGE LAYERS // CHECK FOR ANY OTHER LAYERS THAT SHOULD DISABLE + var viewResolution = window.map.getView().getResolution(); const layers = window.map.getLayers().getArray(); for (let index = 0; index < layers.length; index++) { if (disable) break; const layer = layers[index]; - if (layer.get("disableParcelClick") && layer.getVisible() && layer instanceof ImageLayer) { - await LayerHelpers.identifyFeaturesWait(layer, evt.coordinate, (feature) => { - if (feature !== undefined) { - disable = true; - return; - } - }); + if (layer.getProperties().disableParcelClick && layer.getVisible() && layer instanceof ImageLayer) { + //console.log(layer); + const isArcGISLayer = LayerHelpers.getLayerSourceType(layer.getSource()) === OL_DATA_TYPES.ImageArcGISRest; + var rootInfoUrl = layer.get("rootInfoUrl"); + var url = isArcGISLayer + ? layer.get("wfsUrl") + : layer.getSource().getFeatureInfoUrl(evt.coordinate, viewResolution, "EPSG:3857", { + INFO_FORMAT: "application/json", + }); + if (isArcGISLayer) { + const checkAccessTokenUrl = new URL(rootInfoUrl); + const token = checkAccessTokenUrl.searchParams.get("token"); + + const arcgisResolution = `${window.map.getSize()[0]},${window.map.getSize()[1]},96`; + const extent = window.map.getView().calculateExtent(); + const zoom = window.map.getView().getZoom(); + const tolerance = 20 - zoom; + url = url + .replace("#GEOMETRY#", evt.coordinate) + .replace("#GEOMETRYTYPE#", "esriGeometryPoint") + .replace("#TOLERANCE#", tolerance >= 10 ? tolerance : 10) + .replace("#EXTENT#", extent.join(",")) + .replace("#RESOLUTION#", arcgisResolution); + if (token) url += `&token=${token}`; + } + if (url) { + const secured = layer.get("secured"); + const params = {}; + if (secured) params["useBearerToken"] = secured; + await (async () => { + return new Promise((resolve) => + get(url, params, (result) => { + if (result) { + let features = []; + const featureList = isArcGISLayer ? LayerHelpers.parseESRIIdentify(result) : new GeoJSON().readFeatures(result); + if (featureList.length > 0) { + featureList.forEach((feature) => { + features.push(feature); + }); + } + if (!features) { + disable = true; + return; + } + resolve(); + } + }) + ); + }); + } } } - if (disable) return; - const parcelURL = parcelURLTemplate(this.parcelLayer.url, evt.coordinate[0], evt.coordinate[1]); + if (disable || helpers.shouldCancelPopup(evt.coordinate, evt.originalEvent.timeStamp)) return; + const parcelURL = parcelURLTemplate(window.config.parcelLayer.url, evt.coordinate[0], evt.coordinate[1]); this.showPropertyWindow(parcelURL, evt); helpers.addAppStat("Property Click", "Click"); }); + + // LISTEN FOR CALLS + window.emitter.addListener("showPropertyReport", (coords, zoomToFeature = true) => this.onPropertyEmitter(coords, zoomToFeature)); } - onPropertyEmitter = (coords) => { - const parcelURL = parcelURLTemplate(this.parcelLayer.url, coords[0], coords[1]); - this.showPropertyWindow(parcelURL); + onPropertyEmitter = (coords, zoomToFeature) => { + const parcelURL = parcelURLTemplate(window.config.parcelLayer.url, coords[0], coords[1]); + + this.showPropertyWindow(parcelURL, zoomToFeature === true ? null : { coordinate: coords, originalEvent: { timeStamp: performance.now() } }); }; addToMyMaps = (value) => { // ADD MYMAPS - window.emitter.emit("addMyMapsFeature", this.state.feature, this.state.feature.get("arn")); + window.emitter.emit("addMyMapsFeature", this.state.feature, value && value !== "(Not Available)" ? value : this.state.feature.get("arn")); }; getShareURL = (arn) => { //GET URL - var url = window.location.href; + var url = window.location.href.replace("#", ""); //ADD LOCATIONID if (url.indexOf("?") > 0) { @@ -159,6 +217,30 @@ class PropertyReportClick extends Component { helpers.addAppStat("Property Click More Info", "click"); }; + identifyLayerFeature = (options) => { + if (options.identifyType === "query") { + window.emitter.emit( + "loadReport", + + ); + } else { + if (options.coords && options.layer) { + const point = new Point(options.coords); + window.emitter.emit("loadReport", ); + } + } + }; + //copy(result.id); // BUILDS POPUP CONTENT getPopupContent = (propInfo) => { @@ -170,6 +252,7 @@ class PropertyReportClick extends Component { const broadbandSpeeds = propInfo.Other && propInfo.Other.BroadbandSpeed ? propInfo.Other.BroadbandSpeed : undefined; const coords = propInfo.pointCoordinates; + const pointerCoords = propInfo.pointerCoordinates; const hasZoning = propInfo.HasZoning; let rows = []; if (address) rows.push(); @@ -187,6 +270,10 @@ class PropertyReportClick extends Component { helpers.addAppStat("Copy ARN", "click"); }} /> + + {this.extensions.map((extension) => { + return {extension.arnExtension({ arn })}; + })} ); if (hasZoning !== undefined) @@ -210,20 +297,11 @@ class PropertyReportClick extends Component { )} ); - - if (assessedValue && arn.substring(0, 4) !== "4342") + if (assessedValue) rows.push( assessment -
    - (may not reflect current market value) -
    +
    (may not reflect current market value)
    ); @@ -234,7 +312,7 @@ class PropertyReportClick extends Component { rows.push( - + this.addToMyMaps(address)}> [Add to My Maps]  @@ -246,7 +324,7 @@ class PropertyReportClick extends Component { { - helpers.showURLWindow(this.termsUrl, false, "full", false, true, true); + helpers.showURLWindow(window.config.termsUrl, false, "full", false, true, true); helpers.addAppStat("Property Click Terms", "click"); }} > @@ -257,7 +335,60 @@ class PropertyReportClick extends Component { rows.push(); + if (window.config.propertyReport && window.config.propertyReport.customIdentify) { + window.config.propertyReport.customIdentify.forEach((item) => { + rows.push( + + + this.identifyLayerFeature({ + identifyType: item.identifyType, + coords: pointerCoords, + layer: item.layer, + title: item.layerName, + layerURL: item.layerURL, + layerId: item.layerId, + where: item.whereFormat, + fields: item.fields, + secured: item.secured, + type: item.type, + arn: arn, + }) + } + > + {item.linkText} + + + ); + }); + } + this.extensions.forEach((extension) => { + rows = extension.dataRows({ arn, rows, ...propInfo, geom: this.state.feature.getGeometry() }); + }); + + const GetPropertyLink = () => { + const propertylink = helpers.getURLParameter("PROPERTYLINK", true, true); + if (propertylink) { + let propertylinkObj = helpers.tryParseJSON(propertylink); + if (typeof propertylinkObj === "object") { + if (!propertylinkObj.label) propertylinkObj["label"] = "Property Link"; + if (propertylinkObj.link) { + propertylinkObj.link = propertylinkObj.link.replace("{arn}", arn); + return ( + + + + ); + } + } + } + }; + const PropertyReportContent = (props) => { + const { extensions } = props; return (
    {rows}
    @@ -269,66 +400,95 @@ class PropertyReportClick extends Component { + + {extensions.map((extension) => { + return {extension.content({ arn })}; + })} + {GetPropertyLink()}
    ); }; - return ; + return ; }; showPropertyWindow = (wmsURL, clickEvt = null) => { - helpers.getJSON(wmsURL, (result) => { - if (result.features.length === 0) return; - - const geoJSON = new GeoJSON().readFeatures(result); - var vectorSource = new VectorSource({ features: geoJSON }); - parcelLayer.setSource(vectorSource); - - const feature = geoJSON[0]; - const arn = result.features[0].properties.arn; - feature.setProperties({ arn: arn }); - this.setState({ shareURL: this.getShareURL(arn), feature: feature }); - - // GET CENTER COORDS - var latLongCoords = null; - var pointerPoint = null; - if (clickEvt === null) { - helpers.getGeometryCenter(feature.getGeometry(), (center) => { - pointerPoint = center.flatCoordinates; - latLongCoords = helpers.toLatLongFromWebMercator(pointerPoint); - console.log(latLongCoords); - window.map.getView().fit(feature.getGeometry().getExtent(), window.map.getSize()); + if (clickEvt !== null) { + const shiftKeyPressed = clickEvt.originalEvent.shiftKey; + if (shiftKeyPressed) return; + } - // GET FULL INFO - if (feature !== undefined) { - const infoURL = this.propertyReportUrl + arn; - helpers.getJSON(infoURL, (result) => { - result.pointCoordinates = latLongCoords; - result.shareURL = this.getShareURL(arn); - this.setState({ propInfo: result }); - window.popup.show(pointerPoint, this.getPopupContent(result), "Property Information", () => { - parcelLayer.getSource().clear(); - }); + helpers.waitForLoad(["security", "sidebar", "toc"], Date.now(), 30, () => { + helpers.getJSON(wmsURL, (result) => { + if (result.features.length === 0) return; + + const geoJSON = new GeoJSON().readFeatures(result); + + var vectorSource = new VectorSource({ features: geoJSON }); + if (clickEvt !== null && helpers.shouldCancelPopup(clickEvt.coordinate, clickEvt.originalEvent.timeStamp)) return; + else parcelLayer.setSource(vectorSource); + + const feature = geoJSON[0]; + feature.setStyle(parcelLayerStyle); + const arn = result.features[0].properties.arn; + feature.setProperties({ arn: arn }); + this.setState({ shareURL: this.getShareURL(arn), feature: feature }); + + // GET CENTER COORDS + var latLongCoords = null; + var pointerPoint = null; + if (clickEvt === null) { + helpers.getGeometryCenter(feature.getGeometry(), (center) => { + pointerPoint = center.flatCoordinates; + latLongCoords = helpers.toLatLongFromWebMercator(pointerPoint); + window.map.getView().fit(feature.getGeometry().getExtent(), window.map.getSize()); + + // GET FULL INFO + this.getData({ feature, arn, pointerPoint, latLongCoords }, (result) => { + this.setState({ propInfo: result, userClickCoords: pointerPoint }); + window.popup.show(pointerPoint, this.getPopupContent(result), "Property Information", () => {}); }); - } - }); - } else { - latLongCoords = helpers.toLatLongFromWebMercator(clickEvt.coordinate); - pointerPoint = clickEvt.coordinate; + }); + } else { + latLongCoords = helpers.toLatLongFromWebMercator(clickEvt.coordinate); + pointerPoint = clickEvt.coordinate; + + // GET FULL INFO + this.getData({ feature, arn, pointerPoint, latLongCoords }, (result) => { + this.setState({ propInfo: result, userClickCoords: pointerPoint }); + window.popup.show(pointerPoint, this.getPopupContent(result), "Property Information", () => {}); + }); + } + }); + }); + }; - // GET FULL INFO - if (feature !== undefined) { - const infoURL = this.propertyReportUrl + arn; + getData = (options, callback) => { + const { feature, arn, pointerPoint, latLongCoords } = options; + let allPromises = []; + if (feature !== undefined) { + const infoURL = window.config.propertyReportUrl + arn; + allPromises.push( + new Promise((resolve, reject) => { helpers.getJSON(infoURL, (result) => { + result.pointerCoordinates = pointerPoint; result.pointCoordinates = latLongCoords; result.shareURL = this.getShareURL(arn); - this.setState({ propInfo: result }); - window.popup.show(pointerPoint, this.getPopupContent(result), "Property Information", () => { - parcelLayer.getSource().clear(); - }); + result.area = getArea(feature.getGeometry()); + resolve(result); }); - } - } + }) + ); + this.extensions.forEach((extension) => { + allPromises.push(extension.fetchData({ ...options, data: {} })); + }); + } + Promise.all(allPromises).then((results) => { + let allResults = {}; + results.forEach((result) => { + allResults = { ...allResults, ...result }; + }); + if (callback) callback(allResults); }); }; diff --git a/src/map/SCMap.jsx b/src/map/SCMap.jsx index af0dbb28..f0bddbd1 100644 --- a/src/map/SCMap.jsx +++ b/src/map/SCMap.jsx @@ -1,4 +1,4 @@ -import React, { Component, useState, useRef, useEffect } from "react"; +import React, { useState, useRef, useEffect, Fragment } from "react"; import ReactDOM from "react-dom"; // import GitHubButton from "react-github-btn"; import GitHubButton from "../components/sc-github-btn"; @@ -35,6 +35,7 @@ import Identify from "./Identify"; import alertify from "alertifyjs"; import AttributeTable from "../helpers/AttributeTable.jsx"; import FloatingImageSlider from "../helpers/FloatingImageSlider.jsx"; +import { fetchExtensions } from "./extensions/_loader.js"; const SCMap = (props) => { const scaleLineControl = new ScaleLine({ @@ -54,8 +55,20 @@ const SCMap = (props) => { const [gitHubFollowHandle, setGitHubFollowHandle] = useState(null); const [gitHubFollowUrl, setGitHubFollowUrl] = useState(null); const [gitHubFollowHandleLabel, setGitHubFollowHandleLabel] = useState(null); + const extensions = useRef([]); + const propertyClickExtensions = useRef([]); + const rightClickExtensions = useRef([]); + + const addExtension = (fetchData, dataRows, content, arnExtension, actions, order, type) => { + extensions.current.push({ fetchData, dataRows, content, arnExtension, actions, order, type }); + }; useEffect(() => { + fetchExtensions({ addExtension: addExtension }, () => { + extensions.current = helpers.sortByKey(extensions.current.concat([]), "order"); + propertyClickExtensions.current = extensions.current.filter((ext) => ext.type === "property-click"); + rightClickExtensions.current = extensions.current.filter((ext) => ext.type === "right-click"); + }); // LISTEN FOR TOC TO LOAD const tocLoadedListener = window.emitter.addListener("tocLoaded", () => handleUrlParameters()); // LISTEN FOR ATTRIBUTE TABLE SIZE @@ -207,6 +220,10 @@ const SCMap = (props) => { + {rightClickExtensions.current.map((ext) => { + return {ext.content()}; + })} + @@ -484,9 +501,13 @@ const SCMap = (props) => { case "sc-floating-menu-basic-mode": basicMode(); break; + default: break; } + rightClickExtensions.current.forEach((ext) => { + ext.actions({ action: key, geom: new Point(contextCoordsRef.current) }); + }); helpers.addAppStat("Right Click", key); }; @@ -616,7 +637,7 @@ const SCMap = (props) => { - + {window.mapControls && window.mapControls.gitHubButton ? (
    { + const { arn, data } = props; + return new Promise((resolve, reject) => { + resolve({ sample_data: "THIS IS SAMPLE DATA" }); + }); +}; + +export const dataRows = (props) => { + let { arn, rows, area, geom } = props; + + rows.push(); + + return rows; +}; + +export const content = (props) => { + let { arn } = props; + return ( + + ); +}; +export const arnExtension = (props) => { + const { arn } = props; + return ( + Sample Button { + helpers.showMessage("Sample Button Clicked"); + }} + /> + ); +}; + +// IMPORT ALL IMAGES +const images = importAllImages(require.context("../images", false, /\.(png|jpe?g|svg|gif)$/)); +function importAllImages(r) { + let images = {}; + r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); + return images; +} diff --git a/src/map/extensions/_loader.js b/src/map/extensions/_loader.js new file mode 100644 index 00000000..e5672fe2 --- /dev/null +++ b/src/map/extensions/_loader.js @@ -0,0 +1,22 @@ +import config from "./config.json"; +export const fetchExtensions = (props, callback = undefined) => { + let allPromises = []; + config.extensions.forEach((ext) => { + const promise = new Promise((resolve, reject) => { + import(`./${ext.file}`) + .then((item) => { + const { fetchData, dataRows, content, arnExtension, actions } = item; + props.addExtension(fetchData, dataRows, content, arnExtension, actions, config.extensions.indexOf(ext), ext.type); + resolve(); + }) + .catch((error) => { + console.log(error); + }); + }); + allPromises.push(promise); + }); + + Promise.all(allPromises).then(() => { + if (callback) callback(); + }); +}; diff --git a/src/map/extensions/config.json b/src/map/extensions/config.json new file mode 100644 index 00000000..98cd4a6c --- /dev/null +++ b/src/map/extensions/config.json @@ -0,0 +1,3 @@ +{ + "extensions": [] +} diff --git a/src/map/extensions/sample.config.json b/src/map/extensions/sample.config.json new file mode 100644 index 00000000..aa988ca7 --- /dev/null +++ b/src/map/extensions/sample.config.json @@ -0,0 +1,3 @@ +{ + "extensions": [{ "file": "Sample.extension.js", "type": "property-click" }] +} diff --git a/src/reports/PropertyReport.css b/src/reports/PropertyReport.css new file mode 100644 index 00000000..74803793 --- /dev/null +++ b/src/reports/PropertyReport.css @@ -0,0 +1,121 @@ +.sc-property-report-container { + bottom: 0; + top: 0; +} + +.sc-property-report-html-title { + font-size: 18px; + color: #185b82; + border-bottom: 1px solid #bbbbbb; + padding-bottom: 7px; + background-color: #e6e6e6; + color: #4a4a4a; + text-align: center; + padding-top: 6px; + text-shadow: 1px 1px 0px rgba(255, 255, 255, 1); +} + +.sc-property-report-html-container { + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + margin-bottom: 10px; + padding: 5px; + border-radius: 0px 0px 3px 3px; + -moz-border-radius: 0px 0px 3px 3px; + -webkit-border-radius: 0px 0px 3px 3px; + /* color: #666 !important; */ +} + +.sc-property-report-html-heading { + font-size: 12px; + font-weight: bold; + color: #494949; + padding-top: 5px; + padding-left: 5px; + /* border-bottom: 1px solid #DDDDDD; */ + text-transform: uppercase; + /* margin-bottom: 4px; */ + background-color: #dfdfdf; + padding: 6px; + border: 1px solid #ccc; + border-radius: 3px 3px 0px 0px; + -moz-border-radius: 3px 3px 0px 0px; + -webkit-border-radius: 3px 3px 0px 0px; +} + +.sc-property-report-html-heading.icon { + background-repeat: no-repeat; + background-position: 5px 5px; + padding-left: 30px; +} + +.sc-property-report-html-heading.general { + background-image: url("../map/images/information.png"); +} + +.sc-property-report-html-heading.emergency { + background-image: url("../map/images/emergency.png"); +} + +.sc-property-report-html-heading.waste { + background-image: url("../map/images/waste.png"); +} + +.sc-property-report-html-heading.school { + background-image: url("../map/images/school.png"); +} + +.sc-property-report-html-heading.other { + background-image: url("../map/images/other.png"); +} + +.sc-property-report-html-heading.pdf { + background-image: url("../map/images/pdf.png"); +} + +.sc-property-report-html-label { + font-size: 13px; + font-weight: bolder; +} + +.sc-property-report-html-value { + font-size: 12px; + padding-bottom: 2px; + padding-top: 2px; + padding-left: 20px; + background-image: url("../map/images/arrow_curve.gif"); + background-position-y: 1px; + background-repeat: no-repeat; + color: #666 !important; +} + +.sc-property-report-html-value.sub { + padding-left: 30px; + background-position-x: 10px; +} +.sc-property-report-html-value:hover { + color: #ff0000; +} + +.sc-property-report-html-title-address { + border-bottom: 1px solid #d6d6d6; + padding-bottom: 5px; +} + +.sc-property-report-html-title-button-container { + padding-top: 5px; + text-align: center; +} + +.sc-property-report-info-container { + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; +} + +.sc-property-report-html-market { + font-size: 9px; + color: #555; + padding-bottom: 4px !important; +} diff --git a/src/map/PropertyReport.jsx b/src/reports/PropertyReport.jsx similarity index 100% rename from src/map/PropertyReport.jsx rename to src/reports/PropertyReport.jsx diff --git a/src/sidebar/MenuButton.jsx b/src/sidebar/MenuButton.jsx index a29388a0..8a27fbd7 100644 --- a/src/sidebar/MenuButton.jsx +++ b/src/sidebar/MenuButton.jsx @@ -1,6 +1,8 @@ import React, { Component } from "react"; import "./MenuButton.css"; import * as helpers from "../helpers/helpers"; +import { createObjectURL } from "../helpers/api"; + import * as htmlToImage from "html-to-image"; import { transformWithProjections } from "ol/proj"; import { ImMenu3, ImMenu4 } from "react-icons/im"; @@ -24,11 +26,11 @@ class MenuButton extends Component { ); // LISTEN FOR MORE BUTTON - window.emitter.addListener("openMoreMenu", () => this.setState({ isOpen: true })); - + if (window.emitter.listeners("openMoreMenu").length === 0) window.emitter.addListener("openMoreMenu", () => this.setState({ isOpen: true })); //LISTEN FOR SCREENSHOT EVENT - window.emitter.addListener("takeScreenshot", () => this.onScreenshotClick()); - helpers.waitForLoad("settings", Date.now(), 30, () => { + if (window.emitter.listeners("takeScreenshot").length === 0) window.emitter.addListener("takeScreenshot", () => this.onScreenshotClick()); + + helpers.waitForLoad(["settings", "security"], Date.now(), 30, () => { this.themes = this.getThemes(); this.others = this.getOthers(); this.tools = this.getTools(); @@ -40,7 +42,11 @@ class MenuButton extends Component { let itemList = []; itemList.push(); window.config.sidebarToolComponents.forEach((tool) => { - if ((tool.enabled || tool.enabled === undefined) && (tool.disable === false || tool.disable === undefined)) + if ( + (tool.enabled || tool.enabled === undefined) && + (tool.disable === false || tool.disable === undefined) && + (tool.secure === undefined || tool.secure === false || (tool.secure && tool.securityKeywords && tool.securityKeywords.some((keyword) => window.security.includes(keyword)))) + ) itemList.push( this.itemClick(tool.name, "tools")} key={helpers.getUID()} name={tool.name} iconClass={"sc-menu-tools-icon"} />); }); @@ -51,7 +57,11 @@ class MenuButton extends Component { getThemes = () => { let itemList = []; window.config.sidebarThemeComponents.forEach((theme) => { - if ((theme.enabled || theme.enabled === undefined) && (theme.disable === false || theme.disable === undefined)) + if ( + (theme.enabled || theme.enabled === undefined) && + (theme.disable === false || theme.disable === undefined) && + (theme.secure === undefined || theme.secure === false || (theme.secure && theme.securityKeywords && theme.securityKeywords.some((keyword) => window.security.includes(keyword)))) + ) itemList.push( this.itemClick(theme.name, "themes")} key={helpers.getUID()} name={theme.name} iconClass={"sc-menu-theme-icon"} />); }); if (itemList === 0 || (window.config.mainSidebarItems !== undefined && window.config.mainSidebarItems["hideThemes"])) { @@ -108,20 +118,44 @@ class MenuButton extends Component { }; onScreenshotClick = () => { - // console.log("MenuButton - onScreenshotClick"); - window.map.once("rendercomplete", function () { - htmlToImage.toBlob(window.map.getTargetElement()).then(function (blob) { - if (navigator.msSaveBlob) { - navigator.msSaveBlob(blob, "map.png"); - } else { - const elem = window.document.createElement("a"); - elem.href = window.URL.createObjectURL(blob); - elem.download = "map.png"; - document.body.appendChild(elem); - elem.click(); - document.body.removeChild(elem); + //https://openlayers.org/en/latest/examples/export-map.html + window.map.once("rendercomplete", function (event) { + const mapCanvas = document.createElement("canvas"); + const size = window.map.getSize(); + mapCanvas.width = size[0]; + mapCanvas.height = size[1]; + const mapContext = mapCanvas.getContext("2d"); + Array.prototype.forEach.call(window.map.getViewport().querySelectorAll(".ol-layer canvas, canvas.ol-layer"), function (canvas) { + if (canvas.width > 0) { + const opacity = canvas.parentNode.style.opacity || canvas.style.opacity; + mapContext.globalAlpha = opacity === "" ? 1 : Number(opacity); + let matrix; + const transform = canvas.style.transform; + if (transform) { + // Get the transform parameters from the style's transform matrix + matrix = transform + .match(/^matrix\(([^\(]*)\)$/)[1] + .split(",") + .map(Number); + } else { + matrix = [parseFloat(canvas.style.width) / canvas.width, 0, 0, parseFloat(canvas.style.height) / canvas.height, 0, 0]; + } + // Apply the transform to the export map context + CanvasRenderingContext2D.prototype.setTransform.apply(mapContext, matrix); + const backgroundColor = canvas.parentNode.style.backgroundColor; + if (backgroundColor) { + mapContext.fillStyle = backgroundColor; + mapContext.fillRect(0, 0, canvas.width, canvas.height); + } + mapContext.drawImage(canvas, 0, 0); } }); + mapContext.globalAlpha = 1; + mapContext.setTransform(1, 0, 0, 1, 0, 0); + const link = document.createElement("a"); + link.download = "map.png"; + link.href = mapCanvas.toDataURL(); + link.click(); }); window.map.renderSync(); diff --git a/src/sidebar/Sidebar.jsx b/src/sidebar/Sidebar.jsx index 31bf2607..599c4488 100644 --- a/src/sidebar/Sidebar.jsx +++ b/src/sidebar/Sidebar.jsx @@ -9,7 +9,6 @@ import Reports from "./components/reports/Reports"; import MyMaps from "./components/mymaps/MyMaps"; import { Tab, Tabs, TabList, TabPanel } from "react-tabs"; import "react-tabs/style/react-tabs.css"; -// import SidebarComponent from "react-sidebar"; import SidebarComponent from "../components/sc-sidebar.jsx"; import SidebarSlim from "./SidebarSlim.jsx"; import MenuButton from "./MenuButton.jsx"; diff --git a/src/sidebar/SidebarItemList.css b/src/sidebar/SidebarItemList.css index 5852fc2f..8728cbdd 100644 --- a/src/sidebar/SidebarItemList.css +++ b/src/sidebar/SidebarItemList.css @@ -1,50 +1,56 @@ .simcoe-sidebarlist-item { - cursor: pointer; - border-bottom: 1px solid #ccc; - min-height: 72px; - padding: 5px; - border-radius: 2px; - color: #505050; - margin-top: 5px; + cursor: pointer; + border-bottom: 1px solid #ccc; + min-height: 72px; + padding: 5px; + border-radius: 2px; + color: #505050; + margin-top: 5px; } .simcoe-sidebarlist-item-icon { - text-align: center; - opacity: 0.7; - padding-top: 3px; + text-align: center; + opacity: 0.7; + padding-top: 3px; } .simcoe-sidebarlist-item-iconbackground { - float: left; - width: 60px; - height: 60px; - border: 1px solid #ccc; - text-align: center; - padding-top: 5px; - border-radius: 3px; - background: linear-gradient(to bottom, rgba(242, 245, 246, 1) 0%, rgba(230, 230, 230, 1) 100%); + float: left; + width: 60px; + height: 60px; + border: 1px solid #ccc; + text-align: center; + padding-top: 5px; + border-radius: 3px; + background: linear-gradient(to bottom, rgba(242, 245, 246, 1) 0%, rgba(230, 230, 230, 1) 100%); } .simcoe-sidebarlist-item-text-container { - margin-left: 75px; + margin-left: 75px; } .simcoe-sidebarlist-item-text-title { - font-size: 15px; - font-weight: bold; - color: #616161; + font-size: 15px; + font-weight: bold; + color: #616161; } .simcoe-sidebarlist-item-text-description { - font-size: 10px; - color: #777; - padding-left: 18px; - background-image: url(./images/arrow_curve.gif); - background-repeat: no-repeat; - padding-right: 5px; + font-size: 10px; + color: #777; + padding-left: 18px; + background-image: url(./images/arrow_curve.gif); + background-repeat: no-repeat; + padding-right: 5px; } .simcoe-sidebarlist-container { - position: absolute; - top: 66px; - bottom: 0px; - overflow-y: auto; + position: absolute; + top: 66px; + bottom: 0px; + overflow-y: auto; +} + +.simcoe-tool-secured-icon { + display: table-column; + margin-bottom: -15px; + margin-left: -5px; } diff --git a/src/sidebar/SidebarItemList.jsx b/src/sidebar/SidebarItemList.jsx index 864584fb..3dfca5e6 100644 --- a/src/sidebar/SidebarItemList.jsx +++ b/src/sidebar/SidebarItemList.jsx @@ -1,26 +1,31 @@ -import React, { Component } from "react"; +import React, { Component, useRef, useState } from "react"; import * as helpers from "../helpers/helpers"; import "./SidebarItemList.css"; -class SidebarItemList extends Component { - constructor(props) { - super(props); +import { useEffect } from "react"; +const SidebarItemList = (props) => { + const [components, setComponents] = useState([]); + const [isLoaded, setIsLoaded] = useState(false); + const [listtype, setListType] = useState(props.listtype); - // BIND THIS TO THE CLICK FUNCTION - this.buttonClick = this.buttonClick.bind(this); - - this.state = { - components: [], + const buttonClick = (name) => { + props.onTabClick(name); + }; + useEffect(() => { + return () => { + setComponents([]); }; - } + }, []); + useEffect(() => { + if (props.listtype !== listtype) { + setListType(props.listtype); + setIsLoaded(false); + } + }, [props.listtype]); - buttonClick(name) { - //PARENT HANDLES THE REST - this.props.onTabClick(name); - } - componentDidMount() { - helpers.waitForLoad(["settings", "sidebar"], Date.now(), 30, () => { + useEffect(() => { + helpers.waitForLoad(["settings", "sidebar", "security"], Date.now(), 30, () => { let listItems = null; - if (this.props.listtype === "tools") { + if (listtype === "tools") { let tools = window.config.sidebarToolComponents; listItems = tools.filter((item) => item.enabled === undefined || item.enabled); } else { @@ -28,60 +33,61 @@ class SidebarItemList extends Component { let themes = window.config.sidebarThemeComponents; listItems = themes.filter((item) => item.enabled === undefined || item.enabled); } - this.setState({ components: listItems }, () => { - helpers.addIsLoaded("toolsAndThemes"); + listItems = listItems.filter((item) => { + if (item.disable) return false; + else if (item.secure === undefined || !item.secure) return true; + else if (item.secure && item.securityKeywords !== undefined) { + return item.securityKeywords.some((keyword) => window.security.includes(keyword)); + } else return true; }); + setComponents(listItems); + setIsLoaded(true); }); - } - - render() { - // GET LIST OF COMPONENTS FROM CONFIG - return ( -
    - { - // CREATE ITEMS FROM CONFIG - this.state.components.map((listItem) => { - // SKIP IF ITS DISABLED - if (listItem.disable !== undefined && listItem.disable) return null; - return ( - this.props.onClick(listItem.name, this.props.listtype)} - key={helpers.getUID()} - id={listItem.id} - name={listItem.name} - imageName={listItem.imageName} - description={listItem.description} - /> - ); - }) - } -
    - ); - } -} + }, [listtype]); + return ( +
    + { + // CREATE ITEMS FROM CONFIG + components.map((listItem) => { + // SKIP IF ITS DISABLED + if (listItem.disable !== undefined && listItem.disable) return null; + return ( + props.onClick(listItem.name, props.listtype)} + key={helpers.getUID()} + id={listItem.id} + name={listItem.name} + imageName={listItem.imageName} + description={listItem.description} + secure={listItem.secure} + securityKeywords={listItem.securityKeywords} + /> + ); + }) + } +
    + ); +}; export default SidebarItemList; // ITEM -class ToolItem extends Component { - state = {}; - - render() { - return ( -
    -
    -
    - Tool Item -
    -
    -
    {this.props.name}
    -
    {this.props.description}
    -
    +const ToolItem = (props) => { + return ( +
    + secured +
    +
    + Tool Item
    - ); - } -} +
    +
    {props.name}
    +
    {props.description}
    +
    +
    + ); +}; //IMPORT ALL IMAGES const images = importAllImages(require.context("./images", false, /\.(png|jpe?g|svg)$/)); diff --git a/src/sidebar/components/mymaps/FeatureReportPopup.jsx b/src/sidebar/components/mymaps/FeatureReportPopup.jsx index 61e3479d..5855f991 100644 --- a/src/sidebar/components/mymaps/FeatureReportPopup.jsx +++ b/src/sidebar/components/mymaps/FeatureReportPopup.jsx @@ -1,7 +1,6 @@ import React, { Component } from "react"; import "./FeatureReportPopup.css"; import * as helpers from "../../../helpers/helpers"; -import mainConfig from "../../../config.json"; import LoadingScreen from "../../../helpers/LoadingScreen.jsx"; import * as drawingHelpers from "../../../helpers/drawingHelpers"; import InfoRow from "../../../helpers/InfoRow.jsx"; diff --git a/src/sidebar/components/mymaps/MyMaps.jsx b/src/sidebar/components/mymaps/MyMaps.jsx index c45a780e..46b04d22 100644 --- a/src/sidebar/components/mymaps/MyMaps.jsx +++ b/src/sidebar/components/mymaps/MyMaps.jsx @@ -1,5 +1,5 @@ // REACT -import React, { Component } from "react"; +import React, { Component, Fragment } from "react"; import ReactDOM from "react-dom"; import { CSSTransition, TransitionGroup } from "react-transition-group"; import { SubMenu, Item as MenuItem } from "rc-menu"; @@ -34,17 +34,17 @@ import { fromCircle } from "ol/geom/Polygon.js"; import MyMapsAdvanced from "./MyMapsAdvanced"; import Overlay from "ol/Overlay.js"; import { getLength } from "ol/sphere.js"; - -const feedbackTemplate = (feedbackUrl, xmin, xmax, ymin, ymax, centerx, centery, scale, myMapsId, featureId) => - `${feedbackUrl}/?xmin=${xmin}&xmax=${xmax}&ymin=${ymin}&ymax=${ymax}¢erx=${centerx}¢ery=${centery}&scale=${scale}&REPORT_PROBLEM=True&MY_MAPS_ID=${myMapsId}&MY_MAPS_FEATURE_ID=${featureId}`; +import { fetchExtensions } from "./extensions/_loader.js"; class MyMaps extends Component { constructor(props) { super(props); + helpers.waitForLoad("settings", Date.now(), 30, () => { this.storageKey = window.config.storageKeys.Draw; }); // PROPS + this._isMounted = false; this.layerName = "local:myMaps"; this.vectorSource = null; this.vectorLayer = null; @@ -57,6 +57,10 @@ class MyMaps extends Component { this.bearing = null; this.length = null; this.currentDrawFeature = null; + this.extensions = []; + this.popupExtensions = []; + this.menuExtensions = []; + this.advancedExtensions = []; this.state = { drawType: "Cancel", drawColor: "#e809e5", @@ -74,10 +78,20 @@ class MyMaps extends Component { // LISTEN FOR OTHER COMPONENTS ADDING A FEATURE window.emitter.addListener("addMyMapsFeature", (feature, labelText) => this.addNewItem(feature, labelText, true)); } - + addExtension = (component, action, order, type) => { + this.extensions.push({ component, action, order, type }); + }; componentDidMount() { helpers.waitForLoad(["settings", "map"], Date.now(), 30, () => { - helpers.addIsLoaded("mymap"); + if (!this._isMounted) + fetchExtensions({ addExtension: this.addExtension }, () => { + this.extensions = helpers.sortByKey(this.extensions.concat([]), "order"); + this.popupExtensions = this.extensions.filter((ext) => ext.type === "popup"); + this.menuExtensions = this.extensions.filter((ext) => ext.type === "menu-item"); + this.advancedExtensions = this.extensions.filter((ext) => ext.type === "advanced"); + this._isMounted = true; + helpers.addIsLoaded("mymap"); + }); }); } @@ -711,8 +725,7 @@ class MyMaps extends Component { let geom = feature.getGeometry(); if (geom === undefined) return; helpers.getGeometryCenter(geom, (featureCenter) => { - window.popup.hide(); - // SHOW POPUP + window.popup.hide(); // SHOW POPUP window.popup.show( featureCenter.flatCoordinates, , "Drawing Options", () => { @@ -746,7 +760,6 @@ class MyMaps extends Component { } else { center = evt.coordinate; window.popup.hide(); - // SHOW POPUP window.popup.show( center, @@ -771,6 +784,7 @@ class MyMaps extends Component { onStrokeWidthSliderChange={this.onStrokeWidthSliderChange} onStrokeTypeDropDown={this.onStrokeTypeDropDown} onMyMapItemToolsButtonClick={this.onMyMapItemToolsButtonClick} + extensions={this.popupExtensions} />, "Drawing Options", () => { @@ -833,9 +847,6 @@ class MyMaps extends Component { case "sc-floating-menu-edit-vertices": this.editVertices(item.id); break; - case "sc-floating-menu-report-problem": - this.onReportProblem(item.id); - break; case "sc-floating-menu-identify": this.onIdentify(item.id); break; @@ -873,6 +884,9 @@ class MyMaps extends Component { default: break; } + this.menuExtensions.forEach((ext) => { + ext.action({ parent: this, action, item }); + }); // APP STATS helpers.addAppStat("MyMaps Menu", action); }; @@ -945,32 +959,11 @@ class MyMaps extends Component { window.emitter.emit("loadReport", ); }; - onReportProblem = (id) => { - drawingHelpers.exportMyMaps((result) => { - // APP STATS - helpers.waitForLoad("settings", Date.now(), 30, () => { - helpers.addAppStat("Report Problem", "My Maps Toolbox"); - - const scale = helpers.getMapScale(); - const extent = window.map.getView().calculateExtent(window.map.getSize()); - const xmin = extent[0]; - const xmax = extent[1]; - const ymin = extent[2]; - const ymax = extent[3]; - const center = window.map.getView().getCenter(); - - let feedbackUrl = feedbackTemplate(window.config.feedbackUrl, xmin, xmax, ymin, ymax, center[0], center[1], scale, result.id, id); - if (window.config.mapId !== null && window.config.mapId !== undefined && window.config.mapId.trim() !== "") feedbackUrl += "&MAP_ID=" + window.config.mapId; - - helpers.showURLWindow(feedbackUrl, false, "full"); - }); - }, id); - }; - onMyMapItemToolsButtonClick = (evt, item) => { var evtClone = Object.assign({}, evt); const feature = helpers.getFeatureFromGeoJSON(item.featureGeoJSON); const showCoordinates = feature.get("is_open_data"); + const menu = ( - - - + {this.menuExtensions.map((extension) => { + return {extension.component()}; + })} ); @@ -1250,6 +1240,7 @@ class MyMaps extends Component { return (
    + @@ -1277,6 +1268,7 @@ class MyMaps extends Component { onDeleteAllClick={this.onDeleteAllClick} onMyMapsImport={this.onMyMapsImport} hasItems={this.state.items && this.state.items.length > 0} + extensions={this.advancedExtensions || []} />
    diff --git a/src/sidebar/components/mymaps/MyMapsAdvanced.jsx b/src/sidebar/components/mymaps/MyMapsAdvanced.jsx index 45d06358..d8ee7a41 100644 --- a/src/sidebar/components/mymaps/MyMapsAdvanced.jsx +++ b/src/sidebar/components/mymaps/MyMapsAdvanced.jsx @@ -1,4 +1,4 @@ -import React, { Component } from "react"; +import React, { useState, useRef, useEffect, Fragment } from "react"; import "./MyMapsAdvanced.css"; import MyMapsFooter from "./MyMapsFooter.jsx"; import Collapsible from "react-collapsible"; @@ -7,52 +7,53 @@ import * as helpers from "../../../helpers/helpers"; import * as drawingHelpers from "../../../helpers/drawingHelpers"; import copy from "copy-to-clipboard"; -class MyMapsAdvanced extends Component { - constructor(props) { - super(props); +const MyMapsAdvanced = (props) => { + const [open, setOpen] = useState(false); + const [editOn, setEditOn] = useState(false); + const [editOption, setEditOption] = useState("vertices"); + const [inputText, setInputText] = useState(""); + const [copied, setCopied] = useState(false); + const extensions = useRef([]); + const inputId = "sc-mymaps-advanced-import-input sc-editable"; - this.inputId = "sc-mymaps-advanced-import-input sc-editable"; - this.state = { - open: false, - editOn: false, - editOption: "vertices", - inputText: "", - }; - } - - onSwitchChange = (editOn) => { - this.setState({ editOn }); + useEffect(() => { + if (props.extensions) { + extensions.current = props.extensions; + } + }, [props.extensions]); + const onSwitchChange = (editOn) => { + setEditOn(editOn); helpers.addAppStat("Edit Features Switch", "Click"); - this.props.onEditFeatures(editOn, this.state.editOption); + props.onEditFeatures(editOn, editOption); }; - onEditOption = (evt) => { - this.setState({ editOption: evt.currentTarget.value }); - this.props.onEditFeatures(this.state.editOn, evt.currentTarget.value); + const onEditOption = (evt) => { + setEditOption(evt.currentTarget.value); + props.onEditFeatures(editOn, evt.currentTarget.value); }; - onImport = () => { + const onImport = () => { // BASIC CHECKING - if (this.state.inputText.length !== 36) { + if (inputText.length !== 36) { helpers.showMessage("MyMaps Import", "Invalid ID was entered.", helpers.messageColors.red); return; } - drawingHelpers.importMyMaps(this.state.inputText, (result) => { + drawingHelpers.importMyMaps(inputText, (result) => { if (result.error !== undefined) helpers.showMessage("MyMaps Import", "That MyMaps ID was NOT found!", helpers.messageColors.red); else { helpers.showMessage("MyMaps Import", "Success! MyMaps imported."); - this.props.onMyMapsImport(result); + props.onMyMapsImport(result); } }); }; - onShare = () => { - if (this.state.inputText.length !== 36) { + const onShare = () => { + if (inputText.length !== 36) { helpers.showMessage("MyMaps Share", "Invalid ID was entered.", helpers.messageColors.red); return; } - let currentUrl = `${window.location.href.split("?")[0]}?MY_MAPS_ID=${this.state.inputText}`; + let currentUrl = `${window.location.href.split("?")[0]}?MY_MAPS_ID=${inputText}`; copy(currentUrl); helpers.showMessage("MyMaps Share", "MyMaps link has been saved to clipboard.", helpers.messageColors.green, 5000); @@ -60,14 +61,14 @@ class MyMapsAdvanced extends Component { helpers.addAppStat("MyMaps", "Share"); }; - onSave = () => { - if (!this.props.hasItems) helpers.showMessage("MyMaps Save", "Cannot save MyMaps! No Items Found! ", helpers.messageColors.yellow, 5000); + const onSave = () => { + if (!props.hasItems) helpers.showMessage("MyMaps Save", "Cannot save MyMaps! No Items Found! ", helpers.messageColors.yellow, 5000); else { - this.setState({ copied: true }); + setCopied(true); drawingHelpers.exportMyMaps((result) => { helpers.showMessage("MyMaps Save", "MyMaps have been saved! Your ID has been saved to clipboard.", helpers.messageColors.green, 5000); - helpers.glowContainer(this.inputId); - this.setState({ inputText: result.id }); + helpers.glowContainer(inputId); + setInputText(result.id); copy(result.id); }); } @@ -75,67 +76,71 @@ class MyMapsAdvanced extends Component { helpers.addAppStat("MyMaps", "Save"); }; - onInputChange = (evt) => { - this.setState({ inputText: evt.target.value }); + const onInputChange = (evt) => { + setInputText(evt.target.value); }; - - render() { - return ( -
    - -
    -
    - -
    - { - helpers.disableKeyboardEvents(true); - }} - onBlur={(evt) => { - helpers.disableKeyboardEvents(false); - }} - value={this.state.inputText} - /> -
    - - - -
    -
    -
    - {/* */} - - - - + const Extensions = (props) => { + if (!extensions.current) return <>; + return extensions.current.map((ext) => { + return {ext.component({ ...props, inputText: inputText })}; + }); + }; + return ( +
    + +
    +
    + +
    + { + helpers.disableKeyboardEvents(true); + }} + onBlur={(evt) => { + helpers.disableKeyboardEvents(false); + }} + value={inputText} + /> +
    + + + +
    +
    +
    + {/* */} + - + +
    - -
    - ); - } -} + + +
    + +
    + ); +}; export default MyMapsAdvanced; diff --git a/src/sidebar/components/mymaps/MyMapsFooter.jsx b/src/sidebar/components/mymaps/MyMapsFooter.jsx index a503a951..6d7b23a8 100644 --- a/src/sidebar/components/mymaps/MyMapsFooter.jsx +++ b/src/sidebar/components/mymaps/MyMapsFooter.jsx @@ -7,67 +7,67 @@ import Portal from "../../../helpers/Portal.jsx"; import { SubMenu, Item as MenuItem, Divider } from "rc-menu"; const MyMapsFooter = (props) => { - // USE HOOKS - //const [activeColor, setActiveColor] = useState("#e809e5"); - //const [activeColor, setActiveColor] = useState(props.activeColor); + // USE HOOKS + //const [activeColor, setActiveColor] = useState("#e809e5"); + //const [activeColor, setActiveColor] = useState(props.activeColor); - // PARENT CHANGES THE COLOR FROM STORAGE - //useEffect(() => {}); - function onToolsClick(evt) { - var evtClone = Object.assign({}, evt); - const menu = ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ); + // PARENT CHANGES THE COLOR FROM STORAGE + //useEffect(() => {}); + function onToolsClick(evt) { + var evtClone = Object.assign({}, evt); + const menu = ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); - ReactDOM.render(menu, document.getElementById("portal-root")); - } + ReactDOM.render(menu, document.getElementById("portal-root")); + } - return ( -
    - - -
    - ); + return ( +
    + + +
    + ); }; export default MyMapsFooter; diff --git a/src/sidebar/components/mymaps/MyMapsPopup.jsx b/src/sidebar/components/mymaps/MyMapsPopup.jsx index a04e7c11..b8efddd4 100644 --- a/src/sidebar/components/mymaps/MyMapsPopup.jsx +++ b/src/sidebar/components/mymaps/MyMapsPopup.jsx @@ -36,6 +36,9 @@ const MyMapsPopup = (props) => { /> + {props.extensions.map((ext) => { + return ext.component(props); + })} props.onMyMapItemToolsButtonClick(evt, props.item)} onDeleteButtonClick={() => { diff --git a/src/sidebar/components/mymaps/extensions/ReportProblem.extension.js b/src/sidebar/components/mymaps/extensions/ReportProblem.extension.js new file mode 100644 index 00000000..cb3609e7 --- /dev/null +++ b/src/sidebar/components/mymaps/extensions/ReportProblem.extension.js @@ -0,0 +1,51 @@ +import { Item as MenuItem } from "rc-menu"; +import { FloatingMenuItem } from "../../../../helpers/FloatingMenu.jsx"; +import * as drawingHelpers from "../../../../helpers/drawingHelpers"; +import * as helpers from "../../../../helpers/helpers.js"; + +const onReportProblem = (id) => { + const feedbackTemplate = (feedbackUrl, xmin, xmax, ymin, ymax, centerx, centery, scale, myMapsId, featureId) => + `${feedbackUrl}/?xmin=${xmin}&xmax=${xmax}&ymin=${ymin}&ymax=${ymax}¢erx=${centerx}¢ery=${centery}&scale=${scale}&REPORT_PROBLEM=True&MY_MAPS_ID=${myMapsId}&MY_MAPS_FEATURE_ID=${featureId}`; + + drawingHelpers.exportMyMaps((result) => { + // APP STATS + helpers.waitForLoad("settings", Date.now(), 30, () => { + helpers.addAppStat("Report Problem", "My Maps Toolbox"); + + const scale = helpers.getMapScale(); + const extent = window.map.getView().calculateExtent(window.map.getSize()); + const xmin = extent[0]; + const xmax = extent[1]; + const ymin = extent[2]; + const ymax = extent[3]; + const center = window.map.getView().getCenter(); + + let feedbackUrl = feedbackTemplate(window.config.feedbackUrl, xmin, xmax, ymin, ymax, center[0], center[1], scale, result.id, id); + if (window.config.mapId !== null && window.config.mapId !== undefined && window.config.mapId.trim() !== "") feedbackUrl += "&MAP_ID=" + window.config.mapId; + + helpers.showURLWindow(feedbackUrl, false, "full"); + }); + }, id); +}; + +export const action = (props) => { + const { action, item } = props; + switch (action) { + case "sc-floating-menu-report-problem": + onReportProblem(item.id); + break; + default: + break; + } +}; + +export const component = (props) => { + return ( + + + + ); +}; diff --git a/src/sidebar/components/mymaps/extensions/_loader.js b/src/sidebar/components/mymaps/extensions/_loader.js new file mode 100644 index 00000000..76c8ec65 --- /dev/null +++ b/src/sidebar/components/mymaps/extensions/_loader.js @@ -0,0 +1,22 @@ +import config from "./config.json"; +export const fetchExtensions = (props, callback = undefined) => { + let allPromises = []; + config.extensions.forEach((ext) => { + const promise = new Promise((resolve, reject) => { + import(`./${ext.file}`) + .then((item) => { + const { component, action } = item; + props.addExtension(component, action, config.extensions.indexOf(ext), ext.type); + resolve(); + }) + .catch((error) => { + console.log(error); + }); + }); + allPromises.push(promise); + }); + + Promise.all(allPromises).then(() => { + if (callback) callback(); + }); +}; diff --git a/src/sidebar/components/mymaps/extensions/config.json b/src/sidebar/components/mymaps/extensions/config.json new file mode 100644 index 00000000..0107c15a --- /dev/null +++ b/src/sidebar/components/mymaps/extensions/config.json @@ -0,0 +1,3 @@ +{ + "extensions": [{ "type": "menu-item", "file": "ReportProblem.extension.js" }] +} diff --git a/src/sidebar/components/themes/commercialrealestate/CommercialRealEstate.jsx b/src/sidebar/components/themes/commercialrealestate/CommercialRealEstate.jsx index 763fccfb..62a21444 100644 --- a/src/sidebar/components/themes/commercialrealestate/CommercialRealEstate.jsx +++ b/src/sidebar/components/themes/commercialrealestate/CommercialRealEstate.jsx @@ -119,7 +119,7 @@ class CommercialRealEstate extends Component { buildLayers = () => { let layers = {}; - const serverUrl = window.config.geoserverUrl + "wms/"; + const serverUrl = localConfig.geoserverUrl + "wms/"; propTypes.forEach((propType) => { const wmsPointLayer = helpers.getImageWMSLayer(serverUrl, pointLayerName, "geoserver", "_proptype = '" + propType + "'", 200, true); @@ -242,15 +242,20 @@ class CommercialRealEstate extends Component { this.setState({ activeTab }); }; setNumRecords = () => { - const serverUrl = window.config.geoserverUrl + "wms/"; + const serverUrl = localConfig.geoserverUrl + "wms/"; const extent = window.map.getView().calculateExtent(); this.setState({ numRecords: 0, allResults: [] }, () => { propTypes.forEach((propType) => { const params = this.state.layers[propType].pointLayer.getSource().getParams(); helpers.getWFSGeoJSON( - serverUrl, - "simcoe:Economic_Development_Property_Listings_Polygon_Theme", + { + serverUrl: serverUrl, + layerName: "simcoe:Economic_Development_Property_Listings_Polygon_Theme", + sortField: "Incentive+D", + extent: this.state.onlyInMapChecked ? extent : null, + cqlFilter: params.cql_filter, + }, (result) => { if (result.length === 0) return; @@ -258,10 +263,7 @@ class CommercialRealEstate extends Component { numRecords: prevState.numRecords + result.length, allResults: prevState.allResults.concat(result), })); - }, - "Incentive+D", - this.state.onlyInMapChecked ? extent : null, - params.cql_filter + } ); }); }); diff --git a/src/sidebar/components/themes/commercialrealestate/CommercialRealEstateLayerToggler.jsx b/src/sidebar/components/themes/commercialrealestate/CommercialRealEstateLayerToggler.jsx index f8187ba1..c6a1a58a 100644 --- a/src/sidebar/components/themes/commercialrealestate/CommercialRealEstateLayerToggler.jsx +++ b/src/sidebar/components/themes/commercialrealestate/CommercialRealEstateLayerToggler.jsx @@ -3,6 +3,8 @@ import * as helpers from "../../../../helpers/helpers"; import Collapsible from "react-collapsible"; import information from "./images/information.png"; import url from "url"; +import ThemePopupContent from "../themeComponents/ThemePopupContent.jsx"; +import GeoJSON from "ol/format/GeoJSON.js"; import { unByKey } from "ol/Observable.js"; class CommercialRealEstateLayerToggler extends Component { @@ -25,7 +27,7 @@ class CommercialRealEstateLayerToggler extends Component { const styleUrl = styleUrlTemplate(this.props.layer.serverUrl, this.props.layer.layerName); // RECORD COUNT - helpers.getWFSLayerRecordCount(this.props.layer.serverUrl, this.props.layer.layerName, (count) => { + helpers.getWFSLayerRecordCount({ serverUrl: this.props.layer.serverUrl, layerName: this.props.layer.layerName }, (count) => { this.setState({ recordCount: count, styleUrl: styleUrl }); // this.setState({ styleUrl: styleUrl }); }); diff --git a/src/sidebar/components/themes/commercialrealestate/CommercialRealEstateResults.jsx b/src/sidebar/components/themes/commercialrealestate/CommercialRealEstateResults.jsx index 69047dbe..34d430eb 100644 --- a/src/sidebar/components/themes/commercialrealestate/CommercialRealEstateResults.jsx +++ b/src/sidebar/components/themes/commercialrealestate/CommercialRealEstateResults.jsx @@ -3,87 +3,87 @@ import InfoRow from "../../../../helpers/InfoRow.jsx"; import * as helpers from "../../../../helpers/helpers"; const CommercialRealEstateResults = (props) => { - return ( -
    -
    - Back To Search - -
    -
    - {props.results.map((result) => { - return ; - })} -
    -
    - Didn't find what you're looking for? Contact our{" "} - - economic development department - {" "} - for a custom search. -
    -
    - ); + return ( +
    +
    + Back To Search + +
    +
    + {props.results.map((result) => { + return ; + })} +
    +
    + Didn't find what you're looking for? Contact our{" "} + + economic development department + {" "} + for a custom search. +
    +
    + ); }; export default CommercialRealEstateResults; const Result = (props) => { - const { result } = props; - return ( -
    - incentive -
    -
    - {result.get("Address")} { - e.target.onerror = null; - e.target.src = images["noPhoto.png"]; - }} - /> - -
    -
    - - - -
    -
    -
    - + +
    +
    +
    +
    + ); }; // IMPORT ALL IMAGES const images = importAllImages(require.context("./images", false, /\.(png|jpe?g|svg|gif)$/)); function importAllImages(r) { - let images = {}; - r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); - return images; + let images = {}; + r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); + return images; } diff --git a/src/sidebar/components/themes/commercialrealestate/config.json b/src/sidebar/components/themes/commercialrealestate/config.json index 3621ff30..66a9a9d0 100644 --- a/src/sidebar/components/themes/commercialrealestate/config.json +++ b/src/sidebar/components/themes/commercialrealestate/config.json @@ -1,40 +1,41 @@ { - "incentiveWfsUrl": "https://opengis.simcoe.ca/geoserver/wfs?service=wfs&version=2.0.0&request=GetFeature&typeNames=simcoe:Economic_Development_Property_Listings_Polygon_Theme&outputFormat=application/json&cql_filter=Incentive=%27Yes%27%20AND%20_imageurl%20IS%20NOT%20NULL", - "polygonLayerName": "simcoe:Economic_Development_Property_Listings_Polygon_Theme", - "pointLayerName": "simcoe:Economic_Development_Property_Listings_Theme", - "toggleLayers": [ - { - "serverUrl": "https://opengis.simcoe.ca/geoserver/", - "layerName": "simcoe:Economic Employment Districts", - "displayName": "Provincially Designated Employment Land", - "clickable": true, - "legendStyleName": "", - "visible": true, - "zIndex": 209, - "expanded": false, - "description": "" - }, - { - "serverUrl": "https://opengis.simcoe.ca/geoserver/", - "layerName": "simcoe:Economic_Development_Business_Improvement_Area", - "displayName": "Business Improvement Area", - "clickable": true, - "legendStyleName": "", - "visible": true, - "zIndex": 208, - "expanded": false, - "description": "Housing Support Agencies help people who are looking for affordable rental housing or at risk of losing their current housing. Housing Support Agencies can help you learn what is available in the County to help you obtain and retain housing." - }, - { - "serverUrl": "https://opengis.simcoe.ca/geoserver/", - "layerName": "simcoe:Economic_Development_Municipal_Incentives", - "displayName": "Municipal Incentives", - "clickable": true, - "legendStyleName": "", - "visible": true, - "zIndex": 207, - "expanded": false, - "description": "Employment Ontario Employment Services are available across the County of Simcoe to help newcomers look for a job, plan their careers, explore starting their own business and obtain referrals to community programs and services." - } - ] + "incentiveWfsUrl": "https://opengis.simcoe.ca/geoserver/wfs?service=wfs&version=2.0.0&request=GetFeature&typeNames=simcoe:Economic_Development_Property_Listings_Polygon_Theme&outputFormat=application/json&cql_filter=Incentive=%27Yes%27%20AND%20_imageurl%20IS%20NOT%20NULL", + "polygonLayerName": "simcoe:Economic_Development_Property_Listings_Polygon_Theme", + "pointLayerName": "simcoe:Economic_Development_Property_Listings_Theme", + "geoserverUrl": "https://opengis.simcoe.ca/geoserver/", + "toggleLayers": [ + { + "serverUrl": "https://opengis.simcoe.ca/geoserver/", + "layerName": "simcoe:Economic Employment Districts", + "displayName": "Provincially Designated Employment Land", + "clickable": true, + "legendStyleName": "", + "visible": true, + "zIndex": 209, + "expanded": false, + "description": "" + }, + { + "serverUrl": "https://opengis.simcoe.ca/geoserver/", + "layerName": "simcoe:Economic_Development_Business_Improvement_Area", + "displayName": "Business Improvement Area", + "clickable": true, + "legendStyleName": "", + "visible": true, + "zIndex": 208, + "expanded": false, + "description": "Housing Support Agencies help people who are looking for affordable rental housing or at risk of losing their current housing. Housing Support Agencies can help you learn what is available in the County to help you obtain and retain housing." + }, + { + "serverUrl": "https://opengis.simcoe.ca/geoserver/", + "layerName": "simcoe:Economic_Development_Municipal_Incentives", + "displayName": "Municipal Incentives", + "clickable": true, + "legendStyleName": "", + "visible": true, + "zIndex": 207, + "expanded": false, + "description": "Employment Ontario Employment Services are available across the County of Simcoe to help newcomers look for a job, plan their careers, explore starting their own business and obtain referrals to community programs and services." + } + ] } diff --git a/src/sidebar/components/themes/five11livefeeds/Five11LayerToggler.jsx b/src/sidebar/components/themes/five11livefeeds/Five11LayerToggler.jsx index 42f50cd2..af50d857 100644 --- a/src/sidebar/components/themes/five11livefeeds/Five11LayerToggler.jsx +++ b/src/sidebar/components/themes/five11livefeeds/Five11LayerToggler.jsx @@ -22,7 +22,7 @@ function importAllImages(r) { class Five11LayerToggler extends Component { constructor(props) { super(props); - + this._loaded = false; // STYLES this.styles = { lineJamLayer: new Style({ @@ -54,7 +54,13 @@ class Five11LayerToggler extends Component { }; } + componentDidMount() { + this._loaded = true; + } + componentWillUnmount() { + this._loaded = false; + // CLEAN UP window.map.removeLayer(this.state.layer); unByKey(this.mapClickEvent); @@ -99,7 +105,7 @@ class Five11LayerToggler extends Component { }); layer.getSource().addFeatures(geoJSON); this.setState({ recordCount: geoJSON.length }); - window.map.addLayer(layer); + if (this._loaded) window.map.addLayer(layer); }); return layer; diff --git a/src/sidebar/components/themes/five11livefeeds/Five11LiveFeeds.jsx b/src/sidebar/components/themes/five11livefeeds/Five11LiveFeeds.jsx index 102258e6..34e5d0fb 100644 --- a/src/sidebar/components/themes/five11livefeeds/Five11LiveFeeds.jsx +++ b/src/sidebar/components/themes/five11livefeeds/Five11LiveFeeds.jsx @@ -5,6 +5,7 @@ import PanelComponent from "../../../PanelComponent"; import * as config from "./config.json"; import Five11LayerToggler from "./Five11LayerToggler.jsx"; import { InfoRow } from "../../../../helpers/InfoRow.jsx"; +import { unByKey } from "ol/Observable.js"; class ThemeComponent extends Component { constructor(props) { @@ -15,7 +16,6 @@ class ThemeComponent extends Component { componentDidMount() { // MAP CLICK FOR POPUP INFO this.mapClickEvent = window.map.on("singleclick", (evt) => { - console.log("click"); if (window.isDrawingOrEditing || window.isCoordinateToolOpen || window.isMeasuring) return; var results = window.map.forEachFeatureAtPixel( evt.pixel, @@ -59,6 +59,7 @@ class ThemeComponent extends Component { } onClose = () => { // ADD CLEAN UP HERE (e.g. Map Layers, Popups, etc) + unByKey(this.mapClickEvent); // CALL PARENT WITH CLOSE this.props.onClose(); diff --git a/src/sidebar/components/themes/immigrationservices/ImmigrationServicesLayerToggler.jsx b/src/sidebar/components/themes/immigrationservices/ImmigrationServicesLayerToggler.jsx index a6701a4b..b4143a1e 100644 --- a/src/sidebar/components/themes/immigrationservices/ImmigrationServicesLayerToggler.jsx +++ b/src/sidebar/components/themes/immigrationservices/ImmigrationServicesLayerToggler.jsx @@ -26,7 +26,7 @@ class ImmigrationServicesLayerToggler extends Component { this.setState({ styleUrl: styleUrl }); // RECORD COUNT - helpers.getWFSLayerRecordCount(this.props.layer.serverUrl, this.props.layer.layerName, (count) => { + helpers.getWFSLayerRecordCount({ serverUrl: this.props.layer.serverUrl, layerName: this.props.layer.layerName }, (count) => { this.setState({ recordCount: count }); }); diff --git a/src/sidebar/components/themes/localrealestate/LocalRealEstateImageSlider.jsx b/src/sidebar/components/themes/localrealestate/LocalRealEstateImageSlider.jsx index 87c0a802..48c4addc 100644 --- a/src/sidebar/components/themes/localrealestate/LocalRealEstateImageSlider.jsx +++ b/src/sidebar/components/themes/localrealestate/LocalRealEstateImageSlider.jsx @@ -102,21 +102,14 @@ class LocalRealEstateImageSlider extends Component { initLayer = () => { this.props.config.layers.forEach((layer) => { if (layer.displayName === "All") { - helpers.getWFSGeoJSON( - layer.serverUrl, - layer.layerName, - (result) => { - if (result.length === 0) return; - - this.vectorSource = new VectorSource({ - features: result, - }); - this.updateFeatures(); - }, - null, - null, - null - ); + helpers.getWFSGeoJSON({ serverUrl: layer.serverUrl, layerName: layer.layerName }, (result) => { + if (result.length === 0) return; + + this.vectorSource = new VectorSource({ + features: result, + }); + this.updateFeatures(); + }); } }); }; diff --git a/src/sidebar/components/themes/localrealestate/LocalRealEstateLayerToggler.jsx b/src/sidebar/components/themes/localrealestate/LocalRealEstateLayerToggler.jsx index ecf117bd..71124ef8 100644 --- a/src/sidebar/components/themes/localrealestate/LocalRealEstateLayerToggler.jsx +++ b/src/sidebar/components/themes/localrealestate/LocalRealEstateLayerToggler.jsx @@ -30,28 +30,21 @@ class LocalRealEstateLayerToggler extends Component { }); if (urlParam === null) return; - helpers.getWFSGeoJSON( - this.props.layerConfig.serverUrl, - this.props.layerConfig.layerName, - (result) => { - if (result.length === 0) return; - - const feature = result[0]; - const extent = feature.getGeometry().getExtent(); - const center = getCenter(extent); - helpers.zoomToFeature(feature); - result.forEach((currentFeature) => { - window.popup.show( - center, - , - this.props.layerConfig.displayName - ); - }); - }, - null, - null, - query - ); + helpers.getWFSGeoJSON({ serverUrl: this.props.layerConfig.serverUrl, layerName: this.props.layerConfig.layerName, cqlFilter: query }, (result) => { + if (result.length === 0) return; + + const feature = result[0]; + const extent = feature.getGeometry().getExtent(); + const center = getCenter(extent); + helpers.zoomToFeature(feature); + result.forEach((currentFeature) => { + window.popup.show( + center, + , + this.props.layerConfig.displayName + ); + }); + }); }; initLayer = () => { @@ -77,7 +70,7 @@ class LocalRealEstateLayerToggler extends Component { this.setState({ styleUrl: styleUrl }); // GET RECORD COUNT - helpers.getWFSLayerRecordCount(this.props.layerConfig.serverUrl, this.props.layerConfig.layerName, (count) => { + helpers.getWFSLayerRecordCount({ serverUrl: this.props.layerConfig.serverUrl, layerName: this.props.layerConfig.layerName }, (count) => { this.setState({ recordCount: count }); }); diff --git a/src/sidebar/components/themes/localrealestate/LocalRealEstateRecents.jsx b/src/sidebar/components/themes/localrealestate/LocalRealEstateRecents.jsx index ec94e890..02ec0462 100644 --- a/src/sidebar/components/themes/localrealestate/LocalRealEstateRecents.jsx +++ b/src/sidebar/components/themes/localrealestate/LocalRealEstateRecents.jsx @@ -5,71 +5,71 @@ import InfoRow from "../../../../helpers/InfoRow.jsx"; import { CSSTransition, TransitionGroup } from "react-transition-group"; class LocalRealEstateRecents extends Component { - constructor(props) { - super(props); - this.state = {}; - } + constructor(props) { + super(props); + this.state = {}; + } - render() { - return ( -
    -
    - MY RECENTLY VIEWED ITEMS - -
    -
    There are currently no recently viewed items.
    -
    - - {this.props.viewedItems.map((geoJson) => { - const feature = helpers.getFeatureFromGeoJSON(geoJson); - return ( - -
    -
    - { - e.target.onerror = null; - e.target.src = images["noPhoto.png"]; - }} - alt="not found" - /> -
    -
    - - -
    - - -
    -
    -
    -
    - ); - })} -
    -
    -
    - ); - } + render() { + return ( +
    +
    + MY RECENTLY VIEWED ITEMS + +
    +
    There are currently no recently viewed items.
    +
    + + {this.props.viewedItems.map((geoJson) => { + const feature = helpers.getFeatureFromGeoJSON(geoJson); + return ( + +
    +
    + { + e.target.onerror = null; + e.target.src = images["noPhoto.png"]; + }} + alt="not found" + /> +
    +
    + + +
    + + +
    +
    +
    +
    + ); + })} +
    +
    +
    + ); + } } export default LocalRealEstateRecents; @@ -77,7 +77,7 @@ export default LocalRealEstateRecents; // IMPORT ALL IMAGES const images = importAllImages(require.context("./images", false, /\.(png|jpe?g|svg|gif)$/)); function importAllImages(r) { - let images = {}; - r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); - return images; + let images = {}; + r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); + return images; } diff --git a/src/sidebar/components/themes/themeComponents/ThemeBaseLayers.jsx b/src/sidebar/components/themes/themeComponents/ThemeBaseLayers.jsx index 833e971b..a8a7d489 100644 --- a/src/sidebar/components/themes/themeComponents/ThemeBaseLayers.jsx +++ b/src/sidebar/components/themes/themeComponents/ThemeBaseLayers.jsx @@ -1,41 +1,54 @@ -import React, { Component } from "react"; +import React, { useState, useRef, useEffect } from "react"; import "./ThemeBaseLayers.css"; import * as helpers from "../../../../helpers/helpers"; +import { getAppAccessToken } from "../../../../helpers/esriHelpers"; +import { get } from "../../../../helpers/api.js"; +import { LayerHelpers, OL_DATA_TYPES } from "../../../../helpers/OLHelpers"; import ThemePopupContent from "./ThemePopupContent.jsx"; -import url from "url"; import Slider from "rc-slider"; import GeoJSON from "ol/format/GeoJSON.js"; import { unByKey } from "ol/Observable.js"; -class ThemeBaseLayers extends Component { - constructor(props) { - super(props); - this.state = { - layers: [], - visible: this.props.config.baseLayers.defaultVisibility, - sliderValue: this.props.config.baseLayers.opacity, - sliderMin: 0, - sliderMax: 1, - legendImageName: this.props.config.baseLayers.legendImageName, - }; - } - - componentDidMount() { - this.getLayers(); - - this.mapClickEvent = window.map.on("click", (evt) => { - console.log(this.state.visible); - if (window.isDrawingOrEditing || !this.state.visible || window.isCoordinateToolOpen || window.isMeasuring) return; +const ThemeBaseLayers = (props) => { + // const [layers, setLayers] = useState([]); + const layersRef = useRef([]); + const [token, setToken] = useState(""); + const [visible, setVisible] = useState(props.config.baseLayers.defaultVisibility); + const [sliderValue, setSliderValue] = useState(props.config.baseLayers.opacity); + const [sliderMin, setSliderMin] = useState(0); + const [sliderMax, setSliderMax] = useState(1); + const [legendImageName, setLegendImageName] = useState(props.config.baseLayers.legendImageName); + const [zIndex, setZIndex] = useState(props.config.baseLayers.zIndex); + const marks = { + 0: { + style: { + fontSize: "7pt", + }, + label:
    0
    , + }, + 1: { + style: { + fontSize: "7pt", + }, + label:
    100
    , + }, + }; + useEffect(() => { + if (props.config.excludeBaseLayers) return; + getLayers(); + const mapClickEvent = window.map.on("click", (evt) => { + if (window.isDrawingOrEditing || !visible || window.isCoordinateToolOpen || window.isMeasuring) return; var viewResolution = window.map.getView().getResolution(); - this.state.layers.forEach((layer) => { + layersRef.current.forEach((layer) => { if (!layer.getProperties().clickable) return; var url = layer.getSource().getFeatureInfoUrl(evt.coordinate, viewResolution, "EPSG:3857", { INFO_FORMAT: "application/json", }); if (url) { - helpers.getJSON(url, (result) => { + const secured = layer.getProperties().secured || false; + get(url, { useBearerToken: secured }, (result) => { const features = result.features; if (features.length === 0) { return; @@ -43,13 +56,13 @@ class ThemeBaseLayers extends Component { const geoJSON = new GeoJSON().readFeatures(result); const layerName = layer.getProperties().name; - const layerConfig = this.getLayerConfigByName(layerName); + const layerConfig = getLayerConfigByName(layerName); geoJSON.forEach((feature) => { const entries = Object.entries(feature.getProperties()); window.popup.show( evt.coordinate, - , + , layer.getProperties().name ); }); @@ -57,13 +70,108 @@ class ThemeBaseLayers extends Component { } }); }); - } + return () => { + layersRef.current.forEach((layer) => { + window.map.removeLayer(layer); + }); - getLayerConfigByName = (name) => { + // REMOVE EVENT + unByKey(mapClickEvent); + }; + }, []); + const addLayer = (layer, options, callback) => { + layer.setVisible(visible); + layer.setOpacity(sliderValue); + layer.setZIndex(zIndex); + setZIndex(zIndex + 1); + layer.setProperties({ + name: options.displayName, + tocDisplayName: options.displayName, + clickable: options.clickable, + disableParcelClick: options.clickable, + queryable: true, + }); + window.map.addLayer(layer); + callback(layer); + }; + const getLayers = () => { + let tmpLayers = []; + props.config.baseLayers.layers.forEach((layerObj) => { + let layer = {}; + if (layerObj.type === "arcgis") + if (layerObj.secure) + getAppAccessToken(layerObj.serverUrl, (accessToken) => { + setToken(accessToken); + LayerHelpers.getCapabilities({ root_url: layerObj.serverUrl, type: "rest", secured: layerObj.secured, token: accessToken.access_token }, (returnLayers) => { + console.log(returnLayers); + LayerHelpers.createArcGISRestLayersFromService(returnLayers, { returnLayers: layerObj.returnLayers }, (newLayers) => { + if (layerObj.returnLayers) { + layerObj.returnLayers.forEach((layerId) => { + const newLayer = newLayers.filter((item) => item.get("layerId") == layerId)[0]; + if (newLayer) + addLayer(newLayer, { displayName: newLayer.get("displayName"), clickable: newLayer.get("clickable") }, (retLayer) => { + tmpLayers.push(retLayer); + }); + }); + } else + newLayers.forEach((item) => { + addLayer(item, { displayName: item.displayName, clickable: item.clickable }, (retLayer) => { + tmpLayers.push(retLayer); + }); + }); + }); + }); + }); + else + LayerHelpers.getCapabilities({ root_url: layerObj.serverUrl, type: "rest" }, (returnLayers) => { + LayerHelpers.createArcGISRestLayersFromService(returnLayers, { returnLayers: layerObj.returnLayers }, (newLayers) => { + if (layerObj.returnLayers) { + layerObj.returnLayers.forEach((layerId) => { + const newLayer = newLayers.filter((item) => item.get("layerId") == layerId)[0]; + if (newLayer) + addLayer(newLayer, { displayName: newLayer.get("displayName"), clickable: newLayer.get("clickable") }, (retLayer) => { + tmpLayers.push(retLayer); + }); + }); + } else + newLayers.forEach((item) => { + addLayer(item, { displayName: item.displayName, clickable: item.clickable }, (retLayer) => { + tmpLayers.push(retLayer); + }); + }); + }); + }); + else { + LayerHelpers.getLayer( + { + sourceType: OL_DATA_TYPES.ImageWMS, + source: "WMS", + layerName: layerObj.layerName, + url: `${layerObj.serverUrl}wms?layers=${layerObj.layerName}`, + tiled: false, + name: layerObj.layerName, + secured: layerObj.secure || false, + }, + (layer) => { + const wfsUrlTemplate = (rootUrl, layer) => `${rootUrl}wfs?service=wfs&version=2.0.0&request=GetFeature&typeNames=${layer}&outputFormat=application/json&cql_filter=`; + const wfsUrl = wfsUrlTemplate(layerObj.serverUrl, layer.Name); + + layer.setProperties({ + wfsUrl: wfsUrl, + }); + addLayer(layer, { displayName: layerObj.displayName, clickable: layerObj.clickable }, (retLayer) => { + tmpLayers.push(retLayer); + }); + } + ); + } + }); + // setLayers(tmpLayers); + layersRef.current = tmpLayers; + }; + const getLayerConfigByName = (name) => { let config = {}; - this.props.config.baseLayers.layers.forEach((layerConfig) => { - //console.log(name); - //console.log(layerConfig.displayName); + props.config.baseLayers.layers.forEach((layerConfig) => { if (layerConfig.displayName === name) { config = layerConfig; return; @@ -71,107 +179,52 @@ class ThemeBaseLayers extends Component { }); return config; }; - - getLayers = () => { - let layers = []; - this.props.config.baseLayers.layers.forEach((layerObj) => { - const layer = helpers.getImageWMSLayer(url.resolve(layerObj.serverUrl, "wms"), layerObj.layerName, "geoserver", null, 50); - layer.setVisible(this.state.visible); - layer.setOpacity(this.state.sliderValue); - layer.setZIndex(this.props.config.baseLayers.zIndex); - layer.setProperties({ - name: layerObj.displayName, - tocDisplayName: layerObj.displayName, - clickable: layerObj.clickable, - disableParcelClick: layerObj.clickable, - queryable: true, - }); - window.map.addLayer(layer); - layers.push(layer); - }); - - this.setState({ layers: layers }); - }; - - onCheckboxChange = (evt) => { - this.setState({ visible: evt.target.checked }); - - this.state.layers.forEach((layer) => { + const onCheckboxChange = (evt) => { + setVisible(evt.target.checked); + layersRef.current.forEach((layer) => { layer.setVisible(evt.target.checked); }); }; // SLIDER CHANGE EVENT - onSliderChange = (value) => { - this.state.layers.forEach((layer) => { + const onSliderChange = (value) => { + layersRef.current.forEach((layer) => { layer.setOpacity(value); }); - - this.setState({ sliderValue: value }); + setSliderValue(value); }; - - componentWillUnmount() { - // REMOVE THE LAYERS - this.state.layers.forEach((layer) => { - window.map.removeLayer(layer); - }); - - // REMOVE EVENT - unByKey(this.mapClickEvent); - } - - render() { - // MARKS FOR SLIDER - const marks = { - 0: { - style: { - fontSize: "7pt", - }, - label:
    0
    , - }, - 1: { - style: { - fontSize: "7pt", - }, - label:
    100
    , - }, - }; - - // - - return ( -
    0 ? "sc-base-layers-container" : "sc-hidden"}> -
    - BASE DATA -
    -
    - -
    - - Transparency -
    -
    -
    - legend + return ( +
    0 || props.config.excludeBaseLayers ? "sc-base-layers-container" : "sc-hidden")}> +
    + BASE DATA +
    +
    + +
    + + Transparency
    - ); - } -} +
    + legend +
    +
    + ); +}; export default ThemeBaseLayers; diff --git a/src/sidebar/components/themes/themeComponents/ThemeContainer.jsx b/src/sidebar/components/themes/themeComponents/ThemeContainer.jsx index 1b47bea2..1595effd 100644 --- a/src/sidebar/components/themes/themeComponents/ThemeContainer.jsx +++ b/src/sidebar/components/themes/themeComponents/ThemeContainer.jsx @@ -1,47 +1,51 @@ import React, { Component } from "react"; import ThemeBaseLayers from "./ThemeBaseLayers.jsx"; -import ThemeLayers from "../themeComponents/ThemeLayers.jsx"; -import ThemeData from "../themeComponents/ThemeData.jsx"; +import ThemeLayers from "./ThemeLayers.jsx"; +import ThemeData from "./ThemeData.jsx"; import "./ThemeContainer.css"; class ThemeContainer extends Component { - state = {}; + state = {}; - // CALLED FROM LAYERS. CALL THEME DATA THROUGH A REF TO PASS ON THE CHANGE FOR VISIBLITY - onLayerVisibilityChange = (layer) => { - this.data.onLayerVisibilityChange(layer); - }; + // CALLED FROM LAYERS. CALL THEME DATA THROUGH A REF TO PASS ON THE CHANGE FOR VISIBLITY + onLayerVisibilityChange = (layer) => { + this.data.onLayerVisibilityChange(layer); + }; - componentDidMount() { - // DISABLE PARCEL CLICK - //if (this.props.config.disableParcelClick !== undefined && this.props.config.disableParcelClick) - //window.disableParcelClick = true; - } + componentDidMount() { + // DISABLE PARCEL CLICK + if (this.props.config.disableParcelClick !== undefined && this.props.config.disableParcelClick) window.disableParcelClick = true; + } - componentWillUnmount() { - // RE-ENABLE PARCEL CLICK - window.disableParcelClick = false; - } + componentWillUnmount() { + // RE-ENABLE PARCEL CLICK + window.disableParcelClick = false; + } - render() { - return ( -
    - - { - this.onLayerVisibilityChange(layer); - }} - > - { - this.data = data; - }} - > -
    - ); - } + render() { + return ( +
    + + { + this.onLayerVisibilityChange(layer); + }} + className={this.props.config.hideLayers ? "sc-hidden" : ""} + onMapClick={this.props.onMapClick} + > + { + this.data = data; + }} + > +
    {this.props.children}
    +
    + ); + } } export default ThemeContainer; diff --git a/src/sidebar/components/themes/themeComponents/ThemeData.jsx b/src/sidebar/components/themes/themeComponents/ThemeData.jsx index 7b9eee2e..2cbf6373 100644 --- a/src/sidebar/components/themes/themeComponents/ThemeData.jsx +++ b/src/sidebar/components/themes/themeComponents/ThemeData.jsx @@ -1,56 +1,59 @@ -import React, { Component } from "react"; +import React, { Component, useState, useEffect } from "react"; import "./ThemeData.css"; import * as helpers from "../../../../helpers/helpers"; import ThemeDataList from "./ThemeDataList.jsx"; class ThemeData extends Component { - constructor(props) { - super(props); + constructor(props) { + super(props); - this.state = { - onlyFeaturesWithinMap: false, - }; - this.layerRefs = []; - } + this.state = { + onlyFeaturesWithinMap: false, + }; + this.layerRefs = []; + } - // THIS FUNCTION IS CALLED FROM PARENT THROUGH A REF - onLayerVisibilityChange = (layer) => { - // LET ALL THE THEMEDATALIST COMPONENTS KNOW A LAYER HAS CHANGED VISIBLITY - this.layerRefs.forEach((dataList) => { - if (dataList !== null) dataList.onLayerVisibilityChange(layer); - }); - }; + // THIS FUNCTION IS CALLED FROM PARENT THROUGH A REF + onLayerVisibilityChange = (layer) => { + // LET ALL THE THEMEDATALIST COMPONENTS KNOW A LAYER HAS CHANGED VISIBLITY + this.layerRefs.forEach((dataList) => { + if (dataList !== null) dataList.onLayerVisibilityChange(layer); + }); + }; - onCheckboxChange = (evt) => { - this.setState({ onlyFeaturesWithinMap: evt.target.checked }); - }; + onCheckboxChange = (evt) => { + this.setState({ onlyFeaturesWithinMap: evt.target.checked }); + }; - render() { - return ( -
    -
    THEME DATA
    -
    - -
    -
    - {this.props.config.toggleLayers.map((layerConfig) => ( - { - this.layerRefs.push(data); - }} - onlyFeaturesWithinMap={this.state.onlyFeaturesWithinMap} - /> - ))} -
    -
    - ); - } + render() { + if (this.props.config.excludeDataList) { + return
    ; + } + return ( +
    +
    THEME DATA
    +
    + +
    +
    + {this.props.config.toggleLayers.map((layerConfig) => ( + { + this.layerRefs.push(data); + }} + onlyFeaturesWithinMap={this.state.onlyFeaturesWithinMap} + /> + ))} +
    +
    + ); + } } export default ThemeData; diff --git a/src/sidebar/components/themes/themeComponents/ThemeDataList.jsx b/src/sidebar/components/themes/themeComponents/ThemeDataList.jsx index 2be322d9..fe692fff 100644 --- a/src/sidebar/components/themes/themeComponents/ThemeDataList.jsx +++ b/src/sidebar/components/themes/themeComponents/ThemeDataList.jsx @@ -1,117 +1,122 @@ import React, { Component } from "react"; import "./ThemeDataList.css"; import * as helpers from "../../../../helpers/helpers"; +import { get, createObjectURL } from "../../../../helpers/api"; import { InfoRowValue } from "../../../../helpers/InfoRow.jsx"; import ThemePopupContent from "./ThemePopupContent.jsx"; import { getCenter } from "ol/extent"; class ThemeDataList extends Component { - constructor(props) { - super(props); + constructor(props) { + super(props); - this.state = { - panelOpen: props.layerConfig.expanded, - features: [], - styleUrl: null, - visible: props.layerConfig.visible, - onlyFeaturesWithinMap: props.onlyFeaturesWithinMap, - }; + this.state = { + panelOpen: props.layerConfig.expanded, + features: [], + styleUrl: null, + visible: props.layerConfig.visible, + onlyFeaturesWithinMap: props.onlyFeaturesWithinMap, + }; - this._isMounted = false; - } + this._isMounted = false; + } - componentDidMount() { - this._isMounted = true; + componentDidMount() { + this._isMounted = true; - // GET FEATURES - this.fetchFeatures(); + // GET FEATURES + this.fetchFeatures(); - // GET LEGEND - const styleUrlTemplate = (serverURL, layerName, styleName) => - `${serverURL}/wms?REQUEST=GetLegendGraphic&VERSION=1.1&FORMAT=image/png&WIDTH=30&HEIGHT=30&LAYER=${layerName}&STYLE=${styleName}&transparent=true`; - const styleUrl = styleUrlTemplate(this.props.layerConfig.serverUrl, this.props.layerConfig.layerName, this.props.layerConfig.legendStyleName); - this.setState({ styleUrl: styleUrl }); + // GET LEGEND + const styleUrlTemplate = (serverURL, layerName, styleName) => + `${serverURL}/wms?REQUEST=GetLegendGraphic&VERSION=1.1&FORMAT=image/png&WIDTH=30&HEIGHT=30&LAYER=${layerName}&STYLE=${styleName}&transparent=true`; + const styleUrl = styleUrlTemplate(this.props.layerConfig.serverUrl, this.props.layerConfig.layerName, this.props.layerConfig.legendStyleName); - window.map.on("moveend", (evt) => { - // GET FEATURES - this.fetchFeatures(); - }); - } + get(styleUrl, { useBearerToken: this.props.layerConfig.secure || false, type: "blob" }, (results) => { + var imgData = createObjectURL(results); + this.setState({ styleUrl: imgData }); + }); + window.map.on("moveend", (evt) => { + // GET FEATURES + this.fetchFeatures(); + }); + } - componentWillUnmount() { - this._isMounted = false; - } + componentWillUnmount() { + this._isMounted = false; + } - fetchFeatures = () => { - if (!this._isMounted) return; + fetchFeatures = () => { + if (!this._isMounted) return; - if (this.state.onlyFeaturesWithinMap) { - const extent = window.map.getView().calculateExtent(); - helpers.getWFSGeoJSON( - this.props.layerConfig.serverUrl, - this.props.layerConfig.layerName, - (result) => { - this.setState({ features: result }); - }, - this.props.layerConfig.displayFieldName, - extent - ); - } else { - helpers.getWFSGeoJSON( - this.props.layerConfig.serverUrl, - this.props.layerConfig.layerName, - (result) => { - this.setState({ features: result }); - }, - this.props.layerConfig.displayFieldName - ); - } - }; + if (this.state.onlyFeaturesWithinMap) { + const extent = window.map.getView().calculateExtent(); + helpers.getWFSGeoJSON( + { + serverUrl: this.props.layerConfig.serverUrl, + layerName: this.props.layerConfig.layerName, + sortField: this.props.layerConfig.displayFieldName, + extent: extent, + secure: this.props.layerConfig.secured, + }, + (result) => { + this.setState({ features: result }); + } + ); + } else { + helpers.getWFSGeoJSON( + { serverUrl: this.props.layerConfig.serverUrl, layerName: this.props.layerConfig.layerName, sortField: this.props.layerConfig.displayFieldName, secure: this.props.layerConfig.secured }, + (result) => { + this.setState({ features: result }); + } + ); + } + }; - onHeaderClick = () => { - this.setState({ panelOpen: !this.state.panelOpen }); - }; + onHeaderClick = () => { + this.setState({ panelOpen: !this.state.panelOpen }); + }; - itemClick = (feature) => { - const extent = feature.getGeometry().getExtent(); - const center = getCenter(extent); - const entries = Object.entries(feature.getProperties()); - window.popup.show(center, ); - helpers.zoomToFeature(feature); - window.map.getView().setCenter(center); - window.map.getView().setZoom(15); - }; + itemClick = (feature) => { + const extent = feature.getGeometry().getExtent(); + const center = getCenter(extent); + const entries = Object.entries(feature.getProperties()); + window.popup.show(center, ); + helpers.zoomToFeature(feature); + window.map.getView().setCenter(center); + window.map.getView().setZoom(15); + }; - // HANDLES TOGGLE LAYER CHANGES - onLayerVisibilityChange = (layer) => { - if (layer.getProperties().name === this.props.layerConfig.layerName) this.setState({ visible: layer.getVisible() }); - }; + // HANDLES TOGGLE LAYER CHANGES + onLayerVisibilityChange = (layer) => { + if (layer.getProperties().name === this.props.layerConfig.layerName) this.setState({ visible: layer.getVisible() }); + }; - render() { - return ( -
    -
    -
    - tableicon -
    -
    - style -
    -
    {this.props.layerConfig.displayName}
    -
    -
    - {this.state.features.map((feature) => ( - - ))} -
    -
    - ); - } + render() { + return ( +
    +
    +
    + tableicon +
    +
    + style +
    +
    {this.props.layerConfig.displayName}
    +
    +
    + {this.state.features.map((feature) => ( + + ))} +
    +
    + ); + } } export default ThemeDataList; @@ -119,7 +124,7 @@ export default ThemeDataList; // IMPORT ALL IMAGES const images = importAllImages(require.context("./images", false, /\.(png|jpe?g|svg|gif)$/)); function importAllImages(r) { - let images = {}; - r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); - return images; + let images = {}; + r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); + return images; } diff --git a/src/sidebar/components/themes/themeComponents/ThemeLayerToggler.jsx b/src/sidebar/components/themes/themeComponents/ThemeLayerToggler.jsx index 6153f8e4..b6a827de 100644 --- a/src/sidebar/components/themes/themeComponents/ThemeLayerToggler.jsx +++ b/src/sidebar/components/themes/themeComponents/ThemeLayerToggler.jsx @@ -1,150 +1,171 @@ -import React, { Component } from "react"; +import React, { useState, useEffect, useRef } from "react"; import "./ThemeLayerToggler.css"; import * as helpers from "../../../../helpers/helpers"; +import { LayerHelpers, OL_DATA_TYPES } from "../../../../helpers/OLHelpers"; + +import { get, createObjectURL } from "../../../../helpers/api"; import ThemePopupContent from "./ThemePopupContent.jsx"; -import url from "url"; import GeoJSON from "ol/format/GeoJSON.js"; import { getCenter } from "ol/extent"; import { unByKey } from "ol/Observable.js"; // LOOK AT THEME CONFIG FOR EXAMPLE OBJECT BEING PASSED HERE -class ThemeLayerToggler extends Component { - constructor(props) { - super(props); - - this.state = { - visible: props.layerConfig.visible, - layer: this.initLayer(), - styleUrl: null, - recordCount: null, - }; - } - - handleUrlParameter = () => { - if (this.props.layerConfig.UrlParameter === undefined) return; - - const urlParam = helpers.getURLParameter(this.props.layerConfig.UrlParameter.parameterName); - if (urlParam === null) return; - - const query = this.props.layerConfig.UrlParameter.fieldName + "=" + urlParam; - helpers.getWFSGeoJSON( - this.props.layerConfig.serverUrl, - this.props.layerConfig.layerName, - (result) => { - if (result.length === 0) return; - - const feature = result[0]; - const extent = feature.getGeometry().getExtent(); - const center = getCenter(extent); - helpers.zoomToFeature(feature); - result.forEach((currentFeature) => { - const entries = Object.entries(currentFeature.getProperties()); - window.popup.show( - center, - , - this.props.layerConfig.displayName - ); - }); +const ThemeLayerToggler = (props) => { + const { onMapClick, config, onLayerVisiblityChange, visibleAll, children } = props; + const styleUrlTemplate = (serverURL, layerName, styleName) => + `${serverURL}/wms?REQUEST=GetLegendGraphic&VERSION=1.1&FORMAT=image/png&WIDTH=20&HEIGHT=20&TRANSPARENT=true&LAYER=${layerName}&STYLE=${styleName === undefined ? "" : styleName}`; + const [visible, setVisible] = useState(props.layerConfig.visible); + const [styleImageUrl, setStyleImageUrl] = useState(""); + const [recordCount, setRecordCount] = useState(0); + const [layerConfig, setLayerConfig] = useState(props.layerConfig); + + const layerRef = useRef(null); + const mapClickEventRef = useRef(null); + + useEffect(() => { + setLayerConfig(props.layerConfig); + }, [props.layerConfig]); + + const initComponent = () => { + // GET LAYER + LayerHelpers.getLayer( + { + sourceType: OL_DATA_TYPES.ImageWMS, + source: "WMS", + layerName: layerConfig.layerName, + url: `${layerConfig.serverUrl}wms?layers=${layerConfig.layerName}`, + tiled: false, + name: layerConfig.layerName, + secured: layerConfig.secure || false, }, - null, - null, - query + (layer) => { + layer.setProperties({ + name: layerConfig.layerName, + tocDisplayName: layerConfig.displayName, + clickable: layerConfig.clickable !== undefined ? layerConfig.clickable : true, + disableParcelClick: layerConfig.clickable !== undefined ? layerConfig.clickable : true, + queryable: true, + }); + if (config.toggleLayersKey) layer.setProperties({ themeKey: config.toggleLayersKey }); + layer.setZIndex(layerConfig.zIndex); + layer.setVisible(layerConfig.visible); + window.map.addLayer(layer); + layerRef.current = layer; + + addMapClickEvent(); + } ); }; - - initLayer = () => { - // GET LAYER - const layer = helpers.getImageWMSLayer(url.resolve(this.props.layerConfig.serverUrl, "wms"), this.props.layerConfig.layerName, "geoserver", null, 50); - layer.setVisible(this.props.layerConfig.visible); - layer.setZIndex(this.props.layerConfig.zIndex); - //layer.setProperties({ name: this.props.layerConfig.layerName, disableParcelClick: true }); - layer.setProperties({ - name: this.props.layerConfig.layerName, - tocDisplayName: this.props.layerConfig.displayName, - disableParcelClick: true, - queryable: true, - }); - - window.map.addLayer(layer); - return layer; + const addMapClickEvent = () => { + if (onMapClick) { + mapClickEventRef.current = window.map.on("click", onMapClick); + } else { + mapClickEventRef.current = window.map.on("click", (evt) => { + if (window.isDrawingOrEditing || !visible || window.isCoordinateToolOpen || window.isMeasuring) return; + + var viewResolution = window.map.getView().getResolution(); + var url = layerRef.current.getSource().getFeatureInfoUrl(evt.coordinate, viewResolution, "EPSG:3857", { + INFO_FORMAT: "application/json", + }); + if (url) { + get(url, { useBearerToken: layerConfig.secure || false }, (result) => { + const features = result.features; + if (!features || features.length === 0) { + return; + } + const geoJSON = new GeoJSON().readFeatures(result); + geoJSON.forEach((currentFeature) => { + const entries = Object.entries(currentFeature.getProperties()); + window.popup.show( + evt.coordinate, + , + layerConfig.displayName + ); + }); + }); + } + }); + } }; - componentDidMount() { + useEffect(() => { + initComponent(); // GET LEGEND - const styleUrlTemplate = (serverURL, layerName, styleName) => - `${serverURL}/wms?REQUEST=GetLegendGraphic&VERSION=1.1&FORMAT=image/png&WIDTH=20&HEIGHT=20&TRANSPARENT=true&LAYER=${layerName}&STYLE=${styleName === undefined ? "" : styleName}`; - const styleUrl = styleUrlTemplate(this.props.layerConfig.serverUrl, this.props.layerConfig.layerName, this.props.layerConfig.legendStyleName); - this.setState({ styleUrl: styleUrl }); - - // GET RECORD COUNT - helpers.getWFSLayerRecordCount(this.props.layerConfig.serverUrl, this.props.layerConfig.layerName, (count) => { - this.setState({ recordCount: count }); + + const styleUrl = styleUrlTemplate(layerConfig.serverUrl, layerConfig.layerName, layerConfig.legendStyleName); + get(styleUrl, { useBearerToken: layerConfig.secure || false, type: "blob" }, (results) => { + var imgData = createObjectURL(results); + setStyleImageUrl(imgData); }); - this.mapClickEvent = window.map.on("click", (evt) => { - if (window.isDrawingOrEditing || !this.state.visible || window.isCoordinateToolOpen || window.isMeasuring) return; + helpers.getWFSLayerRecordCount({ serverUrl: layerConfig.serverUrl, layerName: layerConfig.layerName, secured: layerConfig.secure || false }, (currentCount) => { + setRecordCount(currentCount); + }); + // URL PARAMETERS + handleUrlParameter(); + return () => { + // CLEAN UP + setStyleImageUrl(null); + setRecordCount(null); + window.map.removeLayer(layerRef.current); + unByKey(mapClickEventRef.current); + }; + }, []); - var viewResolution = window.map.getView().getResolution(); - var url = this.state.layer.getSource().getFeatureInfoUrl(evt.coordinate, viewResolution, "EPSG:3857", { - INFO_FORMAT: "application/json", + const handleUrlParameter = () => { + if (layerConfig.UrlParameter === undefined) return; + + const urlParam = helpers.getURLParameter(layerConfig.UrlParameter.parameterName); + if (urlParam === null) return; + + const query = layerConfig.UrlParameter.fieldName + "=" + urlParam; + helpers.getWFSGeoJSON({ serverUrl: layerConfig.serverUrl, layerName: layerConfig.layerName, cqlFilter: query, secured: layerConfig.secure }, (result) => { + if (result.length === 0) return; + + const feature = result[0]; + const extent = feature.getGeometry().getExtent(); + const center = getCenter(extent); + helpers.zoomToFeature(feature); + result.forEach((currentFeature) => { + const entries = Object.entries(currentFeature.getProperties()); + window.popup.show( + center, + , + props.layerConfig.displayName + ); }); - if (url) { - helpers.getJSON(url, (result) => { - const features = result.features; - if (features.length === 0) { - return; - } - - const geoJSON = new GeoJSON().readFeatures(result); - geoJSON.forEach((feature) => { - console.log("ThemeLayerToggler.jsx", feature); - const entries = Object.entries(feature.getProperties()); - window.popup.show( - evt.coordinate, - , - this.props.layerConfig.displayName - ); - }); - }); - } }); + }; - // URL PARAMETERS - this.handleUrlParameter(); - } - - onCheckboxChange = (evt) => { - this.setState({ visible: evt.target.checked }); - this.state.layer.setVisible(evt.target.checked); - this.props.onLayerVisiblityChange(this.state.layer); + const onCheckboxChange = (checked) => { + setVisible(checked); + layerRef.current.setVisible(checked); + onLayerVisiblityChange(layerRef.current); }; - componentWillUnmount() { - // CLEAN UP - window.map.removeLayer(this.state.layer); - unByKey(this.mapClickEvent); - } - - render() { - return ( -
    -
    - style -
    -
    - - -
    - -
    {this.props.children}
    + return ( +
    +
    + style
    - ); - } -} +
    + + +
    + +
    {children}
    +
    + ); +}; export default ThemeLayerToggler; diff --git a/src/sidebar/components/themes/themeComponents/ThemeLayers.css b/src/sidebar/components/themes/themeComponents/ThemeLayers.css index e69de29b..9590fadd 100644 --- a/src/sidebar/components/themes/themeComponents/ThemeLayers.css +++ b/src/sidebar/components/themes/themeComponents/ThemeLayers.css @@ -0,0 +1,7 @@ +.sc-theme-layers-show-all { + font-size: 14px; + color: #797979; + margin-top: 5px; + margin-bottom: 7px; + text-transform: uppercase; +} diff --git a/src/sidebar/components/themes/themeComponents/ThemeLayers.jsx b/src/sidebar/components/themes/themeComponents/ThemeLayers.jsx index 0970e53c..c68116bd 100644 --- a/src/sidebar/components/themes/themeComponents/ThemeLayers.jsx +++ b/src/sidebar/components/themes/themeComponents/ThemeLayers.jsx @@ -1,19 +1,59 @@ -import React from "react"; +import React, { useState, useEffect } from "react"; import "./ThemeLayers.css"; import * as helpers from "../../../../helpers/helpers"; import ThemeLayerToggler from "./ThemeLayerToggler.jsx"; +import ThemeServiceToggler from "./ThemeServiceToggler.jsx"; const ThemeLayers = (props) => { - return ( -
    -
    THEME LAYERS
    -
    - {props.config.toggleLayers.map((layerConfig) => ( - - ))} -
    -
    - ); + const [checked, setChecked] = useState(props.config.toggleVisibleAll || false); + const [toggleServices, setToggleServices] = useState(props.config.toggleServices || []); + const [toggleLayers, setToggleLayers] = useState(props.config.toggleLayers || []); + + useEffect(() => { + setToggleServices(props.config.toggleServices || []); + }, [props.config.toggleServices]); + + useEffect(() => { + setToggleLayers(props.config.toggleLayers || []); + }, [props.config.toggleLayers]); + + const onChangeVisibleAll = (checked) => { + setChecked(checked); + }; + + if (props.config.excludeToggler) return
    ; + + return ( +
    +
    {`${props.config.toggleLayersTitle ? props.config.toggleLayersTitle : "THEME LAYERS"}`}
    + +
    +
    + onChangeVisibleAll(evt.target.checked)} /> SHOW ALL +
    + {toggleServices.map((serviceConfig) => ( + + ))} + {toggleLayers.map((layerConfig) => ( + + ))} +
    +
    + ); }; export default ThemeLayers; diff --git a/src/sidebar/components/themes/themeComponents/ThemePopupContent.css b/src/sidebar/components/themes/themeComponents/ThemePopupContent.css index 7b4807c9..595da72a 100644 --- a/src/sidebar/components/themes/themeComponents/ThemePopupContent.css +++ b/src/sidebar/components/themes/themeComponents/ThemePopupContent.css @@ -1,10 +1,2 @@ -.sc-theme-popup-content-more-info { - width: 156px; - padding: 5px; - margin-right: 5px; - margin-top: 5px; -} - -.sc-theme-popup-content-close { - width: 80px; +.sc-theme-popup-content { } diff --git a/src/sidebar/components/themes/themeComponents/ThemePopupContent.jsx b/src/sidebar/components/themes/themeComponents/ThemePopupContent.jsx index c1af0124..754cc6a2 100644 --- a/src/sidebar/components/themes/themeComponents/ThemePopupContent.jsx +++ b/src/sidebar/components/themes/themeComponents/ThemePopupContent.jsx @@ -5,39 +5,39 @@ import { InfoRow } from "../../../../helpers/InfoRow.jsx"; // CONTENT FOR POPUP const ThemePopupContent = (props) => { - // HANDLE URL FIELD AND PASS IT BACK AS PARAMETER TO CLICK - let urlField = ""; - if (props.layerConfig.moreInfoUrlFieldName !== undefined) { - props.values.forEach((row) => { - if (row[0] === props.layerConfig.moreInfoUrlFieldName) urlField = row[1]; - }); - } + // HANDLE URL FIELD AND PASS IT BACK AS PARAMETER TO CLICK + let urlField = ""; + if (props.layerConfig.moreInfoUrlFieldName !== undefined) { + props.values.forEach((row) => { + if (row[0] === props.layerConfig.moreInfoUrlFieldName) urlField = row[1]; + }); + } - return ( -
    -
    - logo -
    - {props.values.map((row) => { - if (row[0] !== "geometry" && row[0].substring(0, 1) !== "_") { - return ; - } else return null; - })} -
    - - -
    -
    - ); + return ( +
    +
    + logo +
    + {props.values.map((row) => { + if (row[0] !== "geometry" && row[0].substring(0, 1) !== "_") { + return ; + } else return null; + })} +
    + + +
    +
    + ); }; export default ThemePopupContent; @@ -45,7 +45,7 @@ export default ThemePopupContent; // IMPORT ALL IMAGES const images = importAllImages(require.context("./images", false, /\.(png|jpe?g|svg|gif)$/)); function importAllImages(r) { - let images = {}; - r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); - return images; + let images = {}; + r.keys().map((item, index) => (images[item.replace("./", "")] = r(item))); + return images; } diff --git a/src/sidebar/components/themes/themeComponents/ThemeServiceToggler.css b/src/sidebar/components/themes/themeComponents/ThemeServiceToggler.css new file mode 100644 index 00000000..19de2fe3 --- /dev/null +++ b/src/sidebar/components/themes/themeComponents/ThemeServiceToggler.css @@ -0,0 +1,77 @@ +.sc-theme-service-info-container { + display: table-row; +} +.sc-theme-service-item-plus-minus-container { + display: inline-table; + vertical-align: top; + cursor: pointer; +} +.sc-theme-service-legend-container { + list-style: none; + text-align: left; + font-size: 10pt; + padding-left: 30px; +} +.sc-theme-service-toggler-container { + margin-top: 5px; + margin-left: 5px; + margin-left: 5px; + margin-right: 5px; +} + +.sc-theme-service-container { + display: table; + margin-top: 5px; + margin-left: 5px; + width: 95%; +} + +.sc-theme-service-toggler-label { + /* display: table-cell; */ + font-size: 10pt; + width: 70%; +} + +.sc-theme-service-toggler-label-with-box { + display: table-cell; + font-size: 10pt; + /* width: 70%; */ + vertical-align: middle; + padding-left: 10px; +} + +.sc-theme-service-toggler-symbol { + width: 5%; + display: table-cell; + vertical-align: bottom; + text-align: center; +} + +.sc-theme-service-toggler-symbol-with-box { + background: rgba(0, 0, 0, 0) -webkit-linear-gradient(top, rgba(242, 245, 246, 1) 0%, rgba(230, 230, 230, 1) 100%) repeat scroll 0 0; + background: rgba(0, 0, 0, 0) linear-gradient(to bottom, rgba(242, 245, 246, 1) 0%, rgba(230, 230, 230, 1) 100%) repeat scroll 0 0; + border: 1px solid #ccc; + border-radius: 3px; + text-align: center; + vertical-align: middle; + width: 30px; + height: 30px; + display: table-cell; +} + +.sc-theme-service-toggler-label-with-box-container { + display: table-cell; + padding-top: 7px; +} +.sc-theme-service-toggler-count { + font-size: 8pt; + color: #ababab; +} + +.sc-theme-service-toggler-count-with-box { + font-size: 8pt; + color: #ababab; + display: table-cell; + padding-left: 8px; + padding-top: 2px; +} diff --git a/src/sidebar/components/themes/themeComponents/ThemeServiceToggler.jsx b/src/sidebar/components/themes/themeComponents/ThemeServiceToggler.jsx new file mode 100644 index 00000000..5cd9deef --- /dev/null +++ b/src/sidebar/components/themes/themeComponents/ThemeServiceToggler.jsx @@ -0,0 +1,310 @@ +import React, { useState, useEffect, useRef, Fragment } from "react"; +import "./ThemeServiceToggler.css"; +import * as helpers from "../../../../helpers/helpers"; +import { getAppAccessToken, getAccessToken } from "../../../../helpers/esriHelpers"; + +import { get } from "../../../../helpers/api"; + +import { LayerHelpers, OL_DATA_TYPES } from "../../../../helpers/OLHelpers"; + +import ThemePopupContent from "./ThemePopupContent.jsx"; +import GeoJSON from "ol/format/GeoJSON.js"; +import { unByKey } from "ol/Observable.js"; + +const ThemeServiceToggler = (props) => { + const [layers, setLayers] = useState([]); + const [token, setToken] = useState(""); + const [showAll, setShowAll] = useState(false); + + const processLayers = (capabilities) => { + let layerArray = []; + let zIndex = props.serviceConfig.zIndex || 1000; + if (props.serviceConfig.layers) capabilities = capabilities.filter((layer) => props.serviceConfig.layers.includes(layer.id)); + capabilities.forEach((layer) => { + const hasAttachments = layer.hasAttachments; + const layerOptions = { + sourceType: OL_DATA_TYPES.ImageArcGISRest, + source: "rest", + projection: layer.sourceSpatialReference && layer.sourceSpatialReference.latestWkid ? `${layer.sourceSpatialReference.latestWkid}` : "3857", + layerName: layer.name, + url: layer.url, + tiled: false, + extent: layer.extent, + name: layer.name, + }; + if (props.config.toggleVisibleAll) layer.defaultVisibility = props.config.toggleVisibleAll; + if (layer.grouped) { + layerOptions["layers"] = layer.layers; + layerOptions.sourceType = OL_DATA_TYPES.LayerGroup; + } + LayerHelpers.getLayer(layerOptions, (newLayer) => { + const identifyUrl = (options) => + `${options.url}/identify?geometry=${options.point}&geometryType=${options.geometryType}&layers=visible%3A${options.layerId}&sr=3857&datumTransformations=3857&tolerance=${options.tolerance}&mapExtent=${options.extent}&imageDisplay=${options.resolution}&maxAllowableOffset=10&returnGeometry=true&returnFieldName=false&f=json`; + const getAttachmentUrl = (options) => `${options.url}/${options.layerId}/queryAttachments?objectIds=${options.objectId}&returnUrl=true&f=json`; + const getRecordCountUrl = (options) => `${options.url}/${options.layerId}/query?where=0%3D0&returnCountOnly=true&f=json`; + const getQueryUrl = (options) => `${options.url}/${options.layerId}/query?where=#WHERE#&outFields=*&outSR=3857&returnCountOnly=false&f=geojson`; + + const rootInfoUrl = layer.url; + let attachmentUrl = getAttachmentUrl({ + url: layer.rootUrl, + layerId: layer.id, + objectId: "#OBJECTID#", + }); + let queryUrl = getQueryUrl({ + url: layer.rootUrl, + layerId: layer.id, + }); + let wfsUrl = identifyUrl({ + url: layer.rootUrl, + point: "#GEOMETRY#", + layerId: layer.id, + tolerance: "#TOLERANCE#", + extent: "#EXTENT#", + resolution: "#RESOLUTION#", + geometryType: "#GEOMETRYTYPE#", + }); + let recordCountUrl = getRecordCountUrl({ + url: layer.rootUrl, + layerId: layer.id, + }); + var url = new URL(rootInfoUrl); + const urlParams = new URLSearchParams(url.searchParams); + const url_token = urlParams.get("token"); + if (url_token) wfsUrl = `${wfsUrl}&token=${url_token}`; + if (url_token && hasAttachments) attachmentUrl = `${attachmentUrl}&token=${url_token}`; + if (url_token) recordCountUrl = `${recordCountUrl}&token=${url_token}`; + if (url_token) queryUrl = `${queryUrl}&token=${url_token}`; + + zIndex++; + newLayer.setVisible(layer.defaultVisibility); + newLayer.setZIndex(zIndex); + newLayer.setOpacity(layer.options ? layer.options.opacity || 1 : 1); + newLayer.setProperties({ + name: layer.name, + displayName: layer.name, + tocDisplayName: layer.name, + wfsUrl: wfsUrl, + rootInfoUrl: rootInfoUrl, + clickable: true, + disableParcelClick: false, + queryable: layer.queryable !== undefined ? layer.queryable : false, + opaque: layer.opaque !== undefined ? layer.opaque : false, + minScale: layer.minScale, + maxScale: layer.maxScale, + attachmentUrl: hasAttachments ? attachmentUrl : null, + hasAttachments: hasAttachments, + recordCountUrl: recordCountUrl, + featureQueryUrl: queryUrl, + }); + newLayer["layerConfig"] = layer; + newLayer["key"] = helpers.getUID(); + layerArray.push(newLayer); + }); + }); + setLayers(layerArray); + }; + useEffect(() => { + setShowAll(props.visibleAll); + }, [props.visibleAll]); + + useEffect(() => { + if (props.serviceConfig.secure) + if (props.serviceConfig.tokenType === "app") + getAppAccessToken(props.serviceConfig.serviceUrl, (accessToken) => { + setToken(accessToken); + LayerHelpers.getCapabilities({ root_url: props.serviceConfig.serviceUrl, type: "rest", secured: props.serviceConfig.secured, token: accessToken.access_token }, (returnLayers) => { + //console.log(returnLayers); + processLayers(returnLayers); + }); + }); + else if (props.serviceConfig.tokenType === "user") + getAccessToken((token) => { + setToken(token); + LayerHelpers.getCapabilities({ root_url: props.serviceConfig.serviceUrl, type: "rest", secured: props.serviceConfig.secured, token: token }, (returnLayers) => { + //console.log(returnLayers); + processLayers(returnLayers); + }); + }); + else + LayerHelpers.getCapabilities({ root_url: props.serviceConfig.serviceUrl, type: "rest" }, (returnLayers) => { + processLayers(returnLayers); + }); + else + LayerHelpers.getCapabilities({ root_url: props.serviceConfig.serviceUrl, type: "rest" }, (returnLayers) => { + processLayers(returnLayers); + }); + }, []); + return ( + <> + {layers.map((layer) => ( + + ))} +
    {props.children}
    + + ); +}; + +const ThemeServiceLegend = (props) => { + const legends = props.legend.filter((item) => item.imageData !== undefined); + if (legends.length === 1) { + return style; + } else if (legends.length > 1) { + return ( +
      + {legends + .filter((item) => item.imageData !== undefined) + .map((legend) => ( +
    • + style + +
    • + ))} +
    + ); + } else { + return null; + } +}; +const ThemeServiceTogglerItem = (props) => { + const [visible, setVisible] = useState(true); + // const [layer, setLayer] = useState(props.layer); + const [recordCount, setRecordCount] = useState(0); + const [styleUrl, setStyleUrl] = useState(""); + const [legend, setLegend] = useState([{}]); + const [mapClickEvent, setMapClickEvent] = useState({}); + const [isLoading, setIsLoading] = useState(true); + const [showLegend, setShowLegend] = useState(false); + const layerRef = useRef(props.layer); + const init = () => { + setVisible(props.layerConfig.defaultVisibility); + if (props.layerConfig.legend) setLegend(props.layerConfig.legend.legend); + if (props.layerConfig.legend) setStyleUrl(`data:${props.layerConfig.legend.legend[0].contentType};base64,${props.layerConfig.legend.legend[0].imageData}`); + getRecordCount(); + setupMapClick(); + if (props.config.toggleLayersKey) layerRef.current.setProperties({ themeKey: props.config.toggleLayersKey }); + window.map.addLayer(layerRef.current); + setIsLoading(false); + }; + + const setupMapClick = () => { + if (props.onMapClick) { + setMapClickEvent(window.map.on("click", props.onMapClick)); + } else { + const clickEvent = (evt) => { + if (window.isDrawingOrEditing || !visible || window.isCoordinateToolOpen || window.isMeasuring || !layerRef.current) return; + var viewResolution = window.map.getView().getResolution(); + console.log("setupMapClick", layerRef.current.getSource()); + var url = layerRef.current.getSource().getFeatureInfoUrl(evt.coordinate, viewResolution, "EPSG:3857", { + INFO_FORMAT: "application/json", + }); + if (url) { + get(url, { useBearerToken: this.props.layerConfig.secure || false }, (result) => { + const features = result.features; + if (!features) { + return; + } + + const geoJSON = new GeoJSON().readFeatures(result); + const feature = geoJSON[0]; + + const entries = Object.entries(feature.getProperties()); + window.popup.show( + evt.coordinate, + , + this.props.layerConfig.displayName + ); + }); + } + }; + setMapClickEvent(window.map.on("click", clickEvent)); + } + }; + const getRecordCount = () => { + const url = layerRef.current.get("recordCountUrl"); + helpers.getJSON(url, (result) => { + if (result.count) setRecordCount(result.count); + }); + }; + const onCheckboxChange = (isChecked) => { + setVisible(isChecked); + layerRef.current.setVisible(isChecked); + props.onLayerVisiblityChange(layerRef.current); + }; + const cleanup = () => { + window.map.removeLayer(layerRef.current); + unByKey(mapClickEvent); + }; + + useEffect(() => { + if (!isLoading) onCheckboxChange(props.showAll); + }, [props.showAll]); + useEffect(() => { + layerRef.current = props.layer; + }, [props.layer]); + + useEffect(() => { + // console.log(layer); + init(); + return () => { + cleanup(); + }; + }, []); + + const LegendToggle = (props) => { + const legends = props.legend.filter((item) => item.imageData !== undefined); + if (legends.length === 1) { + return style; + } else if (legends.length > 1) { + return ( +
    setShowLegend(!showLegend)}> + {!showLegend ? "+" : "-"} +
    +
    +
    + ); + } else { + return null; + } + }; + return ( +
    +
    + +
    +
    + + +
    + +
    +
    +
    + +
    + {/* style */} + +
    {props.children}
    +
    + ); +}; + +export default ThemeServiceToggler; diff --git a/src/sidebar/components/toc/TOC.jsx b/src/sidebar/components/toc/TOC.jsx index 139a345d..9d030069 100644 --- a/src/sidebar/components/toc/TOC.jsx +++ b/src/sidebar/components/toc/TOC.jsx @@ -12,6 +12,7 @@ import TOCFolderView from "./toc-folder-view/TOCFolderView.jsx"; import * as helpers from "../../../helpers/helpers"; import { LayerHelpers } from "../../../helpers/OLHelpers"; import LegendApp from "../../../legend/App"; +import { get, createObjectURL } from "../../../helpers/api"; class TOC extends Component { constructor(props) { @@ -249,7 +250,7 @@ class TOC extends Component { }); break; case "GEOSERVER": - TOCHelpers.getGroupsGC(geoserverUrl, geoserverUrlType, isReset, this.state.type, false, true, undefined, (result) => { + TOCHelpers.getGroupsGC(geoserverUrl, geoserverUrlType, isReset, this.state.type, false, true, (result) => { this.loadGroups(result, isReset, callback); }); break; @@ -734,28 +735,34 @@ class TOC extends Component { if (layerInfo.legendImage === null && (layerInfo.legendObj === undefined || layerInfo.legendObj === null)) { const params = {}; - const secureKey = layerInfo.layer.get("secureKey"); - if (secureKey !== undefined) { - params[secureKey] = "GIS"; + const secured = layerInfo.layer.get("secured"); + if (secured) { + params["useBearerToken"] = true; } - helpers.getBase64FromImageUrlWithParams(layerInfo.styleUrl, params, (height, imgData) => { - const rowHeight = showLegend ? (height += 36) : 30; - let newGroup = Object.assign({}, group); - let newLayers = Object.assign([], group.layers); - layerInfo.showLegend = showLegend; - layerInfo.height = rowHeight; - layerInfo.legendImage = imgData; - layerInfo.legendHeight = rowHeight; - newLayers = newLayers.map((layer2) => (layer2.name === layerInfo.name ? layerInfo : layer2)); - newGroup.layers = newLayers; - this.setLayerGroups( - this.state.type, - this.getActiveLayerGroups().map((item) => (item.value === newGroup.value ? newGroup : item)), - () => { - if (callback !== undefined) callback(); - } - ); + get(layerInfo.styleUrl, { ...params, type: "blob" }, (results) => { + var imgData = createObjectURL(results); + const img = new Image(); + img.onload = () => { + let height = img.height; + const rowHeight = showLegend ? (height += 36) : 30; + let newGroup = Object.assign({}, group); + let newLayers = Object.assign([], group.layers); + layerInfo.showLegend = showLegend; + layerInfo.height = rowHeight; + layerInfo.legendImage = imgData; + layerInfo.legendHeight = rowHeight; + newLayers = newLayers.map((layer2) => (layer2.name === layerInfo.name ? layerInfo : layer2)); + newGroup.layers = newLayers; + this.setLayerGroups( + this.state.type, + this.getActiveLayerGroups().map((item) => (item.value === newGroup.value ? newGroup : item)), + () => { + if (callback !== undefined) callback(); + } + ); + }; + img.src = imgData; }); } else { const rowHeight = showLegend ? layerInfo.legendHeight : 30; diff --git a/src/sidebar/components/toc/common/TOCHeader.css b/src/sidebar/components/toc/common/TOCHeader.css index d1005aeb..169d53aa 100644 --- a/src/sidebar/components/toc/common/TOCHeader.css +++ b/src/sidebar/components/toc/common/TOCHeader.css @@ -72,7 +72,6 @@ cursor: pointer; z-index: 100000; } - .sc-toc-header-help { background-color: #6ea8cf; border: 1px solid rgba(202, 202, 202, 0.69); diff --git a/src/sidebar/components/toc/common/TOCHeader.jsx b/src/sidebar/components/toc/common/TOCHeader.jsx index d899f499..c3e435c3 100644 --- a/src/sidebar/components/toc/common/TOCHeader.jsx +++ b/src/sidebar/components/toc/common/TOCHeader.jsx @@ -96,7 +96,6 @@ class TOCHeader extends Component { this.props.onSearchChange(""); }); }; - onSearchChange = (evt) => { const searchText = evt.target.value; this.setState({ searchText: searchText }, () => { diff --git a/src/sidebar/components/toc/common/TOCHelpers.jsx b/src/sidebar/components/toc/common/TOCHelpers.jsx index f2daab3c..bc21556c 100644 --- a/src/sidebar/components/toc/common/TOCHelpers.jsx +++ b/src/sidebar/components/toc/common/TOCHelpers.jsx @@ -1,6 +1,8 @@ import * as helpers from "../../../../helpers/helpers"; import * as drawingHelpers from "../../../../helpers/drawingHelpers"; import { LayerHelpers, FeatureHelpers, OL_DATA_TYPES } from "../../../../helpers/OLHelpers"; +import { get } from "../../../../helpers/api"; +import { getAppAccessToken } from "../../../../helpers/esriHelpers"; import { WMSCapabilities } from "ol/format.js"; // INDEX WHERE THE TOC LAYERS SHOULD START DRAWING AT @@ -99,7 +101,7 @@ export async function getMap(sources, isReset, tocType, callback) { if (source.type === undefined || source.type === null || source.type === "") source["type"] = "geoserver"; //default to geoserver switch (source.type.toLowerCase()) { case "geoserver": - getGroupsGC(source.layerUrl, source.urlType !== undefined ? source.urlType : urlType, isReset, tocType, source.secure, source.primary, source.secureKey, (layerGroupConfig) => { + getGroupsGC(source.layerUrl, source.urlType !== undefined ? source.urlType : urlType, isReset, tocType, source.secure, source.primary, (layerGroupConfig) => { if (source.group !== undefined) { if (layerGroupConfig.groups[0] !== undefined) { if (source.group.name !== undefined) layerGroupConfig.groups[0]["value"] = source.group.name; @@ -128,46 +130,85 @@ export async function getMap(sources, isReset, tocType, callback) { }); break; case "arcgis": - getGroupsESRI( - { - url: source.layerUrl, - tocType: tocType, - isReset: isReset, - requiresToken: source.secure, - grouped: source.grouped, - grouped_name: source.name, - secured: source.secure, - open: source.open || false, - useRedFolder: source.useRedFolder || false, - primary: source.primary || false, - visibleLayers: source.visibleLayers, - }, - (layerGroupConfig) => { - if (!layerGroupConfig.groups) { + if (source.appToken) + getAppAccessToken(source.layerUrl, (accessToken) => { + getGroupsESRI( + { + url: source.layerUrl, + tocType: tocType, + isReset: isReset, + requiresToken: source.secure, + grouped: source.grouped, + grouped_name: source.name, + secured: source.secure, + token: accessToken.access_token, + open: source.open || false, + useRedFolder: source.useRedFolder || false, + primary: source.primary || false, + visibleLayers: source.visibleLayers, + }, + (layerGroupConfig) => { + if (!layerGroupConfig.groups) { + sourcesProcessed++; + return; + } + if (source.primary && default_group === undefined) default_group = layerGroupConfig.defaultLayerName; + if (layerGroups === undefined) { + layerGroups = layerGroupConfig.groups; + } else { + layerGroups = mergeGroups(layerGroups, layerGroupConfig.groups); + } + sourcesProcessed++; + if (sourcesProcessed >= sources.length) { + callback({ + groups: layerGroups, + defaultGroupName: default_group, + }); + } + } + ); + }); + else + getGroupsESRI( + { + url: source.layerUrl, + tocType: tocType, + isReset: isReset, + requiresToken: source.secure, + grouped: source.grouped, + grouped_name: source.name, + secured: source.secure, + appToken: source.appToken, + open: source.open || false, + useRedFolder: source.useRedFolder || false, + primary: source.primary || false, + visibleLayers: source.visibleLayers, + }, + (layerGroupConfig) => { + if (!layerGroupConfig.groups) { + sourcesProcessed++; + return; + } + if (source.primary && default_group === undefined) default_group = layerGroupConfig.defaultLayerName; + if (layerGroups === undefined) { + layerGroups = layerGroupConfig.groups; + } else { + layerGroups = mergeGroups(layerGroups, layerGroupConfig.groups); + } sourcesProcessed++; - return; - } - if (source.primary && default_group === undefined) default_group = layerGroupConfig.defaultLayerName; - if (layerGroups === undefined) { - layerGroups = layerGroupConfig.groups; - } else { - layerGroups = mergeGroups(layerGroups, layerGroupConfig.groups); - } - sourcesProcessed++; - if (sourcesProcessed >= sources.length) { - callback({ - groups: layerGroups, - defaultGroupName: default_group, - }); + if (sourcesProcessed >= sources.length) { + callback({ + groups: layerGroups, + defaultGroupName: default_group, + }); + } } - } - ); + ); break; case "layer": const layerOptions = { url: source.layerUrl, secure: source.secure, - secureKey: source.secureKey, type: source.type, groups: source.groups, layerType: source.layerType, @@ -180,6 +221,7 @@ export async function getMap(sources, isReset, tocType, callback) { projection: source.projection, index: source.index, }; + getSingleLayer(layerOptions, (layerGroupConfig) => { if (!layerGroupConfig.groups) { sourcesProcessed++; @@ -370,7 +412,9 @@ export function getGroupsESRI(options, callback) { let groupsObj = {}; const isGrouped = options.grouped ? true : false; let groupedLayer = { name: options.grouped_name, layers: [] }; - LayerHelpers.getCapabilities({ root_url: options.url, type: "rest", secured: options.secured }, (layers) => { + let getCapabilitiesOptions = { root_url: options.url, type: "rest", secured: options.secured }; + if (options.token) getCapabilitiesOptions["token"] = options.token; + LayerHelpers.getCapabilities(getCapabilitiesOptions, (layers) => { if (layers.length === 0) { callback({ groups: groups, defaultGroupName: defaultGroup }); return; @@ -564,7 +608,7 @@ export async function getSingleLayer(options, callback) { false, undefined, (retLayer) => { - if (options.secureKey !== undefined) retLayer.setProperties({ secureKey: options.secureKey }); + if (options.secure !== undefined && retLayer.layer !== undefined) retLayer.layer.setProperties({ secured: options.secure }); newGroup.layers.push(retLayer); groupArray.push(newGroup); if (groupArray.length >= groups.length) callback({ groups: groupArray, defaultLayerName: groups[0] }); @@ -576,7 +620,7 @@ export async function getSingleLayer(options, callback) { }); } // GET GROUPS FROM GET CAPABILITIES -export async function getGroupsGC(url, urlType, isReset, tocType, secured = false, primary = false, secureKey = undefined, callback) { +export async function getGroupsGC(url, urlType, isReset, tocType, secured = false, primary = false, callback) { let defaultGroup = null; let isDefault = false; let groups = []; @@ -587,17 +631,13 @@ export async function getGroupsGC(url, urlType, isReset, tocType, secured = fals const params = {}; const headers = {}; params["mode"] = "cors"; + params["type"] = "text"; headers["Content-Type"] = "application/text"; if (secured) { - const headers = {}; - if (secureKey !== undefined) { - headers[secureKey] = "GIS"; - } - params["headers"] = headers; + params["useBearerToken"] = true; } - - helpers.httpGetTextWithParams(url, params, (result) => { + get(url, params, (result) => { var parser = new WMSCapabilities(); const resultObj = parser.read(result); let groupLayerList = urlType === "root" ? [resultObj.Capability.Layer.Layer[0]] : urlType === "group" ? resultObj.Capability.Layer.Layer[0].Layer : [resultObj.Capability.Layer.Layer[0]]; @@ -668,7 +708,7 @@ export async function getGroupsGC(url, urlType, isReset, tocType, secured = fals const buildLayers = (layers) => { layers.forEach((currentLayer) => { if (!isDuplicate(layerList, currentLayer.Name)) { - buildLayerByGroup(tmpGroupObj, currentLayer, layerIndex, tocType, secured, secureKey, (result) => { + buildLayerByGroup(tmpGroupObj, currentLayer, layerIndex, tocType, secured, (result) => { layerList.push(result); }); layerIndex--; @@ -791,7 +831,7 @@ export function layerToJson(layer, callback) { if (callback !== undefined) callback(returnObject); } -export async function buildLayerByGroup(group, layer, layerIndex, tocType, secured, secureKey = undefined, callback) { +export async function buildLayerByGroup(group, layer, layerIndex, tocType, secured = false, callback) { if (layer.Layer === undefined) { const visibleLayers = group.visibleLayers === undefined ? [] : group.visibleLayers; const geoserverPath = window.config.geoserverPath; @@ -872,7 +912,7 @@ export async function buildLayerByGroup(group, layer, layerIndex, tocType, secur url: serverUrl + "/wms?layers=" + layer.Name, tiled: false, name: displayName, - secureKey: secureKey, + secured: secured, }, (newLayer) => { const wfsUrlTemplate = (rootUrl, layer) => `${rootUrl}/wfs?service=wfs&version=2.0.0&request=GetFeature&typeNames=${layer}&outputFormat=application/json&cql_filter=`; @@ -895,9 +935,10 @@ export async function buildLayerByGroup(group, layer, layerIndex, tocType, secur opaque: opaque, minScale: minScale, maxScale: maxScale, + secured: secured, extendedProperties: { keywords: Object.assign({}, allKeywords) }, }); - if (secureKey !== undefined) newLayer.setProperties({ secureKey: secureKey }); + if (secured) newLayer.setProperties({ secured: true }); newLayer.setZIndex(layerIndex); window.map.addLayer(newLayer); @@ -1045,15 +1086,12 @@ export function updateLayerIndex(layers, callback = undefined) { export function getLayerInfo(layerInfo, callback) { const params = {}; - const secureKey = layerInfo.layer !== undefined ? layerInfo.layer.get("secureKey") : undefined; - if (secureKey !== undefined) { - const headers = {}; - headers[secureKey] = "GIS"; - params["headers"] = headers; - } - helpers.getJSONWithParams(layerInfo.metadataUrl.replace("http:", "https:"), params, (result) => { + const secured = layerInfo.layer ? layerInfo.layer.get("secured") : undefined; + if (secured) params["useBearerToken"] = true; + + get(layerInfo.metadataUrl.replace("http:", "https:"), params, (result) => { const fullInfoUrl = result.layer.resource.href.replace("http:", "https:").split("+").join("%20"); - helpers.getJSONWithParams(fullInfoUrl, params, (fullInfoResult) => { + get(fullInfoUrl, params, (fullInfoResult) => { if (fullInfoResult.featureType === undefined) fullInfoResult["featureType"] = {}; fullInfoResult.featureType.fullUrl = fullInfoUrl.replace("http:", "https:"); fullInfoResult["requestParams"] = params; @@ -1273,7 +1311,6 @@ export async function buildESRILayer(options, callback) { let layer = options.layer; let layerIndex = options.layerIndex; let secured = options.secured !== undefined ? options.secured : false; - let secureKey = options.secureKey; if (layer !== undefined) { const visibleLayers = group.visibleLayers === undefined ? [] : group.visibleLayers; @@ -1392,7 +1429,6 @@ export async function buildESRILayer(options, callback) { attachmentUrl: hasAttachments ? attachmentUrl : null, hasAttachments: hasAttachments, }); - if (secureKey !== undefined) newLayer.setProperties({ secureKey: secureKey }); newLayer.setZIndex(layerIndex); window.map.addLayer(newLayer); let legendHeight = -1; diff --git a/src/sidebar/components/tools/addlayer/AddLayer.jsx b/src/sidebar/components/tools/addlayer/AddLayer.jsx index c046f89e..6500717d 100644 --- a/src/sidebar/components/tools/addlayer/AddLayer.jsx +++ b/src/sidebar/components/tools/addlayer/AddLayer.jsx @@ -232,7 +232,7 @@ class AddLayerForm extends Component { layers.forEach((layer) => { if (this.state.serverUrl.toLowerCase().indexOf("wmsserver") !== -1) { layer["INFO_FORMAT"] = addLayerConfig.arcgis.INFO_FORMAT; - layer["XSL_TEMPLATE"] = `${window.config.originUrl}${addLayerConfig.arcgis.XSL_TEMPLATE}`; + layer["XSL_TEMPLATE"] = addLayerConfig.arcgis.XSL_TEMPLATE.indexOf("http") === -1 ? `/${window.homepage}/${addLayerConfig.arcgis.XSL_TEMPLATE}` : addLayerConfig.arcgis.XSL_TEMPLATE; } selectLayers.push(layer); @@ -302,7 +302,8 @@ class AddLayerForm extends Component { if (foundLayers !== undefined && foundLayers.length > 0) { foundLayers.forEach((layer) => { if (selectedService.INFO_FORMAT) layer["INFO_FORMAT"] = selectedService.INFO_FORMAT; - if (selectedService.XSL_TEMPLATE) layer["XSL_TEMPLATE"] = `${window.config.originUrl}${selectedService.XSL_TEMPLATE}`; + if (selectedService.XSL_TEMPLATE) + layer["XSL_TEMPLATE"] = selectedService.XSL_TEMPLATE.indexOf("http") === -1 ? `/${window.homepage}/${selectedService.XSL_TEMPLATE}` : selectedService.XSL_TEMPLATE; serviceLayers.push(layer); }); } diff --git a/src/sidebar/components/tools/addlayer/config.json b/src/sidebar/components/tools/addlayer/config.json index 7f430253..138b451f 100644 --- a/src/sidebar/components/tools/addlayer/config.json +++ b/src/sidebar/components/tools/addlayer/config.json @@ -201,7 +201,7 @@ ], "arcgis": { "INFO_FORMAT": "text/plain", - "XSL_TEMPLATE": "/public/xsl/esri_transform.xsl" + "XSL_TEMPLATE": "/xsl/esri_transform.xsl" }, "dataTypes": [ { @@ -264,7 +264,7 @@ "serviceUrl": "https://ws.lioservices.lrc.gov.on.ca/arcgis1071a/services", "urlSuffix": "/MapServer/WMSServer", "INFO_FORMAT": "text/plain", - "XSL_TEMPLATE": "/public/xsl/esri_transform.xsl" + "XSL_TEMPLATE": "/xsl/esri_transform.xsl" }, { @@ -277,7 +277,7 @@ "serviceUrl": "https://maps.simcoe.ca/arcgis/services", "urlSuffix": "/MapServer/WMSServer", "INFO_FORMAT": "text/plain", - "XSL_TEMPLATE": "/public/xsl/esri_transform.xsl", + "XSL_TEMPLATE": "/xsl/esri_transform.xsl", "filterServices": ["Public/Operational_Layers_Dynamic"] } ] diff --git a/src/sidebar/components/tools/lotandconcession/LotAndConcession.jsx b/src/sidebar/components/tools/lotandconcession/LotAndConcession.jsx index 9ee6fd24..ef3d26b1 100644 --- a/src/sidebar/components/tools/lotandconcession/LotAndConcession.jsx +++ b/src/sidebar/components/tools/lotandconcession/LotAndConcession.jsx @@ -81,15 +81,16 @@ class ToolComponent extends Component { window.map.addLayer(this.layer); helpers.getWFSGeoJSON( - toolConfig.serverUrl, - this.layerName, + { + serverUrl: toolConfig.serverUrl, + layerName: this.layerName, + cqlFilter: sql, + sortField: "_lot,_con", + count: 1000, + }, (result) => { this.updateFeatures(result); - }, - "_lot,_con", - null, - sql, - 1000 + } ); }); }; diff --git a/src/sidebar/components/tools/print/Print.jsx b/src/sidebar/components/tools/print/Print.jsx index 2d62a1f2..5dfb9da1 100644 --- a/src/sidebar/components/tools/print/Print.jsx +++ b/src/sidebar/components/tools/print/Print.jsx @@ -3,6 +3,8 @@ import Select from "react-select"; import Collapsible from "react-collapsible"; import PanelComponent from "../../../PanelComponent"; import * as helpers from "../../../../helpers/helpers"; +import { post } from "../../../../helpers/api"; + import * as printRequest from "./printRequest/printRequest"; import printConfig from "./config.json"; import "./Print.css"; @@ -37,6 +39,7 @@ class Print extends Component { isPrinting: false, termsOfUse: printConfig.termsOfUse, mapResolutionOption: "120", + options: this.props.options || {}, }; } @@ -48,7 +51,11 @@ class Print extends Component { if (globalConfig.config !== undefined) { const defaultSizes = this.config.printSizes; this.config = helpers.mergeObj(this.config, globalConfig.config); - this.config.printSizes = [...new Set([...defaultSizes, ...printConfig.printSizes])]; + if (printConfig.overwrite) this.config.printSizes = [...new Set([...printConfig.printSizes])]; + else { + if (printConfig.append === undefined || printConfig.append) this.config.printSizes = [...new Set([...defaultSizes, ...printConfig.printSizes])]; + else this.config.printSizes = [...new Set([...printConfig.printSizes, ...defaultSizes])]; + } } this.setState({ printUrl: mainConfig.printUrl, @@ -109,16 +116,14 @@ class Print extends Component { onDownloadButtonClick = async (evt) => { // GET VISIBLE LAYERS const printLayers = this.getPrintLayers(); - let secureKey = undefined; - const params = { method: "POST" }; - const headers = { "Content-Type": "application/json" }; + let secured = false; + const params = {}; printLayers.forEach((layer) => { - secureKey = layer.get("secureKey"); - if (secureKey !== undefined) { - headers[secureKey] = "GIS"; + secured = layer.get("secured"); + if (secured) { + params["useBearerToken"] = secured; } }); - params["headers"] = headers; // ======================= // SEND PRINT SERVER REQUEST HERE @@ -172,13 +177,14 @@ class Print extends Component { }; //post request to server and check status params["body"] = encodedPrintRequest; - fetch(url, params) - .then((response) => response.json()) - .then((response) => { + post(url, params, (response) => { + if (typeof response === "string" && response.includes("ERROR")) + helpers.showMessage("Print Failed", `There has been a problem with your fetch operation: ${response}`, helpers.messageColors.red, 15000); + else { this.setState({ isPrinting: true }); checkStatus(response); - }) - .catch((error) => helpers.showMessage("Print Failed", `There has been a problem with your fetch operation: ${error.message}`, helpers.messageColors.red, 15000)); + } + }); helpers.addAppStat("Print Button", "Click"); }; diff --git a/src/sidebar/components/tools/print/printRequest/printRequest.js b/src/sidebar/components/tools/print/printRequest/printRequest.js index 5dd541b2..094715ae 100644 --- a/src/sidebar/components/tools/print/printRequest/printRequest.js +++ b/src/sidebar/components/tools/print/printRequest/printRequest.js @@ -181,8 +181,7 @@ let configureTileLayer = async (l) => { tileUrl = layerSource.getUrls(); tileUrl = tileUrl[0].indexOf("/MapServer/WMTS/") !== -1 ? `${tileUrl[0].split("/WMTS/")[0]}` : `${tileUrl[0].split("/tile/")[0]}`; let retLayer = {}; - const openstreetmapUrl = "openstreetmap.org"; - if (l.values_.source.key_.includes(openstreetmapUrl)) { + if (l.values_.source.key_.includes("openstreetmap.org")) { retLayer = { baseURL: l.values_.source.key_.split("\n")[0], type: "OSM", @@ -334,6 +333,7 @@ const switchTemplates = (options, callback = undefined) => { const rotation = 0; const dpi = parseInt(options.mapResolutionOption); let printSize = options.printSizeSelectedOption.size === [] ? window.map.getSize() : options.printSizeSelectedOption.size; + const parameters = options.options.parameters || []; const attributes = { title: options.mapTitle, @@ -344,6 +344,11 @@ const switchTemplates = (options, callback = undefined) => { }, scale: "1 : " + currentMapScale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), }; + if (parameters !== undefined) { + parameters.forEach((item) => { + attributes[item.name] = item.value; + }); + } attributes.map.projection = mapProjection; attributes.map.longitudeFirst = longitudeFirst; attributes.map.rotation = rotation; @@ -403,6 +408,8 @@ export async function printRequest(mapLayers, printSelectedOption) { dpi: parseInt(printSelectedOption.mapResolutionOption), compressed: true, }; + printRequest["parameters"] = printSelectedOption.options.parameters || []; + printRequest.outputFormat = printSelectedOption.printFormatSelectedOption.value; //ensures that template configuration is executed before print request object is sent printRequest.attributes = switchTemplates(printSelectedOption); @@ -412,7 +419,6 @@ export async function printRequest(mapLayers, printSelectedOption) { let overviewMap = []; let sortedMainMap = []; let sortedOverviewMap = []; - //iterate through each map layer passed in the window.map let layerOrder = 0; mapLayers.forEach((layer) => { diff --git a/src/sidebar/components/tools/searchaddresses/SearchAddresses.css b/src/sidebar/components/tools/searchaddresses/SearchAddresses.css index 366658ab..0d7bb8e6 100644 --- a/src/sidebar/components/tools/searchaddresses/SearchAddresses.css +++ b/src/sidebar/components/tools/searchaddresses/SearchAddresses.css @@ -10,7 +10,7 @@ font-size: 10pt; font-family: Arial !important; } -#sc-theme-search-addresses-muni { +#sc-tool-search-addresses-muni { z-index: 2 !important; } #sc-tool-search-addresses-street-search::placeholder { @@ -26,41 +26,41 @@ font-size: 9pt; } -.sc-theme-search-addresses-controls { +.sc-tool-search-addresses-controls { margin-top: 5px; margin-bottom: 5px; height: 145px; } -.sc-theme-search-addresses-control { +.sc-tool-search-addresses-control { display: table-cell; } -.sc-theme-search-addresses-control.label { +.sc-tool-search-addresses-control.label { width: 108px; font-size: 10pt; } -.sc-theme-search-addresses-control.input { +.sc-tool-search-addresses-control.input { width: 238px; font-size: 10pt; } -.sc-theme-search-addresses-number { +.sc-tool-search-addresses-number { width: 233px; height: 24px; } -.sc-theme-search-addresses-control-row { +.sc-tool-search-addresses-control-row { display: table; margin-top: 5px; } -.sc-theme-search-addresses-button-container { +.sc-tool-search-addresses-button-container { float: right; height: 34px; } -.sc-theme-search-addresses-button { +.sc-tool-search-addresses-button { display: table-cell; width: 112px; height: 31px; @@ -82,14 +82,14 @@ border-radius: 2px; } -.sc-theme-search-addresses-control legend { +.sc-tool-search-addresses-control legend { display: none !important; } -.sc-theme-search-addresses-control fieldset { +.sc-tool-search-addresses-control fieldset { top: 0px !important; box-shadow: none !important; } -.sc-theme-search-addresses-number:focus-visible { +.sc-tool-search-addresses-number:focus-visible { outline-color: #337ab7 !important; } .sc-tool-search-addresses-street-search-menu { diff --git a/src/sidebar/components/tools/searchaddresses/SearchAddresses.jsx b/src/sidebar/components/tools/searchaddresses/SearchAddresses.jsx index 5bbf4c80..12bb6d2e 100644 --- a/src/sidebar/components/tools/searchaddresses/SearchAddresses.jsx +++ b/src/sidebar/components/tools/searchaddresses/SearchAddresses.jsx @@ -130,15 +130,16 @@ const SearchAddresses = (props) => { } helpers.getWFSGeoJSON( - searchAddressConfig.serverUrl, - searchAddressConfig.layerName, + { + serverUrl: searchAddressConfig.serverUrl, + layerName: searchAddressConfig.layerName, + sortField: "stnum,fullname", + cqlFilter: sql, + count: 1000, + }, (result) => { updateFeatures(result); - }, - "stnum,fullname", - null, - sql, - 1000 + } ); }); }; @@ -210,22 +211,22 @@ const SearchAddresses = (props) => {
    Locate civic addresses within the County using the form below.
    -
    -
    - -
    -
    -
    - -
    - +
    + +
    +
    -
    - -
    +
    + +
    { /> */}
    -
    - -
    diff --git a/src/sidebar/components/tools/settings/Settings.jsx b/src/sidebar/components/tools/settings/Settings.jsx index 6f2a7060..f7744333 100644 --- a/src/sidebar/components/tools/settings/Settings.jsx +++ b/src/sidebar/components/tools/settings/Settings.jsx @@ -4,7 +4,7 @@ import { ClearLocalStorageButton, ClearLocalStorageButtonGrouped } from "./Setti import * as helpers from "../../../../helpers/helpers"; import PanelComponent from "../../../PanelComponent"; import settingsConfig from "./config.json"; -const microsoftLoginKey = "login.microsoftonline.com"; +import { setUserStorage, clearUserStorage } from "../../../../helpers/storage.js"; class Settings extends Component { constructor(props) { @@ -22,6 +22,7 @@ class Settings extends Component { this.storageKey = "Settings"; this.storageKeyMapControls = "Map Control Settings"; } + componentDidMount() { //wait for map to load helpers.waitForLoad("map", Date.now(), 30, () => this.onMapLoad()); @@ -97,15 +98,24 @@ class Settings extends Component { helpers.saveToStorage(this.storageKeyMapControls, window.mapControls); }; + reloadPage = () => { + window.location.reload(); + }; clearLocalData = (key) => { if (key === "ALL") { - localStorage.clear(); + if (window.security.includes("saveToServer")) + clearUserStorage(() => { + localStorage.clear(); + }); + else localStorage.clear(); helpers.showMessage("Local Data Cleared", "Your local data has been cleared. Page will now reload."); setTimeout(() => { - window.location.reload(); - }, 2000); + this.reloadPage(); + }, 1500); } else { - localStorage.removeItem(key); + helpers.removeFromStorage(key); + //localStorage.removeItem(key); + if (window.security.includes("saveToServer")) setUserStorage(); helpers.showMessage("Local Data Removed", "Your local data has been cleared. You may need to reload your page to see any changes."); } }; @@ -264,28 +274,34 @@ class Settings extends Component {
    LOCAL STORAGE
    +
    + +
    +
    - {Object.keys(localStorage) - .filter((key) => { - return key.indexOf(microsoftLoginKey) === -1; - }) - .map((key) => ( - - ))} - { - return key.indexOf(microsoftLoginKey) !== -1; + return key.indexOf("login.microsoftonline.com") !== -1 || key.indexOf("login.windows.net") !== -1 || key.indexOf("msal.") !== -1; })} clearLocalData={this.clearLocalData} /> + + {Object.keys(localStorage) + .filter((key) => { + return key.indexOf("login.microsoftonline.com") === -1 && key.indexOf("login.windows.net") === -1 && key.indexOf("msal.") === -1; + }) + .map((key) => ( + + ))}
    diff --git a/src/sidebar/components/tools/settings/SettingsComponents.jsx b/src/sidebar/components/tools/settings/SettingsComponents.jsx index 5b445718..3d588d81 100644 --- a/src/sidebar/components/tools/settings/SettingsComponents.jsx +++ b/src/sidebar/components/tools/settings/SettingsComponents.jsx @@ -1,43 +1,43 @@ import React from "react"; export const ClearLocalStorageButtonGrouped = (props) => { - if (!props.storageKeys || props.storageKeys.length === 0) return
    ; - return ( -
    - -
    -
    - ); + if (!props.storageKeys || props.storageKeys.length === 0) return
    ; + return ( +
    + +
    +
    + ); }; export const ClearLocalStorageButton = (props) => { - if (props.storageKey === undefined) return
    ; - return ( -
    - -
    -
    - ); + if (props.storageKey === undefined) return
    ; + return ( +
    + +
    +
    + ); }; diff --git a/src/sidebar/images/lock-icon.png b/src/sidebar/images/lock-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c12242920d4e4e4878bb924f4cde6a5d7b3a5238 GIT binary patch literal 841 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6XVU3I`u#fXMsm#F#`j) zFbFd;%$g$sRL~#b6XFV#oUvr_@-3T=T{wUI;`tR@Hv_p{)2FT7wR8UJRlT!j0@3=g(`KJgH^k1RyzS-rOY{)^|*u(mrMK(v2H{Wb34f8}{x7YVVmb zeZ}^zKrT?_j^oEB%$eOiecGxW+riwUeY0lHT(Wq|{CSHvtedrT$?RoI=K#_2Wh=LB zow{H?P^x?S^dlF~zyJB;^o?tq_V4SSF}%#rJ%QtOYw0>=4cUOI9=jMa^FFks& zY~u!?8-QGE2m1+a30qb-#Ajq|p6NHQH#8w5HMz9Zz}i5RpI@N6!vFAwinVJdHno)OTAI|=S=iN8vTb>8Q)}7s4GY%KFLLwo zDQ~Esxpc|$Et`QsF=^f$AQu?aX4Y1r(a|9>F`+Th!BJ5m(b1tXF%X8fz8+A4DG!r8 zkZLUn@(X6L-1z40W}B4Xe}8=Yn<)F`hbNQAhhJLV|5H={)-M00#P@sG>hBW2kLXdtYqi0VZwtoEigO#PVrN!0d=mMrkLX#A{yrS5&6tva( z7m0{WUBGloYgIy&uk4}g7p`2ocJb=v%a_d!Shyu5XU}MA?3`&Cap2IIOI$oUYjY1U zZ7ci6myq!O1&dfgSz&4M_YYq_ef#*8nfnJj3ma>DOIxeEi(4b>qU5B