qwc2
Version:
QGIS Web Client
14 lines • 7.6 kB
JavaScript
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)}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 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)}/**
* Copyright 2015 GeoSolutions Sas
* Copyright 2016-2024 Sourcepole AG
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/import ol from"openlayers";import FeatureStyles from"../../../utils/FeatureStyles";export function createFeatures(options,mapCrs){var format=new ol.format.GeoJSON;return(options.features||[]).reduce(function(collection,feature){var featureObject=format.readFeatures(_objectSpread(_objectSpread({},feature),{},{type:"Feature"}));featureObject.forEach(function(f){var _ref,_feature$crs;var featureCrs=(_ref=(_feature$crs=feature.crs)!==null&&_feature$crs!==void 0?_feature$crs:options.projection)!==null&&_ref!==void 0?_ref:mapCrs;if(featureCrs.type==="name"){featureCrs=featureCrs.properties.name}if(featureCrs!==mapCrs){var _f$getGeometry;(_f$getGeometry=f.getGeometry())===null||_f$getGeometry===void 0||_f$getGeometry.transform(featureCrs,mapCrs)}var featureStyleName=feature.styleName||options.styleName;var featureStyleOptions=_objectSpread(_objectSpread({},options.styleOptions),feature.styleOptions);f.set("styleName",featureStyleName);f.set("styleOptions",featureStyleOptions);if(feature.circleParams){f.set("circleParams",feature.circleParams)}if(feature.shape){f.set("shape",feature.shape)}if(feature.measurements){f.set("measurements",feature.measurements)}if(featureStyleName){f.setStyle(FeatureStyles[featureStyleName](f,featureStyleOptions))}});return collection.concat(featureObject)},[])}export function updateFeatures(source,newOptions,oldOptions,mapCrs){var format=new ol.format.GeoJSON;var oldFeaturesMap=(oldOptions.features||[]).reduce(function(res,f){res[f.id]=f;return res},{});var newIds=new Set(newOptions.features.map(function(f){return f.id}));var removed=Object.keys(oldFeaturesMap).filter(function(id){return!newIds.has(id)});// Remove removed features
var _iterator=_createForOfIteratorHelper(removed),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var id=_step.value;var feature=source.getFeatureById(id);if(feature){source.removeFeature(feature)}}// Add / update features
}catch(err){_iterator.e(err)}finally{_iterator.f()}var newFeatureObjects=[];var _iterator2=_createForOfIteratorHelper(newOptions.features),_step2;try{var _loop=function _loop(){var feature=_step2.value;if(oldFeaturesMap[feature.id]&&oldFeaturesMap[feature.id]===feature){// Unchanged, continue
return 1;// continue
}if(oldFeaturesMap[feature.id]&&oldFeaturesMap[feature.id]!==feature){// Changed, remove
var oldFeature=source.getFeatureById(feature.id);if(oldFeature){source.removeFeature(oldFeature)}}// Add new
var featureObject=format.readFeatures(_objectSpread(_objectSpread({},feature),{},{type:"Feature"}));featureObject.forEach(function(f){var _ref2,_feature$crs2;var featureCrs=(_ref2=(_feature$crs2=feature.crs)!==null&&_feature$crs2!==void 0?_feature$crs2:newOptions.projection)!==null&&_ref2!==void 0?_ref2:mapCrs;if(featureCrs.type==="name"){featureCrs=featureCrs.properties.name}if(featureCrs!==mapCrs){var _f$getGeometry2;(_f$getGeometry2=f.getGeometry())===null||_f$getGeometry2===void 0||_f$getGeometry2.transform(featureCrs,mapCrs)}var featureStyleName=feature.styleName||newOptions.styleName;var featureStyleOptions=_objectSpread(_objectSpread({},newOptions.styleOptions),feature.styleOptions);f.set("styleName",featureStyleName);f.set("styleOptions",featureStyleOptions);f.set("circleParams",feature.circleParams);f.set("shape",feature.shape);f.set("measurements",feature.measurements);if(featureStyleName){f.setStyle(FeatureStyles[featureStyleName](f,featureStyleOptions))}});newFeatureObjects=newFeatureObjects.concat(featureObject)};for(_iterator2.s();!(_step2=_iterator2.n()).done;){if(_loop())continue}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}if(newFeatureObjects){source.addFeatures(newFeatureObjects)}}export function featureStyleFunction(options){return function(feature){var styleName=options.styleName||"default";var styleOptions=options.styleOptions||{};return FeatureStyles[styleName](feature,styleOptions)}}export default{create:function create(options,map){var source=new ol.source.Vector;var mapCrs=map.getView().getProjection().getCode();var features=createFeatures(options,mapCrs);source.addFeatures(features);var vectorLayer=new ol.layer.Vector({source:source,style:options.styleFunction||featureStyleFunction(options)});return vectorLayer},update:function update(layer,newOptions,oldOptions,map){var mapCrs=map.getView().getProjection().getCode();if(newOptions.styleName!==oldOptions.styleName||newOptions.styleOptions!==oldOptions.styleOptions){layer.setStyle(featureStyleFunction(newOptions))}else if(newOptions.styleFunction!==oldOptions.styleFunction){layer.setStyle(newOptions.styleFunction)}if(newOptions.features!==oldOptions.features){updateFeatures(layer.getSource(),newOptions,oldOptions,mapCrs)}else if((oldOptions.rev||0)!==(newOptions.rev||0)){layer.getSource().changed()}},render:function render(){return null}};