diff --git a/libs/leaflet/map-baselayer.model.ts b/libs/leaflet/map-baselayer.model.ts index a1379f0ec6475fd54af8100ab7a618f31bd18f3f..0918e44a1cc776790ac0775c4279bf3aa8d71fcf 100644 --- a/libs/leaflet/map-baselayer.model.ts +++ b/libs/leaflet/map-baselayer.model.ts @@ -1,43 +1,10 @@ /** * Base layers for mapping. - * - * These base layers map to concrete styles in lib/state/map/map.utils. */ export enum MapBaseLayer { - /** - * Esri hillshade. - * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-hillshade.htm - */ - HILLSHADE = 'Hillshade', - - /** - * Esri dark hillshade. - * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-hillshade-dark.htm - */ - HILLSHADE_DARK = 'Hillshade Dark', - - /** - * Esri ocean map. - * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-ocean-base.htm - */ OCEAN = 'Ocean', - - /** - * Esri physical map - * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-physical-map.htm - */ - PHYSICAL = 'Physical', - - /** - * Esri satellite map. - * @see https://doc.arcgis.com/en/data-appliance/2022/maps/world-imagery.htm - */ + OUTDOOR = 'Outdoor', SATELLITE = 'Satellite', - - /** - * USGS topographic map. - * - * @see https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer - */ - USGS_TOPO = 'USGS Topographic', + STREET = 'Street', + TOPO = 'Topographic', } diff --git a/libs/leaflet/map.utils.ts b/libs/leaflet/map.utils.ts index 9d7be50e045d3e9244a03fa6d76be618cb56a5ba..3fd852fc532d542c219c798939a2f39556cd6db5 100644 --- a/libs/leaflet/map.utils.ts +++ b/libs/leaflet/map.utils.ts @@ -1,8 +1,10 @@ +import {vectorTileLayer} from 'esri-leaflet-vector'; import * as geojson from 'geojson'; import * as L from 'leaflet'; import {Location} from '../nshmp-lib/geo'; import {MapBaseLayer} from './map-baselayer.model'; +import {VectorId} from './vector-id.model'; /** Location transform */ export type LocationTransform = (location: Location) => Location; @@ -12,74 +14,80 @@ export type LocationTransform = (location: Location) => Location; * * https://doc.arcgis.com/en/data-appliance/latest/maps/directory-maps-data.htm */ -export function baseLayers(): Record<MapBaseLayer, L.TileLayer> { - const baseLayers: Record<MapBaseLayer, L.TileLayer> = { - /* Esri world hillshade */ - [MapBaseLayer.HILLSHADE]: L.tileLayer( - `${ARCGIS_URL_START}Elevation/World_Hillshade${ARCGIS_URL_END}`, +export function baseLayers(): Record<MapBaseLayer, L.LayerGroup> { + const baseLayers: Record<MapBaseLayer, L.LayerGroup> = { + // https://maps.arcgis.com/sharing/rest/content/items/33d6280d276d4af89fb66a6ffa7f2072/data + // https://www.arcgis.com/home/item.html?id=33d6280d276d4af89fb66a6ffa7f2072 + [MapBaseLayer.OCEAN]: L.layerGroup( + [ + vectorTileLayer(VectorId.OCEAN, { + ...OPTIONS, + id: MapBaseLayer.OCEAN, + }), + L.tileLayer(arcUrl('Ocean/World_Ocean_Base'), { + ...OPTIONS, + id: MapBaseLayer.OCEAN, + }), + ], { - ...OPTIONS, - attribution: - 'Esri, USGS, NGA, NASA, CGIAR, N Robinson, NCEAS, NLS, OS, NMA, ' + - 'Geodatastyrelsen, Rijkswaterstaat, GSA, Geoland, FEMA, Intermap, ' + - 'and the GIS user community', - id: MapBaseLayer.HILLSHADE, + attribution: ` + Esri, GEBCO, NOAA, National Geographic, Garmin, + TomTom, Geonames.org, and other contributors + `, } ), - /* Esri world hillshade */ - [MapBaseLayer.HILLSHADE_DARK]: L.tileLayer( - `${ARCGIS_URL_START}Elevation/World_Hillshade_Dark${ARCGIS_URL_END}`, - { - ...OPTIONS, - attribution: - 'Esri, USGS, NGA, NASA, CGIAR, N Robinson, NCEAS, NLS, OS, NMA, ' + - 'Geodatastyrelsen, Rijkswaterstaat, GSA, Geoland, FEMA, Intermap, ' + - 'and the GIS user community', - id: MapBaseLayer.HILLSHADE_DARK, - } - ), - /* Esri world ocean */ - [MapBaseLayer.OCEAN]: L.tileLayer( - `${ARCGIS_URL_START}Ocean/World_Ocean_Base${ARCGIS_URL_END}`, - { - ...OPTIONS, - attribution: 'Esri, Garmin, GEBCO, NOAA NGDC, and other contributors', - id: MapBaseLayer.OCEAN, - maxZoom: 10, - } - ), - /* Esri world physical map */ - [MapBaseLayer.PHYSICAL]: L.tileLayer( - `${ARCGIS_URL_START}World_Physical_Map${ARCGIS_URL_END}`, - { - ...OPTIONS, - attribution: 'U.S. National Park Service', - id: MapBaseLayer.PHYSICAL, - maxZoom: 8, - } - ), - [MapBaseLayer.SATELLITE]: L.tileLayer( - `${ARCGIS_URL_START}World_Imagery${ARCGIS_URL_END}`, - { - ...OPTIONS, - attribution: - 'Esri, Maxar, Earthstar Geographics, and the GIS User Community', - id: MapBaseLayer.SATELLITE, - } - ), - [MapBaseLayer.USGS_TOPO]: L.tileLayer( - 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', + + // https://maps.arcgis.com/sharing/rest/content/items/e128f7554370429c91ef7c0e260c078a/data + // https://www.arcgis.com/home/item.html?id=e128f7554370429c91ef7c0e260c078a + // + [MapBaseLayer.OUTDOOR]: vectorTileLayer(VectorId.OUTDOOR, { + ...OPTIONS, + attribution: ` + Esri, TomTom, Garmin, FAO, NOAA, USGS, (c) OpenStreetMap contributors, + CNES/Airbus DS, InterMap, NASA/METI, NASA/NGS and the GIS User Community + `, + id: MapBaseLayer.OUTDOOR, + }), + + // https://maps.arcgis.com/sharing/rest/content/items/0d17ba68a8f64c278e7e2e7864e1069d/data + // https://www.arcgis.com/home/item.html?id=0d17ba68a8f64c278e7e2e7864e1069d + [MapBaseLayer.SATELLITE]: L.layerGroup( + [ + vectorTileLayer(VectorId.SATELLITE, { + ...OPTIONS, + id: MapBaseLayer.SATELLITE, + }), + L.tileLayer(arcUrl('World_Imagery'), { + ...OPTIONS, + id: MapBaseLayer.SATELLITE, + }), + ], { - ...OPTIONS, - attribution: `Esri, USGS | Esri, TomTom, FAO, NOAA, USGS | USGS The National Map: National Boundaries - Dataset, 3DEP Elevation Program, Geographic Names Information System, National Hydrography - Dataset, National Land Cover Database, National Structures Dataset, and National - Transportation Dataset; USGS Global Ecosystems; U.S. Census Bureau TIGER/Line data; - USFS Road data; Natural Earth Data; U.S. Department of State HIU; NOAA National - Centers for Environmental Information. Data refreshed February, 2025.`, - id: MapBaseLayer.USGS_TOPO, + attribution: 'Esri and its users and partners', } ), + + // https://maps.arcgis.com/sharing/rest/content/items/22fb75c0fa5a4c88b8ca4c4b8ae5c90b/data + // https://www.arcgis.com/home/item.html?id=22fb75c0fa5a4c88b8ca4c4b8ae5c90b + [MapBaseLayer.STREET]: vectorTileLayer(VectorId.STREET, { + ...OPTIONS, + attribution: ` + Esri, TomTom, Garmin, FAO, NOAA, USGS, (c) OpenStreetMap contributors, + and the GIS User Community + `, + id: MapBaseLayer.STREET, + }), + + // https://maps.arcgis.com/sharing/rest/content/items/8d57f09b9df345e79945f0f3da1d4d0f/data + // https://www.arcgis.com/home/item.html?id=8d57f09b9df345e79945f0f3da1d4d0f + [MapBaseLayer.TOPO]: vectorTileLayer(VectorId.TOPO, { + ...OPTIONS, + attribution: ` + Esri, TomTom, Garmin, FAO, NOAA, USGS, (c) OpenStreetMap contributors, + CNES/Airbus DS, InterMap, NASA/METI, NASA/NGS and the GIS User Community + `, + id: MapBaseLayer.TOPO, + }), }; return baseLayers; @@ -88,7 +96,7 @@ export function baseLayers(): Record<MapBaseLayer, L.TileLayer> { /** * Returns a specific Esri raster base layer. */ -export function baseLayer(baseLayer: MapBaseLayer): L.TileLayer { +export function baseLayer(baseLayer: MapBaseLayer): L.LayerGroup { return baseLayers()[baseLayer]; } @@ -156,8 +164,13 @@ const ARCGIS_URL_START = const ARCGIS_URL_END = '/MapServer/tile/{z}/{y}/{x}'; const OPTIONS: L.MapOptions = { maxZoom: 16, + attributionControl: false, }; +function arcUrl(id: string): string { + return `${ARCGIS_URL_START}${id}${ARCGIS_URL_END}`; +} + function transformCoordinate( coordinates: number[], transform: LocationTransform diff --git a/libs/leaflet/vector-id.model.ts b/libs/leaflet/vector-id.model.ts new file mode 100644 index 0000000000000000000000000000000000000000..a0e76b65f511636ef56408c52aa33e2c5edfc64a --- /dev/null +++ b/libs/leaflet/vector-id.model.ts @@ -0,0 +1,22 @@ +/** + * Vector tile layer item ids. + * + * Item ids can be found by viewing the data?f=json items in the network tab of + * https://maps.arcgis.com/apps/mapviewer/index.html when viewing the base maps. + */ +export enum VectorId { + // https://maps.arcgis.com/sharing/rest/content/items/33d6280d276d4af89fb66a6ffa7f2072/data + OCEAN = '6061e78281f94bb6a671d11253d41f6e', + + // https://maps.arcgis.com/sharing/rest/content/items/e128f7554370429c91ef7c0e260c078a/data + OUTDOOR = 'f320a8af9ffa4b4baeaf1d66f03da86f', + + // https://maps.arcgis.com/sharing/rest/content/items/0d17ba68a8f64c278e7e2e7864e1069d/data + SATELLITE = '5447e9aef0684ec391ae9381725f7370', + + // https://maps.arcgis.com/sharing/rest/content/items/22fb75c0fa5a4c88b8ca4c4b8ae5c90b/data + STREET = '6ee2da1b8303471c9e3340d1277926bc', + + // https://maps.arcgis.com/sharing/rest/content/items/8d57f09b9df345e79945f0f3da1d4d0f/data + TOPO = 'd38e980fc20141a49231b9fcea1c9bc0', +} diff --git a/package-lock.json b/package-lock.json index b8327bb9c337a9cc25e4fcee43fb20780bc12cdb..e29d8dd5caf85f35b9a8a9574bba7b1348f28fb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "change-case": "^5.4.4", "constructs": "^10.3.0", "d3-format": "^3.1.0", + "esri-leaflet-vector": "^4.2.7", "leaflet": "^1.9.4", "plotly.js": "^2.34.0" }, @@ -425,6 +426,41 @@ "node": ">=6.0.0" } }, + "node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.4.0.tgz", + "integrity": "sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw==", + "license": "ISC", + "peer": true, + "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", + "tinyqueue": "^3.0.0" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/@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", + "peer": true + }, + "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC", + "peer": true + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -566,6 +602,23 @@ "@types/hast": "^3.0.4" } }, + "node_modules/@terraformer/arcgis": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@terraformer/arcgis/-/arcgis-2.1.2.tgz", + "integrity": "sha512-IvdfqehcNAUtKU1OFMKwPT8EvdKlVFZ7q7ZKzkIF8XzYZIVsZLuXuOS1UBdRh5u/o+X5Gax7jiZhD8U/4TV+Jw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@terraformer/common": "^2.1.2" + } + }, + "node_modules/@terraformer/common": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@terraformer/common/-/common-2.1.2.tgz", + "integrity": "sha512-cwPdTFzIpekZhZRrgDEkqLKNPoqbyCBQHiemaovnGIeUx0Pl336MY/eCxzJ5zXkrQLVo9zPalq/vYW5HnyKevQ==", + "license": "MIT", + "peer": true + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -666,6 +719,16 @@ "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", "license": "MIT" }, + "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==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/hast": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", @@ -692,6 +755,25 @@ "@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", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", @@ -716,6 +798,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/pbf": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==", + "license": "MIT", + "peer": true + }, "node_modules/@types/plotly.js": { "version": "2.33.1", "resolved": "https://registry.npmjs.org/@types/plotly.js/-/plotly.js-2.33.1.tgz", @@ -729,6 +818,16 @@ "dev": true, "license": "MIT" }, + "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==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", @@ -2668,6 +2767,31 @@ "node": ">=4.0" } }, + "node_modules/esri-leaflet": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/esri-leaflet/-/esri-leaflet-3.0.14.tgz", + "integrity": "sha512-mXUFWFkHbnLnFh3uYHJiZNoOOEK2Jwt0MVx4b5wC7qAt6X0e7dyLQoiWuy2XPGkhg1/RTR96Lz63QAm4HUVNbQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@terraformer/arcgis": "^2.1.0", + "tiny-binary-search": "^1.0.3" + }, + "peerDependencies": { + "leaflet": "^1.0.0" + } + }, + "node_modules/esri-leaflet-vector": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/esri-leaflet-vector/-/esri-leaflet-vector-4.2.7.tgz", + "integrity": "sha512-PC9XJXzXAxMS+WIE522Q8LrpJh4lwXmhAO+7vlxDxSpimTEMuwK78Fwd6bCrbRiweAoodhq0+eJ5QL/FsYFUOg==", + "license": "Apache-2.0", + "peerDependencies": { + "esri-leaflet": ">2.3.0", + "leaflet": "^1.5.0", + "maplibre-gl": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -3110,6 +3234,47 @@ "node": ">=10.13.0" } }, + "node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/global-prefix/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -3608,6 +3773,16 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/inquirer": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", @@ -3854,6 +4029,13 @@ "dev": true, "license": "MIT" }, + "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==", + "license": "MIT", + "peer": true + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -3887,7 +4069,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4051,6 +4232,114 @@ "node": ">=6.4.0" } }, + "node_modules/maplibre-gl": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz", + "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@maplibre/maplibre-gl-style-spec": "^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": "^4.0.0", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^3.3.0", + "potpack": "^2.0.0", + "quickselect": "^3.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^3.0.0", + "vt-pbf": "^3.1.3" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } + }, + "node_modules/maplibre-gl/node_modules/@mapbox/tiny-sdf": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==", + "license": "BSD-2-Clause", + "peer": true + }, + "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==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/earcut": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.1.tgz", + "integrity": "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==", + "license": "ISC", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/geojson-vt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", + "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==", + "license": "ISC", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "license": "ISC", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/potpack": { + "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==", + "license": "ISC", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC", + "peer": true + }, + "node_modules/maplibre-gl/node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", + "peer": true, + "dependencies": { + "kdbush": "^4.0.2" + } + }, + "node_modules/maplibre-gl/node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC", + "peer": true + }, "node_modules/markdown-it": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", @@ -5728,6 +6017,13 @@ "xtend": "~4.0.1" } }, + "node_modules/tiny-binary-search": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-binary-search/-/tiny-binary-search-1.0.3.tgz", + "integrity": "sha512-STSHX/L5nI9WTLv6wrzJbAPbO7OIISX83KFBh2GVbX1Uz/vgZOU/ANn/8iV6t35yMTpoPzzO+3OQid3mifE0CA==", + "license": "Apache-2.0", + "peer": true + }, "node_modules/tinycolor2": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", diff --git a/package.json b/package.json index 5432a6e4ad25209f20890c4c67bcebed8531b946..2e2fcb16e88da63cea2cc73f9066a1fcd853e0e3 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "change-case": "^5.4.4", "constructs": "^10.3.0", "d3-format": "^3.1.0", + "esri-leaflet-vector": "^4.2.7", "leaflet": "^1.9.4", "plotly.js": "^2.34.0" },