qwc2-lts
Version:
QGIS Web Client
67 lines • 11.5 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 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 2017-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.
*//**
* NOTE: This sample editing interface is designed to work with the counterpart at
* https://github.com/qwc-services/qwc-data-service
*
* You can use any other editing backend by implementing the getFeature, addFeature,
* editFeature and deleteFeature methods as necessary.
*/import axios from"axios";import isEmpty from"lodash.isempty";import ConfigUtils from"./ConfigUtils";import LocaleUtils from"./LocaleUtils";function buildErrMsg(err){var message=LocaleUtils.tr("editing.commitfailed");if(err.response&&err.response.data&&err.response.data.message){message=err.response.data.message;if(!isEmpty(err.response.data.geometry_errors)){message+=":\n";message+=err.response.data.geometry_errors.map(function(entry){var entrymsg=" - "+entry.reason;if(entry.location){entrymsg+=" at "+entry.location}return entrymsg})}if(!isEmpty(err.response.data.data_errors)){message+=":\n - "+err.response.data.data_errors.join("\n - ")}if(!isEmpty(err.response.data.validation_errors)){message+=":\n - "+err.response.data.validation_errors.join("\n - ")}if(!isEmpty(err.response.data.attachment_errors)){message+=":\n - "+err.response.data.attachment_errors.join("\n - ")}}else if(err.response&&err.response.statusText){message+=": "+err.response.statusText}return message}/*
layerId: The edit layer id
mapPos: the map position
mapCrs: the map crs
mapScale: the map scale denominator
dpi: the map resolution
callback: function(result), on success result is a collection of features, on failure, result is null
filter: the filter expression as [["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...], or null
filterGeom: the filter geometry, as a GeoJSON gemetry, or null
*/function getFeature(layerId,mapPos,mapCrs,mapScale,dpi,callback){var filter=arguments.length>6&&arguments[6]!==undefined?arguments[6]:null;var filterGeom=arguments.length>7&&arguments[7]!==undefined?arguments[7]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/";// 10px tolerance
var tol=10/dpi*0.0254*mapScale;var bbox=mapPos[0]-tol+","+(mapPos[1]-tol)+","+(mapPos[0]+tol)+","+(mapPos[1]+tol);var params={bbox:bbox,crs:mapCrs,filter:filter?JSON.stringify(filter):undefined,filter_geom:filterGeom?JSON.stringify(_objectSpread(_objectSpread({},filterGeom),{},{crs:{type:"name",properties:{name:mapCrs}}})):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){if(response.data&&!isEmpty(response.data.features)){var version=+new Date;response.data.features.forEach(function(feature){feature.__version__=version});callback(response.data)}else{callback(null)}})["catch"](function(){return callback(null)})}/*
layerId: The edit layer id
featureId: The feature id
mapCrs: the map crs
callback: function(result), on success result is a feature, on failure, result is null
*/function getFeatureById(layerId,featureId,mapCrs,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/"+featureId;var params={crs:mapCrs};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){response.data.__version__=+new Date;callback(response.data)})["catch"](function(){return callback(null)})}/*
layerId: The edit layer id
mapCrs: the map crs
callback: function(result), on success result is a collection of features, on failure, result is null
bbox: the filter bounding box as [xmin, xmax, ymin, xmax], or null
filter: the filter expression as [["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...], or null
filterGeom: the filter geometry, as a GeoJSON gemetry, or null
*/function getFeatures(layerId,mapCrs,callback){var bbox=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var filter=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var filterGeom=arguments.length>5&&arguments[5]!==undefined?arguments[5]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/";var params={crs:mapCrs,bbox:bbox?bbox.join(","):undefined,filter:filter?JSON.stringify(filter):undefined,filter_geom:filterGeom?JSON.stringify(_objectSpread(_objectSpread({},filterGeom),{},{crs:{type:"name",properties:{name:mapCrs}}})):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){if(response.data&&Array.isArray(response.data.features)){var version=+new Date;response.data.features.forEach(function(feature){feature.__version__=version});callback(response.data)}else{callback(null)}})["catch"](function(){return callback(null)})}/*
layerId: The edit layer id
mapCrs: the map crs
callback: function(result), on success result is a {"bbox": [xmin, ymin, xmax, ymax]} object, on failure, result is null
filter: the filter expression as [["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...], or null
filterGeom: the filter geometry, as a GeoJSON gemetry, or null
*/function getExtent(layerId,mapCrs,callback){var filter=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var filterGeom=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/extent";var params={crs:mapCrs,filter:filter?JSON.stringify(filter):undefined,filter_geom:filterGeom?JSON.stringify(_objectSpread(_objectSpread({},filterGeom),{},{crs:{type:"name",properties:{name:mapCrs}}})):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){callback(response.data)})["catch"](function(){return callback(null)})}/*
layerId: The edit layer id
featureData: a FormData instance, with:
- A 'feature' entry containing the GeoJSON serialized feature
- Zero or more 'file:' prefixed file upload entries
- Zero or more 'relfile:' prefixed file upload entries
- Optionally a 'g-recaptcha-response' entry with the captcha response
callback: function(success, result), if success = true, result is the committed GeoJSON feature, if success = false, result is an error message
*/function addFeatureMultipart(layerId,featureData,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/multipart";var headers={"Content-Type":"multipart/form-data","Accept-Language":LocaleUtils.lang()};axios.post(req,featureData,{headers:headers}).then(function(response){response.data.__version__=+new Date;callback(true,response.data)})["catch"](function(err){return callback(false,buildErrMsg(err))})}/*
layerId: The edit layer id
featureId: The id of the feature to edit
featureData: a FormData instance, with:
- A 'feature' entry containing the GeoJSON serialized feature
- Zero or more 'file:' prefixed file upload entries
- Zero or more 'relfile:' prefixed file upload entries
- Optionally a 'g-recaptcha-response' entry with the captcha response
callback: function(success, result), if success = true, result is the committed GeoJSON feature, if success = false, result is an error message
*/function editFeatureMultipart(layerId,featureId,featureData,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/multipart/"+featureId;var headers={"Content-Type":"multipart/form-data","Accept-Language":LocaleUtils.lang()};axios.put(req,featureData,{headers:headers}).then(function(response){response.data.__version__=+new Date;callback(true,response.data)})["catch"](function(err){return callback(false,buildErrMsg(err))})}/*
layerId: The edit layer id
featureId: The id of the feature to delete
callback: function(success, result), if success = true, result is null, if success = false, result is an error message
recaptchaResponse: Optional, captcha challenge response
*/function deleteFeature(layerId,featureId,callback){var recaptchaResponse=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/"+featureId;var headers={"Accept-Language":LocaleUtils.lang()};var data={};if(recaptchaResponse){data["g-recaptcha-response"]=recaptchaResponse}axios["delete"](req,{headers:headers,data:data}).then(function(){callback(true,featureId)})["catch"](function(err){return callback(false,buildErrMsg(err))})}function getRelations(layerId,featureId,tables,mapCrs,callback){var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+layerId+"/"+featureId+"/relations";var params={tables:tables,crs:mapCrs};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){callback(response.data)})["catch"](function(){return callback({})})}/*
keyvalues: <dataset>:<key_column>:<value_column>,<dataset>:<key_column>:<value_column>,...
callback: function(result), result is a {"keyvalues": {"<dataset>": [{"key": <key>, "value": <value}, ...]}}
filter: the filter expression as [[["<name>", "<op>", <value>],"and|or",["<name>","<op>",<value>],...]] (one filter expr per keyvalue entry), or null
*/function getKeyValues(keyvalues,callback){var filter=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var SERVICE_URL=ConfigUtils.getConfigProp("editServiceUrl");var req=SERVICE_URL+"keyvals?tables="+keyvalues;var params={filter:filter?JSON.stringify(filter):undefined};var headers={"Accept-Language":LocaleUtils.lang()};axios.get(req,{headers:headers,params:params}).then(function(response){callback(response.data)})["catch"](function(){return callback({})})}export default{getFeature:getFeature,getFeatureById:getFeatureById,getFeatures:getFeatures,getExtent:getExtent,addFeatureMultipart:addFeatureMultipart,editFeatureMultipart:editFeatureMultipart,deleteFeature:deleteFeature,getRelations:getRelations,getKeyValues:getKeyValues};