qwc2 2025.9.24 → 2025.10.6

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 (44) hide show
  1. package/components/AttributeForm.js +3 -3
  2. package/components/AttributeTableWidget.js +1 -1
  3. package/components/EditUploadField.js +1 -1
  4. package/components/IdentifyViewer.js +4 -6
  5. package/components/ImportLayer.js +1 -1
  6. package/components/PickFeature.js +1 -1
  7. package/components/QtDesignerForm.js +2 -2
  8. package/components/ResizeableWindow.js +4 -3
  9. package/components/SearchBox.js +3 -3
  10. package/components/WindowManager.js +1 -1
  11. package/components/map/OlMap.js +1 -1
  12. package/components/map3d/ImportObjects3D.js +1 -1
  13. package/components/widgets/EditableSelect.js +1 -1
  14. package/components/widgets/SearchWidget.js +1 -1
  15. package/components/widgets/SuggestionInput.js +1 -1
  16. package/icons/tree.svg +77 -0
  17. package/package.json +4 -2
  18. package/plugins/AttributeTable.js +1 -1
  19. package/plugins/Editing.js +2 -2
  20. package/plugins/FeatureSearch.js +3 -3
  21. package/plugins/GeometryDigitizer.js +1 -1
  22. package/plugins/HeightProfile.js +3 -3
  23. package/plugins/LayerTree.js +1 -1
  24. package/plugins/Map.js +1 -1
  25. package/plugins/MapFilter.js +3 -3
  26. package/plugins/MapTip.js +2 -2
  27. package/plugins/Measure.js +1 -1
  28. package/plugins/OverviewMap.js +2 -2
  29. package/plugins/Print.js +2 -2
  30. package/plugins/ScratchDrawing.js +2 -2
  31. package/plugins/TimeManager.js +2 -2
  32. package/plugins/ValueTool.js +2 -2
  33. package/plugins/map/MeasurementSupport.js +1 -1
  34. package/plugins/map/SnappingSupport.js +2 -2
  35. package/plugins/redlining/RedliningBufferSupport.js +1 -1
  36. package/reducers/measurement.js +1 -1
  37. package/scripts/themesConfig.js +1 -1
  38. package/utils/CoordinatesUtils.js +2 -2
  39. package/utils/FeatureStyles.js +1 -1
  40. package/utils/IdentifyUtils.js +2 -2
  41. package/utils/LayerUtils.js +2 -4
  42. package/utils/RoutingInterface.js +2 -2
  43. package/utils/ServiceLayerUtils.js +1 -1
  44. package/utils/VectorLayerUtils.js +3 -3
@@ -4,8 +4,8 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
4
4
  *
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
- */import React from"react";import{Line}from"react-chartjs-2";import{connect}from"react-redux";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{v1 as uuidv1}from"uuid";import{LayerRole}from"../actions/layers";import{setCurrentTask}from"../actions/task";import Icon from"../components/Icon";import ResizeableWindow from"../components/ResizeableWindow";import ButtonBar from"../components/widgets/ButtonBar";import NumberInput from"../components/widgets/NumberInput";import TextInput from"../components/widgets/TextInput";import IdentifyUtils from"../utils/IdentifyUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import"./style/ValueTool.css";/**
7
+ */import React from"react";import{Line}from"react-chartjs-2";import{connect}from"react-redux";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{v4 as uuidv4}from"uuid";import{LayerRole}from"../actions/layers";import{setCurrentTask}from"../actions/task";import Icon from"../components/Icon";import ResizeableWindow from"../components/ResizeableWindow";import ButtonBar from"../components/widgets/ButtonBar";import NumberInput from"../components/widgets/NumberInput";import TextInput from"../components/widgets/TextInput";import IdentifyUtils from"../utils/IdentifyUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import"./style/ValueTool.css";/**
8
8
  * Displays raster band values of active raster layers at the hovered mouse position,
9
9
  * queried via GetFeatureInfo.
10
- */var ValueTool=/*#__PURE__*/function(_React$Component){function ValueTool(props){var _this;_classCallCheck(this,ValueTool);_this=_callSuper(this,ValueTool,[props]);_defineProperty(_this,"renderTableTab",function(){if(isEmpty(_this.state.values)){return/*#__PURE__*/React.createElement("span",null,/*#__PURE__*/React.createElement("i",null,LocaleUtils.tr("valuetool.nodata")))}return/*#__PURE__*/React.createElement("table",{className:"valuetool-table"},/*#__PURE__*/React.createElement("tbody",null,Object.entries(_this.state.values).map(function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],data=_ref2[1];var bandvals=Object.entries(data.values);if(_this.state.selectedBands[key]){var activeBands=_this.state.selectedBands[key].split(",").map(function(x){return parseInt(x.trim(),10)-1});bandvals=bandvals.filter(function(_,i){return activeBands.includes(i)})}return[/*#__PURE__*/React.createElement("tr",{key:key},/*#__PURE__*/React.createElement("th",{colSpan:"2"},data.layertitle)),bandvals.map(function(_ref3){var _ref4=_slicedToArray(_ref3,2),bandname=_ref4[0],bandval=_ref4[1];return/*#__PURE__*/React.createElement("tr",{key:key+"_"+bandname},/*#__PURE__*/React.createElement("td",null,bandname),/*#__PURE__*/React.createElement("td",null,bandval))})]})))});_defineProperty(_this,"renderGraphTab",function(){var values=Object.values(_this.state.values).map(function(x){return Object.values(x.values)}).flat().filter(function(x){return x});var data={labels:values.map(function(_,i){return String(i)}),datasets:[{data:values,borderColor:"rgb(255,0,0)",borderWidth:2}]};var yAxisConfig={};if(_this.state.graphMinY){yAxisConfig.min=_this.state.graphMinY}if(_this.state.graphMaxY){yAxisConfig.max=_this.state.graphMaxY}var options={responsive:true,maintainAspectRatio:false,animation:{duration:0},scales:{y:yAxisConfig}};return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("div",{className:"valuetool-chart-options"},/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("valuetool.ymin"),": "),/*#__PURE__*/React.createElement(NumberInput,{onChange:function onChange(value){return _this.setState({graphMinY:value})},value:_this.state.graphMinY}),/*#__PURE__*/React.createElement("span",{style:{marginLeft:"0.5em"}}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("valuetool.ymax"),": "),/*#__PURE__*/React.createElement(NumberInput,{onChange:function onChange(value){return _this.setState({graphMaxY:value})},value:_this.state.graphMaxY})),/*#__PURE__*/React.createElement("div",{className:"valuetool-chart-container"},/*#__PURE__*/React.createElement(Line,{data:data,options:options})))});_defineProperty(_this,"renderOptionsTab",function(){var options=_this.state.showLayers==="selected"||_this.state.showBands==="selected"?[/*#__PURE__*/React.createElement("hr",{key:"sep"}),/*#__PURE__*/React.createElement("div",{key:"label"},LocaleUtils.tr("valuetool.selectlayersbands")),/*#__PURE__*/React.createElement("table",{className:"valuetool-table-selection",key:"table"},/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("th",null,LocaleUtils.tr("valuetool.layer")),_this.state.showBands==="selected"?/*#__PURE__*/React.createElement("th",null,LocaleUtils.tr("valuetool.bands")):null),_this.props.layers.map(function(layer){var sublayers=LayerUtils.getSublayerNames(layer,true,function(sublayer){return sublayer.geometryType===null});return sublayers.map(function(sublayer){var key=layer.url+"#"+sublayer;return/*#__PURE__*/React.createElement("tr",{key:key},/*#__PURE__*/React.createElement("td",null,_this.state.showLayers==="selected"?/*#__PURE__*/React.createElement(Icon,{icon:_this.state.selectedLayers.includes(key)?"checked":"unchecked",onClick:function onClick(){return _this.toggleSelectedLayer(key)}}):null,sublayer),_this.state.showBands==="selected"?/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(TextInput,{onChange:function onChange(value){return _this.setLayerBands(key,value)},placeholder:LocaleUtils.tr("valuetool.all"),value:_this.state.selectedBands[key]||""})):null)})})))]:null;return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("table",{className:"valuetool-table-options"},/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("valuetool.showlayers"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.setState({showLayers:ev.target.value})},value:_this.state.showLayers},/*#__PURE__*/React.createElement("option",{value:"visible"},LocaleUtils.tr("valuetool.visiblelayers")),/*#__PURE__*/React.createElement("option",{value:"all"},LocaleUtils.tr("valuetool.alllayers")),/*#__PURE__*/React.createElement("option",{value:"selected"},LocaleUtils.tr("valuetool.selectedlayers"))))),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("valuetool.showbands"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.setState({showBands:ev.target.value})},value:_this.state.showBands},/*#__PURE__*/React.createElement("option",{value:"all"},LocaleUtils.tr("valuetool.allbands")),/*#__PURE__*/React.createElement("option",{value:"selected"},LocaleUtils.tr("valuetool.selectedbands"))))))),options)});_defineProperty(_this,"toggleSelectedLayer",function(key){_this.setState(function(state){return{selectedLayers:state.selectedLayers.includes(key)?state.selectedLayers.filter(function(x){return x!==key}):[].concat(_toConsumableArray(state.selectedLayers),[key])}})});_defineProperty(_this,"setLayerBands",function(key,bands){_this.setState(function(state){return{selectedBands:_objectSpread(_objectSpread({},state.selectedBands),{},_defineProperty({},key,_toConsumableArray(new Set(bands.split(",").map(function(x){return parseInt(x.trim(),10)||0}).sort().filter(function(x){return x}))).join(", ")))}})});_defineProperty(_this,"onWindowClose",function(){_this.props.setCurrentTask(null)});_defineProperty(_this,"scheduleQueryValues",function(ev){var coordinate=ev.coordinate;clearTimeout(_this.queryTimeout);_this.queryTimeout=setTimeout(function(){return _this.queryValues(coordinate)},100)});_defineProperty(_this,"queryValues",function(coordinate){var options={info_format:"text/xml",feature_count:5,with_geometry:false,with_htmlcontent:false};var reqId=uuidv1();_this.reqId=reqId;var newValues={};_this.props.layers.forEach(function(layer){var layerActive=null;if(_this.state.showLayers==="all"){layerActive=function layerActive(){return true}}else if(_this.state.showLayers==="selected"){layerActive=function layerActive(sublayer){return _this.state.selectedLayers.includes(layer.url+"#"+sublayer.name)}}else if(_this.state.showLayers==="visible"){layerActive=function layerActive(sublayer){return sublayer.visibility}}var queryLayers=LayerUtils.getSublayerNames(layer,true,function(sublayer){return layerActive(sublayer)&&sublayer.geometryType===null});if(isEmpty(queryLayers)){return}// Preserve previous result rows, but with empty values, to prevent "flickering"
10
+ */var ValueTool=/*#__PURE__*/function(_React$Component){function ValueTool(props){var _this;_classCallCheck(this,ValueTool);_this=_callSuper(this,ValueTool,[props]);_defineProperty(_this,"renderTableTab",function(){if(isEmpty(_this.state.values)){return/*#__PURE__*/React.createElement("span",null,/*#__PURE__*/React.createElement("i",null,LocaleUtils.tr("valuetool.nodata")))}return/*#__PURE__*/React.createElement("table",{className:"valuetool-table"},/*#__PURE__*/React.createElement("tbody",null,Object.entries(_this.state.values).map(function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],data=_ref2[1];var bandvals=Object.entries(data.values);if(_this.state.selectedBands[key]){var activeBands=_this.state.selectedBands[key].split(",").map(function(x){return parseInt(x.trim(),10)-1});bandvals=bandvals.filter(function(_,i){return activeBands.includes(i)})}return[/*#__PURE__*/React.createElement("tr",{key:key},/*#__PURE__*/React.createElement("th",{colSpan:"2"},data.layertitle)),bandvals.map(function(_ref3){var _ref4=_slicedToArray(_ref3,2),bandname=_ref4[0],bandval=_ref4[1];return/*#__PURE__*/React.createElement("tr",{key:key+"_"+bandname},/*#__PURE__*/React.createElement("td",null,bandname),/*#__PURE__*/React.createElement("td",null,bandval))})]})))});_defineProperty(_this,"renderGraphTab",function(){var values=Object.values(_this.state.values).map(function(x){return Object.values(x.values)}).flat().filter(function(x){return x});var data={labels:values.map(function(_,i){return String(i)}),datasets:[{data:values,borderColor:"rgb(255,0,0)",borderWidth:2}]};var yAxisConfig={};if(_this.state.graphMinY){yAxisConfig.min=_this.state.graphMinY}if(_this.state.graphMaxY){yAxisConfig.max=_this.state.graphMaxY}var options={responsive:true,maintainAspectRatio:false,animation:{duration:0},scales:{y:yAxisConfig}};return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("div",{className:"valuetool-chart-options"},/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("valuetool.ymin"),": "),/*#__PURE__*/React.createElement(NumberInput,{onChange:function onChange(value){return _this.setState({graphMinY:value})},value:_this.state.graphMinY}),/*#__PURE__*/React.createElement("span",{style:{marginLeft:"0.5em"}}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("valuetool.ymax"),": "),/*#__PURE__*/React.createElement(NumberInput,{onChange:function onChange(value){return _this.setState({graphMaxY:value})},value:_this.state.graphMaxY})),/*#__PURE__*/React.createElement("div",{className:"valuetool-chart-container"},/*#__PURE__*/React.createElement(Line,{data:data,options:options})))});_defineProperty(_this,"renderOptionsTab",function(){var options=_this.state.showLayers==="selected"||_this.state.showBands==="selected"?[/*#__PURE__*/React.createElement("hr",{key:"sep"}),/*#__PURE__*/React.createElement("div",{key:"label"},LocaleUtils.tr("valuetool.selectlayersbands")),/*#__PURE__*/React.createElement("table",{className:"valuetool-table-selection",key:"table"},/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("th",null,LocaleUtils.tr("valuetool.layer")),_this.state.showBands==="selected"?/*#__PURE__*/React.createElement("th",null,LocaleUtils.tr("valuetool.bands")):null),_this.props.layers.map(function(layer){var sublayers=LayerUtils.getSublayerNames(layer,true,function(sublayer){return sublayer.geometryType===null});return sublayers.map(function(sublayer){var key=layer.url+"#"+sublayer;return/*#__PURE__*/React.createElement("tr",{key:key},/*#__PURE__*/React.createElement("td",null,_this.state.showLayers==="selected"?/*#__PURE__*/React.createElement(Icon,{icon:_this.state.selectedLayers.includes(key)?"checked":"unchecked",onClick:function onClick(){return _this.toggleSelectedLayer(key)}}):null,sublayer),_this.state.showBands==="selected"?/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(TextInput,{onChange:function onChange(value){return _this.setLayerBands(key,value)},placeholder:LocaleUtils.tr("valuetool.all"),value:_this.state.selectedBands[key]||""})):null)})})))]:null;return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("table",{className:"valuetool-table-options"},/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("valuetool.showlayers"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.setState({showLayers:ev.target.value})},value:_this.state.showLayers},/*#__PURE__*/React.createElement("option",{value:"visible"},LocaleUtils.tr("valuetool.visiblelayers")),/*#__PURE__*/React.createElement("option",{value:"all"},LocaleUtils.tr("valuetool.alllayers")),/*#__PURE__*/React.createElement("option",{value:"selected"},LocaleUtils.tr("valuetool.selectedlayers"))))),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("valuetool.showbands"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.setState({showBands:ev.target.value})},value:_this.state.showBands},/*#__PURE__*/React.createElement("option",{value:"all"},LocaleUtils.tr("valuetool.allbands")),/*#__PURE__*/React.createElement("option",{value:"selected"},LocaleUtils.tr("valuetool.selectedbands"))))))),options)});_defineProperty(_this,"toggleSelectedLayer",function(key){_this.setState(function(state){return{selectedLayers:state.selectedLayers.includes(key)?state.selectedLayers.filter(function(x){return x!==key}):[].concat(_toConsumableArray(state.selectedLayers),[key])}})});_defineProperty(_this,"setLayerBands",function(key,bands){_this.setState(function(state){return{selectedBands:_objectSpread(_objectSpread({},state.selectedBands),{},_defineProperty({},key,_toConsumableArray(new Set(bands.split(",").map(function(x){return parseInt(x.trim(),10)||0}).sort().filter(function(x){return x}))).join(", ")))}})});_defineProperty(_this,"onWindowClose",function(){_this.props.setCurrentTask(null)});_defineProperty(_this,"scheduleQueryValues",function(ev){var coordinate=ev.coordinate;clearTimeout(_this.queryTimeout);_this.queryTimeout=setTimeout(function(){return _this.queryValues(coordinate)},100)});_defineProperty(_this,"queryValues",function(coordinate){var options={info_format:"text/xml",feature_count:5,with_geometry:false,with_htmlcontent:false};var reqId=uuidv4();_this.reqId=reqId;var newValues={};_this.props.layers.forEach(function(layer){var layerActive=null;if(_this.state.showLayers==="all"){layerActive=function layerActive(){return true}}else if(_this.state.showLayers==="selected"){layerActive=function layerActive(sublayer){return _this.state.selectedLayers.includes(layer.url+"#"+sublayer.name)}}else if(_this.state.showLayers==="visible"){layerActive=function layerActive(sublayer){return sublayer.visibility}}var queryLayers=LayerUtils.getSublayerNames(layer,true,function(sublayer){return layerActive(sublayer)&&sublayer.geometryType===null});if(isEmpty(queryLayers)){return}// Preserve previous result rows, but with empty values, to prevent "flickering"
11
11
  queryLayers.forEach(function(sublayername){var key=layer.url+"#"+sublayername;if(_this.state.values[key]){newValues[key]=_objectSpread(_objectSpread({},_this.state.values[key]),{},{values:Object.fromEntries(Object.keys(_this.state.values[key].values).map(function(k){return[k,""]}))})}});var request=IdentifyUtils.buildRequest(layer,queryLayers.join(","),coordinate,_this.props.map,options);IdentifyUtils.sendRequest(request,function(response){if(_this.reqId===reqId){var result=IdentifyUtils.parseXmlResponse(response||"",_this.props.map.projection,layer);_this.setState(function(state){return{values:_objectSpread(_objectSpread({},state.values),Object.entries(result).reduce(function(res,_ref5){var _ref6=_slicedToArray(_ref5,2),sublayername=_ref6[0],features=_ref6[1];var key=layer.url+"#"+sublayername;res[key]={layertitle:features[0].layertitle,values:features[0].properties};return res},{}))}})}})});_this.setState({values:newValues})});_this.queryTimeout=null;_this.reqId=null;_this.state=ValueTool.defaultState;return _this}_inherits(ValueTool,_React$Component);return _createClass(ValueTool,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.enabled&&!prevProps.enabled){MapUtils.getHook(MapUtils.ADD_POINTER_MOVE_LISTENER)(this.scheduleQueryValues)}else if(!this.props.enabled&&prevProps.enabled){MapUtils.getHook(MapUtils.REMOVE_POINTER_MOVE_LISTENER)(this.scheduleQueryValues);clearTimeout(this.queryTimeout);this.queryTimeout=null;this.setState(ValueTool.defaultState)}}},{key:"render",value:function render(){var _this2=this;if(!this.props.enabled){return null}var buttons=[{key:"Table",label:LocaleUtils.tr("valuetool.table")},{key:"Graph",label:LocaleUtils.tr("valuetool.graph")},{key:"Options",label:LocaleUtils.tr("valuetool.options")}];var tab=null;if(this.state.activeTab==="Table"){tab=this.renderTableTab()}else if(this.state.activeTab==="Graph"){tab=this.renderGraphTab()}else if(this.state.activeTab==="Options"){tab=this.renderOptionsTab()}return/*#__PURE__*/React.createElement(ResizeableWindow,{dockable:this.props.geometry.side,icon:"info-sign",initialHeight:this.props.geometry.initialHeight,initialWidth:this.props.geometry.initialWidth,initialX:this.props.geometry.initialX,initialY:this.props.geometry.initialY,initiallyDocked:this.props.geometry.initiallyDocked,onClose:this.onWindowClose,title:LocaleUtils.tr("valuetool.title")},/*#__PURE__*/React.createElement("div",{className:"valuetool-body",role:"body"},/*#__PURE__*/React.createElement(ButtonBar,{active:this.state.activeTab,buttons:buttons,onClick:function onClick(key){return _this2.setState({activeTab:key})}}),tab))}}])}(React.Component);_defineProperty(ValueTool,"propTypes",{/** The number of decimal places to display for elevation values. */enabled:PropTypes.bool,/** Default window geometry with size, position and docking status. Positive position values (including '0') are related to top (InitialY) and left (InitialX), negative values (including '-0') to bottom (InitialY) and right (InitialX). */geometry:PropTypes.shape({initialWidth:PropTypes.number,initialHeight:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool,side:PropTypes.string}),layers:PropTypes.array,map:PropTypes.object,setCurrentTask:PropTypes.func});_defineProperty(ValueTool,"defaultProps",{geometry:{initialWidth:240,initialHeight:320,initialX:0,initialY:0,initiallyDocked:false,side:"left"}});_defineProperty(ValueTool,"defaultState",{activeTab:"Table",showLayers:"visible",showBands:"all",selectedLayers:[],selectedBands:{},values:{},graphMinY:null,graphMaxY:null});export default connect(function(state){return{enabled:state.task.id==="ValueTool",layers:state.layers.flat.filter(function(layer){return(layer.role===LayerRole.THEME||layer.role===LayerRole.USERLAYER)&&(layer.infoFormats||[]).includes("text/xml")}),map:state.map}},{setCurrentTask:setCurrentTask})(ValueTool);
