qwc2 2025.7.23 → 2025.7.29

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.
Files changed (45) hide show
  1. package/actions/theme.js +1 -1
  2. package/components/ExportSelection.js +7 -0
  3. package/components/map3d/Map3D.js +7 -6
  4. package/components/map3d/MapExport3D.js +4 -5
  5. package/components/map3d/Settings3D.js +7 -0
  6. package/components/map3d/TopBar3D.js +1 -1
  7. package/components/map3d/layers/GeoTIFFLayer3D.js +7 -0
  8. package/components/map3d/layers/index.js +1 -1
  9. package/components/map3d/style/Map3D.css +1 -0
  10. package/components/map3d/style/Settings3D.css +11 -0
  11. package/components/style/ExportSelection.css +103 -0
  12. package/components/widgets/Input.js +1 -1
  13. package/package.json +1 -1
  14. package/plugins/MapInfoTooltip.js +1 -1
  15. package/plugins/View3D.js +1 -1
  16. package/reducers/layers.js +1 -2
  17. package/static/translations/bg-BG.json +4 -0
  18. package/static/translations/ca-ES.json +4 -0
  19. package/static/translations/cs-CZ.json +4 -0
  20. package/static/translations/de-CH.json +4 -0
  21. package/static/translations/de-DE.json +4 -0
  22. package/static/translations/en-US.json +4 -0
  23. package/static/translations/es-ES.json +4 -0
  24. package/static/translations/fi-FI.json +4 -0
  25. package/static/translations/fr-FR.json +4 -0
  26. package/static/translations/hu-HU.json +4 -0
  27. package/static/translations/it-IT.json +4 -0
  28. package/static/translations/ja-JP.json +4 -0
  29. package/static/translations/nl-NL.json +4 -0
  30. package/static/translations/no-NO.json +4 -0
  31. package/static/translations/pl-PL.json +4 -0
  32. package/static/translations/pt-BR.json +4 -0
  33. package/static/translations/pt-PT.json +4 -0
  34. package/static/translations/ro-RO.json +4 -0
  35. package/static/translations/ru-RU.json +4 -0
  36. package/static/translations/sv-SE.json +4 -0
  37. package/static/translations/tr-TR.json +4 -0
  38. package/static/translations/tsconfig.json +2 -0
  39. package/utils/ElevationInterface.js +1 -1
  40. package/utils/LayerUtils.js +5 -4
  41. package/utils/ServiceLayerUtils.js +1 -1
  42. package/utils/ThemeUtils.js +2 -2
  43. package/utils/expr_grammar/grammar.js +1 -1
  44. package/utils/expr_grammar/grammar.ne +34 -8
  45. package/components/map3d/style/MapExport3D.css +0 -25
