From 7b39ea9293cc6151099a9c4c35d6daf72a07bfcf Mon Sep 17 00:00:00 2001 From: openEO CI Date: Wed, 30 Aug 2023 00:26:45 +0000 Subject: [PATCH] deploy: 666de18df5da8edc08739c6732bb2988d516c89b --- 404.html | 4 ++-- api/index.html | 4 ++-- assets/js/{app.e58f713c.js => app.e3a12764.js} | 2 +- data-collections/index.html | 4 ++-- federation/accounting.html | 4 ++-- federation/backends/api.html | 4 ++-- federation/backends/collections.html | 4 ++-- federation/backends/fileformats.html | 4 ++-- federation/backends/index.html | 4 ++-- federation/backends/processes.html | 4 ++-- federation/index.html | 4 ++-- file-formats/index.html | 4 ++-- getting-started/editor/index.html | 4 ++-- getting-started/javascript/index.html | 4 ++-- getting-started/jupyterlab/index.html | 4 ++-- getting-started/python/index.html | 4 ++-- getting-started/python/shiny.html | 4 ++-- getting-started/r/index.html | 4 ++-- index.html | 4 ++-- join/early_adopter.html | 4 ++-- join/free_trial.html | 4 ++-- processes/index.html | 4 ++-- usecases/ard/index.html | 4 ++-- usecases/ard/msi/index.html | 4 ++-- usecases/ard/sar/index.html | 4 ++-- usecases/crop-classification/index.html | 4 ++-- usecases/forest-change-detection/index.html | 4 ++-- usecases/landcover/index.html | 4 ++-- usecases/large-scale-processing/index.html | 4 ++-- usecases/no2-monitoring/index.html | 4 ++-- 30 files changed, 59 insertions(+), 59 deletions(-) rename assets/js/{app.e58f713c.js => app.e3a12764.js} (99%) diff --git a/404.html b/404.html index 11af7e096..9d0576d01 100644 --- a/404.html +++ b/404.html @@ -8,13 +8,13 @@ - +

404