@@ -12,4 +12,4 @@ _this.measureLayer=new ol.layer.Vector({source:new ol.source.Vector,zIndex:10000
12
12
  _this.drawInteraction=new ol.interaction.Draw({stopClick:true,source:_this.measureLayer.getSource(),condition:function condition(event){return event.originalEvent.buttons===1},type:geometryType,style:function style(){return _this.modifyInteraction?[]:FeatureStyles.sketchInteraction()}});_this.drawInteraction.on("drawstart",function(ev){_this.leaveTemporaryPickMode();_this.measureLayer.getSource().clear();_this.sketchFeature=ev.feature;_this.sketchFeature.setStyle(_this.featureStyleFunction);_this.sketchFeature.on("change",function(evt){return _this.updateMeasurementResults(evt.target)})});_this.drawInteraction.on("drawend",function(){_this.updateMeasurementResults(_this.sketchFeature,false);_this.enterTemporaryPickMode()});_this.props.map.addInteraction(_this.drawInteraction)});_defineProperty(_this,"reset",function(){if(_this.drawInteraction!==null){_this.props.map.removeInteraction(_this.drawInteraction);_this.drawInteraction=null;_this.leaveTemporaryPickMode();_this.props.map.removeLayer(_this.measureLayer);_this.measureLayer=null;_this.sketchFeature=null}});_defineProperty(_this,"enterTemporaryPickMode",function(){_this.modifyInteraction=new ol.interaction.Modify({features:new ol.Collection([_this.sketchFeature]),condition:function condition(event){return event.originalEvent.buttons===1},insertVertexCondition:function insertVertexCondition(){return _this.props.measurement.geomType==="Bearing"?false:true},deleteCondition:function deleteCondition(event){return ol.events.condition.shiftKeyOnly(event)&&ol.events.condition.singleClick(event)},style:function style(feature){// Hack to get cursor position over geometry...
13
13
  if(_this.props.measurement.pickPositionCallback){clearTimeout(_this.pickPositionCallbackTimeout);_this.props.measurement.pickPositionCallback(feature.getGeometry().getCoordinates())}return FeatureStyles.sketchInteraction()}});_this.props.map.on("pointermove",_this.clearPickPosition);_this.modifyInteraction.on("modifyend",function(){_this.updateMeasurementResults(_this.sketchFeature,false)});_this.props.map.addInteraction(_this.modifyInteraction)});_defineProperty(_this,"leaveTemporaryPickMode",function(){if(_this.modifyInteraction){_this.props.map.un("pointermove",_this.clearPickPosition);_this.props.map.removeInteraction(_this.modifyInteraction);_this.modifyInteraction=null}});_defineProperty(_this,"clearPickPosition",function(){if(_this.props.measurement.pickPositionCallback){clearTimeout(_this.pickPositionCallbackTimeout);// Works because style function clears timeout if marker is rendered, i.e. if mouse is over measure geometry
14
14
  _this.pickPositionCallbackTimeout=setTimeout(function(){if(_this.props.measurement.pickPositionCallback){_this.props.measurement.pickPositionCallback(null)}},50)}});_defineProperty(_this,"updateMeasurementResults",function(feature){var drawing=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var geomType=_this.props.measurement.geomType;var settings={lenUnit:_this.props.measurement.lenUnit,areaUnit:_this.props.measurement.areaUnit,displayCrs:_this.props.displayCrs};MeasureUtils.updateFeatureMeasurements(feature,geomType,_this.props.projection,settings);// Only one segment for bearing measurement
15
- if(geomType==="Bearing"&&feature.getGeometry().getCoordinates().length>2){_this.drawInteraction.finishDrawing()}_this.measureLayer.getSource().changed();_this.props.changeMeasurementState(_objectSpread({geomType:_this.props.measurement.geomType,drawing:drawing,coordinates:feature.getGeometry().getCoordinates()},structuredClone(feature.get("measurements"))))});_defineProperty(_this,"featureStyleFunction",function(feature){var geometryFunction=function geometryFunction(f){if(f.getGeometry().getType()==="Point"){return new ol.geom.MultiPoint([f.getGeometry().getCoordinates()])}else if(f.getGeometry().getType()==="LineString"){return new ol.geom.MultiPoint(f.getGeometry().getCoordinates())}return new ol.geom.MultiPoint(f.getGeometry().getCoordinates()[0])};return[].concat(_toConsumableArray(FeatureStyles.measureInteraction(feature)),[FeatureStyles.measureInteractionVertex({geometryFunction:geometryFunction})])});_this.pickPositionCallbackTimeout=null;_this.measureLayer=null;return _this}_inherits(MeasurementSupport,_React$Component);return _createClass(MeasurementSupport,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.measurement.geomType&&this.props.measurement.geomType!==prevProps.measurement.geomType){this.addDrawInteraction(this.props)}else if(!this.props.measurement.geomType){this.reset()}else if(this.sketchFeature&&(this.props.measurement.lenUnit!==prevProps.measurement.lenUnit||this.props.measurement.areaUnit!==prevProps.measurement.areaUnit||this.props.displayCrs!==prevProps.displayCrs)){this.updateMeasurementResults(this.sketchFeature,this.props.measurement.drawing)}}},{key:"render",value:function render(){return null}}])}(React.Component);_defineProperty(MeasurementSupport,"propTypes",{changeMeasurementState:PropTypes.func,displayCrs:PropTypes.string,map:PropTypes.object,measurement:PropTypes.object,projection:PropTypes.string});export default connect(function(state){return{displayCrs:state.map.displayCrs,measurement:state.measurement}},{changeMeasurementState:changeMeasurementState})(MeasurementSupport);
15
+ if(geomType==="Bearing"&&feature.getGeometry().getCoordinates().length>2){_this.drawInteraction.finishDrawing()}_this.measureLayer.getSource().changed();_this.props.changeMeasurementState(_objectSpread({geomType:_this.props.measurement.geomType,drawing:drawing,coordinates:feature.getGeometry().getCoordinates()},structuredClone(feature.get("measurements"))))});_defineProperty(_this,"featureStyleFunction",function(feature){var geometryFunction=function geometryFunction(f){if(f.getGeometry().getType()==="Point"){return new ol.geom.MultiPoint([f.getGeometry().getCoordinates()])}else if(f.getGeometry().getType()==="LineString"){return new ol.geom.MultiPoint(f.getGeometry().getCoordinates())}return new ol.geom.MultiPoint(f.getGeometry().getCoordinates()[0])};var opts={};if(_this.props.measurement.geomType==="LineString"){opts.headmarker=_this.props.measurement.lineHeadMarker;opts.tailmarker=_this.props.measurement.lineHeadMarker}else if(_this.props.measurement.geomType==="Bearing"){opts.headmarker=_this.props.measurement.bearingHeadMarker;opts.tailmarker=_this.props.measurement.bearingHeadMarker}return[].concat(_toConsumableArray(FeatureStyles.measureInteraction(feature,opts)),[FeatureStyles.measureInteractionVertex({geometryFunction:geometryFunction})])});_this.pickPositionCallbackTimeout=null;_this.measureLayer=null;return _this}_inherits(MeasurementSupport,_React$Component);return _createClass(MeasurementSupport,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.measurement.geomType&&this.props.measurement.geomType!==prevProps.measurement.geomType){this.addDrawInteraction(this.props)}else if(!this.props.measurement.geomType){this.reset()}else if(this.sketchFeature&&(this.props.measurement.lenUnit!==prevProps.measurement.lenUnit||this.props.measurement.areaUnit!==prevProps.measurement.areaUnit||this.props.displayCrs!==prevProps.displayCrs)){this.updateMeasurementResults(this.sketchFeature,this.props.measurement.drawing)}}},{key:"render",value:function render(){return null}}])}(React.Component);_defineProperty(MeasurementSupport,"propTypes",{changeMeasurementState:PropTypes.func,displayCrs:PropTypes.string,map:PropTypes.object,measurement:PropTypes.object,projection:PropTypes.string});export default connect(function(state){return{displayCrs:state.map.displayCrs,measurement:state.measurement}},{changeMeasurementState:changeMeasurementState})(MeasurementSupport);
@@ -4,7 +4,7 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
4
4
  *
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
- */import React from"react";import{connect}from"react-redux";import isEmpty from"lodash.isempty";import ol from"openlayers";import PropTypes from"prop-types";import{v1 as uuidv1}from"uuid";import{LayerRole}from"../../actions/layers";import{setSnappingConfig}from"../../actions/map";import Icon from"../../components/Icon";import Spinner from"../../components/widgets/Spinner";import IdentifyUtils from"../../utils/IdentifyUtils";import LocaleUtils from"../../utils/LocaleUtils";import MapUtils from"../../utils/MapUtils";import VectorLayerUtils from"../../utils/VectorLayerUtils";import SnapInteraction from"./SnapInteraction";import"./style/SnappingSupport.css";/**
7
+ */import React from"react";import{connect}from"react-redux";import isEmpty from"lodash.isempty";import ol from"openlayers";import PropTypes from"prop-types";import{v4 as uuidv4}from"uuid";import{LayerRole}from"../../actions/layers";import{setSnappingConfig}from"../../actions/map";import Icon from"../../components/Icon";import Spinner from"../../components/widgets/Spinner";import IdentifyUtils from"../../utils/IdentifyUtils";import LocaleUtils from"../../utils/LocaleUtils";import MapUtils from"../../utils/MapUtils";import VectorLayerUtils from"../../utils/VectorLayerUtils";import SnapInteraction from"./SnapInteraction";import"./style/SnappingSupport.css";/**
8
8
  * Snapping support for the map component.
9
9
  */var SnappingSupport=/*#__PURE__*/function(_React$Component){function SnappingSupport(props){var _this;_classCallCheck(this,SnappingSupport);_this=_callSuper(this,SnappingSupport,[props]);_defineProperty(_this,"state",{reqId:null,// FeatureInfo request ID
10
10
  invalid:true,// Whether the feature cache needs to be rebuilt
@@ -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(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,themeLayer);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=uuidv4();_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,themeLayer);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:uuidv4()})})});_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,4 +5,4 @@ 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 React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import{v4 as uuidv4}from"uuid";import{LayerRole,addLayer,addLayerFeatures}from"../../actions/layers";import NumberInput from"../../components/widgets/NumberInput";import VectorLayerPicker from"../../components/widgets/VectorLayerPicker";import LocaleUtils from"../../utils/LocaleUtils";import VectorLayerUtils from"../../utils/VectorLayerUtils";var RedliningBufferSupport=/*#__PURE__*/function(_React$Component){function RedliningBufferSupport(props){var _this;_classCallCheck(this,RedliningBufferSupport);_this=_callSuper(this,RedliningBufferSupport,[props]);_defineProperty(_this,"state",{bufferDistance:0,bufferLayer:null,bufferUnit:"meters"});_defineProperty(_this,"changeBufferUnit",function(ev){_this.setState({bufferUnit:ev.target.value})});_defineProperty(_this,"computeBuffer",function(){var feature=_this.props.redlining.selectedFeature;if(!feature||!feature.geometry||!_this.state.bufferLayer){return}import("@turf/buffer").then(function(bufferMod){var buffer=bufferMod["default"];if(feature.circleParams){var _feature$circleParams=feature.circleParams,center=_feature$circleParams.center,radius=_feature$circleParams.radius;var deg2rad=Math.PI/180;feature=_objectSpread(_objectSpread({},feature),{},{geometry:{type:"Polygon",coordinates:[Array.apply(null,Array(91)).map(function(item,index){return[center[0]+radius*Math.cos(4*index*deg2rad),center[1]+radius*Math.sin(4*index*deg2rad)]})]}})}var wgsGeometry=VectorLayerUtils.reprojectGeometry(feature.geometry,_this.props.projection,"EPSG:4326");var wgsFeature=_objectSpread(_objectSpread({},feature),{},{geometry:wgsGeometry});var output=buffer(wgsFeature,_this.state.bufferDistance,{units:_this.state.bufferUnit});if(output&&output.geometry){output.geometry=VectorLayerUtils.reprojectGeometry(output.geometry,"EPSG:4326",_this.props.projection);output.id=uuidv4();output.styleName="default";output.styleOptions={fillColor:[0,0,255,0.5],strokeColor:[0,0,255,1]};_this.props.addLayerFeatures(_this.state.bufferLayer,[output])}})});_this.state.bufferLayer={id:"buffer",title:LocaleUtils.tr("redlining.bufferlayername"),role:LayerRole.USERLAYER};return _this}_inherits(RedliningBufferSupport,_React$Component);return _createClass(RedliningBufferSupport,[{key:"componentDidUpdate",value:function componentDidUpdate(){var _this2=this;if(this.state.bufferLayer&&this.state.bufferLayer.id!=="buffer"&&!this.props.layers.find(function(layer){return layer.id===_this2.state.bufferLayer.id})){this.setState({bufferLayer:{id:"buffer",title:LocaleUtils.tr("redlining.bufferlayername"),role:LayerRole.USERLAYER}})}}},{key:"render",value:function render(){var _this3=this;if(!this.props.redlining.selectedFeature){return/*#__PURE__*/React.createElement("div",{className:"redlining-message"},LocaleUtils.tr("redlining.bufferselectfeature"))}var enabled=this.state.bufferDistance!==0;var layers=this.props.layers.filter(function(layer){return layer.type==="vector"&&layer.role===LayerRole.USERLAYER});// Ensure list contains current target layer
8
- if(!layers.find(function(layer){return layer.id===_this3.state.bufferLayer.id})){layers=[this.state.bufferLayer].concat(_toConsumableArray(layers))}return/*#__PURE__*/React.createElement("div",{className:"redlining-controlsbar"},/*#__PURE__*/React.createElement("span",null,/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("redlining.bufferdistance")," \xA0"),/*#__PURE__*/React.createElement(NumberInput,{max:99999,min:-99999,mobile:true,onChange:function onChange(nr){return _this3.setState({bufferDistance:nr})},value:this.state.bufferDistance}),/*#__PURE__*/React.createElement("select",{onChange:this.changeBufferUnit,value:this.state.bufferUnit},/*#__PURE__*/React.createElement("option",{value:"meters"},"m"),/*#__PURE__*/React.createElement("option",{value:"feet"},"ft"),/*#__PURE__*/React.createElement("option",{value:"kilometers"},"km"),/*#__PURE__*/React.createElement("option",{value:"miles"},"mi"))),/*#__PURE__*/React.createElement("span",null,/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("redlining.bufferlayer"),":\xA0"),/*#__PURE__*/React.createElement(VectorLayerPicker,{addLayer:this.props.addLayer,layers:layers,onChange:function onChange(layer){return _this3.setState({bufferLayer:layer})},value:this.state.bufferLayer.id})),/*#__PURE__*/React.createElement("span",null,/*#__PURE__*/React.createElement("button",{className:"button",disabled:!enabled,onClick:this.computeBuffer},LocaleUtils.tr("redlining.buffercompute"))))}}])}(React.Component);_defineProperty(RedliningBufferSupport,"propTypes",{addLayer:PropTypes.func,addLayerFeatures:PropTypes.func,layers:PropTypes.array,projection:PropTypes.string,redlining:PropTypes.object});export default{cfg:{key:"Buffer",tooltip:LocaleUtils.trmsg("redlining.buffer"),icon:"buffer",data:{action:"Buffer",geomType:null}},controls:connect(function(state){return{projection:state.map.projection,layers:state.layers.flat,redlining:state.redlining}},{addLayerFeatures:addLayerFeatures,addLayer:addLayer})(RedliningBufferSupport)};
8
+ if(!layers.find(function(layer){return layer.id===_this3.state.bufferLayer.id})){layers=[this.state.bufferLayer].concat(_toConsumableArray(layers))}return/*#__PURE__*/React.createElement("div",{className:"redlining-controlsbar"},/*#__PURE__*/React.createElement("div",{className:"redlining-control"},/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("redlining.bufferdistance")," \xA0"),/*#__PURE__*/React.createElement(NumberInput,{max:99999,min:-99999,mobile:true,onChange:function onChange(nr){return _this3.setState({bufferDistance:nr})},value:this.state.bufferDistance}),/*#__PURE__*/React.createElement("select",{onChange:this.changeBufferUnit,value:this.state.bufferUnit},/*#__PURE__*/React.createElement("option",{value:"meters"},"m"),/*#__PURE__*/React.createElement("option",{value:"feet"},"ft"),/*#__PURE__*/React.createElement("option",{value:"kilometers"},"km"),/*#__PURE__*/React.createElement("option",{value:"miles"},"mi"))),/*#__PURE__*/React.createElement("div",{className:"redlining-control"},/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("redlining.bufferlayer"),":\xA0"),/*#__PURE__*/React.createElement(VectorLayerPicker,{addLayer:this.props.addLayer,layers:layers,onChange:function onChange(layer){return _this3.setState({bufferLayer:layer})},value:this.state.bufferLayer.id})),/*#__PURE__*/React.createElement("div",{className:"redlining-control"},/*#__PURE__*/React.createElement("button",{className:"button",disabled:!enabled,onClick:this.computeBuffer},LocaleUtils.tr("redlining.buffercompute"))))}}])}(React.Component);_defineProperty(RedliningBufferSupport,"propTypes",{addLayer:PropTypes.func,addLayerFeatures:PropTypes.func,layers:PropTypes.array,projection:PropTypes.string,redlining:PropTypes.object});export default{cfg:{key:"Buffer",tooltip:LocaleUtils.trmsg("redlining.buffer"),icon:"buffer",data:{action:"Buffer",geomType:null}},controls:connect(function(state){return{projection:state.map.projection,layers:state.layers.flat,redlining:state.redlining}},{addLayerFeatures:addLayerFeatures,addLayer:addLayer})(RedliningBufferSupport)};
@@ -5,4 +5,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
5
5
  *
