@opengeoweb/core 12.11.0 → 12.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { useState, useCallback, useEffect, useContext, useMemo } from 'react';
4
- import { Grid, Box, MenuItem, Typography, useTheme, Popper, Fade, Tooltip, styled, LinearProgress, FormControl, InputLabel, Paper, List, ListItemButton, ListItemText, CircularProgress, ListSubheader, DialogContentText, TextField, InputAdornment, Button, Autocomplete, ListItemIcon, Checkbox, Switch, Select } from '@mui/material';
4
+ import { Grid, Box, MenuItem, Typography, useTheme, Popper, Fade, Tooltip, styled, Checkbox, LinearProgress, FormControl, InputLabel, Paper, List, ListItemButton, ListItemText, CircularProgress, ListSubheader, DialogContentText, TextField, InputAdornment, Button, Autocomplete, ListItemIcon, Switch, Select } from '@mui/material';
5
5
  import { safelyInitI18nForTestsAndStories, sharedTranslations, SHARED_NAMESPACE, CustomIconButton, CustomTooltip, TooltipSelect, AlertIcon, useScrollingInIsolation, sliderHeaderStyle, CustomSlider, ToggleMenu, tooltipContainerStyles, renderCounter, AlertBanner, CustomAccordion, CustomDialog, PROJECTION, calculateStartSize, useWheelStopPropagation, ToolContainerDraggable, dateUtils, useDebounce, sessionStorageProvider, usePrevious, ErrorBoundary } from '@opengeoweb/shared';
6
6
  import { CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, LayersAdd, CloudLoading, ColumnCollapsed, ColumnCollapse, Copy, None, FastForward, AutoUpdateActive, Both, Delete, Visibility, VisibilityOff, DragHandle as DragHandle$1, Cached, Add, MapAdd, WorldMapProjection, Overlayers, Layers, ExitDomain, Info, Search, Exclamation, MyLocation, Close, ThemeWrapper, lightTheme, FlagBritain, FlagNetherlands, FlagFinland, FlagNorway } from '@opengeoweb/theme';
7
7
  import i18n from 'i18next';
@@ -12,10 +12,10 @@ import { useDispatch, useSelector, connect, useStore, Provider } from 'react-red
12
12
  import { ReactSortable } from 'react-sortablejs';
13
13
  import Sortable from 'sortablejs';
14
14
  import { layerTypes, layerUtils, mapSelectors, layerActions, layerSelectors, serviceSelectors, serviceActions, mapActions, mapEnums, uiSelectors, uiTypes, useSetupDialog, filterLayers, getUserAddedServices, uiActions, genericActions, syncGroupsSelectors, drawingToolSelectors, syncConstants, getViewObjectForSyncGroup, getViewObjectForMapId, genericSelectors, loadingIndicatorActions, defaultLayers, getSingularDrawtoolDrawLayerId, syncGroupsSelector, syncGroupsActions, routerUtils, mapUtils } from '@opengeoweb/store';
15
- import { webmapUtils, queryWMSServiceInfo, queryWMSLayers, queryWMSLayersTree, invalidateWMSGetCapabilities, LayerType, getWMSServiceId, handleDateUtilsISOString, getMapDimURL, generateLayerId, WMJSDimension, getWMLayerById, WMLayer } from '@opengeoweb/webmap';
15
+ import { webmapUtils, LayerType, queryWMSServiceInfo, queryWMSLayers, queryWMSLayersTree, invalidateWMSGetCapabilities, getWMSServiceId, handleDateUtilsISOString, getMapDimURL, generateLayerId, WMJSDimension, getWMLayerById, WMLayer } from '@opengeoweb/webmap';
16
16
  import _, { isArray, isEqual, range } from 'lodash';
17
17
  import { Box as Box$1, styled as styled$1 } from '@mui/system';
18
- import { LayerSelectButtonConnect, LayerSelectConnect } from '@opengeoweb/layer-select';
18
+ import { LayerSelectButtonConnect, LayerSelectConnect, DataExplorerButtonConnect } from '@opengeoweb/layer-select';
19
19
  import { unByKey } from 'ol/Observable';
20
20
  import axios from 'axios';
21
21
  import { ImageWMS } from 'ol/source';
@@ -28,6 +28,7 @@ import { getIntersection } from 'ol/extent';
28
28
  import { snackbarTypes, snackbarActions, SnackbarWrapperConnect } from '@opengeoweb/snackbar';
29
29
  import { useNavigate } from 'react-router-dom';
30
30
  import * as Sentry from '@sentry/react';
31
+ import { http, HttpResponse, passthrough } from 'msw';
31
32
  import Card from '@mui/material/Card';
32
33
  import CardContent from '@mui/material/CardContent';
33
34
  import Typography$1 from '@mui/material/Typography';
@@ -57,6 +58,7 @@ var en = {
57
58
  "layermanager-style-title": "Style",
58
59
  "layermanager-layer-error": "This layer could not be loaded: does not exist on the server.",
59
60
  "layermanager-layer": "Layer",
61
+ "layermanager-layer-multi": "Layers",
60
62
  "layermanager-layer-toggle": "Toggle visibility",
61
63
  "layermanager-layer-select": "Open the layer selector",
62
64
  "layermanager-layer-drag": "Drag",
@@ -74,6 +76,7 @@ var en = {
74
76
  "layermanager-header-button-large": "large",
75
77
  "layermanager-header-button-dock": "Dock",
76
78
  "layermanager-header-button-undock": "Undock",
79
+ "layermanager-EDR-multiparam": "Multi params",
77
80
  "projection-title": "Projection",
78
81
  "wms-loader-description": "Please enter a wms server, or select one from the list.",
79
82
  "wms-loader-no-data": "No data",
@@ -1386,9 +1389,30 @@ var DimensionSelect = function DimensionSelect(_ref) {
1386
1389
  });
1387
1390
  };
1388
1391
 
