import { type AnySourceData, type Style } from 'mapbox-gl'; export const basemaps: { [key: string]: string | Style; } = { mapboxOutdoors: 'mapbox://styles/mapbox/outdoors-v12', mapboxSatellite: 'mapbox://styles/mapbox/satellite-v9', openStreetMap: { version: 8, sources: { openStreetMap: { type: 'raster', tiles: ['https://a.tile.openstreetmap.org/{z}/{x}/{y}.png', 'https://b.tile.openstreetmap.org/{z}/{x}/{y}.png', 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 18, attribution: 'Map tiles by OpenStreetMap tile servers, under the tile usage policy. Data by OpenStreetMap' } }, layers: [{ id: 'openStreetMap', type: 'raster', source: 'openStreetMap', }], }, openTopoMap: { version: 8, sources: { openTopoMap: { type: 'raster', tiles: ['https://tile.opentopomap.org/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 17, attribution: '© OpenTopoMap © OpenStreetMap' } }, layers: [{ id: 'openTopoMap', type: 'raster', source: 'openTopoMap', }], }, openHikingMap: { version: 8, sources: { openHikingMap: { type: 'raster', tiles: ['https://maps.refuges.info/hiking/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 18, attribution: '© sly © OpenStreetMap' } }, layers: [{ id: 'openHikingMap', type: 'raster', source: 'openHikingMap', }], }, cyclOSM: { version: 8, sources: { cyclOSM: { type: 'raster', tiles: ['https://a.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', 'https://b.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', 'https://c.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 17, attribution: '© CyclOSM © OpenStreetMap' } }, layers: [{ id: 'cyclOSM', type: 'raster', source: 'cyclOSM', }], }, linz: 'https://basemaps.linz.govt.nz/v1/tiles/topographic/EPSG:3857/style/topographic.json?api=d01fbtg0ar23gctac5m0jgyy2ds', swisstopo: { version: 8, sources: { swisstopo: { type: 'raster', tiles: ['https://wmts.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-farbe/default/current/3857/{z}/{x}/{y}.jpeg'], tileSize: 256, maxzoom: 18, attribution: '© swisstopo' } }, layers: [{ id: 'swisstopo', type: 'raster', source: 'swisstopo', }], }, linzTopo: { version: 8, sources: { linzTopo: { type: 'raster', tiles: ['https://tiles-cdn.koordinates.com/services;key=39a8b989633a4bef98bc0e065380454a/tiles/v4/layer=50767/EPSG:3857/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 18, attribution: '© LINZ' } }, layers: [{ id: 'linzTopo', type: 'raster', source: 'linzTopo', }], }, ignPlanV2: { version: 8, sources: { ignPlanV2: { type: 'raster', tiles: ['https://data.geopf.fr/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&STYLE=normal&TILEMATRIXSET=PM&FORMAT=image/png&LAYER=GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}'], tileSize: 256, maxzoom: 18, attribution: 'IGN-F/Géoportail' } }, layers: [{ id: 'ignPlanV2', type: 'raster', source: 'ignPlanV2', }], }, ignFrScan25: { version: 8, sources: { ignFrScan25: { type: 'raster', tiles: ['https://wxs.ign.fr/ifj1o8jmglxpfn6p1tn4b3g1/geoportail/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&TILEMATRIXSET=PM&TILEMATRIX={z}&TILECOL={x}&TILEROW={y}&LAYER=GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN25TOUR&FORMAT=image/jpeg&STYLE=normal'], tileSize: 256, maxzoom: 16, attribution: 'IGN-F/Géoportail' } }, layers: [{ id: 'ignFrScan25', type: 'raster', source: 'ignFrScan25', }], }, ignSatellite: { version: 8, sources: { ignSatellite: { type: 'raster', tiles: ['https://data.geopf.fr/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&STYLE=normal&TILEMATRIXSET=PM&FORMAT=image/jpeg&LAYER=ORTHOIMAGERY.ORTHOPHOTOS&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}'], tileSize: 256, maxzoom: 19, attribution: 'IGN-F/Géoportail' } }, layers: [{ id: 'ignSatellite', type: 'raster', source: 'ignSatellite', }], }, ignEs: { version: 8, sources: { ignEs: { type: 'raster', tiles: ['https://www.ign.es/wmts/mapa-raster?layer=MTN&style=default&tilematrixset=GoogleMapsCompatible&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image/jpeg&TileMatrix={z}&TileCol={x}&TileRow={y}'], tileSize: 256, maxzoom: 20, attribution: 'IGN-F/Géoportail' } }, layers: [{ id: 'ignEs', type: 'raster', source: 'ignEs', }], }, ordnanceSurvey: { version: 8, sources: { ordnanceSurvey: { type: 'raster', tiles: ['https://api.os.uk/maps/raster/v1/zxy/Outdoor_3857/{z}/{x}/{y}.png?key=piCT8WysfuC3xLSUW7sGLfrAAJoYDvQz'], tileSize: 256, maxzoom: 20, attribution: '© Ordnance Survey' } }, layers: [{ id: 'ordnanceSurvey', type: 'raster', source: 'ordnanceSurvey', }], }, norwayTopo: { version: 8, sources: { norwayTopo: { type: 'raster', tiles: ['https://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom={z}&x={x}&y={y}', 'https://opencache2.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom={z}&x={x}&y={y}', 'https://opencache3.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom={z}&x={x}&y={y}'], tileSize: 256, maxzoom: 20, attribution: '© Geonorge' } }, layers: [{ id: 'norwayTopo', type: 'raster', source: 'norwayTopo', }], }, swedenTopo: { version: 8, sources: { swedenTopo: { type: 'raster', tiles: ['https://api.lantmateriet.se/open/topowebb-ccby/v1/wmts/token/1d54dd14-a28c-38a9-b6f3-b4ebfcc3c204/1.0.0/topowebb/default/3857/{z}/{y}/{x}.png'], tileSize: 256, maxzoom: 14, attribution: '© Lantmäteriet' } }, layers: [{ id: 'swedenTopo', type: 'raster', source: 'swedenTopo', }], }, finlandTopo: { version: 8, sources: { finlandTopo: { type: 'raster', tiles: ['https://avoin-karttakuva.maanmittauslaitos.fi/avoin/wmts?layer=maastokartta&style=default&tilematrixset=WGS84_Pseudo-Mercator&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image/png&TileMatrix={z}&TileCol={x}&TileRow={y}&api-key=30cb768c-c968-493c-ae24-2b0b974ebd29'], tileSize: 256, maxzoom: 18, attribution: '© Maanmittauslaitos' } }, layers: [{ id: 'finlandTopo', type: 'raster', source: 'finlandTopo', }], }, bgMountains: { version: 8, sources: { bgMountains: { type: 'raster', tiles: ['https://bgmtile.kade.si/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 19, attribution: 'BGM Legend / CART Lab, BGM team, © CC BY-SA 4.0, Garmin version' } }, layers: [{ id: 'bgMountains', type: 'raster', source: 'bgMountains', }], }, usgs: { version: 8, sources: { usgs: { type: 'raster', tiles: ['https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}?blankTile=false'], tileSize: 256, maxzoom: 16, attribution: '© USGS' } }, layers: [{ id: 'usgs', type: 'raster', source: 'usgs', }], }, }; export const overlays: { [key: string]: AnySourceData; } = { cyclOSMlite: { type: 'raster', tiles: ['https://a.tile-cyclosm.openstreetmap.fr/cyclosm-lite/{z}/{x}/{y}.png', 'https://b.tile-cyclosm.openstreetmap.fr/cyclosm-lite/{z}/{x}/{y}.png', 'https://c.tile-cyclosm.openstreetmap.fr/cyclosm-lite/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 17, attribution: '© CyclOSM © OpenStreetMap' }, swisstopoSlope: { type: 'raster', tiles: ['https://wmts.geo.admin.ch/1.0.0/ch.swisstopo.hangneigung-ueber_30/default/current/3857/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 17, attribution: '© swisstopo', }, swisstopoCycling: { type: 'raster', tiles: ['https://wmts.geo.admin.ch/1.0.0/ch.astra.veloland/default/current/3857/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 18, attribution: '© swisstopo' }, swisstopoMountainBike: { type: 'raster', tiles: ['https://wmts.geo.admin.ch/1.0.0/ch.astra.mountainbikeland/default/current/3857/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 18, attribution: '© swisstopo' }, ignFrCadastre: { type: 'raster', tiles: ['https://data.geopf.fr/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&TILEMATRIXSET=PM&TILEMATRIX={z}&TILECOL={x}&TILEROW={y}&LAYER=CADASTRALPARCELS.PARCELS&FORMAT=image/png&STYLE=normal'], tileSize: 256, maxzoom: 20, attribution: 'IGN-F/Géoportail' }, ignSlope: { type: 'raster', tiles: ['https://data.geopf.fr/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&TileMatrixSet=PM&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&Layer=GEOGRAPHICALGRIDSYSTEMS.SLOPES.MOUNTAIN&FORMAT=image/png&Style=normal'], tileSize: 256, maxzoom: 17, attribution: 'IGN-F/Géoportail' }, waymarkedTrailsHiking: { type: 'raster', tiles: ['https://tile.waymarkedtrails.org/hiking/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 18, attribution: '© Waymarked Trails' }, waymarkedTrailsCycling: { type: 'raster', tiles: ['https://tile.waymarkedtrails.org/cycling/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 18, attribution: '© Waymarked Trails' }, waymarkedTrailsMTB: { type: 'raster', tiles: ['https://tile.waymarkedtrails.org/mtb/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 18, attribution: '© Waymarked Trails' }, waymarkedTrailsSkating: { type: 'raster', tiles: ['https://tile.waymarkedtrails.org/skating/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 18, attribution: '© Waymarked Trails' }, waymarkedTrailsHorseRiding: { type: 'raster', tiles: ['https://tile.waymarkedtrails.org/riding/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 18, attribution: '© Waymarked Trails' }, waymarkedTrailsWinter: { type: 'raster', tiles: ['https://tile.waymarkedtrails.org/slopes/{z}/{x}/{y}.png'], tileSize: 256, maxzoom: 18, attribution: '© Waymarked Trails' }, }; export const opacities: { [key: string]: number; } = { ignFrCadastre: 0.5, ignSlope: 0.4, swisstopoSlope: 0.4, }; export type LayerTreeType = string[] | { [key: string]: LayerTreeType; }; export type CollapsedInfoTreeType = { self: boolean; children: { [key: string]: CollapsedInfoTreeType; }; }; export const basemapTree: LayerTreeType = { basemaps: { world: ['mapboxOutdoors', 'mapboxSatellite', 'openStreetMap', 'openTopoMap', 'openHikingMap', 'cyclOSM'], countries: { bulgaria: ['bgMountains'], finland: ['finlandTopo'], france: ['ignPlanV2', 'ignFrScan25', 'ignSatellite'], newZealand: ['linz', 'linzTopo'], norway: ['norwayTopo'], spain: ['ignEs'], sweden: ['swedenTopo'], switzerland: ['swisstopo'], unitedKingdom: ['ordnanceSurvey'], unitedStates: ['usgs'], }, }, } export const overlayTree: LayerTreeType = { overlays: { world: { cyclOSM: ['cyclOSMlite'], waymarkedTrails: ['waymarkedTrailsHiking', 'waymarkedTrailsCycling', 'waymarkedTrailsMTB', 'waymarkedTrailsSkating', 'waymarkedTrailsHorseRiding', 'waymarkedTrailsWinter'] }, countries: { france: ['ignFrCadastre', 'ignSlope'], switzerland: ['swisstopoSlope', 'swisstopoCycling', 'swisstopoMountainBike'], }, }, } export const defaultBasemap = 'mapboxOutdoors'; export const defaultAvailableBasemaps = ['mapboxOutdoors', 'mapboxSatellite', 'openStreetMap', 'openTopoMap', 'openHikingMap', 'cyclOSM']; export const defaultAvailableOverlays = ['cyclOSMlite', 'waymarkedTrailsHiking', 'waymarkedTrailsCycling', 'waymarkedTrailsMTB', 'waymarkedTrailsSkating', 'waymarkedTrailsHorseRiding', 'waymarkedTrailsWinter'];