From 6fb25d0f3f9e8f97e8f806fa87c3c5261d376996 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Tue, 17 Sep 2024 21:42:07 -0400 Subject: [PATCH 01/12] Add a hillshade layer --- src/js/style.js | 12 ++++++++++++ src/layer/hillshade.js | 19 +++++++++++++++++++ src/layer/index.js | 3 +++ 3 files changed, 34 insertions(+) create mode 100644 src/layer/hillshade.js diff --git a/src/js/style.js b/src/js/style.js index bcf72ed6c..7af6140f7 100644 --- a/src/js/style.js +++ b/src/js/style.js @@ -11,6 +11,18 @@ export function build(tileURL, spriteURL, glyphURL, locales) { url: tileURL, type: "vector", }, + dem: { + attribution: + 'Terrain Tiles', + type: "raster-dem", + tiles: [ + "https://s3.amazonaws.com/elevation-tiles-prod/terrarium/{z}/{x}/{y}.png", + ], + encoding: "terrarium", + tileSize: 256, + // The actual maxzoom is 15 + maxzoom: 12, + }, }, sprite: spriteURL, light: { diff --git a/src/layer/hillshade.js b/src/layer/hillshade.js new file mode 100644 index 000000000..abfd78a9b --- /dev/null +++ b/src/layer/hillshade.js @@ -0,0 +1,19 @@ +export const hillshading = { + id: "hillshading", + type: "hillshade", + source: "dem", + paint: { + "hillshade-exaggeration": [ + "interpolate", + ["linear"], + ["zoom"], + 3, + 0.2, + 12, + 0.5, + ], + "hillshade-shadow-color": "rgba(102,85,51,1)", + "hillshade-highlight-color": "rgba(255,255,204,1)", + "hillshade-accent-color": "rgba(0,0,0,1)", + }, +}; diff --git a/src/layer/index.js b/src/layer/index.js index 740eb6061..bcbe0a2b2 100644 --- a/src/layer/index.js +++ b/src/layer/index.js @@ -8,6 +8,7 @@ import * as lyrBackground from "./background.js"; import * as lyrBoundary from "./boundary.js"; import * as lyrConstruction from "./construction.js"; import * as lyrHighwayShield from "./highway_shield.js"; +import * as lyrHillshade from "./hillshade.js"; import * as lyrLanduse from "./landuse.js"; import * as lyrOneway from "./oneway.js"; import * as lyrPark from "./park.js"; @@ -83,6 +84,8 @@ export function build(locales) { lyrFerry.ferry, + lyrHillshade.hillshading, + lyrAeroway.runway, lyrAeroway.runwayArea, lyrAeroway.taxiway, From e12f62c5df6f22f15cbe124dbd94728c1f20cb20 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Wed, 18 Sep 2024 09:51:02 -0400 Subject: [PATCH 02/12] Move hillshade under water --- src/layer/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layer/index.js b/src/layer/index.js index bcbe0a2b2..fe3ef7043 100644 --- a/src/layer/index.js +++ b/src/layer/index.js @@ -42,6 +42,8 @@ export function build(locales) { lyrBoundary.stateCasing, lyrBoundary.countryCasing, + lyrHillshade.hillshading, + lyrWater.waterLine, lyrWater.waterLineIntermittent, lyrWater.waterway, @@ -84,8 +86,6 @@ export function build(locales) { lyrFerry.ferry, - lyrHillshade.hillshading, - lyrAeroway.runway, lyrAeroway.runwayArea, lyrAeroway.taxiway, From 56760ba32d1522dbebefedc702ff9972aaa6f8d5 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Wed, 18 Sep 2024 10:54:11 -0400 Subject: [PATCH 03/12] Changed the hillshade colors --- src/layer/hillshade.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/layer/hillshade.js b/src/layer/hillshade.js index abfd78a9b..a9d7d92fd 100644 --- a/src/layer/hillshade.js +++ b/src/layer/hillshade.js @@ -2,18 +2,20 @@ export const hillshading = { id: "hillshading", type: "hillshade", source: "dem", + maxzoom: 15, paint: { "hillshade-exaggeration": [ "interpolate", ["linear"], ["zoom"], - 3, - 0.2, + 6, + 1, 12, - 0.5, + 0.7, + 15, + 0, ], - "hillshade-shadow-color": "rgba(102,85,51,1)", - "hillshade-highlight-color": "rgba(255,255,204,1)", - "hillshade-accent-color": "rgba(0,0,0,1)", + "hillshade-shadow-color": "hsla(30, 14%, 76%, 1)", + "hillshade-highlight-color": "hsla(30, 44%, 99%, 1)", }, }; From ad3e8cb464b35b841e3ae630f38ad991161a3233 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Wed, 18 Sep 2024 11:30:46 -0400 Subject: [PATCH 04/12] Fade out more slowly --- src/layer/hillshade.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/layer/hillshade.js b/src/layer/hillshade.js index a9d7d92fd..e9e722ab9 100644 --- a/src/layer/hillshade.js +++ b/src/layer/hillshade.js @@ -2,7 +2,7 @@ export const hillshading = { id: "hillshading", type: "hillshade", source: "dem", - maxzoom: 15, + maxzoom: 17, paint: { "hillshade-exaggeration": [ "interpolate", @@ -12,7 +12,9 @@ export const hillshading = { 1, 12, 0.7, - 15, + 16, + 0.1, + 17, 0, ], "hillshade-shadow-color": "hsla(30, 14%, 76%, 1)", From 6ff4bcd4a004c0090f674a58162253e02b42ba91 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Wed, 18 Sep 2024 14:12:42 -0400 Subject: [PATCH 05/12] Add a toggle button --- src/americana.js | 2 ++ src/js/icon_control.js | 43 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/js/icon_control.js diff --git a/src/americana.js b/src/americana.js index e208b7cdf..93f507439 100644 --- a/src/americana.js +++ b/src/americana.js @@ -11,6 +11,7 @@ import "maplibre-gl/dist/maplibre-gl.css"; import * as search from "./search.js"; import LegendControl from "./js/legend_control.js"; +import { HillshadeControl } from "./js/icon_control.js"; import * as LegendConfig from "./js/legend_config.js"; import SampleControl from "openmapsamples-maplibre/OpenMapSamplesControl.js"; import { default as OpenMapTilesSamples } from "openmapsamples/samples/OpenMapTiles/index.js"; @@ -68,6 +69,7 @@ function shieldDefLoad(shields) { map.addControl(new search.PhotonSearchControl(), "top-left"); map.addControl(new maplibregl.NavigationControl(), "top-left"); + map.addControl(new HillshadeControl({ layerId: "hillshading" }), "top-left"); window.addEventListener("languagechange", (event) => { console.log(`Changed to ${navigator.languages}`); diff --git a/src/js/icon_control.js b/src/js/icon_control.js new file mode 100644 index 000000000..b8e7be5a3 --- /dev/null +++ b/src/js/icon_control.js @@ -0,0 +1,43 @@ +export class HillshadeControl { + constructor({ layerId }) { + this._layerId = layerId; + } + + _onClick = () => { + if (this._map.getLayoutProperty(this._layerId, "visibility") == "none") { + this._map.setLayoutProperty(this._layerId, "visibility", "visible"); + this._button.classList.add("maplibregl-ctrl-terrain-enabled"); + this._button.title = "Disable terrain"; + } else { + this._map.setLayoutProperty(this._layerId, "visibility", "none"); + this._button.classList.remove("maplibregl-ctrl-terrain-enabled"); + this._button.title = "Enable terrain"; + } + }; + + onAdd(map) { + this._map = map; + + this._container = document.createElement("div"); + this._container.className = "maplibregl-ctrl maplibregl-ctrl-group"; + + this._button = document.createElement("button"); + this._button.className = "maplibregl-ctrl-terrain"; + this._button.classList.add("maplibregl-ctrl-terrain-enabled"); + this._button.title = "Disable terrain"; + this._button.addEventListener("click", this._onClick); + this._container.append(this._button); + + const span = document.createElement("span"); + span.className = "maplibregl-ctrl-icon"; + span.setAttribute("aria-hidden", "true"); + this._button.append(span); + + return this._container; + } + + onRemove() { + this._container.remove(); + this._map = undefined; + } +} From 6eeca391d113fd2a00c88e52cbbb656b5beb8135 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Thu, 19 Sep 2024 08:08:41 -0400 Subject: [PATCH 06/12] Upgrade maplibre-gl from 2.4.0 to 4.7.0 --- package-lock.json | 689 +++++++++++++++++++++++++++++++++++++++++----- package.json | 3 +- 2 files changed, 626 insertions(+), 66 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6a14114c4..61e17bee0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,6 @@ "color-rgba": "^2.4.0", "events": "^3.3.0", "fonteditor-core": "^2.1.11", - "maplibre-gl": "^2.4.0", "openmapsamples": "github:adamfranco/OpenMapSamples", "openmapsamples-maplibre": "github:adamfranco/OpenMapSamples-MapLibre", "tokenfield": "^1.5.2" @@ -37,7 +36,7 @@ "esbuild": "^0.17.4", "glob": "^10.3.10", "google-font-installer": "^1.2.0", - "maplibre-gl": "^2.4.0", + "maplibre-gl": "^4.7.0", "mocha": "^10.1.0", "npm-run-all": "^4.1.5", "open": "^8.4.2", @@ -970,7 +969,8 @@ "node_modules/@mapbox/mapbox-gl-supported": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz", - "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==" + "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==", + "license": "BSD-3-Clause" }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.11", @@ -1110,6 +1110,16 @@ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" }, + "node_modules/@types/geojson-vt": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", + "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/mapbox__point-geometry": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", @@ -1144,6 +1154,16 @@ "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==" }, + "node_modules/@types/supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@xmldom/xmldom": { "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", @@ -1243,6 +1263,16 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", @@ -1290,6 +1320,16 @@ "node": "*" } }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", @@ -1367,6 +1407,27 @@ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, + "node_modules/bytewise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", + "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytewise-core": "^1.2.2", + "typewise": "^1.0.3" + } + }, + "node_modules/bytewise-core": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", + "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "typewise-core": "^1.2" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -1999,9 +2060,11 @@ } }, "node_modules/earcut": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.0.tgz", + "integrity": "sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg==", + "dev": true, + "license": "ISC" }, "node_modules/eastasianwidth": { "version": "0.2.0", @@ -2307,6 +2370,19 @@ "type": "^2.7.2" } }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/file-type": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", @@ -2517,9 +2593,11 @@ } }, "node_modules/geojson-vt": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", - "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", + "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==", + "dev": true, + "license": "ISC" }, "node_modules/get-caller-file": { "version": "2.0.5", @@ -2597,6 +2675,16 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/gl-matrix": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", @@ -2636,27 +2724,44 @@ } }, "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "dev": true, + "license": "MIT", "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=16" + } + }, + "node_modules/global-prefix/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" } }, "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { - "which": "bin/which" + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/globalthis": { @@ -2880,9 +2985,14 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/internal-slot": { "version": "1.0.7", @@ -3037,6 +3147,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3107,6 +3227,19 @@ "node": ">=8" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -3229,6 +3362,16 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jackspeak": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", @@ -3277,14 +3420,17 @@ "dev": true }, "node_modules/kdbush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", - "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "dev": true, + "license": "ISC" }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3394,41 +3540,126 @@ } }, "node_modules/maplibre-gl": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-2.4.0.tgz", - "integrity": "sha512-csNFylzntPmHWidczfgCZpvbTSmhaWvLRj9e1ezUDBEPizGgshgm3ea1T5TCNEEBq0roauu7BPuRZjA3wO4KqA==", - "hasInstallScript": true, + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.0.tgz", + "integrity": "sha512-hkt7je7NxiMQE8EpCxLWP8t6tkK6SkrMe0hIBjYd4Ar/Q7BOCILxthGmGnU993Mwmkvs2mGiXnVUSOK12DeCzg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", - "@mapbox/mapbox-gl-supported": "^2.0.1", "@mapbox/point-geometry": "^0.1.0", - "@mapbox/tiny-sdf": "^2.0.5", + "@mapbox/tiny-sdf": "^2.0.6", "@mapbox/unitbezier": "^0.0.1", "@mapbox/vector-tile": "^1.3.1", "@mapbox/whoots-js": "^3.1.0", - "@types/geojson": "^7946.0.10", - "@types/mapbox__point-geometry": "^0.1.2", - "@types/mapbox__vector-tile": "^1.3.0", - "@types/pbf": "^3.0.2", - "csscolorparser": "~1.0.3", - "earcut": "^2.2.4", - "geojson-vt": "^3.2.1", + "@maplibre/maplibre-gl-style-spec": "^20.3.1", + "@types/geojson": "^7946.0.14", + "@types/geojson-vt": "3.2.5", + "@types/mapbox__point-geometry": "^0.1.4", + "@types/mapbox__vector-tile": "^1.3.4", + "@types/pbf": "^3.0.5", + "@types/supercluster": "^7.1.3", + "earcut": "^3.0.0", + "geojson-vt": "^4.0.2", "gl-matrix": "^3.4.3", - "global-prefix": "^3.0.0", + "global-prefix": "^4.0.0", + "kdbush": "^4.0.2", "murmurhash-js": "^1.0.0", - "pbf": "^3.2.1", - "potpack": "^1.0.2", - "quickselect": "^2.0.0", - "supercluster": "^7.1.5", - "tinyqueue": "^2.0.3", + "pbf": "^3.3.0", + "potpack": "^2.0.0", + "quickselect": "^3.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^3.0.0", "vt-pbf": "^3.1.3" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" } }, "node_modules/maplibre-gl/node_modules/@mapbox/unitbezier": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", - "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "dev": true + }, + "node_modules/maplibre-gl/node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "20.3.1", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.1.tgz", + "integrity": "sha512-5ueL4UDitzVtceQ8J4kY+Px3WK+eZTsmGwha3MBKHKqiHvKrjWWwBCIl1K8BuJSc5OFh83uI8IFNoFvQxX2uUw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "sort-object": "^3.0.3", + "tinyqueue": "^3.0.0" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/maplibre-gl/node_modules/@maplibre/maplibre-gl-style-spec/node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/maplibre-gl/node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/maplibre-gl/node_modules/sort-asc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", + "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maplibre-gl/node_modules/sort-desc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", + "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maplibre-gl/node_modules/sort-object": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz", + "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytewise": "^1.1.0", + "get-value": "^2.0.2", + "is-extendable": "^0.1.1", + "sort-asc": "^0.2.0", + "sort-desc": "^0.2.0", + "union-value": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/marked": { "version": "4.3.0", @@ -4201,6 +4432,122 @@ "openmapsamples": "github:adamfranco/OpenMapSamples" } }, + "node_modules/openmapsamples-maplibre/node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause" + }, + "node_modules/openmapsamples-maplibre/node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "license": "ISC" + }, + "node_modules/openmapsamples-maplibre/node_modules/geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==", + "license": "ISC" + }, + "node_modules/openmapsamples-maplibre/node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/openmapsamples-maplibre/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/openmapsamples-maplibre/node_modules/kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==", + "license": "ISC" + }, + "node_modules/openmapsamples-maplibre/node_modules/maplibre-gl": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-2.4.0.tgz", + "integrity": "sha512-csNFylzntPmHWidczfgCZpvbTSmhaWvLRj9e1ezUDBEPizGgshgm3ea1T5TCNEEBq0roauu7BPuRZjA3wO4KqA==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^2.0.1", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.5", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@types/geojson": "^7946.0.10", + "@types/mapbox__point-geometry": "^0.1.2", + "@types/mapbox__vector-tile": "^1.3.0", + "@types/pbf": "^3.0.2", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.4", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.4.3", + "global-prefix": "^3.0.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.2", + "quickselect": "^2.0.0", + "supercluster": "^7.1.5", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.3" + } + }, + "node_modules/openmapsamples-maplibre/node_modules/potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", + "license": "ISC" + }, + "node_modules/openmapsamples-maplibre/node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC" + }, + "node_modules/openmapsamples-maplibre/node_modules/supercluster": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "license": "ISC", + "dependencies": { + "kdbush": "^3.0.0" + } + }, + "node_modules/openmapsamples-maplibre/node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", + "license": "ISC" + }, + "node_modules/openmapsamples-maplibre/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -4322,9 +4669,10 @@ } }, "node_modules/pbf": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "license": "BSD-3-Clause", "dependencies": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" @@ -4431,9 +4779,11 @@ } }, "node_modules/potpack": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", - "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz", + "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==", + "dev": true, + "license": "ISC" }, "node_modules/prettier": { "version": "2.8.8", @@ -4456,9 +4806,11 @@ "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" }, "node_modules/quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "dev": true, + "license": "ISC" }, "node_modules/randombytes": { "version": "2.1.0", @@ -4771,6 +5123,22 @@ "node": ">= 0.4" } }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sharp": { "version": "0.33.4", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", @@ -5088,6 +5456,46 @@ "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -5281,11 +5689,13 @@ } }, "node_modules/supercluster": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", - "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "dev": true, + "license": "ISC", "dependencies": { - "kdbush": "^3.0.0" + "kdbush": "^4.0.2" } }, "node_modules/supports-color": { @@ -5380,9 +5790,11 @@ } }, "node_modules/tinyqueue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", - "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "dev": true, + "license": "ISC" }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -5944,6 +6356,23 @@ "node": ">=4.2.0" } }, + "node_modules/typewise": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", + "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "typewise-core": "^1.2.0" + } + }, + "node_modules/typewise-core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", + "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==", + "dev": true, + "license": "MIT" + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -5964,6 +6393,22 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", @@ -6300,7 +6745,7 @@ }, "shieldlib": { "name": "@americana/maplibre-shield-generator", - "version": "0.0.5", + "version": "0.0.7", "license": "CC0-1.0", "dependencies": { "@types/node": "^20.8.4", @@ -6319,6 +6764,122 @@ "typedoc": "^0.24.8", "typescript": "^4.9.5" } + }, + "shieldlib/node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause" + }, + "shieldlib/node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "license": "ISC" + }, + "shieldlib/node_modules/geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==", + "license": "ISC" + }, + "shieldlib/node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "shieldlib/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "shieldlib/node_modules/kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==", + "license": "ISC" + }, + "shieldlib/node_modules/maplibre-gl": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-2.4.0.tgz", + "integrity": "sha512-csNFylzntPmHWidczfgCZpvbTSmhaWvLRj9e1ezUDBEPizGgshgm3ea1T5TCNEEBq0roauu7BPuRZjA3wO4KqA==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^2.0.1", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.5", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@types/geojson": "^7946.0.10", + "@types/mapbox__point-geometry": "^0.1.2", + "@types/mapbox__vector-tile": "^1.3.0", + "@types/pbf": "^3.0.2", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.4", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.4.3", + "global-prefix": "^3.0.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.2", + "quickselect": "^2.0.0", + "supercluster": "^7.1.5", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.3" + } + }, + "shieldlib/node_modules/potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", + "license": "ISC" + }, + "shieldlib/node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC" + }, + "shieldlib/node_modules/supercluster": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "license": "ISC", + "dependencies": { + "kdbush": "^3.0.0" + } + }, + "shieldlib/node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", + "license": "ISC" + }, + "shieldlib/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } } } } diff --git a/package.json b/package.json index 096fcdd1e..1deb9a976 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,6 @@ "color-rgba": "^2.4.0", "events": "^3.3.0", "fonteditor-core": "^2.1.11", - "maplibre-gl": "^2.4.0", "openmapsamples": "github:adamfranco/OpenMapSamples", "openmapsamples-maplibre": "github:adamfranco/OpenMapSamples-MapLibre", "tokenfield": "^1.5.2" @@ -64,7 +63,7 @@ "esbuild": "^0.17.4", "glob": "^10.3.10", "google-font-installer": "^1.2.0", - "maplibre-gl": "^2.4.0", + "maplibre-gl": "^4.7.0", "mocha": "^10.1.0", "npm-run-all": "^4.1.5", "open": "^8.4.2", From 0f98db31f7a76afa378ee5598ceb5c0f07faedce Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Thu, 19 Sep 2024 08:28:45 -0400 Subject: [PATCH 07/12] Increase hillshade source from 12 to 13. It still avoids strong artifacts and maplibre-gl 4 is using much less memory. Reduce maximum hillshade-exaggeration from 1 to 0.5. The default is 0.5; going higher throws away contrast. --- src/js/style.js | 2 +- src/layer/hillshade.js | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/js/style.js b/src/js/style.js index 7af6140f7..55ea84dff 100644 --- a/src/js/style.js +++ b/src/js/style.js @@ -21,7 +21,7 @@ export function build(tileURL, spriteURL, glyphURL, locales) { encoding: "terrarium", tileSize: 256, // The actual maxzoom is 15 - maxzoom: 12, + maxzoom: 13, }, }, sprite: spriteURL, diff --git a/src/layer/hillshade.js b/src/layer/hillshade.js index e9e722ab9..4d7332915 100644 --- a/src/layer/hillshade.js +++ b/src/layer/hillshade.js @@ -2,20 +2,15 @@ export const hillshading = { id: "hillshading", type: "hillshade", source: "dem", - maxzoom: 17, paint: { "hillshade-exaggeration": [ "interpolate", ["linear"], ["zoom"], - 6, - 1, 12, - 0.7, - 16, - 0.1, + 0.5, 17, - 0, + 0.1, ], "hillshade-shadow-color": "hsla(30, 14%, 76%, 1)", "hillshade-highlight-color": "hsla(30, 44%, 99%, 1)", From 607eeffaf22eb77f2f116cf65dd1ed3f8e0e531f Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Mon, 23 Sep 2024 11:27:48 -0400 Subject: [PATCH 08/12] Darken shadow --- src/layer/hillshade.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layer/hillshade.js b/src/layer/hillshade.js index 4d7332915..56fa155a5 100644 --- a/src/layer/hillshade.js +++ b/src/layer/hillshade.js @@ -12,7 +12,7 @@ export const hillshading = { 17, 0.1, ], - "hillshade-shadow-color": "hsla(30, 14%, 76%, 1)", + "hillshade-shadow-color": "hsla(30, 14%, 63%, 1)", "hillshade-highlight-color": "hsla(30, 44%, 99%, 1)", }, }; From 1394349ab324d7373d2f668332b689a7bc42135f Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Mon, 23 Sep 2024 12:00:01 -0400 Subject: [PATCH 09/12] Extract colors; disable by default --- src/americana.js | 2 +- src/constants/color.js | 3 +++ .../{icon_control.js => hillshade_control.js} | 22 ++++++++++++------- src/layer/hillshade.js | 9 ++++++-- 4 files changed, 25 insertions(+), 11 deletions(-) rename src/js/{icon_control.js => hillshade_control.js} (79%) diff --git a/src/americana.js b/src/americana.js index 93f507439..dd8b23234 100644 --- a/src/americana.js +++ b/src/americana.js @@ -11,7 +11,7 @@ import "maplibre-gl/dist/maplibre-gl.css"; import * as search from "./search.js"; import LegendControl from "./js/legend_control.js"; -import { HillshadeControl } from "./js/icon_control.js"; +import { HillshadeControl } from "./js/hillshade_control.js"; import * as LegendConfig from "./js/legend_config.js"; import SampleControl from "openmapsamples-maplibre/OpenMapSamplesControl.js"; import { default as OpenMapTilesSamples } from "openmapsamples/samples/OpenMapTiles/index.js"; diff --git a/src/constants/color.js b/src/constants/color.js index e2bf7bdc7..e088e5ca9 100644 --- a/src/constants/color.js +++ b/src/constants/color.js @@ -1,6 +1,9 @@ export const backgroundFill = `hsl(30, 44%, 96%)`; export const backgroundFillTranslucent = `hsla(30, 44%, 96%, 0.8)`; +export const hillshadeShadow = "hsla(30, 14%, 63%, 1)"; +export const hillshadeHighlight = "hsla(30, 44%, 99%, 1)"; + export const waterFill = "hsl(211, 50%, 85%)"; export const waterFillTranslucent = "hsla(211, 50%, 85%, 0.5)"; export const waterIntermittentFill = "hsla(211, 60%, 85%, 0.3)"; diff --git a/src/js/icon_control.js b/src/js/hillshade_control.js similarity index 79% rename from src/js/icon_control.js rename to src/js/hillshade_control.js index b8e7be5a3..84fe00c7d 100644 --- a/src/js/icon_control.js +++ b/src/js/hillshade_control.js @@ -3,16 +3,23 @@ export class HillshadeControl { this._layerId = layerId; } - _onClick = () => { + _updateButton() { if (this._map.getLayoutProperty(this._layerId, "visibility") == "none") { - this._map.setLayoutProperty(this._layerId, "visibility", "visible"); - this._button.classList.add("maplibregl-ctrl-terrain-enabled"); - this._button.title = "Disable terrain"; - } else { - this._map.setLayoutProperty(this._layerId, "visibility", "none"); this._button.classList.remove("maplibregl-ctrl-terrain-enabled"); this._button.title = "Enable terrain"; + } else { + this._button.classList.add("maplibregl-ctrl-terrain-enabled"); + this._button.title = "Disable terrain"; } + } + + _onClick = () => { + const newValue = + this._map.getLayoutProperty(this._layerId, "visibility") == "none" + ? "visible" + : "none"; + this._map.setLayoutProperty(this._layerId, "visibility", newValue); + this._updateButton(); }; onAdd(map) { @@ -23,8 +30,7 @@ export class HillshadeControl { this._button = document.createElement("button"); this._button.className = "maplibregl-ctrl-terrain"; - this._button.classList.add("maplibregl-ctrl-terrain-enabled"); - this._button.title = "Disable terrain"; + this._updateButton(); this._button.addEventListener("click", this._onClick); this._container.append(this._button); diff --git a/src/layer/hillshade.js b/src/layer/hillshade.js index 56fa155a5..52d969602 100644 --- a/src/layer/hillshade.js +++ b/src/layer/hillshade.js @@ -1,7 +1,12 @@ +import { hillshadeShadow, hillshadeHighlight } from "../constants/color"; + export const hillshading = { id: "hillshading", type: "hillshade", source: "dem", + layout: { + visibility: "none", + }, paint: { "hillshade-exaggeration": [ "interpolate", @@ -12,7 +17,7 @@ export const hillshading = { 17, 0.1, ], - "hillshade-shadow-color": "hsla(30, 14%, 63%, 1)", - "hillshade-highlight-color": "hsla(30, 44%, 99%, 1)", + "hillshade-shadow-color": hillshadeShadow, + "hillshade-highlight-color": hillshadeHighlight, }, }; From 021c041a13c19cfe0495b052a70b85e63c75fbe5 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Mon, 23 Sep 2024 12:02:32 -0400 Subject: [PATCH 10/12] correct import --- src/layer/hillshade.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/layer/hillshade.js b/src/layer/hillshade.js index 52d969602..b9425d7f5 100644 --- a/src/layer/hillshade.js +++ b/src/layer/hillshade.js @@ -1,4 +1,4 @@ -import { hillshadeShadow, hillshadeHighlight } from "../constants/color"; +import * as Color from "../constants/color.js"; export const hillshading = { id: "hillshading", @@ -17,7 +17,7 @@ export const hillshading = { 17, 0.1, ], - "hillshade-shadow-color": hillshadeShadow, - "hillshade-highlight-color": hillshadeHighlight, + "hillshade-shadow-color": Color.hillshadeShadow, + "hillshade-highlight-color": Color.hillshadeHighlight, }, }; From 4977f9508028155e1c40786f00e541a70b0259d9 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Mon, 23 Sep 2024 20:23:29 -0400 Subject: [PATCH 11/12] Fade out even less Really the purpose is to avoid filling the screen with dark gray when overzooming on a hill (and instead to fill the screen with a nice beige). --- src/layer/hillshade.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layer/hillshade.js b/src/layer/hillshade.js index b9425d7f5..06157a4d3 100644 --- a/src/layer/hillshade.js +++ b/src/layer/hillshade.js @@ -15,7 +15,7 @@ export const hillshading = { 12, 0.5, 17, - 0.1, + 0.3, ], "hillshade-shadow-color": Color.hillshadeShadow, "hillshade-highlight-color": Color.hillshadeHighlight, From ca32102f0750833fa8f92e54749b46e5eec2ba95 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Tue, 24 Sep 2024 09:48:43 -0400 Subject: [PATCH 12/12] Bump version --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 61e17bee0..3d4622e01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "esbuild": "^0.17.4", "glob": "^10.3.10", "google-font-installer": "^1.2.0", - "maplibre-gl": "^4.7.0", + "maplibre-gl": "^4.7.1", "mocha": "^10.1.0", "npm-run-all": "^4.1.5", "open": "^8.4.2", @@ -3540,9 +3540,9 @@ } }, "node_modules/maplibre-gl": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.0.tgz", - "integrity": "sha512-hkt7je7NxiMQE8EpCxLWP8t6tkK6SkrMe0hIBjYd4Ar/Q7BOCILxthGmGnU993Mwmkvs2mGiXnVUSOK12DeCzg==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz", + "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { diff --git a/package.json b/package.json index 1deb9a976..73a00ba6d 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "esbuild": "^0.17.4", "glob": "^10.3.10", "google-font-installer": "^1.2.0", - "maplibre-gl": "^4.7.0", + "maplibre-gl": "^4.7.1", "mocha": "^10.1.0", "npm-run-all": "^4.1.5", "open": "^8.4.2",