6
6
  * This source code is licensed under the BSD-style license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
- */import{CHANGE_MEASUREMENT_STATE}from"../actions/measurement";var defaultState={geomType:null,coordinates:null,length:null,area:0,bearing:0,lenUnit:"metric",areaUnit:"metric"};export default function measurement(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:defaultState;var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case CHANGE_MEASUREMENT_STATE:{return _objectSpread({lenUnit:state.lenUnit,areaUnit:state.areaUnit},action.data)}default:return state}}
8
+ */import{CHANGE_MEASUREMENT_STATE}from"../actions/measurement";var defaultState={geomType:null,coordinates:null,length:null,area:0,bearing:0,lenUnit:"metric",areaUnit:"metric",bearingHeadMarker:null,bearingTailMarker:null,lineHeadMarker:null,lineTailMarker:null};export default function measurement(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:defaultState;var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case CHANGE_MEASUREMENT_STATE:{return _objectSpread({lenUnit:state.lenUnit,areaUnit:state.areaUnit,bearingHeadMarker:state.bearingHeadMarker,bearingTailMarker:state.bearingTailMarker,lineHeadMarker:state.lineHeadMarker,lineTailMarker:state.lineTailMarker},action.data)}default:return state}}
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * This source code is licensed under the BSD-style license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
- */function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}var urlUtil=require("url");var axios=require("axios");var XMLParser=require("fast-xml-parser").XMLParser;var fs=require("fs");var path=require("path");var objectPath=require("object-path");var isEmpty=require("lodash.isempty");var uuidv1=require("uuid").v1;var os=require("os");var dns=require("dns");var _dns$promises=dns.promises,lookup=_dns$promises.lookup,lookupService=_dns$promises.lookupService;var hostFqdn="";var themesConfigPath=process.env.QWC2_THEMES_CONFIG||"static/themesConfig.json";var usedThemeIds=[];var autogenExternalLayers=[];function uniqueThemeId(themeName){if(!themeName){return uuidv1()}if(usedThemeIds.includes(themeName)){var i=1;for(;usedThemeIds.includes(themeName+i);++i);usedThemeIds.push(themeName+i);return themeName+i}else{usedThemeIds.push(themeName);return themeName}}// load thumbnail from file or GetMap
8
+ */function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}var urlUtil=require("url");var axios=require("axios");var XMLParser=require("fast-xml-parser").XMLParser;var fs=require("fs");var path=require("path");var objectPath=require("object-path");var isEmpty=require("lodash.isempty");var uuidv4=require("uuid").v1;var os=require("os");var dns=require("dns");var _dns$promises=dns.promises,lookup=_dns$promises.lookup,lookupService=_dns$promises.lookupService;var hostFqdn="";var themesConfigPath=process.env.QWC2_THEMES_CONFIG||"static/themesConfig.json";var usedThemeIds=[];var autogenExternalLayers=[];function uniqueThemeId(themeName){if(!themeName){return uuidv4()}if(usedThemeIds.includes(themeName)){var i=1;for(;usedThemeIds.includes(themeName+i);++i);usedThemeIds.push(themeName+i);return themeName+i}else{usedThemeIds.push(themeName);return themeName}}// load thumbnail from file or GetMap
9
9
  function getThumbnail(configItem,resultItem,layers,crs,extent,resolve,proxy){if(configItem.thumbnail!==undefined){// check if thumbnail can be read
10
10
  if(fs.existsSync("./static/assets/img/mapthumbs/"+configItem.thumbnail)){resultItem.thumbnail="img/mapthumbs/"+configItem.thumbnail;// finish task
11
11
  resolve(true);return}}/* eslint-disable-next-line */console.error("Using WMS GetMap to generate thumbnail for "+configItem.url);// WMS GetMap request
@@ -5,7 +5,7 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
5
5
  *
6
6
  * This source code is licensed under the BSD-style license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
- */import ol from"openlayers";import Proj4js from"proj4";import ConfigUtils from"./ConfigUtils";import LocaleUtils from"./LocaleUtils";var crsLabels={"EPSG:4326":"WGS 84","EPSG:3857":"WGS 84 / Pseudo Mercator"};var CoordinatesUtils={setCrsLabels:function setCrsLabels(labels){Object.assign(crsLabels,labels)},getAvailableCRS:function getAvailableCRS(){var crsList={};for(var a in Proj4js.defs){if(Object.prototype.hasOwnProperty.call(Proj4js.defs,a)){crsList[a]={label:crsLabels[a]||a}}}return crsList},getUnits:function getUnits(projection){var proj=ol.proj.get(projection);return proj.getUnits()||"degrees"},getPrecision:function getPrecision(projection){var _precisions$projectio;var precisions=ConfigUtils.getConfigProp("projections").reduce(function(res,entry){var _entry$precision;return _objectSpread(_objectSpread({},res),{},_defineProperty({},entry.code,(_entry$precision=entry.precision)!==null&&_entry$precision!==void 0?_entry$precision:0))},{});return(_precisions$projectio=precisions[projection])!==null&&_precisions$projectio!==void 0?_precisions$projectio:CoordinatesUtils.getUnits(projection)==="degrees"?4:0},getProjectionConfig:function getProjectionConfig(projection){var _config$projection;var config=ConfigUtils.getConfigProp("projections").reduce(function(res,entry){var _entry$format,_entry$addDirection,_entry$swapLonLat;res[entry.code]={format:(_entry$format=entry.format)!==null&&_entry$format!==void 0?_entry$format:"decimal",addDirection:(_entry$addDirection=entry.addDirection)!==null&&_entry$addDirection!==void 0?_entry$addDirection:"none",swapLonLat:(_entry$swapLonLat=entry.swapLonLat)!==null&&_entry$swapLonLat!==void 0?_entry$swapLonLat:false};return res},{});return(_config$projection=config[projection])!==null&&_config$projection!==void 0?_config$projection:{format:"decimal",addDirection:"none",swapLonLat:false}},getAxisOrder:function getAxisOrder(projection){var axis=ol.proj.get(projection).getAxisOrientation();return axis||"enu"},reproject:function reproject(point,source,dest){if(source===dest){return _toConsumableArray(point)}if(source&&dest){var transformed=null;try{transformed=ol.proj.transform(point,source,dest)}catch(e){transformed=[0,0]}return transformed}return null},/**
8
+ */import ol from"openlayers";import Proj4js from"proj4";import ConfigUtils from"./ConfigUtils";import LocaleUtils from"./LocaleUtils";var crsLabels={"EPSG:4326":"WGS 84","EPSG:3857":"WGS 84 / Pseudo Mercator"};var commonEsriWktLookup={"EPSG:4326":"GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]","EPSG:3857":"PROJCS[\"WGS_1984_Web_Mercator_Auxiliary_Sphere\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Mercator_Auxiliary_Sphere\"],PARAMETER[\"False_Easting\",0.0],PARAMETER[\"False_Northing\",0.0],PARAMETER[\"Central_Meridian\",0.0],PARAMETER[\"Standard_Parallel_1\",0.0],PARAMETER[\"Auxiliary_Sphere_Type\",0.0],UNIT[\"Meter\",1.0]]"};var CoordinatesUtils={setCrsLabels:function setCrsLabels(labels){Object.assign(crsLabels,labels)},getAvailableCRS:function getAvailableCRS(){var crsList={};for(var a in Proj4js.defs){if(Object.prototype.hasOwnProperty.call(Proj4js.defs,a)){crsList[a]={label:crsLabels[a]||a}}}return crsList},getUnits:function getUnits(projection){var proj=ol.proj.get(projection);return proj.getUnits()||"degrees"},getPrecision:function getPrecision(projection){var _precisions$projectio;var precisions=ConfigUtils.getConfigProp("projections").reduce(function(res,entry){var _entry$precision;return _objectSpread(_objectSpread({},res),{},_defineProperty({},entry.code,(_entry$precision=entry.precision)!==null&&_entry$precision!==void 0?_entry$precision:0))},{});return(_precisions$projectio=precisions[projection])!==null&&_precisions$projectio!==void 0?_precisions$projectio:CoordinatesUtils.getUnits(projection)==="degrees"?4:0},getProjectionConfig:function getProjectionConfig(projection){var _config$projection;var config=ConfigUtils.getConfigProp("projections").reduce(function(res,entry){var _entry$format,_entry$addDirection,_entry$swapLonLat;res[entry.code]={format:(_entry$format=entry.format)!==null&&_entry$format!==void 0?_entry$format:"decimal",addDirection:(_entry$addDirection=entry.addDirection)!==null&&_entry$addDirection!==void 0?_entry$addDirection:"none",swapLonLat:(_entry$swapLonLat=entry.swapLonLat)!==null&&_entry$swapLonLat!==void 0?_entry$swapLonLat:false};return res},{});return(_config$projection=config[projection])!==null&&_config$projection!==void 0?_config$projection:{format:"decimal",addDirection:"none",swapLonLat:false}},getAxisOrder:function getAxisOrder(projection){var axis=ol.proj.get(projection).getAxisOrientation();return axis||"enu"},reproject:function reproject(point,source,dest){if(source===dest){return _toConsumableArray(point)}if(source&&dest){var transformed=null;try{transformed=ol.proj.transform(point,source,dest)}catch(e){transformed=[0,0]}return transformed}return null},/**
9
9
  * Reprojects a bounding box.
10
10
  *
11
11
  * @param bbox {array} [minx, miny, maxx, maxy]
@@ -26,4 +26,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
26
26
  * @param extent {array} [minx, miny, maxx, maxy]
27
27
  *
28
28
  * @return {bool}
29
- */isValidExtent:function isValidExtent(extent){return extent.length===4&&!(extent.indexOf(Infinity)!==-1||extent.indexOf(-Infinity)!==-1||extent.indexOf(NaN)!==-1||extent[0]>=extent[2]||extent[1]>=extent[3])},fromOgcUrnCrs:function fromOgcUrnCrs(crsStr){if(crsStr.endsWith(":CRS84")){return"EPSG:4326"}var parts=crsStr.split(":");return"EPSG:"+parts.slice(-1)},toOgcUrnCrs:function toOgcUrnCrs(crsStr){var parts=crsStr.split(":");return"urn:ogc:def:crs:"+parts[0]+"::"+parts[1]},getFormattedCoordinate:function getFormattedCoordinate(coo,srcCrs){var _options$decimals;var dstCrs=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var options=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{};var units=CoordinatesUtils.getUnits(dstCrs!==null&&dstCrs!==void 0?dstCrs:srcCrs);var decimals=(_options$decimals=options.decimals)!==null&&_options$decimals!==void 0?_options$decimals:CoordinatesUtils.getPrecision(dstCrs!==null&&dstCrs!==void 0?dstCrs:srcCrs);var _ref=function(){var config=CoordinatesUtils.getProjectionConfig(dstCrs!==null&&dstCrs!==void 0?dstCrs:srcCrs);return{format:units!=="degrees"?"decimal":config.format,addDirection:config.addDirection,swapLonLat:config.swapLonLat}}(),format=_ref.format,addDirection=_ref.addDirection,swapLonLat=_ref.swapLonLat;if(srcCrs&&dstCrs&&srcCrs!==dstCrs){coo=CoordinatesUtils.reproject(coo,srcCrs,dstCrs)}if(swapLonLat){coo=[coo[1],coo[0]]}var toDMS=function toDMS(coord){var deg=Math.floor(Math.abs(coord));var minFull=(Math.abs(coord)-deg)*60;var min=Math.floor(minFull);var sec=((minFull-min)*60).toFixed(decimals);return"".concat(deg,"\xB0 ").concat(min,"' ").concat(sec,"\"")};var toDM=function toDM(coord){var deg=Math.floor(Math.abs(coord));var min=((Math.abs(coord)-deg)*60).toFixed(decimals);return"".concat(deg,"\xB0 ").concat(min,"'")};var formatCoordinate=function formatCoordinate(value,isLat){var direction="";if(addDirection!=="none"){if(isLat){direction=value>=0?"N":"S"}else{direction=value>=0?"E":"W"}}var formatted;switch(format){case"dms":formatted=toDMS(value,decimals);break;case"dm":formatted=toDM(value,decimals);break;default:formatted=LocaleUtils.toLocaleFixed(Math.abs(value),decimals)}if(addDirection==="prefix"){return"".concat(direction).concat(formatted)}else if(addDirection==="suffix"){return"".concat(formatted).concat(direction)}return formatted};return coo.map(function(coord,idx){return formatCoordinate(coord,swapLonLat?idx===0:idx===1)}).join(", ")}};export default CoordinatesUtils;
29
+ */isValidExtent:function isValidExtent(extent){return extent.length===4&&!(extent.indexOf(Infinity)!==-1||extent.indexOf(-Infinity)!==-1||extent.indexOf(NaN)!==-1||extent[0]>=extent[2]||extent[1]>=extent[3])},fromOgcUrnCrs:function fromOgcUrnCrs(crsStr){if(crsStr.endsWith(":CRS84")){return"EPSG:4326"}var parts=crsStr.split(":");return"EPSG:"+parts.slice(-1)},toOgcUrnCrs:function toOgcUrnCrs(crsStr){var parts=crsStr.split(":");return"urn:ogc:def:crs:"+parts[0]+"::"+parts[1]},getEsriWktFromCrs:function getEsriWktFromCrs(crsStr){var epsgCode=crsStr.startsWith("EPSG:")?crsStr:CoordinatesUtils.fromOgcUrnCrs(crsStr);var projections=ConfigUtils.getConfigProp("projections")||[];var configProjection=projections.find(function(proj){return proj.code===epsgCode});if(configProjection&&configProjection.esriWkt){return configProjection.esriWkt}if(commonEsriWktLookup[epsgCode]){return commonEsriWktLookup[epsgCode]}console.warn("No ESRI WKT definition found for ".concat(epsgCode,". Shapefile export may not include projection information. Consider adding an 'esriWkt' property to the projection in config.json."));return null},getFormattedCoordinate:function getFormattedCoordinate(coo,srcCrs){var _options$decimals;var dstCrs=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var options=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{};var units=CoordinatesUtils.getUnits(dstCrs!==null&&dstCrs!==void 0?dstCrs:srcCrs);var decimals=(_options$decimals=options.decimals)!==null&&_options$decimals!==void 0?_options$decimals:CoordinatesUtils.getPrecision(dstCrs!==null&&dstCrs!==void 0?dstCrs:srcCrs);var _ref=function(){var config=CoordinatesUtils.getProjectionConfig(dstCrs!==null&&dstCrs!==void 0?dstCrs:srcCrs);return{format:units!=="degrees"?"decimal":config.format,addDirection:config.addDirection,swapLonLat:config.swapLonLat}}(),format=_ref.format,addDirection=_ref.addDirection,swapLonLat=_ref.swapLonLat;if(srcCrs&&dstCrs&&srcCrs!==dstCrs){coo=CoordinatesUtils.reproject(coo,srcCrs,dstCrs)}if(swapLonLat){coo=[coo[1],coo[0]]}var toDMS=function toDMS(coord){var deg=Math.floor(Math.abs(coord));var minFull=(Math.abs(coord)-deg)*60;var min=Math.floor(minFull);var sec=((minFull-min)*60).toFixed(decimals);return"".concat(deg,"\xB0 ").concat(min,"' ").concat(sec,"\"")};var toDM=function toDM(coord){var deg=Math.floor(Math.abs(coord));var min=((Math.abs(coord)-deg)*60).toFixed(decimals);return"".concat(deg,"\xB0 ").concat(min,"'")};var formatCoordinate=function formatCoordinate(value,isLat){var direction="";if(addDirection!=="none"){if(isLat){direction=value>=0?"N":"S"}else{direction=value>=0?"E":"W"}}var formatted;switch(format){case"dms":formatted=toDMS(value,decimals);break;case"dm":formatted=toDM(value,decimals);break;default:formatted=LocaleUtils.toLocaleFixed(Math.abs(value),decimals)}if(addDirection==="prefix"){return"".concat(direction).concat(formatted)}else if(addDirection==="suffix"){return"".concat(formatted).concat(direction)}return formatted};return coo.map(function(coord,idx){return formatCoordinate(coord,swapLonLat?idx===0:idx===1)}).join(", ")}};export default CoordinatesUtils;
@@ -7,4 +7,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
7
7
  */import ol from"openlayers";import minus from"../icons/minus.svg";import plus from"../icons/plus.svg";import ConfigUtils from"./ConfigUtils";import ResourceRegistry from"./ResourceRegistry";import arrowhead from"./img/arrowhead.svg";import markerIcon from"./img/marker-icon.png";import measurehead from"./img/measurehead.svg";ResourceRegistry.addResource("arrowhead",arrowhead);ResourceRegistry.addResource("measurehead",measurehead);ResourceRegistry.addResource("marker",markerIcon);ResourceRegistry.addResource("minus",minus);ResourceRegistry.addResource("plus",plus);var DEFAULT_FEATURE_STYLE={strokeColor:[0,0,255,1],strokeWidth:1,strokeDash:[4],fillColor:[255,0,255,0.33],circleRadius:10,textFill:"black",textStroke:"white",textFont:"11pt sans-serif"};var DEFAULT_MARKER_STYLE={iconAnchor:[0.5,1],opacity:1,iconSrc:markerIcon,color:undefined,scale:undefined,crossOrigin:undefined,textColor:"#000000",textStroke:"#FFFFFF"};var DEFAULT_INTERACTION_STYLE={fillColor:[255,0,0,0.5],strokeColor:"red",strokeWidth:1.5,vertexFillColor:"white",vertexStrokeColor:"red",snapFillColor:[255,255,255,0.05],snapStrokeColor:"#3399CC",snapStrokeWidth:1,snapVertexFillColor:[255,255,255,0.05],snapVertexStrokeColor:"#3399CC",measureFillColor:[255,0,0,0.25],measureStrokeColor:"red",measureStrokeWidth:4,measureVertexFillColor:"white",measureVertexStrokeColor:"red",measureVertexStrokeWidth:2,measurePointRadius:6,sketchPointFillColor:"#0099FF",sketchPointStrokeColor:"white",sketchPointRadius:6,printStrokeColor:"#3399CC",printStrokeWidth:3,printVertexColor:"#FFFFFF",printVertexRadius:6,printBackgroundColor:[0,0,0,0.5]};export var END_MARKERS={OUTARROW:{src:arrowhead,anchor:[0.05,0.5],baserotation:0},INARROW:{src:arrowhead,anchor:[0.05,0.5],baserotation:180},LINE:{src:measurehead,anchor:[0.05,0.5],baserotation:0}};export function computeFeatureStyle(layer,feature){return _objectSpread(_objectSpread(_objectSpread(_objectSpread({},DEFAULT_FEATURE_STYLE),ConfigUtils.getConfigProp("defaultFeatureStyle")),layer.styleOptions),feature.styleOptions)}var defaultStyle=function defaultStyle(feature,options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_FEATURE_STYLE),ConfigUtils.getConfigProp("defaultFeatureStyle")),options);var styles=[];styles.push(new ol.style.Style({fill:new ol.style.Fill({color:opts.fillColor}),stroke:new ol.style.Stroke({color:opts.strokeColor,width:opts.strokeWidth,lineDash:opts.strokeDash}),image:opts.circleRadius>0?new ol.style.Circle({radius:opts.circleRadius,fill:new ol.style.Fill({color:opts.fillColor}),stroke:new ol.style.Stroke({color:opts.strokeColor,width:opts.strokeWidth})}):null}));if(feature.getProperties().label){styles.push(new ol.style.Style({geometry:function geometry(f){if(f.getGeometry().getType().startsWith("Multi")){// Only label middle point
8
8
  var extent=f.getGeometry().getExtent();return new ol.geom.Point(f.getGeometry().getClosestPoint(ol.extent.getCenter(extent)))}return f.getGeometry()},text:new ol.style.Text({font:opts.textFont||"11pt sans-serif",text:feature.getProperties().label||"",overflow:true,fill:new ol.style.Fill({color:opts.textFill}),stroke:new ol.style.Stroke({color:opts.textStroke,width:3}),textAlign:feature.getGeometry().getType()==="Point"?"left":"center",textBaseline:feature.getGeometry().getType()==="Point"?"bottom":"middle",offsetX:feature.getGeometry().getType()==="Point"?5+opts.circleRadius:0})}))}if(feature.getProperties().segment_labels){var segmentLabels=feature.getProperties().segment_labels;var coo=feature.getGeometry().getCoordinates();for(var i=0;i<coo.length-1;++i){var p1=coo[i];var p2=coo[i+1];var angle=-Math.atan2(p2[1]-p1[1],p2[0]-p1[0]);while(angle<-0.5*Math.PI){angle+=Math.PI}while(angle>0.5*Math.PI){angle-=Math.PI}styles.push(new ol.style.Style({geometry:new ol.geom.Point([0.5*(p1[0]+p2[0]),0.5*(p1[1]+p2[1])]),text:new ol.style.Text({font:opts.textFont||"11pt sans-serif",text:segmentLabels[i],fill:new ol.style.Fill({color:opts.textFill}),stroke:new ol.style.Stroke({color:opts.textStroke,width:3}),rotation:angle,offsetY:10})}))}}if(feature.getGeometry().getType()==="LineString"&&opts.headmarker in END_MARKERS){var _p=feature.getGeometry().getCoordinates()[0];var _p2=feature.getGeometry().getCoordinates()[1];var rotation=0.5*Math.PI+Math.atan2(_p[0]-_p2[0],_p[1]-_p2[1]);styles.push(new ol.style.Style({geometry:new ol.geom.Point(_p),image:new ol.style.Icon(_objectSpread(_objectSpread({},END_MARKERS[opts.headmarker]),{},{anchorXUnits:"fraction",anchorYUnits:"fraction",color:opts.strokeColor,rotation:END_MARKERS[opts.headmarker].baserotation/180*Math.PI+rotation,scale:0.125*(1+opts.strokeWidth)// Also update in VectorLayerUtils.generateMarkerGeometry
9
9
  }))}))}if(feature.getGeometry().getType()==="LineString"&&opts.tailmarker in END_MARKERS){var l=feature.getGeometry().getCoordinates().length;var _p3=feature.getGeometry().getCoordinates()[l-1];var _p4=feature.getGeometry().getCoordinates()[l-2];var _rotation=0.5*Math.PI+Math.atan2(_p3[0]-_p4[0],_p3[1]-_p4[1]);styles.push(new ol.style.Style({geometry:new ol.geom.Point(_p3),image:new ol.style.Icon(_objectSpread(_objectSpread({},END_MARKERS[opts.tailmarker]),{},{anchorXUnits:"fraction",anchorYUnits:"fraction",color:opts.strokeColor,rotation:END_MARKERS[opts.tailmarker].baserotation/180*Math.PI+_rotation,scale:0.125*(1+opts.strokeWidth)// Also update in VectorLayerUtils.generateMarkerGeometry
10
- }))}))}return styles};export default{"default":defaultStyle,marker:function marker(feature,options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_MARKER_STYLE),ConfigUtils.getConfigProp("defaultMarkerStyle")),options);return[new ol.style.Style({image:new ol.style.Icon({anchor:opts.iconAnchor,anchorXUnits:"fraction",anchorYUnits:"fraction",opacity:opts.opacity,crossOrigin:opts.crossOrigin,src:opts.iconSrc,scale:opts.scale,color:opts.color}),text:new ol.style.Text({font:opts.textFont||"11pt sans-serif",text:feature.getProperties().label||"",offsetY:8,fill:new ol.style.Fill({color:opts.textColor}),stroke:new ol.style.Stroke({color:opts.textStroke,width:3})})})]},interaction:function interaction(options,isSnap){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);var fillColor=opts.fillColor;var strokeColor=opts.strokeColor;var strokeWidth=opts.strokeWidth;if(isSnap){fillColor=opts.snapFillColor;strokeColor=opts.snapStrokeColor;strokeWidth=opts.snapStrokeWidth}return new ol.style.Style({fill:new ol.style.Fill({color:fillColor}),stroke:new ol.style.Stroke({color:strokeColor,width:strokeWidth})})},interactionVertex:function interactionVertex(options,isSnap){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);var strokeWidth=opts.strokeWidth;var vertexFill=opts.vertexFillColor;var vertexStroke=opts.vertexStrokeColor;if(isSnap){strokeWidth=opts.snapStrokeWidth;vertexFill=opts.snapVertexFillColor;vertexStroke=opts.snapVertexStrokeColor}return new ol.style.Style({image:options.img?new ol.style.Icon({src:ResourceRegistry.getResource(options.img),rotation:options.rotation,anchor:[0.5,1],imgSize:options.size,rotateWithView:true}):new ol.style.RegularShape({fill:new ol.style.Fill({color:vertexFill}),stroke:new ol.style.Stroke({color:vertexStroke,width:strokeWidth}),points:4,radius:5,angle:Math.PI/4}),geometry:opts.geometryFunction})},measureInteraction:function measureInteraction(feature,options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);var styleOptions={strokeColor:opts.measureStrokeColor,strokeWidth:opts.measureStrokeWidth,fillColor:opts.measureFillColor,strokeDash:[]};return defaultStyle(feature,styleOptions)},measureInteractionVertex:function measureInteractionVertex(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({image:new ol.style.Circle({radius:opts.measurePointRadius,fill:new ol.style.Fill({color:opts.measureVertexFillColor}),stroke:new ol.style.Stroke({color:opts.measureVertexStrokeColor,width:opts.measureVertexStrokeWidth})}),geometry:opts.geometryFunction})},sketchInteraction:function sketchInteraction(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({image:new ol.style.Circle({fill:new ol.style.Fill({color:opts.sketchPointFillColor}),stroke:new ol.style.Stroke({color:opts.sketchPointStrokeColor,width:opts.strokeWidth}),radius:opts.sketchPointRadius})})},printInteraction:function printInteraction(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,fill:new ol.style.Fill({color:[0,0,0,0]}),stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})},printInteractionVertex:function printInteractionVertex(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,image:new ol.style.Circle({radius:opts.printVertexRadius,fill:new ol.style.Fill({color:opts.fill?opts.printStrokeColor:opts.printVertexColor}),stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})})},printInteractionBackground:function printInteractionBackground(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,fill:new ol.style.Fill({color:opts.printBackgroundColor})})},printInteractionSeries:function printInteractionSeries(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})},printInteractionSeriesIcon:function printInteractionSeriesIcon(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return[new ol.style.Style({geometry:opts.geometryFunction,image:new ol.style.Circle({radius:20*opts.radius,fill:new ol.style.Fill({color:opts.printVertexColor}),stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})}),new ol.style.Style({geometry:opts.geometryFunction,image:new ol.style.Icon({src:ResourceRegistry.getResource(opts.img),opacity:0.5,rotation:opts.rotation,scale:opts.radius,rotateWithView:true})})]},image:function image(feature,options){return new ol.style.Style({image:new ol.style.Icon({src:ResourceRegistry.getResource(options.img),rotation:options.rotation,anchor:options.anchor,imgSize:options.size,rotateWithView:true})})},text:function text(feature,options){return[new ol.style.Style({text:new ol.style.Text({font:"10pt sans-serif",text:feature.getProperties().label||"",rotation:feature.getProperties().rotation||0,scale:options.strokeWidth,fill:new ol.style.Fill({color:options.fillColor}),stroke:new ol.style.Stroke({color:options.strokeColor,width:2})})})]}};
10
+ }))}))}return styles};export default{"default":defaultStyle,marker:function marker(feature,options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_MARKER_STYLE),ConfigUtils.getConfigProp("defaultMarkerStyle")),options);return[new ol.style.Style({image:new ol.style.Icon({anchor:opts.iconAnchor,anchorXUnits:"fraction",anchorYUnits:"fraction",opacity:opts.opacity,crossOrigin:opts.crossOrigin,src:opts.iconSrc,scale:opts.scale,color:opts.color}),text:new ol.style.Text({font:opts.textFont||"11pt sans-serif",text:feature.getProperties().label||"",offsetY:8,fill:new ol.style.Fill({color:opts.textColor}),stroke:new ol.style.Stroke({color:opts.textStroke,width:3})})})]},interaction:function interaction(options,isSnap){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);var fillColor=opts.fillColor;var strokeColor=opts.strokeColor;var strokeWidth=opts.strokeWidth;if(isSnap){fillColor=opts.snapFillColor;strokeColor=opts.snapStrokeColor;strokeWidth=opts.snapStrokeWidth}return new ol.style.Style({fill:new ol.style.Fill({color:fillColor}),stroke:new ol.style.Stroke({color:strokeColor,width:strokeWidth})})},interactionVertex:function interactionVertex(options,isSnap){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);var strokeWidth=opts.strokeWidth;var vertexFill=opts.vertexFillColor;var vertexStroke=opts.vertexStrokeColor;if(isSnap){strokeWidth=opts.snapStrokeWidth;vertexFill=opts.snapVertexFillColor;vertexStroke=opts.snapVertexStrokeColor}return new ol.style.Style({image:options.img?new ol.style.Icon({src:ResourceRegistry.getResource(options.img),rotation:options.rotation,anchor:[0.5,1],imgSize:options.size,rotateWithView:true}):new ol.style.RegularShape({fill:new ol.style.Fill({color:vertexFill}),stroke:new ol.style.Stroke({color:vertexStroke,width:strokeWidth}),points:4,radius:5,angle:Math.PI/4}),geometry:opts.geometryFunction})},measureInteraction:function measureInteraction(feature,options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);var styleOptions={strokeColor:opts.measureStrokeColor,strokeWidth:opts.measureStrokeWidth,fillColor:opts.measureFillColor,headmarker:opts.headmarker,tailmarker:opts.tailmarker,strokeDash:[]};return defaultStyle(feature,styleOptions)},measureInteractionVertex:function measureInteractionVertex(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({image:new ol.style.Circle({radius:opts.measurePointRadius,fill:new ol.style.Fill({color:opts.measureVertexFillColor}),stroke:new ol.style.Stroke({color:opts.measureVertexStrokeColor,width:opts.measureVertexStrokeWidth})}),geometry:opts.geometryFunction})},sketchInteraction:function sketchInteraction(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({image:new ol.style.Circle({fill:new ol.style.Fill({color:opts.sketchPointFillColor}),stroke:new ol.style.Stroke({color:opts.sketchPointStrokeColor,width:opts.strokeWidth}),radius:opts.sketchPointRadius})})},printInteraction:function printInteraction(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,fill:new ol.style.Fill({color:[0,0,0,0]}),stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})},printInteractionVertex:function printInteractionVertex(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,image:new ol.style.Circle({radius:opts.printVertexRadius,fill:new ol.style.Fill({color:opts.fill?opts.printStrokeColor:opts.printVertexColor}),stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})})},printInteractionBackground:function printInteractionBackground(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,fill:new ol.style.Fill({color:opts.printBackgroundColor})})},printInteractionSeries:function printInteractionSeries(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return new ol.style.Style({geometry:opts.geometryFunction,stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})},printInteractionSeriesIcon:function printInteractionSeriesIcon(options){var opts=_objectSpread(_objectSpread(_objectSpread({},DEFAULT_INTERACTION_STYLE),ConfigUtils.getConfigProp("defaultInteractionStyle")),options);return[new ol.style.Style({geometry:opts.geometryFunction,image:new ol.style.Circle({radius:20*opts.radius,fill:new ol.style.Fill({color:opts.printVertexColor}),stroke:new ol.style.Stroke({color:opts.printStrokeColor,width:opts.printStrokeWidth})})}),new ol.style.Style({geometry:opts.geometryFunction,image:new ol.style.Icon({src:ResourceRegistry.getResource(opts.img),opacity:0.5,rotation:opts.rotation,scale:opts.radius,rotateWithView:true})})]},image:function image(feature,options){return new ol.style.Style({image:new ol.style.Icon({src:ResourceRegistry.getResource(options.img),rotation:options.rotation,anchor:options.anchor,imgSize:options.size,rotateWithView:true})})},text:function text(feature,options){return[new ol.style.Style({text:new ol.style.Text({font:"10pt sans-serif",text:feature.getProperties().label||"",rotation:feature.getProperties().rotation||0,scale:options.strokeWidth,fill:new ol.style.Fill({color:options.fillColor}),stroke:new ol.style.Stroke({color:options.strokeColor,width:2})})})]}};
@@ -4,9 +4,9 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
4
4
  *
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
- */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
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{v4 as uuidv4}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
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,translations){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{var _translations$layers$,_translations$layers;var attrname=(_translations$layers$=translations===null||translations===void 0||(_translations$layers=translations.layers)===null||_translations$layers===void 0||(_translations$layers=_translations$layers[layername])===null||_translations$layers===void 0||(_translations$layers=_translations$layers.fields)===null||_translations$layers===void 0?void 0:_translations$layers[attribute.attributes.name.value])!==null&&_translations$layers$!==void 0?_translations$layers$:attribute.attributes.name.value;featureResult.properties[attrname]=attribute.attributes.value.value;if(attribute.attributes.attrname){attrmapping[attrname]=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 _doc$firstChild,_doc$firstChild$getEl,_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=doc.firstChild)===null||_doc$firstChild===void 0||(_doc$firstChild$getEl=_doc$firstChild.getElementsByTagName)===null||_doc$firstChild$getEl===void 0?void 0:_doc$firstChild$getEl.call(_doc$firstChild,"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){var _layer$translations$l,_layer$translations;layername=layerEl.attributes.layername.value;layertitle=(_layer$translations$l=(_layer$translations=layer.translations)===null||_layer$translations===void 0||(_layer$translations=_layer$translations.layertree)===null||_layer$translations===void 0?void 0:_layer$translations[layername])!==null&&_layer$translations$l!==void 0?_layer$translations$l: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.name.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,layer.translations)})}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
- 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
11
+ var id=feature.id||(feature.properties||{}).OBJECTID||uuidv4();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
12
12
  geometry=VectorLayerUtils.reprojectGeometry(geometry,(_response$crs$propert=(_response$crs$propert2=response.crs.properties)===null||_response$crs$propert2===void 0?void 0:_response$crs$propert2.name)!==null&&_response$crs$propert!==void 0?_response$crs$propert:"EPSG:4326",geometrycrs)}result[layer.name].push(_objectSpread(_objectSpread({},feature),{},{id:id,geometry:geometry,layername:layer.name,layertitle:layer.title}))});return result},parseGmlResponse:function parseGmlResponse(response,geometrycrs,layer,posstr){var parser=new DOMParser;var doc=parser.parseFromString(response,"text/xml");var result={};var msGMLOutput=doc.getElementsByTagName("msGMLOutput")[0];if(msGMLOutput){var count=0;var _iterator3=_createForOfIteratorHelper([].slice.call(msGMLOutput.children)),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var layerEl=_step3.value;var layerName=layerEl.nodeName.replace(/_layer$/,"");var featureName=layerName+"_feature";result[layerName]=[];var _iterator4=_createForOfIteratorHelper([].slice.call(layerEl.getElementsByTagName(featureName))),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var featureEl=_step4.value;var context=[{featureType:featureName}];var feature=new ol.format.GeoJSON().writeFeatureObject(new ol.format.GML2().readFeatureElement(featureEl,context));feature.id=count++;feature.layername=layer.name;feature.layertitle=layer.title;delete feature.properties.boundedBy;result[layerName].push(feature)}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}else{result[layer.name]=[{type:"text",text:response,id:posstr}]}return result},parseGml3Response:function parseGml3Response(response,geometrycrs,layer){var _fmtGeoJson$writeFeat,_fmtGeoJson$writeFeat2;var fmtGml3=new ol.format.GML3;var fmtGeoJson=new ol.format.GeoJSON;return _defineProperty({},layer.name,(_fmtGeoJson$writeFeat=(_fmtGeoJson$writeFeat2=fmtGeoJson.writeFeaturesObject(fmtGml3.readFeatures(response)))===null||_fmtGeoJson$writeFeat2===void 0?void 0:_fmtGeoJson$writeFeat2.features)!==null&&_fmtGeoJson$writeFeat!==void 0?_fmtGeoJson$writeFeat:[])},parseGml32Response:function parseGml32Response(response,geometrycrs,layer){var _fmtGeoJson$writeFeat3,_fmtGeoJson$writeFeat4;var fmtGml32=new ol.format.GML32;var fmtGeoJson=new ol.format.GeoJSON;return _defineProperty({},layer.name,(_fmtGeoJson$writeFeat3=(_fmtGeoJson$writeFeat4=fmtGeoJson.writeFeaturesObject(fmtGml32.readFeatures(response)))===null||_fmtGeoJson$writeFeat4===void 0?void 0:_fmtGeoJson$writeFeat4.features)!==null&&_fmtGeoJson$writeFeat3!==void 0?_fmtGeoJson$writeFeat3:[])}};export default IdentifyUtils;