@@ -12,5 +12,4 @@ LayerUtils.propagateLayerProperty(newsublayer,action.property,action.newvalue)}i
12
12
  LayerUtils.propagateLayerProperty(newlayer,action.property,action.newvalue,action.sublayerpath)}if(newlayer.type==="wms"){Object.assign(newlayer,LayerUtils.buildWMSLayerParams(newlayer,state.filter))}if(newlayer.role===LayerRole.BACKGROUND){UrlParams.updateParams({bl:newlayer.visibility?newlayer.name:""})}return newlayer}else if(layer.role===LayerRole.BACKGROUND&&backgroundVisibilityChanged){return _objectSpread(_objectSpread({},layer),{},{visibility:false})}return layer});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(newLayers)});return _objectSpread(_objectSpread({},state),{},{flat:newLayers})}case SET_LAYER_DIMENSIONS:{var _state$flat$find;// Set dimensions for all layers with the same URL (i.e. if a WMS is split)
13
13
  var layerUrl=(_state$flat$find=state.flat.find(function(layer){return layer.id===action.layerId}))===null||_state$flat$find===void 0?void 0:_state$flat$find.url;if(!layerUrl){return""}var _newLayers=(state.flat||[]).map(function(layer){if(layer.url===layerUrl){var newLayer=_objectSpread(_objectSpread({},layer),{},{dimensionValues:action.dimensions});Object.assign(newLayer,LayerUtils.buildWMSLayerParams(newLayer,state.filter));return newLayer}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers})}case ADD_LAYER:{var _action$layer$visibil,_action$layer$opacity,_action$options,_action$options2;var _newLayers2=(state.flat||[]).concat();var layerId=action.layer.id||uuidv4();var newLayer=_objectSpread(_objectSpread({},action.layer),{},{id:layerId,name:action.layer.name||layerId,role:action.layer.role||LayerRole.USERLAYER,queryable:action.layer.queryable||false,visibility:(_action$layer$visibil=action.layer.visibility)!==null&&_action$layer$visibil!==void 0?_action$layer$visibil:true,opacity:(_action$layer$opacity=action.layer.opacity)!==null&&_action$layer$opacity!==void 0?_action$layer$opacity:255,layertreehidden:action.layer.layertreehidden||action.layer.role>LayerRole.USERLAYER});if((_action$options=action.options)!==null&&_action$options!==void 0&&_action$options.beforeLayerName||(_action$options2=action.options)!==null&&_action$options2!==void 0&&_action$options2.afterLayerName){_newLayers2=LayerUtils.insertLayer(_newLayers2,newLayer,"name",action.options.beforeLayerName||action.options.afterLayerName,action.options.afterLayerName?true:false)}else{var inspos=0;if(action.pos===null){for(;inspos<_newLayers2.length&&newLayer.role<_newLayers2[inspos].role;++inspos);}else{inspos=action.pos}_newLayers2.splice(inspos,0,newLayer);// Compress layers if possible
14
14
  _newLayers2=LayerUtils.implodeLayers(LayerUtils.explodeLayers(_newLayers2))}var _iterator=_createForOfIteratorHelper(_newLayers2),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var lyr=_step.value;if(lyr.type==="wms"){Object.assign(lyr,LayerUtils.buildWMSLayerParams(lyr,state.filter))}}}catch(err){_iterator.e(err)}finally{_iterator.f()}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers2)});if(newLayer.role===LayerRole.BACKGROUND&&newLayer.visibility){UrlParams.updateParams({bl:newLayer.name})}return _objectSpread(_objectSpread({},state),{},{flat:_newLayers2})}case ADD_LAYER_SEPARATOR:{var _newLayers3=LayerUtils.insertSeparator(state.flat,action.title,action.afterLayerId,action.afterSublayerPath);var _iterator2=_createForOfIteratorHelper(_newLayers3),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var layer=_step2.value;if(layer.type==="wms"){Object.assign(layer,LayerUtils.buildWMSLayerParams(layer,state.filter))}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers3)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers3})}case REMOVE_LAYER:{var _layer=state.flat.find(function(l){return l.id===action.layerId});if(!_layer){return state}var _newLayers4=state.flat;if(_layer.role===LayerRole.BACKGROUND||isEmpty(action.sublayerpath)){var position=state.flat.findIndex(function(l){return l.id===action.layerId});_newLayers4=_toConsumableArray(_newLayers4);_newLayers4.splice(position,1);if(position>0&&position<_newLayers4.length&&_newLayers4[position-1].id===_newLayers4[position].id){// Compress layers
15
- _newLayers4=LayerUtils.implodeLayers(LayerUtils.explodeLayers(_newLayers4))}}else{_newLayers4=LayerUtils.removeLayer(state.flat,_layer,action.sublayerpath).map(function(l){if(l.type==="wms"){return _objectSpread(_objectSpread({},l),LayerUtils.buildWMSLayerParams(l,state.filter))}else{return l}})}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers4)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers4})}case ADD_LAYER_FEATURES:{var _layerId=action.layer.id||uuidv4();var _newLayers5=(state.flat||[]).concat();var idx=_newLayers5.findIndex(function(layer){return layer.id===_layerId});if(idx===-1){var newFeatures=action.features.map(function(f){return _objectSpread(_objectSpread({},f),{},{id:f.id||(f.properties||{}).id||uuidv4()})});var _newLayer=_objectSpread(_objectSpread({},action.layer),{},{id:_layerId,type:"vector",name:action.layer.name||_layerId,features:newFeatures,role:action.layer.role||LayerRole.USERLAYER,queryable:action.layer.queryable||false,visibility:action.layer.visibility||true,opacity:action.layer.opacity||255,layertreehidden:action.layer.layertreehidden||action.layer.role>LayerRole.USERLAYER,bbox:VectorLayerUtils.computeFeaturesBBox(action.features)});var _inspos=0;for(;_inspos<_newLayers5.length&&_newLayer.role<_newLayers5[_inspos].role;++_inspos);_newLayers5.splice(_inspos,0,_newLayer)}else{var addFeatures=action.features.map(function(f){return _objectSpread(_objectSpread({},f),{},{id:f.id||(f.properties||{}).id||uuidv4()})});var _newFeatures=action.clear?addFeatures:[].concat(_toConsumableArray((_newLayers5[idx].features||[]).filter(function(f){return!addFeatures.find(function(g){return g.id===f.id})})),_toConsumableArray(addFeatures));_newLayers5[idx]=_objectSpread(_objectSpread({},_newLayers5[idx]),{},{features:_newFeatures,bbox:VectorLayerUtils.computeFeaturesBBox(_newFeatures),rev:action.layer.rev})}return _objectSpread(_objectSpread({},state),{},{flat:_newLayers5})}case REMOVE_LAYER_FEATURES:{var changed=false;var _newLayers6=(state.flat||[]).reduce(function(result,layer){if(layer.id===action.layerId){var _newFeatures2=(layer.features||[]).filter(function(f){return action.featureIds.includes(f.id)===false});if(!isEmpty(_newFeatures2)||action.keepEmptyLayer){result.push(_objectSpread(_objectSpread({},layer),{},{features:_newFeatures2,bbox:VectorLayerUtils.computeFeaturesBBox(_newFeatures2)}))}changed=true}else{result.push(layer)}return result},[]);if(changed){return _objectSpread(_objectSpread({},state),{},{flat:_newLayers6})}else{return state}}case CLEAR_LAYER:{var _newLayers7=(state.flat||[]).map(function(layer){if(layer.id===action.layerId){return _objectSpread(_objectSpread({},layer),{},{features:[],bbox:null})}else{return layer}});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers7})}case ADD_THEME_SUBLAYER:{var themeLayerIdx=state.flat.findIndex(function(layer){return layer.role===LayerRole.THEME});if(themeLayerIdx>=0){var _newLayers8=state.flat.slice(0);_newLayers8[themeLayerIdx]=LayerUtils.mergeSubLayers(state.flat[themeLayerIdx],action.layer);_newLayers8[themeLayerIdx].visibility=true;Object.assign(_newLayers8[themeLayerIdx],LayerUtils.buildWMSLayerParams(_newLayers8[themeLayerIdx],state.filter));UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers8)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers8})}return state}case REFRESH_LAYER:{var _newLayers9=(state.flat||[]).map(function(layer){if(action.filter(layer)){return _objectSpread(_objectSpread({},layer),{},{rev:+new Date})}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers9})}case REMOVE_ALL_LAYERS:{return defaultState}case REORDER_LAYER:{var _newLayers10=LayerUtils.reorderLayer(state.flat,action.layer,action.sublayerpath,action.direction,action.preventSplittingGroups).map(function(layer){if(layer.type==="wms"){return _objectSpread(_objectSpread({},layer),LayerUtils.buildWMSLayerParams(layer,state.filter))}else{return layer}});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers10)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers10})}case REPLACE_PLACEHOLDER_LAYER:{var _newLayers11=state.flat||[];if(action.layer){_newLayers11=_newLayers11.map(function(layer){if(layer.type==="placeholder"&&layer.id===action.id){var _newLayer2=_objectSpread(_objectSpread(_objectSpread({},layer),action.layer),{},{role:layer.role,id:layer.id});// For background layers, preserve any custom name/title/attribution/opacity
16
- if(layer.role===LayerRole.BACKGROUND){_newLayer2.name=layer.name||action.layer.name;_newLayer2.title=layer.title||action.layer.title;_newLayer2.attribution=layer.attribution||action.layer.attribution;_newLayer2.opacity=layer.opacity||action.layer.opacity}delete _newLayer2.loading;if(_newLayer2.type==="wms"){Object.assign(_newLayer2,LayerUtils.buildWMSLayerParams(_newLayer2,state.filter))}return _newLayer2}else{return layer}})}else{_newLayers11=_newLayers11.filter(function(layer){return!(layer.type==="placeholder"&&layer.id===action.id)})}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers11)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers11})}case SET_SWIPE:{return _objectSpread(_objectSpread({},state),{},{swipe:action.swipe})}case SET_FILTER:{var filter={filterParams:action.filter,filterGeom:action.filterGeom,timeRange:action.timeRange};var _newLayers12=state.flat.map(function(layer){if(layer.type==="wms"){return _objectSpread(_objectSpread({},layer),LayerUtils.buildWMSLayerParams(layer,filter))}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers12,filter:filter})}case SET_THEME_LAYERS_VISIBILITY_PRESET:{var _newLayers13=state.flat.map(function(layer){if(layer.role===LayerRole.THEME){var _newLayer3=LayerUtils.applyVisibilityPreset(layer,action.preset);return _objectSpread(_objectSpread({},_newLayer3),LayerUtils.buildWMSLayerParams(_newLayer3,state.filter))}else{return layer}});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers13)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers13})}default:return state}}
15
+ _newLayers4=LayerUtils.implodeLayers(LayerUtils.explodeLayers(_newLayers4))}}else{_newLayers4=LayerUtils.removeLayer(state.flat,_layer,action.sublayerpath).map(function(l){if(l.type==="wms"){return _objectSpread(_objectSpread({},l),LayerUtils.buildWMSLayerParams(l,state.filter))}else{return l}})}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers4)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers4})}case ADD_LAYER_FEATURES:{var _layerId=action.layer.id||uuidv4();var _newLayers5=(state.flat||[]).concat();var idx=_newLayers5.findIndex(function(layer){return layer.id===_layerId});if(idx===-1){var newFeatures=action.features.map(function(f){return _objectSpread(_objectSpread({},f),{},{id:f.id||(f.properties||{}).id||uuidv4()})});var _newLayer=_objectSpread(_objectSpread({},action.layer),{},{id:_layerId,type:"vector",name:action.layer.name||_layerId,features:newFeatures,role:action.layer.role||LayerRole.USERLAYER,queryable:action.layer.queryable||false,visibility:action.layer.visibility||true,opacity:action.layer.opacity||255,layertreehidden:action.layer.layertreehidden||action.layer.role>LayerRole.USERLAYER,bbox:VectorLayerUtils.computeFeaturesBBox(action.features)});var _inspos=0;for(;_inspos<_newLayers5.length&&_newLayer.role<_newLayers5[_inspos].role;++_inspos);_newLayers5.splice(_inspos,0,_newLayer)}else{var addFeatures=action.features.map(function(f){return _objectSpread(_objectSpread({},f),{},{id:f.id||(f.properties||{}).id||uuidv4()})});var _newFeatures=action.clear?addFeatures:[].concat(_toConsumableArray((_newLayers5[idx].features||[]).filter(function(f){return!addFeatures.find(function(g){return g.id===f.id})})),_toConsumableArray(addFeatures));_newLayers5[idx]=_objectSpread(_objectSpread({},_newLayers5[idx]),{},{features:_newFeatures,bbox:VectorLayerUtils.computeFeaturesBBox(_newFeatures),rev:action.layer.rev})}return _objectSpread(_objectSpread({},state),{},{flat:_newLayers5})}case REMOVE_LAYER_FEATURES:{var changed=false;var _newLayers6=(state.flat||[]).reduce(function(result,layer){if(layer.id===action.layerId){var _newFeatures2=(layer.features||[]).filter(function(f){return action.featureIds.includes(f.id)===false});if(!isEmpty(_newFeatures2)||action.keepEmptyLayer){result.push(_objectSpread(_objectSpread({},layer),{},{features:_newFeatures2,bbox:VectorLayerUtils.computeFeaturesBBox(_newFeatures2)}))}changed=true}else{result.push(layer)}return result},[]);if(changed){return _objectSpread(_objectSpread({},state),{},{flat:_newLayers6})}else{return state}}case CLEAR_LAYER:{var _newLayers7=(state.flat||[]).map(function(layer){if(layer.id===action.layerId){return _objectSpread(_objectSpread({},layer),{},{features:[],bbox:null})}else{return layer}});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers7})}case ADD_THEME_SUBLAYER:{var themeLayerIdx=state.flat.findIndex(function(layer){return layer.role===LayerRole.THEME});if(themeLayerIdx>=0){var _newLayers8=state.flat.slice(0);_newLayers8[themeLayerIdx]=LayerUtils.mergeSubLayers(state.flat[themeLayerIdx],action.layer);_newLayers8[themeLayerIdx].visibility=true;Object.assign(_newLayers8[themeLayerIdx],LayerUtils.buildWMSLayerParams(_newLayers8[themeLayerIdx],state.filter));UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers8)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers8})}return state}case REFRESH_LAYER:{var _newLayers9=(state.flat||[]).map(function(layer){if(action.filter(layer)){return _objectSpread(_objectSpread({},layer),{},{rev:+new Date})}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers9})}case REMOVE_ALL_LAYERS:{return defaultState}case REORDER_LAYER:{var _newLayers10=LayerUtils.reorderLayer(state.flat,action.layer,action.sublayerpath,action.direction,action.preventSplittingGroups).map(function(layer){if(layer.type==="wms"){return _objectSpread(_objectSpread({},layer),LayerUtils.buildWMSLayerParams(layer,state.filter))}else{return layer}});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers10)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers10})}case REPLACE_PLACEHOLDER_LAYER:{var _newLayers11=LayerUtils.replacePlaceholderLayer(state.flat,action.id,action.layer,state.filter);UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers11)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers11})}case SET_SWIPE:{return _objectSpread(_objectSpread({},state),{},{swipe:action.swipe})}case SET_FILTER:{var filter={filterParams:action.filter,filterGeom:action.filterGeom,timeRange:action.timeRange};var _newLayers12=state.flat.map(function(layer){if(layer.type==="wms"){return _objectSpread(_objectSpread({},layer),LayerUtils.buildWMSLayerParams(layer,filter))}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers12,filter:filter})}case SET_THEME_LAYERS_VISIBILITY_PRESET:{var _newLayers13=state.flat.map(function(layer){if(layer.role===LayerRole.THEME){var _newLayer2=LayerUtils.applyVisibilityPreset(layer,action.preset);return _objectSpread(_objectSpread({},_newLayer2),LayerUtils.buildWMSLayerParams(_newLayer2,state.filter))}else{return layer}});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers13)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers13})}default:return state}}
@@ -26,6 +26,7 @@
26
26
  "Print": "Отпечатване",
27
27
  "Reports": "Доклади",
28
28
  "Settings": "Настройки",
29
+ "Settings3D": "",
29
30
  "Share": "Споделяне на връзка",
30
31
  "ThemeSwitcher": "Тема",
31
32
  "AttributeTable": "Таблица на атрибутите",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Език на системата",
595
596
  "themes": "Теми"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR код",
599
603
  "directLinkTitle": "Чрез директна връзка",
@@ -26,6 +26,7 @@
26
26
  "Print": "Imprimir",
27
27
  "Reports": "Informes",
28
28
  "Settings": "Opcions",
29
+ "Settings3D": "",
29
30
  "Share": "Compartir link",
30
31
  "ThemeSwitcher": "Tema",
31
32
  "AttributeTable": "Taula d'atributs",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Idioma del sistema",
595
596
  "themes": "Temes"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "Codi QR",
599
603
  "directLinkTitle": "Via link",
@@ -26,6 +26,7 @@
26
26
  "Print": "Tisk",
27
27
  "Reports": "",
28
28
  "Settings": "Nastavení",
29
+ "Settings3D": "",
29
30
  "Share": "Sdílet odkaz",
30
31
  "ThemeSwitcher": "Téma",
31
32
  "AttributeTable": "Atributy",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Systémový jazyk",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR kód",
599
603
  "directLinkTitle": "Přes přímý odkaz",
@@ -26,6 +26,7 @@
26
26
  "Print": "Drucken",
27
27
  "Reports": "Berichte",
28
28
  "Settings": "Einstellungen",
29
+ "Settings3D": "Einstellungen",
29
30
  "Share": "Teilen",
30
31
  "ThemeSwitcher": "Themen",
31
32
  "AttributeTable": "Attributtabelle",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Systemsprache",
595
596
  "themes": "Themen"
596
597
  },
598
+ "settings3d": {
599
+ "quality": "Qualität"
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR Code (Smartphone)",
599
603
  "directLinkTitle": "Über einen direkten Link",
@@ -26,6 +26,7 @@
26
26
  "Print": "Drucken",
27
27
  "Reports": "Berichte",
28
28
  "Settings": "Einstellungen",
29
+ "Settings3D": "Einstellungen",
29
30
  "Share": "Teilen",
30
31
  "ThemeSwitcher": "Themen",
31
32
  "AttributeTable": "Attributtabelle",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Systemsprache",
595
596
  "themes": "Themen"
596
597
  },