1392
+ var showNoLayers = function showNoLayers(t) {
1393
+ return jsx(Box, {
1394
+ sx: {
1395
+ paddingLeft: 1,
1396
+ height: '32px',
1397
+ display: 'inline-flex',
1398
+ alignItems: 'center'
1399
+ },
1400
+ children: jsx(Typography, {
1401
+ variant: "body1",
1402
+ sx: {
1403
+ fontSize: function fontSize(theme) {
1404
+ return theme.palette.geowebColors.layerManager.tableRowDefaultText.fontSize;
1405
+ },
1406
+ color: 'geowebColors.layerManager.tableRowDefaultText.rgba',
1407
+ fontWeight: 500
1408
+ },
1409
+ children: t('layermanager-baselayers-no-available')
1410
+ })
1411
+ });
1412
+ };
1389
1413
  var getRenderLayersValues = function getRenderLayersValues(layerName, layers) {
1390
- var serviceLayer = layers.find(function (l) {
1391
- return l.name === layerName;
1414
+ var serviceLayer = layers.find(function (layer) {
1415
+ return layer.name === layerName;
1392
1416
  });
1393
1417
  if (!serviceLayer && layerName) {
1394
1418
  return {
@@ -1404,8 +1428,8 @@ var getRenderLayersValues = function getRenderLayersValues(layerName, layers) {
1404
1428
  }
1405
1429
  return {
1406
1430
  currentValue: (serviceLayer == null ? void 0 : serviceLayer.name) || '',
1407
- currentIndex: layers.findIndex(function (l) {
1408
- return l.name === (serviceLayer == null ? void 0 : serviceLayer.name);
1431
+ currentIndex: layers.findIndex(function (layer) {
1432
+ return layer.name === (serviceLayer == null ? void 0 : serviceLayer.name);
1409
1433
  }),
1410
1434
  extendedLayers: layers
1411
1435
  };
@@ -1424,25 +1448,7 @@ var RenderLayers = function RenderLayers(_ref) {
1424
1448
  t = _useCoreTranslation.t;
1425
1449
  var nonEmptyTooltipPrefix = tooltipPrefix != null ? tooltipPrefix : t('layermanager-layer') + ": ";
1426
1450
  if (!layers || !layers.length) {
1427
- return jsx(Box, {
1428
- sx: {
1429
- paddingLeft: 1,
1430
- height: '32px',
1431
- display: 'inline-flex',
1432
- alignItems: 'center'
1433
- },
1434
- children: jsx(Typography, {
1435
- variant: "body1",
1436
- sx: {
1437
- fontSize: function fontSize(theme) {
1438
- return theme.palette.geowebColors.layerManager.tableRowDefaultText.fontSize;
1439
- },
1440
- color: 'geowebColors.layerManager.tableRowDefaultText.rgba',
1441
- fontWeight: 500
1442
- },
1443
- children: t('layermanager-baselayers-no-available')
1444
- })
1445
- });
1451
+ return showNoLayers(t);
1446
1452
  }
1447
1453
  var selectLayer = function selectLayer(event) {
1448
1454
  event.stopPropagation();
@@ -2211,6 +2217,8 @@ var LayerRowUnstyled = function LayerRowUnstyled(_ref8) {
2211
2217
  layerName = _ref8.layerName,
2212
2218
  services = _ref8.services,
2213
2219
  mapId = _ref8.mapId,
2220
+ _ref8$isEDRLayer = _ref8.isEDRLayer,
2221
+ isEDRLayer = _ref8$isEDRLayer === void 0 ? false : _ref8$isEDRLayer,
2214
2222
  _ref8$onLayerRowClick = _ref8.onLayerRowClick,
2215
2223
  onLayerRowClick = _ref8$onLayerRowClick === void 0 ? function () {} : _ref8$onLayerRowClick,
2216
2224
  _ref8$isEnabled = _ref8.isEnabled,
@@ -2302,6 +2310,7 @@ var LayerRowUnstyled = function LayerRowUnstyled(_ref8) {
2302
2310
  onChangeActive: onClickRow
2303
2311
  }),
2304
2312
  layerName: layerName,
2313
+ isEDRLayer: isEDRLayer,
2305
2314
  Styles: layerStylesLayout || jsx(Styles, {
2306
2315
  style: layer.style,
2307
2316
  onChangeStyle: changeStyle
@@ -2447,9 +2456,12 @@ var Accordion = function Accordion(_ref0) {
2447
2456
  Opacity = _ref0.Opacity,
2448
2457
  layerName = _ref0.layerName,
2449
2458
  LeftButtons = _ref0.LeftButtons,
2450
- LoadDuration = _ref0.LoadDuration;
2459
+ LoadDuration = _ref0.LoadDuration,
2460
+ _ref0$isEDRLayer = _ref0.isEDRLayer,
2461
+ isEDRLayer = _ref0$isEDRLayer === void 0 ? false : _ref0$isEDRLayer;
2451
2462
  var _useCoreTranslation3 = useCoreTranslation(),
2452
2463
  t = _useCoreTranslation3.t;
2464
+ var displayLayerName = isEDRLayer && layerName != null && layerName.includes(',') ? t('layermanager-EDR-multiparam') : layerName;
2453
2465
  return jsx(CustomAccordion, {
2454
2466
  className: "medium-layermanager",
2455
2467
  defaultExpanded: false,
@@ -2472,7 +2484,7 @@ var Accordion = function Accordion(_ref0) {
2472
2484
  display: 'flex',
2473
2485
  alignItems: 'center'
2474
2486
  },
2475
- children: layerName
2487
+ children: displayLayerName
2476
2488
  })]
2477
2489
  }),
2478
2490
  children: jsxs(Grid, {
@@ -2784,6 +2796,128 @@ var RenderStylesConnect = function RenderStylesConnect(_ref) {
2784
2796
  });
2785
2797
  };
2786
2798
 
2799
+ var getRenderEDRLayersValues = function getRenderEDRLayersValues(selectedParams, layers) {
2800
+ var paramArray = selectedParams.reduce(function (obj, param) {
2801
+ var serviceLayer = layers.find(function (layer) {
2802
+ return layer.name === param;
2803
+ });
2804
+ if (!serviceLayer) {
2805
+ return {
2806
+ notFound: obj.notFound.concat([param]),
2807
+ found: [].concat(obj.found)
2808
+ };
2809
+ }
2810
+ return {
2811
+ found: obj.found.concat([param]),
2812
+ notFound: [].concat(obj.notFound)
2813
+ };
2814
+ }, {
2815
+ found: [],
2816
+ notFound: []
2817
+ });
2818
+ if (paramArray.notFound.length > 0) {
2819
+ return {
2820
+ currentValues: [].concat(paramArray.found, [paramArray.notFound.join(',')]),
2821
+ extendedLayers: [].concat(layers, [{
2822
+ name: paramArray.notFound.join(','),
2823
+ title: paramArray.notFound.join(','),
2824
+ leaf: true,
2825
+ path: []
2826
+ }])
2827
+ };
2828
+ }
2829
+ return {
2830
+ currentValues: selectedParams,
2831
+ extendedLayers: layers
2832
+ };
2833
+ };
2834
+ var RenderEDRLayers = function RenderEDRLayers(_ref) {
2835
+ var onChangeLayerName = _ref.onChangeLayerName,
2836
+ selectedParams = _ref.selectedParams,
2837
+ _ref$layers = _ref.layers,
2838
+ layers = _ref$layers === void 0 ? [] : _ref$layers,
2839
+ _ref$isEnabled = _ref.isEnabled,
2840
+ isEnabled = _ref$isEnabled === void 0 ? true : _ref$isEnabled,
2841
+ tooltipPrefix = _ref.tooltipPrefix,
2842
+ skipLocalStyling = _ref.skipLocalStyling;
2843
+ var _useCoreTranslation = useCoreTranslation(),
2844
+ t = _useCoreTranslation.t;
2845
+ var nonEmptyTooltipPrefix = tooltipPrefix != null ? tooltipPrefix : selectedParams.length === 1 ? t('layermanager-layer') + ": " : t('layermanager-layer-multi') + ": ";
2846
+ if (!layers || !layers.length) {
2847
+ return showNoLayers(t);
2848
+ }
2849
+ var selectLayer = function selectLayer(event) {
2850
+ event.stopPropagation();
2851
+ // Ensure after deselecting all, the empty value gets removed
2852
+ var params = event.target.value.filter(function (param) {
2853
+ return param !== '';
2854
+ });
2855
+ onChangeLayerName(params.join(','));
2856
+ };
2857
+ var _getRenderEDRLayersVa = getRenderEDRLayersValues(selectedParams, layers),
2858
+ currentValues = _getRenderEDRLayersVa.currentValues,
2859
+ extendedLayers = _getRenderEDRLayersVa.extendedLayers;
2860
+ var list = extendedLayers.map(function (layer) {
2861
+ return {
2862
+ value: layer.name
2863
+ };
2864
+ });
2865
+ var multiParamText = t('layermanager-EDR-multiparam');
2866
+ var tooltipNames = currentValues.map(function (value) {
2867
+ var layer = extendedLayers.find(function (layer) {
2868
+ return value === layer.name;
2869
+ });
2870
+ return (layer == null ? void 0 : layer.title) || (layer == null ? void 0 : layer.name);
2871
+ });
2872
+ var tooltip = nonEmptyTooltipPrefix + " " + tooltipNames.sort(function (paramA, paramB) {
2873
+ return (paramA != null ? paramA : '').localeCompare(paramB != null ? paramB : '');
2874
+ }).join(', ');
2875
+ return jsxs(TooltipSelect, {
2876
+ disableUnderline: true,
2877
+ tooltip: tooltip,
2878
+ inputProps: {
2879
+ SelectDisplayProps: {
2880
+ 'data-testid': 'selectEDRLayer'
2881
+ }
2882
+ },
2883
+ isEnabled: isEnabled,
2884
+ value: currentValues,
2885
+ list: list,
2886
+ onChange: selectLayer,
2887
+ skipLocalStyling: skipLocalStyling,
2888
+ multiple: true,
2889
+ renderValue: function renderValue(values) {
2890
+ if (values.length === 1) {
2891
+ var layer = extendedLayers.find(function (layer) {
2892
+ return layer.name === currentValues[0];
2893
+ });
2894
+ return (layer == null ? void 0 : layer.title) || (layer == null ? void 0 : layer.name) || 'Param';
2895
+ }
2896
+ return multiParamText;
2897
+ },
2898
+ children: [jsx(MenuItem, {
2899
+ disabled: true,
2900
+ children: t('layermanager-layer')
2901
+ }), extendedLayers.map(function (layerFromServiceLayers, currentIndex) {
2902
+ return jsxs(MenuItem, {
2903
+ value: layerFromServiceLayers.name,
2904
+ disabled: !layerFromServiceLayers.leaf,
2905
+ sx: {
2906
+ '&.MuiMenuItem-root.Mui-selected': {
2907
+ background: 'none',
2908
+ color: 'geowebColors.typographyAndIcons.text'
2909
+ }
2910
+ },
2911
+ children: [jsx(Checkbox, {
2912
+ checked: currentValues.includes(layerFromServiceLayers.name)
2913
+ }), layerFromServiceLayers.title, currentIndex === layers.length && jsx(AlertIcon, {
2914
+ severity: "error"
2915
+ })]
2916
+ }, layerFromServiceLayers.name);
2917
+ })]
2918
+ });
2919
+ };
2920
+
2787
2921
  var RenderLayersConnect = function RenderLayersConnect(_ref) {
2788
2922
  var layerId = _ref.layerId,
2789
2923
  mapId = _ref.mapId,
@@ -2793,6 +2927,9 @@ var RenderLayersConnect = function RenderLayersConnect(_ref) {
2793
2927
  var layerName = useSelector(function (store) {
2794
2928
  return layerSelectors.getLayerName(store, layerId);
2795
2929
  });
2930
+ var layerType = useSelector(function (store) {
2931
+ return layerSelectors.getLayerType(store, layerId);
2932
+ });
2796
2933
  var layerService = useSelector(function (store) {
2797
2934
  return layerSelectors.getLayerService(store, layerId);
2798
2935
  });
@@ -2860,6 +2997,22 @@ var RenderLayersConnect = function RenderLayersConnect(_ref) {
2860
2997
  origin: layerTypes.LayerActionOrigin.layerManager
2861
2998
  }));
2862
2999
  }, [dispatch, mapId]);
3000
+ if (layerType === LayerType.edrLayer) {
3001
+ var selectedParams = layerName.split(',');
3002
+ return jsx(RenderEDRLayers, {
3003
+ layers: layers,
3004
+ selectedParams: selectedParams,
3005
+ onChangeLayerName: function onChangeLayerName(name) {
3006
+ layerChangeName({
3007
+ layerId: layerId,
3008
+ name: name
3009
+ });
3010
+ },
3011
+ isEnabled: isLayerEnabled,
3012
+ tooltipPrefix: tooltipPrefix,
3013
+ skipLocalStyling: skipLocalStyling
3014
+ });
3015
+ }
2863
3016
  return jsx(RenderLayers, {
2864
3017
  layers: layers,
2865
3018
  layerName: layerName,
@@ -3153,11 +3306,14 @@ var MissingDataConnect = function MissingDataConnect(_ref) {
3153
3306
  var layerName = useSelector(function (store) {
3154
3307
  return layerSelectors.getLayerName(store, layerId);
3155
3308
  });
3309
+ var layerType = useSelector(function (store) {
3310
+ return layerSelectors.getLayerType(store, layerId);
3311
+ });
3156
3312
  var layerService = useSelector(function (store) {
3157
3313
  return layerSelectors.getLayerService(store, layerId);
3158
3314
  });
3159
3315
  var serviceLayer = useSelector(function (store) {
3160
- return serviceSelectors.getLayerFromService(store, layerService, layerName);
3316
+ return serviceSelectors.getLayerFromService(store, layerService, layerName, layerType === LayerType.edrLayer);
3161
3317
  });
3162
3318
  var layerStatus = useSelector(function (store) {
3163
3319
  return layerSelectors.getLayerStatus(store, layerId);
@@ -3289,11 +3445,15 @@ var LayerRowConnect = /*#__PURE__*/React.memo(function (_ref) {
3289
3445
  var layerName = useSelector(function (store) {
3290
3446
  return layerSelectors.getLayerName(store, layerId);
3291
3447
  });
3448
+ var layerType = useSelector(function (store) {
3449
+ return layerSelectors.getLayerType(store, layerId);
3450
+ });
3451
+ var isEDRLayer = layerType === LayerType.edrLayer;
3292
3452
  var layerServiceUrl = useSelector(function (store) {
3293
3453
  return layerSelectors.getLayerService(store, layerId);
3294
3454
  });
3295
3455
  var serviceLayer = useSelector(function (store) {
3296
- return serviceSelectors.getLayerFromService(store, layerServiceUrl, layerName);
3456
+ return serviceSelectors.getLayerFromService(store, layerServiceUrl, layerName, isEDRLayer);
3297
3457
  });
3298
3458
  var layerStatus = useSelector(function (store) {
3299
3459
  return layerSelectors.getLayerStatus(store, layerId);
@@ -3307,7 +3467,10 @@ var LayerRowConnect = /*#__PURE__*/React.memo(function (_ref) {
3307
3467
  var currentService = useSelector(function (store) {
3308
3468
  return serviceSelectors.getServiceByUrl(store, layerServiceUrl);
3309
3469
  });
3310
- var fullLayerName = serviceLayer == null ? void 0 : serviceLayer.title;
3470
+ // Ensure that for an EDR layer, we send over the entire layerName if there are multiple params selected
3471
+ // If only one param selected, send over the title from the service
3472
+ var layerNameForEDRLayer = layerName != null && layerName.includes(',') ? layerName : serviceLayer == null ? void 0 : serviceLayer.title;
3473
+ var fullLayerName = isEDRLayer ? layerNameForEDRLayer : serviceLayer == null ? void 0 : serviceLayer.title;
3311
3474
  renderCounter.count(LayerRowConnect.name);
3312
3475
  return jsx(LayerRow, {
3313
3476
  isEnabled: isEnabled,
@@ -3315,6 +3478,7 @@ var LayerRowConnect = /*#__PURE__*/React.memo(function (_ref) {
3315
3478
  layerId: layerId,
3316
3479
  isLayerMissing: !serviceLayer || layerStatus === layerTypes.LayerStatus.error,
3317
3480
  layerName: fullLayerName || layerName,
3481
+ isEDRLayer: isEDRLayer,
3318
3482
  layerEnableLayout: jsx(EnableLayerConnect, {
3319
3483
  layerId: layerId,
3320
3484
  mapId: mapId,
@@ -3697,8 +3861,8 @@ var WMSServerList = function WMSServerList(_ref) {
3697
3861
  var handleListItemClick = function handleListItemClick(event, service) {
3698
3862
  handleChangeService(service);
3699
3863
  };
3700
- var sortedServices = [].concat(availableServices).sort(function (a, b) {
3701
- return a.name.localeCompare(b.name);
3864
+ var sortedServices = [].concat(availableServices).sort(function (serviceA, serviceB) {
3865
+ return serviceA.name.localeCompare(serviceB.name);
3702
3866
  });
3703
3867
  return jsxs(Fragment, {
3704
3868
  children: [jsx(Grid, {
@@ -4693,27 +4857,29 @@ var ProjectionSelectConnect = function ProjectionSelectConnect(_ref) {
4693
4857
  });
4694
4858
  };
4695
4859
 
4696
- var availableOverlayers = [{
4697
- name: 'Default Overlayer',
4698
- value: 'Default Overlayer'
4699
- },
4700
- // TODO: rename to 'None' when implemented: https://gitlab.com/opengeoweb/opengeoweb/-/issues/6095
4701
- {
4702
- name: 'None (not implemented)',
4703
- value: 'None'
4704
- }];
4705
4860
  var OverlayersSelect = function OverlayersSelect(_ref) {
4706
- var _availableOverlayers$;
4707
- var selectedOverlayer = _ref.selectedOverlayer,
4708
- onChangeOverlayer = _ref.onChangeOverlayer;
4861
+ var mapId = _ref.mapId,
4862
+ selectedOverlayer = _ref.selectedOverlayer,
4863
+ onChangeOverlayer = _ref.onChangeOverlayer,
4864
+ availableOverlayers = _ref.availableOverlayers;
4709
4865
  var _useCoreTranslation = useCoreTranslation(),
4710
4866
  t = _useCoreTranslation.t;
4711
- var index = availableOverlayers.findIndex(function (layer) {
4712
- return layer.value === selectedOverlayer;
4867
+ var handleOverlayerChange = function handleOverlayerChange(value) {
4868
+ var selectedOverlayer = availableOverlayers == null ? void 0 : availableOverlayers.find(function (layer) {
4869
+ return layer.name === value;
4870
+ });
4871
+ if (selectedOverlayer) {
4872
+ onChangeOverlayer(mapId, selectedOverlayer);
4873
+ }
4874
+ };
4875
+ var overlayerOptions = availableOverlayers == null ? void 0 : availableOverlayers.map(function (layer) {
4876
+ return {
4877
+ value: layer.name
4878
+ };
4879
+ });
4880
+ var currentIndex = availableOverlayers == null ? void 0 : availableOverlayers.findIndex(function (layer) {
4881
+ return layer.name === selectedOverlayer.name;
4713
4882
  });
4714
- var selectedOverlayerName = (_availableOverlayers$ = availableOverlayers.find(function (layer) {
4715
- return layer.value === selectedOverlayer;
4716
- })) == null ? void 0 : _availableOverlayers$.name;
4717
4883
  return jsxs(Grid, {
4718
4884
  container: true,
4719
4885
  className: "overlayers-column",
@@ -4743,31 +4909,31 @@ var OverlayersSelect = function OverlayersSelect(_ref) {
4743
4909
  SelectDisplayProps: {
4744
4910
  'aria-label': 'overlayerSelect'
4745
4911
  },
4746
- tooltip: t('layermanager-overlayers-overlayer') + ": " + selectedOverlayerName,
4912
+ tooltip: t('layermanager-overlayers-overlayer') + ": " + selectedOverlayer.name,
4747
4913
  isEnabled: true,
4748
4914
  style: {
4749
4915
  maxWidth: '100%'
4750
4916
  },
4751
- value: selectedOverlayer,
4752
- list: availableOverlayers,
4753
- currentIndex: index,
4917
+ value: selectedOverlayer.name,
4918
+ list: overlayerOptions,
4919
+ currentIndex: currentIndex,
4754
4920
  onChange: function onChange(event) {
4755
4921
  event.stopPropagation();
4756
- onChangeOverlayer(event.target.value);
4922
+ handleOverlayerChange(event.target.value);
4757
4923
  },
4758
- onChangeMouseWheel: function onChangeMouseWheel(e) {
4759
- onChangeOverlayer(e.value);
4924
+ onChangeMouseWheel: function onChangeMouseWheel(value) {
4925
+ handleOverlayerChange(value.value);
4760
4926
  },
4761
4927
  children: [jsx(MenuItem, {
4762
4928
  disabled: true,
4763
4929
  children: t('layermanager-overlayers-title')
4764
- }), availableOverlayers.map(function (_ref2) {
4765
- var name = _ref2.name,
4766
- value = _ref2.value;
4930
+ }), availableOverlayers == null ? void 0 : availableOverlayers.map(function (_ref2) {
4931
+ var id = _ref2.id,
4932
+ name = _ref2.name;
4767
4933
  return jsx(MenuItem, {
4768
- value: value,
4934
+ value: name,
4769
4935
  children: name
4770
- }, name);
4936
+ }, id);
4771
4937
  })]
4772
4938
  })
4773
4939
  })
@@ -4775,15 +4941,39 @@ var OverlayersSelect = function OverlayersSelect(_ref) {
4775
4941
  });
4776
4942
  };
4777
4943
 
4778
- var OverlayersSelectConnect = function OverlayersSelectConnect() {
4779
- var _React$useState = React__default.useState('Default Overlayer'),
4780
- selectedOverlayer = _React$useState[0],
4781
- setSelectedOverlayer = _React$useState[1];
4944
+ var OverlayersSelectConnect = function OverlayersSelectConnect(_ref) {
4945
+ var mapId = _ref.mapId;
4946
+ var dispatch = useDispatch();
4947
+ var availableOverlayers = useSelector(function (store) {
4948
+ return layerSelectors.getOverlayersForMapId(store, mapId);
4949
+ });
4950
+ var currentOverlayerId = useSelector(function (store) {
4951
+ return mapSelectors.getSelectedOverlayerByMapId(store, mapId);
4952
+ });
4953
+ var overlayersWithNone = !availableOverlayers.some(function (layer) {
4954
+ return layer.id === 'none';
4955
+ }) ? [].concat(availableOverlayers, [{
4956
+ id: 'none',
4957
+ name: 'None'
4958
+ }]) : availableOverlayers;
4959
+ var selectedOverlayer = overlayersWithNone.find(function (layer) {
4960
+ return layer.id === currentOverlayerId;
4961
+ }) || {
4962
+ id: 'none',
4963
+ name: 'None'
4964
+ };
4965
+ var changeOverlayer = React__default.useCallback(function (mapId, selectedOverlayer) {
4966
+ dispatch(mapActions.changeOverlayer({
4967
+ mapId: mapId || '',
4968
+ selectedOverlayer: selectedOverlayer.id,
4969
+ origin: 'map'
4970
+ }));
4971
+ }, [dispatch]);
4782
4972
  return jsx(OverlayersSelect, {
4973
+ mapId: mapId || '',
4974
+ availableOverlayers: overlayersWithNone,
4783
4975
  selectedOverlayer: selectedOverlayer,
4784
- onChangeOverlayer: function onChangeOverlayer(selection) {
4785
- setSelectedOverlayer(selection);
4786
- }
4976
+ onChangeOverlayer: changeOverlayer
4787
4977
  });
4788
4978
  };
4789
4979
 
@@ -4943,7 +5133,9 @@ var LayerManager = function LayerManager(_ref) {
4943
5133
  mapId: mapId,
4944
5134
  settings: settings == null ? void 0 : settings.content,
4945
5135
  collapsedColumns: collapsedColumns
4946
- }), jsx(OverlayersSelectConnect, {}), jsx(BaseLayerRow, {
5136
+ }), jsx(OverlayersSelectConnect, {
5137
+ mapId: mapId
5138
+ }), jsx(BaseLayerRow, {
4947
5139
  mapId: mapId,
4948
5140
  tooltip: t('layermanager-baselayers-tooltip'),
4949
5141
  preloadedAvailableBaseLayers: preloadedAvailableBaseLayers,
@@ -5191,6 +5383,9 @@ var DimensionSelectSliderConnect = function DimensionSelectSliderConnect(_ref) {
5191
5383
  var layerDimension = useSelector(function (store) {
5192
5384
  return layerSelectors.getLayerDimension(store, layerId, dimensionName);
5193
5385
  });
5386
+ var layerName = useSelector(function (store) {
5387
+ return layerSelectors.getLayerName(store, layerId);
5388
+ });
5194
5389
  var _useLayerDimensions = useLayerDimensions(layerId, mapId),
5195
5390
  isLayerEnabled = _useLayerDimensions.isLayerEnabled;
5196
5391
  if (!layerDimension || !isLayerEnabled) {
@@ -5201,7 +5396,8 @@ var DimensionSelectSliderConnect = function DimensionSelectSliderConnect(_ref) {
5201
5396
  dimensionName: dimensionName,
5202
5397
  handleDimensionValueChanged: handleDimensionValueChanged,
5203
5398
  handleSyncChanged: handleSyncChanged,
5204
- layerDimension: layerDimension
5399
+ layerDimension: layerDimension,
5400
+ layerName: layerName
5205
5401
  });
5206
5402
  };
5207
5403
 
@@ -7296,6 +7492,28 @@ var LocationSearchConnect = function LocationSearchConnect(_ref) {
7296
7492
  });
7297
7493
  };
7298
7494
 
7495
+ /* *
7496
+ * Licensed under the Apache License, Version 2.0 (the "License");
7497
+ * you may not use this file except in compliance with the License.
7498
+ * You may obtain a copy of the License at
7499
+ *
7500
+ * http://www.apache.org/licenses/LICENSE-2.0
7501
+ *
7502
+ * Unless required by applicable law or agreed to in writing, software
7503
+ * distributed under the License is distributed on an "AS IS" BASIS,
7504
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7505
+ * See the License for the specific language governing permissions and
7506
+ * limitations under the License.
7507
+ *
7508
+ * Copyright 2025 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7509
+ * Copyright 2025 - Finnish Meteorological Institute (FMI)
7510
+ * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
7511
+ * */
7512
+
7513
+ var types = /*#__PURE__*/Object.freeze({
7514
+ __proto__: null
7515
+ });
7516
+
7299
7517
  var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref) {
7300
7518
  var layer = _ref.layer,
7301
7519
  layerId = _ref.layerId,
@@ -7398,35 +7616,28 @@ var makePrefetchTimeSpan = function makePrefetchTimeSpan(timeSliderStartCenterEn
7398
7616
  };
7399
7617
  var makeLayerInfoPayload = function makeLayerInfoPayload(payload, mapDimensions, mapId) {
7400
7618
  // During intialization, try to base the layer dimension on the current map dimension value.
7619
+ var origin = 'onInitializeLayer in OlMapViewLayerConnect';
7620
+ var dimensions = (payload.dimensions || []).map(function (layerDim) {
7621
+ var _find;
7622
+ var currentMapDim = ((_find = (mapDimensions || []).find(function (mapDim) {
7623
+ return mapDim.name === layerDim.name;
7624
+ })) == null ? void 0 : _find.currentValue) || layerDim.currentValue;
7625
+ var wmDim = new WMJSDimension(layerDim);
7626
+ return Object.assign({}, layerDim, {
7627
+ currentValue: wmDim.getClosestValue(currentMapDim, true)
7628
+ });
7629
+ });
7401
7630
  var updatedPayLoad = {
7402
- origin: 'onInitializeLayer in OlMapViewLayerConnect',
7631
+ origin: origin,
7403
7632
  layerDimensions: {
7404
7633
  layerId: payload.layerId,
7405
- origin: 'onInitializeLayer in OlMapViewLayerConnect',
7406
- dimensions: (payload.dimensions || []).map(function (layerDim) {
7407
- var _find;
7408
- var currentMapDim = ((_find = (mapDimensions || []).find(function (mapDim) {
7409
- return mapDim.name === layerDim.name;
7410
- })) == null ? void 0 : _find.currentValue) || layerDim.currentValue;
7411
- var wmDim = new WMJSDimension(layerDim);
7412
- return Object.assign({}, layerDim, {
7413
- currentValue: wmDim.getClosestValue(currentMapDim)
7414
- });
7415
- })
7634
+ origin: origin,
7635
+ dimensions: dimensions
7416
7636
  },
7417
7637
  mapDimensions: {
7418
7638
  mapId: mapId,
7419
- origin: 'onInitializeLayer in OlMapViewLayerConnect',
7420
- dimensions: (payload.dimensions || []).map(function (layerDim) {
7421
- var _find2;
7422
- var currentMapDim = ((_find2 = (mapDimensions || []).find(function (mapDim) {
7423
- return mapDim.name === layerDim.name;
7424
- })) == null ? void 0 : _find2.currentValue) || layerDim.currentValue;
7425
- var wmDim = new WMJSDimension(layerDim);
7426
- return Object.assign({}, layerDim, {
7427
- currentValue: wmDim.getClosestValue(currentMapDim)
7428
- });
7429
- })
7639
+ origin: origin,
7640
+ dimensions: dimensions
7430
7641
  }
7431
7642
  };
7432
7643
  return updatedPayLoad;
@@ -7620,7 +7831,9 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
7620
7831
  initialBbox = _ref.initialBbox,
7621
7832
  holdShiftToScroll = _ref.holdShiftToScroll,
7622
7833
  source = _ref.source,
7623
- tileServerSettings = _ref.tileServerSettings;
7834
+ tileServerSettings = _ref.tileServerSettings,
7835
+ _ref$featureStyle = _ref.featureStyle,
7836
+ featureStyle = _ref$featureStyle === void 0 ? genericOpenLayersFeatureStyle : _ref$featureStyle;
7624
7837
  var store = useStore();
7625
7838
  var _useGetOpenLayersView = useGetOpenLayersView(mapId, store),
7626
7839
  view = _useGetOpenLayersView.view;
@@ -7965,7 +8178,8 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
7965
8178
  var layerDivStyle = React.useMemo(function () {
7966
8179
  var style = {
7967
8180
  position: 'absolute',
7968
- zIndex: 1
8181
+ zIndex: 1,
8182
+ width: '100%'
7969
8183
  };
7970
8184
  if (isSearchDialogOpen) {
7971
8185
  style.top = 8 + 40 + "px";
@@ -8021,13 +8235,13 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
8021
8235
  layerId: layer == null ? void 0 : layer.id,
8022
8236
  layer: layer,
8023
8237
  zIndex: featureLayers.length - zIndex + 3000,
8024
- style: genericOpenLayersFeatureStyle,
8238
+ style: featureStyle,
8025
8239
  hoverSelect: {
8026
8240
  active: true
8027
8241
  }
8028
8242
  }, "featurelayer-" + (layer == null ? void 0 : layer.id));
8029
8243
  }), jsx(OpenLayersFeatureLayer, {
8030
- style: genericOpenLayersFeatureStyle,
8244
+ style: featureStyle,
8031
8245
  featureCollection: combinedLinkedFeatures,
8032
8246
  zIndex: 4000,
8033
8247
  hoverSelect: hoverSelect
@@ -8055,6 +8269,8 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
8055
8269
  multiLegend: controls == null ? void 0 : controls.multiLegend,
8056
8270
  source: source
8057
8271
  })]
8272
+ }), (controls == null ? void 0 : controls.dataExplorerButton) && jsx(DataExplorerButtonConnect, {
8273
+ mapId: mapId
8058
8274
  }), (controls == null ? void 0 : controls.dimensionSelect) && jsx(MultiDimensionSelectMapButtonsConnect, {
8059
8275
  mapId: mapId
8060
8276
  }), (controls == null ? void 0 : controls.getFeatureInfo) && jsx(GetFeatureInfoButtonConnect, {
@@ -8078,7 +8294,7 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
8078
8294
  });
8079
8295
  };
8080
8296
 
8081
- var _excluded = ["id", "dockedLayerManagerSize", "title", "layers", "dimensions", "shouldAutoUpdate", "shouldAnimate", "shouldAutoFetch", "initialBbox", "srs", "shouldShowZoomControls", "displayMapPin", "showTimeSlider", "disableTimeSlider", "displayTimeInMap", "displayLayerManagerAndLegendButtonInMap", "displayDimensionSelectButtonInMap", "multiLegend", "shouldShowLayerManager", "shouldShowDockedLayerManager", "showClock", "displayGetFeatureInfoButtonInMap", "shouldDisplayDrawControls", "displaySearchButtonInMap", "mapControls", "children", "shouldDisablePrefetching", "tileServerSettings"];
8297
+ var _excluded = ["id", "dockedLayerManagerSize", "title", "layers", "dimensions", "shouldAutoUpdate", "shouldAnimate", "shouldAutoFetch", "initialBbox", "srs", "shouldShowZoomControls", "displayMapPin", "showTimeSlider", "disableTimeSlider", "displayTimeInMap", "displayLayerManagerAndLegendButtonInMap", "displayDimensionSelectButtonInMap", "multiLegend", "shouldShowLayerManager", "shouldShowDockedLayerManager", "showClock", "displayGetFeatureInfoButtonInMap", "shouldDisplayDrawControls", "displaySearchButtonInMap", "displayDataExplorerButtonOnMap", "mapControls", "children", "shouldDisablePrefetching", "tileServerSettings", "featureStyle"];
8082
8298
  var titleStyle = function titleStyle(theme) {
8083
8299
  return {
8084
8300
  position: 'absolute',
@@ -8143,10 +8359,14 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_ref) {
8143
8359
  shouldDisplayDrawControls = _ref$shouldDisplayDra === void 0 ? false : _ref$shouldDisplayDra,
8144
8360
  _ref$displaySearchBut = _ref.displaySearchButtonInMap,
8145
8361
  displaySearchButtonInMap = _ref$displaySearchBut === void 0 ? false : _ref$displaySearchBut,
8362
+ _ref$displayDataExplo = _ref.displayDataExplorerButtonOnMap,
8363
+ displayDataExplorerButtonOnMap = _ref$displayDataExplo === void 0 ? false : _ref$displayDataExplo,
8146
8364
  mapControls = _ref.mapControls,
8147
8365
  children = _ref.children,
8148
8366
  shouldDisablePrefetching = _ref.shouldDisablePrefetching,
8149
8367
  tileServerSettings = _ref.tileServerSettings,
8368
+ _ref$featureStyle = _ref.featureStyle,
8369
+ featureStyle = _ref$featureStyle === void 0 ? genericOpenLayersFeatureStyle : _ref$featureStyle,
8150
8370
  props = _objectWithoutPropertiesLoose(_ref, _excluded);
8151
8371
  var dispatch = useDispatch();
8152
8372
  var mapId = React__default.useRef(id || webmapUtils.generateMapId()).current;
@@ -8238,9 +8458,10 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_ref) {
8238
8458
  multiLegend: multiLegend,
8239
8459
  dimensionSelect: displayDimensionSelectButtonInMap,
8240
8460
  getFeatureInfo: displayGetFeatureInfoButtonInMap,
8461
+ dataExplorerButton: displayDataExplorerButtonOnMap,
8241
8462
  additionalMapControls: mapControls
8242
8463
  };
8243
- }, [title, displaySearchButtonInMap, shouldShowZoomControls, displayLayerManagerAndLegendButtonInMap, multiLegend, displayDimensionSelectButtonInMap, displayGetFeatureInfoButtonInMap, mapControls]);
8464
+ }, [title, displaySearchButtonInMap, shouldShowZoomControls, displayLayerManagerAndLegendButtonInMap, multiLegend, displayDimensionSelectButtonInMap, displayGetFeatureInfoButtonInMap, displayDataExplorerButtonOnMap, mapControls]);
8244
8465
  return React__default.useMemo(function () {
8245
8466
  renderCounter.count(ConfigurableMapConnect.name + "_" + mapId);
8246
8467
  return jsxs(Box, {
@@ -8278,12 +8499,13 @@ var ConfigurableMapConnect = function ConfigurableMapConnect(_ref) {
8278
8499
  initialBbox: initialBbox,
8279
8500
  shouldDisablePrefetching: shouldDisablePrefetching,
8280
8501
  tileServerSettings: tileServerSettings,
8502
+ featureStyle: featureStyle,
8281
8503
  children: children
8282
8504
  }), showClock && jsx(TimeSliderClockConnect, {
8283
8505
  mapId: mapId
8284
8506
  })]
8285
8507
  });
8286
- }, [mapId, title, id, initialBbox, mapControlConfig, tileServerSettings, disableTimeSlider, displayTimeInMap, shouldAutoFetch, shouldDisablePrefetching, children, showClock]);
8508
+ }, [mapId, title, id, initialBbox, mapControlConfig, tileServerSettings, disableTimeSlider, displayTimeInMap, shouldAutoFetch, shouldDisablePrefetching, children, showClock, featureStyle]);
8287
8509
  };
8288
8510
 
8289
8511
  var mapBoxStyle = function mapBoxStyle(theme) {
@@ -8520,8 +8742,8 @@ var useGetReferenceTimes = function useGetReferenceTimes(inputLayer) {
8520
8742
  var refTimeDim = layer.getDimension('reference_time');
8521
8743
  /* Loop through all values of the dimension.
8522
8744
  A map cannot be used for iterating, as the dimension values are not in an array (it is an API). */
8523
- for (var j = 0; j < refTimeDim.size(); j += 1) {
8524
- var referenceTimeValue = refTimeDim.getValueForIndex(j);
8745
+ for (var jIndex = 0; jIndex < refTimeDim.size(); jIndex += 1) {
8746
+ var referenceTimeValue = refTimeDim.getValueForIndex(jIndex);
8525
8747
  referenceTimes.push(referenceTimeValue);
8526
8748
  }
8527
8749
  setReferenceTimes(referenceTimes);
@@ -8616,7 +8838,8 @@ var componentsLookUp = function componentsLookUp(_ref) {
8616
8838
  var mapPreset = initialProps.mapPreset,
8617
8839
  mapControls = initialProps.mapControls,
8618
8840
  shouldDisplayDrawControls = initialProps.shouldDisplayDrawControls,
8619
- displaySearchButtonInMap = initialProps.displaySearchButtonInMap;
8841
+ displaySearchButtonInMap = initialProps.displaySearchButtonInMap,
8842
+ displayDataExplorerButtonOnMap = initialProps.displayDataExplorerButtonOnMap;
8620
8843
  return jsx(ConfigurableMapConnect, Object.assign({}, mapPreset, {
8621
8844
  initialBbox: mapPreset == null || (_mapPreset$proj = mapPreset.proj) == null ? void 0 : _mapPreset$proj.bbox,
8622
8845
  srs: mapPreset == null || (_mapPreset$proj2 = mapPreset.proj) == null ? void 0 : _mapPreset$proj2.srs,
@@ -8625,6 +8848,7 @@ var componentsLookUp = function componentsLookUp(_ref) {
8625
8848
  displayGetFeatureInfoButtonInMap: true,
8626
8849
  shouldDisplayDrawControls: shouldDisplayDrawControls,
8627
8850
  displaySearchButtonInMap: displaySearchButtonInMap,
8851
+ displayDataExplorerButtonOnMap: displayDataExplorerButtonOnMap,
8628
8852
  mapControls: mapControls
8629
8853
  }));
8630
8854
  }
@@ -9424,6 +9648,162 @@ var LanguageSelect = function LanguageSelect(_ref) {
9424
9648
  });
9425
9649
  };
9426
9650
 
9651
+ /* *
9652
+ * Licensed under the Apache License, Version 2.0 (the "License");
9653
+ * you may not use this file except in compliance with the License.
9654
+ * You may obtain a copy of the License at
9655
+ *
9656
+ * http://www.apache.org/licenses/LICENSE-2.0
9657
+ *
9658
+ * Unless required by applicable law or agreed to in writing, software
9659
+ * distributed under the License is distributed on an "AS IS" BASIS,
9660
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9661
+ * See the License for the specific language governing permissions and
9662
+ * limitations under the License.
9663
+ *
9664
+ * Copyright 2025 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
9665
+ * Copyright 2025 - Finnish Meteorological Institute (FMI)
9666
+ * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
9667
+ * */
9668
+ var fakeLocationList = [{
9669
+ id: 'EHAM',
9670
+ name: 'Amsterdam Airport Schiphol - EHAM',
9671
+ source: 'A'
9672
+ }, {
9673
+ id: 'weg-c7702b4019c119f21789f499a9270a8c',
9674
+ name: 'A12, Arnhem',
9675
+ source: 'P'
9676
+ }, {
9677
+ id: 'weg-ef6c8b8fd8440f4d96d96824fc2a4093',
9678
+ name: 'A12, Arnhem, MultiLineString',
9679
+ source: 'P'
9680
+ }, {
9681
+ id: 'pcd-5d8813ff27d390369c3d2fff69bfb0fa',
9682
+ name: 'Blauwkapelseweg, 3572KC Utrecht',
9683
+ source: 'P'
9684
+ }, {
9685
+ id: '06260',
9686
+ name: 'De Bilt - 06260',
9687
+ source: 'W'
9688
+ }, {
9689
+ id: 'gem-0b2a8b92856b27f86fbd67ab35808ebf',
9690
+ name: 'Gemeente Amsterdam',
9691
+ source: 'P'
9692
+ }, {
9693
+ id: 'gem-e64a22d3a9bb57e785a884bd7f7df6ca',
9694
+ name: 'Gemeente Arnhem',
9695
+ source: 'P'
9696
+ }, {
9697
+ id: '658225',
9698
+ name: 'Helsinki, Uusimaa, Finland',
9699
+ source: 'G'
9700
+ }];
9701
+ var fakeLocationDetailList = [{
9702
+ id: 'EHAM',
9703
+ name: 'Amsterdam Airport Schiphol - EHAM',
9704
+ source: 'A',
9705
+ lon: 4.76389,
9706
+ lat: 52.308601
9707
+ }, {
9708
+ id: '06260',
9709
+ name: 'De Bilt - 06260',
9710
+ source: 'W',
9711
+ lon: 5.18,
9712
+ lat: 52.1
9713
+ }, {
9714
+ lat: 52.10125783,
9715
+ lon: 5.12972011,
9716
+ source: 'P',
9717
+ id: 'pcd-5d8813ff27d390369c3d2fff69bfb0fa',
9718
+ name: 'Blauwkapelseweg, 3572KC Utrecht',
9719
+ geometry: {
9720
+ type: 'Feature',
9721
+ geometry: {
9722
+ type: 'Point',
9723
+ coordinates: [5.12972011, 52.10125783]
9724
+ }
9725
+ }
9726
+ }, {
9727
+ id: 'weg-c7702b4019c119f21789f499a9270a8c',
9728
+ name: 'A12, Arnhem',
9729
+ source: 'P',
9730
+ lat: 52.01459863,
9731
+ lon: 5.92115805,
9732
+ geometry: {
9733
+ type: 'Feature',
9734
+ properties: {},
9735
+ geometry: {
9736
+ type: 'LineString',
9737
+ coordinates: [[5.723182066074628, 52.021961941904436], [5.821250546216021, 52.0256350284852], [5.860476940657833, 52.02930789018711], [5.936353777736599, 52.013041507826415], [5.9585833728647515, 51.99098354703645], [5.981670640390121, 51.98046570698139], [6.003008228959999, 51.96574744492605]]
9738
+ }
9739
+ }
9740
+ }, {
9741
+ id: 'gem-e64a22d3a9bb57e785a884bd7f7df6ca',
9742
+ name: 'Gemeente Arnhem',
9743
+ source: 'P',
9744
+ lat: 52.00113721,
9745
+ lon: 5.89259249,
9746
+ geometry: {
9747
+ type: 'Feature',
9748
+ geometry: {
9749
+ type: 'Polygon',
9750
+ coordinates: [[[5.89827, 51.93458], [5.90186, 51.93346], [5.91277, 51.94529], [5.91096, 51.94591], [5.91165, 51.94704], [5.91137, 51.94727], [5.91202, 51.94782], [5.91417, 51.94869], [5.91517, 51.94996], [5.9169, 51.95052], [5.92649, 51.95115], [5.92945, 51.95059], [5.92956, 51.95125], [5.93017, 51.95227], [5.93123, 51.95342], [5.93091, 51.95387], [5.93146, 51.95482], [5.93121, 51.95497], [5.93155, 51.95527], [5.93145, 51.95557], [5.93179, 51.95621], [5.93157, 51.95691], [5.93181, 51.9573], [5.93161, 51.9575], [5.93183, 51.95948], [5.93233, 51.95973], [5.93334, 51.95983], [5.9356, 51.96042], [5.93657, 51.95908], [5.93778, 51.95787], [5.94033, 51.95604], [5.94511, 51.95346], [5.95195, 51.95059], [5.95523, 51.94875], [5.95089, 51.95299], [5.94953, 51.95567], [5.94925, 51.95745], [5.94966, 51.96008], [5.95097, 51.96283], [5.95243, 51.96457], [5.95546, 51.96702], [5.95894, 51.9692], [5.96204, 51.97059], [5.96463, 51.97142], [5.96841, 51.97208], [5.97387, 51.97261], [5.98001, 51.97355], [5.98777, 51.97407], [5.99034, 51.97441], [5.9868, 51.9772], [5.98669, 51.97753], [5.98501, 51.9789], [5.98065, 51.98145], [5.9784, 51.98245], [5.97551, 51.98345], [5.97551, 51.98359], [5.97503, 51.98357], [5.97503, 51.98372], [5.97326, 51.9841], [5.97088, 51.98491], [5.9681, 51.98551], [5.96518, 51.98649], [5.96201, 51.98792], [5.9592, 51.98964], [5.9558, 51.99268], [5.95519, 51.99336], [5.9555, 51.99345], [5.95444, 51.99473], [5.95397, 51.99457], [5.95361, 51.995], [5.95193, 51.99846], [5.95093, 52.00146], [5.95031, 52.00232], [5.94983, 52.00409], [5.94877, 52.00537], [5.94813, 52.00659], [5.94331, 52.01013], [5.94603, 52.01041], [5.94607, 52.01061], [5.9424, 52.01083], [5.9414, 52.01149], [5.94019, 52.01871], [5.9391, 52.03142], [5.93807, 52.03857], [5.9371, 52.04853], [5.94091, 52.05795], [5.94283, 52.06116], [5.94329, 52.06246], [5.95593, 52.07334], [5.95191, 52.07532], [5.9461, 52.07789], [5.94607, 52.07773], [5.94506, 52.07783], [5.94219, 52.07659], [5.90974, 52.0621], [5.89812, 52.06336], [5.89845, 52.06182], [5.89803, 52.06145], [5.89807, 52.06101], [5.8994, 52.04996], [5.88206, 52.04941], [5.85967, 52.05202], [5.85005, 52.0516], [5.83792, 52.04663], [5.82659, 52.03694], [5.82615, 52.03673], [5.82103, 52.03208], [5.80834, 52.01876], [5.80723, 52.0117], [5.80296, 52.00405], [5.807, 52.00311], [5.81725, 52.00143], [5.82628, 51.99956], [5.83629, 51.99856], [5.84054, 51.9987], [5.84712, 51.99836], [5.84967, 51.99804], [5.85242, 51.99707], [5.85621, 51.9961], [5.86374, 51.99589], [5.86256, 51.99122], [5.8647, 51.99108], [5.86315, 51.98529], [5.86382, 51.98517], [5.86624, 51.98411], [5.86737, 51.98029], [5.86728, 51.98014], [5.86586, 51.97987], [5.86547, 51.97865], [5.86374, 51.97796], [5.86472, 51.97627], [5.8659, 51.97569], [5.86687, 51.9753], [5.86919, 51.97599], [5.87086, 51.97511], [5.86778, 51.97241], [5.86532, 51.97092], [5.86206, 51.96991], [5.85912, 51.96954], [5.85707, 51.96953], [5.85469, 51.96976], [5.84403, 51.9725], [5.83906, 51.97328], [5.83534, 51.97356], [5.83548, 51.97239], [5.8362, 51.97143], [5.8362, 51.97089], [5.83538, 51.97085], [5.83518, 51.96886], [5.83585, 51.9684], [5.83598, 51.96633], [5.83518, 51.96417], [5.8346, 51.96325], [5.83401, 51.96271], [5.83237, 51.96189], [5.82934, 51.96085], [5.8302, 51.95862], [5.83109, 51.95869], [5.83134, 51.95854], [5.83128, 51.95555], [5.8307, 51.95439], [5.83008, 51.95385], [5.82991, 51.95343], [5.83051, 51.95327], [5.82877, 51.95004], [5.82866, 51.94826], [5.82966, 51.94551], [5.82993, 51.94524], [5.8373, 51.94518], [5.83731, 51.94416], [5.83864, 51.94412], [5.8389, 51.94431], [5.84401, 51.94376], [5.84968, 51.94294], [5.85039, 51.94451], [5.86193, 51.9425], [5.86224, 51.94289], [5.8685, 51.94218], [5.87189, 51.94152], [5.87476, 51.94079], [5.87619, 51.9402], [5.8772, 51.93917], [5.87786, 51.93883], [5.87949, 51.93865], [5.8814, 51.93825], [5.88283, 51.93777], [5.88464, 51.93749], [5.88777, 51.93614], [5.89267, 51.93573], [5.89792, 51.93436], [5.89827, 51.93458]]]
9751
+ },
9752
+ properties: {}
9753
+ }
9754
+ }, {
9755
+ id: 'gem-0b2a8b92856b27f86fbd67ab35808ebf',
9756
+ name: 'Gemeente Amsterdam',
9757
+ source: 'P',
9758
+ lat: 52.36648685,
9759
+ lon: 4.91978668,
9760
+ geometry: {
9761
+ type: 'Feature',
9762
+ geometry: {
9763
+ type: 'MultiPolygon',
9764
+ coordinates: [[[[5.07349, 52.27806], [5.07708, 52.27798], [5.0846, 52.2794], [5.0877, 52.28168], [5.10207, 52.27989], [5.10218, 52.28123], [5.10201, 52.28165], [5.10278, 52.28209], [5.10282, 52.28238], [5.10428, 52.28321], [5.10426, 52.28381], [5.10481, 52.28432], [5.1047, 52.28556], [5.10205, 52.28766], [5.09968, 52.29001], [5.09884, 52.29063], [5.09871, 52.29057], [5.09847, 52.29164], [5.09874, 52.29219], [5.09948, 52.29271], [5.09935, 52.2928], [5.10292, 52.29447], [5.10607, 52.29467], [5.10742, 52.29633], [5.10767, 52.29729], [5.10725, 52.29786], [5.10622, 52.29834], [5.10526, 52.29842], [5.10197, 52.2978], [5.1013, 52.29792], [5.09894, 52.2987], [5.09719, 52.29995], [5.09677, 52.30046], [5.09577, 52.30376], [5.09626, 52.30686], [5.09682, 52.3076], [5.09871, 52.30877], [5.09959, 52.30953], [5.0998, 52.31003], [5.10057, 52.3103], [5.10055, 52.31044], [5.09767, 52.31154], [5.09213, 52.31301], [5.09308, 52.31415], [5.09281, 52.31427], [5.09261, 52.31422], [5.09053, 52.31499], [5.08481, 52.31633], [5.0849, 52.31674], [5.08321, 52.31727], [5.08296, 52.31702], [5.07751, 52.31818], [5.07311, 52.32018], [5.07276, 52.31994], [5.06951, 52.32179], [5.06908, 52.32153], [5.06878, 52.32172], [5.06586, 52.32224], [5.06522, 52.32221], [5.06469, 52.32201], [5.06528, 52.32144], [5.06572, 52.32048], [5.06526, 52.31918], [5.0633, 52.31821], [5.0624, 52.31758], [5.06084, 52.31698], [5.05972, 52.31679], [5.05834, 52.31632], [5.05803, 52.31668], [5.05909, 52.31705], [5.05674, 52.3196], [5.05814, 52.32042], [5.06039, 52.32116], [5.06147, 52.32175], [5.06144, 52.32204], [5.0611, 52.32208], [5.06151, 52.32367], [5.05747, 52.32503], [5.04934, 52.32695], [5.04815, 52.32702], [5.04625, 52.32673], [5.04518, 52.32685], [5.0444, 52.32715], [5.04486, 52.32745], [5.0439, 52.32799], [5.04355, 52.32778], [5.04249, 52.32828], [5.04013, 52.32896], [5.03329, 52.33019], [5.02877, 52.33078], [5.02483, 52.33063], [5.02159, 52.33086], [5.01727, 52.33019], [5.01811, 52.32782], [5.01849, 52.32329], [5.01665, 52.32299], [5.01613, 52.32451], [5.00652, 52.31908], [5.00153, 52.31591], [4.99786, 52.31398], [4.99746, 52.31425], [4.9973, 52.3142], [4.99709, 52.31446], [4.99737, 52.31667], [4.9971, 52.31739], [4.99211, 52.32377], [4.99074, 52.32635], [4.98905, 52.32798], [4.9853, 52.33026], [4.98397, 52.33067], [4.98252, 52.3308], [4.98068, 52.33076], [4.9798, 52.331], [4.97795, 52.33116], [4.97714, 52.33064], [4.97531, 52.33056], [4.97483, 52.3297], [4.97403, 52.32891], [4.97181, 52.32747], [4.9711, 52.32665], [4.97025, 52.32617], [4.96754, 52.32776], [4.95268, 52.32264], [4.94766, 52.32814], [4.94049, 52.32568], [4.93861, 52.32422], [4.93796, 52.32412], [4.93762, 52.3233], [4.93993, 52.32194], [4.94021, 52.32081], [4.94104, 52.31962], [4.93958, 52.31912], [4.94033, 52.3183], [4.93983, 52.31712], [4.93804, 52.31651], [4.93874, 52.31564], [4.93872, 52.31509], [4.93523, 52.31389], [4.93635, 52.31266], [4.93414, 52.3119], [4.93007, 52.30934], [4.9303, 52.30918], [4.92933, 52.30853], [4.92991, 52.3081], [4.92942, 52.30783], [4.92983, 52.30752], [4.92947, 52.30741], [4.93049, 52.30616], [4.93272, 52.30426], [4.93322, 52.30355], [4.93494, 52.30197], [4.94641, 52.28856], [4.95209, 52.28253], [4.95184, 52.28244], [4.95524, 52.2783], [4.95714, 52.27867], [4.95866, 52.27834], [4.95997, 52.27835], [4.96105, 52.27817], [4.96224, 52.28021], [4.96532, 52.28045], [4.96617, 52.28098], [4.96649, 52.2801], [4.96767, 52.27958], [4.96875, 52.28073], [4.96938, 52.28179], [4.96973, 52.28312], [4.97515, 52.28634], [4.98289, 52.28964], [4.98351, 52.29037], [4.99046, 52.2896], [4.99748, 52.28912], [4.99845, 52.28984], [4.99855, 52.29023], [4.99881, 52.29024], [5.00179, 52.29279], [5.00185, 52.29588], [5.00323, 52.29606], [5.00323, 52.29739], [5.00383, 52.29851], [5.00526, 52.29839], [5.00754, 52.30087], [5.00789, 52.30152], [5.00992, 52.30209], [5.01105, 52.30303], [5.01177, 52.30339], [5.01426, 52.30368], [5.01669, 52.30288], [5.01784, 52.30266], [5.02154, 52.30246], [5.02187, 52.28265], [5.02438, 52.28136], [5.03053, 52.28849], [5.03321, 52.28626], [5.03342, 52.28631], [5.03515, 52.28553], [5.03943, 52.28324], [5.04079, 52.28388], [5.04278, 52.28249], [5.04748, 52.28502], [5.0504, 52.28787], [5.05158, 52.28732], [5.05277, 52.28649], [5.05483, 52.28755], [5.05954, 52.28932], [5.06328, 52.28719], [5.06419, 52.28629], [5.06479, 52.28508], [5.06547, 52.2852], [5.06566, 52.28269], [5.06549, 52.28127], [5.06588, 52.28127], [5.0659, 52.28055], [5.06519, 52.28054], [5.06441, 52.28074], [5.06389, 52.27998], [5.06494, 52.27987], [5.06533, 52.27964], [5.06434, 52.27926], [5.06453, 52.27902], [5.06386, 52.27852], [5.06463, 52.27826], [5.07349, 52.27806]]], [[[4.91359, 52.32069], [4.91073, 52.32191], [4.91135, 52.3229], [4.91033, 52.32357], [4.91129, 52.32416], [4.91388, 52.32455], [4.91293, 52.33051], [4.91417, 52.33068], [4.9169, 52.33136], [4.92255, 52.33308], [4.92244, 52.33322], [4.92351, 52.33426], [4.92377, 52.33544], [4.92577, 52.33537], [4.92694, 52.33578], [4.92677, 52.33596], [4.92849, 52.33655], [4.93422, 52.3355], [4.93562, 52.33551], [4.93651, 52.33459], [4.93815, 52.33524], [4.93953, 52.33559], [4.94171, 52.33553], [4.94172, 52.33641], [4.9438, 52.33671], [4.94955, 52.33838], [4.94986, 52.33853], [4.9497, 52.33873], [4.95189, 52.33967], [4.95305, 52.34037], [4.9597, 52.34693], [4.95993, 52.34745], [4.96137, 52.34885], [4.96496, 52.35328], [4.96582, 52.3547], [4.96624, 52.35416], [4.96831, 52.35493], [4.96952, 52.3555], [4.96931, 52.35561], [4.96959, 52.3561], [4.97218, 52.35555], [4.97449, 52.35467], [4.99932, 52.34154], [4.99991, 52.34193], [5.00072, 52.3422], [5.00411, 52.34258], [5.00547, 52.34246], [5.00829, 52.34185], [5.00953, 52.342], [5.01106, 52.3427], [5.012, 52.34336], [5.01238, 52.34431], [5.0159, 52.34832], [5.03906, 52.35458], [5.03768, 52.3754], [5.0671, 52.38467], [5.07916, 52.38865], [5.07426, 52.41384], [5.06827, 52.41656], [5.06541, 52.41724], [5.06368, 52.41643], [5.06256, 52.41617], [5.05776, 52.41654], [5.05093, 52.41528], [5.04918, 52.41513], [5.04259, 52.41698], [5.03939, 52.41738], [5.03687, 52.41809], [5.03547, 52.41827], [5.03505, 52.4182], [5.0344, 52.41781], [5.03406, 52.41717], [5.03347, 52.41669], [5.03249, 52.41628], [5.03004, 52.41564], [5.03005, 52.41683], [5.02973, 52.41771], [5.02898, 52.41886], [5.02836, 52.41942], [5.0265, 52.42006], [5.02429, 52.42012], [5.02356, 52.42027], [5.02161, 52.42122], [5.02115, 52.42107], [5.02031, 52.4199], [5.01821, 52.41906], [5.00016, 52.42544], [4.99137, 52.4254], [4.99045, 52.42552], [4.99041, 52.42452], [4.98918, 52.42337], [4.98883, 52.42325], [4.98777, 52.42327], [4.9871, 52.42284], [4.98264, 52.42676], [4.97332, 52.4228], [4.95595, 52.42195], [4.95588, 52.42244], [4.9536, 52.42221], [4.95261, 52.42326], [4.95249, 52.42349], [4.95277, 52.42368], [4.95133, 52.42323], [4.95163, 52.42265], [4.95148, 52.42193], [4.94971, 52.42193], [4.94853, 52.42142], [4.94779, 52.42156], [4.94497, 52.41532], [4.94407, 52.41434], [4.94257, 52.41384], [4.93514, 52.41204], [4.93072, 52.41161], [4.93038, 52.41208], [4.92044, 52.41661], [4.91569, 52.41856], [4.9147, 52.41868], [4.91465, 52.4185], [4.91405, 52.4185], [4.91359, 52.41865], [4.90868, 52.42072], [4.90796, 52.42087], [4.90808, 52.42112], [4.90189, 52.42362], [4.89841, 52.42458], [4.89246, 52.42545], [4.88948, 52.42564], [4.88298, 52.42551], [4.88246, 52.42589], [4.88181, 52.42602], [4.87952, 52.42569], [4.87767, 52.42588], [4.87597, 52.42655], [4.87411, 52.42796], [4.87334, 52.42949], [4.87274, 52.42954], [4.8721, 52.42992], [4.87096, 52.43019], [4.87074, 52.43039], [4.8697, 52.42975], [4.86874, 52.43032], [4.86669, 52.43067], [4.86501, 52.43055], [4.86268, 52.42994], [4.86281, 52.42962], [4.86245, 52.42878], [4.85795, 52.42472], [4.85791, 52.42373], [4.85972, 52.42128], [4.85986, 52.42047], [4.85949, 52.41979], [4.85608, 52.41666], [4.84529, 52.41847], [4.76754, 52.4285], [4.76718, 52.42747], [4.73921, 52.43106], [4.72876, 52.40071], [4.75605, 52.39719], [4.75602, 52.3971], [4.75745, 52.39689], [4.75782, 52.39666], [4.75801, 52.38955], [4.75894, 52.38442], [4.75912, 52.37933], [4.75726, 52.37798], [4.75643, 52.37776], [4.75805, 52.37507], [4.7586, 52.37222], [4.75798, 52.36924], [4.7549, 52.35838], [4.7551, 52.35683], [4.75611, 52.35583], [4.75733, 52.3552], [4.77174, 52.34956], [4.79054, 52.34184], [4.79178, 52.34103], [4.79777, 52.33528], [4.81544, 52.32789], [4.81713, 52.32692], [4.81843, 52.32556], [4.81947, 52.32557], [4.81989, 52.32576], [4.82518, 52.32573], [4.82606, 52.32593], [4.83941, 52.32736], [4.83941, 52.32755], [4.83963, 52.32756], [4.83948, 52.32915], [4.84052, 52.32959], [4.84396, 52.33022], [4.84524, 52.32968], [4.84756, 52.33005], [4.84801, 52.33057], [4.85592, 52.33032], [4.85642, 52.32885], [4.85633, 52.32176], [4.85657, 52.32177], [4.85675, 52.32141], [4.85761, 52.32143], [4.85765, 52.32169], [4.85786, 52.32173], [4.89629, 52.32242], [4.89715, 52.3219], [4.89828, 52.32164], [4.9016, 52.32153], [4.90253, 52.32132], [4.9047, 52.32039], [4.90784, 52.3195], [4.90905, 52.31883], [4.90914, 52.31825], [4.91238, 52.31825], [4.91428, 52.32041], [4.91359, 52.32069]]]]
9765
+ },
9766
+ properties: {}
9767
+ }
9768
+ }, {
9769
+ id: 'weg-ef6c8b8fd8440f4d96d96824fc2a4093',
9770
+ name: 'A12, Arnhem, MultiLineString',
9771
+ source: 'P',
9772
+ lat: 52.01459863,
9773
+ lon: 5.92115805,
9774
+ geometry: {
9775
+ type: 'Feature',
9776
+ geometry: {
9777
+ type: 'MultiLineString',
9778
+ coordinates: [[[5.81367, 52.02431], [5.8408, 52.02822], [5.84814, 52.02867], [5.85594, 52.02852], [5.86208, 52.02794], [5.86851, 52.02687], [5.87294, 52.02583], [5.89013, 52.02112], [5.89487, 52.02018], [5.90455, 52.01868]], [[5.90455, 52.01868], [5.91249, 52.01727], [5.91613, 52.01629], [5.91772, 52.01617], [5.91913, 52.01628]], [[5.91913, 52.01628], [5.92001, 52.01581], [5.92095, 52.01472], [5.92158, 52.01445], [5.92244, 52.01443], [5.92515, 52.01498]], [[5.92515, 52.01498], [5.9255, 52.01504]], [[5.8187, 52.02512], [5.8187, 52.02518]], [[5.8187, 52.02518], [5.81862, 52.02604], [5.81882, 52.02654], [5.81936, 52.02697], [5.82019, 52.02724], [5.82155, 52.02717], [5.82312, 52.02642], [5.824, 52.02623], [5.82783, 52.02653]], [[5.82783, 52.02653], [5.83847, 52.0281], [5.84188, 52.02846], [5.84733, 52.02879], [5.85241, 52.02881], [5.85846, 52.02847], [5.86428, 52.02777], [5.87025, 52.02664], [5.87549, 52.02528]], [[5.87549, 52.02528], [5.87771, 52.0248]], [[5.87771, 52.0248], [5.878, 52.02492]], [[5.878, 52.02492], [5.87838, 52.0249]], [[5.87838, 52.0249], [5.87888, 52.02502], [5.88028, 52.02474]], [[5.88028, 52.02474], [5.88138, 52.02384]], [[5.88138, 52.02384], [5.88331, 52.02309]], [[5.88331, 52.02309], [5.88916, 52.0215], [5.89402, 52.02047], [5.91825, 52.01675]], [[5.91825, 52.01675], [5.92178, 52.01645], [5.92271, 52.01665], [5.92437, 52.01738]], [[5.92437, 52.01738], [5.92525, 52.01743]], [[5.97711, 51.98293], [5.97675, 51.98263]], [[5.97675, 51.98263], [5.98048, 51.98113]], [[5.98048, 51.98113], [5.98036, 51.98104]], [[5.98036, 51.98104], [5.98442, 51.97869], [5.98987, 51.97439]], [[5.97426, 51.97989], [5.97562, 51.98025], [5.97614, 51.98058], [5.97646, 51.98107], [5.97645, 51.98179]], [[5.97645, 51.98179], [5.97722, 51.98099], [5.97842, 51.98063]], [[5.97842, 51.98063], [5.97904, 51.98062]], [[5.97904, 51.98062], [5.98113, 51.98027], [5.98276, 51.97952]], [[5.98276, 51.97952], [5.98553, 51.97769], [5.98974, 51.9743]], [[5.98077, 51.98145], [5.98048, 51.98113]], [[5.98048, 51.98113], [5.98289, 51.97985], [5.98509, 51.97841]], [[5.98509, 51.97841], [5.99016, 51.97437]], [[5.98201, 51.98075], [5.98509, 51.97841]], [[5.97842, 51.98063], [5.9767, 51.98035]], [[5.9767, 51.98035], [5.97981, 51.98046], [5.98109, 51.9802], [5.98276, 51.97952]], [[5.97678, 51.98313], [5.96979, 51.98471]], [[5.96979, 51.98471], [5.97675, 51.98263]], [[5.97675, 51.98263], [5.97668, 51.98253]], [[5.97668, 51.98253], [5.98036, 51.98104]], [[5.98036, 51.98104], [5.97904, 51.98062]], [[5.90455, 52.01868], [5.91637, 52.01693]], [[5.91637, 52.01693], [5.91913, 52.01628]], [[5.91913, 52.01628], [5.91978, 52.01641]], [[5.91978, 52.01641], [5.91637, 52.01693]], [[5.91825, 52.01675], [5.93018, 52.01491], [5.93301, 52.01427], [5.93609, 52.01337]], [[5.93609, 52.01337], [5.93938, 52.01198], [5.94245, 52.01033], [5.94487, 52.00861], [5.94703, 52.0066], [5.94931, 52.00346], [5.95348, 51.99491], [5.95508, 51.99278], [5.95704, 51.99088], [5.95967, 51.98895], [5.9627, 51.98727], [5.96604, 51.98588], [5.96979, 51.98471]], [[5.96837, 51.98496], [5.97561, 51.98257], [5.97611, 51.98228], [5.97645, 51.98179]], [[5.97645, 51.98179], [5.97668, 51.98253]], [[5.97668, 51.98253], [5.96837, 51.98496]], [[5.96837, 51.98496], [5.96467, 51.98624], [5.96181, 51.98753], [5.95923, 51.98903], [5.95683, 51.99083], [5.9549, 51.99271], [5.95341, 51.99464], [5.94897, 52.00364], [5.94779, 52.00541], [5.94639, 52.00699], [5.94399, 52.00908], [5.94116, 52.01091], [5.93784, 52.01252], [5.93433, 52.01377]], [[5.93433, 52.01377], [5.92963, 52.01488], [5.91978, 52.01641]], [[5.91978, 52.01641], [5.91988, 52.01644]], [[5.97433, 51.97978], [5.9767, 51.98035]], [[5.92396, 52.02223], [5.92376, 52.0196], [5.92437, 52.01738]], [[5.92437, 52.01738], [5.92505, 52.01641], [5.92611, 52.01579], [5.93142, 52.01479]], [[5.93142, 52.01479], [5.93369, 52.01423], [5.93609, 52.01337]], [[5.92555, 52.01744], [5.92668, 52.0173], [5.92761, 52.01619], [5.9285, 52.01558], [5.93142, 52.01479]], [[5.92571, 52.01505], [5.93004, 52.01465], [5.93433, 52.01377]], [[5.92515, 52.01498], [5.92551, 52.01491]], [[5.81343, 52.02408], [5.81561, 52.02377], [5.81731, 52.02286], [5.81811, 52.02155], [5.81791, 52.01992]], [[5.81381, 52.02447], [5.8187, 52.02518]], [[5.8187, 52.02518], [5.82783, 52.02653]], [[5.87838, 52.0249], [5.87911, 52.02472], [5.87931, 52.02441]], [[5.87931, 52.02441], [5.88066, 52.02414], [5.88138, 52.02384]], [[5.878, 52.02492], [5.87835, 52.02513], [5.87892, 52.02519], [5.88028, 52.02474]], [[5.87771, 52.0248], [5.87931, 52.02441]], [[5.87549, 52.02528], [5.88331, 52.02309]]]
9779
+ },
9780
+ properties: {}
9781
+ }
9782
+ }, {
9783
+ id: '658225',
9784
+ name: 'Helsinki, Uusimaa, Finland',
9785
+ source: 'G',
9786
+ lat: 60.16952,
9787
+ lon: 24.93545,
9788
+ bbox: [24.782805558281286, 59.92249323820872, 25.254496669447338, 60.29783941145479]
9789
+ }];
9790
+ var locationApiEndpoints = [http.get(/^.*locations(.*)$/, function (_ref) {
9791
+ var request = _ref.request;
9792
+ var url = new URL(request.url);
9793
+ var search = url.searchParams.get('search');
9794
+ return HttpResponse.json(search ? fakeLocationList : []);
9795
+ }), http.get(/^.*locationdetail(.*)$/, function (_ref2) {
9796
+ var request = _ref2.request;
9797
+ var url = new URL(request.url);
9798
+ var id = url.searchParams.get('id');
9799
+ var result = fakeLocationDetailList.find(function (item) {
9800
+ return item.id === id;
9801
+ });
9802
+ return HttpResponse.json(result);
9803
+ }), http.get(/^(?!.*(location)).*$/, function () {
9804
+ return passthrough();
9805
+ })];
9806
+
9427
9807
  var initialBbox = {
9428
9808
  srs: 'EPSG:3857',
9429
9809
  bbox: {
@@ -9549,4 +9929,4 @@ var storyUtils = /*#__PURE__*/Object.freeze({
9549
9929
  useDefaultMapSettings: useDefaultMapSettings
9550
9930
  });
9551
9931
 
9552
- export { CORE_NAMESPACE, ConfigurableMapConnect, CoreI18nProvider, CoreStoreProvider, CoreThemeProvider, CoreThemeStoreProvider, DemoWrapper, DemoWrapperConnect, HarmonieTempAndPrecipPreset, LanguageSelect, LayerInfoButtonConnect, LayerInfoDialogConnect, LayerManager, BaseLayerRow as LayerManagerBaseLayerRow, LayerManagerConnect, DescriptionRow as LayerManagerDescriptionRow, HeaderOptions as LayerManagerHeaderOptions, LayerContainerRow as LayerManagerLayerContainerRow, LayerManagerMapButtonConnect, LegendConnect, LegendMapButtonConnect, LocationSearch, LocationSearchConnect, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, MyMapLocation, OlMapViewConnect, RouterWrapperConnect, SearchControlButtonConnect, SentryRecordButton, SyncGroupViewerConnect, TimeSliderConnect, componentsLookUp, coreTranslations, defaultBbox, defaultConfigurations, filterMapPresets, filterServices, filterTimeSeriesServices, getCenterOfLinkedFeature, getLanguageFromLocalStorage, languageLocalStorageKey, makeLayerInfoPayload, makePrefetchTimeSpan, saveLanguageToLocalStorage, storyUtils, testLayers, useFetchServices, useFitAndHighlightWarningFeature, useGetOpenLayersView, useUpdateTimeSpan, useUpdateTimestep };
9932
+ export { CORE_NAMESPACE, ConfigurableMapConnect, CoreI18nProvider, CoreStoreProvider, CoreThemeProvider, CoreThemeStoreProvider, DemoWrapper, DemoWrapperConnect, HarmonieTempAndPrecipPreset, LanguageSelect, LayerInfoButtonConnect, LayerInfoDialogConnect, LayerManager, BaseLayerRow as LayerManagerBaseLayerRow, LayerManagerConnect, DescriptionRow as LayerManagerDescriptionRow, HeaderOptions as LayerManagerHeaderOptions, LayerContainerRow as LayerManagerLayerContainerRow, LayerManagerMapButtonConnect, LegendConnect, LegendMapButtonConnect, LocationSearch, LocationSearchConnect, types as LocationSearchTypes, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, MyMapLocation, OlMapViewConnect, RouterWrapperConnect, SearchControlButtonConnect, SentryRecordButton, SyncGroupViewerConnect, TimeSliderConnect, componentsLookUp, coreTranslations, defaultBbox, defaultConfigurations, fakeLocationDetailList, fakeLocationList, filterMapPresets, filterServices, filterTimeSeriesServices, getCenterOfLinkedFeature, getLanguageFromLocalStorage, languageLocalStorageKey, locationApiEndpoints, makeLayerInfoPayload, makePrefetchTimeSpan, saveLanguageToLocalStorage, storyUtils, testLayers, useFetchServices, useFitAndHighlightWarningFeature, useGetOpenLayersView, useLocationDetail, useLocationList, useUpdateTimeSpan, useUpdateTimestep };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/core",
3
- "version": "12.11.0",
3
+ "version": "12.13.0",
4
4
  "description": "GeoWeb Core library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -8,22 +8,22 @@
8
8
  "url": "git@gitlab.com:opengeoweb/opengeoweb.git"
9
9
  },
10
10
  "dependencies": {
11
- "@opengeoweb/shared": "12.11.0",
11
+ "@opengeoweb/shared": "12.13.0",
12
12
  "react-redux": "^9.2.0",
13
- "@opengeoweb/store": "12.11.0",
14
- "@opengeoweb/timeslider": "12.11.0",
13
+ "@opengeoweb/store": "12.13.0",
14
+ "@opengeoweb/timeslider": "12.13.0",
15
15
  "@reduxjs/toolkit": "^2.6.1",
16
- "@opengeoweb/webmap-react": "12.11.0",
17
- "@opengeoweb/webmap": "12.11.0",
18
- "@opengeoweb/theme": "12.11.0",
16
+ "@opengeoweb/webmap-react": "12.13.0",
17
+ "@opengeoweb/webmap": "12.13.0",
18
+ "@opengeoweb/theme": "12.13.0",
19
19
  "axios": "^1.7.7",
20
- "@opengeoweb/layer-select": "12.11.0",
20
+ "@opengeoweb/layer-select": "12.13.0",
21
21
  "lodash": "^4.17.21",
22
22
  "ol": "^10.4.0",
23
23
  "react-sortablejs": "^6.1.4",
24
24
  "sortablejs": "^1.15.1",
25
- "@mui/system": "^7.0.1",
26
- "@opengeoweb/snackbar": "12.11.0",
25
+ "@mui/system": "^7.3.1",
26
+ "@opengeoweb/snackbar": "12.13.0",
27
27
  "react-router-dom": "^6.21.0",
28
28
  "react-draggable": "^4.4.6",
29
29
  "i18next": "^25.0.1",
@@ -32,7 +32,7 @@
32
32
  "@mui/material": "^7.0.1",
33
33
  "@sentry/react": "^8.34.0",
34
34
  "@tanstack/react-query": "^5.69.2",
35
- "@opengeoweb/api": "12.11.0",
35
+ "@opengeoweb/api": "12.13.0",
36
36
  "@types/geojson": "^7946.0.14"
37
37
  },
38
38
  "peerDependencies": {
@@ -20,6 +20,7 @@ export interface InitialMapProps {
20
20
  mapControls?: React.ReactNode;
21
21
  shouldDisplayDrawControls?: boolean;
22
22
  displaySearchButtonInMap?: boolean;
23
+ displayDataExplorerButtonOnMap?: boolean;
23
24
  }
24
25
  export interface InitialTimeSeriesProps {
25
26
  plotPreset: PlotPreset;
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { mapTypes, layerTypes } from '@opengeoweb/store';
3
3
  import { TileServerSettings } from '@opengeoweb/webmap';
4
+ import { StyleLike } from 'ol/style/Style';
4
5
  export declare const defaultBbox: {
5
6
  srs: "EPSG:3857";
6
7
  bbox: {
@@ -40,8 +41,10 @@ export interface ConfigurableMapConnectProps {
40
41
  displayGetFeatureInfoButtonInMap?: boolean;
41
42
  shouldDisplayDrawControls?: boolean;
42
43
  displaySearchButtonInMap?: boolean;
44
+ displayDataExplorerButtonOnMap?: boolean;
43
45
  children?: React.ReactNode;
44
46
  mapControls?: React.ReactNode;
45
47
  shouldDisablePrefetching?: boolean;
48
+ featureStyle?: StyleLike;
46
49
  }
47
50
  export declare const ConfigurableMapConnect: React.FC<ConfigurableMapConnectProps>;
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { TimeAwareEDRLocationLayer } from '@opengeoweb/webmap-react';
3
+ import type { Meta } from '@storybook/react-webpack5';
4
+ declare const meta: Meta<typeof TimeAwareEDRLocationLayer>;
5
+ export default meta;
6
+ export declare const EDRLayerMultiParam: {
7
+ (): React.ReactElement;
8
+ parameters: {
9
+ msw: {
10
+ handlers: {
11
+ locations: import("msw").HttpHandler[];
12
+ };
13
+ };
14
+ };
15
+ };
@@ -6,6 +6,7 @@ interface LayerRowUnstyledProps {
6
6
  layer?: layerTypes.Layer;
7
7
  layerName?: string;
8
8
  mapId: string;
9
+ isEDRLayer?: boolean;
9
10
  onLayerRowClick?: (layerId?: string) => void;
10
11
  onLayerEnable?: (payload: {
11
12
  layerId: string;
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ import { LayerProps } from '@opengeoweb/webmap';
3
+ export interface RenderEDRLayersProps {
4
+ onChangeLayerName: (name: string) => void;
5
+ selectedParams: string[];
6
+ layers: LayerProps[];
7
+ isEnabled?: boolean;
8
+ tooltipPrefix?: string;
9
+ skipLocalStyling?: boolean;
10
+ }
11
+ export declare const getRenderEDRLayersValues: (selectedParams: string[], layers: LayerProps[]) => {
12
+ currentValues: string[];
13
+ extendedLayers: LayerProps[];
14
+ };
15
+ declare const RenderEDRLayers: React.FC<RenderEDRLayersProps>;
16
+ export default RenderEDRLayers;
@@ -1,5 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { LayerProps } from '@opengeoweb/webmap';
3
+ import { i18n, TFunction } from 'i18next';
4
+ export declare const showNoLayers: (t: TFunction<"core", i18n>) => React.ReactElement;
3
5
  export interface RenderLayersProps {
4
6
  onChangeLayerName: (name: string) => void;
5
7
  layerName: string;
@@ -1,6 +1,15 @@
1
+ export interface OverLayer {
2
+ id: string;
3
+ name: string;
4
+ }
1
5
  interface OverlayersSelectProps {
2
- selectedOverlayer: string;
3
- onChangeOverlayer: (overlayer: string) => void;
6
+ mapId: string;
7
+ selectedOverlayer: OverLayer;
8
+ onChangeOverlayer: (mapId: string, selectedOverlayer: OverLayer) => void;
9
+ availableOverlayers?: {
10
+ id: string;
11
+ name: string;
12
+ }[];
4
13
  }
5
14
  declare const OverlayersSelect: React.FC<OverlayersSelectProps>;
6
15
  export default OverlayersSelect;
@@ -1,3 +1,6 @@
1
1
  import React from 'react';
2
- declare const OverlayersSelectConnect: React.FC;
2
+ interface OverlayersSelectConnectProps {
3
+ mapId?: string;
4
+ }
5
+ declare const OverlayersSelectConnect: React.FC<OverlayersSelectConnectProps>;
3
6
  export default OverlayersSelectConnect;
@@ -2,3 +2,4 @@ export { SearchControlButtonConnect } from './SearchControlButtonConnect';
2
2
  export { LocationSearchConnect } from './LocationSearchConnect';
3
3
  export { LocationSearch } from './LocationSearch';
4
4
  export { MyMapLocation } from './MyMapLocation';
5
+ export * as LocationSearchTypes from './types';
@@ -5,6 +5,7 @@ export interface LocationDetail {
5
5
  lat: number;
6
6
  lon: number;
7
7
  geometry?: GeoJSON.Feature;
8
+ bbox?: GeoJSON.BBox;
8
9
  }
9
10
  export interface LocationListResult {
10
11
  id: string;
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ declare const _default: {
3
+ title: string;
4
+ component: React.FC<import("./OlMapViewConnect").OlMapViewConnectProps>;
5
+ tags: string[];
6
+ };
7
+ export default _default;
8
+ export declare const ToggleStyleAction: () => React.ReactElement;
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { Bbox, TileServerSettings } from '@opengeoweb/webmap';
3
3
  import { Source } from '@opengeoweb/shared';
4
+ import { StyleLike } from 'ol/style/Style';
4
5
  export interface MapControlsProps {
5
6
  mapControlsPositionTop?: number;
6
7
  search?: boolean;
@@ -9,6 +10,7 @@ export interface MapControlsProps {
9
10
  multiLegend?: boolean;
10
11
  dimensionSelect?: boolean;
11
12
  getFeatureInfo?: boolean;
13
+ dataExplorerButton?: boolean;
12
14
  additionalMapControls?: React.ReactNode;
13
15
  }
14
16
  export interface OlMapViewConnectProps {
@@ -23,6 +25,7 @@ export interface OlMapViewConnectProps {
23
25
  shouldDisablePrefetching?: boolean;
24
26
  tileServerSettings?: TileServerSettings;
25
27
  source?: Source;
28
+ featureStyle?: StyleLike;
26
29
  }
27
30
  /**
28
31
  * Connected component used to display the map and selected layers.
@@ -19,4 +19,6 @@ export * from './components/TimeSliderConnect';
19
19
  export * from './components/LayerInfoConnect';
20
20
  export * from './components/SentryRecordButton';
21
21
  export * from './components/LanguageSelect';
22
+ export { useLocationDetail, useLocationList } from './utils/location-api/hooks';
23
+ export { fakeLocationDetailList, fakeLocationList, locationApiEndpoints, } from './utils/location-api/fakeApi';
22
24
  export * as storyUtils from './utils/storyUtils';
@@ -10,6 +10,7 @@ export declare const fakeLocationDetailList: ({
10
10
  lon: number;
11
11
  lat: number;
12
12
  geometry?: undefined;
13
+ bbox?: undefined;
13
14
  } | {
14
15
  lat: number;
15
16
  lon: number;
@@ -24,6 +25,7 @@ export declare const fakeLocationDetailList: ({
24
25
  };
25
26
  properties?: undefined;
26
27
  };
28
+ bbox?: undefined;
27
29
  } | {
28
30
  id: string;
29
31
  name: string;
@@ -38,6 +40,7 @@ export declare const fakeLocationDetailList: ({
38
40
  coordinates: number[][];
39
41
  };
40
42
  };
43
+ bbox?: undefined;
41
44
  } | {
42
45
  id: string;
43
46
  name: string;
@@ -52,6 +55,7 @@ export declare const fakeLocationDetailList: ({
52
55
  };
53
56
  properties: {};
54
57
  };
58
+ bbox?: undefined;
55
59
  } | {
56
60
  id: string;
57
61
  name: string;
@@ -66,5 +70,14 @@ export declare const fakeLocationDetailList: ({
66
70
  };
67
71
  properties: {};
68
72
  };
73
+ bbox?: undefined;
74
+ } | {
75
+ id: string;
76
+ name: string;
77
+ source: string;
78
+ lat: number;
79
+ lon: number;
80
+ bbox: number[];
81
+ geometry?: undefined;
69
82
  })[];
70
83
  export declare const locationApiEndpoints: import("msw").HttpHandler[];