@@ -30,9 +30,7 @@ var fglayers=layers.filter(function(layer){return layer.role!==LayerRole.BACKGRO
30
30
  var exploded=LayerUtils.explodeLayers(fglayers);// Find entry to move
31
31
  if(movelayer){var indices=exploded.reduce(function(result,entry,index){if(entry.layer.id===movelayer.id&&LayerUtils.pathEqualOrBelow(sublayerpath,entry.path)){return[].concat(_toConsumableArray(result),[index])}return result},[]);if(isEmpty(indices)){return layers}indices.sort(function(a,b){return a-b});if(delta<0&&indices[0]<=0||delta>0&&indices[indices.length-1]>=exploded.length-1){return layers}if(preventSplittingGroups){// Prevent moving an entry out of a containing group
32
32
  var idx=delta<0?indices[0]:indices[indices.length-1];var level=sublayerpath.length;if(level>exploded[idx+delta].path.length||level>0&&!isEqual(exploded[idx+delta].path.slice(0,level-1),sublayerpath.slice(0,-1))){return layers}// Avoid splitting sibling groups when reordering
33
- if(exploded[idx+delta].path.length>level||!isEqual(exploded[idx+delta].path.slice(0,-1),sublayerpath.slice(0,-1))){// Find next slot
34
- var siblinggrouppath=exploded[idx+delta].path.slice(0,level);siblinggrouppath[siblinggrouppath.length-1]+=delta;while(idx+delta>=0&&idx+delta<exploded.length&&(exploded[idx+delta].path.length>level||!isEqual(exploded[idx+delta].path.slice(0,level),siblinggrouppath))){delta+=delta>0?1:-1}// The above logic adds the number of items to skip to the delta which is already -1 or +1, so we need to decrease delta by one accordingly
35
- if(Math.abs(delta)>1){delta+=delta>0?-1:1}if(idx+delta<0||idx+delta>=exploded.length){return layers}}}// Reorder layer
33
+ var siblinggrouppath=exploded[idx+delta].path.length>level?exploded[idx+delta].path.slice(0,level):null;if(siblinggrouppath!==null){var dir=delta>0?1:-1;while(idx+delta+dir>=0&&idx+delta+dir<exploded.length&&LayerUtils.pathEqualOrBelow(siblinggrouppath,exploded[idx+delta+dir].path)){delta+=dir}}}// Reorder layer
36
34
  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
35
  var newlayers=LayerUtils.implodeLayers(exploded);// Re-add background layers
38
36
  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
@@ -54,4 +52,4 @@ params.LAYERS.push("wfs:".concat(layer.url,"#").concat(layer.name));params.OPACI
54
52
  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
55
53
  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
56
54
  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
57
- 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}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},applyTranslations:function applyTranslations(layer,translations){var _translations$layertr,_translations$layertr2,_layer$sublayers,_layer$sublayers$map;return _objectSpread(_objectSpread({},layer),{},{title:(_translations$layertr=translations===null||translations===void 0||(_translations$layertr2=translations.layertree)===null||_translations$layertr2===void 0?void 0:_translations$layertr2[layer.name])!==null&&_translations$layertr!==void 0?_translations$layertr:layer.title,sublayers:(_layer$sublayers=layer.sublayers)===null||_layer$sublayers===void 0||(_layer$sublayers$map=_layer$sublayers.map)===null||_layer$sublayers$map===void 0?void 0:_layer$sublayers$map.call(_layer$sublayers,function(sublayer){return LayerUtils.applyTranslations(sublayer,translations)})})}};export default LayerUtils;
55
+ 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}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))});if(layer.visibility&&!layer.url){result[layer.name]=""}}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},applyTranslations:function applyTranslations(layer,translations){var _translations$layertr,_translations$layertr2,_layer$sublayers,_layer$sublayers$map;return _objectSpread(_objectSpread({},layer),{},{title:(_translations$layertr=translations===null||translations===void 0||(_translations$layertr2=translations.layertree)===null||_translations$layertr2===void 0?void 0:_translations$layertr2[layer.name])!==null&&_translations$layertr!==void 0?_translations$layertr:layer.title,sublayers:(_layer$sublayers=layer.sublayers)===null||_layer$sublayers===void 0||(_layer$sublayers$map=_layer$sublayers.map)===null||_layer$sublayers$map===void 0?void 0:_layer$sublayers$map.call(_layer$sublayers,function(sublayer){return LayerUtils.applyTranslations(sublayer,translations)})})}};export default LayerUtils;
@@ -4,9 +4,9 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
4
4
  *
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
- */import axios from"axios";import{v1 as uuidv1}from"uuid";import ConfigUtils from"./ConfigUtils";import LocaleUtils from"./LocaleUtils";import VectorLayerUtils from"./VectorLayerUtils";var ValhallaSession={reqId:null,pending:0,result:null,clear:function clear(){ValhallaSession.reqId=null;ValhallaSession.pending=0;ValhallaSession.result=null}};function decodeShape(str){var precision=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var index=0;var lat=0;var lng=0;var coordinates=[];var shift=0;var result=0;var _byte=null;var latitudeChange;var longitudeChange;var factor=Math.pow(10,precision||6);// Coordinates have variable length when encoded, so just keep
7
+ */import axios from"axios";import{v4 as uuidv4}from"uuid";import ConfigUtils from"./ConfigUtils";import LocaleUtils from"./LocaleUtils";import VectorLayerUtils from"./VectorLayerUtils";var ValhallaSession={reqId:null,pending:0,result:null,clear:function clear(){ValhallaSession.reqId=null;ValhallaSession.pending=0;ValhallaSession.result=null}};function decodeShape(str){var precision=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var index=0;var lat=0;var lng=0;var coordinates=[];var shift=0;var result=0;var _byte=null;var latitudeChange;var longitudeChange;var factor=Math.pow(10,precision||6);// Coordinates have variable length when encoded, so just keep
8
8
  // track of whether we've hit the end of the string. In each
9
9
  // loop iteration, a single coordinate is decoded.
10
10
  while(index<str.length){// Reset shift, result, and byte
11
11
  _byte=null;shift=0;result=0;do{_byte=str.charCodeAt(index++)-63;result|=(_byte&31)<<shift;shift+=5}while(_byte>=32);latitudeChange=result&1?~(result>>1):result>>1;shift=result=0;do{_byte=str.charCodeAt(index++)-63;result|=(_byte&31)<<shift;shift+=5}while(_byte>=32);longitudeChange=result&1?~(result>>1):result>>1;lat+=latitudeChange;lng+=longitudeChange;coordinates.push([lng/factor,lat/factor])}return coordinates}function getValhallaParams(costing,locations,options,extraOptions){var costingOptions={};if(costing==="auto"){costingOptions.auto={top_speed:options.maxSpeed,shortest:options.method==="shortest",use_ferry:options.useFerries?1:0,use_tolls:options.useTollways?1:0,use_highways:options.useHighways?1:0}}else if(costing==="heavyvehicle"){costing="truck";costingOptions.truck={top_speed:options.maxSpeed,shortest:options.method==="shortest",use_ferry:options.useFerries?1:0,use_tolls:options.useTollways?1:0,use_highways:options.useHighways?1:0}}else if(costing==="transit"){costing="multimodal";var timepointMap={now:0,leaveat:1,arriveat:2};extraOptions.date_time={value:options.time.slice(0,16),type:timepointMap[options.timepoint]}}else if(costing==="bicycle"){costingOptions.bicycle={cycling_speed:options.maxSpeed,shortest:options.method==="shortest",use_ferry:options.useFerries?1:0}}else if(costing==="pedestrian"){costingOptions.pedestrian={walking_speed:options.maxSpeed,shortest:options.method==="shortest",use_ferry:options.useFerries?1:0}}var payload=_objectSpread({costing:costing,costing_options:costingOptions,exclude_polygons:options.exclude_polygons||[],locations:locations.map(function(loc){return{lon:loc[0],lat:loc[1]}}),directions_options:{units:"kilometers",language:LocaleUtils.lang()}},extraOptions);return{json:JSON.stringify(payload)}}function computeRoute(costing,locations,options,callback){var extraOptions={id:"valhalla_directions"};var params=getValhallaParams(costing,locations,options,extraOptions);var serviceUrl=ConfigUtils.getConfigProp("routingServiceUrl").replace(/\/$/,"");var endpoint=options.optimized_route?"optimized_route":"route";axios.get(serviceUrl+"/"+endpoint,{params:params}).then(function(response){if(!response.data||!response.data.trip){callback(false,{errorMsgId:LocaleUtils.trmsg("routing.computefailed")});return}var trip=response.data.trip;if(trip.status!==0){callback(false,response.data.trip.status_message)}// https://valhalla.github.io/valhalla/api/turn-by-turn/api-reference/
12
- var travelTypeMap={car:{icon:"routing-car",color:[0,0,255,1]},tractor_trailer:{icon:"routing-truck",color:[0,0,255,1]},foot:{icon:"routing-walking",color:[127,127,255,1]},road:{icon:"routing-bicycle",color:[0,127,0,1]},tram:{icon:"routing-tram",color:[255,0,0,1]},metro:{icon:"routing-tram",color:[255,0,0,1]},rail:{icon:"routing-train",color:[255,0,0,1]},bus:{icon:"routing-bus",color:[255,0,0,1]},ferry:{icon:"routing-ship",color:[0,0,200,1]},cable_car:{icon:"routing-cablecar",color:[255,0,0,1]},gondola:{icon:"routing-cablecar",color:[255,0,0,1]},funicular:{icon:"routing-cablecar",color:[255,0,0,1]}};var result={legs:trip.legs.map(function(leg){return{coordinates:decodeShape(leg.shape),time:leg.summary.time,length:leg.summary.length*1000,maneuvers:leg.maneuvers.map(function(entry){return{instruction:entry.instruction,post_instruction:entry.verbal_post_transition_instruction,geom_indices:[entry.begin_shape_index,entry.end_shape_index],icon:(travelTypeMap[entry.travel_type]||{}).icon||"routing",color:(travelTypeMap[entry.travel_type]||{}).color||"#0000FF",time:entry.time,length:entry.length*1000}})}}),locations:trip.locations.map(function(location){return{lat:location.lat,lon:location.lon,orig_idx:location.original_index}}),summary:{bounds:[trip.summary.min_lon,trip.summary.min_lat,trip.summary.max_lon,trip.summary.max_lat],time:trip.summary.time,length:trip.summary.length*1000}};callback(true,result)})["catch"](function(e){var error=((e.response||{}).data||{}).error;var data={};if(error){data.error=error}else{data.errorMsgId=LocaleUtils.trmsg("routing.computefailed")}callback(false,data)})}function computeIsochrone(costing,locations,contourOptions,options,callback){var extraOptions={contours:contourOptions.intervals.map(function(entry){return _defineProperty({},contourOptions.mode,entry)}),id:"valhalla_isochrone"};var serviceUrl=ConfigUtils.getConfigProp("routingServiceUrl").replace(/\/$/,"");var reqId=uuidv1();ValhallaSession.reqId=reqId;ValhallaSession.pending=locations.length;locations.forEach(function(location){var params=getValhallaParams(costing,[location],options,extraOptions);axios.get(serviceUrl+"/isochrone",{params:params}).then(function(response){if(reqId!==ValhallaSession.reqId){return}if(!response.data||!response.data.features){ValhallaSession.clear();callback(false,{errorMsgId:LocaleUtils.trmsg("routing.computefailed")});return}ValhallaSession.pending-=1;if(!ValhallaSession.result){ValhallaSession.result=response.data}else{var _ValhallaSession$resu;(_ValhallaSession$resu=ValhallaSession.result.features).push.apply(_ValhallaSession$resu,_toConsumableArray(response.data.features))}if(ValhallaSession.pending===0){var areas=ValhallaSession.result.features.map(function(feature){return feature.geometry.coordinates});callback(true,{areas:areas,bounds:VectorLayerUtils.computeFeatureBBox(ValhallaSession.result)});ValhallaSession.clear()}})["catch"](function(e){ValhallaSession.clear();var error=((e.response||{}).data||{}).error;var data={};if(error){data.error=error}else{data.errorMsgId=LocaleUtils.trmsg("routing.computefailed")}callback(false,data)})})}export default{computeRoute:computeRoute,computeIsochrone:computeIsochrone};
12
+ var travelTypeMap={car:{icon:"routing-car",color:[0,0,255,1]},tractor_trailer:{icon:"routing-truck",color:[0,0,255,1]},foot:{icon:"routing-walking",color:[127,127,255,1]},road:{icon:"routing-bicycle",color:[0,127,0,1]},tram:{icon:"routing-tram",color:[255,0,0,1]},metro:{icon:"routing-tram",color:[255,0,0,1]},rail:{icon:"routing-train",color:[255,0,0,1]},bus:{icon:"routing-bus",color:[255,0,0,1]},ferry:{icon:"routing-ship",color:[0,0,200,1]},cable_car:{icon:"routing-cablecar",color:[255,0,0,1]},gondola:{icon:"routing-cablecar",color:[255,0,0,1]},funicular:{icon:"routing-cablecar",color:[255,0,0,1]}};var result={legs:trip.legs.map(function(leg){return{coordinates:decodeShape(leg.shape),time:leg.summary.time,length:leg.summary.length*1000,maneuvers:leg.maneuvers.map(function(entry){return{instruction:entry.instruction,post_instruction:entry.verbal_post_transition_instruction,geom_indices:[entry.begin_shape_index,entry.end_shape_index],icon:(travelTypeMap[entry.travel_type]||{}).icon||"routing",color:(travelTypeMap[entry.travel_type]||{}).color||"#0000FF",time:entry.time,length:entry.length*1000}})}}),locations:trip.locations.map(function(location){return{lat:location.lat,lon:location.lon,orig_idx:location.original_index}}),summary:{bounds:[trip.summary.min_lon,trip.summary.min_lat,trip.summary.max_lon,trip.summary.max_lat],time:trip.summary.time,length:trip.summary.length*1000}};callback(true,result)})["catch"](function(e){var error=((e.response||{}).data||{}).error;var data={};if(error){data.error=error}else{data.errorMsgId=LocaleUtils.trmsg("routing.computefailed")}callback(false,data)})}function computeIsochrone(costing,locations,contourOptions,options,callback){var extraOptions={contours:contourOptions.intervals.map(function(entry){return _defineProperty({},contourOptions.mode,entry)}),id:"valhalla_isochrone"};var serviceUrl=ConfigUtils.getConfigProp("routingServiceUrl").replace(/\/$/,"");var reqId=uuidv4();ValhallaSession.reqId=reqId;ValhallaSession.pending=locations.length;locations.forEach(function(location){var params=getValhallaParams(costing,[location],options,extraOptions);axios.get(serviceUrl+"/isochrone",{params:params}).then(function(response){if(reqId!==ValhallaSession.reqId){return}if(!response.data||!response.data.features){ValhallaSession.clear();callback(false,{errorMsgId:LocaleUtils.trmsg("routing.computefailed")});return}ValhallaSession.pending-=1;if(!ValhallaSession.result){ValhallaSession.result=response.data}else{var _ValhallaSession$resu;(_ValhallaSession$resu=ValhallaSession.result.features).push.apply(_ValhallaSession$resu,_toConsumableArray(response.data.features))}if(ValhallaSession.pending===0){var areas=ValhallaSession.result.features.map(function(feature){return feature.geometry.coordinates});callback(true,{areas:areas,bounds:VectorLayerUtils.computeFeatureBBox(ValhallaSession.result)});ValhallaSession.clear()}})["catch"](function(e){ValhallaSession.clear();var error=((e.response||{}).data||{}).error;var data={};if(error){data.error=error}else{data.errorMsgId=LocaleUtils.trmsg("routing.computefailed")}callback(false,data)})})}export default{computeRoute:computeRoute,computeIsochrone:computeIsochrone};
@@ -9,7 +9,7 @@ console.warn("Could not determine axis order for projection "+tileMatrices[tileM
9
9
  matrixIds.push(entry.Identifier);return entry.ScaleDenominator*0.00028});var format=(_MiscUtils$ensureArra=MiscUtils.ensureArray(layer.Format).find(function(fmt){return fmt==="image/png"}))!==null&&_MiscUtils$ensureArra!==void 0?_MiscUtils$ensureArra:MiscUtils.ensureArray(layer.Format)[0];var getTile=MiscUtils.ensureArray((_capabilities$Operati=capabilities.OperationsMetadata)===null||_capabilities$Operati===void 0||(_capabilities$Operati=_capabilities$Operati.GetTile)===null||_capabilities$Operati===void 0||(_capabilities$Operati=_capabilities$Operati.DCP)===null||_capabilities$Operati===void 0||(_capabilities$Operati=_capabilities$Operati.HTTP)===null||_capabilities$Operati===void 0?void 0:_capabilities$Operati.Get)[0];var getEncoding=MiscUtils.ensureArray(getTile===null||getTile===void 0?void 0:getTile.Constraint).find(function(c){return c.name==="GetEncoding"});var requestEncoding=MiscUtils.ensureArray(getEncoding===null||getEncoding===void 0?void 0:getEncoding.AllowedValues.Value)[0];var serviceUrl=null;if(requestEncoding==="KVP"){serviceUrl=getTile.href}else{serviceUrl=layer.ResourceURL.find(function(u){return u.resourceType==="tile"}).template;(layer.Dimension||[]).forEach(function(dim){serviceUrl=serviceUrl.replace("{"+dim.Identifier+"}",dim.Default)})}return{type:"wmts",url:serviceUrl,capabilitiesUrl:capabilitiesUrl,title:layer.Title+" - "+tileMatrixSet,name:layer.Identifier,tileMatrixPrefix:tileMatrixPrefix,tileMatrixSet:tileMatrixSet,originX:origin[0],originY:origin[1],projection:tileMatrices[tileMatrixSet].crs,tileSize:[topMatrix.TileWidth,topMatrix.TileHeight],style:style,bbox:{crs:"EPSG:4326",bounds:layer.WGS84BoundingBox},format:format,requestEncoding:requestEncoding,resolutions:resolutions,matrixIds:matrixIds,"abstract":layer.Abstract,attribution:{Title:((_capabilities$Service4=capabilities.ServiceProvider)===null||_capabilities$Service4===void 0?void 0:_capabilities$Service4.ProviderName)||((_capabilities$Service5=capabilities.ServiceIdentification)===null||_capabilities$Service5===void 0?void 0:_capabilities$Service5.Title)||"",OnlineResource:((_capabilities$Service6=capabilities.ServiceProvider)===null||_capabilities$Service6===void 0?void 0:_capabilities$Service6.ProviderSite)||""}}}).filter(Boolean);return layerLinks},getWMSLayers:function getWMSLayers(capabilities,calledServiceUrl){var _capabilities,_capabilities2,_capabilities$WMS_Cap,_this3=this;var asGroup=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(!((_capabilities=capabilities)!==null&&_capabilities!==void 0&&_capabilities.WMS_Capabilities)&&!((_capabilities2=capabilities)!==null&&_capabilities2!==void 0&&_capabilities2.WMT_MS_Capabilities)){return[]}capabilities=(_capabilities$WMS_Cap=capabilities.WMS_Capabilities)!==null&&_capabilities$WMS_Cap!==void 0?_capabilities$WMS_Cap:capabilities.WMT_MS_Capabilities;var calledUrlParts=url.parse(calledServiceUrl,true);var extwmsparams={};calledUrlParts.query=Object.keys(calledUrlParts.query).filter(function(key){// Extract extwms params
10
10
  if(key.toUpperCase().startsWith("EXTWMS.")){extwmsparams[key.substring(7)]=calledUrlParts.query[key];return false}// Filter service and request from calledServiceUrl, but keep other parameters (i.e. MAP)
11
11
  return!["service","request"].includes(key.toLowerCase())}).reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,calledUrlParts.query[key]))},{});delete calledUrlParts.search;var topLayer=capabilities.Capability.Layer;var getMapUrl=this.mergeCalledServiceUrlQuery(ServiceLayerUtils.getDCPTypes(capabilities.Capability.Request.GetMap.DCPType).HTTP.Get.OnlineResource.href,calledUrlParts);var featureInfoUrl=getMapUrl;try{featureInfoUrl=this.mergeCalledServiceUrlQuery(ServiceLayerUtils.getDCPTypes(capabilities.Capability.Request.GetFeatureInfo.DCPType).HTTP.Get.OnlineResource.href,calledUrlParts)}catch(e){// pass
12
- }var mapFormats=null;try{mapFormats=MiscUtils.ensureArray(capabilities.Capability.Request.GetMap.Format)}catch(e){mapFormats=["image/png"]}var infoFormats=null;try{infoFormats=MiscUtils.ensureArray(capabilities.Capability.Request.GetFeatureInfo.Format)}catch(e){infoFormats=["text/plain"]}var externalLayerFeatureInfoFormats=ConfigUtils.getConfigProp("externalLayerFeatureInfoFormats")||{};for(var _i=0,_Object$keys=Object.keys(externalLayerFeatureInfoFormats);_i<_Object$keys.length;_i++){var entry=_Object$keys[_i];if(featureInfoUrl.toLowerCase().includes(entry.toLowerCase())){infoFormats=[externalLayerFeatureInfoFormats[entry]];break}}var version=capabilities.version;var supportedCrs=MiscUtils.ensureArray(topLayer.crs);var topLayerExtent=null;if(topLayer.EX_GeographicBoundingBox){topLayerExtent={crs:"EPSG:4326",bounds:[parseFloat(topLayer.EX_GeographicBoundingBox.westBoundLongitude),parseFloat(topLayer.EX_GeographicBoundingBox.southBoundLatitude),parseFloat(topLayer.EX_GeographicBoundingBox.eastBoundLongitude),parseFloat(topLayer.EX_GeographicBoundingBox.northBoundLatitude)]}}if(!topLayer.Layer||asGroup){return[this.getWMSLayerParams(topLayer,supportedCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent)].filter(function(entry){return entry})}else{var entries=MiscUtils.ensureArray(topLayer.Layer).map(function(layer){return _this3.getWMSLayerParams(layer,supportedCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent)}).filter(function(entry){return entry});return entries.sort(function(a,b){return strcmp(a.title,b.title)})}},getWMSLayerParams:function getWMSLayerParams(layer,parentCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent){var _this4=this,_Object$keys$,_layer$Attribution,_layer$Attribution2,_layer$opacity;var groupbbox=arguments.length>10&&arguments[10]!==undefined?arguments[10]:null;var supportedCrs=MiscUtils.ensureArray(layer.CRS);if(isEmpty(supportedCrs)){supportedCrs=_toConsumableArray(parentCrs||[])}else{supportedCrs=[].concat(_toConsumableArray(parentCrs||[]),_toConsumableArray(supportedCrs))}var sublayers=[];var sublayerbounds={};if(!isEmpty(layer.Layer)){sublayers=MiscUtils.ensureArray(layer.Layer).map(function(sublayer){return _this4.getWMSLayerParams(sublayer,supportedCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent,sublayerbounds)}).filter(function(entry){return entry})}var bbox=null;if(isEmpty(layer.BoundingBox)){if(!isEmpty(sublayerbounds)){bbox=sublayerbounds}else if(topLayerExtent){bbox=topLayerExtent}}else{var _boundingBox$CRS;var boundingBox=MiscUtils.ensureArray(layer.BoundingBox)[0];bbox={crs:(_boundingBox$CRS=boundingBox.CRS)!==null&&_boundingBox$CRS!==void 0?_boundingBox$CRS:boundingBox.SRS,bounds:[boundingBox.minx,boundingBox.miny,boundingBox.maxx,boundingBox.maxy].map(Number)}}if(groupbbox!==null){if(isEmpty(groupbbox)){Object.assign(groupbbox,bbox)}else if(bbox&&bbox.crs===groupbbox.crs){groupbbox.bounds[0]=Math.min(bbox.bounds[0],groupbbox.bounds[0]);groupbbox.bounds[1]=Math.min(bbox.bounds[1],groupbbox.bounds[1]);groupbbox.bounds[2]=Math.max(bbox.bounds[2],groupbbox.bounds[2]);groupbbox.bounds[3]=Math.max(bbox.bounds[3],groupbbox.bounds[3])}}var legendUrl=getMapUrl;try{legendUrl=this.mergeCalledServiceUrlQuery(MiscUtils.ensureArray(MiscUtils.ensureArray(layer.Style)[0].LegendURL)[0].OnlineResource.href,calledUrlParts)}catch(e){/* pass */}var styles=MiscUtils.ensureArray(layer.Style).reduce(function(res,entry){return _objectSpread(_objectSpread({},res),{},_defineProperty({},String(entry.Name),entry.Title))},{});var style=styles["default"]?"default":(_Object$keys$=Object.keys(styles)[0])!==null&&_Object$keys$!==void 0?_Object$keys$:"";var attribution={Title:(_layer$Attribution=layer.Attribution)===null||_layer$Attribution===void 0?void 0:_layer$Attribution.Title,OnlineResource:(_layer$Attribution2=layer.Attribution)===null||_layer$Attribution2===void 0||(_layer$Attribution2=_layer$Attribution2.OnlineResource)===null||_layer$Attribution2===void 0?void 0:_layer$Attribution2.href};return{type:"wms",name:String(layer.Name),title:layer.Title,"abstract":layer.Abstract,attribution:attribution,url:getMapUrl,featureInfoUrl:featureInfoUrl,legendUrl:legendUrl,version:version,infoFormats:infoFormats,mapFormats:mapFormats,queryable:layer.queryable===1,sublayers:isEmpty(sublayers)?null:sublayers,expanded:false,bbox:bbox,visibility:layer.visibilityChecked!==0,opacity:((_layer$opacity=layer.opacity)!==null&&_layer$opacity!==void 0?_layer$opacity:1)*255,extwmsparams:extwmsparams,minScale:layer.MinScaleDenominator!==undefined?Number(layer.MinScaleDenominator):undefined,maxScale:layer.MinScaleDenominator!==undefined?Number(layer.MaxScaleDenominator):undefined,styles:styles,style:style}},getWFSLayers:function getWFSLayers(capabilities,calledServiceUrl,mapCrs){var _capabilities$WFS_Cap;var calledUrlParts=url.parse(calledServiceUrl,true);// Filter service and request from calledServiceUrl, but keep other parameters (i.e. MAP)
12
+ }var mapFormats=null;try{mapFormats=MiscUtils.ensureArray(capabilities.Capability.Request.GetMap.Format)}catch(e){mapFormats=["image/png"]}var infoFormats=null;try{infoFormats=MiscUtils.ensureArray(capabilities.Capability.Request.GetFeatureInfo.Format)}catch(e){infoFormats=["text/plain"]}var externalLayerFeatureInfoFormats=ConfigUtils.getConfigProp("externalLayerFeatureInfoFormats")||{};for(var _i=0,_Object$keys=Object.keys(externalLayerFeatureInfoFormats);_i<_Object$keys.length;_i++){var entry=_Object$keys[_i];if(featureInfoUrl.toLowerCase().includes(entry.toLowerCase())){infoFormats=[externalLayerFeatureInfoFormats[entry]];break}}var version=capabilities.version;var supportedCrs=MiscUtils.ensureArray(topLayer.crs);var topLayerExtent=null;if(topLayer.EX_GeographicBoundingBox){topLayerExtent={crs:"EPSG:4326",bounds:[parseFloat(topLayer.EX_GeographicBoundingBox.westBoundLongitude),parseFloat(topLayer.EX_GeographicBoundingBox.southBoundLatitude),parseFloat(topLayer.EX_GeographicBoundingBox.eastBoundLongitude),parseFloat(topLayer.EX_GeographicBoundingBox.northBoundLatitude)]}}if(!topLayer.Layer||asGroup){return[this.getWMSLayerParams(topLayer,supportedCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent)].filter(function(entry){return entry})}else{var entries=MiscUtils.ensureArray(topLayer.Layer).map(function(layer){return _this3.getWMSLayerParams(layer,supportedCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent)}).filter(function(entry){return entry});return entries.sort(function(a,b){return strcmp(a.title,b.title)})}},getWMSLayerParams:function getWMSLayerParams(layer,parentCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent){var _this4=this,_Object$keys$,_layer$Attribution,_layer$Attribution2,_layer$opacity;var groupbbox=arguments.length>10&&arguments[10]!==undefined?arguments[10]:null;var supportedCrs=MiscUtils.ensureArray(layer.CRS);if(isEmpty(supportedCrs)){supportedCrs=_toConsumableArray(parentCrs||[])}else{supportedCrs=[].concat(_toConsumableArray(parentCrs||[]),_toConsumableArray(supportedCrs))}var sublayers=[];var sublayerbounds={};if(!isEmpty(layer.Layer)){sublayers=MiscUtils.ensureArray(layer.Layer).map(function(sublayer){return _this4.getWMSLayerParams(sublayer,supportedCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent,sublayerbounds)}).filter(function(entry){return entry})}var bbox=null;if(isEmpty(layer.BoundingBox)){if(!isEmpty(sublayerbounds)){bbox=sublayerbounds}else if(topLayerExtent){bbox=topLayerExtent}}else{var _boundingBox$CRS;var boundingBox=MiscUtils.ensureArray(layer.BoundingBox)[0];bbox={crs:(_boundingBox$CRS=boundingBox.CRS)!==null&&_boundingBox$CRS!==void 0?_boundingBox$CRS:boundingBox.SRS,bounds:[boundingBox.minx,boundingBox.miny,boundingBox.maxx,boundingBox.maxy].map(Number)}}if(groupbbox!==null){if(isEmpty(groupbbox)){Object.assign(groupbbox,bbox)}else if(bbox&&bbox.crs===groupbbox.crs){groupbbox.bounds[0]=Math.min(bbox.bounds[0],groupbbox.bounds[0]);groupbbox.bounds[1]=Math.min(bbox.bounds[1],groupbbox.bounds[1]);groupbbox.bounds[2]=Math.max(bbox.bounds[2],groupbbox.bounds[2]);groupbbox.bounds[3]=Math.max(bbox.bounds[3],groupbbox.bounds[3])}}var legendUrl=getMapUrl;try{legendUrl=this.mergeCalledServiceUrlQuery(MiscUtils.ensureArray(MiscUtils.ensureArray(layer.Style)[0].LegendURL)[0].OnlineResource.href,calledUrlParts)}catch(e){/* pass */}var dimensions=[];MiscUtils.ensureArray(layer.Dimension).forEach(function(dim){var _dim$fieldName,_dim$endFieldName;dimensions.push({units:dim.units,name:dim.name,multiple:dim.multiple==="1",value:dim["#text"],fieldName:(_dim$fieldName=dim.fieldName)!==null&&_dim$fieldName!==void 0?_dim$fieldName:null,endFieldName:(_dim$endFieldName=dim.endFieldName)!==null&&_dim$endFieldName!==void 0?_dim$endFieldName:null})});var styles=MiscUtils.ensureArray(layer.Style).reduce(function(res,entry){return _objectSpread(_objectSpread({},res),{},_defineProperty({},String(entry.Name),entry.Title))},{});var style=styles["default"]?"default":(_Object$keys$=Object.keys(styles)[0])!==null&&_Object$keys$!==void 0?_Object$keys$:"";var attribution={Title:(_layer$Attribution=layer.Attribution)===null||_layer$Attribution===void 0?void 0:_layer$Attribution.Title,OnlineResource:(_layer$Attribution2=layer.Attribution)===null||_layer$Attribution2===void 0||(_layer$Attribution2=_layer$Attribution2.OnlineResource)===null||_layer$Attribution2===void 0?void 0:_layer$Attribution2.href};return{type:"wms",name:String(layer.Name),title:layer.Title,"abstract":layer.Abstract,attribution:attribution,url:getMapUrl,featureInfoUrl:featureInfoUrl,legendUrl:legendUrl,version:version,infoFormats:infoFormats,mapFormats:mapFormats,queryable:layer.queryable===1,sublayers:isEmpty(sublayers)?null:sublayers,expanded:false,bbox:bbox,visibility:layer.visibilityChecked!==0,opacity:((_layer$opacity=layer.opacity)!==null&&_layer$opacity!==void 0?_layer$opacity:1)*255,extwmsparams:extwmsparams,minScale:layer.MinScaleDenominator!==undefined?Number(layer.MinScaleDenominator):undefined,maxScale:layer.MinScaleDenominator!==undefined?Number(layer.MaxScaleDenominator):undefined,dimensions:dimensions,styles:styles,style:style}},getWFSLayers:function getWFSLayers(capabilities,calledServiceUrl,mapCrs){var _capabilities$WFS_Cap;var calledUrlParts=url.parse(calledServiceUrl,true);// Filter service and request from calledServiceUrl, but keep other parameters (i.e. MAP)
13
13
  calledUrlParts.query=Object.keys(calledUrlParts.query).filter(function(key){return!["service","request"].includes(key.toLowerCase())}).reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,calledUrlParts.query[key]))},{});delete calledUrlParts.search;if(!(capabilities!==null&&capabilities!==void 0&&(_capabilities$WFS_Cap=capabilities.WFS_Capabilities)!==null&&_capabilities$WFS_Cap!==void 0&&_capabilities$WFS_Cap.version)){return[]}else if(capabilities.WFS_Capabilities.version<"1.1.0"){return ServiceLayerUtils.getWFS10Layers(capabilities.WFS_Capabilities,calledUrlParts)}else{return ServiceLayerUtils.getWFS11_20Layers(capabilities.WFS_Capabilities,calledUrlParts,mapCrs)}},getWFS10Layers:function getWFS10Layers(capabilities,calledUrlParts){var serviceUrl=null;var version=capabilities.version;var formats=null;try{serviceUrl=ServiceLayerUtils.getDCPTypes(MiscUtils.ensureArray(capabilities.Capability.Request.GetFeature.DCPType)).HTTP.Get.onlineResource;serviceUrl=this.mergeCalledServiceUrlQuery(serviceUrl,calledUrlParts);formats=Object.keys(capabilities.Capability.Request.GetFeature.ResultFormat);if(typeof formats==="string"){// convert to list if single entry
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
@@ -4,7 +4,7 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
4
4
  *
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
- */import geojsonBbox from"geojson-bounding-box";import isEmpty from"lodash.isempty";import{getDefaultImageStyle}from"ol/format/KML";import ol from"openlayers";import simplepolygon from"simplepolygon";import svgpath from"svgpath";import{v1 as uuidv1}from"uuid";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import{END_MARKERS,computeFeatureStyle}from"../utils/FeatureStyles";var VectorLayerUtils={createPrintHighlighParams:function createPrintHighlighParams(layers,printCrs,printScale){var dpi=arguments.length>3&&arguments[3]!==undefined?arguments[3]:96;var scaleFactor=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var qgisServerVersion=ConfigUtils.getConfigProp("qgisServerVersion",null,3);var params={geoms:[],styles:[],labels:[],labelFillColors:[],labelOutlineColors:[],labelOutlineSizes:[],labelRotations:[],labelSizes:[],labelDist:[]};var ensureHex=null;if(qgisServerVersion>=3){ensureHex=function ensureHex(rgb){return!Array.isArray(rgb)?rgb:"#"+[255-(rgb.length>3?rgb[3]:1)*255].concat(_toConsumableArray(rgb.slice(0,3))).map(function(v){return Math.round(v).toString(16).padStart(2,"0")}).join("")}}else{ensureHex=function ensureHex(rgb){return!Array.isArray(rgb)?rgb:"#"+(16777216+(rgb[2]|rgb[1]<<8|rgb[0]<<16)).toString(16).slice(1)}}var _iterator=_createForOfIteratorHelper(layers.slice(0).reverse()),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var layer=_step.value;if(layer.type!=="vector"||(layer.features||[]).length===0||layer.visibility===false||layer.skipPrint===true){continue}var features=layer.features.map(function(feature){var _feature$geometry;if((_feature$geometry=feature.geometry)!==null&&_feature$geometry!==void 0&&_feature$geometry.coordinates){feature=_objectSpread(_objectSpread({},feature),{},{geometry:_objectSpread(_objectSpread({},feature.geometry),{},{coordinates:VectorLayerUtils.removeDuplicateNodes(feature.geometry.coordinates)})})}return VectorLayerUtils.simplifyFeature(feature)}).flat();var _iterator2=_createForOfIteratorHelper(features),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var feature=_step2.value;if(!VectorLayerUtils.validateGeometry(feature.geometry)){continue}var styleOptions=computeFeatureStyle(layer,feature);var properties=feature.properties||{};var geometry=VectorLayerUtils.reprojectGeometry(feature.geometry,feature.crs||printCrs,printCrs);if(feature.geometry.type==="LineString"){// Generate arrow heads
7
+ */import geojsonBbox from"geojson-bounding-box";import isEmpty from"lodash.isempty";import{getDefaultImageStyle}from"ol/format/KML";import ol from"openlayers";import simplepolygon from"simplepolygon";import svgpath from"svgpath";import{v4 as uuidv4}from"uuid";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import{END_MARKERS,computeFeatureStyle}from"../utils/FeatureStyles";var VectorLayerUtils={createPrintHighlighParams:function createPrintHighlighParams(layers,printCrs,printScale){var dpi=arguments.length>3&&arguments[3]!==undefined?arguments[3]:96;var scaleFactor=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var qgisServerVersion=ConfigUtils.getConfigProp("qgisServerVersion",null,3);var params={geoms:[],styles:[],labels:[],labelFillColors:[],labelOutlineColors:[],labelOutlineSizes:[],labelRotations:[],labelSizes:[],labelDist:[]};var ensureHex=null;if(qgisServerVersion>=3){ensureHex=function ensureHex(rgb){return!Array.isArray(rgb)?rgb:"#"+[255-(rgb.length>3?rgb[3]:1)*255].concat(_toConsumableArray(rgb.slice(0,3))).map(function(v){return Math.round(v).toString(16).padStart(2,"0")}).join("")}}else{ensureHex=function ensureHex(rgb){return!Array.isArray(rgb)?rgb:"#"+(16777216+(rgb[2]|rgb[1]<<8|rgb[0]<<16)).toString(16).slice(1)}}var _iterator=_createForOfIteratorHelper(layers.slice(0).reverse()),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var layer=_step.value;if(layer.type!=="vector"||(layer.features||[]).length===0||layer.visibility===false||layer.skipPrint===true){continue}var features=layer.features.map(function(feature){var _feature$geometry;if((_feature$geometry=feature.geometry)!==null&&_feature$geometry!==void 0&&_feature$geometry.coordinates){feature=_objectSpread(_objectSpread({},feature),{},{geometry:_objectSpread(_objectSpread({},feature.geometry),{},{coordinates:VectorLayerUtils.removeDuplicateNodes(feature.geometry.coordinates)})})}return VectorLayerUtils.simplifyFeature(feature)}).flat();var _iterator2=_createForOfIteratorHelper(features),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var feature=_step2.value;if(!VectorLayerUtils.validateGeometry(feature.geometry)){continue}var styleOptions=computeFeatureStyle(layer,feature);var properties=feature.properties||{};var geometry=VectorLayerUtils.reprojectGeometry(feature.geometry,feature.crs||printCrs,printCrs);if(feature.geometry.type==="LineString"){// Generate arrow heads
8
8
  if(styleOptions.headmarker){VectorLayerUtils.generateMarkerGeometry(params,styleOptions.headmarker,false,feature,layer,dpi,printScale,printCrs,scaleFactor)}if(styleOptions.tailmarker){VectorLayerUtils.generateMarkerGeometry(params,styleOptions.tailmarker,true,feature,layer,dpi,printScale,printCrs,scaleFactor)}}if(feature.geometry.type==="LineString"&&!isEmpty(properties.segment_labels)){// Split line into single segments and label them individually
9
9
  var coords=geometry.coordinates;for(var i=0;i<coords.length-1;++i){var segment={type:"LineString",coordinates:[coords[i],coords[i+1]]};params.styles.push(VectorLayerUtils.createSld(segment.type,feature.styleName,styleOptions,layer.opacity,dpi,scaleFactor));params.labels.push(properties.segment_labels[i]||" ");params.geoms.push(VectorLayerUtils.geoJSONGeomToWkt(segment));params.labelFillColors.push(ensureHex(styleOptions.textFill));params.labelOutlineColors.push(ensureHex(styleOptions.textStroke));params.labelOutlineSizes.push(scaleFactor);params.labelSizes.push(Math.round(10*scaleFactor));params.labelDist.push("-5");params.labelRotations.push("0")}}else{params.styles.push(VectorLayerUtils.createSld(geometry.type,feature.styleName,styleOptions,layer.opacity,dpi,scaleFactor));params.labels.push(properties.label||" ");if(feature.styleName==="text"){// Make point a tiny square, so that QGIS server centers the text inside the polygon when labelling
10
10
  var x=geometry.coordinates[0];var y=geometry.coordinates[1];geometry={type:"Polygon",coordinates:[[[x-0.01,y-0.01],[x+0.01,y-0.01],[x+0.01,y+0.01],[x-0.01,y+0.01],[x-0.01,y-0.01]]]};params.geoms.push(VectorLayerUtils.geoJSONGeomToWkt(geometry));params.labelFillColors.push(ensureHex(styleOptions.fillColor));params.labelOutlineColors.push(ensureHex(styleOptions.strokeColor));params.labelOutlineSizes.push(scaleFactor*styleOptions.strokeWidth*0.5);params.labelSizes.push(Math.round(10*styleOptions.strokeWidth*scaleFactor));params.labelDist.push("5");params.labelRotations.push(((properties.rotation||0)/Math.PI*180).toFixed(0))}else{params.geoms.push(VectorLayerUtils.geoJSONGeomToWkt(geometry));params.labelFillColors.push(ensureHex(styleOptions.textFill));params.labelOutlineColors.push(ensureHex(styleOptions.textStroke));params.labelOutlineSizes.push(scaleFactor);params.labelSizes.push(Math.round(10*scaleFactor));params.labelDist.push("-5");params.labelRotations.push("0")}}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}}catch(err){_iterator.e(err)}finally{_iterator.f()}return params},removeDuplicateNodes:function removeDuplicateNodes(coordinates){if(Array.isArray(coordinates[0][0])){return coordinates.map(VectorLayerUtils.removeDuplicateNodes)}else if(Array.isArray(coordinates[0])){return coordinates.filter(function(item,pos,arr){return pos===0||item[0]!==arr[pos-1][0]||item[1]!==arr[pos-1][1]})}else{return coordinates}},simplifyFeature:function simplifyFeature(feature){if(!feature.geometry){return feature}else if(feature.geometry.type==="MultiPolygon"){return feature.geometry.coordinates.map(function(part){return VectorLayerUtils.simplifyFeature(_objectSpread(_objectSpread({},feature),{},{geometry:{type:"Polygon",coordinates:part}}))}).flat()}else if(feature.geometry.type==="Polygon"){return simplepolygon(feature).features.map(function(feat,idx,features){if(feat.properties.parent>=0){features[feat.properties.parent].geometry.coordinates.push(feat.geometry.coordinates[0]);return null}return feat}).filter(function(x){return x}).map(function(feat){return _objectSpread(_objectSpread({},feature),{},{geometry:feat.geometry})})}else{return feature}},validateGeometry:function validateGeometry(geometry){if(!geometry){return false}if(geometry.type==="GeometryCollection"){return geometry.geometries.every(VectorLayerUtils.validateGeometry)}if(geometry.type==="Point"){return!isEmpty(geometry.coordinates)}var minLength=geometry.type.endsWith("LineString")?2:3;var _isDegenerate=function isDegenerate(coordinates){if(Array.isArray(coordinates[0][0])){return coordinates.map(_isDegenerate).find(function(entry){return entry===false})}else{return coordinates.length<minLength}};return!_isDegenerate(geometry.coordinates)},createSld:function createSld(geometrytype,styleName,styleOptions,layerOpacity){var dpi=arguments.length>4&&arguments[4]!==undefined?arguments[4]:96;var scaleFactor=arguments.length>5&&arguments[5]!==undefined?arguments[5]:1;var opts={};var dpiScale=dpi/96*scaleFactor;// Special cases
@@ -14,7 +14,7 @@ opts=styleOptions}var ensureHex=function ensureHex(rgb){return!Array.isArray(rgb
14
14
  var path="";var width=0;var height=0;try{var parser=new DOMParser;var svgSrc=atob(marker.src.slice(26));var svgDoc=parser.parseFromString(svgSrc,"text/xml");width=parseInt(svgDoc.getElementsByTagName("svg")[0].getAttribute("width"),10);height=parseInt(svgDoc.getElementsByTagName("svg")[0].getAttribute("height"),10);path=svgDoc.getElementsByTagName("path")[0].getAttribute("d")}catch(e){/* eslint-disable-next-line */console.warn("Could not parse path for marker "+markername);return}// [ Same as in FeatureStyles.js ] [ pixel to map units ]
15
15
  var markerScaleFactor=0.125*(1+feature.styleOptions.strokeWidth)/dpi*0.0254*mapScale*scaleFactor;var origin=feature.geometry.coordinates[tail?feature.geometry.coordinates.length-1:0];var p2=feature.geometry.coordinates[tail?feature.geometry.coordinates.length-2:1];var coordinates=[];var angle=0.5*Math.PI+Math.atan2(origin[0]-p2[0],origin[1]-p2[1]);var alpha=marker.baserotation/180*Math.PI+angle;var cosa=Math.cos(alpha);var sina=Math.sin(alpha);svgpath(path).iterate(function(segment,index,x,y){// Skip move instructions
16
16
  if(["m","M"].includes(segment[0])){return}var dx=(x-marker.anchor[0]*width)*markerScaleFactor;var dy=(y-marker.anchor[1]*height)*markerScaleFactor;var rx=cosa*dx+sina*dy;var ry=-sina*dx+cosa*dy;coordinates.push([origin[0]+rx,origin[1]+ry])});// Closing coordinate
17
- coordinates.push(coordinates[0]);var geometry={type:"Polygon",coordinates:[coordinates]};var styleOptions={strokeWidth:1,strokeDash:[],strokeColor:feature.styleOptions.strokeColor,fillColor:feature.styleOptions.strokeColor};params.styles.push(VectorLayerUtils.createSld(geometry.type,"default",styleOptions,layer.opacity,dpi,scaleFactor));params.geoms.push(VectorLayerUtils.geoJSONGeomToWkt(geometry));params.labels.push(" ");params.labelFillColors.push("#FFF");params.labelOutlineColors.push("#FFF");params.labelOutlineSizes.push(scaleFactor);params.labelSizes.push(Math.round(10*scaleFactor));params.labelDist.push("0")},reprojectGeometry:function reprojectGeometry(geometry,srccrs,dstcrs){if(srccrs===dstcrs||!srccrs||!dstcrs){return geometry}if(geometry.type==="Point"){var wgscoo=CoordinatesUtils.reproject(geometry.coordinates,srccrs,dstcrs);return{type:geometry.type,coordinates:wgscoo}}else if(geometry.type==="LineString"||geometry.type==="MultiPoint"){return{type:geometry.type,coordinates:geometry.coordinates.map(function(tuple){return CoordinatesUtils.reproject(tuple,srccrs,dstcrs)})}}else if(geometry.type==="Polygon"||geometry.type==="MultiLineString"){return{type:geometry.type,coordinates:geometry.coordinates.map(function(ring){return ring.map(function(tuple){return CoordinatesUtils.reproject(tuple,srccrs,dstcrs)})})}}else if(geometry.type==="MultiPolygon"){return{type:geometry.type,coordinates:geometry.coordinates.map(function(part){return part.map(function(ring){return ring.map(function(tuple){return CoordinatesUtils.reproject(tuple,srccrs,dstcrs)})})})}}else{return geometry}},reprojectFeature:function reprojectFeature(feature,srccrs,dstcrs){if(srccrs===dstcrs||!srccrs||!dstcrs){return feature}if(feature.features){return _objectSpread(_objectSpread({},feature),{},{features:feature.features.map(function(f){return VectorLayerUtils.reprojectFeature(srccrs,dstcrs)})})}else{return _objectSpread(_objectSpread({},feature),{},{geometry:VectorLayerUtils.reprojectGeometry(feature.geometry,srccrs,dstcrs)})}},wktToGeoJSON:function wktToGeoJSON(wkt,srccrs,dstcrs){var id=arguments.length>3&&arguments[3]!==undefined?arguments[3]:uuidv1();wkt=wkt.replace(/Point(\w+)/i,"Point $1").replace(/LineString(\w+)/i,"LineString $1").replace(/Polygon(\w+)/i,"Polygon $1").replace(/MultiSurface(\w*)/i,"GeometryCollection $1");try{var feature=new ol.format.WKT().readFeature(wkt,{dataProjection:srccrs,featureProjection:dstcrs});var featureObj=new ol.format.GeoJSON().writeFeatureObject(feature);featureObj.id=id;return featureObj}catch(e){/* eslint-disable-next-line */console.warn("Failed to parse geometry: "+wkt);return null}},geoJSONGeomToWkt:function geoJSONGeomToWkt(gj){var precision=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined;if(precision===undefined){precision=ConfigUtils.getConfigProp("wmsWktPrecision",null,4)}if(gj.type==="Feature"){gj=gj.geometry}var wrapParens=function wrapParens(s){return"("+s+")"};var pairWKT=function pairWKT(c){return c.map(function(x){return x.toFixed(precision)}).join(" ")};var ringWKT=function ringWKT(r){return r.map(pairWKT).join(", ")};var ringsWKT=function ringsWKT(r){return r.map(ringWKT).map(wrapParens).join(", ")};var multiRingsWKT=function multiRingsWKT(r){return r.map(ringsWKT).map(wrapParens).join(", ")};switch(gj.type){case"Point":return"POINT ("+pairWKT(gj.coordinates)+")";case"LineString":return"LINESTRING ("+ringWKT(gj.coordinates)+")";case"Polygon":return"POLYGON ("+ringsWKT(gj.coordinates)+")";case"MultiPoint":return"MULTIPOINT ("+ringWKT(gj.coordinates)+")";case"MultiPolygon":return"MULTIPOLYGON ("+multiRingsWKT(gj.coordinates)+")";case"MultiLineString":return"MULTILINESTRING ("+ringsWKT(gj.coordinates)+")";case"GeometryCollection":return"GEOMETRYCOLLECTION ("+gj.geometries.map(function(x){return VectorLayerUtils.geoJSONGeomToWkt(x,precision)}).join(", ")+")";default:throw new Error("Invalid geometry object")}},kmlToGeoJSON:function kmlToGeoJSON(kml){var kmlFormat=new ol.format.KML({defaultStyle:[new ol.style.Style]});var geojsonFormat=new ol.format.GeoJSON;var features=[];var _iterator3=_createForOfIteratorHelper(kmlFormat.readFeatures(kml)),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var _feature$geometry2;var olFeature=_step3.value;var style=olFeature.getStyleFunction()(olFeature);style=style[0]||style;var styleOptions={strokeColor:style.getStroke()?style.getStroke().getColor():[0,0,0,1],strokeWidth:style.getStroke()?style.getStroke().getWidth():1,strokeDash:style.getStroke()?style.getStroke().getLineDash():[],fillColor:style.getFill()?style.getFill().getColor():[255,255,255,1],textFill:style.getText()&&style.getText().getFill()?style.getText().getFill().getColor():[0,0,0,1],textStroke:style.getText()&&style.getText().getStroke()?style.getText().getStroke().getColor():[255,255,255,1]};if(style.getImage()&&style.getImage()!==getDefaultImageStyle()&&style.getImage().getSrc()){// FIXME: Uses private members of ol.style.Icon, style.getImage().getAnchor() returns null because style.getImage.getSize() is null because the the image is not yet loaded
18
- var anchor=style.getImage().anchor_||[0.5,0.5];var anchorOrigin=(style.getImage().anchorOrigin_||"").split("-");if(anchorOrigin.includes("right")){anchor[0]=1-anchor[0]}if(anchorOrigin.includes("bottom")){anchor[1]=1-anchor[1]}styleOptions.iconSrc=style.getImage().getSrc();styleOptions.iconAnchor=anchor}var feature=geojsonFormat.writeFeatureObject(olFeature);Object.assign(feature,{styleName:styleOptions.iconSrc&&((_feature$geometry2=feature.geometry)===null||_feature$geometry2===void 0?void 0:_feature$geometry2.type)==="Point"?"marker":"default",styleOptions:styleOptions,id:uuidv1(),crs:"EPSG:4326",properties:{}});var properties=olFeature.getProperties();var excludedProperties=["visibility",olFeature.getGeometryName()];for(var _i=0,_Object$keys=Object.keys(properties);_i<_Object$keys.length;_i++){var key=_Object$keys[_i];if(!excludedProperties.includes(key)){feature.properties[key]=properties[key]}}if(properties.name&&feature.styleName==="marker"){feature.properties.label=properties.name}features.push(feature)}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}return features},convert3dto2d:function convert3dto2d(entry){if(!Array.isArray(entry)){return entry}else if(entry.length>=3&&!Array.isArray(entry[0])){return[entry[0],entry[1]]}else if(Array.isArray(entry[0])){return entry.map(VectorLayerUtils.convert3dto2d)}return entry},computeFeaturesBBox:function computeFeaturesBBox(features){var featureCrs=new Set;features.forEach(function(feature){if(feature.crs){featureCrs.add(feature.crs)}});var bboxCrs=featureCrs.size===1?_toConsumableArray(featureCrs.keys())[0]:"EPSG:4326";var bounds=geojsonBbox({type:"FeatureCollection",features:features.filter(function(feature){return feature.geometry}).map(function(feature){return _objectSpread(_objectSpread({},feature),{},{geometry:feature.crs?VectorLayerUtils.reprojectGeometry(feature.geometry,feature.crs,bboxCrs):feature.geometry})})});// Discard z component
17
+ coordinates.push(coordinates[0]);var geometry={type:"Polygon",coordinates:[coordinates]};var styleOptions={strokeWidth:1,strokeDash:[],strokeColor:feature.styleOptions.strokeColor,fillColor:feature.styleOptions.strokeColor};params.styles.push(VectorLayerUtils.createSld(geometry.type,"default",styleOptions,layer.opacity,dpi,scaleFactor));params.geoms.push(VectorLayerUtils.geoJSONGeomToWkt(geometry));params.labels.push(" ");params.labelFillColors.push("#FFF");params.labelOutlineColors.push("#FFF");params.labelOutlineSizes.push(scaleFactor);params.labelSizes.push(Math.round(10*scaleFactor));params.labelDist.push("0")},reprojectGeometry:function reprojectGeometry(geometry,srccrs,dstcrs){if(srccrs===dstcrs||!srccrs||!dstcrs){return geometry}if(geometry.type==="Point"){var wgscoo=CoordinatesUtils.reproject(geometry.coordinates,srccrs,dstcrs);return{type:geometry.type,coordinates:wgscoo}}else if(geometry.type==="LineString"||geometry.type==="MultiPoint"){return{type:geometry.type,coordinates:geometry.coordinates.map(function(tuple){return CoordinatesUtils.reproject(tuple,srccrs,dstcrs)})}}else if(geometry.type==="Polygon"||geometry.type==="MultiLineString"){return{type:geometry.type,coordinates:geometry.coordinates.map(function(ring){return ring.map(function(tuple){return CoordinatesUtils.reproject(tuple,srccrs,dstcrs)})})}}else if(geometry.type==="MultiPolygon"){return{type:geometry.type,coordinates:geometry.coordinates.map(function(part){return part.map(function(ring){return ring.map(function(tuple){return CoordinatesUtils.reproject(tuple,srccrs,dstcrs)})})})}}else{return geometry}},reprojectFeature:function reprojectFeature(feature,srccrs,dstcrs){if(srccrs===dstcrs||!srccrs||!dstcrs){return feature}if(feature.features){return _objectSpread(_objectSpread({},feature),{},{features:feature.features.map(function(f){return VectorLayerUtils.reprojectFeature(srccrs,dstcrs)})})}else{return _objectSpread(_objectSpread({},feature),{},{geometry:VectorLayerUtils.reprojectGeometry(feature.geometry,srccrs,dstcrs)})}},wktToGeoJSON:function wktToGeoJSON(wkt,srccrs,dstcrs){var id=arguments.length>3&&arguments[3]!==undefined?arguments[3]:uuidv4();wkt=wkt.replace(/Point(\w+)/i,"Point $1").replace(/LineString(\w+)/i,"LineString $1").replace(/Polygon(\w+)/i,"Polygon $1").replace(/MultiSurface(\w*)/i,"GeometryCollection $1");try{var feature=new ol.format.WKT().readFeature(wkt,{dataProjection:srccrs,featureProjection:dstcrs});var featureObj=new ol.format.GeoJSON().writeFeatureObject(feature);featureObj.id=id;return featureObj}catch(e){/* eslint-disable-next-line */console.warn("Failed to parse geometry: "+wkt);return null}},geoJSONGeomToWkt:function geoJSONGeomToWkt(gj){var precision=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined;if(precision===undefined){precision=ConfigUtils.getConfigProp("wmsWktPrecision",null,4)}if(gj.type==="Feature"){gj=gj.geometry}var wrapParens=function wrapParens(s){return"("+s+")"};var pairWKT=function pairWKT(c){return c.map(function(x){return x.toFixed(precision)}).join(" ")};var ringWKT=function ringWKT(r){return r.map(pairWKT).join(", ")};var ringsWKT=function ringsWKT(r){return r.map(ringWKT).map(wrapParens).join(", ")};var multiRingsWKT=function multiRingsWKT(r){return r.map(ringsWKT).map(wrapParens).join(", ")};switch(gj.type){case"Point":return"POINT ("+pairWKT(gj.coordinates)+")";case"LineString":return"LINESTRING ("+ringWKT(gj.coordinates)+")";case"Polygon":return"POLYGON ("+ringsWKT(gj.coordinates)+")";case"MultiPoint":return"MULTIPOINT ("+ringWKT(gj.coordinates)+")";case"MultiPolygon":return"MULTIPOLYGON ("+multiRingsWKT(gj.coordinates)+")";case"MultiLineString":return"MULTILINESTRING ("+ringsWKT(gj.coordinates)+")";case"GeometryCollection":return"GEOMETRYCOLLECTION ("+gj.geometries.map(function(x){return VectorLayerUtils.geoJSONGeomToWkt(x,precision)}).join(", ")+")";default:throw new Error("Invalid geometry object")}},kmlToGeoJSON:function kmlToGeoJSON(kml){var kmlFormat=new ol.format.KML({defaultStyle:[new ol.style.Style]});var geojsonFormat=new ol.format.GeoJSON;var features=[];var _iterator3=_createForOfIteratorHelper(kmlFormat.readFeatures(kml)),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var _feature$geometry2;var olFeature=_step3.value;var style=olFeature.getStyleFunction()(olFeature);style=style[0]||style;var styleOptions={strokeColor:style.getStroke()?style.getStroke().getColor():[0,0,0,1],strokeWidth:style.getStroke()?style.getStroke().getWidth():1,strokeDash:style.getStroke()?style.getStroke().getLineDash():[],fillColor:style.getFill()?style.getFill().getColor():[255,255,255,1],textFill:style.getText()&&style.getText().getFill()?style.getText().getFill().getColor():[0,0,0,1],textStroke:style.getText()&&style.getText().getStroke()?style.getText().getStroke().getColor():[255,255,255,1]};if(style.getImage()&&style.getImage()!==getDefaultImageStyle()&&style.getImage().getSrc()){// FIXME: Uses private members of ol.style.Icon, style.getImage().getAnchor() returns null because style.getImage.getSize() is null because the the image is not yet loaded
18
+ var anchor=style.getImage().anchor_||[0.5,0.5];var anchorOrigin=(style.getImage().anchorOrigin_||"").split("-");if(anchorOrigin.includes("right")){anchor[0]=1-anchor[0]}if(anchorOrigin.includes("bottom")){anchor[1]=1-anchor[1]}styleOptions.iconSrc=style.getImage().getSrc();styleOptions.iconAnchor=anchor}var feature=geojsonFormat.writeFeatureObject(olFeature);Object.assign(feature,{styleName:styleOptions.iconSrc&&((_feature$geometry2=feature.geometry)===null||_feature$geometry2===void 0?void 0:_feature$geometry2.type)==="Point"?"marker":"default",styleOptions:styleOptions,id:uuidv4(),crs:"EPSG:4326",properties:{}});var properties=olFeature.getProperties();var excludedProperties=["visibility",olFeature.getGeometryName()];for(var _i=0,_Object$keys=Object.keys(properties);_i<_Object$keys.length;_i++){var key=_Object$keys[_i];if(!excludedProperties.includes(key)){feature.properties[key]=properties[key]}}if(properties.name&&feature.styleName==="marker"){feature.properties.label=properties.name}features.push(feature)}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}return features},convert3dto2d:function convert3dto2d(entry){if(!Array.isArray(entry)){return entry}else if(entry.length>=3&&!Array.isArray(entry[0])){return[entry[0],entry[1]]}else if(Array.isArray(entry[0])){return entry.map(VectorLayerUtils.convert3dto2d)}return entry},computeFeaturesBBox:function computeFeaturesBBox(features){var featureCrs=new Set;features.forEach(function(feature){if(feature.crs){featureCrs.add(feature.crs)}});var bboxCrs=featureCrs.size===1?_toConsumableArray(featureCrs.keys())[0]:"EPSG:4326";var bounds=geojsonBbox({type:"FeatureCollection",features:features.filter(function(feature){return feature.geometry}).map(function(feature){return _objectSpread(_objectSpread({},feature),{},{geometry:feature.crs?VectorLayerUtils.reprojectGeometry(feature.geometry,feature.crs,bboxCrs):feature.geometry})})});// Discard z component
19
19
  if(bounds.length===6){bounds=[bounds[0],bounds[1],bounds[3],bounds[4]]}return{crs:bboxCrs,bounds:bounds}},computeFeatureBBox:function computeFeatureBBox(feature){var bounds=geojsonBbox(feature);// Discard z component
20
20
  if(bounds.length===6){bounds=[bounds[0],bounds[1],bounds[3],bounds[4]]}return bounds},getFeatureCenter:function getFeatureCenter(feature){var geojson=new ol.format.GeoJSON().readFeature(feature);var geometry=geojson.getGeometry();var type=geometry.getType();var center=null;switch(type){case"Polygon":center=geometry.getInteriorPoint().getCoordinates();break;case"MultiPolygon":center=geometry.getInteriorPoints().getClosestPoint(ol.extent.getCenter(geometry.getExtent()));break;case"Point":center=geometry.getCoordinates();break;case"MultiPoint":center=geometry.getClosestPoint(ol.extent.getCenter(geometry.getExtent()));break;case"LineString":center=geometry.getCoordinateAt(0.5);break;case"MultiLineString":center=geometry.getClosestPoint(ol.extent.getCenter(geometry.getExtent()));break;case"Circle":center=geometry.getCenter();break;default:break}return center}};export default VectorLayerUtils;