598
+ "settings3d": {
599
+ "quality": "Qualität"
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR Code (Smartphone)",
599
603
  "directLinkTitle": "Über einen direkten Link",
@@ -26,6 +26,7 @@
26
26
  "Print": "Print",
27
27
  "Reports": "Reports",
28
28
  "Settings": "Settings",
29
+ "Settings3D": "Settings",
29
30
  "Share": "Share Link",
30
31
  "ThemeSwitcher": "Theme",
31
32
  "AttributeTable": "Attribute Table",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "System language",
595
596
  "themes": "Themes"
596
597
  },
598
+ "settings3d": {
599
+ "quality": "Quality"
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR Code",
599
603
  "directLinkTitle": "Via a direct link",
@@ -26,6 +26,7 @@
26
26
  "Print": "Imprimir",
27
27
  "Reports": "Informes",
28
28
  "Settings": "Opciones",
29
+ "Settings3D": "",
29
30
  "Share": "Compartir enlace",
30
31
  "ThemeSwitcher": "Tema",
31
32
  "AttributeTable": "Tabla de Atributos",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Idioma del sistema",
595
596
  "themes": "Temas"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "Código QR",
599
603
  "directLinkTitle": "Vía un vínculo directo",
@@ -26,6 +26,7 @@
26
26
  "Print": "Tulosta",
27
27
  "Reports": "",
28
28
  "Settings": "",
29
+ "Settings3D": "",
29
30
  "Share": "Jaa linkki",
30
31
  "ThemeSwitcher": "Teema",
31
32
  "AttributeTable": "",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR-koodi",
599
603
  "directLinkTitle": "Suora linkillä",
@@ -26,6 +26,7 @@
26
26
  "Print": "Imprimer",
27
27
  "Reports": "Rapports",
28
28
  "Settings": "Paramètres",
29
+ "Settings3D": "Paramètres",
29
30
  "Share": "Partager",
30
31
  "ThemeSwitcher": "Thèmes",
31
32
  "AttributeTable": "Table d'attributs",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Langue du système",
595
596
  "themes": "Thèmes"
596
597
  },
598
+ "settings3d": {
599
+ "quality": "Qualité"
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR code",
599
603
  "directLinkTitle": "Via un lien direct",
@@ -26,6 +26,7 @@
26
26
  "Print": "Nyomtatás",
27
27
  "Reports": "",
28
28
  "Settings": "",
29
+ "Settings3D": "",
29
30
  "Share": "Megosztható link",
30
31
  "ThemeSwitcher": "Térkép",
31
32
  "AttributeTable": "",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR-kód",
599
603
  "directLinkTitle": "Közvetlen hivatkozással...",
@@ -26,6 +26,7 @@
26
26
  "Print": "Stampa",
27
27
  "Reports": "Rapporti",
28
28
  "Settings": "Impostazioni",
29
+ "Settings3D": "Impostazioni",
29
30
  "Share": "Condividi",
30
31
  "ThemeSwitcher": "Temi",
31
32
  "AttributeTable": "Tabella attributi",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Lingua del sistema",
595
596
  "themes": "Temi"
596
597
  },
