qwc2 2025.6.10 → 2025.6.13

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qwc2",
3
- "version": "2025.06.10",
3
+ "version": "2025.06.13",
4
4
  "description": "QGIS Web Client",
5
5
  "author": "Sourcepole AG",
6
6
  "license": "BSD-2-Clause",
@@ -17,7 +17,7 @@
17
17
  ],
18
18
  "dependencies": {
19
19
  "@furkot/webfonts-generator": "^2.0.2",
20
- "@giro3d/giro3d": "^0.42.4",
20
+ "@giro3d/giro3d": "^0.43.0",
21
21
  "@kayahr/text-encoding": "^2.0.0",
22
22
  "@loaders.gl/core": "^4.3.3",
23
23
  "@loaders.gl/shapefile": "^4.3.3",
@@ -31,4 +31,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
31
31
  * render() { return ...; }
32
32
  * };
33
33
  * ```
34
- */var MapInfoTooltip=/*#__PURE__*/function(_React$Component){function MapInfoTooltip(){var _this;_classCallCheck(this,MapInfoTooltip);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,MapInfoTooltip,[].concat(args));_defineProperty(_this,"state",{point:null,elevation:null,extraInfo:null});_defineProperty(_this,"clear",function(){_this.setState({point:null,height:null,extraInfo:null})});return _this}_inherits(MapInfoTooltip,_React$Component);return _createClass(MapInfoTooltip,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this2=this;if(!this.props.enabled&&this.state.point){this.clear();return}var newPoint=this.props.map.click;if(!newPoint||newPoint.button!==2){if(this.state.point){this.clear()}}else{var oldPoint=prevProps.map.click;if(!oldPoint||oldPoint.pixel[0]!==newPoint.pixel[0]||oldPoint.pixel[1]!==newPoint.pixel[1]){this.setState({point:newPoint,elevation:null});var pos=newPoint.coordinate;var crs=this.props.map.projection;getElevationInterface().getElevation(pos,crs).then(function(elevation){var elevationPrecision=_this2.props.elevationPrecision;_this2.setState({elevation:Math.round(elevation*Math.pow(10,elevationPrecision))/Math.pow(10,elevationPrecision)})})["catch"](function(){});var mapInfoService=ConfigUtils.getConfigProp("mapInfoService");if(mapInfoService){axios.get(mapInfoService,{params:{pos:pos.join(","),crs:crs}}).then(function(response){_this2.setState({extraInfo:response.data.results})})["catch"](function(){})}}}}},{key:"render",value:function render(){var _this3=this;if(!this.state.point){return null}var info=[];var projections=[this.props.map.displayCrs];if(!projections.includes(this.props.map.projection)){projections.push(this.props.map.projection)}if(this.props.includeWGS84&&!projections.includes("EPSG:4326")){projections.push("EPSG:4326")}projections.map(function(crs){var coo=CoordinatesUtils.reproject(_this3.state.point.coordinate,_this3.props.map.projection,crs);var decimals=CoordinatesUtils.getPrecision(crs);info.push([(CoordinatesUtils.getAvailableCRS()[crs]||{label:crs}).label,coo.map(function(x){return LocaleUtils.toLocaleFixed(x,decimals)}).join(", ")])});if(this.state.elevation){info.push([LocaleUtils.tr("mapinfotooltip.elevation"),this.state.elevation+" m"])}if(this.state.extraInfo){info.push.apply(info,_toConsumableArray(this.state.extraInfo))}var title=LocaleUtils.tr("mapinfotooltip.title");var pixel=MapUtils.getHook(MapUtils.GET_PIXEL_FROM_COORDINATES_HOOK)(this.state.point.coordinate);var style={left:this.props.mapMargins.left+pixel[0]+"px",top:this.props.mapMargins.top+pixel[1]+"px"};var text=info.map(function(entry){return entry.join(": ")}).join("\n");var routingButtons=null;if(ConfigUtils.havePlugin("Routing")){var prec=CoordinatesUtils.getPrecision(this.props.map.displayCrs);var pos=CoordinatesUtils.reproject(this.state.point.coordinate,this.props.map.projection,this.props.map.displayCrs);var point={text:pos.map(function(x){return x.toFixed(prec)}).join(", ")+" ("+this.props.map.displayCrs+")",pos:_toConsumableArray(pos),crs:this.props.map.displayCrs};routingButtons=/*#__PURE__*/React.createElement("table",{className:"mapinfotooltip-body-routing"},/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,LocaleUtils.tr("routing.route"),":")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{from:point})}},LocaleUtils.tr("routing.fromhere")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{to:point})}},LocaleUtils.tr("routing.tohere")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{via:point})}},LocaleUtils.tr("routing.addviapoint"))))),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,LocaleUtils.tr("routing.reachability"),":")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{isocenter:point})}},LocaleUtils.tr("routing.isocenter")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{isoextracenter:point})}},LocaleUtils.tr("routing.isoextracenter")))))))}return/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip",style:style},/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-window"},/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-titlebar"},/*#__PURE__*/React.createElement("span",{className:"mapinfotooltip-title"},title),/*#__PURE__*/React.createElement(CopyButton,{buttonClass:"mapinfotooltip-button",text:text}),/*#__PURE__*/React.createElement(Icon,{className:"mapinfotooltip-button",icon:"remove",onClick:this.clear})),/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-body"},/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,info.map(function(entry,index){return/*#__PURE__*/React.createElement("tr",{key:"row"+index},/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,entry[0],":")),/*#__PURE__*/React.createElement("td",null,entry[1]))}))),routingButtons,this.props.plugins.map(function(Plugin,idx){return/*#__PURE__*/React.createElement(Plugin,{closePopup:_this3.clear,key:idx,point:_this3.state.point,projection:_this3.props.map.projection})}))))}}])}(React.Component);_defineProperty(MapInfoTooltip,"propTypes",{/** The number of decimal places to display for elevation values. */elevationPrecision:PropTypes.number,enabled:PropTypes.bool,includeWGS84:PropTypes.bool,map:PropTypes.object,mapMargins:PropTypes.object,/** Additional plugin components for the map info tooltip. */plugins:PropTypes.array,setCurrentTask:PropTypes.func});_defineProperty(MapInfoTooltip,"defaultProps",{elevationPrecision:0,includeWGS84:true,plugins:[]});export default(function(plugins){return connect(function(state){return{mapMargins:state.windows.mapMargins,enabled:state.task.identifyEnabled,map:state.map,plugins:plugins}},{setCurrentTask:setCurrentTask})(MapInfoTooltip)});
34
+ */var MapInfoTooltip=/*#__PURE__*/function(_React$Component){function MapInfoTooltip(){var _this;_classCallCheck(this,MapInfoTooltip);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,MapInfoTooltip,[].concat(args));_defineProperty(_this,"state",{point:null,elevation:null,extraInfo:null});_defineProperty(_this,"clear",function(){_this.setState({point:null,height:null,extraInfo:null})});return _this}_inherits(MapInfoTooltip,_React$Component);return _createClass(MapInfoTooltip,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this2=this;if(!this.props.enabled&&this.state.point){this.clear();return}var newPoint=this.props.map.click;if(!newPoint||newPoint.button!==2){if(this.state.point){this.clear()}}else{var oldPoint=prevProps.map.click;if(!oldPoint||oldPoint.pixel[0]!==newPoint.pixel[0]||oldPoint.pixel[1]!==newPoint.pixel[1]){this.setState({point:newPoint,elevation:null,extraInfo:null});var pos=newPoint.coordinate;var crs=this.props.map.projection;getElevationInterface().getElevation(pos,crs).then(function(elevation){var elevationPrecision=_this2.props.elevationPrecision;_this2.setState({elevation:Math.round(elevation*Math.pow(10,elevationPrecision))/Math.pow(10,elevationPrecision)})})["catch"](function(){});var mapInfoService=ConfigUtils.getConfigProp("mapInfoService");if(mapInfoService){axios.get(mapInfoService,{params:{pos:pos.join(","),crs:crs}}).then(function(response){_this2.setState({extraInfo:response.data.results})})["catch"](function(){})}}}}},{key:"render",value:function render(){var _this3=this;if(!this.state.point){return null}var info=[];var projections=[this.props.map.displayCrs];if(!projections.includes(this.props.map.projection)){projections.push(this.props.map.projection)}if(this.props.includeWGS84&&!projections.includes("EPSG:4326")){projections.push("EPSG:4326")}projections.map(function(crs){var coo=CoordinatesUtils.reproject(_this3.state.point.coordinate,_this3.props.map.projection,crs);var decimals=CoordinatesUtils.getPrecision(crs);info.push([(CoordinatesUtils.getAvailableCRS()[crs]||{label:crs}).label,coo.map(function(x){return LocaleUtils.toLocaleFixed(x,decimals)}).join(", ")])});if(this.state.elevation){info.push([LocaleUtils.tr("mapinfotooltip.elevation"),this.state.elevation+" m"])}if(this.state.extraInfo){info.push.apply(info,_toConsumableArray(this.state.extraInfo))}var title=LocaleUtils.tr("mapinfotooltip.title");var pixel=MapUtils.getHook(MapUtils.GET_PIXEL_FROM_COORDINATES_HOOK)(this.state.point.coordinate);var style={left:this.props.mapMargins.left+pixel[0]+"px",top:this.props.mapMargins.top+pixel[1]+"px"};var text=info.map(function(entry){return entry.join(": ")}).join("\n");var routingButtons=null;if(ConfigUtils.havePlugin("Routing")){var prec=CoordinatesUtils.getPrecision(this.props.map.displayCrs);var pos=CoordinatesUtils.reproject(this.state.point.coordinate,this.props.map.projection,this.props.map.displayCrs);var point={text:pos.map(function(x){return x.toFixed(prec)}).join(", ")+" ("+this.props.map.displayCrs+")",pos:_toConsumableArray(pos),crs:this.props.map.displayCrs};routingButtons=/*#__PURE__*/React.createElement("table",{className:"mapinfotooltip-body-routing"},/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,LocaleUtils.tr("routing.route"),":")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{from:point})}},LocaleUtils.tr("routing.fromhere")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{to:point})}},LocaleUtils.tr("routing.tohere")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{via:point})}},LocaleUtils.tr("routing.addviapoint"))))),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,LocaleUtils.tr("routing.reachability"),":")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{isocenter:point})}},LocaleUtils.tr("routing.isocenter")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{isoextracenter:point})}},LocaleUtils.tr("routing.isoextracenter")))))))}return/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip",style:style},/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-window"},/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-titlebar"},/*#__PURE__*/React.createElement("span",{className:"mapinfotooltip-title"},title),/*#__PURE__*/React.createElement(CopyButton,{buttonClass:"mapinfotooltip-button",text:text}),/*#__PURE__*/React.createElement(Icon,{className:"mapinfotooltip-button",icon:"remove",onClick:this.clear})),/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-body"},/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,info.map(function(entry,index){return/*#__PURE__*/React.createElement("tr",{key:"row"+index},/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,entry[0],":")),/*#__PURE__*/React.createElement("td",null,entry[1]))}))),routingButtons,this.props.plugins.map(function(Plugin,idx){return/*#__PURE__*/React.createElement(Plugin,{closePopup:_this3.clear,key:idx,point:_this3.state.point,projection:_this3.props.map.projection})}))))}}])}(React.Component);_defineProperty(MapInfoTooltip,"propTypes",{/** The number of decimal places to display for elevation values. */elevationPrecision:PropTypes.number,enabled:PropTypes.bool,includeWGS84:PropTypes.bool,map:PropTypes.object,mapMargins:PropTypes.object,/** Additional plugin components for the map info tooltip. */plugins:PropTypes.array,setCurrentTask:PropTypes.func});_defineProperty(MapInfoTooltip,"defaultProps",{elevationPrecision:0,includeWGS84:true,plugins:[]});export default(function(plugins){return connect(function(state){return{mapMargins:state.windows.mapMargins,enabled:state.task.identifyEnabled,map:state.map,plugins:plugins}},{setCurrentTask:setCurrentTask})(MapInfoTooltip)});
@@ -18,6 +18,6 @@ var added=false;if(_this.props.mapObj.snapping.enabled){for(var i=0;i<interactio
18
18
  var scale=MapUtils.computeForZoom(_this.props.mapObj.scales,_this.props.mapObj.zoom);var snapLayers=(snappingConfig.snaplayers||[]).reduce(function(res,cur){if(cur.min!==undefined&&cur.min!==null&&scale<cur.min){// Below scale range
19
19
  return res}if(cur.max!==undefined&&cur.max!==null&&scale>=cur.max){// Above scale range
20
20
  return res}return[].concat(_toConsumableArray(res),[cur.name])},[]);// Gather local snap layers
21
- var snapToWfs=scale<snappingConfig.wfsMaxScale;var localLayers=[];_this.props.layers.forEach(function(layer){if(layer.role===LayerRole.USERLAYER&&(layer.type==="vector"||layer.type==="wfs"&&snapToWfs)){var olLayer=_this.props.map.getLayers().getArray().find(function(l){return l.get("id")===layer.id});if(olLayer&&olLayer.getSource()&&olLayer.getSource().getFeaturesInExtent){localLayers.push(olLayer)}}});_this.setState({reqId:null,havesnaplayers:!isEmpty(snapLayers)||!isEmpty(localLayers)});if(!_this.snapInteraction.getMap()||!_this.snapInteraction.getActive()){return}if(snapLayers.length===0){_this.addLocalSnapFeatures(localLayers);return}var xmin=_this.props.mapObj.bbox.bounds[0];var ymin=_this.props.mapObj.bbox.bounds[1];var xmax=_this.props.mapObj.bbox.bounds[2];var ymax=_this.props.mapObj.bbox.bounds[3];var filterGeom=VectorLayerUtils.geoJSONGeomToWkt({type:"Polygon",coordinates:[[[xmin,ymin],[xmax,ymin],[xmax,ymax],[xmin,ymax],[xmin,ymin]]]});var options={LAYERATTRIBS:JSON.stringify([]),with_htmlcontent:false,with_bbox:false,feature_count:snappingConfig.featureCount||500};var request=IdentifyUtils.buildFilterRequest(themeLayer,snapLayers.join(","),filterGeom,_this.props.mapObj,options);var reqId=uuidv1();_this.setState({reqId:reqId});IdentifyUtils.sendRequest(request,function(response){if(_this.state.reqId!==reqId){return}if(response){var result=IdentifyUtils.parseXmlResponse(response,_this.props.mapObj.projection);var features=Object.values(result).reduce(function(res,cur){return[].concat(_toConsumableArray(res),_toConsumableArray(cur))},[]);var format=new ol.format.GeoJSON;var olFeatures=format.readFeatures({type:"FeatureCollection",features:features.map(function(feature){return _objectSpread(_objectSpread({},feature),{},{id:uuidv1()})})});_this.source.addFeatures(olFeatures);// Add features from local layers
21
+ var snapToWfs=scale<snappingConfig.wfsMaxScale;var localLayers=[];_this.props.layers.forEach(function(layer){if(layer.role===LayerRole.USERLAYER&&(layer.type==="vector"||layer.type==="wfs"&&snapToWfs)){var olLayer=_this.props.map.getLayers().getArray().find(function(l){return l.get("id")===layer.id});if(olLayer&&olLayer.getSource()&&olLayer.getSource().getFeaturesInExtent){localLayers.push(olLayer)}}});_this.setState({reqId:null,havesnaplayers:!isEmpty(snapLayers)||!isEmpty(localLayers)});if(!_this.snapInteraction.getMap()||!_this.snapInteraction.getActive()){return}if(snapLayers.length===0){_this.addLocalSnapFeatures(localLayers);return}var xmin=_this.props.mapObj.bbox.bounds[0];var ymin=_this.props.mapObj.bbox.bounds[1];var xmax=_this.props.mapObj.bbox.bounds[2];var ymax=_this.props.mapObj.bbox.bounds[3];var filterGeom=VectorLayerUtils.geoJSONGeomToWkt({type:"Polygon",coordinates:[[[xmin,ymin],[xmax,ymin],[xmax,ymax],[xmin,ymax],[xmin,ymin]]]});var options={LAYERATTRIBS:JSON.stringify(snapLayers.reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,[]))},{})),with_htmlcontent:false,with_bbox:false,feature_count:snappingConfig.featureCount||500};var request=IdentifyUtils.buildFilterRequest(themeLayer,snapLayers.join(","),filterGeom,_this.props.mapObj,options);var reqId=uuidv1();_this.setState({reqId:reqId});IdentifyUtils.sendRequest(request,function(response){if(_this.state.reqId!==reqId){return}if(response){var result=IdentifyUtils.parseXmlResponse(response,_this.props.mapObj.projection);var features=Object.values(result).reduce(function(res,cur){return[].concat(_toConsumableArray(res),_toConsumableArray(cur))},[]);var format=new ol.format.GeoJSON;var olFeatures=format.readFeatures({type:"FeatureCollection",features:features.map(function(feature){return _objectSpread(_objectSpread({},feature),{},{id:uuidv1()})})});_this.source.addFeatures(olFeatures);// Add features from local layers
22
22
  _this.addLocalSnapFeatures(localLayers);_this.setState({invalid:false,reqId:null,havesnaplayers:true})}else{_this.setState({reqId:null})}})});_defineProperty(_this,"addLocalSnapFeatures",function(localLayers){var extent=_this.props.mapObj.bbox.bounds;var projection=ol.proj.get(_this.props.mapObj.projection);localLayers.forEach(function(olLayer){var olFeatures=olLayer.getSource().getFeaturesInExtent(extent,projection);_this.source.addFeatures(olFeatures)})});_this.source=new ol.source.Vector;_this.snapInteraction=new SnapInteraction({source:_this.source,edge:_this.snapToEdge(props.mapObj.snapping),vertex:_this.snapToVertex(props.mapObj.snapping)});_this.snapInteraction.setActive(_this.props.mapObj.snapping.active);_this.inEventHandler=false;props.map.getInteractions().on("add",_this.handleInteractionAdded);props.map.getInteractions().on("remove",_this.handleInteractionRemoved);MapUtils.registerHook(MapUtils.GET_SNAPPED_COORDINATES_FROM_PIXEL_HOOK,function(pixel){var coo=props.map.getCoordinateFromPixel(pixel);var snapResult=_this.snapInteraction.snapTo(pixel,coo,props.map);return snapResult?props.map.getCoordinateFromPixel(snapResult.vertexPixel):coo});return _this}_inherits(SnappingSupport,_React$Component);return _createClass(SnappingSupport,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){var _this2=this;if(this.state.drawing&&(this.props.mapObj.bbox!==prevProps.mapObj.bbox||this.props.theme!==prevProps.theme)){this.setState({invalid:true});this.refreshFeatureCache(true)}else if(this.state.drawing&&this.props.layers!==prevProps.layers){var layersChanged=this.props.layers.find(function(layer){if(layer.role===LayerRole.THEME){var prev=prevProps.layers.find(function(prevLayer){return layer.id===prevLayer.id});return!prev||layer.rev!==prev.rev}else if(layer.role===LayerRole.USERLAYER&&layer.type==="vector"){var _prev=prevProps.layers.find(function(prevLayer){return layer.id===prevLayer.id});return!_prev||_prev.features!==layer.features}return false});if(layersChanged){this.setState({invalid:true});// Delay to avoid refreshing the cache before QGIS Server can pick up the new feature
23
23
  setTimeout(function(){_this2.refreshFeatureCache(true)},1500)}}if(this.props.mapObj.snapping.active!==prevProps.mapObj.snapping.active||this.state.drawing!==prevState.drawing){this.snapInteraction.setActive(this.props.mapObj.snapping.active!==false);this.snapInteraction.setSnapEdge(this.snapToEdge(this.props.mapObj.snapping));this.snapInteraction.setSnapVertex(this.snapToVertex(this.props.mapObj.snapping));if(this.props.mapObj.snapping.active){this.refreshFeatureCache()}}}},{key:"render",value:function render(){var _this3=this;if(!this.state.drawing||!this.props.mapObj.snapping.enabled){return null}var disabled=!this.state.havesnaplayers||this.props.mapObj.snapping.active===false;var toolbarClass=disabled?"snapping-toolbar-inactive":"";var snapEdge=this.snapToEdge(this.props.mapObj.snapping);var snapVertex=this.snapToVertex(this.props.mapObj.snapping);return/*#__PURE__*/React.createElement("div",{className:"snapping-toolbar-container"},/*#__PURE__*/React.createElement("div",{className:toolbarClass},this.state.reqId!==null?/*#__PURE__*/React.createElement(Spinner,null):/*#__PURE__*/React.createElement("span",null,/*#__PURE__*/React.createElement("button",{className:"button"+(snapVertex?" pressed":""),onClick:function onClick(){return _this3.toggleSnap("vertex")},title:LocaleUtils.tr("snapping.vertex")},/*#__PURE__*/React.createElement(Icon,{icon:"snap_vertex",size:"large"})),/*#__PURE__*/React.createElement("button",{className:"button"+(snapEdge?" pressed":""),onClick:function onClick(){return _this3.toggleSnap("edge")},title:LocaleUtils.tr("snapping.edge")},/*#__PURE__*/React.createElement(Icon,{icon:"snap_edge",size:"large"}))),"\xA0",this.state.reqId?LocaleUtils.tr("snapping.loading"):LocaleUtils.tr("snapping.snappingenabled")))}}])}(React.Component);_defineProperty(SnappingSupport,"propTypes",{layers:PropTypes.array,map:PropTypes.object,mapObj:PropTypes.object,setSnappingConfig:PropTypes.func,task:PropTypes.string,theme:PropTypes.object});export default connect(function(state){return{layers:state.layers.flat,mapObj:state.map,task:state.task.id,theme:state.theme.current}},{setSnappingConfig:setSnappingConfig})(SnappingSupport);
@@ -5,7 +5,7 @@ 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 axios from"axios";import geojsonBbox from"geojson-bounding-box";import isEmpty from"lodash.isempty";import ol from"openlayers";import url from"url";import{v1 as uuidv1}from"uuid";import{LayerRole}from"../actions/layers";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LayerUtils from"../utils/LayerUtils";import MapUtils from"../utils/MapUtils";import VectorLayerUtils from"./VectorLayerUtils";function identifyRequestParams(layer,queryLayers,projection,params){var _layer$format;var format="text/plain";var infoFormats=layer.infoFormats||[];if(infoFormats.includes("text/xml")&&(layer.serverType==="qgis"||infoFormats.length===1)){format="text/xml"}else if(infoFormats.includes("application/geojson")){format="application/geojson"}else if(infoFormats.includes("application/geo+json")){format="application/geo+json"}else if(infoFormats.includes("application/json")){format="application/json"}else if(infoFormats.includes("text/xml;subtype=gml/3.2.1")){format="text/xml;subtype=gml/3.2.1"}else if(infoFormats.includes("text/xml;subtype=gml/3.2.0")){format="text/xml;subtype=gml/3.2.0"}else if(infoFormats.includes("text/xml;subtype=gml/3.2")){format="text/xml;subtype=gml/3.2"}else if(infoFormats.includes("text/xml;subtype=gml/3.1.1")){format="text/xml;subtype=gml/3.1.1"}else if(infoFormats.includes("text/xml;subtype=gml/3.1.0")){format="text/xml;subtype=gml/3.1.0"}else if(infoFormats.includes("text/xml;subtype=gml/3.1")){format="text/xml;subtype=gml/3.1"}else if(infoFormats.includes("text/xml;subtype=gml/3.0")){format="text/xml;subtype=gml/3.0"}else if(infoFormats.includes("text/html")){format="text/html"}else if(infoFormats.includes("application/vnd.ogc.gml")){format="application/vnd.ogc.gml"}var styles=(layer.params.STYLES||"").split(",");var styleMap=layer.params.LAYERS.split(",").reduce(function(res,lyr,idx){var _styles$idx;return _objectSpread(_objectSpread({},res),{},_defineProperty({},lyr,(_styles$idx=styles[idx])!==null&&_styles$idx!==void 0?_styles$idx:""))});var queryStyles=queryLayers.split(",").map(function(lyr){var _styleMap$lyr;return(_styleMap$lyr=styleMap[lyr])!==null&&_styleMap$lyr!==void 0?_styleMap$lyr:""}).join(",");return{url:layer.featureInfoUrl.split("?")[0],params:_objectSpread(_objectSpread(_objectSpread({},url.parse(layer.featureInfoUrl,true).query),{},{service:"WMS",version:layer.version,request:"GetFeatureInfo",id:layer.id,layers:queryLayers,query_layers:queryLayers,styles:queryStyles,srs:projection,crs:projection,format:(_layer$format=layer.format)!==null&&_layer$format!==void 0?_layer$format:"image/png",info_format:format,with_geometry:true,with_maptip:false},layer.dimensionValues),params)}}var IdentifyUtils={getQueryLayers:function getQueryLayers(maplayers,map){var queryableLayers=maplayers.filter(function(l){// All non-background WMS layers with a non-empty queryLayers list
8
- return l.visibility&&l.type==="wms"&&l.role!==LayerRole.BACKGROUND&&(l.queryLayers||[]).length>0});var mapScale=MapUtils.computeForZoom(map.scales,map.zoom);var result=[];queryableLayers.forEach(function(layer){var layers=[];var queryLayers=layer.queryLayers;for(var i=0;i<queryLayers.length;++i){if(layer.externalLayerMap&&layer.externalLayerMap[queryLayers[i]]){var sublayer=LayerUtils.searchSubLayer(layer,"name",queryLayers[i]);var sublayerVisible=LayerUtils.layerScaleInRange(sublayer,mapScale);if(!isEmpty(layer.externalLayerMap[queryLayers[i]].queryLayers)&&sublayerVisible){layers.push(layer.externalLayerMap[queryLayers[i]])}}else if(layers.length>0&&layers[layers.length-1].id===layer.id){layers[layers.length-1].queryLayers.push(queryLayers[i])}else{layers.push(_objectSpread(_objectSpread({},layer),{},{queryLayers:[queryLayers[i]]}))}}result=result.concat(layers)});return result},buildRequest:function buildRequest(layer,queryLayers,center,map){var _layer$params$FILTER;var options=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};var size=[101,101];var resolution=MapUtils.computeForZoom(map.resolutions,map.zoom);var dx=0.5*resolution*size[0];var dy=0.5*resolution*size[1];var version=layer.version;var bbox=[center[0]-dx,center[1]-dy,center[0]+dx,center[1]+dy];if(CoordinatesUtils.getAxisOrder(map.projection).substr(0,2)==="ne"&&version==="1.3.0"){bbox=[center[1]-dx,center[0]-dy,center[1]+dx,center[0]+dy]}var params=_objectSpread({height:size[0],width:size[1],feature_count:100,x:Math.round(size[0]*0.5),y:Math.round(size[1]*0.5),i:Math.round(size[0]*0.5),j:Math.round(size[1]*0.5),bbox:bbox.join(","),filter:(_layer$params$FILTER=layer.params.FILTER)!==null&&_layer$params$FILTER!==void 0?_layer$params$FILTER:""},options);return identifyRequestParams(layer,queryLayers,map.projection,params)},buildFilterRequest:function buildFilterRequest(layer,queryLayers,filterGeom,map){var options=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};var size=[101,101];var params=_objectSpread({height:size[0],width:size[1],feature_count:100,bbox:map.bbox.bounds.join(","),FILTER_GEOM:filterGeom},options);return identifyRequestParams(layer,queryLayers,map.projection,params)},sendRequest:function sendRequest(request,responseHandler){var urlParts=url.parse(request.url,true);urlParts.query=_objectSpread(_objectSpread({},urlParts.query),request.params);delete urlParts.search;var requestUrl=url.format(urlParts);var maxUrlLength=ConfigUtils.getConfigProp("wmsMaxGetUrlLength",null,2048);if(requestUrl.length>maxUrlLength){// Switch to POST if url is too long
8
+ return l.visibility&&l.type==="wms"&&l.role!==LayerRole.BACKGROUND&&(l.queryLayers||[]).length>0});var mapScale=MapUtils.computeForZoom(map.scales,map.zoom);var result=[];queryableLayers.forEach(function(layer){var layers=[];var queryLayers=layer.queryLayers;for(var i=0;i<queryLayers.length;++i){if(layer.externalLayerMap&&layer.externalLayerMap[queryLayers[i]]){var sublayer=LayerUtils.searchSubLayer(layer,"name",queryLayers[i]);var sublayerVisible=LayerUtils.layerScaleInRange(sublayer,mapScale);if(!isEmpty(layer.externalLayerMap[queryLayers[i]].queryLayers)&&sublayerVisible){layers.push(layer.externalLayerMap[queryLayers[i]])}}else if(layers.length>0&&layers[layers.length-1].id===layer.id){layers[layers.length-1].queryLayers.push(queryLayers[i])}else{layers.push(_objectSpread(_objectSpread({},layer),{},{queryLayers:[queryLayers[i]]}))}}result=result.concat(layers)});return result},buildRequest:function buildRequest(layer,queryLayers,center,map){var _layer$params$FILTER;var options=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};var size=[101,101];var resolution=MapUtils.computeForZoom(map.resolutions,map.zoom);var dx=0.5*resolution*size[0];var dy=0.5*resolution*size[1];var version=layer.version;var bbox=[center[0]-dx,center[1]-dy,center[0]+dx,center[1]+dy];if(CoordinatesUtils.getAxisOrder(map.projection).substr(0,2)==="ne"&&version==="1.3.0"){bbox=[center[1]-dx,center[0]-dy,center[1]+dx,center[0]+dy]}var params=_objectSpread({height:size[0],width:size[1],feature_count:100,x:Math.round(size[0]*0.5),y:Math.round(size[1]*0.5),i:Math.round(size[0]*0.5),j:Math.round(size[1]*0.5),bbox:bbox.join(","),filter:(_layer$params$FILTER=layer.params.FILTER)!==null&&_layer$params$FILTER!==void 0?_layer$params$FILTER:""},options);return identifyRequestParams(layer,queryLayers,map.projection,params)},buildFilterRequest:function buildFilterRequest(layer,queryLayers,filterGeom,map){var options=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};var params=_objectSpread({feature_count:100,FILTER_GEOM:filterGeom},options);return identifyRequestParams(layer,queryLayers,map.projection,params)},sendRequest:function sendRequest(request,responseHandler){var urlParts=url.parse(request.url,true);urlParts.query=_objectSpread(_objectSpread({},urlParts.query),request.params);delete urlParts.search;var requestUrl=url.format(urlParts);var maxUrlLength=ConfigUtils.getConfigProp("wmsMaxGetUrlLength",null,2048);if(requestUrl.length>maxUrlLength){// Switch to POST if url is too long
9
9
  var reqUrlParts=requestUrl.split("?");var options={headers:{"content-type":"application/x-www-form-urlencoded"}};axios.post(reqUrlParts[0],reqUrlParts[1],options).then(function(postResp){responseHandler(postResp.data)})["catch"](function(){axios.get(request.url,{params:request.params}).then(function(getResp){responseHandler(getResp.data)})["catch"](function(){responseHandler(null)})})}else{axios.get(request.url,{params:request.params}).then(function(getResp){responseHandler(getResp.data)})["catch"](function(){responseHandler(null)})}},parseResponse:function parseResponse(response,layer,format,clickPoint,projection,featureInfoReturnsLayerName){var decimals=CoordinatesUtils.getPrecision(projection);var posstr=clickPoint?clickPoint[0].toFixed(decimals)+", "+clickPoint[1].toFixed(decimals):"";var results={};if(["application/json","application/geojson","application/geo+json","GeoJSON"].includes(format)){results=IdentifyUtils.parseGeoJSONResponse(response,projection,layer)}else if(format==="text/xml"){results=IdentifyUtils.parseXmlResponse(response,projection,layer,posstr,featureInfoReturnsLayerName)}else if(format==="application/vnd.ogc.gml"){results=IdentifyUtils.parseGmlResponse(response,projection,layer,posstr)}else if(format.startsWith("text/xml;subtype=gml/3.1")||format.startsWith("text/xml;subtype=gml/3.0")){results=IdentifyUtils.parseGml3Response(response,projection,layer)}else if(format.startsWith("text/xml;subtype=gml/3.2")){results=IdentifyUtils.parseGml32Response(response,projection,layer)}else if(format==="text/plain"){results[layer.name]=[{type:"text",text:response,id:posstr,layername:layer.name,layertitle:layer.title}]}else if(format==="text/html"){results[layer.name]=[{type:"html",text:response,id:posstr,layername:layer.name,layertitle:layer.title}]}// Add clickPos, bounding box, displayname and layer name / title
10
10
  for(var _i=0,_Object$keys=Object.keys(results);_i<_Object$keys.length;_i++){var layername=_Object$keys[_i];var _iterator=_createForOfIteratorHelper(results[layername]),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var _item$layertitle;var item=_step.value;if(item.type==="Feature"&&!item.bbox&&item.geometry){item.crs=projection;item.bbox=geojsonBbox(item)}item.clickPos=clickPoint;item.displayname=IdentifyUtils.determineDisplayName(layer,layername,item);item.layertitle=(_item$layertitle=item.layertitle)!==null&&_item$layertitle!==void 0?_item$layertitle:layername}}catch(err){_iterator.e(err)}finally{_iterator.f()}}return results},determineDisplayName:function determineDisplayName(layer,layername,item){var properties=item.properties||{};if(item.displayfield){if(properties[item.displayfield]&&properties[item.displayfield][0]!=="<"){return properties[item.displayfield]}}var sublayer=LayerUtils.searchSubLayer(layer,"name",layername);if(sublayer&&sublayer.displayField){if(properties[sublayer.displayField]&&properties[sublayer.displayField][0]!=="<"){return properties[sublayer.displayField]}}return properties.name||properties.Name||properties.NAME||item.id},parseXmlFeature:function parseXmlFeature(feature,geometrycrs,id,featurereport,displayfield,layername,layertitle,layerinfo){var featureResult={};featureResult.type="Feature";featureResult.id=id;featureResult.featurereport=featurereport;featureResult.displayfield=displayfield;featureResult.layername=layername;featureResult.layertitle=layertitle;featureResult.layerinfo=layerinfo;var bboxes=feature.getElementsByTagName("BoundingBox");if(bboxes.length>0){var bbox=bboxes[0];var crs=bbox.attributes.CRS?bbox.attributes.CRS.value:bbox.attributes.SRS.value;featureResult.bbox=[parseFloat(bbox.attributes.minx.value),parseFloat(bbox.attributes.miny.value),parseFloat(bbox.attributes.maxx.value),parseFloat(bbox.attributes.maxy.value)];featureResult.crs=crs}featureResult.properties={};var attrmapping={};var attributes=feature.getElementsByTagName("Attribute");for(var i=0;i<attributes.length;++i){var attribute=attributes[i];if(attribute.attributes.name.value==="geometry"){var wkt=attribute.attributes.value.value;var geoJsonFeature=VectorLayerUtils.wktToGeoJSON(wkt,geometrycrs,featureResult.crs);if(geoJsonFeature){featureResult.geometry=geoJsonFeature.geometry}}else{featureResult.properties[attribute.attributes.name.value]=attribute.attributes.value.value;if(attribute.attributes.attrname){attrmapping[attribute.attributes.name.value]=attribute.attributes.attrname.value}}}var htmlContent=feature.getElementsByTagName("HtmlContent");if(htmlContent.length>0){featureResult.properties.htmlContent=htmlContent[0].textContent;featureResult.properties.htmlContentInline=htmlContent[0].getAttribute("inline")==="1"||htmlContent[0].getAttribute("inline")==="true"}if(!isEmpty(attrmapping)){featureResult.attribnames=attrmapping}return featureResult},parseXmlResponse:function parseXmlResponse(response,geometrycrs,layer){var _this=this;var posstr=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var featureInfoReturnsLayerName=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var mapLayers=arguments.length>5&&arguments[5]!==undefined?arguments[5]:null;var parser=new DOMParser;var doc=parser.parseFromString(response,"text/xml");var layersEl=[].slice.call(doc.firstChild.getElementsByTagName("Layer"));var result={};var idcounter=0;var _iterator2=_createForOfIteratorHelper(layersEl),_step2;try{var _loop=function _loop(){var layerEl=_step2.value;var featurereport=layerEl.attributes.featurereport?layerEl.attributes.featurereport.value:null;var displayfield=layerEl.attributes.displayfield?layerEl.attributes.displayfield.value:null;var layername="";var layertitle="";if(layerEl.attributes.layername){layername=layerEl.attributes.layername.value;layertitle=layerEl.attributes.name.value}else if(featureInfoReturnsLayerName){var _LayerUtils$searchSub,_LayerUtils$searchSub2;layername=layerEl.attributes.name.value;layertitle=(_LayerUtils$searchSub=(_LayerUtils$searchSub2=LayerUtils.searchSubLayer(layer,"name",layername))===null||_LayerUtils$searchSub2===void 0?void 0:_LayerUtils$searchSub2.title)!==null&&_LayerUtils$searchSub!==void 0?_LayerUtils$searchSub:layername}else{var _LayerUtils$searchSub3,_LayerUtils$searchSub4;layertitle=layerEl.attributes.layername.value;layername=(_LayerUtils$searchSub3=(_LayerUtils$searchSub4=LayerUtils.searchSubLayer(layer,"title",layertitle))===null||_LayerUtils$searchSub4===void 0?void 0:_LayerUtils$searchSub4.name)!==null&&_LayerUtils$searchSub3!==void 0?_LayerUtils$searchSub3:layertitle}var layerinfo=layerEl.attributes.layerinfo?layerEl.attributes.layerinfo.value:null;var features=[].slice.call(layerEl.getElementsByTagName("Feature"));if(features.length>0){result[layername]=features.map(function(feature){return _this.parseXmlFeature(feature,geometrycrs,feature.attributes.id.value,featurereport,displayfield,layername,layertitle,layerinfo)})}else{var attributes=[].slice.call(layerEl.getElementsByTagName("Attribute"));if(attributes.length>0){var id=posstr||""+idcounter++;result[layername]=[_this.parseXmlFeature(layerEl,geometrycrs,id,featurereport,displayfield,layername,layertitle,layerinfo)]}}};for(_iterator2.s();!(_step2=_iterator2.n()).done;){_loop()}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return result},parseGeoJSONResponse:function parseGeoJSONResponse(response,geometrycrs,layer){var result={};(response.features||[]).map(function(feature){// Deduce layer name as far as possible from feature id
11
11
  var id=feature.id||(feature.properties||{}).OBJECTID||uuidv1();if(result[layer.name]===undefined){result[layer.name]=[]}var geometry=feature.geometry;if(geometry&&response.crs){var _response$crs$propert,_response$crs$propert2;// Reproject geometry only if there is crs information in GetFeatureInfo response
@@ -53,4 +53,4 @@ params.LAYERS.push("wfs:".concat(layer.url,"#").concat(layer.name));params.OPACI
53
53
  var printBgLayerName=printBackgroundLayer;if(Array.isArray(printBackgroundLayer)){printBgLayerName=null;for(var i=0;i<printBackgroundLayer.length;++i){printBgLayerName=printBackgroundLayer[i].name;if(printScale<=printBackgroundLayer[i].maxScale){break}}}if(printBgLayerName){var match=null;if((match=printBgLayerName.match(/^(\w+):(.*)#([^#]+)$/))&&match[1]==="wms"){if(printExternalLayers){var _backgroundLayer$opac;var layer={type:"wms",params:{LAYERS:match[3],OPACITIES:String((_backgroundLayer$opac=backgroundLayer.opacity)!==null&&_backgroundLayer$opac!==void 0?_backgroundLayer$opac:255),STYLES:""},url:match[2]};LayerUtils.addExternalLayerPrintParams(layer,params,printCrs,counterRef)}}else{var _backgroundLayer$opac2;params.LAYERS.push(printBgLayerName);params.OPACITIES.push(String((_backgroundLayer$opac2=backgroundLayer.opacity)!==null&&_backgroundLayer$opac2!==void 0?_backgroundLayer$opac2:255));params.COLORS.push("");params.STYLES.push("")}}}else if(printExternalLayers){// Inject client-side wms as external layer for print
54
54
  var items=backgroundLayer.type==="group"?backgroundLayer.items:[backgroundLayer];items.slice(0).reverse().forEach(function(layer){if(LayerUtils.layerScaleInRange(layer,printScale)){LayerUtils.addExternalLayerPrintParams(layer,params,printCrs,counterRef)}})}}params.LAYERS=params.LAYERS.reverse().join(",");params.OPACITIES=params.OPACITIES.reverse().join(",");params.COLORS=params.COLORS.reverse().join(",");params.STYLES=params.STYLES.reverse().join(",");return params},getTimeDimensionValues:function getTimeDimensionValues(layer){var result={names:new Set,values:new Set,attributes:{}};if(layer.visibility){(layer.dimensions||[]).forEach(function(dimension){if(dimension.units==="ISO8601"&&dimension.value){result.names.add(dimension.name);dimension.value.split(/,\s+/).filter(function(x){return x}).forEach(function(x){return result.values.add(x)});result.attributes[layer.name]=[dimension.fieldName,dimension.endFieldName]}})}(layer.sublayers||[]).forEach(function(sublayer){var sublayerResult=LayerUtils.getTimeDimensionValues(sublayer);sublayerResult.names.forEach(function(x){return result.names.add(x)});sublayerResult.values.forEach(function(x){return result.values.add(x)});result.attributes=_objectSpread(_objectSpread({},result.attributes),sublayerResult.attributes)});return result},getAttribution:function getAttribution(layer,map){var showThemeAttributionOnly=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var transformedMapBBoxes=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{};if(layer.visibility===false||showThemeAttributionOnly&&layer.role!==LayerRole.THEME){return{}}var mapScale=MapUtils.computeForZoom(map.scales,map.zoom);if(!LayerUtils.layerScaleInRange(layer,mapScale)){return{}}if(layer.bbox&&layer.bbox.bounds){var layerCrs=layer.bbox.crs||map.projection;if(!transformedMapBBoxes[layerCrs]){transformedMapBBoxes[layerCrs]=CoordinatesUtils.reprojectBbox(map.bbox.bounds,map.projection,layerCrs)}var mapbbox=transformedMapBBoxes[layerCrs];var laybbox=layer.bbox.bounds;if(mapbbox[0]>laybbox[2]||mapbbox[2]<laybbox[0]||mapbbox[1]>laybbox[3]||mapbbox[3]<laybbox[1]){// Extents don't overlap
55
55
  return{}}}var copyrights={};if(layer.sublayers){Object.assign(copyrights,layer.sublayers.reduce(function(res,sublayer){return _objectSpread(_objectSpread({},res),LayerUtils.getAttribution(sublayer,map,false,transformedMapBBoxes))},{}))}else if(layer.type==="group"&&layer.items){Object.assign(copyrights,layer.items.reduce(function(res,sublayer){return _objectSpread(_objectSpread({},res),LayerUtils.getAttribution(sublayer,map,false,transformedMapBBoxes))},{}))}if(layer.attribution&&layer.attribution.Title){var key=layer.attribution.OnlineResource||layer.attribution.Title;copyrights[key]={title:layer.attribution.OnlineResource?layer.attribution.Title:null,layers:[].concat(_toConsumableArray((copyrights[key]||{}).layers||[]),[layer])}}return copyrights},recomputeLayerBBox:function recomputeLayerBBox(layer){if(isEmpty(layer.sublayers)){return layer}var bounds=null;var newlayer=_objectSpread({},layer);newlayer.sublayers=newlayer.sublayers.map(function(sublayer){sublayer=LayerUtils.recomputeLayerBBox(sublayer);if(!bounds&&sublayer.bbox&&sublayer.bbox.bounds){bounds=CoordinatesUtils.reprojectBbox(sublayer.bbox.bounds,sublayer.bbox.crs,"EPSG:4326")}else if(bounds&&sublayer.bbox&&sublayer.bbox.bounds){var sublayerbounds=CoordinatesUtils.reprojectBbox(sublayer.bbox.bounds,sublayer.bbox.crs,"EPSG:4326");bounds=[Math.min(bounds[0],sublayerbounds[0]),Math.min(bounds[1],sublayerbounds[1]),Math.max(bounds[2],sublayerbounds[2]),Math.max(bounds[3],sublayerbounds[3])]}return sublayer});if(bounds){newlayer.bbox={bounds:bounds,crs:"EPSG:4326"}}return newlayer},propagateLayerProperty:function propagateLayerProperty(newlayer,property,value){var path=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;Object.assign(newlayer,_defineProperty({},property,value));// Don't propagate visibility for mutually exclusive groups
56
- if(newlayer.sublayers&&!(property==="visibility"&&newlayer.mutuallyExclusive)){newlayer.sublayers=newlayer.sublayers.map(function(sublayer,idx){if(path===null||!isEmpty(path)&&path[0]===idx){var newsublayer=_objectSpread({},sublayer);LayerUtils.propagateLayerProperty(newsublayer,property,value,path?path.slice(1):null);return newsublayer}else{return sublayer}})}},getLayerRefreshInterval:function getLayerRefreshInterval(layer){var _layer$refreshInterva;var refreshInterval=(_layer$refreshInterva=layer.refreshInterval)!==null&&_layer$refreshInterva!==void 0?_layer$refreshInterva:0;(layer.sublayers||[]).forEach(function(sublayer){var sublayerRefreshInterval=LayerUtils.getLayerRefreshInterval(sublayer);if(sublayerRefreshInterval>0){refreshInterval=refreshInterval>0?Math.min(refreshInterval,sublayerRefreshInterval):sublayerRefreshInterval}});return refreshInterval},collectFeatureReports:function collectFeatureReports(layers){if(!ConfigUtils.getConfigProp("documentServiceUrl")){return{}}var reports={};var _collectLayerReports=function collectLayerReports(toplayer,layer){if(layer.sublayers){var _iterator21=_createForOfIteratorHelper(layer.sublayers),_step21;try{for(_iterator21.s();!(_step21=_iterator21.n()).done;){var sublayer=_step21.value;reports=_objectSpread(_objectSpread({},reports),_collectLayerReports(toplayer,sublayer))}}catch(err){_iterator21.e(err)}finally{_iterator21.f()}}else if(layer.featureReport){var key=toplayer.url+"#"+layer.name;if(Array.isArray(layer.featureReport)){reports[key]=layer.featureReport.map(function(report){return{title:report.title,template:report.template}})}else{reports[key]=[{title:layer.title,template:layer.featureReport}]}}return reports};layers.forEach(function(layer){if(layer.role===LayerRole.THEME||layer.role===LayerRole.USERLAYER){_collectLayerReports(layer,layer)}});return reports},computeVisbilityPreset:function computeVisbilityPreset(layer){var result={};if(layer.sublayers){layer.sublayers.forEach(function(sublayer){return Object.assign(result,LayerUtils.computeVisbilityPreset(sublayer))})}else if(layer.visibility){result[layer.name]=layer.style}return result},getActiveVisibilityPreset:function getActiveVisibilityPreset(layers,presets){if(isEmpty(presets)){return null}var result={};layers.forEach(function(layer){if(layer.role===LayerRole.THEME){Object.assign(result,LayerUtils.computeVisbilityPreset(layer))}});for(var _i4=0,_Object$entries=Object.entries(presets);_i4<_Object$entries.length;_i4++){var _Object$entries$_i=_slicedToArray(_Object$entries[_i4],2),name=_Object$entries$_i[0],preset=_Object$entries$_i[1];if(isEqual(preset,result)){return name}}return null},applyVisibilityPreset:function applyVisibilityPreset(layer,preset){var newLayer=_objectSpread({},layer);if(newLayer.sublayers){var haveVisibileSublayer=false;newLayer.sublayers=newLayer.sublayers.map(function(sublayer){var newSublayer=LayerUtils.applyVisibilityPreset(sublayer,preset);haveVisibileSublayer||(haveVisibileSublayer=newSublayer.visibility===true);return newSublayer});newLayer.visibility=haveVisibileSublayer}else if(newLayer.name in preset){newLayer.visibility=true;newLayer.style=preset[newLayer.name]}else{newLayer.visibility=false}return newLayer}};export default LayerUtils;
56
+ if(newlayer.sublayers&&!(property==="visibility"&&newlayer.mutuallyExclusive)){newlayer.sublayers=newlayer.sublayers.map(function(sublayer,idx){if(path===null||!isEmpty(path)&&path[0]===idx){var newsublayer=_objectSpread({},sublayer);LayerUtils.propagateLayerProperty(newsublayer,property,value,path?path.slice(1):null);return newsublayer}else{return sublayer}})}},getLayerRefreshInterval:function getLayerRefreshInterval(layer){var _layer$refreshInterva;var refreshInterval=(_layer$refreshInterva=layer.refreshInterval)!==null&&_layer$refreshInterva!==void 0?_layer$refreshInterva:0;(layer.sublayers||[]).forEach(function(sublayer){var sublayerRefreshInterval=LayerUtils.getLayerRefreshInterval(sublayer);if(sublayerRefreshInterval>0){refreshInterval=refreshInterval>0?Math.min(refreshInterval,sublayerRefreshInterval):sublayerRefreshInterval}});return refreshInterval},collectFeatureReports:function collectFeatureReports(layers){if(!ConfigUtils.getConfigProp("documentServiceUrl")){return{}}var reports={};var _collectLayerReports=function collectLayerReports(toplayer,layer){if(layer.sublayers){var _iterator21=_createForOfIteratorHelper(layer.sublayers),_step21;try{for(_iterator21.s();!(_step21=_iterator21.n()).done;){var sublayer=_step21.value;reports=_objectSpread(_objectSpread({},reports),_collectLayerReports(toplayer,sublayer))}}catch(err){_iterator21.e(err)}finally{_iterator21.f()}}else if(layer.featureReport){var key=toplayer.url+"#"+layer.name;if(Array.isArray(layer.featureReport)){reports[key]=layer.featureReport.map(function(report){return{title:report.title,template:report.template}})}else{reports[key]=[{title:layer.title,template:layer.featureReport}]}}return reports};layers.forEach(function(layer){if(layer.role===LayerRole.THEME||layer.role===LayerRole.USERLAYER){_collectLayerReports(layer,layer)}});return reports},computeVisbilityPreset:function computeVisbilityPreset(layer){var result={};if(layer.sublayers){layer.sublayers.forEach(function(sublayer){return Object.assign(result,LayerUtils.computeVisbilityPreset(sublayer))})}else if(layer.visibility){result[layer.name]=layer.style}return result},getActiveVisibilityPreset:function getActiveVisibilityPreset(layers,presets){if(isEmpty(presets)){return null}var result={};layers.forEach(function(layer){if(layer.role===LayerRole.THEME){Object.assign(result,LayerUtils.computeVisbilityPreset(layer))}});for(var _i4=0,_Object$entries=Object.entries(presets);_i4<_Object$entries.length;_i4++){var _Object$entries$_i=_slicedToArray(_Object$entries[_i4],2),name=_Object$entries$_i[0],preset=_Object$entries$_i[1];if(isEqual(preset,result)){return name}}return null},applyVisibilityPreset:function applyVisibilityPreset(layer,preset){var newLayer=_objectSpread({},layer);if(newLayer.sublayers){var haveVisibileSublayer=false;newLayer.sublayers=newLayer.sublayers.map(function(sublayer){var newSublayer=LayerUtils.applyVisibilityPreset(sublayer,preset);haveVisibileSublayer||(haveVisibileSublayer=newSublayer.visibility===true);return newSublayer});newLayer.visibility=haveVisibileSublayer;if(newLayer.name in preset){newLayer.visibility=true}}else if(newLayer.name in preset){newLayer.visibility=true;newLayer.style=preset[newLayer.name]}else{newLayer.visibility=false}return newLayer}};export default LayerUtils;