How did we get here?
Take me home.
- + diff --git a/api/index.html b/api/index.html index 788c9db0c..20927ac5d 100644 --- a/api/index.html +++ b/api/index.html @@ -8,7 +8,7 @@ - + @@ -141,6 +141,6 @@
- + diff --git a/assets/js/app.e58f713c.js b/assets/js/app.e3a12764.js similarity index 99% rename from assets/js/app.e58f713c.js rename to assets/js/app.e3a12764.js index 5e0650f82..8232b1b94 100644 --- a/assets/js/app.e58f713c.js +++ b/assets/js/app.e3a12764.js @@ -18,4 +18,4 @@ var r=Object.freeze({}),o=Array.isArray;function i(t){return null==t}function a( * vue-router v3.6.5 * (c) 2022 Evan You * @license MIT - */function o(t,e){for(var n in e)t[n]=e[n];return t}var i=/[!'()*]/g,a=function(t){return"%"+t.charCodeAt(0).toString(16)},s=/%2C/g,c=function(t){return encodeURIComponent(t).replace(i,a).replace(s,",")};function u(t){try{return decodeURIComponent(t)}catch(t){0}return t}var l=function(t){return null==t||"object"==typeof t?t:String(t)};function f(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=u(n.shift()),o=n.length>0?u(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function p(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return c(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(c(e)):r.push(c(e)+"="+c(t)))})),r.join("&")}return c(e)+"="+c(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var d=/\/?$/;function h(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=v(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:y(e,o),matched:t?g(t):[]};return n&&(a.redirectedFrom=y(n,o)),Object.freeze(a)}function v(t){if(Array.isArray(t))return t.map(v);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=v(t[n]);return e}return t}var m=h(null,{path:"/"});function g(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function y(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||p)(r)+o}function b(t,e,n){return e===m?t===e:!!e&&(t.path&&e.path?t.path.replace(d,"")===e.path.replace(d,"")&&(n||t.hash===e.hash&&_(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&_(t.query,e.query)&&_(t.params,e.params))))}function _(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((function(n,o){var i=t[n];if(r[o]!==n)return!1;var a=e[n];return null==i||null==a?i===a:"object"==typeof i&&"object"==typeof a?_(i,a):String(i)===String(a)}))}function x(t){for(var e=0;e=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(i.path||""),p=e&&e.path||"/",d=u.path?C(u.path,p,n||i.append):p,h=function(t,e,n){void 0===e&&(e={});var r,o=n||f;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(l):l(a)}return r}(u.query,i.query,r&&r.options.parseQuery),v=i.hash||u.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:d,query:h,hash:v}}var q,J=function(){},W={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,i=n.resolve(this.to,r,this.append),a=i.location,s=i.route,c=i.href,u={},l=n.options.linkActiveClass,f=n.options.linkExactActiveClass,p=null==l?"router-link-active":l,v=null==f?"router-link-exact-active":f,m=null==this.activeClass?p:this.activeClass,g=null==this.exactActiveClass?v:this.exactActiveClass,y=s.redirectedFrom?h(null,H(s.redirectedFrom),null,n):s;u[g]=b(r,y,this.exactPath),u[m]=this.exact||this.exactPath?u[g]:function(t,e){return 0===t.path.replace(d,"/").indexOf(e.path.replace(d,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,y);var _=u[g]?this.ariaCurrentValue:null,x=function(t){K(t)&&(e.replace?n.replace(a,J):n.push(a,J))},w={click:K};Array.isArray(this.event)?this.event.forEach((function(t){w[t]=x})):w[this.event]=x;var k={class:u},C=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:s,navigate:x,isActive:u[m],isExactActive:u[g]});if(C){if(1===C.length)return C[0];if(C.length>1||!C.length)return 0===C.length?t():t("span",{},C)}if("a"===this.tag)k.on=w,k.attrs={href:c,"aria-current":_};else{var S=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=V(l.path,s.params),c(l,s,a)}if(s.path){s.params={};for(var d=0;d-1}function St(t,e){return Ct(t)&&t._isRouter&&(null==e||t.type===e)}function Ot(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function $t(t){return function(e,n,r){var o=!1,i=0,a=null;jt(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var c,u=At((function(e){var o;((o=e).__esModule||Et&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:q.extend(e),n.components[s]=e,--i<=0&&r()})),l=At((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Ct(t)?t:new Error(e),r(a))}));try{c=t(u,l)}catch(t){l(t)}if(c)if("function"==typeof c.then)c.then(u,l);else{var f=c.component;f&&"function"==typeof f.then&&f.then(u,l)}}})),o||r()}}function jt(t,e){return Pt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Pt(t){return Array.prototype.concat.apply([],t)}var Et="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function At(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Tt=function(t,e){this.router=t,this.base=function(t){if(!t)if(G){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=m,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Lt(t,e,n,r){var o=jt(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=q.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Pt(r?o.reverse():o)}function Rt(t,e){if(e)return function(){return t.apply(e,arguments)}}Tt.prototype.listen=function(t){this.cb=t},Tt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Tt.prototype.onError=function(t){this.errorCbs.push(t)},Tt.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(St(t,bt.redirected)&&i===m||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Tt.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!St(t)&&Ct(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},c=t.matched.length-1,u=o.matched.length-1;if(b(t,o)&&c===u&&t.matched[c]===o.matched[u])return this.ensureURL(),t.hash&&st(this.router,o,t,!1),s(((a=wt(i=o,t,bt.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=mt&&n;r&&this.listeners.push(at());var o=function(){var n=t.current,o=Ut(t.base);t.current===m&&o===t._startLocation||t.transitionTo(o,(function(t){r&&st(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){gt(S(r.base+t.fullPath)),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){yt(S(r.base+t.fullPath)),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ut(this.base)!==this.current.fullPath){var e=S(this.base+this.current.fullPath);t?gt(e):yt(e)}},e.prototype.getCurrentLocation=function(){return Ut(this.base)},e}(Tt);function Ut(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(S(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var It=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ut(t);if(!/^\/#/.test(e))return window.location.replace(S(t+"/#"+e)),!0}(this.base)||Dt()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=mt&&e;n&&this.listeners.push(at());var r=function(){var e=t.current;Dt()&&t.transitionTo(Nt(),(function(r){n&&st(t.router,r,e,!0),mt||zt(r.fullPath)}))},o=mt?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Bt(t.fullPath),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){zt(t.fullPath),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Nt()!==e&&(t?Bt(e):zt(e))},e.prototype.getCurrentLocation=function(){return Nt()},e}(Tt);function Dt(){var t=Nt();return"/"===t.charAt(0)||(zt("/"+t),!1)}function Nt(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Ft(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Bt(t){mt?gt(Ft(t)):window.location.hash=t}function zt(t){mt?yt(Ft(t)):window.location.replace(Ft(t))}var Vt=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){St(t,bt.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Tt),Ht=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Z(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!mt&&!1!==t.fallback,this.fallback&&(e="hash"),G||(e="abstract"),this.mode=e,e){case"history":this.history=new Mt(this,t.base);break;case"hash":this.history=new It(this,t.base,this.fallback);break;case"abstract":this.history=new Vt(this,t.base);break;default:0}},qt={currentRoute:{configurable:!0}};Ht.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},qt.currentRoute.get=function(){return this.history&&this.history.current},Ht.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Mt||n instanceof It){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;mt&&o&&"fullPath"in t&&st(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Ht.prototype.beforeEach=function(t){return Wt(this.beforeHooks,t)},Ht.prototype.beforeResolve=function(t){return Wt(this.resolveHooks,t)},Ht.prototype.afterEach=function(t){return Wt(this.afterHooks,t)},Ht.prototype.onReady=function(t,e){this.history.onReady(t,e)},Ht.prototype.onError=function(t){this.history.onError(t)},Ht.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Ht.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Ht.prototype.go=function(t){this.history.go(t)},Ht.prototype.back=function(){this.go(-1)},Ht.prototype.forward=function(){this.go(1)},Ht.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Ht.prototype.resolve=function(t,e,n){var r=H(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?S(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Ht.prototype.getRoutes=function(){return this.matcher.getRoutes()},Ht.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==m&&this.history.transitionTo(this.history.getCurrentLocation())},Ht.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==m&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ht.prototype,qt);var Jt=Ht;function Wt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Ht.install=function t(e){if(!t.installed||q!==e){t.installed=!0,q=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",w),e.component("RouterLink",W);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Ht.version="3.6.5",Ht.isNavigationFailure=St,Ht.NavigationFailureType=bt,Ht.START_LOCATION=m,G&&window.Vue&&window.Vue.use(Ht);var Kt={"components/AlgoliaSearchBox":()=>Promise.all([n.e(0),n.e(38)]).then(n.bind(null,237)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(28)]).then(n.bind(null,181)),"components/DropdownTransition":()=>Promise.all([n.e(0),n.e(47)]).then(n.bind(null,159)),"components/Home":()=>Promise.all([n.e(0),n.e(31)]).then(n.bind(null,301)),"components/NavLink":()=>n.e(50).then(n.bind(null,157)),"components/NavLinks":()=>Promise.all([n.e(0),n.e(26)]).then(n.bind(null,205)),"components/Navbar":()=>Promise.all([n.e(0),n.e(5),n.e(39)]).then(n.bind(null,453)),"components/Page":()=>Promise.all([n.e(0),n.e(25)]).then(n.bind(null,302)),"components/PageEdit":()=>Promise.all([n.e(0),n.e(32)]).then(n.bind(null,211)),"components/PageNav":()=>Promise.all([n.e(0),n.e(29)]).then(n.bind(null,212)),"components/Sidebar":()=>Promise.all([n.e(0),n.e(24)]).then(n.bind(null,303)),"components/SidebarButton":()=>Promise.all([n.e(0),n.e(48)]).then(n.bind(null,308)),"components/SidebarGroup":()=>Promise.all([n.e(0),n.e(10)]).then(n.bind(null,206)),"components/SidebarLink":()=>Promise.all([n.e(0),n.e(36)]).then(n.bind(null,182)),"components/SidebarLinks":()=>Promise.all([n.e(0),n.e(10)]).then(n.bind(null,177)),"global-components/Badge":()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,478)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(16)]).then(n.bind(null,466)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(17)]).then(n.bind(null,467)),"layouts/404":()=>n.e(18).then(n.bind(null,468)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(5),n.e(9),n.e(11)]).then(n.bind(null,465)),NotFound:()=>n.e(18).then(n.bind(null,468)),Layout:()=>Promise.all([n.e(0),n.e(5),n.e(9),n.e(11)]).then(n.bind(null,465))},Gt={"v-4e72e1d8":()=>n.e(56).then(n.bind(null,479)),"v-14e901dc":()=>n.e(57).then(n.bind(null,480)),"v-21917184":()=>n.e(58).then(n.bind(null,481)),"v-045b6323":()=>n.e(59).then(n.bind(null,482)),"v-acc004fa":()=>n.e(60).then(n.bind(null,483)),"v-3e291b63":()=>n.e(61).then(n.bind(null,484)),"v-688ffb43":()=>n.e(62).then(n.bind(null,485)),"v-700f1b88":()=>n.e(63).then(n.bind(null,486)),"v-78536523":()=>n.e(64).then(n.bind(null,487)),"v-7ffae7c8":()=>n.e(51).then(n.bind(null,488)),"v-21de1e8c":()=>n.e(65).then(n.bind(null,489)),"v-adb4d3cc":()=>n.e(66).then(n.bind(null,490)),"v-974804cc":()=>n.e(67).then(n.bind(null,491)),"v-779fe818":()=>n.e(68).then(n.bind(null,492)),"v-23074efc":()=>n.e(69).then(n.bind(null,493)),"v-6b6d7bae":()=>n.e(70).then(n.bind(null,494)),"v-a5deb388":()=>n.e(71).then(n.bind(null,495)),"v-1d4d57b7":()=>n.e(37).then(n.bind(null,496)),"v-a1f70a7a":()=>n.e(49).then(n.bind(null,497)),"v-02b9217c":()=>n.e(72).then(n.bind(null,498)),"v-d4caec3c":()=>n.e(73).then(n.bind(null,499)),"v-0937d47a":()=>n.e(74).then(n.bind(null,500)),"v-c5fcf990":()=>n.e(75).then(n.bind(null,501)),"v-65bcb302":()=>n.e(76).then(n.bind(null,502)),"v-2b5b0ed8":()=>n.e(77).then(n.bind(null,503)),"v-5041b7a0":()=>n.e(78).then(n.bind(null,504)),"v-589f7f88":()=>n.e(79).then(n.bind(null,505)),"v-697f60bc":()=>n.e(52).then(n.bind(null,506))};function Xt(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Yt=/-(\w)/g,Zt=Xt(t=>t.replace(Yt,(t,e)=>e?e.toUpperCase():"")),Qt=/\B([A-Z])/g,te=Xt(t=>t.replace(Qt,"-$1").toLowerCase()),ee=Xt(t=>t.charAt(0).toUpperCase()+t.slice(1));function ne(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(ee(Zt(e))):t(ee(e))||t(te(e))}const re=Object.assign({},Kt,Gt),oe=t=>re[t],ie=t=>Gt[t],ae=t=>Kt[t],se=t=>r.a.component(t);function ce(t){return ne(ie,t)}function ue(t){return ne(ae,t)}function le(t){return ne(oe,t)}function fe(t){return ne(se,t)}function pe(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!fe(t)&&le(t)){const e=await le(t)();r.a.component(t,e.default)}}))}function de(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var he=n(47),ve=n.n(he),me=n(48),ge=n.n(me),ye={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${ge()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=_e(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=xe(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ve()([{name:"description",content:this.$description}],t,this.siteMeta,we)},updateCanonicalLink(){be(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",_e(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){xe(null,this.currentMetaTags),be()}};function be(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function _e(t=""){return t?``:""}function xe(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function we(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var ke=n(13),Ce=n.n(ke),Se={mounted(){Ce.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||r.a.component(t.name)||Ce.a.start(),n()}),this.$router.afterEach(()=>{Ce.a.done(),this.isSidebarOpen=!1})}},Oe=n(49),$e={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(Oe)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},je={props:{parent:Object,code:String,options:{align:String,color:String,backgroundTransition:Boolean,backgroundColor:String,successText:String,staticIcon:Boolean}},data:()=>({success:!1,originalBackground:null,originalTransition:null}),computed:{alignStyle(){let t={};return t[this.options.align]="7.5px",t},iconClass(){return this.options.staticIcon?"":"hover"}},mounted(){this.originalTransition=this.parent.style.transition,this.originalBackground=this.parent.style.background},beforeDestroy(){this.parent.style.transition=this.originalTransition,this.parent.style.background=this.originalBackground},methods:{hexToRgb(t){let e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null},copyToClipboard(t){if(navigator.clipboard)navigator.clipboard.writeText(this.code).then(()=>{this.setSuccessTransitions()},()=>{});else{let t=document.createElement("textarea");document.body.appendChild(t),t.value=this.code,t.select(),document.execCommand("Copy"),t.remove(),this.setSuccessTransitions()}},setSuccessTransitions(){if(clearTimeout(this.successTimeout),this.options.backgroundTransition){this.parent.style.transition="background 350ms";let t=this.hexToRgb(this.options.backgroundColor);this.parent.style.background=`rgba(${t.r}, ${t.g}, ${t.b}, 0.1)`}this.success=!0,this.successTimeout=setTimeout(()=>{this.options.backgroundTransition&&(this.parent.style.background=this.originalBackground,this.parent.style.transition=this.originalTransition),this.success=!1},500)}}},Pe=(n(146),n(4)),Ee=Object(Pe.a)(je,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"code-copy"},[e("svg",{class:t.iconClass,style:t.alignStyle,attrs:{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},on:{click:t.copyToClipboard}},[e("path",{attrs:{fill:"none",d:"M0 0h24v24H0z"}}),t._v(" "),e("path",{attrs:{fill:t.options.color,d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}})]),t._v(" "),e("span",{class:t.success?"success":"",style:t.alignStyle},[t._v("\n "+t._s(t.options.successText)+"\n ")])])}),[],!1,null,"49140617",null).exports,Ae=(n(147),[ye,Se,$e,{updated(){this.update()},methods:{update(){setTimeout(()=>{document.querySelectorAll('div[class*="language-"] pre').forEach(t=>{if(t.classList.contains("code-copy-added"))return;let e=new(r.a.extend(Ee));e.options={align:"bottom",color:"#27b1ff",backgroundTransition:!0,backgroundColor:"#0075b8",successText:"Copied!",staticIcon:!1},e.code=t.innerText,e.parent=t,e.$mount(),t.classList.add("code-copy-added"),t.appendChild(e.$el)})},100)}}}]),Te={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return de("layout",t),r.a.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},Le=Object(Pe.a)(Te,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Le,"mixins",Ae);const Re=[{name:"v-4e72e1d8",path:"/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-4e72e1d8").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-14e901dc",path:"/api/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-14e901dc").then(n)}},{path:"/api/index.html",redirect:"/api/"},{name:"v-21917184",path:"/data-collections/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-21917184").then(n)}},{path:"/data-collections/index.html",redirect:"/data-collections/"},{name:"v-045b6323",path:"/federation/accounting.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-045b6323").then(n)}},{name:"v-acc004fa",path:"/federation/backends/api.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-acc004fa").then(n)}},{name:"v-3e291b63",path:"/federation/backends/collections.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-3e291b63").then(n)}},{name:"v-688ffb43",path:"/federation/backends/fileformats.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-688ffb43").then(n)}},{name:"v-700f1b88",path:"/federation/backends/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-700f1b88").then(n)}},{path:"/federation/backends/index.html",redirect:"/federation/backends/"},{name:"v-78536523",path:"/federation/backends/processes.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-78536523").then(n)}},{name:"v-7ffae7c8",path:"/federation/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-7ffae7c8").then(n)}},{path:"/federation/index.html",redirect:"/federation/"},{name:"v-21de1e8c",path:"/file-formats/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-21de1e8c").then(n)}},{path:"/file-formats/index.html",redirect:"/file-formats/"},{name:"v-adb4d3cc",path:"/getting-started/editor/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-adb4d3cc").then(n)}},{path:"/getting-started/editor/index.html",redirect:"/getting-started/editor/"},{name:"v-974804cc",path:"/getting-started/javascript/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-974804cc").then(n)}},{path:"/getting-started/javascript/index.html",redirect:"/getting-started/javascript/"},{name:"v-779fe818",path:"/getting-started/jupyterlab/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-779fe818").then(n)}},{path:"/getting-started/jupyterlab/index.html",redirect:"/getting-started/jupyterlab/"},{name:"v-23074efc",path:"/getting-started/python/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-23074efc").then(n)}},{path:"/getting-started/python/index.html",redirect:"/getting-started/python/"},{name:"v-6b6d7bae",path:"/getting-started/python/shiny.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-6b6d7bae").then(n)}},{name:"v-a5deb388",path:"/getting-started/r/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-a5deb388").then(n)}},{path:"/getting-started/r/index.html",redirect:"/getting-started/r/"},{name:"v-1d4d57b7",path:"/join/early_adopter.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-1d4d57b7").then(n)}},{name:"v-a1f70a7a",path:"/join/free_trial.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-a1f70a7a").then(n)}},{name:"v-02b9217c",path:"/processes/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-02b9217c").then(n)}},{path:"/processes/index.html",redirect:"/processes/"},{name:"v-d4caec3c",path:"/usecases/ard/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-d4caec3c").then(n)}},{path:"/usecases/ard/index.html",redirect:"/usecases/ard/"},{name:"v-0937d47a",path:"/usecases/ard/msi/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-0937d47a").then(n)}},{path:"/usecases/ard/msi/index.html",redirect:"/usecases/ard/msi/"},{name:"v-c5fcf990",path:"/usecases/ard/sar/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-c5fcf990").then(n)}},{path:"/usecases/ard/sar/index.html",redirect:"/usecases/ard/sar/"},{name:"v-65bcb302",path:"/usecases/crop-classification/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-65bcb302").then(n)}},{path:"/usecases/crop-classification/index.html",redirect:"/usecases/crop-classification/"},{name:"v-2b5b0ed8",path:"/usecases/forest-change-detection/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-2b5b0ed8").then(n)}},{path:"/usecases/forest-change-detection/index.html",redirect:"/usecases/forest-change-detection/"},{name:"v-5041b7a0",path:"/usecases/landcover/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-5041b7a0").then(n)}},{path:"/usecases/landcover/index.html",redirect:"/usecases/landcover/"},{name:"v-589f7f88",path:"/usecases/large-scale-processing/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-589f7f88").then(n)}},{path:"/usecases/large-scale-processing/index.html",redirect:"/usecases/large-scale-processing/"},{name:"v-697f60bc",path:"/usecases/no2-monitoring/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-697f60bc").then(n)}},{path:"/usecases/no2-monitoring/index.html",redirect:"/usecases/no2-monitoring/"},{path:"*",component:Le}],Me={title:"openEO Platform Documentation",description:"One of the most important properties for a future-oriented platform on earth observation is the orientation towards simple operation, with a special focus on efficiency of evaluation and availability. Complexity is kept hidden in the background to direct your focus on the data. This is done on one hand by the use of an aggregate API to access the infrastructure, but also by improved user-faced graphical processing. For access to the API, the user has the option to incorporate his own preferences, by choosing between several clients.",base:"/",headTags:[],pages:[{title:"Home",frontmatter:{home:!0},regularPath:"/",relativePath:"README.md",key:"v-4e72e1d8",path:"/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{frontmatter:{fullpage:!0,stripCSS:!0},regularPath:"/api/",relativePath:"api/index.md",key:"v-14e901dc",path:"/api/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{frontmatter:{sidebar:!1,stripCSS:!0},regularPath:"/data-collections/",relativePath:"data-collections/index.md",key:"v-21917184",path:"/data-collections/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Platform credit usage",frontmatter:{},regularPath:"/federation/accounting.html",relativePath:"federation/accounting.md",key:"v-045b6323",path:"/federation/accounting.html",headers:[{level:2,title:"Platform credit rates",slug:"platform-credit-rates"},{level:2,title:"Estimating resource usage",slug:"estimating-resource-usage"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Federation API",frontmatter:{},regularPath:"/federation/backends/api.html",relativePath:"federation/backends/api.md",key:"v-acc004fa",path:"/federation/backends/api.html",headers:[{level:2,title:"Authentication and authorization",slug:"authentication-and-authorization"},{level:3,title:"Authentication",slug:"authentication"},{level:2,title:"Authorization",slug:"authorization"},{level:3,title:"Entitlements",slug:"entitlements"},{level:3,title:"Credits",slug:"credits"},{level:3,title:"Aggregator rules",slug:"aggregator-rules"},{level:3,title:"Backend rules",slug:"backend-rules"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Collections",frontmatter:{},regularPath:"/federation/backends/collections.html",relativePath:"federation/backends/collections.md",key:"v-3e291b63",path:"/federation/backends/collections.html",headers:[{level:2,title:"Collection availability",slug:"collection-availability"},{level:3,title:"Requirements for non-experimental collections",slug:"requirements-for-non-experimental-collections"},{level:2,title:"Harmonization",slug:"harmonization"},{level:3,title:"Common naming convention",slug:"common-naming-convention"},{level:3,title:"Sentinel2-L2A",slug:"sentinel2-l2a"},{level:3,title:"Common Properties",slug:"common-properties"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"File Formats",frontmatter:{},regularPath:"/federation/backends/fileformats.html",relativePath:"federation/backends/fileformats.md",key:"v-688ffb43",path:"/federation/backends/fileformats.html",headers:[{level:2,title:"Best practices file formats",slug:"best-practices-file-formats"},{level:3,title:"Raster Formats",slug:"raster-formats"},{level:2,title:"Federation agreement file formats",slug:"federation-agreement-file-formats"},{level:3,title:"GeoTiff",slug:"geotiff"},{level:3,title:"netCDF",slug:"netcdf"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Federation Contract",frontmatter:{},regularPath:"/federation/backends/",relativePath:"federation/backends/index.md",key:"v-700f1b88",path:"/federation/backends/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Processes",frontmatter:{},regularPath:"/federation/backends/processes.html",relativePath:"federation/backends/processes.md",key:"v-78536523",path:"/federation/backends/processes.html",headers:[{level:2,title:"Core Profile",slug:"core-profile"},{level:3,title:"Data Cubes",slug:"data-cubes"},{level:3,title:"Arrays / Reducers",slug:"arrays-reducers"},{level:3,title:"Math",slug:"math"},{level:3,title:"Statistics / Indices",slug:"statistics-indices"},{level:3,title:"Logic",slug:"logic"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Federation Aspects and Known Issues",frontmatter:{},regularPath:"/federation/",relativePath:"federation/index.md",key:"v-7ffae7c8",path:"/federation/",headers:[{level:2,title:"Data Collections",slug:"data-collections"},{level:3,title:"Terrascope",slug:"terrascope"},{level:3,title:"Sentinel Hub",slug:"sentinel-hub"},{level:3,title:"EODC",slug:"eodc"},{level:3,title:"Enforce back-end selection for common collections",slug:"enforce-back-end-selection-for-common-collections"},{level:2,title:"Processes",slug:"processes"},{level:2,title:"File formats",slug:"file-formats"},{level:2,title:"On-demand-preview",slug:"on-demand-preview"},{level:2,title:"Batch jobs",slug:"batch-jobs"},{level:3,title:"Managed job splitting",slug:"managed-job-splitting"},{level:3,title:"Validity of signed URLs in batch job results",slug:"validity-of-signed-urls-in-batch-job-results"},{level:3,title:"Customizing batch job resources on Terrascope",slug:"customizing-batch-job-resources-on-terrascope"},{level:3,title:"Batch job results on Sentinel Hub",slug:"batch-job-results-on-sentinel-hub"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{frontmatter:{sidebar:!1,stripCSS:!0},regularPath:"/file-formats/",relativePath:"file-formats/index.md",key:"v-21de1e8c",path:"/file-formats/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Get started with the openEO Platform Editor",frontmatter:{},regularPath:"/getting-started/editor/",relativePath:"getting-started/editor/index.md",key:"v-adb4d3cc",path:"/getting-started/editor/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Get started with the openEO JavaScript Client",frontmatter:{},regularPath:"/getting-started/javascript/",relativePath:"getting-started/javascript/index.md",key:"v-974804cc",path:"/getting-started/javascript/",headers:[{level:2,title:"Installation",slug:"installation"},{level:2,title:"Connecting to openEO Platform",slug:"connecting-to-openeo-platform"},{level:3,title:"Collections",slug:"collections"},{level:3,title:"Processes",slug:"processes"},{level:2,title:"Authentication",slug:"authentication"},{level:2,title:"Creating a (user-defined) process",slug:"creating-a-user-defined-process"},{level:2,title:"Batch Job Management",slug:"batch-job-management"},{level:2,title:"Additional Information",slug:"additional-information"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Get started with openEO Platform in JupyterLab (Python)",frontmatter:{},regularPath:"/getting-started/jupyterlab/",relativePath:"getting-started/jupyterlab/index.md",key:"v-779fe818",path:"/getting-started/jupyterlab/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Get started with the openEO Python Client",frontmatter:{},regularPath:"/getting-started/python/",relativePath:"getting-started/python/index.md",key:"v-23074efc",path:"/getting-started/python/",headers:[{level:2,title:"Installation",slug:"installation"},{level:2,title:"Connect to openEO Platform and explore",slug:"connect-to-openeo-platform-and-explore"},{level:3,title:"Collections",slug:"collections"},{level:3,title:"Processes",slug:"processes"},{level:2,title:"Authentication",slug:"authentication"},{level:2,title:"Working with Datacubes",slug:"working-with-datacubes"},{level:3,title:"Creating a Datacube",slug:"creating-a-datacube"},{level:3,title:"Applying processes",slug:"applying-processes"},{level:3,title:"Defining output format",slug:"defining-output-format"},{level:2,title:"Execution",slug:"execution"},{level:3,title:"Batch job execution",slug:"batch-job-execution"},{level:2,title:"Additional Information",slug:"additional-information"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Run openEO processes in Shiny apps",frontmatter:{},regularPath:"/getting-started/python/shiny.html",relativePath:"getting-started/python/shiny.md",key:"v-6b6d7bae",path:"/getting-started/python/shiny.html",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Get started with the openEO R Client",frontmatter:{},regularPath:"/getting-started/r/",relativePath:"getting-started/r/index.md",key:"v-a5deb388",path:"/getting-started/r/",headers:[{level:2,title:"Useful links",slug:"useful-links"},{level:2,title:"Installation",slug:"installation"},{level:2,title:"Connect to openEO Platform and explore",slug:"connect-to-openeo-platform-and-explore"},{level:3,title:"Collections",slug:"collections"},{level:3,title:"Processes",slug:"processes"},{level:2,title:"Authentication",slug:"authentication"},{level:2,title:"Creating a (user-defined) process",slug:"creating-a-user-defined-process"},{level:2,title:"Batch Job Management",slug:"batch-job-management"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"How to join the OpenEO Platform Virtual Organization (2 Steps)",frontmatter:{},regularPath:"/join/early_adopter.html",relativePath:"join/early_adopter.md",key:"v-1d4d57b7",path:"/join/early_adopter.html",headers:[{level:2,title:"Preamble: Registration and Login (Authentication)",slug:"preamble-registration-and-login-authentication"},{level:2,title:"Step 1: Connect an existing account",slug:"step-1-connect-an-existing-account"},{level:2,title:"Step 2: Join openEO Platform virtual organization",slug:"step-2-join-openeo-platform-virtual-organization"},{level:2,title:"Working with openEO platform",slug:"working-with-openeo-platform"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Registration",frontmatter:{},regularPath:"/join/free_trial.html",relativePath:"join/free_trial.md",key:"v-a1f70a7a",path:"/join/free_trial.html",headers:[{level:2,title:"Connect with EGI Check-in",slug:"connect-with-egi-check-in"},{level:2,title:"EOPlaza",slug:"eoplaza"},{level:2,title:"Working with openEO Platform",slug:"working-with-openeo-platform"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{frontmatter:{fullpage:!0,stripCSS:!0},regularPath:"/processes/",relativePath:"processes/index.md",key:"v-02b9217c",path:"/processes/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Analysis-Ready Data (ARD)",frontmatter:{},regularPath:"/usecases/ard/",relativePath:"usecases/ard/index.md",key:"v-d4caec3c",path:"/usecases/ard/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Analysis-Ready Data for Multi-Spectral Imagery (Sentinel-2)",frontmatter:{},regularPath:"/usecases/ard/msi/",relativePath:"usecases/ard/msi/index.md",key:"v-0937d47a",path:"/usecases/ard/msi/",headers:[{level:2,title:"Atmospheric correction",slug:"atmospheric-correction"},{level:3,title:"Reference implementations",slug:"reference-implementations"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Analysis-Ready Data for SAR (Sentinel-1)",frontmatter:{},regularPath:"/usecases/ard/sar/",relativePath:"usecases/ard/sar/index.md",key:"v-c5fcf990",path:"/usecases/ard/sar/",headers:[{level:2,title:"Backscatter computation",slug:"backscatter-computation"},{level:2,title:"Reference implementations",slug:"reference-implementations"},{level:3,title:"CARD4L NRB for SENTINEL1_GRD collection (provided by Sentinel Hub)",slug:"card4l-nrb-for-sentinel1-grd-collection-provided-by-sentinel-hub"},{level:3,title:"Orfeo for other GRD collections (provided by VITO / TerraScope)",slug:"orfeo-for-other-grd-collections-provided-by-vito-terrascope"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Crop Classification",frontmatter:{},regularPath:"/usecases/crop-classification/",relativePath:"usecases/crop-classification/index.md",key:"v-65bcb302",path:"/usecases/crop-classification/",headers:[{level:2,title:"Preprocessing & feature engineering",slug:"preprocessing-feature-engineering"},{level:3,title:"Data preparation",slug:"data-preparation"},{level:3,title:"Computing temporal features",slug:"computing-temporal-features"},{level:2,title:"Model training",slug:"model-training"},{level:2,title:"Classification",slug:"classification"},{level:3,title:"Rule-based classification",slug:"rule-based-classification"},{level:3,title:"Supervised classification using Random Forest",slug:"supervised-classification-using-random-forest"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Forest Change Detection",frontmatter:{},regularPath:"/usecases/forest-change-detection/",relativePath:"usecases/forest-change-detection/index.md",key:"v-2b5b0ed8",path:"/usecases/forest-change-detection/",headers:[{level:2,title:"Data preparation",slug:"data-preparation"},{level:2,title:"Seasonal curve fitting",slug:"seasonal-curve-fitting"},{level:2,title:"Predicting values",slug:"predicting-values"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Dynamic land cover service",frontmatter:{},regularPath:"/usecases/landcover/",relativePath:"usecases/landcover/index.md",key:"v-5041b7a0",path:"/usecases/landcover/",headers:[{level:2,title:"Methodology",slug:"methodology"},{level:3,title:"Reference data",slug:"reference-data"},{level:3,title:"Input data",slug:"input-data"},{level:3,title:"Preprocessing",slug:"preprocessing"},{level:3,title:"Feature engineering",slug:"feature-engineering"},{level:3,title:"Model",slug:"model"},{level:2,title:"Implementation",slug:"implementation"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Large scale processing",frontmatter:{},regularPath:"/usecases/large-scale-processing/",relativePath:"usecases/large-scale-processing/index.md",key:"v-589f7f88",path:"/usecases/large-scale-processing/",headers:[{level:2,title:"Relevant openEO features",slug:"relevant-openeo-features"},{level:2,title:"Preparation",slug:"preparation"},{level:2,title:"Prepare tiling grid",slug:"prepare-tiling-grid"},{level:2,title:"Prepare job attributes",slug:"prepare-job-attributes"},{level:2,title:"Tuning your processing job",slug:"tuning-your-processing-job"},{level:2,title:"Starting map production",slug:"starting-map-production"},{level:2,title:"Errors during production",slug:"errors-during-production"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"NOâ‚‚ monitoring",frontmatter:{},regularPath:"/usecases/no2-monitoring/",relativePath:"usecases/no2-monitoring/index.md",key:"v-697f60bc",path:"/usecases/no2-monitoring/",headers:[{level:2,title:"Shiny apps (R and Python)",slug:"shiny-apps-r-and-python"},{level:3,title:"Time-Series Analyser",slug:"time-series-analyser"},{level:3,title:"Map Maker for one Snapshot",slug:"map-maker-for-one-snapshot"},{level:3,title:"Spacetime Animation",slug:"spacetime-animation"},{level:2,title:"Basic NOâ‚‚ analysis in Python, R and JavaScript",slug:"basic-no2-analysis-in-python-r-and-javascript"},{level:3,title:"1. Load a data cube",slug:"_1-load-a-data-cube"},{level:3,title:"2. Fill gaps",slug:"_2-fill-gaps"},{level:3,title:"3. Smoothen values (optional)",slug:"_3-smoothen-values-optional"},{level:3,title:"4. What do you want to know?",slug:"_4-what-do-you-want-to-know"},{level:3,title:"5. Execute the process",slug:"_5-execute-the-process"},{level:3,title:"Result",slug:"result"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}}],themeConfig:{logo:"https://openeo.cloud/wp-content/themes/openeo_platform/images/logo-pages.svg",editLinks:!0,docsRepo:"openEOPlatform/documentation",docsBranch:"main",algolia:{appId:"AH1DCGL38F",apiKey:"3d026b8a9c3950be6d136a6d0f934029",indexName:"openeo-cloud"},nav:[{text:"Datasets",link:"/data-collections/"},{text:"Get Started",items:[{text:"Data Cubes",link:"https://openeo.org/documentation/1.0/datacubes.html"},{text:"Client Libraries",items:[{text:"JavaScript",link:"/getting-started/javascript/"},{text:"Python",link:"/getting-started/python/"},{text:"R",link:"/getting-started/r/"}]},{text:"Development Environments",items:[{text:"JupyterLab (Python)",link:"/getting-started/jupyterlab/"},{text:"Editor",link:"/getting-started/editor/"}]},{text:"Free Trial Registration",link:"/join/free_trial.html"},{text:"Cookbook",link:"https://openeo.org/documentation/1.0/cookbook/"}]},{text:"Clients",items:[{text:"JavaScript",link:"https://open-eo.github.io/openeo-js-client/latest/"},{text:"Python",link:"https://open-eo.github.io/openeo-python-client/"},{text:"R",link:"https://open-eo.github.io/openeo-r-client/"}]},{text:"Use Cases",items:[{text:"Cookbook",link:"https://openeo.org/documentation/1.0/cookbook/"},{text:"Analysis-Ready Data (ARD)",items:[{text:"Overview",link:"/usecases/ard/"},{text:"SAR (Sentinel-1)",link:"/usecases/ard/sar/"},{text:"Multi-Spectral Imagery",link:"/usecases/ard/msi/"}]},{text:"Crop Classification",link:"/usecases/crop-classification/"},{text:"Forest Change Detection",link:"/usecases/forest-change-detection/"},{text:"Land Cover Classification",link:"/usecases/landcover/"},{text:"NOâ‚‚ monitoring",link:"/usecases/no2-monitoring/"},{text:"Large scale processing",link:"/usecases/large-scale-processing/"}]},{text:"Processes",items:[{text:"JavaScript & R",link:"/processes/"},{text:"Python",link:"https://open-eo.github.io/openeo-python-client/api.html#module-openeo.rest.datacube"}]},{text:"File Formats",link:"/file-formats/"},{text:"Advanced",items:[{text:"Accounting",link:"/federation/accounting.html"},{text:"Federation Aspects",link:"/federation/index.html"},{text:"Federation Contract",link:"/federation/backends/index.html"},{text:"HTTP API",link:"/api/"}]},{text:"Contact",link:"https://openeo.cloud/contact/"}],sidebar:"auto"}};n(148);r.a.component("ApiSpec",()=>n.e(53).then(n.bind(null,469))),r.a.component("DataCollections",()=>Promise.all([n.e(0),n.e(4),n.e(33)]).then(n.bind(null,462))),r.a.component("FileFormatsSpec",()=>Promise.all([n.e(0),n.e(4),n.e(34)]).then(n.bind(null,463))),r.a.component("ProcessesSpec",()=>n.e(54).then(n.bind(null,470))),r.a.component("CodeBlock",()=>Promise.all([n.e(0),n.e(16)]).then(n.bind(null,466))),r.a.component("CodeGroup",()=>Promise.all([n.e(0),n.e(17)]).then(n.bind(null,467))),r.a.component("Badge",()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,478)));n(149),n(150);r.a.component("CodeSwitcher",()=>n.e(55).then(n.bind(null,471)));var Ue=[({router:t,Vue:e})=>{e.config.ignoredElements=["redoc"],t.beforeEach((t,e,n)=>{const r={"/authentication":"/join/free_trial.html","/join/early_adopter.html":"/join/free_trial.html"}[t.path];r?n({path:r}):n()})},{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},{},{},{},({Vue:t})=>{t.component("CodeCopy",Ee)}],Ie=[];class De extends class{constructor(){this.store=new r.a({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){r.a.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(De.prototype,{getPageAsyncComponent:ce,getLayoutAsyncComponent:ue,getAsyncComponent:le,getVueComponent:fe});var Ne={install(t){const e=new De;t.$vuepress=e,t.prototype.$vuepress=e}};function Fe(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var Be={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return de("pageKey",e),r.a.component(e)||r.a.component(e,ce(e)),r.a.component(e)?t(e):t("")}},ze={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Ve={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},He=(n(151),n(152),Object(Pe.a)(Ve,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),qe={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};r.a.config.productionTip=!1,r.a.use(Jt),r.a.use(Ne),r.a.mixin(function(t,e,n=r.a){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const o=new(t(n.$vuepress.$get("siteData"))),i=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(o)),a={};return Object.keys(i).reduce((t,e)=>(e.startsWith("$")&&(t[e]=i[e].get),t),a),{computed:a}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!r.a.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Fe(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Fe(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Fe(t,o)?r(o):Fe(t,n)?r(n):r()}})}(n);const o={};try{await Promise.all(Ue.filter(t=>"function"==typeof t).map(e=>e({Vue:r.a,options:o,router:n,siteData:Me,isServer:t})))}catch(t){console.error(t)}return{app:new r.a(Object.assign(o,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Ie.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file + */function o(t,e){for(var n in e)t[n]=e[n];return t}var i=/[!'()*]/g,a=function(t){return"%"+t.charCodeAt(0).toString(16)},s=/%2C/g,c=function(t){return encodeURIComponent(t).replace(i,a).replace(s,",")};function u(t){try{return decodeURIComponent(t)}catch(t){0}return t}var l=function(t){return null==t||"object"==typeof t?t:String(t)};function f(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=u(n.shift()),o=n.length>0?u(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function p(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return c(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(c(e)):r.push(c(e)+"="+c(t)))})),r.join("&")}return c(e)+"="+c(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var d=/\/?$/;function h(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=v(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:y(e,o),matched:t?g(t):[]};return n&&(a.redirectedFrom=y(n,o)),Object.freeze(a)}function v(t){if(Array.isArray(t))return t.map(v);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=v(t[n]);return e}return t}var m=h(null,{path:"/"});function g(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function y(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||p)(r)+o}function b(t,e,n){return e===m?t===e:!!e&&(t.path&&e.path?t.path.replace(d,"")===e.path.replace(d,"")&&(n||t.hash===e.hash&&_(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&_(t.query,e.query)&&_(t.params,e.params))))}function _(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((function(n,o){var i=t[n];if(r[o]!==n)return!1;var a=e[n];return null==i||null==a?i===a:"object"==typeof i&&"object"==typeof a?_(i,a):String(i)===String(a)}))}function x(t){for(var e=0;e=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(i.path||""),p=e&&e.path||"/",d=u.path?C(u.path,p,n||i.append):p,h=function(t,e,n){void 0===e&&(e={});var r,o=n||f;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(l):l(a)}return r}(u.query,i.query,r&&r.options.parseQuery),v=i.hash||u.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:d,query:h,hash:v}}var q,J=function(){},W={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,i=n.resolve(this.to,r,this.append),a=i.location,s=i.route,c=i.href,u={},l=n.options.linkActiveClass,f=n.options.linkExactActiveClass,p=null==l?"router-link-active":l,v=null==f?"router-link-exact-active":f,m=null==this.activeClass?p:this.activeClass,g=null==this.exactActiveClass?v:this.exactActiveClass,y=s.redirectedFrom?h(null,H(s.redirectedFrom),null,n):s;u[g]=b(r,y,this.exactPath),u[m]=this.exact||this.exactPath?u[g]:function(t,e){return 0===t.path.replace(d,"/").indexOf(e.path.replace(d,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,y);var _=u[g]?this.ariaCurrentValue:null,x=function(t){K(t)&&(e.replace?n.replace(a,J):n.push(a,J))},w={click:K};Array.isArray(this.event)?this.event.forEach((function(t){w[t]=x})):w[this.event]=x;var k={class:u},C=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:s,navigate:x,isActive:u[m],isExactActive:u[g]});if(C){if(1===C.length)return C[0];if(C.length>1||!C.length)return 0===C.length?t():t("span",{},C)}if("a"===this.tag)k.on=w,k.attrs={href:c,"aria-current":_};else{var S=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=V(l.path,s.params),c(l,s,a)}if(s.path){s.params={};for(var d=0;d-1}function St(t,e){return Ct(t)&&t._isRouter&&(null==e||t.type===e)}function Ot(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function $t(t){return function(e,n,r){var o=!1,i=0,a=null;jt(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var c,u=At((function(e){var o;((o=e).__esModule||Et&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:q.extend(e),n.components[s]=e,--i<=0&&r()})),l=At((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Ct(t)?t:new Error(e),r(a))}));try{c=t(u,l)}catch(t){l(t)}if(c)if("function"==typeof c.then)c.then(u,l);else{var f=c.component;f&&"function"==typeof f.then&&f.then(u,l)}}})),o||r()}}function jt(t,e){return Pt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Pt(t){return Array.prototype.concat.apply([],t)}var Et="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function At(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Tt=function(t,e){this.router=t,this.base=function(t){if(!t)if(G){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=m,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Lt(t,e,n,r){var o=jt(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=q.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Pt(r?o.reverse():o)}function Rt(t,e){if(e)return function(){return t.apply(e,arguments)}}Tt.prototype.listen=function(t){this.cb=t},Tt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Tt.prototype.onError=function(t){this.errorCbs.push(t)},Tt.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(St(t,bt.redirected)&&i===m||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Tt.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!St(t)&&Ct(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},c=t.matched.length-1,u=o.matched.length-1;if(b(t,o)&&c===u&&t.matched[c]===o.matched[u])return this.ensureURL(),t.hash&&st(this.router,o,t,!1),s(((a=wt(i=o,t,bt.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=mt&&n;r&&this.listeners.push(at());var o=function(){var n=t.current,o=Ut(t.base);t.current===m&&o===t._startLocation||t.transitionTo(o,(function(t){r&&st(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){gt(S(r.base+t.fullPath)),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){yt(S(r.base+t.fullPath)),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ut(this.base)!==this.current.fullPath){var e=S(this.base+this.current.fullPath);t?gt(e):yt(e)}},e.prototype.getCurrentLocation=function(){return Ut(this.base)},e}(Tt);function Ut(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(S(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var It=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ut(t);if(!/^\/#/.test(e))return window.location.replace(S(t+"/#"+e)),!0}(this.base)||Dt()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=mt&&e;n&&this.listeners.push(at());var r=function(){var e=t.current;Dt()&&t.transitionTo(Nt(),(function(r){n&&st(t.router,r,e,!0),mt||zt(r.fullPath)}))},o=mt?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Bt(t.fullPath),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){zt(t.fullPath),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Nt()!==e&&(t?Bt(e):zt(e))},e.prototype.getCurrentLocation=function(){return Nt()},e}(Tt);function Dt(){var t=Nt();return"/"===t.charAt(0)||(zt("/"+t),!1)}function Nt(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Ft(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Bt(t){mt?gt(Ft(t)):window.location.hash=t}function zt(t){mt?yt(Ft(t)):window.location.replace(Ft(t))}var Vt=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){St(t,bt.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Tt),Ht=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Z(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!mt&&!1!==t.fallback,this.fallback&&(e="hash"),G||(e="abstract"),this.mode=e,e){case"history":this.history=new Mt(this,t.base);break;case"hash":this.history=new It(this,t.base,this.fallback);break;case"abstract":this.history=new Vt(this,t.base);break;default:0}},qt={currentRoute:{configurable:!0}};Ht.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},qt.currentRoute.get=function(){return this.history&&this.history.current},Ht.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Mt||n instanceof It){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;mt&&o&&"fullPath"in t&&st(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Ht.prototype.beforeEach=function(t){return Wt(this.beforeHooks,t)},Ht.prototype.beforeResolve=function(t){return Wt(this.resolveHooks,t)},Ht.prototype.afterEach=function(t){return Wt(this.afterHooks,t)},Ht.prototype.onReady=function(t,e){this.history.onReady(t,e)},Ht.prototype.onError=function(t){this.history.onError(t)},Ht.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Ht.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Ht.prototype.go=function(t){this.history.go(t)},Ht.prototype.back=function(){this.go(-1)},Ht.prototype.forward=function(){this.go(1)},Ht.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Ht.prototype.resolve=function(t,e,n){var r=H(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?S(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Ht.prototype.getRoutes=function(){return this.matcher.getRoutes()},Ht.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==m&&this.history.transitionTo(this.history.getCurrentLocation())},Ht.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==m&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ht.prototype,qt);var Jt=Ht;function Wt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Ht.install=function t(e){if(!t.installed||q!==e){t.installed=!0,q=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",w),e.component("RouterLink",W);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Ht.version="3.6.5",Ht.isNavigationFailure=St,Ht.NavigationFailureType=bt,Ht.START_LOCATION=m,G&&window.Vue&&window.Vue.use(Ht);var Kt={"components/AlgoliaSearchBox":()=>Promise.all([n.e(0),n.e(38)]).then(n.bind(null,237)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(28)]).then(n.bind(null,181)),"components/DropdownTransition":()=>Promise.all([n.e(0),n.e(47)]).then(n.bind(null,159)),"components/Home":()=>Promise.all([n.e(0),n.e(31)]).then(n.bind(null,301)),"components/NavLink":()=>n.e(50).then(n.bind(null,157)),"components/NavLinks":()=>Promise.all([n.e(0),n.e(26)]).then(n.bind(null,205)),"components/Navbar":()=>Promise.all([n.e(0),n.e(5),n.e(39)]).then(n.bind(null,453)),"components/Page":()=>Promise.all([n.e(0),n.e(25)]).then(n.bind(null,302)),"components/PageEdit":()=>Promise.all([n.e(0),n.e(32)]).then(n.bind(null,211)),"components/PageNav":()=>Promise.all([n.e(0),n.e(29)]).then(n.bind(null,212)),"components/Sidebar":()=>Promise.all([n.e(0),n.e(24)]).then(n.bind(null,303)),"components/SidebarButton":()=>Promise.all([n.e(0),n.e(48)]).then(n.bind(null,308)),"components/SidebarGroup":()=>Promise.all([n.e(0),n.e(10)]).then(n.bind(null,206)),"components/SidebarLink":()=>Promise.all([n.e(0),n.e(36)]).then(n.bind(null,182)),"components/SidebarLinks":()=>Promise.all([n.e(0),n.e(10)]).then(n.bind(null,177)),"global-components/Badge":()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,478)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(16)]).then(n.bind(null,466)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(17)]).then(n.bind(null,467)),"layouts/404":()=>n.e(18).then(n.bind(null,468)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(5),n.e(9),n.e(11)]).then(n.bind(null,465)),NotFound:()=>n.e(18).then(n.bind(null,468)),Layout:()=>Promise.all([n.e(0),n.e(5),n.e(9),n.e(11)]).then(n.bind(null,465))},Gt={"v-4e72e1d8":()=>n.e(56).then(n.bind(null,479)),"v-14e901dc":()=>n.e(57).then(n.bind(null,480)),"v-21917184":()=>n.e(58).then(n.bind(null,481)),"v-045b6323":()=>n.e(59).then(n.bind(null,482)),"v-acc004fa":()=>n.e(60).then(n.bind(null,483)),"v-3e291b63":()=>n.e(61).then(n.bind(null,484)),"v-688ffb43":()=>n.e(62).then(n.bind(null,485)),"v-700f1b88":()=>n.e(63).then(n.bind(null,486)),"v-78536523":()=>n.e(64).then(n.bind(null,487)),"v-7ffae7c8":()=>n.e(51).then(n.bind(null,488)),"v-21de1e8c":()=>n.e(65).then(n.bind(null,489)),"v-adb4d3cc":()=>n.e(66).then(n.bind(null,490)),"v-974804cc":()=>n.e(67).then(n.bind(null,491)),"v-779fe818":()=>n.e(68).then(n.bind(null,492)),"v-23074efc":()=>n.e(69).then(n.bind(null,493)),"v-6b6d7bae":()=>n.e(70).then(n.bind(null,494)),"v-a5deb388":()=>n.e(71).then(n.bind(null,495)),"v-1d4d57b7":()=>n.e(37).then(n.bind(null,496)),"v-a1f70a7a":()=>n.e(49).then(n.bind(null,497)),"v-02b9217c":()=>n.e(72).then(n.bind(null,498)),"v-d4caec3c":()=>n.e(73).then(n.bind(null,499)),"v-0937d47a":()=>n.e(74).then(n.bind(null,500)),"v-c5fcf990":()=>n.e(75).then(n.bind(null,501)),"v-65bcb302":()=>n.e(76).then(n.bind(null,502)),"v-2b5b0ed8":()=>n.e(77).then(n.bind(null,503)),"v-5041b7a0":()=>n.e(78).then(n.bind(null,504)),"v-589f7f88":()=>n.e(79).then(n.bind(null,505)),"v-697f60bc":()=>n.e(52).then(n.bind(null,506))};function Xt(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Yt=/-(\w)/g,Zt=Xt(t=>t.replace(Yt,(t,e)=>e?e.toUpperCase():"")),Qt=/\B([A-Z])/g,te=Xt(t=>t.replace(Qt,"-$1").toLowerCase()),ee=Xt(t=>t.charAt(0).toUpperCase()+t.slice(1));function ne(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(ee(Zt(e))):t(ee(e))||t(te(e))}const re=Object.assign({},Kt,Gt),oe=t=>re[t],ie=t=>Gt[t],ae=t=>Kt[t],se=t=>r.a.component(t);function ce(t){return ne(ie,t)}function ue(t){return ne(ae,t)}function le(t){return ne(oe,t)}function fe(t){return ne(se,t)}function pe(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!fe(t)&&le(t)){const e=await le(t)();r.a.component(t,e.default)}}))}function de(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var he=n(47),ve=n.n(he),me=n(48),ge=n.n(me),ye={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${ge()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=_e(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=xe(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ve()([{name:"description",content:this.$description}],t,this.siteMeta,we)},updateCanonicalLink(){be(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",_e(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){xe(null,this.currentMetaTags),be()}};function be(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function _e(t=""){return t?``:""}function xe(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function we(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var ke=n(13),Ce=n.n(ke),Se={mounted(){Ce.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||r.a.component(t.name)||Ce.a.start(),n()}),this.$router.afterEach(()=>{Ce.a.done(),this.isSidebarOpen=!1})}},Oe=n(49),$e={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(Oe)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},je={props:{parent:Object,code:String,options:{align:String,color:String,backgroundTransition:Boolean,backgroundColor:String,successText:String,staticIcon:Boolean}},data:()=>({success:!1,originalBackground:null,originalTransition:null}),computed:{alignStyle(){let t={};return t[this.options.align]="7.5px",t},iconClass(){return this.options.staticIcon?"":"hover"}},mounted(){this.originalTransition=this.parent.style.transition,this.originalBackground=this.parent.style.background},beforeDestroy(){this.parent.style.transition=this.originalTransition,this.parent.style.background=this.originalBackground},methods:{hexToRgb(t){let e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null},copyToClipboard(t){if(navigator.clipboard)navigator.clipboard.writeText(this.code).then(()=>{this.setSuccessTransitions()},()=>{});else{let t=document.createElement("textarea");document.body.appendChild(t),t.value=this.code,t.select(),document.execCommand("Copy"),t.remove(),this.setSuccessTransitions()}},setSuccessTransitions(){if(clearTimeout(this.successTimeout),this.options.backgroundTransition){this.parent.style.transition="background 350ms";let t=this.hexToRgb(this.options.backgroundColor);this.parent.style.background=`rgba(${t.r}, ${t.g}, ${t.b}, 0.1)`}this.success=!0,this.successTimeout=setTimeout(()=>{this.options.backgroundTransition&&(this.parent.style.background=this.originalBackground,this.parent.style.transition=this.originalTransition),this.success=!1},500)}}},Pe=(n(146),n(4)),Ee=Object(Pe.a)(je,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"code-copy"},[e("svg",{class:t.iconClass,style:t.alignStyle,attrs:{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},on:{click:t.copyToClipboard}},[e("path",{attrs:{fill:"none",d:"M0 0h24v24H0z"}}),t._v(" "),e("path",{attrs:{fill:t.options.color,d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}})]),t._v(" "),e("span",{class:t.success?"success":"",style:t.alignStyle},[t._v("\n "+t._s(t.options.successText)+"\n ")])])}),[],!1,null,"49140617",null).exports,Ae=(n(147),[ye,Se,$e,{updated(){this.update()},methods:{update(){setTimeout(()=>{document.querySelectorAll('div[class*="language-"] pre').forEach(t=>{if(t.classList.contains("code-copy-added"))return;let e=new(r.a.extend(Ee));e.options={align:"bottom",color:"#27b1ff",backgroundTransition:!0,backgroundColor:"#0075b8",successText:"Copied!",staticIcon:!1},e.code=t.innerText,e.parent=t,e.$mount(),t.classList.add("code-copy-added"),t.appendChild(e.$el)})},100)}}}]),Te={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return de("layout",t),r.a.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},Le=Object(Pe.a)(Te,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Le,"mixins",Ae);const Re=[{name:"v-4e72e1d8",path:"/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-4e72e1d8").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-14e901dc",path:"/api/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-14e901dc").then(n)}},{path:"/api/index.html",redirect:"/api/"},{name:"v-21917184",path:"/data-collections/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-21917184").then(n)}},{path:"/data-collections/index.html",redirect:"/data-collections/"},{name:"v-045b6323",path:"/federation/accounting.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-045b6323").then(n)}},{name:"v-acc004fa",path:"/federation/backends/api.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-acc004fa").then(n)}},{name:"v-3e291b63",path:"/federation/backends/collections.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-3e291b63").then(n)}},{name:"v-688ffb43",path:"/federation/backends/fileformats.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-688ffb43").then(n)}},{name:"v-700f1b88",path:"/federation/backends/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-700f1b88").then(n)}},{path:"/federation/backends/index.html",redirect:"/federation/backends/"},{name:"v-78536523",path:"/federation/backends/processes.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-78536523").then(n)}},{name:"v-7ffae7c8",path:"/federation/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-7ffae7c8").then(n)}},{path:"/federation/index.html",redirect:"/federation/"},{name:"v-21de1e8c",path:"/file-formats/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-21de1e8c").then(n)}},{path:"/file-formats/index.html",redirect:"/file-formats/"},{name:"v-adb4d3cc",path:"/getting-started/editor/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-adb4d3cc").then(n)}},{path:"/getting-started/editor/index.html",redirect:"/getting-started/editor/"},{name:"v-974804cc",path:"/getting-started/javascript/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-974804cc").then(n)}},{path:"/getting-started/javascript/index.html",redirect:"/getting-started/javascript/"},{name:"v-779fe818",path:"/getting-started/jupyterlab/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-779fe818").then(n)}},{path:"/getting-started/jupyterlab/index.html",redirect:"/getting-started/jupyterlab/"},{name:"v-23074efc",path:"/getting-started/python/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-23074efc").then(n)}},{path:"/getting-started/python/index.html",redirect:"/getting-started/python/"},{name:"v-6b6d7bae",path:"/getting-started/python/shiny.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-6b6d7bae").then(n)}},{name:"v-a5deb388",path:"/getting-started/r/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-a5deb388").then(n)}},{path:"/getting-started/r/index.html",redirect:"/getting-started/r/"},{name:"v-1d4d57b7",path:"/join/early_adopter.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-1d4d57b7").then(n)}},{name:"v-a1f70a7a",path:"/join/free_trial.html",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-a1f70a7a").then(n)}},{name:"v-02b9217c",path:"/processes/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-02b9217c").then(n)}},{path:"/processes/index.html",redirect:"/processes/"},{name:"v-d4caec3c",path:"/usecases/ard/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-d4caec3c").then(n)}},{path:"/usecases/ard/index.html",redirect:"/usecases/ard/"},{name:"v-0937d47a",path:"/usecases/ard/msi/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-0937d47a").then(n)}},{path:"/usecases/ard/msi/index.html",redirect:"/usecases/ard/msi/"},{name:"v-c5fcf990",path:"/usecases/ard/sar/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-c5fcf990").then(n)}},{path:"/usecases/ard/sar/index.html",redirect:"/usecases/ard/sar/"},{name:"v-65bcb302",path:"/usecases/crop-classification/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-65bcb302").then(n)}},{path:"/usecases/crop-classification/index.html",redirect:"/usecases/crop-classification/"},{name:"v-2b5b0ed8",path:"/usecases/forest-change-detection/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-2b5b0ed8").then(n)}},{path:"/usecases/forest-change-detection/index.html",redirect:"/usecases/forest-change-detection/"},{name:"v-5041b7a0",path:"/usecases/landcover/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-5041b7a0").then(n)}},{path:"/usecases/landcover/index.html",redirect:"/usecases/landcover/"},{name:"v-589f7f88",path:"/usecases/large-scale-processing/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-589f7f88").then(n)}},{path:"/usecases/large-scale-processing/index.html",redirect:"/usecases/large-scale-processing/"},{name:"v-697f60bc",path:"/usecases/no2-monitoring/",component:Le,beforeEnter:(t,e,n)=>{pe("Layout","v-697f60bc").then(n)}},{path:"/usecases/no2-monitoring/index.html",redirect:"/usecases/no2-monitoring/"},{path:"*",component:Le}],Me={title:"openEO Platform Documentation",description:"One of the most important properties for a future-oriented platform on earth observation is the orientation towards simple operation, with a special focus on efficiency of evaluation and availability. Complexity is kept hidden in the background to direct your focus on the data. This is done on one hand by the use of an aggregate API to access the infrastructure, but also by improved user-faced graphical processing. For access to the API, the user has the option to incorporate his own preferences, by choosing between several clients.",base:"/",headTags:[],pages:[{title:"Home",frontmatter:{home:!0},regularPath:"/",relativePath:"README.md",key:"v-4e72e1d8",path:"/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{frontmatter:{fullpage:!0,stripCSS:!0},regularPath:"/api/",relativePath:"api/index.md",key:"v-14e901dc",path:"/api/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{frontmatter:{sidebar:!1,stripCSS:!0},regularPath:"/data-collections/",relativePath:"data-collections/index.md",key:"v-21917184",path:"/data-collections/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Platform credit usage",frontmatter:{},regularPath:"/federation/accounting.html",relativePath:"federation/accounting.md",key:"v-045b6323",path:"/federation/accounting.html",headers:[{level:2,title:"Platform credit rates",slug:"platform-credit-rates"},{level:2,title:"Estimating resource usage",slug:"estimating-resource-usage"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Federation API",frontmatter:{},regularPath:"/federation/backends/api.html",relativePath:"federation/backends/api.md",key:"v-acc004fa",path:"/federation/backends/api.html",headers:[{level:2,title:"Authentication and authorization",slug:"authentication-and-authorization"},{level:3,title:"Authentication",slug:"authentication"},{level:2,title:"Authorization",slug:"authorization"},{level:3,title:"Entitlements",slug:"entitlements"},{level:3,title:"Credits",slug:"credits"},{level:3,title:"Aggregator rules",slug:"aggregator-rules"},{level:3,title:"Backend rules",slug:"backend-rules"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Collections",frontmatter:{},regularPath:"/federation/backends/collections.html",relativePath:"federation/backends/collections.md",key:"v-3e291b63",path:"/federation/backends/collections.html",headers:[{level:2,title:"Collection availability",slug:"collection-availability"},{level:3,title:"Requirements for non-experimental collections",slug:"requirements-for-non-experimental-collections"},{level:2,title:"Harmonization",slug:"harmonization"},{level:3,title:"Common naming convention",slug:"common-naming-convention"},{level:3,title:"Sentinel2-L2A",slug:"sentinel2-l2a"},{level:3,title:"Common Properties",slug:"common-properties"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"File Formats",frontmatter:{},regularPath:"/federation/backends/fileformats.html",relativePath:"federation/backends/fileformats.md",key:"v-688ffb43",path:"/federation/backends/fileformats.html",headers:[{level:2,title:"Best practices file formats",slug:"best-practices-file-formats"},{level:3,title:"Raster Formats",slug:"raster-formats"},{level:2,title:"Federation agreement file formats",slug:"federation-agreement-file-formats"},{level:3,title:"GeoTiff",slug:"geotiff"},{level:3,title:"netCDF",slug:"netcdf"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Federation Contract",frontmatter:{},regularPath:"/federation/backends/",relativePath:"federation/backends/index.md",key:"v-700f1b88",path:"/federation/backends/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Processes",frontmatter:{},regularPath:"/federation/backends/processes.html",relativePath:"federation/backends/processes.md",key:"v-78536523",path:"/federation/backends/processes.html",headers:[{level:2,title:"Core Profile",slug:"core-profile"},{level:3,title:"Data Cubes",slug:"data-cubes"},{level:3,title:"Arrays / Reducers",slug:"arrays-reducers"},{level:3,title:"Math",slug:"math"},{level:3,title:"Statistics / Indices",slug:"statistics-indices"},{level:3,title:"Logic",slug:"logic"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Federation Aspects and Known Issues",frontmatter:{},regularPath:"/federation/",relativePath:"federation/index.md",key:"v-7ffae7c8",path:"/federation/",headers:[{level:2,title:"Data Collections",slug:"data-collections"},{level:3,title:"Terrascope",slug:"terrascope"},{level:3,title:"Sentinel Hub",slug:"sentinel-hub"},{level:3,title:"EODC",slug:"eodc"},{level:3,title:"Enforce back-end selection for common collections",slug:"enforce-back-end-selection-for-common-collections"},{level:2,title:"Processes",slug:"processes"},{level:2,title:"File formats",slug:"file-formats"},{level:2,title:"On-demand-preview",slug:"on-demand-preview"},{level:2,title:"Batch jobs",slug:"batch-jobs"},{level:3,title:"Managed job splitting",slug:"managed-job-splitting"},{level:3,title:"Validity of signed URLs in batch job results",slug:"validity-of-signed-urls-in-batch-job-results"},{level:3,title:"Customizing batch job resources on Terrascope",slug:"customizing-batch-job-resources-on-terrascope"},{level:3,title:"Batch job results on Sentinel Hub",slug:"batch-job-results-on-sentinel-hub"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{frontmatter:{sidebar:!1,stripCSS:!0},regularPath:"/file-formats/",relativePath:"file-formats/index.md",key:"v-21de1e8c",path:"/file-formats/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Get started with the openEO Platform Editor",frontmatter:{},regularPath:"/getting-started/editor/",relativePath:"getting-started/editor/index.md",key:"v-adb4d3cc",path:"/getting-started/editor/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Get started with the openEO JavaScript Client",frontmatter:{},regularPath:"/getting-started/javascript/",relativePath:"getting-started/javascript/index.md",key:"v-974804cc",path:"/getting-started/javascript/",headers:[{level:2,title:"Installation",slug:"installation"},{level:2,title:"Connecting to openEO Platform",slug:"connecting-to-openeo-platform"},{level:3,title:"Collections",slug:"collections"},{level:3,title:"Processes",slug:"processes"},{level:2,title:"Authentication",slug:"authentication"},{level:2,title:"Creating a (user-defined) process",slug:"creating-a-user-defined-process"},{level:2,title:"Batch Job Management",slug:"batch-job-management"},{level:2,title:"Additional Information",slug:"additional-information"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Get started with openEO Platform in JupyterLab (Python)",frontmatter:{},regularPath:"/getting-started/jupyterlab/",relativePath:"getting-started/jupyterlab/index.md",key:"v-779fe818",path:"/getting-started/jupyterlab/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Get started with the openEO Python Client",frontmatter:{},regularPath:"/getting-started/python/",relativePath:"getting-started/python/index.md",key:"v-23074efc",path:"/getting-started/python/",headers:[{level:2,title:"Installation",slug:"installation"},{level:2,title:"Connect to openEO Platform and explore",slug:"connect-to-openeo-platform-and-explore"},{level:3,title:"Collections",slug:"collections"},{level:3,title:"Processes",slug:"processes"},{level:2,title:"Authentication",slug:"authentication"},{level:2,title:"Working with Datacubes",slug:"working-with-datacubes"},{level:3,title:"Creating a Datacube",slug:"creating-a-datacube"},{level:3,title:"Applying processes",slug:"applying-processes"},{level:3,title:"Defining output format",slug:"defining-output-format"},{level:2,title:"Execution",slug:"execution"},{level:3,title:"Batch job execution",slug:"batch-job-execution"},{level:2,title:"Additional Information",slug:"additional-information"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Run openEO processes in Shiny apps",frontmatter:{},regularPath:"/getting-started/python/shiny.html",relativePath:"getting-started/python/shiny.md",key:"v-6b6d7bae",path:"/getting-started/python/shiny.html",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Get started with the openEO R Client",frontmatter:{},regularPath:"/getting-started/r/",relativePath:"getting-started/r/index.md",key:"v-a5deb388",path:"/getting-started/r/",headers:[{level:2,title:"Useful links",slug:"useful-links"},{level:2,title:"Installation",slug:"installation"},{level:2,title:"Connect to openEO Platform and explore",slug:"connect-to-openeo-platform-and-explore"},{level:3,title:"Collections",slug:"collections"},{level:3,title:"Processes",slug:"processes"},{level:2,title:"Authentication",slug:"authentication"},{level:2,title:"Creating a (user-defined) process",slug:"creating-a-user-defined-process"},{level:2,title:"Batch Job Management",slug:"batch-job-management"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"How to join the OpenEO Platform Virtual Organization (2 Steps)",frontmatter:{},regularPath:"/join/early_adopter.html",relativePath:"join/early_adopter.md",key:"v-1d4d57b7",path:"/join/early_adopter.html",headers:[{level:2,title:"Preamble: Registration and Login (Authentication)",slug:"preamble-registration-and-login-authentication"},{level:2,title:"Step 1: Connect an existing account",slug:"step-1-connect-an-existing-account"},{level:2,title:"Step 2: Join openEO Platform virtual organization",slug:"step-2-join-openeo-platform-virtual-organization"},{level:2,title:"Working with openEO platform",slug:"working-with-openeo-platform"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Registration",frontmatter:{},regularPath:"/join/free_trial.html",relativePath:"join/free_trial.md",key:"v-a1f70a7a",path:"/join/free_trial.html",headers:[{level:2,title:"Connect with EGI Check-in",slug:"connect-with-egi-check-in"},{level:2,title:"EOPlaza",slug:"eoplaza"},{level:2,title:"Working with openEO Platform",slug:"working-with-openeo-platform"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{frontmatter:{fullpage:!0,stripCSS:!0},regularPath:"/processes/",relativePath:"processes/index.md",key:"v-02b9217c",path:"/processes/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Analysis-Ready Data (ARD)",frontmatter:{},regularPath:"/usecases/ard/",relativePath:"usecases/ard/index.md",key:"v-d4caec3c",path:"/usecases/ard/",lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Analysis-Ready Data for Multi-Spectral Imagery (Sentinel-2)",frontmatter:{},regularPath:"/usecases/ard/msi/",relativePath:"usecases/ard/msi/index.md",key:"v-0937d47a",path:"/usecases/ard/msi/",headers:[{level:2,title:"Atmospheric correction",slug:"atmospheric-correction"},{level:3,title:"Reference implementations",slug:"reference-implementations"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Analysis-Ready Data for SAR (Sentinel-1)",frontmatter:{},regularPath:"/usecases/ard/sar/",relativePath:"usecases/ard/sar/index.md",key:"v-c5fcf990",path:"/usecases/ard/sar/",headers:[{level:2,title:"Backscatter computation",slug:"backscatter-computation"},{level:2,title:"Reference implementations",slug:"reference-implementations"},{level:3,title:"CARD4L NRB for SENTINEL1_GRD collection (provided by Sentinel Hub)",slug:"card4l-nrb-for-sentinel1-grd-collection-provided-by-sentinel-hub"},{level:3,title:"Orfeo for other GRD collections (provided by VITO / TerraScope)",slug:"orfeo-for-other-grd-collections-provided-by-vito-terrascope"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Crop Classification",frontmatter:{},regularPath:"/usecases/crop-classification/",relativePath:"usecases/crop-classification/index.md",key:"v-65bcb302",path:"/usecases/crop-classification/",headers:[{level:2,title:"Preprocessing & feature engineering",slug:"preprocessing-feature-engineering"},{level:3,title:"Data preparation",slug:"data-preparation"},{level:3,title:"Computing temporal features",slug:"computing-temporal-features"},{level:2,title:"Model training",slug:"model-training"},{level:2,title:"Classification",slug:"classification"},{level:3,title:"Rule-based classification",slug:"rule-based-classification"},{level:3,title:"Supervised classification using Random Forest",slug:"supervised-classification-using-random-forest"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Forest Change Detection",frontmatter:{},regularPath:"/usecases/forest-change-detection/",relativePath:"usecases/forest-change-detection/index.md",key:"v-2b5b0ed8",path:"/usecases/forest-change-detection/",headers:[{level:2,title:"Data preparation",slug:"data-preparation"},{level:2,title:"Seasonal curve fitting",slug:"seasonal-curve-fitting"},{level:2,title:"Predicting values",slug:"predicting-values"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Dynamic land cover service",frontmatter:{},regularPath:"/usecases/landcover/",relativePath:"usecases/landcover/index.md",key:"v-5041b7a0",path:"/usecases/landcover/",headers:[{level:2,title:"Methodology",slug:"methodology"},{level:3,title:"Reference data",slug:"reference-data"},{level:3,title:"Input data",slug:"input-data"},{level:3,title:"Preprocessing",slug:"preprocessing"},{level:3,title:"Feature engineering",slug:"feature-engineering"},{level:3,title:"Model",slug:"model"},{level:2,title:"Implementation",slug:"implementation"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"Large scale processing",frontmatter:{},regularPath:"/usecases/large-scale-processing/",relativePath:"usecases/large-scale-processing/index.md",key:"v-589f7f88",path:"/usecases/large-scale-processing/",headers:[{level:2,title:"Relevant openEO features",slug:"relevant-openeo-features"},{level:2,title:"Preparation",slug:"preparation"},{level:2,title:"Prepare tiling grid",slug:"prepare-tiling-grid"},{level:2,title:"Prepare job attributes",slug:"prepare-job-attributes"},{level:2,title:"Tuning your processing job",slug:"tuning-your-processing-job"},{level:2,title:"Starting map production",slug:"starting-map-production"},{level:2,title:"Errors during production",slug:"errors-during-production"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}},{title:"NOâ‚‚ monitoring",frontmatter:{},regularPath:"/usecases/no2-monitoring/",relativePath:"usecases/no2-monitoring/index.md",key:"v-697f60bc",path:"/usecases/no2-monitoring/",headers:[{level:2,title:"Shiny apps (R and Python)",slug:"shiny-apps-r-and-python"},{level:3,title:"Time-Series Analyser",slug:"time-series-analyser"},{level:3,title:"Map Maker for one Snapshot",slug:"map-maker-for-one-snapshot"},{level:3,title:"Spacetime Animation",slug:"spacetime-animation"},{level:2,title:"Basic NOâ‚‚ analysis in Python, R and JavaScript",slug:"basic-no2-analysis-in-python-r-and-javascript"},{level:3,title:"1. Load a data cube",slug:"_1-load-a-data-cube"},{level:3,title:"2. Fill gaps",slug:"_2-fill-gaps"},{level:3,title:"3. Smoothen values (optional)",slug:"_3-smoothen-values-optional"},{level:3,title:"4. What do you want to know?",slug:"_4-what-do-you-want-to-know"},{level:3,title:"5. Execute the process",slug:"_5-execute-the-process"},{level:3,title:"Result",slug:"result"}],lastUpdated:"7/14/2023, 9:11:48 AM",lastUpdatedTimestamp:1689325908e3,codeSwitcherOptions:{groups:{default:{py:"Python",js:"JavaScript"}}}}],themeConfig:{logo:"https://openeo.cloud/wp-content/themes/openeo_platform/images/logo-pages.svg",editLinks:!0,docsRepo:"openEOPlatform/documentation",docsBranch:"main",algolia:{appId:"AH1DCGL38F",apiKey:"3d026b8a9c3950be6d136a6d0f934029",indexName:"openeo-cloud"},nav:[{text:"Datasets",link:"/data-collections/"},{text:"Get Started",items:[{text:"Data Cubes",link:"https://openeo.org/documentation/1.0/datacubes.html"},{text:"Client Libraries",items:[{text:"JavaScript",link:"/getting-started/javascript/"},{text:"Python",link:"/getting-started/python/"},{text:"R",link:"/getting-started/r/"}]},{text:"Development Environments",items:[{text:"JupyterLab (Python)",link:"/getting-started/jupyterlab/"},{text:"Editor",link:"/getting-started/editor/"}]},{text:"Free Trial Registration",link:"/join/free_trial.html"},{text:"Cookbook",link:"https://openeo.org/documentation/1.0/cookbook/"}]},{text:"Clients",items:[{text:"JavaScript",link:"https://open-eo.github.io/openeo-js-client/latest/"},{text:"Python",link:"https://open-eo.github.io/openeo-python-client/"},{text:"R",link:"https://open-eo.github.io/openeo-r-client/"}]},{text:"Use Cases",items:[{text:"Cookbook",link:"https://openeo.org/documentation/1.0/cookbook/"},{text:"Analysis-Ready Data (ARD)",items:[{text:"Overview",link:"/usecases/ard/"},{text:"SAR (Sentinel-1)",link:"/usecases/ard/sar/"},{text:"Multi-Spectral Imagery",link:"/usecases/ard/msi/"}]},{text:"Crop Classification",link:"/usecases/crop-classification/"},{text:"Forest Change Detection",link:"/usecases/forest-change-detection/"},{text:"Land Cover Classification",link:"/usecases/landcover/"},{text:"NOâ‚‚ monitoring",link:"/usecases/no2-monitoring/"},{text:"Large scale processing",link:"/usecases/large-scale-processing/"}]},{text:"Processes",items:[{text:"JavaScript & R",link:"/processes/"},{text:"Python",link:"https://open-eo.github.io/openeo-python-client/api.html#module-openeo.rest.datacube"}]},{text:"File Formats",link:"/file-formats/"},{text:"Advanced",items:[{text:"Accounting",link:"/federation/accounting.html"},{text:"Federation Aspects",link:"/federation/index.html"},{text:"Federation Contract",link:"/federation/backends/index.html"},{text:"HTTP API",link:"/api/"}]},{text:"Contact",link:"https://openeo.cloud/contact/"}],sidebar:"auto"}};n(148);r.a.component("ApiSpec",()=>n.e(53).then(n.bind(null,469))),r.a.component("DataCollections",()=>Promise.all([n.e(0),n.e(4),n.e(33)]).then(n.bind(null,462))),r.a.component("FileFormatsSpec",()=>Promise.all([n.e(0),n.e(4),n.e(34)]).then(n.bind(null,463))),r.a.component("ProcessesSpec",()=>n.e(54).then(n.bind(null,470))),r.a.component("Badge",()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,478))),r.a.component("CodeBlock",()=>Promise.all([n.e(0),n.e(16)]).then(n.bind(null,466))),r.a.component("CodeGroup",()=>Promise.all([n.e(0),n.e(17)]).then(n.bind(null,467)));n(149),n(150);r.a.component("CodeSwitcher",()=>n.e(55).then(n.bind(null,471)));var Ue=[({router:t,Vue:e})=>{e.config.ignoredElements=["redoc"],t.beforeEach((t,e,n)=>{const r={"/authentication":"/join/free_trial.html","/join/early_adopter.html":"/join/free_trial.html"}[t.path];r?n({path:r}):n()})},{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},{},{},{},({Vue:t})=>{t.component("CodeCopy",Ee)}],Ie=[];class De extends class{constructor(){this.store=new r.a({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){r.a.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(De.prototype,{getPageAsyncComponent:ce,getLayoutAsyncComponent:ue,getAsyncComponent:le,getVueComponent:fe});var Ne={install(t){const e=new De;t.$vuepress=e,t.prototype.$vuepress=e}};function Fe(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var Be={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return de("pageKey",e),r.a.component(e)||r.a.component(e,ce(e)),r.a.component(e)?t(e):t("")}},ze={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Ve={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},He=(n(151),n(152),Object(Pe.a)(Ve,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),qe={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};r.a.config.productionTip=!1,r.a.use(Jt),r.a.use(Ne),r.a.mixin(function(t,e,n=r.a){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const o=new(t(n.$vuepress.$get("siteData"))),i=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(o)),a={};return Object.keys(i).reduce((t,e)=>(e.startsWith("$")&&(t[e]=i[e].get),t),a),{computed:a}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!r.a.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Fe(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Fe(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Fe(t,o)?r(o):Fe(t,n)?r(n):r()}})}(n);const o={};try{await Promise.all(Ue.filter(t=>"function"==typeof t).map(e=>e({Vue:r.a,options:o,router:n,siteData:Me,isServer:t})))}catch(t){console.error(t)}return{app:new r.a(Object.assign(o,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Ie.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file diff --git a/data-collections/index.html b/data-collections/index.html index 04f847917..08c20ec95 100644 --- a/data-collections/index.html +++ b/data-collections/index.html @@ -8,7 +8,7 @@ - + @@ -141,6 +141,6 @@

Loading data...

- + diff --git a/federation/accounting.html b/federation/accounting.html index c1d03e177..26bb2ed39 100644 --- a/federation/accounting.html +++ b/federation/accounting.html @@ -8,7 +8,7 @@ - + @@ -158,6 +158,6 @@ costs a few euros, but then you would also notice that your job is taking multiple hours to run.

In any case, once you've established an initial cost for a small area, you can extrapolate to a larger area. If simple linear extrapolation shows that a larger job is affordable, then run the job on larger areas, like 50ha or up to 100x100km. This will show you how your job scales, and what kind of costs you will be incurring! If at any point the cost appears unreasonable, please contact the platform!

- + diff --git a/federation/backends/api.html b/federation/backends/api.html index 66ecdf185..624ede05e 100644 --- a/federation/backends/api.html +++ b/federation/backends/api.html @@ -8,7 +8,7 @@ - + @@ -143,6 +143,6 @@ (opens new window)

# Federation API

The general contract is the openEO API (opens new window) in the latest stable version of the 1.x branch.

The aggregator that proxies the back-ends in the federation also implements the same API, but it also implements the "Federation Extension" (currently in draft state).

# Authentication and authorization

This important aspect of the federation is standardized by the AARC Blueprint Architecture (opens new window). EGI Check-in is the concrete implementation that is currently in use.

# Authentication

The openEO platform federation standardizes on the use of EGI Check-in (opens new window) as identity provider. Backends have to support the use of openID connect + PKCE, to enable this and register a client with EGI Check-in.

# Authorization

# Entitlements

Users of the federation are organized under the 'vo.openeo.cloud' virtual organization in EGI Check-in. Inside the virtual organization, different roles can be assigned to a user, to indicate that they have a certain subscription, or even on a more fine-grained level are entitled to specific actions or resources. The mechanism to check this, is again supported by EGI Check-in, under the 'eduperson_entitlement' claim: https://docs.egi.eu/providers/check-in/sp/#claims

# Credits

The second criterium for authorization is based on credits that are available to a user. Credits allow the platform to limit the volume of data access and processing operations that a user can perform during a given time frame. The amount of available credits depends on the subscription. When the credit balance of a user goes below zero, processing operations can be blocked.

# Aggregator rules

Based on the subscription and available credits, the aggregator can implement these rules:

  1. Credit checks to block starting of batch jobs, synchronous requests to /result and viewing services.
  2. Rate limiting (TBD)

# Backend rules

Some authorization rules will need to be enforced by the backends themselves:

  1. Basic access and access to user specific resources based on subscription role.
  2. Number of concurrent batch jobs
  3. Available processing resources, batch job priorities
  4. Batch job result data volume
  5. Access to restricted collections
- + diff --git a/federation/backends/collections.html b/federation/backends/collections.html index 9cf7c6b2e..678176a2f 100644 --- a/federation/backends/collections.html +++ b/federation/backends/collections.html @@ -8,7 +8,7 @@ - + @@ -149,6 +149,6 @@ considered non-experimental.

  1. Collections need to indicate the key 'providers' that are responsible for ensuring access to the data and continuity in the case of active missions. The user may depend on the guarantees offered by these providers with respect to the properties (timeliness, completeness,...) of a specific collection. The providers with role 'host' and 'producer' are mandatory.

  2. The collection description and extents needs to specify known limitations with respect to the original collection. For instance, if only a subset of the full archive is available, this should be indicated. Extents can be rough approximations to avoid requiring very detailed geometry in the metadata.

  3. Collections without an end time are assumed to be active missions. By default, 99% of items in these collections should be available within 48 hours after being published by the producer. This gives users a basic guarantee with respect to timeliness of products.

  4. Collection metadata should be valid STAC metadata and must include all extensions in stac_extensions. Tools such as STAC-validator (opens new window) can indicate obvious issues.

  5. FAIR principle R1: (Meta)data are richly described with a plurality of accurate and relevant attributes (opens new window)

  6. Collections have to follow harmonization guidelines specified below, if applicable.

  7. Collections naming (id, dimensions, bands) should remain constant.

  8. Backwards incompatible changes or removal need to be announced with a lead time of 6 months, together with a migration path.

  9. Minimum availability of non-experimental collections is 98% on a monthly basis. The backend availability is used here if availability is not measured per collection.

  10. Availability of a collection means that a simple process graph (e.g. using load_collection) returns a correct result. Collections may have special conditions to work, for instance in the case of commercial data.

# Harmonization

When back-ends offer/mirror the same datasets, it is required to align names and metadata. For the following collections and metadata an agreement has been achieved. These are all Copernicus Missions, and the standard names refer to the archives prepared and distributed by ESA. If it is not possible/desirable to use this name as collection id, a 'common_name' can be added next to the 'id' property to identify the collection as a standard archive.

# Common naming convention

In order to achieve a uniform structure for all collections on the platform and thus make it easier for users to navigate between collections, it is recommended to follow the common naming convention*:

  • Names should be written in capital letters ("all caps")
  • Names should consist of a combination of different optional attributes (see table)
  • The different attributes should be separated by an underscore

Very roughly speaking, collections can be divided into two groups (in reality it is more of a spectrum with all gradations in between):

  • collections containing raw data (or processing levels of that data) measured directly by a satellite (or an other measurement platform) and often distributed by the platform operator (e.g., ESA)
  • derived collections, which are based on (pre-processed) raw data that has been processed to create a collection with a specific purpose (e.g., a land cover map) and are often distributed by the institution (or a service of an institution) that created the collection
Attribute Type Description Examples
Provider string Often used for derived collections produced or order by the listed provider. ESA, CNSE, EMODNET, TERRASCOPE. CAMS, CGLS
Satellite/Platform string Name of the satellite/platform that acquired the data in the collection. SENTINEL2, LANDSAT8, PALSAR2
Processing level string Name of the level to which the data was processed (often processed raw data). L2A, L3, L2_1
Version string Often used for derived collections that are produced in several versions. V1, V2
Resolution string (number + unit or string) Usually added, if the resolution is of particular importance for the collection (e.g., novel product with this resolution) for the collection. 10M, 120M, EUROPE, GLOBAL
Product Description string Human readable description of the data within the collection. Can also be an abbreviation or acronym. LAND_COVER_MAP, WORLDCOVER, NDVI, LAI
Year number Often used for derived products that where updated in the specified year or created based on data of the specified year. 2022

Collections containing raw data or processing levels of that data often use a combination of satellite/platform and processing level (e.g., SENTINEL2_L1C ). Derived collections often use a combination of provider and product description (e.g., CNES_LAND_COVER_MAP).

*Some existing collections may not strictly follow this naming convention as they were added to the platform prior to this agreement.

# Sentinel2-L2A

The common name for this collection is 'SENTINEL2_L2A'. It refers to the L2A products generated by the Sen2Cor software, which can be configured to be compatible with the ESA generated products. Note that the products in the ESA archive were also processed with different versions of Sen2Cor, so it is not possible to specify a very specific version or configuration of the processing chain.

# Bands

Band names for spectral bands follow the Bxx naming convention used by ESA. For example: B01, B02, B03, B08, B8A, B12

  • SCL = the Sen2Cor scene classification band
  • approximateViewAzimuth = collective term for the mean and accurate viewing azimuth angle. Depending on which backend is processing the data, the mean angle (for Sentinel Hub) or the accurate angle (for Terrascope) is used. If the accurate angle (viewAzimuthAngles) or the mean angle (viewAzimuthMean) is explicitly specified, the data is processed on the backend that holds the specified band.
  • viewZenithMean = collective term for the mean and accurate viewing zenith angle. Depending on which backend is processing the data, the mean angle (for Sentinel Hub) or the accurate angle (for Terrascope) is used. If the accurate angle (viewZenithMean) or the mean angle (viewZenithAngles) is explicitly specified, the data is processed on the backend that holds those bands.
  • sunAzimuthAngles/sunZenithAngles = collective term for the exact sun azimuth and sun zenith angle.

# Common Properties

We list here a set of common properties, that can be relevant for multiple collections. Collections are strongly encouraged to use these properties instead of using a different name for the same property.

# Common

# Optical instruments

# SAR instruments

- + diff --git a/federation/backends/fileformats.html b/federation/backends/fileformats.html index 2f9587339..959d5e273 100644 --- a/federation/backends/fileformats.html +++ b/federation/backends/fileformats.html @@ -8,7 +8,7 @@ - + @@ -145,6 +145,6 @@
  • georeferenced (x/y dimensions)
  • can store multiple bands (band dimension)
  • can store multiple timestamps (time dimension)
  • self-describing, portable and scalable
  • GeoTiff: ideal for storing several bands in one file in cloud optimized format
    • georeferenced
    • can store multiple bands
    • a single GeoTiff corresponds to one timestamp (in combination with STAC, multi-temporal collections can be supported)
    • cloud optimized
  • # Federation agreement file formats

    If back-ends offer/mirror the same file formats for both import and export, it is required to align them.

    For file export through save_result for example, the output parameters and the structure of the data that is written to storage needs to be defined. For the following file formats an agreement has been achieved:

    • GeoTiff
    • netCDF

    The idea of these guidelines is to align with what the formats and corresponding toolchains support as much as possible.

    # GeoTiff

    Defaults:

    # netCDF

    Defaults:

    • The full datacube is written to a single netCDF.
    • The openEO dimension metadata is preserved in the netCDF file.
    • CF conventions (https://cfconventions.org/) are used where applicable.
    • Data is chunked and compressed

    More information on all supported file formats, can be found here.

    - + diff --git a/federation/backends/index.html b/federation/backends/index.html index 6f1126335..41e6a980c 100644 --- a/federation/backends/index.html +++ b/federation/backends/index.html @@ -8,7 +8,7 @@ - + @@ -148,6 +148,6 @@ the provider is expected to stop working on new features and improve reliability, or to mark the component as experimental. Reverting a 'stable' feature to 'experimental' should be considered a backwards incompatible change, requiring communication towards the user and proper consideration of the impact.

    Note

    To join the federation, it is required to (mostly) fulfill these requirements and document differences for users in the "Federation Aspects and Known Issues". Nevertheless, these requirements are negotiable if there are good arguments for a change as the current state of the "contract" is just the compromise that the existing providers have agreed upon and if a new back-end joins the federation new compromises may need to be made.

    - + diff --git a/federation/backends/processes.html b/federation/backends/processes.html index 0dc48c6d9..26a151475 100644 --- a/federation/backends/processes.html +++ b/federation/backends/processes.html @@ -8,7 +8,7 @@ - + @@ -142,6 +142,6 @@ Contact (opens new window)

    # Processes

    # Core Profile

    As the openEO project defines a lot of processes, we need to define a core profile (i.e. a subset) that needs to be implemented on each back-end. All processes specifications can be found at https://processes.openeo.org (opens new window)

    # Data Cubes

    • add_dimension: Add a new dimension
    • aggregate_spatial: Zonal statistics for geometries
    • aggregate_temporal: Temporal aggregations
    • aggregate_temporal_period: Temporal aggregations based on calendar hierarchies
    • apply: Apply a process to each pixel
    • apply_dimension: Apply a process to pixels along a dimension
    • apply_kernel: Apply a spatial convolution with a kernel
    • dimension_labels: Get the dimension labels
    • drop_dimension: Remove a dimension
    • filter_bands: Filter the bands by names
    • filter_bbox: Spatial filter using a bounding box
    • filter_spatial: Spatial filter using geometries
    • filter_temporal: Temporal filter for temporal intervals
    • load_collection: Load a collection
    • load_result: Load batch job results - experimental
    • mask: Apply a raster mask
    • mask_polygon: Apply a polygon mask
    • merge_cubes: Merge two data cubes
    • reduce_dimension: Reduce dimensions
    • rename_dimension: Rename a dimension
    • rename_labels: Rename dimension labels -> needed often for apply_dimension
    • resample_cube_spatial: Resample the spatial dimensions to match a target data cube
    • resample_cube_temporal: Resample temporal dimensions to match a target data cube - experimental
    • resample_spatial: Resample and warp the spatial dimensions
    • save_result: Save processed data

    # Arrays / Reducers

    • array_append: Append a value to an array - experimental
    • array_apply: Apply a process to each array element
    • array_concat: Merge two arrays - experimental
    • array_contains: Check whether the array contains a given value
    • array_create: Create an array - experimental
    • array_element: Get an element from an array
    • array_filter: Filter an array based on a condition
    • array_find: Get the index for a value in an array
    • array_interpolate_linear: One-dimensional linear interpolation for arrays - experimental
    • array_labels: Get the labels for an array
    • array_modify: Change the content of an array (insert, remove, update) - experimental
    • count: Count the number of elements
    • extrema: Minimum and maximum values
    • first: First element
    • last: Last element
    • max: Maximum value
    • mean: Arithmetic mean (average)
    • median: Statistical median
    • min: Minimum value
    • order: Create a permutation
    • product: Compute the product by multiplying numbers
    • rearrange: Rearrange an array based on a permutation
    • sort: Sort data
    • sum: Compute the sum by adding up numbers

    # Math

    • absolute: Absolute value
    • add: Addition of two numbers
    • arccos: Inverse cosine
    • arcosh: Inverse hyperbolic cosine
    • arcsin: Inverse sine
    • arctan: Inverse tangent
    • arctan2: Inverse tangent of two numbers
    • arsinh: Inverse hyperbolic sine
    • artanh: Inverse hyperbolic tangent
    • ceil: Round fractions up
    • clip: Clip a value between a minimum and a maximum
    • constant: Define a constant value -> pretty easy implementation
    • cos: Cosine
    • cosh: Hyperbolic cosine
    • divide: Division of two numbers
    • e: Euler's number
    • exp: Exponentiation to the base e
    • floor: Round fractions down
    • int: Integer part of a number
    • linear_scale_range: Linear transformation between two ranges
    • ln: Natural logarithm
    • log: Logarithm to a base
    • mod: Modulo
    • multiply: Multiplication of two numbers
    • nan - Not a Number - experimental
    • pi: Pi
    • power: Exponentiation
    • round: Round to a specified precision
    • sgn: Signum
    • sin: Sine
    • sinh: Hyperbolic sine
    • sqrt: Square root
    • subtract: Subtraction of two numbers
    • tan: Tangent
    • tanh: Hyperbolic tangent

    # Statistics / Indices

    • ndvi: Normalized Difference Vegetation Index
    • normalized_difference: Normalized difference
    • quantiles: Quantiles
    • sd: Standard deviation
    • variance: Variance

    # Logic

    • and: Logical AND
    • all: Are all of the values true?
    • any: Is at least one value true?
    • between: Between comparison
    • eq: Equal to comparison
    • gt: Greater than comparison
    • gte: Greater than or equal to comparison
    • if: If-Then-Else conditional
    • is_infinite: Value is an infinite number - experimental
    • is_nan: Value is not a number
    • is_nodata: Value is a no-data value
    • is_valid: Value is valid data
    • lt: Less than comparison
    • lte: Less than or equal to comparison
    • neq: Not equal to comparison
    • not: Inverting a boolean
    • or: Logical OR
    • xor: Logical XOR (exclusive or)
    - + diff --git a/federation/index.html b/federation/index.html index 4c541b71c..e24a03d61 100644 --- a/federation/index.html +++ b/federation/index.html @@ -8,7 +8,7 @@ - + @@ -246,6 +246,6 @@

    This is a short overview of the various options:

    • executor-memory: memory assigned to your workers, for the JVM that executes most predefined processes
    • executor-memoryOverhead: memory assigned on top of the JVM, for instance to run UDF's
    • executor-cores: number of CPUs per worker (executor). The number of parallel tasks is executor-cores/task-cpus
    • task-cpus: CPUs assigned to a single task. UDF's using libraries like Tensorflow can benefit from further parallellization on the level of individual tasks.
    • executor-request-cores: this settings is only relevant for Kubernetes based backends, allows to overcommit CPU
    • max-executors: the maximum number of workers assigned to your job. Maximum number of parallel tasks is max-executors*executor-cores/task-cpus. Increasing this can inflate your costs, while not necessarily improving performance!
    • driver-memory: memory assigned to the spark 'driver' JVM that controls execution of your batch job
    • driver-memoryOverhead: memory assigned to the spark 'driver' on top of JVM memory, for Python processes.
    • logging-threshold: the threshold for logging, set to 'info' by default, can be set to 'debug' to generate much more logging
    • udf-dependency-archives: an array of urls pointing to zip files with extra dependencies, see below

    # Custom UDF dependencies

    User defined functions often depend on (specific versions of) libraries or require small auxiliary data files. The UDF specifications do not yet define a standardized manner to provide this other than having the ability of selecting from a predefined set of 'runtimes' that than again have a predefined configuration.

    The Terrascope/Geotrellis backends solve this via the udf-dependency-archives job option, that allows to specify a list of zip files that should be included in the working directory of the UDF.

    This enables the following example workflow for Python UDF's:

    1. Create a Python 'virtualenv' with your dependencies
    2. Based on the 'site-packages' directory of the virtualenv, create a zip file with all dependencies
    3. Upload the zip to a url that can be reached by the backend.
    4. In job options, add "udf-dependency-archives": ['https://yourhost.com/myEnv.zip#tmp/mydir'] The #tmp/mydir suffix indicates where you want to unzip your files, relative to the working directory.
    5. In your UDF, before trying to import libraries, add your directory to the Python path: sys.path.insert(0, 'tmp/mydir')
    6. Now your libraries should be loaded before anything else!

    Known limitations:

    • Your dependencies need to be compatible with the Python version of the backend, currently 3.8.
    • Your dependencies need to be compatible with the OS of the backend, currently AlmaLinux 8.
    • The backend has a limited set of Python dependences that are preloaded, and cannot be changed, such as numpy.

    # Learning more

    The topic of resource optimization is a complex one, and here we just give a short summary. The goal of openEO is to hide most of these details from the user, but we realize that advanced users sometimes want to have a bit more insight, so in the spirit of being open, we give some hints.

    To learn more about these options, we point to the piece of code that handles this:

    https://github.com/Open-EO/openeo-geopyspark-driver/blob/faf5d5364a82e870e42efd2a8aee9742f305da9f/openeogeotrellis/backend.py#L1213

    Most memory related options are translated to Apache Spark configuration settings, which are documented here:

    https://spark.apache.org/docs/3.3.1/configuration.html#application-properties

    # Batch job results on Sentinel Hub

    If you are processing data and the underlying back-end is Sentinel Hub, the output extent of your batch job results is currently larger than your input extent because Sentinel Hub processes whole tiles (this may change in the future and the data will be cropped to your input extent).

    - + diff --git a/file-formats/index.html b/file-formats/index.html index 8ed761a3d..d2f2eb599 100644 --- a/file-formats/index.html +++ b/file-formats/index.html @@ -8,7 +8,7 @@ - + @@ -141,6 +141,6 @@

    Loading data...

    - + diff --git a/getting-started/editor/index.html b/getting-started/editor/index.html index 1d12a4d85..0caf1eefe 100644 --- a/getting-started/editor/index.html +++ b/getting-started/editor/index.html @@ -8,7 +8,7 @@ - + @@ -141,6 +141,6 @@

    # Get started with the openEO Platform Editor

    Note

    To access the processing infrastructure you need an openEO Platform account. Read all about the service offering including our free trial offer here (opens new window).

    The openEO Platform Editor (also called Web Editor) is a browser-based graphical user interface for openEO Platform. It allows to use the openEO Platform services without any coding experience. You can explore the service offerings such as data collections and processes, but also create and run custom processes on our infrastructure and then visualize the results. Result visualization is still a bit limited, but all other features of the Platform are supported.

    The Editor is available at https://editor.openeo.cloud (opens new window) and loads up in "Discovery mode" by default, which means you can explore the service offerings without being logged in. On the left side you can find the service offerings like data collections and processes and on the right side the process editor is shown.

    To enable more functionality, e.g. to compute something in a batch job, you have to login. Hover over the button with the text "Guest" in the top right corner and it will show you a "Login" button. Once you clicked on it, the login screen shows up. Here you can simply click the "Log in with EGI Check-in" button and the login procedure will start. See the chapters on the Free Trial for more details on the procedure to register and log in.

    After you've completed this the login procedure, the Editor shows up again and you'll notice that a new area in the lower middle part of the Editor aprears. This is the user workspace, where you can see all your stored data, e.g. batch jobs or uploaded files.

    If you need any more help you can always click the "Help" button in the top right area of the Editor and you'll start a guided tour through the Editor. If there are any additional questions, please contact us.

    - + diff --git a/getting-started/javascript/index.html b/getting-started/javascript/index.html index 7f58717f0..4140f3ebf 100644 --- a/getting-started/javascript/index.html +++ b/getting-started/javascript/index.html @@ -8,7 +8,7 @@ - + @@ -242,6 +242,6 @@

    There's also the method downloadResults to download the results directly. Unfortunately, you can only download files from a Node.js environment where file access to your local drive is possible. In a Browser environment, it is also an option to download the STAC Item or Collection for the results using the getResultsAsStac method and point a STAC client (opens new window) to it for downloading.

    # Additional Information

    - + diff --git a/getting-started/jupyterlab/index.html b/getting-started/jupyterlab/index.html index 926ac6442..b6ca9c4d0 100644 --- a/getting-started/jupyterlab/index.html +++ b/getting-started/jupyterlab/index.html @@ -8,7 +8,7 @@ - + @@ -142,6 +142,6 @@ Contact (opens new window)

    # Get started with openEO Platform in JupyterLab (Python)

    Note

    To access the processing infrastructure you need an openEO Platform account. Read all about the service offering including our free trial offer here (opens new window).

    A hosted JupyterLab environment for openEO Platform is available at lab.openeo.cloud (opens new window).

    It has the openEO Python client pre-installed, but it does not support running the R or JavaScript clients.

    You need to authenticate before you can use it:

    1. Click the "Sign in with EODC Identity Providers" button
    2. Now you need to select the "EGI" button on the right (instead of directly typing in your credentials on the left). It will start the EGI Authentication workflow for openEO Platform. For details check the documentation to join on our Free Trial page.
    3. After you have logged in via EGI, the "Server Options" appear and you are requested to "Select your desired stack". Please choose "openEO Platform Lab" and click "Start".
    4. You are logged in, now. The JupyterLab should be usable like a normal JupyterLab instance that has the openEO Python client and some other tools pre-installed.
    5. You can now open a new Python 3 Notebook and, for example, start to follow the general Python Getting Started Guide.

      Note

      You can skip the "Installation" section in the Getting Started Guide, but unfortunately you need to authenticate with the Python client again! We'll try to remove this annoyance in the future.

    Note

    If you require any additional packages to be installed into your JupyterLab environment please refrain from installing them via pip and install them via conda. Anaconda documentation (opens new window)

    Please also refer to the the official documentation for the openEO Python Client (opens new window) and JupyterLab (opens new window) for more details.

    - + diff --git a/getting-started/python/index.html b/getting-started/python/index.html index e3a0c1366..a11566b97 100644 --- a/getting-started/python/index.html +++ b/getting-started/python/index.html @@ -8,7 +8,7 @@ - + @@ -248,6 +248,6 @@

    When everything completes successfully, the processing result will be downloaded as a GeoTIFF file in a folder "output".

    TIP

    The official openEO Python Client documentation has more information on batch job management and downloading results (opens new window)

    # Additional Information

    Additional information and resources about the openEO Python Client Library:

    - + diff --git a/getting-started/python/shiny.html b/getting-started/python/shiny.html index da07977dd..e82824485 100644 --- a/getting-started/python/shiny.html +++ b/getting-started/python/shiny.html @@ -8,7 +8,7 @@ - + @@ -224,6 +224,6 @@ return fig

    As in a dashboard, one will probably work with rendering plots mainly, that should be resourceful enough to let anyone start playing with openEO and Shiny in python together. If there are any doubts, do not hesitate to reach the developers and consider even creating an issue in this repository. Please be aware of openEO backend related issues that do not concern this dashboard developers.

    - + diff --git a/getting-started/r/index.html b/getting-started/r/index.html index 746d9ff46..1b41456be 100644 --- a/getting-started/r/index.html +++ b/getting-started/r/index.html @@ -8,7 +8,7 @@ - + @@ -225,6 +225,6 @@ # download all the files into a folder on the file system download_results(job = job, folder = "/some/folder/on/filesystem")

    Note

    The printing behavior and the actual data structure might differ!

    - + diff --git a/index.html b/index.html index af0ef8dae..4fb129130 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ - + @@ -160,6 +160,6 @@

    You can also go back to the project website at openeo.cloud to find the less technical details.

    - + diff --git a/join/early_adopter.html b/join/early_adopter.html index 246787375..b7e22095b 100644 --- a/join/early_adopter.html +++ b/join/early_adopter.html @@ -8,7 +8,7 @@ - + @@ -177,6 +177,6 @@ https://openeo.cloud and then authenticate through EGI Check-in with the account used above.

    Tip

    For your own convenience, we advise you to always log in with the same identity provider you originally registered with. Otherwise, you run the risk of creating a separate new EGI account, which in turn will have to go through the openEO Platform virtual organization acceptance process again. It is possible to link multiple accounts from multiple identity providers to the same EGI account. However, this must be done before you use these accounts to log in, as explained in the EGI documentation (opens new window).

    See the getting started guides to find out more about how to use the clients for this:

    - + diff --git a/join/free_trial.html b/join/free_trial.html index 246787375..b7e22095b 100644 --- a/join/free_trial.html +++ b/join/free_trial.html @@ -8,7 +8,7 @@ - + @@ -177,6 +177,6 @@ https://openeo.cloud and then authenticate through EGI Check-in with the account used above.

    Tip

    For your own convenience, we advise you to always log in with the same identity provider you originally registered with. Otherwise, you run the risk of creating a separate new EGI account, which in turn will have to go through the openEO Platform virtual organization acceptance process again. It is possible to link multiple accounts from multiple identity providers to the same EGI account. However, this must be done before you use these accounts to log in, as explained in the EGI documentation (opens new window).

    See the getting started guides to find out more about how to use the clients for this:

    - + diff --git a/processes/index.html b/processes/index.html index 864c10cc1..5b27f57fe 100644 --- a/processes/index.html +++ b/processes/index.html @@ -8,7 +8,7 @@ - + @@ -141,6 +141,6 @@
    - + diff --git a/usecases/ard/index.html b/usecases/ard/index.html index 773070533..718b1afcd 100644 --- a/usecases/ard/index.html +++ b/usecases/ard/index.html @@ -8,7 +8,7 @@ - + @@ -146,6 +146,6 @@ There are also variants with a default parametrization that results in data that is compliant with CEOS CARD4L specifications (opens new window).

    We should note that these operations can be computationally expensive, so certainly affect overall processing time and cost of your final algorithm. Hence, make sure to make an informed decision when you decide to use these methods.

    Examples:

    - + diff --git a/usecases/ard/msi/index.html b/usecases/ard/msi/index.html index 2416ed069..0ad8040c5 100644 --- a/usecases/ard/msi/index.html +++ b/usecases/ard/msi/index.html @@ -8,7 +8,7 @@ - + @@ -212,6 +212,6 @@ var result = builder.save_result(datacube, 'GTiff'); var job = await connection.createJob(result, 'Atmospherically corrected Sentinel-2 MSI');
    - + diff --git a/usecases/ard/sar/index.html b/usecases/ard/sar/index.html index f2677b965..0ac0ea12d 100644 --- a/usecases/ard/sar/index.html +++ b/usecases/ard/sar/index.html @@ -8,7 +8,7 @@ - + @@ -187,6 +187,6 @@ var result = builder.save_result(datacube, 'GTiff'); var job = await connection.createJob(result, 'Backscatter for Sentinel-1');

    # Orfeo for other GRD collections (provided by VITO / TerraScope)

    When working with other GRD data, an implementation (opens new window) based on Orfeo Toolbox (opens new window) is used.

    The Orfeo implementation currently only supports sigma0 computation, and is not CARD4L compliant.

    - + diff --git a/usecases/crop-classification/index.html b/usecases/crop-classification/index.html index e5911546e..d54a95f85 100644 --- a/usecases/crop-classification/index.html +++ b/usecases/crop-classification/index.html @@ -8,7 +8,7 @@ - + @@ -247,6 +247,6 @@ clf_results = features.apply_dimension(code=udf_rf, runtime="Python", dimension="bands").rename_labels("bands",["pixel"])

    Note that if your labels are strings, you will have to map them to integers. You can then download the classification results and plot it. Congratulations!

    To see a fully working example, you can check out this Python notebook on rule-based classification (opens new window) or this Python notebook on classification using Random Forest (opens new window).

    We ran the code in that notebook for ~120 MGRS tiles to end up with a crop cover map for 5 countries in Europe, which looks like this:

    cropcover_5_countries

    - + diff --git a/usecases/forest-change-detection/index.html b/usecases/forest-change-detection/index.html index f2e498602..154a5b30f 100644 --- a/usecases/forest-change-detection/index.html +++ b/usecases/forest-change-detection/index.html @@ -8,7 +8,7 @@ - + @@ -171,6 +171,6 @@

    The difference between the training data and the predicted values following the seasonal model is a key information, which is used to perform the change detection with new data. Please have a look at the reference notebook (opens new window) for the complete pipeline.

    - + diff --git a/usecases/landcover/index.html b/usecases/landcover/index.html index 74648a3cf..512afeedc 100644 --- a/usecases/landcover/index.html +++ b/usecases/landcover/index.html @@ -8,7 +8,7 @@ - + @@ -191,6 +191,6 @@ inf_job = predicted.execute_batch(out_format="GTiff") inf_job.get_results().download_files(str(base_path / "prediction"))

    tile31UFS

    - + diff --git a/usecases/large-scale-processing/index.html b/usecases/large-scale-processing/index.html index 828551f55..038361932 100644 --- a/usecases/large-scale-processing/index.html +++ b/usecases/large-scale-processing/index.html @@ -8,7 +8,7 @@ - + @@ -170,6 +170,6 @@ your backend of choice. For instance, in a cloud environment with 16GB per machine and 4 cpu's, using slightly less than 4GB per worker is efficient as you can fit 4 parallel workers on a single VM, while requiring 6GB would fit only 2 workers and leave about 4GB unused.

    In our example, we used the Geotrellis backends, which has these execution options.

    # Starting map production

    The openEO Python client provides a useful tool to run multiple processing jobs in multiple backends:

    https://open-eo.github.io/openeo-python-client/cookbook/job_manager.html (opens new window)

    This class takes a GeoJSON corresponding to your tile grid and job properties per tiles, and triggers a function provided by you whenever a new job needs to be created. You can configure multiple backends, and set the number of parallel jobs per backend.

    This class also takes care of error handling, and can be considered more resilient compared to writing a simple loop yourself.

    A full example of how we use this can be found here (opens new window).

    This script uses a CSV file to track your jobs, and whenever it is interrupted it can simply resume from that CSV file, making it tolerant to failure.

    Tracking jobs by CSV

    # Errors during production

    It is expected to see jobs failing during production, which can be considered normal as long as the failure rate is not too high. We advice to quickly inspect error logs, and if no obvious reason for failure is found, a simple retry might be sufficient. In other cases it may be needed to increase memory. We also see a limited number of cases where for instance issues in the underlying product archive cause failures or artifacts. These are harder to resolve, and may require interaction with the backend to resove!

    - + diff --git a/usecases/no2-monitoring/index.html b/usecases/no2-monitoring/index.html index c7240a12c..e97391ee6 100644 --- a/usecases/no2-monitoring/index.html +++ b/usecases/no2-monitoring/index.html @@ -8,7 +8,7 @@ - + @@ -306,6 +306,6 @@

    # Result

    If you'd visualize the results of running the timeseries analysis for mean, min and max could results in such a chart:

    min/max/mean NO2 chart

    - +