598
+ "settings3d": {
599
+ "quality": "Qualità"
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "Codice QR",
599
603
  "directLinkTitle": "Collegamento diretto",
@@ -26,6 +26,7 @@
26
26
  "Print": "印刷",
27
27
  "Reports": "レポート",
28
28
  "Settings": "設定",
29
+ "Settings3D": "",
29
30
  "Share": "リンクを共有",
30
31
  "ThemeSwitcher": "テーマ",
31
32
  "AttributeTable": "属性テーブル",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "システム言語",
595
596
  "themes": "テーマ"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR コード",
599
603
  "directLinkTitle": "直接リンクで",
@@ -26,6 +26,7 @@
26
26
  "Print": "Print",
27
27
  "Reports": "",
28
28
  "Settings": "Instellingen",
29
+ "Settings3D": "",
29
30
  "Share": "Link delen",
30
31
  "ThemeSwitcher": "Kaartselectie",
31
32
  "AttributeTable": "Attributentabel",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Systeemtaal",
595
596
  "themes": "Kaarten"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR-code",
599
603
  "directLinkTitle": "Via een directe link",
@@ -26,6 +26,7 @@
26
26
  "Print": "Skriv ut",
27
27
  "Reports": "",
28
28
  "Settings": "",
29
+ "Settings3D": "",
29
30
  "Share": "Del lenke",
30
31
  "ThemeSwitcher": "Tema",
31
32
  "AttributeTable": "",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR kode",
599
603
  "directLinkTitle": "Direktelenke",
@@ -26,6 +26,7 @@
26
26
  "Print": "Drukuj",
27
27
  "Reports": "",
28
28
  "Settings": "",
29
+ "Settings3D": "",
29
30
  "Share": "Udostępnij Link",
30
31
  "ThemeSwitcher": "Motyw",
31
32
  "AttributeTable": "",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR code",
599
603
  "directLinkTitle": "Poprzez link bezpośredni",
@@ -26,6 +26,7 @@
26
26
  "Print": "Imprimir",
27
27
  "Reports": "",
28
28
  "Settings": "Configurações",
29
+ "Settings3D": "",
29
30
  "Share": "Compartilhar link",
30
31
  "ThemeSwitcher": "Tema",
31
32
  "AttributeTable": "Tabela de atributos",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Idioma do sistema",
595
596
  "themes": "Temas"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "Código QR",
599
603
  "directLinkTitle": "Link direto",
@@ -26,6 +26,7 @@
26
26
  "Print": "Imprimir",
27
27
  "Reports": "",
28
28
  "Settings": "Configurações",
29
+ "Settings3D": "",
29
30
  "Share": "Partilhar Link",
30
31
  "ThemeSwitcher": "Tema",
31
32
  "AttributeTable": "Tabela de Atributos",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Idioma do Sistema",
595
596
  "themes": "Temas"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "Código QR",
599
603
  "directLinkTitle": "Via ligação direta",
@@ -26,6 +26,7 @@
26
26
  "Print": "Tipărire",
27
27
  "Reports": "",
28
28
  "Settings": "Setări",
29
+ "Settings3D": "",
29
30
  "Share": "Trimite Link",
30
31
  "ThemeSwitcher": "Hărți tematice",
31
32
  "AttributeTable": "Tabela de atribute",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Liba sistemului",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "Cod QR",
599
603
  "directLinkTitle": "Via link direct",
@@ -26,6 +26,7 @@
26
26
  "Print": "Печать",
27
27
  "Reports": "",
28
28
  "Settings": "",
29
+ "Settings3D": "",
29
30
  "Share": "Поделиться ссылкой",
30
31
  "ThemeSwitcher": "Тема",
31
32
  "AttributeTable": "",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR-код",
599
603
  "directLinkTitle": "По прямой ссылке",
@@ -26,6 +26,7 @@
26
26
  "Print": "Skriv ut",
27
27
  "Reports": "",
28
28
  "Settings": "",
29
+ "Settings3D": "",
29
30
  "Share": "Dela länk",
30
31
  "ThemeSwitcher": "Tema",
31
32
  "AttributeTable": "",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR kod",
599
603
  "directLinkTitle": "Via en direktlänk",
@@ -26,6 +26,7 @@
26
26
  "Print": "Yazdır",
27
27
  "Reports": "Raporlar",
28
28
  "Settings": "Ayarlar",
29
+ "Settings3D": "",
29
30
  "Share": "Bağlantı Paylaş",
30
31
  "ThemeSwitcher": "Tema",
31
32
  "AttributeTable": "Öznitelik Tablosu",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Sistem dili",
595
596
  "themes": "Temalar"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "Karekod",
599
603
  "directLinkTitle": "Doğrudan bağlantı yolu ile",
@@ -80,6 +80,7 @@
80
80
  "appmenu.items.Print",
81
81
  "appmenu.items.Reports",
82
82
  "appmenu.items.Settings",
83
+ "appmenu.items.Settings3D",
83
84
  "appmenu.items.Share",
84
85
  "appmenu.items.ThemeSwitcher",
85
86
  "appmenu.menulabel",
@@ -514,6 +515,7 @@
514
515
  "settings.language",
515
516
  "settings.systemlang",
516
517
  "settings.themes",
518
+ "settings3d.quality",
517
519
  "share.QRCodeLinkTitle",
518
520
  "share.directLinkTitle",
519
521
  "share.expires",
@@ -15,7 +15,7 @@
15
15
  * Returns: a promise which resolves to an elevation value (in meteres)
16
16
  * or an object with a `list` property containing an array of objects with
17
17
  * `elevation` and `dataset` properties, if multiple datasets are available.
18
- */getElevation:function getElevation(pos,crs){return new Promise(function(resolve,reject){var serviceUrl=ConfigUtils.getConfigProp("elevationServiceUrl",null,"").replace(/\/$/,"");if(!serviceUrl){reject(null);return}axios.get(serviceUrl+"/getelevation",{params:{pos:pos.join(","),crs:crs}}).then(function(response){resolve(response.data.elevation||{list:response.data.elevation_list})})["catch"](function(e){reject(String(e))})})},/**
18
+ */getElevation:function getElevation(pos,crs){return new Promise(function(resolve,reject){var serviceUrl=ConfigUtils.getConfigProp("elevationServiceUrl",null,"").replace(/\/$/,"");if(!serviceUrl){reject(null);return}axios.get(serviceUrl+"/getelevation",{params:{pos:pos.join(","),crs:crs}}).then(function(response){var _response$data$elevat;resolve((_response$data$elevat=response.data.elevation)!==null&&_response$data$elevat!==void 0?_response$data$elevat:{list:response.data.elevation_list})})["catch"](function(e){reject(String(e))})})},/**
19
19
  * Query the elevation profile along the specified line
20
20
  *
21
21
  * * `coordinates`: line coordinates `[[x1, y1], [x2, y2], ...]`
@@ -5,10 +5,10 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
5
5
  * This source code is licensed under the BSD-style license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */import isEmpty from"lodash.isempty";import isEqual from"lodash.isequal";import url from"url";import{v4 as uuidv4}from"uuid";import{LayerRole}from"../actions/layers";import ConfigUtils from"./ConfigUtils";import CoordinatesUtils from"./CoordinatesUtils";import MapUtils from"./MapUtils";import VectorLayerUtils from"./VectorLayerUtils";var LayerUtils={restoreLayerParams:function restoreLayerParams(themeLayer,layerConfigs,permalinkLayers,externalLayers){var exploded=LayerUtils.explodeLayers([themeLayer]);// Restore theme layer configuration
8
- var _iterator=_createForOfIteratorHelper(exploded),_step;try{var _loop=function _loop(){var entry=_step.value;var layerConfig=layerConfigs.find(function(layer){return layer.type==="theme"&&layer.name===entry.sublayer.name});if(layerConfig){entry.sublayer.opacity=layerConfig.opacity;entry.sublayer.visibility=layerConfig.visibility||layerConfig.tristate;entry.sublayer.tristate=layerConfig.tristate;entry.sublayer.style=layerConfig.style;if(!entry.sublayer.style){entry.sublayer.style=!isEmpty(entry.sublayer.styles)?Object.keys(entry.sublayer.styles)[0]:""}}else{entry.sublayer.visibility=false}};for(_iterator.s();!(_step=_iterator.n()).done;){_loop()}// Create placeholders for external layers to be added in front
8
+ var _iterator=_createForOfIteratorHelper(exploded),_step;try{var _loop=function _loop(){var entry=_step.value;var layerConfig=layerConfigs.find(function(layer){return layer.type==="theme"&&layer.name===entry.sublayer.name});if(layerConfig){entry.sublayer.opacity=layerConfig.opacity;entry.sublayer.visibility=layerConfig.visibility||layerConfig.tristate;entry.sublayer.tristate=layerConfig.tristate;entry.sublayer.style=layerConfig.style||entry.sublayer.style}else{entry.sublayer.visibility=false}};for(_iterator.s();!(_step=_iterator.n()).done;){_loop()}// Create placeholders for external layers to be added in front
9
9
  }catch(err){_iterator.e(err)}finally{_iterator.f()}var external=[];var _iterator2=_createForOfIteratorHelper(layerConfigs),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var layerConfig=_step2.value;if(layerConfig.type==="separator"){// No point restoring separators
10
10
  }else if(layerConfig.type!=="theme"){external=external.concat(LayerUtils.createExternalLayerPlaceholder(layerConfig,externalLayers,layerConfig.id))}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}exploded=[].concat(_toConsumableArray(external),_toConsumableArray(exploded));LayerUtils.insertPermalinkLayers(exploded,permalinkLayers);var layers=LayerUtils.implodeLayers(exploded);LayerUtils.setGroupVisiblities(layers);return layers},restoreOrderedLayerParams:function restoreOrderedLayerParams(themeLayer,layerConfigs,permalinkLayers,externalLayers){var exploded=LayerUtils.explodeLayers([themeLayer]);var reordered=[];// Iterate over layer configs and reorder items accordingly, create external layer placeholders as neccessary
11
- var _iterator3=_createForOfIteratorHelper(layerConfigs),_step3;try{var _loop2=function _loop2(){var layerConfig=_step3.value;if(layerConfig.type==="theme"){var entry=exploded.find(function(e){return e.sublayer.name===layerConfig.name});if(entry){entry.sublayer.opacity=layerConfig.opacity;entry.sublayer.visibility=layerConfig.visibility||layerConfig.tristate;entry.sublayer.tristate=layerConfig.tristate;entry.sublayer.style=layerConfig.style;if(!entry.sublayer.style){entry.sublayer.style=!isEmpty(entry.sublayer.styles)?Object.keys(entry.sublayer.styles)[0]:""}reordered.push(entry)}}else if(layerConfig.type==="separator"){reordered=reordered.concat(LayerUtils.createSeparatorLayer(layerConfig.name))}else{reordered=reordered.concat(LayerUtils.createExternalLayerPlaceholder(layerConfig,externalLayers,layerConfig.id))}};for(_iterator3.s();!(_step3=_iterator3.n()).done;){_loop2()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}LayerUtils.insertPermalinkLayers(reordered,permalinkLayers);var layers=LayerUtils.implodeLayers(reordered);LayerUtils.setGroupVisiblities(layers);return layers},setGroupVisiblities:function setGroupVisiblities(layers){var parentVisible=false;var parentInvisible=false;var _iterator4=_createForOfIteratorHelper(layers),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var layer=_step4.value;if(!isEmpty(layer.sublayers)){layer.visibility=LayerUtils.setGroupVisiblities(layer.sublayers)}parentInvisible=parentInvisible||layer.tristate;delete layer.tristate;parentVisible=parentVisible||layer.visibility}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}return parentVisible&&!parentInvisible},createSeparatorLayer:function createSeparatorLayer(title){return LayerUtils.explodeLayers([{type:"separator",title:title,role:LayerRole.USERLAYER,id:uuidv4()}])},createExternalLayerPlaceholder:function createExternalLayerPlaceholder(layerConfig,externalLayers,id){var key=layerConfig.type+":"+layerConfig.url;(externalLayers[key]=externalLayers[key]||[]).push({id:id,name:layerConfig.name,opacity:layerConfig.opacity,visibility:layerConfig.visibility,style:layerConfig.style,params:layerConfig.params});return LayerUtils.explodeLayers([{id:id,type:"placeholder",name:layerConfig.name,title:layerConfig.name,role:LayerRole.USERLAYER,loading:true}])},insertPermalinkLayers:function insertPermalinkLayers(exploded,layers){var _iterator5=_createForOfIteratorHelper(layers||[]),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var layer=_step5.value;var insLayer=LayerUtils.explodeLayers([layer])[0];if(insLayer.layer.role!==LayerRole.USERLAYER||insLayer.layer.type!=="vector"){continue}delete insLayer.layer.pos;exploded.splice(layer.pos,0,insLayer)}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}},collectWMSSublayerParams:function collectWMSSublayerParams(sublayer,layerNames,opacities,styles,queryable,visibilities,parentVisibility){var layerVisibility=sublayer.visibility===undefined?true:sublayer.visibility;var visibility=layerVisibility&&parentVisibility;if(visibility||visibilities){if(!isEmpty(sublayer.sublayers)){// Is group
11
+ var _iterator3=_createForOfIteratorHelper(layerConfigs),_step3;try{var _loop2=function _loop2(){var layerConfig=_step3.value;if(layerConfig.type==="theme"){var entry=exploded.find(function(e){return e.sublayer.name===layerConfig.name});if(entry){entry.sublayer.opacity=layerConfig.opacity;entry.sublayer.visibility=layerConfig.visibility||layerConfig.tristate;entry.sublayer.tristate=layerConfig.tristate;entry.sublayer.style=layerConfig.style||entry.sublayer.style;reordered.push(entry)}}else if(layerConfig.type==="separator"){reordered=reordered.concat(LayerUtils.createSeparatorLayer(layerConfig.name))}else{reordered=reordered.concat(LayerUtils.createExternalLayerPlaceholder(layerConfig,externalLayers,layerConfig.id))}};for(_iterator3.s();!(_step3=_iterator3.n()).done;){_loop2()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}LayerUtils.insertPermalinkLayers(reordered,permalinkLayers);var layers=LayerUtils.implodeLayers(reordered);LayerUtils.setGroupVisiblities(layers);return layers},setGroupVisiblities:function setGroupVisiblities(layers){var parentVisible=false;var parentInvisible=false;var _iterator4=_createForOfIteratorHelper(layers),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var layer=_step4.value;if(!isEmpty(layer.sublayers)){layer.visibility=LayerUtils.setGroupVisiblities(layer.sublayers)}parentInvisible=parentInvisible||layer.tristate;delete layer.tristate;parentVisible=parentVisible||layer.visibility}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}return parentVisible&&!parentInvisible},createSeparatorLayer:function createSeparatorLayer(title){return LayerUtils.explodeLayers([{type:"separator",title:title,role:LayerRole.USERLAYER,id:uuidv4()}])},createExternalLayerPlaceholder:function createExternalLayerPlaceholder(layerConfig,externalLayers,id){var key=layerConfig.type+":"+layerConfig.url;(externalLayers[key]=externalLayers[key]||[]).push({id:id,name:layerConfig.name,opacity:layerConfig.opacity,visibility:layerConfig.visibility,style:layerConfig.style,params:layerConfig.params});return LayerUtils.explodeLayers([{id:id,type:"placeholder",name:layerConfig.name,opacity:layerConfig.opacity,visibility:layerConfig.visibility,style:layerConfig.style,title:layerConfig.name,role:LayerRole.USERLAYER,loading:true}])},insertPermalinkLayers:function insertPermalinkLayers(exploded,layers){var _iterator5=_createForOfIteratorHelper(layers||[]),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var layer=_step5.value;var insLayer=LayerUtils.explodeLayers([layer])[0];if(insLayer.layer.role!==LayerRole.USERLAYER||insLayer.layer.type!=="vector"){continue}delete insLayer.layer.pos;exploded.splice(layer.pos,0,insLayer)}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}},collectWMSSublayerParams:function collectWMSSublayerParams(sublayer,layerNames,opacities,styles,queryable,visibilities,parentVisibility){var layerVisibility=sublayer.visibility===undefined?true:sublayer.visibility;var visibility=layerVisibility&&parentVisibility;if(visibility||visibilities){if(!isEmpty(sublayer.sublayers)){// Is group
12
12
  sublayer.sublayers.map(function(sublyr){LayerUtils.collectWMSSublayerParams(sublyr,layerNames,opacities,styles,queryable,visibilities,visibility)})}else{layerNames.push(sublayer.name);opacities.push(Number.isInteger(sublayer.opacity)?sublayer.opacity:255);styles.push(sublayer.style||"");if(sublayer.queryable&&!sublayer.omitFromQueryLayers){queryable.push(sublayer.name)}if(visibilities){// eslint-disable-next-line
13
13
  visibilities.push(layerVisibility?parentVisibility?1:0.5:0)}}}},buildWMSLayerParams:function buildWMSLayerParams(layer){var filter=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var params=layer.params||{};var newParams={};var queryLayers=[];var initialOpacities=undefined;if(!Array.isArray(layer.sublayers)){var _ref,_layer$initialOpaciti,_layer$opacity,_ref2,_layer$style;var layers=(params.LAYERS||layer.name).split(",").filter(Boolean);// Background layers may just contain layer.params.OPACITIES
14
14
  // User layers will be controlled with layer.opacity, and value will be replicated in layer.params.OPACITIES
@@ -35,14 +35,15 @@ var siblinggrouppath=exploded[idx+delta].path.slice(0,level);siblinggrouppath[si
35
35
  if(Math.abs(delta)>1){delta+=delta>0?-1:1}if(idx+delta<0||idx+delta>=exploded.length){return layers}}}// Reorder layer
36
36
  if(delta<0){var _iterator7=_createForOfIteratorHelper(indices),_step7;try{for(_iterator7.s();!(_step7=_iterator7.n()).done;){var _idx=_step7.value;exploded.splice(_idx+delta,0,exploded.splice(_idx,1)[0])}}catch(err){_iterator7.e(err)}finally{_iterator7.f()}}else{var _iterator8=_createForOfIteratorHelper(indices.reverse()),_step8;try{for(_iterator8.s();!(_step8=_iterator8.n()).done;){var _idx2=_step8.value;exploded.splice(_idx2+delta,0,exploded.splice(_idx2,1)[0])}}catch(err){_iterator8.e(err)}finally{_iterator8.f()}}}// Re-assemble layers
37
37
  var newlayers=LayerUtils.implodeLayers(exploded);// Re-add background layers
38
- return[].concat(_toConsumableArray(newlayers),_toConsumableArray(layers.filter(function(layer){return layer.role===LayerRole.BACKGROUND})))},explodeLayers:function explodeLayers(layers){// Return array with one entry for every single sublayer)
38
+ return[].concat(_toConsumableArray(newlayers),_toConsumableArray(layers.filter(function(layer){return layer.role===LayerRole.BACKGROUND})))},replacePlaceholderLayer:function replacePlaceholderLayer(layers,layerid,newlayer){var filter=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{};var newLayers=layers;if(newlayer){newLayers=layers.map(function(layer){if(layer.type==="placeholder"&&layer.id===layerid){var _layer$attribution,_layer$opacity2,_layer$visibility,_layer$tristate,_layer$style2;var newLayer=_objectSpread(_objectSpread(_objectSpread({},layer),newlayer),{},{attribution:(_layer$attribution=layer.attribution)!==null&&_layer$attribution!==void 0?_layer$attribution:newlayer.attribution,opacity:(_layer$opacity2=layer.opacity)!==null&&_layer$opacity2!==void 0?_layer$opacity2:newlayer.opacity,visibility:(_layer$visibility=layer.visibility)!==null&&_layer$visibility!==void 0?_layer$visibility:newlayer.visibility,tristate:(_layer$tristate=layer.tristate)!==null&&_layer$tristate!==void 0?_layer$tristate:newlayer.tristate,style:(_layer$style2=layer.style)!==null&&_layer$style2!==void 0?_layer$style2:newlayer.style,role:layer.role,id:layer.id});// For background layers, preserve any custom name/title/attribution/opacity
39
+ if(layer.role===LayerRole.BACKGROUND){var _layer$name,_layer$title;newLayer.name=(_layer$name=layer.name)!==null&&_layer$name!==void 0?_layer$name:newlayer.name;newLayer.title=(_layer$title=layer.title)!==null&&_layer$title!==void 0?_layer$title:newlayer.title}delete newLayer.loading;if(newLayer.type==="wms"){Object.assign(newLayer,LayerUtils.buildWMSLayerParams(newLayer,filter))}return newLayer}else{return layer}})}else{newLayers=newLayers.filter(function(layer){return!(layer.type==="placeholder"&&layer.id===layerid)})}return newLayers},explodeLayers:function explodeLayers(layers){// Return array with one entry for every single sublayer)
39
40
  var exploded=[];var _iterator9=_createForOfIteratorHelper(layers),_step9;try{for(_iterator9.s();!(_step9=_iterator9.n()).done;){var layer=_step9.value;if(!isEmpty(layer.sublayers)){this.explodeSublayers(layer,layer,exploded)}else{var newLayer=_objectSpread({},layer);exploded.push({layer:newLayer,path:[],sublayer:newLayer})}}}catch(err){_iterator9.e(err)}finally{_iterator9.f()}return exploded},explodeSublayers:function explodeSublayers(layer,parent,exploded){var parentpath=arguments.length>3&&arguments[3]!==undefined?arguments[3]:[];for(var idx=0;idx<parent.sublayers.length;++idx){var path=[].concat(_toConsumableArray(parentpath),[idx]);if(parent.sublayers[idx].sublayers){LayerUtils.explodeSublayers(layer,parent.sublayers[idx],exploded,path)}else{// Reduced layer with one single sublayer per level, up to leaf
40
41
  var redLayer=_objectSpread({},layer);var group=redLayer;var _iterator10=_createForOfIteratorHelper(path),_step10;try{for(_iterator10.s();!(_step10=_iterator10.n()).done;){var jdx=_step10.value;group.sublayers=[_objectSpread({},group.sublayers[jdx])];group=group.sublayers[0]}}catch(err){_iterator10.e(err)}finally{_iterator10.f()}exploded.push({layer:redLayer,path:path,sublayer:group})}}},implodeLayers:function implodeLayers(exploded){var newlayers=[];var usedIds=new Set;// Merge all possible items of an exploded layer array
41
42
  var _iterator11=_createForOfIteratorHelper(exploded),_step11;try{for(_iterator11.s();!(_step11=_iterator11.n()).done;){var entry=_step11.value;var _layer2=entry.layer;// Attempt to merge with previous if possible
42
43
  var target=newlayers.length>0?newlayers[newlayers.length-1]:null;var source=_layer2;if(target&&target.sublayers&&target.url===_layer2.url){var innertarget=target.sublayers[target.sublayers.length-1];var innersource=source.sublayers[0];// Exploded entries have only one entry per sublayer level
43
44
  while(innertarget&&innertarget.sublayers&&innertarget.name===innersource.name){target=innertarget;source=innersource;innertarget=target.sublayers[target.sublayers.length-1];innersource=source.sublayers[0];// Exploded entries have only one entry per sublayer level
44
45
  }target.sublayers.push(source.sublayers[0])}else{if(usedIds.has(_layer2.id)){newlayers.push(_objectSpread(_objectSpread({},_layer2),{},{id:uuidv4()}))}else{newlayers.push(_layer2)}usedIds.add(_layer2.id)}}// Ensure mutually exclusive groups have exactly one visible layer
45
- }catch(err){_iterator11.e(err)}finally{_iterator11.f()}for(var _i=0,_newlayers=newlayers;_i<_newlayers.length;_i++){var layer=_newlayers[_i];LayerUtils.ensureMutuallyExclusive(layer)}for(var _i2=0,_newlayers2=newlayers;_i2<_newlayers2.length;_i2++){var _layer=_newlayers2[_i2];if(_layer.type==="wms"){Object.assign(_layer,LayerUtils.recomputeLayerBBox(_layer))}}return newlayers},insertLayer:function insertLayer(layers,newlayer,attr,val){var after=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var exploded=LayerUtils.explodeLayers(layers);var explodedAdd=LayerUtils.explodeLayers([newlayer]);var index=exploded.findIndex(function(entry){return entry.sublayer[attr]===val});if(index!==-1){if(after){index+=1}exploded.splice.apply(exploded,[index,0].concat(_toConsumableArray(explodedAdd)))}else{exploded.unshift.apply(exploded,_toConsumableArray(explodedAdd))}return LayerUtils.implodeLayers(exploded)},ensureMutuallyExclusive:function ensureMutuallyExclusive(group){if(!isEmpty(group.sublayers)){if(group.mutuallyExclusive){var tristateSublayer=group.sublayers.find(function(sublayer){return sublayer.tristate===true});var visibleSublayer=tristateSublayer||group.sublayers.find(function(sublayer){return sublayer.visibility===true})||group.sublayers[0];var _iterator12=_createForOfIteratorHelper(group.sublayers),_step12;try{for(_iterator12.s();!(_step12=_iterator12.n()).done;){var sublayer=_step12.value;sublayer.visibility=sublayer===visibleSublayer}}catch(err){_iterator12.e(err)}finally{_iterator12.f()}}var _iterator13=_createForOfIteratorHelper(group.sublayers),_step13;try{for(_iterator13.s();!(_step13=_iterator13.n()).done;){var _sublayer=_step13.value;LayerUtils.ensureMutuallyExclusive(_sublayer)}}catch(err){_iterator13.e(err)}finally{_iterator13.f()}}},getSublayerNames:function getSublayerNames(layer){var _this2=this;var toplevel=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var filter=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;return[toplevel&&layer.sublayers||filter&&!filter(layer)?null:layer.name].concat((layer.sublayers||[]).reduce(function(list,sublayer){return list.concat(_toConsumableArray(_this2.getSublayerNames(sublayer,false,filter)))},[])).filter(function(x){return x})},mergeSubLayers:function mergeSubLayers(baselayer,addlayer){addlayer=_objectSpread(_objectSpread({},baselayer),{},{sublayers:addlayer.sublayers});addlayer.externalLayerMap=_objectSpread({},addlayer.externalLayerMap);LayerUtils.extractExternalLayersFromSublayers(addlayer,addlayer);if(isEmpty(addlayer.sublayers)){return _objectSpread({},baselayer)}if(isEmpty(baselayer.sublayers)){return addlayer}var explodedBase=LayerUtils.explodeLayers([baselayer]);var existing=explodedBase.map(function(entry){return entry.sublayer.name});var explodedAdd=LayerUtils.explodeLayers([addlayer]);explodedAdd=explodedAdd.filter(function(entry){return!existing.includes(entry.sublayer.name)});return LayerUtils.implodeLayers(explodedAdd.concat(explodedBase))[0]},searchSubLayer:function searchSubLayer(layer,attr,value){var path=arguments.length>3&&arguments[3]!==undefined?arguments[3]:[];if(layer.sublayers){var idx=0;var _iterator14=_createForOfIteratorHelper(layer.sublayers),_step14;try{for(_iterator14.s();!(_step14=_iterator14.n()).done;){var sublayer=_step14.value;var match=sublayer[attr]===value?sublayer:LayerUtils.searchSubLayer(sublayer,attr,value,path);if(match){path.unshift(idx);return match}idx+=1}}catch(err){_iterator14.e(err)}finally{_iterator14.f()}}else{if(layer[attr]===value){return layer}}return null},matchSubLayer:function matchSubLayer(layer,func){var path=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];if(layer.sublayers){var idx=0;var _iterator15=_createForOfIteratorHelper(layer.sublayers),_step15;try{for(_iterator15.s();!(_step15=_iterator15.n()).done;){var sublayer=_step15.value;var match=func(sublayer)?sublayer:LayerUtils.matchSubLayer(sublayer,func,path);if(match){path.unshift(idx);return match}idx+=1}}catch(err){_iterator15.e(err)}finally{_iterator15.f()}}else{if(func(layer)){return layer}}return null},searchLayer:function searchLayer(layers,layerUrl,layerName){var match=null;layers.find(function(layer){var sublayer=null;if(layer.url===layerUrl&&(sublayer=LayerUtils.searchSubLayer(layer,"name",layerName))){match={layer:layer,sublayer:sublayer};return true}return false});return match},sublayerVisible:function sublayerVisible(layer,sublayerpath){var visible=layer.visibility!==false;var sublayer=layer;var _iterator16=_createForOfIteratorHelper(sublayerpath),_step16;try{for(_iterator16.s();!(_step16=_iterator16.n()).done;){var index=_step16.value;sublayer=sublayer.sublayers[index];visible&=sublayer.visibility!==false;if(!visible){return false}}}catch(err){_iterator16.e(err)}finally{_iterator16.f()}return true},computeLayerVisibility:function computeLayerVisibility(layer){if(isEmpty(layer.sublayers)||layer.visibility===false){return layer.visibility?1:0}var visible=0;layer.sublayers.map(function(sublayer){var _sublayer$visibility;var sublayervisibility=(_sublayer$visibility=sublayer.visibility)!==null&&_sublayer$visibility!==void 0?_sublayer$visibility:true;if(sublayer.sublayers&&sublayervisibility){visible+=LayerUtils.computeLayerVisibility(sublayer)}else{visible+=sublayervisibility?1:0}});return visible/layer.sublayers.length},computeLayerOpacity:function computeLayerOpacity(layer){if(isEmpty(layer.sublayers)){var _layer$opacity2;return(_layer$opacity2=layer.opacity)!==null&&_layer$opacity2!==void 0?_layer$opacity2:255}var opacity=0;layer.sublayers.map(function(sublayer){opacity+=LayerUtils.computeLayerOpacity(sublayer)});return opacity/layer.sublayers.length},computeLayerQueryable:function computeLayerQueryable(layer){var queryable=0;layer.sublayers.map(function(sublayer){var _sublayer$omitFromQue;var sublayerqueryable=(_sublayer$omitFromQue=!sublayer.omitFromQueryLayers)!==null&&_sublayer$omitFromQue!==void 0?_sublayer$omitFromQue:true;if(sublayer.sublayers&&sublayerqueryable){queryable+=LayerUtils.computeLayerQueryable(sublayer)}else{queryable+=sublayerqueryable?1:0}});return queryable/layer.sublayers.length},hasQueryableSublayers:function hasQueryableSublayers(layer){return layer.sublayers.find(function(sublayer){return sublayer.sulayers?LayerUtils.hasQueryableSublayers(sublayer):sublayer.queryable})},cloneLayer:function cloneLayer(layer,sublayerpath){var newlayer=_objectSpread({},layer);var cur=newlayer;for(var i=0;i<sublayerpath.length;++i){var idx=sublayerpath[i];cur.sublayers=[].concat(_toConsumableArray(cur.sublayers.slice(0,idx)),[_objectSpread({},cur.sublayers[idx])],_toConsumableArray(cur.sublayers.slice(idx+1)));cur=cur.sublayers[idx]}return{newlayer:newlayer,newsublayer:cur}},collectGroupLayers:function collectGroupLayers(layer,parentGroups,groupLayers){if(!isEmpty(layer.sublayers)){var _iterator17=_createForOfIteratorHelper(layer.sublayers),_step17;try{for(_iterator17.s();!(_step17=_iterator17.n()).done;){var sublayer=_step17.value;LayerUtils.collectGroupLayers(sublayer,parentGroups.concat(layer.name),groupLayers)}}catch(err){_iterator17.e(err)}finally{_iterator17.f()}}else{var _iterator18=_createForOfIteratorHelper(parentGroups),_step18;try{for(_iterator18.s();!(_step18=_iterator18.n()).done;){var group=_step18.value;groupLayers[group]=(groupLayers[group]||[]).concat(layer.name)}}catch(err){_iterator18.e(err)}finally{_iterator18.f()}}},replaceLayerGroups:function replaceLayerGroups(layerConfigs,layer){var groupLayers={};LayerUtils.collectGroupLayers(layer,[],groupLayers);var newLayerConfigs=[];var _iterator19=_createForOfIteratorHelper(layerConfigs),_step19;try{var _loop4=function _loop4(){var layerConfig=_step19.value;if(layerConfig.name in groupLayers){newLayerConfigs.push.apply(newLayerConfigs,_toConsumableArray(groupLayers[layerConfig.name].map(function(name){return _objectSpread(_objectSpread({},layerConfig),{},{name:name})})))}else{newLayerConfigs.push(layerConfig)}};for(_iterator19.s();!(_step19=_iterator19.n()).done;){_loop4()}}catch(err){_iterator19.e(err)}finally{_iterator19.f()}return newLayerConfigs},extractExternalLayersFromSublayers:function extractExternalLayersFromSublayers(toplayer,layer){if(layer.sublayers){layer.sublayers=layer.sublayers.map(function(sublayer){if(sublayer.externalLayer){var externalLayer=_objectSpread({},sublayer.externalLayer);LayerUtils.completeExternalLayer(externalLayer,sublayer,toplayer.mapCrs);toplayer.externalLayerMap[sublayer.name]=externalLayer;sublayer=_objectSpread({},sublayer);delete sublayer.externalLayer}if(sublayer.sublayers){LayerUtils.extractExternalLayersFromSublayers(toplayer,sublayer)}return sublayer})}},completeExternalLayer:function completeExternalLayer(externalLayer,sublayer,mapCrs){externalLayer.title=externalLayer.title||(sublayer||{}).title||externalLayer.name;externalLayer.id=uuidv4();if(externalLayer.type==="wms"||externalLayer.params){externalLayer.version=externalLayer.version||"1.3.0";externalLayer.featureInfoUrl=externalLayer.featureInfoUrl||externalLayer.url;externalLayer.legendUrl=externalLayer.legendUrl||externalLayer.url;externalLayer.queryLayers=externalLayer.queryLayers||externalLayer.params.LAYERS.split(",");var externalLayerFeatureInfoFormats=ConfigUtils.getConfigProp("externalLayerFeatureInfoFormats")||{};for(var _i3=0,_Object$keys=Object.keys(externalLayerFeatureInfoFormats);_i3<_Object$keys.length;_i3++){var entry=_Object$keys[_i3];if(externalLayer.featureInfoUrl.toLowerCase().includes(entry.toLowerCase())){externalLayer.infoFormats=[externalLayerFeatureInfoFormats[entry]];break}}}else if(externalLayer.type==="mvt"){externalLayer.projection=mapCrs;if(externalLayer.tileGridName){externalLayer.tileGridConfig=(ConfigUtils.getConfigProp("mvtTileGrids")||{})[externalLayer.tileGridName];if(!externalLayer.tileGridConfig){/* eslint-disable-next-line */console.warn("Tile grid config not found: "+externalLayer.tileGridName)}}}},getLegendUrl:function getLegendUrl(layer,sublayer,scale,map,bboxDependentLegend,scaleDependentLegend,extraLegendParameters){if(layer.type!=="wms"){return layer.legendUrl||""}var requestParams={SERVICE:"WMS",REQUEST:"GetLegendGraphic",FORMAT:"image/png",CRS:map.projection,SRS:map.projection,SLD_VERSION:"1.1.0",WIDTH:200,HEIGHT:200};if(extraLegendParameters){Object.assign(requestParams,Object.fromEntries(extraLegendParameters.split("&").map(function(entry){return entry.split("=")})))}if(scaleDependentLegend===true||scaleDependentLegend==="theme"&&layer.role===LayerRole.THEME){requestParams.SCALE=Math.round(scale)}if(bboxDependentLegend===true||bboxDependentLegend==="theme"&&layer.role===LayerRole.THEME){var bounds=map.bbox.bounds;if(CoordinatesUtils.getAxisOrder(map.projection).substr(0,2)==="ne"&&layer.version==="1.3.0"){requestParams.BBOX=[bounds[1],bounds[0],bounds[3],bounds[2]].join(",")}else{requestParams.BBOX=bounds.join(",")}}if(layer.externalLayerMap&&layer.externalLayerMap[sublayer.name]){var externalLayer=layer.externalLayerMap[sublayer.name];if(externalLayer.type!=="wms"){return externalLayer.legendUrl||""}var urlParts=url.parse(externalLayer.legendUrl,true);urlParts.query=Object.keys(urlParts.query).filter(function(key){// Filter service, request, version
46
+ }catch(err){_iterator11.e(err)}finally{_iterator11.f()}for(var _i=0,_newlayers=newlayers;_i<_newlayers.length;_i++){var layer=_newlayers[_i];LayerUtils.ensureMutuallyExclusive(layer)}for(var _i2=0,_newlayers2=newlayers;_i2<_newlayers2.length;_i2++){var _layer=_newlayers2[_i2];if(_layer.type==="wms"){Object.assign(_layer,LayerUtils.recomputeLayerBBox(_layer))}}return newlayers},insertLayer:function insertLayer(layers,newlayer,attr,val){var after=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var exploded=LayerUtils.explodeLayers(layers);var explodedAdd=LayerUtils.explodeLayers([newlayer]);var index=exploded.findIndex(function(entry){return entry.sublayer[attr]===val});if(index!==-1){if(after){index+=1}exploded.splice.apply(exploded,[index,0].concat(_toConsumableArray(explodedAdd)))}else{exploded.unshift.apply(exploded,_toConsumableArray(explodedAdd))}return LayerUtils.implodeLayers(exploded)},ensureMutuallyExclusive:function ensureMutuallyExclusive(group){if(!isEmpty(group.sublayers)){if(group.mutuallyExclusive){var tristateSublayer=group.sublayers.find(function(sublayer){return sublayer.tristate===true});var visibleSublayer=tristateSublayer||group.sublayers.find(function(sublayer){return sublayer.visibility===true})||group.sublayers[0];var _iterator12=_createForOfIteratorHelper(group.sublayers),_step12;try{for(_iterator12.s();!(_step12=_iterator12.n()).done;){var sublayer=_step12.value;sublayer.visibility=sublayer===visibleSublayer}}catch(err){_iterator12.e(err)}finally{_iterator12.f()}}var _iterator13=_createForOfIteratorHelper(group.sublayers),_step13;try{for(_iterator13.s();!(_step13=_iterator13.n()).done;){var _sublayer=_step13.value;LayerUtils.ensureMutuallyExclusive(_sublayer)}}catch(err){_iterator13.e(err)}finally{_iterator13.f()}}},getSublayerNames:function getSublayerNames(layer){var _this2=this;var toplevel=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var filter=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;return[toplevel&&layer.sublayers||filter&&!filter(layer)?null:layer.name].concat((layer.sublayers||[]).reduce(function(list,sublayer){return list.concat(_toConsumableArray(_this2.getSublayerNames(sublayer,false,filter)))},[])).filter(function(x){return x})},mergeSubLayers:function mergeSubLayers(baselayer,addlayer){addlayer=_objectSpread(_objectSpread({},baselayer),{},{sublayers:addlayer.sublayers});addlayer.externalLayerMap=_objectSpread({},addlayer.externalLayerMap);LayerUtils.extractExternalLayersFromSublayers(addlayer,addlayer);if(isEmpty(addlayer.sublayers)){return _objectSpread({},baselayer)}if(isEmpty(baselayer.sublayers)){return addlayer}var explodedBase=LayerUtils.explodeLayers([baselayer]);var existing=explodedBase.map(function(entry){return entry.sublayer.name});var explodedAdd=LayerUtils.explodeLayers([addlayer]);explodedAdd=explodedAdd.filter(function(entry){return!existing.includes(entry.sublayer.name)});return LayerUtils.implodeLayers(explodedAdd.concat(explodedBase))[0]},searchSubLayer:function searchSubLayer(layer,attr,value){var path=arguments.length>3&&arguments[3]!==undefined?arguments[3]:[];if(layer.sublayers){var idx=0;var _iterator14=_createForOfIteratorHelper(layer.sublayers),_step14;try{for(_iterator14.s();!(_step14=_iterator14.n()).done;){var sublayer=_step14.value;var match=sublayer[attr]===value?sublayer:LayerUtils.searchSubLayer(sublayer,attr,value,path);if(match){path.unshift(idx);return match}idx+=1}}catch(err){_iterator14.e(err)}finally{_iterator14.f()}}else{if(layer[attr]===value){return layer}}return null},matchSubLayer:function matchSubLayer(layer,func){var path=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];if(layer.sublayers){var idx=0;var _iterator15=_createForOfIteratorHelper(layer.sublayers),_step15;try{for(_iterator15.s();!(_step15=_iterator15.n()).done;){var sublayer=_step15.value;var match=func(sublayer)?sublayer:LayerUtils.matchSubLayer(sublayer,func,path);if(match){path.unshift(idx);return match}idx+=1}}catch(err){_iterator15.e(err)}finally{_iterator15.f()}}else{if(func(layer)){return layer}}return null},searchLayer:function searchLayer(layers,layerUrl,layerName){var match=null;layers.find(function(layer){var sublayer=null;if(layer.url===layerUrl&&(sublayer=LayerUtils.searchSubLayer(layer,"name",layerName))){match={layer:layer,sublayer:sublayer};return true}return false});return match},sublayerVisible:function sublayerVisible(layer,sublayerpath){var visible=layer.visibility!==false;var sublayer=layer;var _iterator16=_createForOfIteratorHelper(sublayerpath),_step16;try{for(_iterator16.s();!(_step16=_iterator16.n()).done;){var index=_step16.value;sublayer=sublayer.sublayers[index];visible&=sublayer.visibility!==false;if(!visible){return false}}}catch(err){_iterator16.e(err)}finally{_iterator16.f()}return true},computeLayerVisibility:function computeLayerVisibility(layer){if(isEmpty(layer.sublayers)||layer.visibility===false){return layer.visibility?1:0}var visible=0;layer.sublayers.map(function(sublayer){var _sublayer$visibility;var sublayervisibility=(_sublayer$visibility=sublayer.visibility)!==null&&_sublayer$visibility!==void 0?_sublayer$visibility:true;if(sublayer.sublayers&&sublayervisibility){visible+=LayerUtils.computeLayerVisibility(sublayer)}else{visible+=sublayervisibility?1:0}});return visible/layer.sublayers.length},computeLayerOpacity:function computeLayerOpacity(layer){if(isEmpty(layer.sublayers)){var _layer$opacity3;return(_layer$opacity3=layer.opacity)!==null&&_layer$opacity3!==void 0?_layer$opacity3:255}var opacity=0;layer.sublayers.map(function(sublayer){opacity+=LayerUtils.computeLayerOpacity(sublayer)});return opacity/layer.sublayers.length},computeLayerQueryable:function computeLayerQueryable(layer){var queryable=0;layer.sublayers.map(function(sublayer){var _sublayer$omitFromQue;var sublayerqueryable=(_sublayer$omitFromQue=!sublayer.omitFromQueryLayers)!==null&&_sublayer$omitFromQue!==void 0?_sublayer$omitFromQue:true;if(sublayer.sublayers&&sublayerqueryable){queryable+=LayerUtils.computeLayerQueryable(sublayer)}else{queryable+=sublayerqueryable?1:0}});return queryable/layer.sublayers.length},hasQueryableSublayers:function hasQueryableSublayers(layer){return layer.sublayers.find(function(sublayer){return sublayer.sulayers?LayerUtils.hasQueryableSublayers(sublayer):sublayer.queryable})},cloneLayer:function cloneLayer(layer,sublayerpath){var newlayer=_objectSpread({},layer);var cur=newlayer;for(var i=0;i<sublayerpath.length;++i){var idx=sublayerpath[i];cur.sublayers=[].concat(_toConsumableArray(cur.sublayers.slice(0,idx)),[_objectSpread({},cur.sublayers[idx])],_toConsumableArray(cur.sublayers.slice(idx+1)));cur=cur.sublayers[idx]}return{newlayer:newlayer,newsublayer:cur}},collectGroupLayers:function collectGroupLayers(layer,parentGroups,groupLayers){if(!isEmpty(layer.sublayers)){var _iterator17=_createForOfIteratorHelper(layer.sublayers),_step17;try{for(_iterator17.s();!(_step17=_iterator17.n()).done;){var sublayer=_step17.value;LayerUtils.collectGroupLayers(sublayer,parentGroups.concat(layer.name),groupLayers)}}catch(err){_iterator17.e(err)}finally{_iterator17.f()}}else{var _iterator18=_createForOfIteratorHelper(parentGroups),_step18;try{for(_iterator18.s();!(_step18=_iterator18.n()).done;){var group=_step18.value;groupLayers[group]=(groupLayers[group]||[]).concat(layer.name)}}catch(err){_iterator18.e(err)}finally{_iterator18.f()}}},replaceLayerGroups:function replaceLayerGroups(layerConfigs,layer){var groupLayers={};LayerUtils.collectGroupLayers(layer,[],groupLayers);var newLayerConfigs=[];var _iterator19=_createForOfIteratorHelper(layerConfigs),_step19;try{var _loop4=function _loop4(){var layerConfig=_step19.value;if(layerConfig.name in groupLayers){newLayerConfigs.push.apply(newLayerConfigs,_toConsumableArray(groupLayers[layerConfig.name].map(function(name){return _objectSpread(_objectSpread({},layerConfig),{},{name:name})})))}else{newLayerConfigs.push(layerConfig)}};for(_iterator19.s();!(_step19=_iterator19.n()).done;){_loop4()}}catch(err){_iterator19.e(err)}finally{_iterator19.f()}return newLayerConfigs},extractExternalLayersFromSublayers:function extractExternalLayersFromSublayers(toplayer,layer){if(layer.sublayers){layer.sublayers=layer.sublayers.map(function(sublayer){if(sublayer.externalLayer){var externalLayer=_objectSpread({},sublayer.externalLayer);LayerUtils.completeExternalLayer(externalLayer,sublayer,toplayer.mapCrs);toplayer.externalLayerMap[sublayer.name]=externalLayer;sublayer=_objectSpread({},sublayer);delete sublayer.externalLayer}if(sublayer.sublayers){LayerUtils.extractExternalLayersFromSublayers(toplayer,sublayer)}return sublayer})}},completeExternalLayer:function completeExternalLayer(externalLayer,sublayer,mapCrs){externalLayer.title=externalLayer.title||(sublayer||{}).title||externalLayer.name;externalLayer.id=uuidv4();if(externalLayer.type==="wms"||externalLayer.params){externalLayer.version=externalLayer.version||"1.3.0";externalLayer.featureInfoUrl=externalLayer.featureInfoUrl||externalLayer.url;externalLayer.legendUrl=externalLayer.legendUrl||externalLayer.url;externalLayer.queryLayers=externalLayer.queryLayers||externalLayer.params.LAYERS.split(",");var externalLayerFeatureInfoFormats=ConfigUtils.getConfigProp("externalLayerFeatureInfoFormats")||{};for(var _i3=0,_Object$keys=Object.keys(externalLayerFeatureInfoFormats);_i3<_Object$keys.length;_i3++){var entry=_Object$keys[_i3];if(externalLayer.featureInfoUrl.toLowerCase().includes(entry.toLowerCase())){externalLayer.infoFormats=[externalLayerFeatureInfoFormats[entry]];break}}}else if(externalLayer.type==="mvt"){externalLayer.projection=mapCrs;if(externalLayer.tileGridName){externalLayer.tileGridConfig=(ConfigUtils.getConfigProp("mvtTileGrids")||{})[externalLayer.tileGridName];if(!externalLayer.tileGridConfig){/* eslint-disable-next-line */console.warn("Tile grid config not found: "+externalLayer.tileGridName)}}}},getLegendUrl:function getLegendUrl(layer,sublayer,scale,map,bboxDependentLegend,scaleDependentLegend,extraLegendParameters){if(layer.type!=="wms"){return layer.legendUrl||""}var requestParams={SERVICE:"WMS",REQUEST:"GetLegendGraphic",FORMAT:"image/png",CRS:map.projection,SRS:map.projection,SLD_VERSION:"1.1.0",WIDTH:200,HEIGHT:200};if(extraLegendParameters){Object.assign(requestParams,Object.fromEntries(extraLegendParameters.split("&").map(function(entry){return entry.split("=")})))}if(scaleDependentLegend===true||scaleDependentLegend==="theme"&&layer.role===LayerRole.THEME){requestParams.SCALE=Math.round(scale)}if(bboxDependentLegend===true||bboxDependentLegend==="theme"&&layer.role===LayerRole.THEME){var bounds=map.bbox.bounds;if(CoordinatesUtils.getAxisOrder(map.projection).substr(0,2)==="ne"&&layer.version==="1.3.0"){requestParams.BBOX=[bounds[1],bounds[0],bounds[3],bounds[2]].join(",")}else{requestParams.BBOX=bounds.join(",")}}if(layer.externalLayerMap&&layer.externalLayerMap[sublayer.name]){var externalLayer=layer.externalLayerMap[sublayer.name];if(externalLayer.type!=="wms"){return externalLayer.legendUrl||""}var urlParts=url.parse(externalLayer.legendUrl,true);urlParts.query=Object.keys(urlParts.query).filter(function(key){// Filter service, request, version
46
47
  return!["service","request","version"].includes(key.toLowerCase())}).reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,urlParts.query[key]))},{});urlParts.query=_objectSpread(_objectSpread(_objectSpread({VERSION:layer.version},urlParts.query),requestParams),{},{LAYER:externalLayer.params.LAYERS});delete urlParts.search;return url.format(urlParts)}else{var _layer$params$FILTER;var layername=layer===sublayer?layer.params.LAYERS.split(",").reverse().join(","):sublayer.name;var style=layer===sublayer?layer.params.STYLES.split(",").reverse().join(","):sublayer.style;var _urlParts=url.parse(layer.legendUrl,true);_urlParts.query=Object.keys(_urlParts.query).filter(function(key){// Filter service, request, version
47
48
  return!["service","request","version"].includes(key.toLowerCase())}).reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,_urlParts.query[key]))},{});_urlParts.query=_objectSpread(_objectSpread(_objectSpread({VERSION:layer.version},_urlParts.query),requestParams),{},{LAYER:layername,STYLES:style,FILTER:(_layer$params$FILTER=layer.params.FILTER)!==null&&_layer$params$FILTER!==void 0?_layer$params$FILTER:""});delete _urlParts.search;return url.format(_urlParts)}},layerScaleInRange:function layerScaleInRange(layer,mapScale){return(layer.minScale===undefined||mapScale>=layer.minScale)&&(layer.maxScale===undefined||mapScale<layer.maxScale)},addExternalLayerPrintParams:function addExternalLayerPrintParams(layer,params,printCrs,counterRef){var qgisServerVersion=ConfigUtils.getConfigProp("qgisServerVersion",null,3);if(qgisServerVersion>=3){if(layer.type==="wms"){var layerUrl=layer.url;var urlParts=url.parse(layerUrl,true);// Resolve relative urls
48
49
  if(!urlParts.host){var locationParts=url.parse(window.location.href);urlParts.protocol=locationParts.protocol;urlParts.host=locationParts.host;delete urlParts.search;layerUrl=url.format(urlParts)}var identifier=String.fromCharCode(65+counterRef[0]++);params.LAYERS.push("EXTERNAL_WMS:"+identifier);params.STYLES.push("");params.COLORS.push("");params[identifier+":url"]=layerUrl;params[identifier+":layers"]=layer.params.LAYERS;params[identifier+":styles"]=layer.params.STYLES;params[identifier+":format"]="image/png";if(layer.serverType==="qgis"&&layer.params.FILTER){params[identifier+":filter"]=layer.params.FILTER}params[identifier+":crs"]=printCrs;params[identifier+":dpiMode"]="7";params[identifier+":contextualWMSLegend"]="0";// If only one layer is requested, request external layer with full opacity
@@ -14,6 +14,6 @@ calledUrlParts.query=Object.keys(calledUrlParts.query).filter(function(key){retu
14
14
  formats=[formats]}}catch(e){return[]}var layers=[];var _iterator=_createForOfIteratorHelper(MiscUtils.ensureArray(capabilities.FeatureTypeList.FeatureType)),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var featureType=_step.value;var name=void 0;var bbox=void 0;try{name=featureType.Name;var llbbox=featureType.LatLongBoundingBox;bbox={crs:featureType.SRS,bounds:[llbbox.minx,llbbox.miny,llbbox.maxx,llbbox.maxy]}}catch(e){continue;// Name and bbox are required
15
15
  }var title=featureType.Title||name;var _abstract=featureType.Abstract||"";layers.push({type:"wfs",name:name,title:title,"abstract":_abstract,bbox:bbox,projection:featureType.SRS,url:serviceUrl,version:version,formats:formats,color:randomColor(),visibility:true})}}catch(err){_iterator.e(err)}finally{_iterator.f()}return layers},getWFS11_20Layers:function getWFS11_20Layers(capabilities,calledUrlParts,mapCrs){var serviceUrl=null;var version=capabilities.version;var formats=null;try{var getFeatureOp=MiscUtils.ensureArray(capabilities.OperationsMetadata.Operation).find(function(el){return el.name==="GetFeature"});serviceUrl=ServiceLayerUtils.getDCPTypes(MiscUtils.ensureArray(getFeatureOp.DCP)).HTTP.Get.href;serviceUrl=this.mergeCalledServiceUrlQuery(serviceUrl,calledUrlParts);var outputFormat=MiscUtils.ensureArray(getFeatureOp.Parameter).find(function(el){return el.name==="outputFormat"});formats=MiscUtils.ensureArray(outputFormat.AllowedValues?outputFormat.AllowedValues.Value:outputFormat.Value)}catch(e){return[]}var layers=[];var _iterator2=_createForOfIteratorHelper(MiscUtils.ensureArray(capabilities.FeatureTypeList.FeatureType)),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var featureType=_step2.value;var name=void 0;var bbox=void 0;try{name=featureType.Name;var lc=featureType.WGS84BoundingBox.LowerCorner.split(/\s+/);var uc=featureType.WGS84BoundingBox.UpperCorner.split(/\s+/);bbox={crs:"EPSG:4326",bounds:[lc[0],lc[1],uc[0],uc[1]]}}catch(e){continue;// Name and bbox are required
16
16
  }var title=featureType.Title||name;var _abstract2=featureType.Abstract||"";var projections=[CoordinatesUtils.fromOgcUrnCrs(featureType.DefaultCRS||featureType.DefaultSRS)].concat(_toConsumableArray(MiscUtils.ensureArray(featureType.OtherCRS||featureType.OtherSRS||[]).map(function(crs){return CoordinatesUtils.fromOgcUrnCrs(crs)})));var projection=projections.includes(mapCrs)?mapCrs:projections[0];layers.push({type:"wfs",name:name,title:title,"abstract":_abstract2,bbox:bbox,projection:projection,url:serviceUrl,version:version,formats:formats,color:randomColor(),visibility:true})}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return layers},getCapabilities:function getCapabilities(baseUrl,params){var urlParts=url.parse(baseUrl,true);if(params){urlParts.query=_objectSpread(_objectSpread({},Object.entries(urlParts.query).reduce(function(res,_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],val=_ref2[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},key.toUpperCase(),val))},{})),params);delete urlParts.search}if(urlParts.protocol==="http"&&location.protocol==="https"){urlParts.protocol="https"}var requestUrl=url.format(urlParts);return new Promise(function(resolve,reject){axios.get(requestUrl).then(function(response){var options={attributeNamePrefix:"",ignoreAttributes:false,parseTagValue:true,parseAttributeValue:true,removeNSPrefix:true};resolve({capabilities:new XMLParser(options).parse(response.data),requestUrl:requestUrl})})["catch"](function(e){reject(e)})})},getWMTSCapabilities:function getWMTSCapabilities(serviceUrl){return new Promise(function(resolve,reject){var requestUrl=MiscUtils.adjustProtocol(serviceUrl);axios.get(requestUrl).then(function(response){var wmtsFormat=new ol.format.WMTSCapabilities;resolve({capabilities:wmtsFormat.read(response.data),requestUrl:requestUrl})})["catch"](reject)})},getWMSCapabilities:function getWMSCapabilities(serviceUrl){return new Promise(function(resolve,reject){ServiceLayerUtils.getCapabilities(serviceUrl,{SERVICE:"WMS",REQUEST:"GetProjectSettings"}).then(function(result){var _result$capabilities;if((_result$capabilities=result.capabilities)!==null&&_result$capabilities!==void 0&&_result$capabilities.WMS_Capabilities){resolve(result)}else{ServiceLayerUtils.getCapabilities(serviceUrl,{SERVICE:"WMS",REQUEST:"GetCapabilities"}).then(resolve)}})["catch"](function(){ServiceLayerUtils.getCapabilities(serviceUrl,{SERVICE:"WMS",REQUEST:"GetCapabilities"}).then(resolve)["catch"](reject)})})},getWFSCapabilities:function getWFSCapabilities(serviceUrl){return new Promise(function(resolve,reject){ServiceLayerUtils.getCapabilities(serviceUrl,{SERVICE:"WFS",REQUEST:"GetCapabilities"}).then(resolve)["catch"](reject)})},findLayers:function findLayers(type,serviceUrl,layerConfigs,mapCrs,callback){var getCapabilities=null;var getLayers=null;if(type==="wmts"){getCapabilities=ServiceLayerUtils.getWMTSCapabilities;getLayers=function getLayers(capabilites,requestUrl){return ServiceLayerUtils.getWMTSLayers(capabilites,requestUrl,mapCrs)}}else if(type==="wms"){getCapabilities=ServiceLayerUtils.getWMSCapabilities;getLayers=function getLayers(capabilites,requestUrl){return ServiceLayerUtils.getWMSLayers(capabilites,requestUrl,true)}}else if(type==="wfs"){getCapabilities=ServiceLayerUtils.getWFSCapabilities;getLayers=function getLayers(capabilites,requestUrl){return ServiceLayerUtils.getWFSLayers(capabilites,requestUrl,mapCrs)}}getCapabilities(serviceUrl).then(function(_ref3){var capabilities=_ref3.capabilities,requestUrl=_ref3.requestUrl;var layers=getLayers(capabilities,requestUrl);var _iterator3=_createForOfIteratorHelper(layerConfigs),_step3;try{var _loop=function _loop(){var _LayerUtils$searchSub;var layerConfig=_step3.value;var layer=LayerUtils.matchSubLayer({sublayers:layers},function(l){return l.name===layerConfig.name&&(!layerConfig.style||l.style===layerConfig.style)});// Some services (i.e. wms.geo.admin.ch) have same-named sublayers
17
- layer=(_LayerUtils$searchSub=LayerUtils.searchSubLayer(layer,"name",layerConfig.name))!==null&&_LayerUtils$searchSub!==void 0?_LayerUtils$searchSub:layer;if(layer){layer=_objectSpread(_objectSpread({},layer),{},{id:layerConfig.id,opacity:layerConfig.opacity,visibility:layerConfig.visibility,style:layerConfig.style||layer.style,role:LayerRole.USERLAYER});callback(layerConfig.id,layer)}else{// eslint-disable-next-line
17
+ layer=(_LayerUtils$searchSub=LayerUtils.searchSubLayer(layer,"name",layerConfig.name))!==null&&_LayerUtils$searchSub!==void 0?_LayerUtils$searchSub:layer;if(layer){layer=_objectSpread(_objectSpread({},layer),{},{id:layerConfig.id,opacity:layerConfig.opacity,visibility:layerConfig.visibility,style:layerConfig.style||layer.style,role:LayerRole.USERLAYER});if(layer.type==="wms"){layer.params={LAYERS:layerConfig.name}}callback(layerConfig.id,layer)}else{// eslint-disable-next-line
18
18
  console.warn("Could not find layer "+layerConfig.name);callback(layerConfig.id,null)}};for(_iterator3.s();!(_step3=_iterator3.n()).done;){_loop()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}})["catch"](function(){// eslint-disable-next-line
19
19
  console.warn("Failed to read "+serviceUrl);var _iterator4=_createForOfIteratorHelper(layerConfigs),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var layerConfig=_step4.value;callback(layerConfig.id,null)}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}})},getDCPTypes:function getDCPTypes(dcpTypes){var result={};var _iterator5=_createForOfIteratorHelper(MiscUtils.ensureArray(dcpTypes)),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var dcpType=_step5.value;result=deepmerge(result,dcpType)}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}return result},mergeCalledServiceUrlQuery:function mergeCalledServiceUrlQuery(capabilityUrl,calledServiceUrlParts){if(ConfigUtils.getConfigProp("trustWmsCapabilityURLs")){return url.format(capabilityUrl)}try{var _calledServiceUrlPart;var urlParts=url.parse(capabilityUrl,true);urlParts.host=calledServiceUrlParts.host;urlParts.protocol=(_calledServiceUrlPart=calledServiceUrlParts.protocol)!==null&&_calledServiceUrlPart!==void 0?_calledServiceUrlPart:location.protocol;urlParts.query=_objectSpread(_objectSpread({},calledServiceUrlParts.query),urlParts.query);delete urlParts.search;return url.format(urlParts)}catch(e){return url.format(capabilityUrl)}}};export default ServiceLayerUtils;