PiperOrigin-RevId: 527762973
This commit is contained in:
Google Earth Engine Authors 2023-04-28 03:27:02 +00:00 committed by Ben Galin
parent 61295ff246
commit b06d9510af
21 changed files with 307 additions and 2871 deletions

12
LICENSE
View File

@ -199,3 +199,15 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
====================================================================================
The following applies to MochiKit, embedded in Closure in compiled JavaScript files.
====================================================================================
Copyright (c) 2005 Bob Ippolito. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,35 +0,0 @@
FROM gcr.io/cloud-datalab/datalab:latest
MAINTAINER Tyler Erickson <tylere@google.com>
# Install Earth Engine Python API dependencies.
RUN apt-get update \
&& apt-get install -y build-essential libssl-dev libffi-dev \
&& pip install cryptography \
&& apt-get purge -y build-essential libssl-dev libffi-dev \
dpkg-dev fakeroot libfakeroot:amd64 \
&& apt-get autoremove -y \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Install IPyLeaflet. The notebook library dependency is downgraded to
# version 4.4.1 but the datalab repo warns about potential version issues:
# https://github.com/googledatalab/datalab/blob/master/containers/base/Dockerfile#L139
RUN pip install ipyleaflet \
&& jupyter nbextension enable --py --sys-prefix ipyleaflet \
&& pip install notebook==4.4.1
# Install the Earth Engine Python API.
RUN pip install earthengine-api
# Install custom files in the container's /datalab directory.
RUN cp /datalab/run.sh /datalab/base-run.sh
ADD run.sh /datalab/
RUN chmod a+x /datalab/run.sh
# Add license information for the new libraries added.
ADD datalab-ee.txt /datalab/
RUN cat /datalab/datalab-ee.txt >> /datalab/web/static/datalab.txt \
&& rm /datalab/datalab-ee.txt
ADD license-ee.txt /datalab/
RUN cat /datalab/license-ee.txt >> /datalab/license.txt \
&& rm /datalab/license-ee.txt

View File

@ -1,71 +0,0 @@
## IPyLeaflet Library and Dependencies
- ajv (MIT) [https://github.com/epoberezkin/ajv]
- ansi_up (MIT) [https://github.com/drudru/ansi_up]
- backbone (MIT) [https://github.com/jashkenas/backbone]
- base64-js (MIT) [https://github.com/beatgammit/base64-js]
- buffer-shims (MIT) [https://github.com/calvinmetcalf/buffer-shims]
- co (MIT) [https://github.com/tj/co]
- codemirror (MIT) [https://github.com/codemirror/CodeMirror]
- core-util-is (MIT) [https://github.com/isaacs/core-util-is]
- d3-format (BSD-3-Clause) [https://github.com/d3/d3-format]
- dom-serializer (MIT) [https://github.com/cheeriojs/dom-renderer]
- domelementtype (BSD-2-Clause) [https://github.com/FB55/domelementtype]
- domhandler (BSD-2-Clause) [https://github.com/fb55/DomHandler]
- domutils (BSD-2-Clause) [https://github.com/FB55/domutils]
- entities (BSD-like) [https://github.com/fb55/node-entities]
- font-awesome ((OFL-1.1 AND MIT)) [https://github.com/FortAwesome/Font-Awesome]
- htmlparser2 (MIT) [https://github.com/fb55/htmlparser2]
- inherits (ISC) [https://github.com/isaacs/inherits]
- ipyleaflet (MIT) [https://pypi.python.org/pypi/ipyleaflet]
- isarray (MIT) [https://github.com/juliangruber/isarray]
- jquery-ui (MIT) [https://github.com/jquery/jquery-ui]
- jquery (MIT) [https://github.com/jquery/jquery]
- json-stable-stringify (MIT) [https://github.com/substack/json-stable-stringify]
- jsonify (Public Domain) [https://github.com/substack/jsonify]
- jupyter-js-widgets (BSD-3-Clause) [https://github.com/ipython/ipywidgets]
- jupyter-js-widgets-alpha.0 (BSD-3-Clause) [https://github.com/jupyter-widgets/ipywidgets]
- jupyter-leaflet (MIT) [https://github.com/ellisonbg/ipyleaflet]
- jupyter-widgets-schema (BSD-3-Clause) [https://github.com/ipython/ipywidgets]
- jupyter-widgets-schema-beta.2 (BSD-3-Clause) [https://github.com/jupyter-widgets/ipywidgets]
- jupyterlab (BSD-3-Clause) [https://github.com/jupyterlab/jupyterlab]
- leaflet-draw (MIT) [https://github.com/Leaflet/Leaflet.draw]
- leaflet (BSD-2-Clause) [https://github.com/Leaflet/Leaflet]
- lolex (BSD-3-Clause) [https://github.com/sinonjs/lolex]
- marked (MIT) [https://github.com/chjj/marked]
- minimist (MIT) [https://github.com/substack/minimist]
- moment (MIT) [https://github.com/moment/moment]
- path-posix (ISC) [https://github.com/jden/node-path-posix]
- phosphor (BSD-3-Clause) [https://github.com/phosphorjs/phosphor]
- process-nextick-args (MIT) [https://github.com/calvinmetcalf/process-nextick-args]
- punycode (MIT) [https://github.com/bestiejs/punycode.js]
- querystring (MIT) [https://github.com/Gozala/querystring]
- querystringify (MIT) [https://github.com/unshiftio/querystringify]
- readable-stream (MIT) [https://github.com/nodejs/readable-stream]
- regexp-quote (MIT) [https://github.com/dbrock/node-regexp-quote]
- requires-port (MIT) [https://github.com/unshiftio/requires-port]
- safe-buffer (MIT) [https://github.com/feross/safe-buffer]
- sanitize-html (MIT) [https://github.com/punkave/sanitize-html]
- scriptjs (MIT) [https://github.com/ded/script.js]
- semver (ISC) [https://github.com/npm/node-semver]
- string_decoder (MIT) [https://github.com/rvagg/string_decoder]
- types (MIT) [https://wwwhub.com/DefinitelyTyped/DefinitelyTyped]
- underscore (MIT) [https://github.com/jashkenas/underscore]
- url-join (MIT) [https://github.com/jfromaniello/url-join]
- url-parse (MIT) [https://github.com/unshiftio/url-parse]
- url (MIT) [https://github.com/defunctzombie/node-url]
- util-deprecate (MIT) [https://github.com/TooTallNate/util-deprecate]
- xtend (MIT) [https://github.com/Raynos/xtend]
## Earth Engine API Library and Dependencies
- asn1crypto (MIT) [https://pypi.python.org/pypi/asn1crypto]
- cffi (MIT) [https://pypi.python.org/pypi/cffi]
- cryptography (BSD or Apache License, Version 2.0) [https://pypi.python.org/pypi/cryptography]
- earthengine-api (Apache License, Version 2.0) [https://pypi.python.org/pypi/earthengine-api]
- idna (BSD-like) [https://pypi.python.org/pypi/idna]
- ipaddress (PSF) [https://pypi.python.org/pypi/ipaddress]
- pbr (Apache License, Version 2.0) [https://pypi.python.org/pypi/pbr]
- pycparser (BSD) [https://pypi.python.org/pypi/pycparser]
- pyOpenSSL (Apache License, Version 2.0) [https://pypi.python.org/pypi/pyOpenSSL]
- setuptools (MIT) [https://pypi.python.org/pypi/setuptools]

File diff suppressed because it is too large Load Diff

View File

@ -1,31 +0,0 @@
#!/bin/bash
# Copyright 2017 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
TMPDIR=temp-repo
mkdir -p /content/datalab
cd /content/datalab
if [[ ! -d "docs-earthengine" ]]; then
echo "Adding Earth Engine docs to the Datalab container..."
# Clone the repository into a temporary directory.
git clone https://github.com/google/earthengine-api $TMPDIR
# Copy the IPython Notebook examples.
cp -R $TMPDIR/python/examples/ipynb/ docs-earthengine/
# Delete the temporary directory.
rm -fr $TMPDIR
fi
source /datalab/base-run.sh

View File

@ -45,7 +45,7 @@ var z=function(a,b,c){a||Ia("",null,b,Array.prototype.slice.call(arguments,2))},
g){var l=g[f];b.call(void 0,l,f,a)&&(d[e++]=l)}return d},Ta=Array.prototype.map?function(a,b,c){z(null!=a.length);return Array.prototype.map.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=Array(d),g="string"===typeof a?a.split(""):a,f=0;f<d;f++)f in g&&(e[f]=b.call(c,g[f],f,a));return e},Ua=Array.prototype.some?function(a,b){z(null!=a.length);return Array.prototype.some.call(a,b,void 0)}:function(a,b){for(var c=a.length,d="string"===typeof a?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],
e,a))return!0;return!1},Va=Array.prototype.every?function(a,b){z(null!=a.length);return Array.prototype.every.call(a,b,void 0)}:function(a,b){for(var c=a.length,d="string"===typeof a?a.split(""):a,e=0;e<c;e++)if(e in d&&!b.call(void 0,d[e],e,a))return!1;return!0};function Wa(a,b){var c=0;Ra(a,function(d,e,g){b.call(void 0,d,e,g)&&++c});return c}function Xa(a,b){return 0<=Pa(a,b)}function Ya(a,b){b=Pa(a,b);var c;(c=0<=b)&&Za(a,b);return c}
function Za(a,b){z(null!=a.length);Array.prototype.splice.call(a,b,1)}function $a(a){var b=a.length;if(0<b){for(var c=Array(b),d=0;d<b;d++)c[d]=a[d];return c}return[]}function ab(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(ua(d)){var e=a.length||0,g=d.length||0;a.length=e+g;for(var f=0;f<g;f++)a[e+f]=d[f]}else a.push(d)}}function bb(a,b,c){z(null!=a.length);return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)}
function cb(a){var b=[];if(0>a-0)return[];for(var c=0;c<a;c+=1)b.push(c);return b}function db(a){for(var b=[],c=0;c<arguments.length;c++){var d=arguments[c];if(Array.isArray(d))for(var e=0;e<d.length;e+=8192){var g=bb(d,e,e+8192);g=db.apply(null,g);for(var f=0;f<g.length;f++)b.push(g[f])}else b.push(d)}return b};var eb=Object.freeze||function(a){return a};var fb=function(){if(!r.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{r.addEventListener("test",function(){},b),r.removeEventListener("test",function(){},b)}catch(c){}return a}();var gb,hb;a:{for(var ib=["CLOSURE_FLAGS"],jb=r,kb=0;kb<ib.length;kb++)if(jb=jb[ib[kb]],null==jb){hb=null;break a}hb=jb}var lb=hb&&hb[610401301];gb=null!=lb?lb:!1;function mb(){var a=r.navigator;return a&&(a=a.userAgent)?a:""}var nb,ob=r.navigator;nb=ob?ob.userAgentData||null:null;function pb(a){return-1!=mb().indexOf(a)};function qb(){return gb&&nb&&0<nb.brands.length?!1:pb("Trident")||pb("MSIE")};var rb=function(a){rb[" "](a);return a};rb[" "]=function(){};var sb=qb(),tb=pb("Gecko")&&!(-1!=mb().toLowerCase().indexOf("webkit")&&!pb("Edge"))&&!(pb("Trident")||pb("MSIE"))&&!pb("Edge"),ub=-1!=mb().toLowerCase().indexOf("webkit")&&!pb("Edge");var wb=function(a,b){Ea.call(this,a?a.type:"");this.relatedTarget=this.currentTarget=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=this.offsetY=this.offsetX=0;this.key="";this.charCode=this.keyCode=0;this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.La=null;if(a){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.currentTarget=
function cb(a){var b=[];if(0>a-0)return[];for(var c=0;c<a;c+=1)b.push(c);return b}function db(a){for(var b=[],c=0;c<arguments.length;c++){var d=arguments[c];if(Array.isArray(d))for(var e=0;e<d.length;e+=8192){var g=bb(d,e,e+8192);g=db.apply(null,g);for(var f=0;f<g.length;f++)b.push(g[f])}else b.push(d)}return b};var eb=Object.freeze||function(a){return a};var fb=function(){if(!r.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{var c=function(){};r.addEventListener("test",c,b);r.removeEventListener("test",c,b)}catch(d){}return a}();var gb,hb;a:{for(var ib=["CLOSURE_FLAGS"],jb=r,kb=0;kb<ib.length;kb++)if(jb=jb[ib[kb]],null==jb){hb=null;break a}hb=jb}var lb=hb&&hb[610401301];gb=null!=lb?lb:!1;function mb(){var a=r.navigator;return a&&(a=a.userAgent)?a:""}var nb,ob=r.navigator;nb=ob?ob.userAgentData||null:null;function pb(a){return-1!=mb().indexOf(a)};function qb(){return gb&&nb&&0<nb.brands.length?!1:pb("Trident")||pb("MSIE")};var rb=function(a){rb[" "](a);return a};rb[" "]=function(){};var sb=qb(),tb=pb("Gecko")&&!(-1!=mb().toLowerCase().indexOf("webkit")&&!pb("Edge"))&&!(pb("Trident")||pb("MSIE"))&&!pb("Edge"),ub=-1!=mb().toLowerCase().indexOf("webkit")&&!pb("Edge");var wb=function(a,b){Ea.call(this,a?a.type:"");this.relatedTarget=this.currentTarget=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=this.offsetY=this.offsetX=0;this.key="";this.charCode=this.keyCode=0;this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.La=null;if(a){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.currentTarget=
b;if(b=a.relatedTarget){if(tb){a:{try{rb(b.nodeName);var e=!0;break a}catch(g){}e=!1}e||(b=null)}}else"mouseover"==c?b=a.fromElement:"mouseout"==c&&(b=a.toElement);this.relatedTarget=b;d?(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0):(this.offsetX=ub||void 0!==a.offsetX?a.offsetX:a.layerX,this.offsetY=ub||void 0!==a.offsetY?a.offsetY:a.layerY,this.clientX=void 0!==a.clientX?a.clientX:a.pageX,
this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.keyCode=a.keyCode||0;this.key=a.key||"";this.charCode=a.charCode||("keypress"==c?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.pointerId=a.pointerId||0;this.pointerType="string"===typeof a.pointerType?a.pointerType:vb[a.pointerType]||"";this.state=a.state;this.La=a;a.defaultPrevented&&wb.L.preventDefault.call(this)}};
x(wb,Ea);var vb=eb({2:"touch",3:"pen",4:"mouse"});wb.prototype.stopPropagation=function(){wb.L.stopPropagation.call(this);this.La.stopPropagation?this.La.stopPropagation():this.La.cancelBubble=!0};wb.prototype.preventDefault=function(){wb.L.preventDefault.call(this);var a=this.La;a.preventDefault?a.preventDefault():a.returnValue=!1};var xb="closure_listenable_"+(1E6*Math.random()|0),yb=function(a){return!(!a||!a[xb])};var zb=0;var Ab=function(a,b,c,d,e){this.listener=a;this.proxy=null;this.src=b;this.type=c;this.capture=!!d;this.mb=e;this.key=++zb;this.hd=this.xd=!1},Bb=function(a){a.hd=!0;a.listener=null;a.proxy=null;a.src=null;a.mb=null};function Cb(a,b,c){for(var d in a)b.call(c,a[d],d,a)}function Db(a,b){var c={},d;for(d in a)b.call(void 0,a[d],d,a)&&(c[d]=a[d]);return c}function Eb(a,b,c){var d={},e;for(e in a)d[e]=b.call(c,a[e],e,a);return d}function Fb(a,b){for(var c in a)if(b.call(void 0,a[c],c,a))return!0;return!1}function Gb(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b}function Hb(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b}function Jb(a,b){for(var c in a)if(a[c]==b)return!0;return!1}
@ -455,7 +455,7 @@ Tc(q,f[m]))});return b?b(l):l};return this.callback?(qj(d,null,function(f,l){ret
sj.prototype.send=function(a,b){var c=[a.B+" "+a.path+" HTTP/1.1"];c.push("Content-Type: application/json; charset=utf-8");var d=uj();null!=d&&c.push("Authorization: "+d);a=a.body?JSON.stringify(a.body):"";return[c.join("\r\n")+"\r\n\r\n"+a,b]};
var vj=function(a,b,c){a=n(b.split("--"+a.split("; boundary=")[1]));for(b=a.next();!b.done;b=a.next())if(b=b.value.split("\r\n\r\n"),!(3>b.length)){var d=b[0].match(/\r\nContent-ID: <response-([^>]*)>/)[1],e=Number(b[1].match(/^HTTP\S*\s(\d+)\s/)[1]);c(d,e,b.slice(2).join("\r\n\r\n"))}},oj=function(){var a=wj.replace(/\/api$/,"");return"window"in r&&!a.match(/^https?:\/\/content-/)?a.replace(/^(https?:\/\/)(.*\.googleapis\.com)$/,"$1content-$2"):a},yj=function(a,b,c){var d=[];a&&(d=d.concat(xj));
b&&d.push("https://www.googleapis.com/auth/devstorage.read_write");a=d=d.concat(c);c=b=0;for(var e={};c<a.length;){var g=a[c++],f=t(g)?"o"+ya(g):(typeof g).charAt(0)+g;Object.prototype.hasOwnProperty.call(e,f)||(e[f]=!0,a[b++]=g)}a.length=b;return d},Ej=function(a,b,c){zj&&Aj&&zj({client_id:String(Aj),immediate:!0,scope:Bj.join(" ")},function(d){if("immediate_failed"==d.error&&c)c();else if("window"in r)try{Cj(function(){try{r.gapi.auth.setToken(d),Dj(a,b,d)}catch(e){b(e.toString())}})}catch(e){b(e.toString())}else Dj(a,
b,d)})},uj=function(){Fj&&0<=Date.now()-Fj&&Gj();return Hj},Gj=function(){Fj=Hj=null},lj=function(a,b,c,d){null!=a?wj=a:Ij||(wj="https://earthengine.googleapis.com/api");null!=b?Jj=b:Ij||(Jj="https://earthengine.googleapis.com");void 0!==c&&(Kj=c);kj=null!=d?d:kj||"earthengine-legacy";Ij=!0},qj=function(a,b,c,d,e,g){lj();var f=Lj,l="application/x-www-form-urlencoded";e&&(l="application/json",d&&d.startsWith("multipart")&&(l=d,d="POST"));d=d||"POST";l={"Content-Type":l};var m="0.1.351";"0.1.351"===
b,d)})},uj=function(){Fj&&0<=Date.now()-Fj&&Gj();return Hj},Gj=function(){Fj=Hj=null},lj=function(a,b,c,d){null!=a?wj=a:Ij||(wj="https://earthengine.googleapis.com/api");null!=b?Jj=b:Ij||(Jj="https://earthengine.googleapis.com");void 0!==c&&(Kj=c);kj=null!=d?d:kj||"earthengine-legacy";Ij=!0},qj=function(a,b,c,d,e,g){lj();var f=Lj,l="application/x-www-form-urlencoded";e&&(l="application/json",d&&d.startsWith("multipart")&&(l=d,d="POST"));d=d||"POST";l={"Content-Type":l};var m="0.1.352";"0.1.352"===
m&&(m="latest");l["x-goog-api-client"]="ee-js/"+m;m=uj();if(null!=m)l.Authorization=m;else if(c&&zj&&Aj)return Ej(function(){Mj(f,function(){qj(a,b,c,d)})}),null;b=b?b.clone():new Ed;null!=Nj&&b.add("key",Nj);f&&(l["X-Earth-Engine-Computation-Profiling"]="1");kj&&"earthengine-legacy"!==kj&&(l["X-Goog-User-Project"]=kj);b=Oj(b,a);null!=Kj&&(l["X-XSRF-Token"]=Kj);null!=Pj&&(l["X-Earth-Engine-App-ID-Token"]=Pj);m=e||null;var q=b?b.toString():"";"POST"===d&&void 0===e?m=q:/^[\s\xa0]*$/.test(q)||(a+=-1!=
a.indexOf("?")?"&":"?",a+=q);e=a.startsWith("/")?wj+a:a;if(c)return Qj.push(Rj(e,c,d,m,l,g)),Sj.lf(),null;q=function(D,Q){this.setRequestHeader&&this.setRequestHeader(Q,D)};var v=0;for(g=null!=g?g:5;;){var B=Xi(Vi);B.open(d,e,!1);Cb(l,q,B);B.send(m);if(429!=B.status||v>g)break;v++}return Tj(B.status,function(D){try{return B.getResponseHeader(D)}catch(Q){return null}},B.responseText,f,void 0,e,d)},Rj=function(a,b,c,d,e,g){var f=0,l={url:a,method:c,content:d,headers:e},m=Lj,q=null!=g?g:10;l.callback=
function(v){v=v.target;if(429==v.getStatus()&&f<q)return f++,setTimeout(function(){Qj.push(l);Sj.lf()},Math.min(12E4,1E3*Math.pow(2,f))),null;var B=Tj,D=v.getStatus(),Q=u(v.getResponseHeader,v);try{var Y=v.s?v.s.responseText:""}catch(T){Qi(v.ia,"Can not get responseText: "+T.message),Y=""}return B(D,Q,Y,m,b,a,c)};return l},Mj=function(a,b){var c=Lj;try{Lj=a,b.call(void 0)}finally{Lj=c}},Tj=function(a,b,c,d,e,g,f){var l=d?b("X-Earth-Engine-Computation-Profile"):"";l&&d&&d(l);var m=function(Y){try{var T=
@ -513,7 +513,7 @@ jl(a);b.pa=d;break;case "ASSET":b.ua=new Df({Ja:kl(a)});break;case "FEATURE_VIEW
a.workloadTag);return b};function J(a){return null!=a?String(a):null}function K(a){return null!=a?Number(a):null}
var hl=function(a){var b="DRIVE";if(null==a)return b;null!=a.outputBucket||null!=a.outputPrefix?b="GOOGLE_CLOUD_STORAGE":null!=a.assetId?b="ASSET":null!=a.mapName&&(b="FEATURE_VIEW");null!=a.table&&(b="BIGQUERY");return b},ol=function(a){var b=new gg({Ve:!!a.tfrecordCompressed,Zb:J(a.tfrecordMaxFileSize),fg:!!a.tfrecordSequenceData,Te:!!a.tfrecordCollapseBands,Mf:K(a.tfrecordMaskedThreshold),defaultValue:K(a.tfrecordDefaultValue),bb:nl(a.tfrecordPatchDimensions),If:nl(a.tfrecordKernelSize),he:null});
a=a.tfrecordTensorDepths;if(null!=a)if(t(a)){var c={};Cb(a,function(d,e){if("string"!==typeof e||"number"!==typeof d)throw Error('"tensorDepths" option must be an object of type Object<string, number>');c[e]=d});b.he=c}else throw Error('"tensorDepths" option needs to have the form Object<string, number>.');return b},pl=function(a,b){var c=new yf({ka:null,na:null,Hd:null,ie:null,F:dk(a.fileFormat)});if("GEO_TIFF"===c.F){if(a.fileDimensions&&a.tiffFileDimensions)throw Error('Export cannot set both "fileDimensions" and "tiffFileDimensions".');
var d=a.tiffShardSize||a.shardSize;var e=!!a.tiffCloudOptimized;var g=!(!a.skipEmptyTiles&&!a.tiffSkipEmptyFiles),f=nl(a.fileDimensions||a.tiffFileDimensions);d=K(d);var l=a.noData;l=null!=l?new Zf({mf:Number(l)}):null;e=new Yf({Se:e,lg:g,bb:f,tileSize:d,Of:l});c.Hd=e}else"TF_RECORD_IMAGE"===c.F&&(c.ie=ol(a));"GOOGLE_CLOUD_STORAGE"===b?c.ka=il(a):c.na=jl(a);return c},ql=function(a,b){var c=new If({ka:null,na:null,F:"MP4"});"GOOGLE_CLOUD_STORAGE"===b?c.ka=il(a):c.na=jl(a);return c},rl=function(a){var b,
var d=a.tiffShardSize||a.shardSize;var e=!!a.tiffCloudOptimized;var g=!(!a.skipEmptyTiles&&!a.tiffSkipEmptyFiles),f=nl(a.fileDimensions||a.tiffFileDimensions);d=K(d);var l=a.tiffNoData;l=null!=l?new Zf({mf:Number(l)}):null;e=new Yf({Se:e,lg:g,bb:f,tileSize:d,Of:l});c.Hd=e}else"TF_RECORD_IMAGE"===c.F&&(c.ie=ol(a));"GOOGLE_CLOUD_STORAGE"===b?c.ka=il(a):c.na=jl(a);return c},ql=function(a,b){var c=new If({ka:null,na:null,F:"MP4"});"GOOGLE_CLOUD_STORAGE"===b?c.ka=il(a):c.na=jl(a);return c},rl=function(a){var b,
c,d,e,g=K(null!=(b=a.endZoom)?b:a.maxZoom);b=K(null!=(c=a.startZoom)?c:a.minZoom);c=K(a.scale);var f=!(null!=(d=a.skipEmpty)?!d:!a.skipEmptyTiles);d=J(a.mapsApiKey);var l=nl(null!=(e=a.dimensions)?e:a.tileDimensions);e=K(a.stride);var m=K(a.minTimeMachineZoomSubset);a=K(a.maxTimeMachineZoomSubset);a=null==m&&null==a?null:new Ng({start:null!=m?m:0,end:a});return new Bf({df:g,mg:b,scale:c,kg:f,Hf:d,dimensions:l,ng:e,Fg:a})},nl=function(a){if(null==a)return null;var b=new $f({height:0,width:0});"string"===
typeof a&&(-1!==a.indexOf("x")?a=a.split("x").map(Number):-1!==a.indexOf(",")&&(a=a.split(",").map(Number)));if(Array.isArray(a))if(2===a.length)b.height=a[0],b.width=a[1];else if(1===a.length)b.height=a[0],b.width=a[0];else throw Error("Unable to construct grid from dimensions: "+a);else if("number"!==typeof a||isNaN(a))if(t(a)&&null!=a.height&&null!=a.width)b.height=a.height,b.width=a.width;else throw Error("Unable to construct grid from dimensions: "+a);else b.height=a,b.width=a;return b},il=function(a){var b=
null;null!=a.writePublicTiles&&(b=a.writePublicTiles?"PUBLIC":"DEFAULT_OBJECT_ACL");return new Xe({oc:J(a.outputBucket),ea:J(a.outputPrefix),pc:a.bucketCorsUris||null,permissions:b})},jl=function(a){return new jf({pf:J(a.driveFolder),ea:J(a.driveFileNamePrefix)})},kl=function(a){return new Ve({name:pk(a.assetId)})},ll=function(a){if(!a)return null;var b=a;"string"===typeof a&&(a=a.split(","));if(Array.isArray(a))return new Ig({Wf:(a||[]).map(sl)});throw Error("Unable to build ranking rule from rules: "+
@ -639,7 +639,7 @@ delete e.crsTransform);break;case "EXPORT_TILES":b=Ko(e,b);e=b.fileFormat;null==
a&&(a="CSV");a=a.toUpperCase();switch(a){case "CSV":a="CSV";break;case "JSON":case "GEOJSON":case "GEO_JSON":a="GEO_JSON";break;case "KML":a="KML";break;case "KMZ":a="KMZ";break;case "SHP":a="SHP";break;case "TF_RECORD":case "TF_RECORD_TABLE":case "TFRECORD":a="TF_RECORD_TABLE";break;default:throw Error("Invalid file format "+a+". Supported formats are: 'CSV', 'GeoJSON', 'KML', 'KMZ', 'SHP', and 'TFRecord'.");}e.fileFormat=a;e=Ko(e,b);break;case "EXPORT_VIDEO":e=Lo(e);e=Ko(e,b);null!=e.crsTransform&&
(e.crs_transform=e.crsTransform,delete e.crsTransform);break;case "EXPORT_VIDEO_MAP":e=Lo(e);e.version=e.version||"V1";e.stride=e.stride||1;e.tileDimensions={width:e.tileWidth||256,height:e.tileHeight||256};e=Ko(e,b);break;case "EXPORT_CLASSIFIER":e=Ko(e,b);break;default:throw Error("Unknown export type: "+e.type);}if(d&&null!=e.region){d=e;b=e.region;if(b instanceof S)b=b.ke();else if("string"===typeof b)try{b=Oa(JSON.parse(b))}catch(g){throw Error("Invalid format for region property. Region must be GeoJSON LinearRing or Polygon specified as actual coordinates or serialized as a string. See Export documentation.");
}if(!(t(b)&&"type"in b))try{new yn(b)}catch(g){try{new Bn(b)}catch(f){throw Error("Invalid format for region property. Region must be GeoJSON LinearRing or Polygon specified as actual coordinates or serialized as a string. See Export documentation.");}}b=JSON.stringify(b);d.region=b}return e},Ko=function(a,b){switch(b){case "GOOGLE_CLOUD_STORAGE":a.outputBucket=a.bucket||"";a.outputPrefix=a.fileNamePrefix||a.path||"";delete a.fileNamePrefix;delete a.path;delete a.bucket;break;case "ASSET":a.assetId=
a.assetId||"";break;case "FEATURE_VIEW":a.mapName=a.mapName||"";break;case "BIGQUERY":a.table=a.table||"";break;default:b=ta(a.folder);if(!Xa(["string","undefined"],b))throw Error('Error: toDrive "folder" parameter must be a string, but is of type '+b+".");a.driveFolder=a.folder||"";a.driveFileNamePrefix=a.fileNamePrefix||"";delete a.folder;delete a.fileNamePrefix}return a},Mo={GEO_TIFF:["cloudOptimized","fileDimensions","shardSize"],TF_RECORD_IMAGE:"patchDimensions kernelSize compressed maxFileSize defaultValue tensorDepths sequenceData collapseBands maskedThreshold".split(" ")},
a.assetId||"";break;case "FEATURE_VIEW":a.mapName=a.mapName||"";break;case "BIGQUERY":a.table=a.table||"";break;default:b=ta(a.folder);if(!Xa(["string","undefined"],b))throw Error('Error: toDrive "folder" parameter must be a string, but is of type '+b+".");a.driveFolder=a.folder||"";a.driveFileNamePrefix=a.fileNamePrefix||"";delete a.folder;delete a.fileNamePrefix}return a},Mo={GEO_TIFF:["cloudOptimized","fileDimensions","noData","shardSize"],TF_RECORD_IMAGE:"patchDimensions kernelSize compressed maxFileSize defaultValue tensorDepths sequenceData collapseBands maskedThreshold".split(" ")},
No={GEO_TIFF:"tiff",TF_RECORD_IMAGE:"tfrecord"},Lo=function(a){a.videoOptions=a.framesPerSecond||5;a.maxFrames=a.maxFrames||1E3;a.maxPixels=a.maxPixels||1E8;var b=a.fileFormat;null==b&&(b="MP4");b=b.toUpperCase();switch(b){case "MP4":b="MP4";break;case "GIF":case "JIF":b="GIF";break;case "VP9":case "WEBM":b="VP9";break;default:throw Error("Invalid file format "+b+". Supported formats are: 'MP4', 'GIF', and 'WEBM'.");}a.fileFormat=b;return a},Jo=function(a,b){var c=a.formatOptions;if(null==c)return{};
if(Object.keys(a).some(function(m){return null!==c&&m in c}))throw Error("Parameter specified at least twice: once in config, and once in config format options.");a=No[b];for(var d=Mo[b],e={},g=n(Object.entries(c)),f=g.next();!f.done;f=g.next()){var l=n(f.value);f=l.next().value;l=l.next().value;if(!Xa(d,f))throw Error('"'+f+'" is not a valid option, the image format "'+b+'""may have the following options: '+(d.join(", ")+'".'));e[a+f[0].toUpperCase()+f.substring(1)]=Array.isArray(l)?l.join():l}return e},
Io=["image","collection","classifier"];var Oo=function(a){if(!(this instanceof Oo))return Jm(Oo,arguments);if(a instanceof Oo)return a;Po();if("number"===typeof a)M.call(this,null,null),this.Zc=a;else if(a instanceof M)M.call(this,a.I,a.args,a.T),this.Zc=null;else throw Error("Invalid argument specified for ee.Number(): "+a);};x(Oo,M);w("ee.Number",Oo);var Qo=!1,Po=function(){Qo||(dn(Oo,"Number","Number"),Qo=!0)};Oo.prototype.encode=function(a){return"number"===typeof this.Zc?this.Zc:Oo.L.encode.call(this,a)};
@ -701,17 +701,18 @@ h.Al=function(){if(!this.mc){var a=u(function(d){this.mc||(dq(this.ga,this.fa,d)
h.ga=null;h.Si=null;h.La=null;h.ni=null;var Cq=["load","abort","error"],Dq=function(){y.call(this);this.Ga=!1};p(Dq,y);Dq.prototype.setActive=function(a){this.Ga=a};Dq.prototype.isActive=function(){return this.Ga};var yq=function(a,b){tq.call(this,a,b)};p(yq,tq);yq.prototype.Xe=function(){return new Dq};yq.prototype.Ad=function(a){a.Ta()};yq.prototype.Pf=function(a){return!a.Ua&&!a.isActive()};var Eq=function(a,b,c,d,e){Kc.call(this,a,b,c,d,e);this.minZoom=d.minZoom||0;this.maxZoom=d.maxZoom||20;if(!window.google||!window.google.maps)throw Error("Google Maps API hasn't been initialized.");this.tileSize=d.tileSize||new google.maps.Size(256,256);this.name=d.name;this.wg=new Fc;this.Qf=1;this.wa=e||null};p(Eq,Kc);h=Eq.prototype;h.Ne=function(a){return Zb(this,"tileevent",a)};h.ag=function(a){gc(a)};
h.getTile=function(a,b,c){if(b<this.minZoom||0>a.y||a.y>=1<<b)return a=c.createElement("IMG"),a.style.width="0px",a.style.height="0px",a;b=Lc(this,a,b);a=[this.url,b].join("/")+"?token="+this.token;this.wa&&this.wa.isEnabled()&&(a+="&profiling=1");b=[b,this.Bb,this.token].join("/");this.Bb+=1;c=nh("DIV",{id:b});var d=(new Date).getTime()/1E3;this.Db.push(b);ul(zq).send(b,a,d,u(this.al,this,c,b));Bp(this);return c};h.Qc=function(){return this.Db.length};
h.releaseTile=function(a){ul(zq).abort(a.id);if(void 0!==a.firstElementChild)var b=a.firstElementChild;else for(b=a.firstChild;b&&1!=b.nodeType;)b=b.nextSibling;this.wg.remove(b);""!==a.id&&(this.vg.remove(a.id),this.wa&&this.wa.sl(a.id))};h.setOpacity=function(a){this.Qf=a;var b=this.wg.Fa();rc(b,function(c){Mp(c,a)})};
h.al=function(a,b,c,d){"error"==c.type?(Ya(this.Db,b),this.vg.add(b),this.dispatchEvent(c)):(Ya(this.Db,b),c.target&&"load"==c.type&&(c=c.target,this.wg.add(c),1!=this.Qf&&Mp(c,this.Qf),a.appendChild(c)),Bp(this));this.wa&&null!==d&&this.wa.Ok(b,d)};w("ee.MapLayerOverlay",Eq);Eq.prototype.removeTileCallback=Eq.prototype.ag;Eq.prototype.addTileCallback=Eq.prototype.Ne;Eq.prototype.getTile=Eq.prototype.getTile;Eq.prototype.setOpacity=Eq.prototype.setOpacity;Eq.prototype.releaseTile=Eq.prototype.releaseTile;(function(){var a={},b="ee.ApiFunction.lookup ee.ApiFunction._apply ee.ApiFunction._call ee.batch.Export.table.toDrive ee.batch.Export.classifier.toAsset ee.batch.Export.table.toFeatureView ee.batch.Export.video.toDrive ee.batch.Export.video.toCloudStorage ee.batch.Export.image.toDrive ee.batch.Export.table.toAsset ee.batch.Export.table.toCloudStorage ee.batch.Export.map.toCloudStorage ee.batch.Export.image.toAsset ee.batch.Export.videoMap.toCloudStorage ee.batch.Export.image.toCloudStorage ee.Collection.prototype.map ee.Collection.prototype.filter ee.Collection.prototype.filterMetadata ee.Collection.prototype.iterate ee.Collection.prototype.filterDate ee.Collection.prototype.filterBounds ee.Collection.prototype.limit ee.Collection.prototype.sort ee.ComputedObject.prototype.aside ee.ComputedObject.prototype.evaluate ee.ComputedObject.prototype.getInfo ee.ComputedObject.prototype.serialize ee.data.makeThumbUrl ee.data.createAssetHome ee.data.getTaskListWithLimit ee.data.getAssetRoots ee.data.getFilmstripThumbId ee.data.getVideoThumbId ee.data.getInfo ee.data.resetWorkloadTag ee.data.getThumbId ee.data.updateAsset ee.data.authenticate ee.data.getAsset ee.data.computeValue ee.data.listOperations ee.data.cancelOperation ee.data.startTableIngestion ee.data.startIngestion ee.data.getDownloadId ee.data.authenticateViaPopup ee.data.listAssets ee.data.getList ee.data.listFeatures ee.data.authenticateViaPrivateKey ee.data.getFeatureViewTilesKey ee.data.getOperation ee.data.cancelTask ee.data.listImages ee.data.getAssetAcl ee.data.getTaskStatus ee.data.newTaskId ee.data.listBuckets ee.data.makeTableDownloadUrl ee.data.setWorkloadTag ee.data.getWorkloadTag ee.data.deleteAsset ee.data.authenticateViaOauth ee.data.copyAsset ee.data.getTaskList ee.data.getAssetRootQuota ee.data.getTableDownloadId ee.data.renameAsset ee.data.setAssetProperties ee.data.makeDownloadUrl ee.data.createFolder ee.data.setAssetAcl ee.data.getMapId ee.data.setDefaultWorkloadTag ee.data.updateTask ee.data.startProcessing ee.data.getTileUrl ee.data.createAsset ee.Date ee.Deserializer.decodeCloudApi ee.Deserializer.fromJSON ee.Deserializer.decode ee.Deserializer.fromCloudApiJSON ee.Dictionary ee.initialize ee.Algorithms ee.call ee.reset ee.InitState ee.apply ee.TILE_SIZE ee.Element.prototype.set ee.Feature ee.Feature.prototype.getMap ee.Feature.prototype.getInfo ee.FeatureCollection ee.FeatureCollection.prototype.getInfo ee.FeatureCollection.prototype.getDownloadURL ee.FeatureCollection.prototype.getMap ee.FeatureCollection.prototype.select ee.Filter.and ee.Filter.or ee.Filter.gte ee.Filter.date ee.Filter.inList ee.Filter ee.Filter.prototype.not ee.Filter.metadata ee.Filter.eq ee.Filter.neq ee.Filter.bounds ee.Filter.gt ee.Filter.lte ee.Filter.lt ee.Function.prototype.apply ee.Function.prototype.call ee.Geometry.Point ee.Geometry.BBox ee.Geometry.LinearRing ee.Geometry.prototype.serialize ee.Geometry.MultiPolygon ee.Geometry ee.Geometry.MultiPoint ee.Geometry.MultiLineString ee.Geometry.Rectangle ee.Geometry.LineString ee.Geometry.Polygon ee.Geometry.prototype.toGeoJSON ee.Geometry.prototype.toGeoJSONString ee.Image.prototype.expression ee.Image ee.Image.prototype.rename ee.Image.prototype.getMap ee.Image.prototype.getDownloadURL ee.Image.rgb ee.Image.prototype.getInfo ee.Image.prototype.getThumbURL ee.Image.prototype.getThumbId ee.Image.prototype.clip ee.Image.cat ee.Image.prototype.select ee.ImageCollection.prototype.getFilmstripThumbURL ee.ImageCollection.prototype.getVideoThumbURL ee.ImageCollection.prototype.getMap ee.ImageCollection.prototype.getInfo ee.ImageCollection.prototype.first ee.ImageCollection.prototype.select ee.ImageCollection ee.List ee.Number ee.Serializer.encodeCloudApi ee.Serializer.encode ee.Serializer.toJSON ee.Serializer.toReadableJSON ee.Serializer.encodeCloudApiPretty ee.Serializer.toCloudApiJSON ee.Serializer.toReadableCloudApiJSON ee.String ee.Terrain".split(" "),
c=[["name"],["name","namedArgs"],["name","var_args"],"collection opt_description opt_folder opt_fileNamePrefix opt_fileFormat opt_selectors opt_maxVertices".split(" "),["classifier","opt_description","opt_assetId"],"collection opt_description opt_assetId opt_maxFeaturesPerTile opt_thinningStrategy opt_thinningRanking opt_zOrderRanking".split(" "),"collection opt_description opt_folder opt_fileNamePrefix opt_framesPerSecond opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_maxFrames".split(" "),
"collection opt_description opt_bucket opt_fileNamePrefix opt_framesPerSecond opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_maxFrames".split(" "),"image opt_description opt_folder opt_fileNamePrefix opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize opt_fileDimensions opt_skipEmptyTiles opt_fileFormat opt_formatOptions".split(" "),["collection","opt_description","opt_assetId","opt_maxVertices"],"collection opt_description opt_bucket opt_fileNamePrefix opt_fileFormat opt_selectors opt_maxVertices".split(" "),
"image opt_description opt_bucket opt_fileFormat opt_path opt_writePublicTiles opt_scale opt_maxZoom opt_minZoom opt_region opt_skipEmptyTiles opt_mapsApiKey opt_bucketCorsUris".split(" "),"image opt_description opt_assetId opt_pyramidingPolicy opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize".split(" "),"collection opt_description opt_bucket opt_fileNamePrefix opt_framesPerSecond opt_writePublicTiles opt_minZoom opt_maxZoom opt_scale opt_region opt_skipEmptyTiles opt_minTimeMachineZoomSubset opt_maxTimeMachineZoomSubset opt_tileWidth opt_tileHeight opt_tileStride opt_videoFormat opt_version opt_mapsApiKey opt_bucketCorsUris".split(" "),
"image opt_description opt_bucket opt_fileNamePrefix opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize opt_fileDimensions opt_skipEmptyTiles opt_fileFormat opt_formatOptions".split(" "),["algorithm","opt_dropNulls"],["filter"],["name","operator","value"],["algorithm","opt_first"],["start","opt_end"],["geometry"],["max","opt_property","opt_ascending"],["property","opt_ascending"],["func","var_args"],["callback"],["opt_callback"],["legacy"],["id"],["requestedId",
"opt_callback"],["opt_limit","opt_callback"],["opt_callback"],["params","opt_callback"],["params","opt_callback"],["id","opt_callback"],["opt_resetDefault"],["params","opt_callback"],["assetId","asset","updateFields","opt_callback"],["clientId","success","opt_error","opt_extraScopes","opt_onImmediateFailed"],["id","opt_callback"],["obj","opt_callback"],["opt_limit","opt_callback"],["operationName","opt_callback"],["taskId","request","opt_callback"],["taskId","request","opt_callback"],["params","opt_callback"],
["opt_success","opt_error"],["parent","opt_params","opt_callback"],["params","opt_callback"],["asset","params","opt_callback"],["privateKey","opt_success","opt_error","opt_extraScopes","opt_suppressDefaultScopes"],["params","opt_callback"],["operationName","opt_callback"],["taskId","opt_callback"],["parent","opt_params","opt_callback"],["assetId","opt_callback"],["taskId","opt_callback"],["opt_count","opt_callback"],["project","opt_callback"],["id"],["tag"],[],["assetId","opt_callback"],"clientId success opt_error opt_extraScopes opt_onImmediateFailed opt_suppressDefaultScopes".split(" "),
["sourceId","destinationId","opt_overwrite","opt_callback"],["opt_callback"],["rootId","opt_callback"],["params","opt_callback"],["sourceId","destinationId","opt_callback"],["assetId","properties","opt_callback"],["id"],["path","opt_force","opt_callback"],["assetId","aclUpdate","opt_callback"],["params","opt_callback"],["tag"],["taskId","action","opt_callback"],["taskId","params","opt_callback"],["id","x","y","z"],["value","opt_path","opt_force","opt_properties","opt_callback"],["date","opt_tz"],
["json"],["json"],["json"],["json"],["opt_dict"],"opt_baseurl opt_tileurl opt_successCallback opt_errorCallback opt_xsrfToken opt_project".split(" "),[],["func","var_args"],[],[],["func","namedArgs"],[],["var_args"],["geometry","opt_properties"],["opt_visParams","opt_callback"],["opt_callback"],["args","opt_column"],["opt_callback"],["opt_format","opt_selectors","opt_filename","opt_callback"],["opt_visParams","opt_callback"],["propertySelectors","opt_newProperties","opt_retainGeometry"],["var_args"],
["var_args"],["name","value"],["start","opt_end"],["opt_leftField","opt_rightValue","opt_rightField","opt_leftValue"],["opt_filter"],[],["name","operator","value"],["name","value"],["name","value"],["geometry","opt_errorMargin"],["name","value"],["name","value"],["name","value"],["namedArgs"],["var_args"],["coords","opt_proj"],["west","south","east","north"],["coords","opt_proj","opt_geodesic","opt_maxError"],["legacy"],["coords","opt_proj","opt_geodesic","opt_maxError","opt_evenOdd"],["geoJson",
"opt_proj","opt_geodesic","opt_evenOdd"],["coords","opt_proj"],["coords","opt_proj","opt_geodesic","opt_maxError"],["coords","opt_proj","opt_geodesic","opt_evenOdd"],["coords","opt_proj","opt_geodesic","opt_maxError"],["coords","opt_proj","opt_geodesic","opt_maxError","opt_evenOdd"],[],[],["expression","opt_map"],["opt_args"],["var_args"],["opt_visParams","opt_callback"],["params","opt_callback"],["r","g","b"],["opt_callback"],["params","opt_callback"],["params","opt_callback"],["geometry"],["var_args"],
["var_args"],["params","opt_callback"],["params","opt_callback"],["opt_visParams","opt_callback"],["opt_callback"],[],["selectors","opt_names"],["args"],["list"],["number"],["obj"],["obj","opt_isCompound"],["obj"],["obj"],["obj"],["obj"],["obj"],["string"],[]];[Wm,Xm,O,Bo,Ho,Do,Fo,Eo,yo,Co,Ao,zo,vo,Go,xo,V.prototype.map,V.prototype.filter,V.prototype.kf,V.prototype.Nh,V.prototype.jf,V.prototype.yh,V.prototype.limit,V.prototype.sort,M.prototype.Gg,M.prototype.evaluate,M.prototype.U,M.prototype.xa,
Ll,um,Ul,tm,Kl,Jl,nm,Im,Il,Bm,xl,nm,Hl,Wl,Xl,mm,km,Nl,vl,qm,pm,Gl,yl,Fl,Yl,$l,rm,Am,Tl,Rl,sm,Ql,Gm,Bl,zm,wl,ym,Vl,Em,Pl,xm,Dm,Ol,wm,Cm,Dl,Hm,Zl,gm,El,vm,Yo,cp,bp,ap,gp,hp,qp,sp,vp,tp,up,wp,256,R.prototype.set,W,W.prototype.getMap,W.prototype.U,X,X.prototype.U,X.prototype.vb,X.prototype.getMap,X.prototype.select,Qn,Rn,Nn,Sn,Tn,U,U.prototype.wc,Vn,Kn,Ln,Un,On,Pn,Mn,Rm.prototype.apply,Rm.prototype.call,qn,vn,zn,S.prototype.xa,Cn,S,tn,An,un,yn,Bn,S.prototype.ke,S.prototype.yg,L.prototype.l,L,L.prototype.ti,
L.prototype.getMap,L.prototype.vb,io,L.prototype.U,L.prototype.tf,L.prototype.Id,L.prototype.clip,jo,L.prototype.select,Z.prototype.rf,Z.prototype.vf,Z.prototype.getMap,Z.prototype.U,Z.prototype.first,Z.prototype.select,Z,ko,Oo,Xk,Rk,Sk,Uk,Zk,$k,al,Ro,kp].forEach(function(d,e){d&&(a[d.toString()]={name:b[e],paramNames:c[e]})});r.EXPORTED_FN_INFO=a})();}).call(this);
h.al=function(a,b,c,d){"error"==c.type?(Ya(this.Db,b),this.vg.add(b),this.dispatchEvent(c)):(Ya(this.Db,b),c.target&&"load"==c.type&&(c=c.target,this.wg.add(c),1!=this.Qf&&Mp(c,this.Qf),a.appendChild(c)),Bp(this));this.wa&&null!==d&&this.wa.Ok(b,d)};w("ee.MapLayerOverlay",Eq);Eq.prototype.removeTileCallback=Eq.prototype.ag;Eq.prototype.addTileCallback=Eq.prototype.Ne;Eq.prototype.getTile=Eq.prototype.getTile;Eq.prototype.setOpacity=Eq.prototype.setOpacity;Eq.prototype.releaseTile=Eq.prototype.releaseTile;(function(){var a={},b="ee.ApiFunction._apply ee.ApiFunction._call ee.ApiFunction.lookup ee.batch.Export.image.toAsset ee.batch.Export.table.toDrive ee.batch.Export.image.toCloudStorage ee.batch.Export.table.toFeatureView ee.batch.Export.map.toCloudStorage ee.batch.Export.video.toDrive ee.batch.Export.video.toCloudStorage ee.batch.Export.table.toCloudStorage ee.batch.Export.image.toDrive ee.batch.Export.videoMap.toCloudStorage ee.batch.Export.table.toAsset ee.batch.Export.classifier.toAsset ee.Collection.prototype.filterMetadata ee.Collection.prototype.filterDate ee.Collection.prototype.iterate ee.Collection.prototype.filter ee.Collection.prototype.map ee.Collection.prototype.filterBounds ee.Collection.prototype.limit ee.Collection.prototype.sort ee.ComputedObject.prototype.aside ee.ComputedObject.prototype.evaluate ee.ComputedObject.prototype.getInfo ee.ComputedObject.prototype.serialize ee.data.copyAsset ee.data.listBuckets ee.data.setAssetAcl ee.data.authenticateViaPrivateKey ee.data.getTaskStatus ee.data.deleteAsset ee.data.authenticateViaPopup ee.data.listImages ee.data.startIngestion ee.data.cancelOperation ee.data.listOperations ee.data.authenticate ee.data.renameAsset ee.data.getThumbId ee.data.makeThumbUrl ee.data.authenticateViaOauth ee.data.makeTableDownloadUrl ee.data.getFilmstripThumbId ee.data.getVideoThumbId ee.data.getDownloadId ee.data.createFolder ee.data.createAssetHome ee.data.setAssetProperties ee.data.resetWorkloadTag ee.data.makeDownloadUrl ee.data.setDefaultWorkloadTag ee.data.getInfo ee.data.setWorkloadTag ee.data.getTableDownloadId ee.data.createAsset ee.data.getMapId ee.data.updateTask ee.data.startProcessing ee.data.getWorkloadTag ee.data.updateAsset ee.data.getAsset ee.data.cancelTask ee.data.getTileUrl ee.data.startTableIngestion ee.data.getOperation ee.data.getList ee.data.listAssets ee.data.getAssetRootQuota ee.data.getAssetRoots ee.data.getAssetAcl ee.data.getFeatureViewTilesKey ee.data.getTaskList ee.data.listFeatures ee.data.getTaskListWithLimit ee.data.computeValue ee.data.newTaskId ee.Date ee.Deserializer.decode ee.Deserializer.fromCloudApiJSON ee.Deserializer.fromJSON ee.Deserializer.decodeCloudApi ee.Dictionary ee.InitState ee.Algorithms ee.reset ee.apply ee.initialize ee.TILE_SIZE ee.call ee.Element.prototype.set ee.Feature ee.Feature.prototype.getMap ee.Feature.prototype.getInfo ee.FeatureCollection.prototype.getMap ee.FeatureCollection.prototype.select ee.FeatureCollection ee.FeatureCollection.prototype.getInfo ee.FeatureCollection.prototype.getDownloadURL ee.Filter.lt ee.Filter.and ee.Filter.or ee.Filter.gte ee.Filter.date ee.Filter.prototype.not ee.Filter.inList ee.Filter ee.Filter.eq ee.Filter.metadata ee.Filter.neq ee.Filter.bounds ee.Filter.gt ee.Filter.lte ee.Function.prototype.apply ee.Function.prototype.call ee.Geometry.prototype.toGeoJSON ee.Geometry.prototype.toGeoJSONString ee.Geometry.BBox ee.Geometry.Point ee.Geometry.LinearRing ee.Geometry.prototype.serialize ee.Geometry.MultiPolygon ee.Geometry ee.Geometry.MultiPoint ee.Geometry.MultiLineString ee.Geometry.Rectangle ee.Geometry.LineString ee.Geometry.Polygon ee.Image.prototype.getThumbId ee.Image.prototype.select ee.Image.cat ee.Image.prototype.expression ee.Image ee.Image.prototype.clip ee.Image.prototype.getMap ee.Image.prototype.rename ee.Image.prototype.getDownloadURL ee.Image.rgb ee.Image.prototype.getInfo ee.Image.prototype.getThumbURL ee.ImageCollection ee.ImageCollection.prototype.getFilmstripThumbURL ee.ImageCollection.prototype.getVideoThumbURL ee.ImageCollection.prototype.getMap ee.ImageCollection.prototype.getInfo ee.ImageCollection.prototype.first ee.ImageCollection.prototype.select ee.List ee.Number ee.Serializer.encode ee.Serializer.toJSON ee.Serializer.encodeCloudApi ee.Serializer.toReadableJSON ee.Serializer.toReadableCloudApiJSON ee.Serializer.encodeCloudApiPretty ee.Serializer.toCloudApiJSON ee.String ee.Terrain".split(" "),
c=[["name","namedArgs"],["name","var_args"],["name"],"image opt_description opt_assetId opt_pyramidingPolicy opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize".split(" "),"collection opt_description opt_folder opt_fileNamePrefix opt_fileFormat opt_selectors opt_maxVertices".split(" "),"image opt_description opt_bucket opt_fileNamePrefix opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize opt_fileDimensions opt_skipEmptyTiles opt_fileFormat opt_formatOptions".split(" "),
"collection opt_description opt_assetId opt_maxFeaturesPerTile opt_thinningStrategy opt_thinningRanking opt_zOrderRanking".split(" "),"image opt_description opt_bucket opt_fileFormat opt_path opt_writePublicTiles opt_scale opt_maxZoom opt_minZoom opt_region opt_skipEmptyTiles opt_mapsApiKey opt_bucketCorsUris".split(" "),"collection opt_description opt_folder opt_fileNamePrefix opt_framesPerSecond opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_maxFrames".split(" "),
"collection opt_description opt_bucket opt_fileNamePrefix opt_framesPerSecond opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_maxFrames".split(" "),"collection opt_description opt_bucket opt_fileNamePrefix opt_fileFormat opt_selectors opt_maxVertices".split(" "),"image opt_description opt_folder opt_fileNamePrefix opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize opt_fileDimensions opt_skipEmptyTiles opt_fileFormat opt_formatOptions".split(" "),
"collection opt_description opt_bucket opt_fileNamePrefix opt_framesPerSecond opt_writePublicTiles opt_minZoom opt_maxZoom opt_scale opt_region opt_skipEmptyTiles opt_minTimeMachineZoomSubset opt_maxTimeMachineZoomSubset opt_tileWidth opt_tileHeight opt_tileStride opt_videoFormat opt_version opt_mapsApiKey opt_bucketCorsUris".split(" "),["collection","opt_description","opt_assetId","opt_maxVertices"],["classifier","opt_description","opt_assetId"],["name","operator","value"],["start","opt_end"],["algorithm",
"opt_first"],["filter"],["algorithm","opt_dropNulls"],["geometry"],["max","opt_property","opt_ascending"],["property","opt_ascending"],["func","var_args"],["callback"],["opt_callback"],["legacy"],["sourceId","destinationId","opt_overwrite","opt_callback"],["project","opt_callback"],["assetId","aclUpdate","opt_callback"],["privateKey","opt_success","opt_error","opt_extraScopes","opt_suppressDefaultScopes"],["taskId","opt_callback"],["assetId","opt_callback"],["opt_success","opt_error"],["parent","opt_params",
"opt_callback"],["taskId","request","opt_callback"],["operationName","opt_callback"],["opt_limit","opt_callback"],["clientId","success","opt_error","opt_extraScopes","opt_onImmediateFailed"],["sourceId","destinationId","opt_callback"],["params","opt_callback"],["id"],"clientId success opt_error opt_extraScopes opt_onImmediateFailed opt_suppressDefaultScopes".split(" "),["id"],["params","opt_callback"],["params","opt_callback"],["params","opt_callback"],["path","opt_force","opt_callback"],["requestedId",
"opt_callback"],["assetId","properties","opt_callback"],["opt_resetDefault"],["id"],["tag"],["id","opt_callback"],["tag"],["params","opt_callback"],["value","opt_path","opt_force","opt_properties","opt_callback"],["params","opt_callback"],["taskId","action","opt_callback"],["taskId","params","opt_callback"],[],["assetId","asset","updateFields","opt_callback"],["id","opt_callback"],["taskId","opt_callback"],["id","x","y","z"],["taskId","request","opt_callback"],["operationName","opt_callback"],["params",
"opt_callback"],["parent","opt_params","opt_callback"],["rootId","opt_callback"],["opt_callback"],["assetId","opt_callback"],["params","opt_callback"],["opt_callback"],["asset","params","opt_callback"],["opt_limit","opt_callback"],["obj","opt_callback"],["opt_count","opt_callback"],["date","opt_tz"],["json"],["json"],["json"],["json"],["opt_dict"],[],[],[],["func","namedArgs"],"opt_baseurl opt_tileurl opt_successCallback opt_errorCallback opt_xsrfToken opt_project".split(" "),[],["func","var_args"],
["var_args"],["geometry","opt_properties"],["opt_visParams","opt_callback"],["opt_callback"],["opt_visParams","opt_callback"],["propertySelectors","opt_newProperties","opt_retainGeometry"],["args","opt_column"],["opt_callback"],["opt_format","opt_selectors","opt_filename","opt_callback"],["name","value"],["var_args"],["var_args"],["name","value"],["start","opt_end"],[],["opt_leftField","opt_rightValue","opt_rightField","opt_leftValue"],["opt_filter"],["name","value"],["name","operator","value"],["name",
"value"],["geometry","opt_errorMargin"],["name","value"],["name","value"],["namedArgs"],["var_args"],[],[],["west","south","east","north"],["coords","opt_proj"],["coords","opt_proj","opt_geodesic","opt_maxError"],["legacy"],["coords","opt_proj","opt_geodesic","opt_maxError","opt_evenOdd"],["geoJson","opt_proj","opt_geodesic","opt_evenOdd"],["coords","opt_proj"],["coords","opt_proj","opt_geodesic","opt_maxError"],["coords","opt_proj","opt_geodesic","opt_evenOdd"],["coords","opt_proj","opt_geodesic",
"opt_maxError"],["coords","opt_proj","opt_geodesic","opt_maxError","opt_evenOdd"],["params","opt_callback"],["var_args"],["var_args"],["expression","opt_map"],["opt_args"],["geometry"],["opt_visParams","opt_callback"],["var_args"],["params","opt_callback"],["r","g","b"],["opt_callback"],["params","opt_callback"],["args"],["params","opt_callback"],["params","opt_callback"],["opt_visParams","opt_callback"],["opt_callback"],[],["selectors","opt_names"],["list"],["number"],["obj","opt_isCompound"],["obj"],
["obj"],["obj"],["obj"],["obj"],["obj"],["string"],[]];[Xm,O,Wm,vo,Bo,xo,Do,zo,Fo,Eo,Ao,yo,Go,Co,Ho,V.prototype.kf,V.prototype.jf,V.prototype.Nh,V.prototype.filter,V.prototype.map,V.prototype.yh,V.prototype.limit,V.prototype.sort,M.prototype.Gg,M.prototype.evaluate,M.prototype.U,M.prototype.xa,ym,sm,Cm,yl,Tl,zm,vl,rm,km,Xl,Wl,xl,xm,Il,Ll,wl,Ql,Kl,Jl,Nl,wm,um,Dm,Im,Ol,Hm,nm,Gm,Pl,vm,Dl,Zl,gm,Bl,Bm,nm,$l,El,mm,Yl,pm,qm,Em,tm,Am,Fl,Vl,Gl,Ul,Hl,Rl,Yo,ap,gp,bp,cp,hp,up,sp,tp,wp,qp,256,vp,R.prototype.set,
W,W.prototype.getMap,W.prototype.U,X.prototype.getMap,X.prototype.select,X,X.prototype.U,X.prototype.vb,Mn,Qn,Rn,Nn,Sn,U.prototype.wc,Tn,U,Kn,Vn,Ln,Un,On,Pn,Rm.prototype.apply,Rm.prototype.call,S.prototype.ke,S.prototype.yg,vn,qn,zn,S.prototype.xa,Cn,S,tn,An,un,yn,Bn,L.prototype.Id,L.prototype.select,jo,L.prototype.l,L,L.prototype.clip,L.prototype.getMap,L.prototype.ti,L.prototype.vb,io,L.prototype.U,L.prototype.tf,Z,Z.prototype.rf,Z.prototype.vf,Z.prototype.getMap,Z.prototype.U,Z.prototype.first,
Z.prototype.select,ko,Oo,Rk,Sk,Xk,Uk,al,Zk,$k,Ro,kp].forEach(function(d,e){d&&(a[d.toString()]={name:b[e],paramNames:c[e]})});r.EXPORTED_FN_INFO=a})();}).call(this);

View File

@ -2606,9 +2606,10 @@ goog.events.BrowserFeature = {TOUCH_ENABLED:"ontouchstart" in goog.global || !!(
passive = !0;
}});
try {
goog.global.addEventListener("test", function() {
}, options), goog.global.removeEventListener("test", function() {
}, options);
var nullFunction = function() {
};
goog.global.addEventListener("test", nullFunction, options);
goog.global.removeEventListener("test", nullFunction, options);
} catch (e) {
}
return passive;
@ -17587,7 +17588,7 @@ goog.debug.entryPointRegistry.register(function(transformer) {
ee.apiclient = {};
var module$contents$ee$apiclient_apiclient = {};
ee.apiclient.VERSION = module$exports$ee$apiVersion.V1ALPHA;
ee.apiclient.API_CLIENT_VERSION = "0.1.351";
ee.apiclient.API_CLIENT_VERSION = "0.1.352";
ee.apiclient.NULL_VALUE = module$exports$eeapiclient$domain_object.NULL_VALUE;
ee.apiclient.PromiseRequestService = module$exports$eeapiclient$promise_request_service.PromiseRequestService;
ee.apiclient.MakeRequestParams = module$contents$eeapiclient$request_params_MakeRequestParams;
@ -17868,8 +17869,8 @@ module$contents$ee$apiclient_apiclient.send = function(path, params, callback, m
var profileHookAtCallTime = module$contents$ee$apiclient_apiclient.profileHook_, contentType = "application/x-www-form-urlencoded";
body && (contentType = "application/json", method && method.startsWith("multipart") && (contentType = method, method = "POST"));
method = method || "POST";
var headers = {"Content-Type":contentType,}, version = "0.1.351";
"0.1.351" === version && (version = "latest");
var headers = {"Content-Type":contentType,}, version = "0.1.352";
"0.1.352" === version && (version = "latest");
headers[module$contents$ee$apiclient_apiclient.API_CLIENT_VERSION_HEADER] = "ee-js/" + version;
var authToken = module$contents$ee$apiclient_apiclient.getAuthToken();
if (null != authToken) {
@ -19320,7 +19321,7 @@ ee.rpc_convert_batch.buildGeoTiffFormatOptions_ = function(params) {
throw Error('Export cannot set both "fileDimensions" and "tiffFileDimensions".');
}
var tileSize = params.tiffShardSize || params.shardSize;
return new module$exports$eeapiclient$ee_api_client.GeoTiffImageExportOptions({cloudOptimized:!!params.tiffCloudOptimized, skipEmptyFiles:!(!params.skipEmptyTiles && !params.tiffSkipEmptyFiles), tileDimensions:ee.rpc_convert_batch.buildGridDimensions_(params.fileDimensions || params.tiffFileDimensions), tileSize:numberOrNull_(tileSize), noData:noDataOrNull_(params.noData),});
return new module$exports$eeapiclient$ee_api_client.GeoTiffImageExportOptions({cloudOptimized:!!params.tiffCloudOptimized, skipEmptyFiles:!(!params.skipEmptyTiles && !params.tiffSkipEmptyFiles), tileDimensions:ee.rpc_convert_batch.buildGridDimensions_(params.fileDimensions || params.tiffFileDimensions), tileSize:numberOrNull_(tileSize), noData:noDataOrNull_(params.tiffNoData),});
};
ee.rpc_convert_batch.buildTfRecordFormatOptions_ = function(params) {
var tfRecordOptions = new module$exports$eeapiclient$ee_api_client.TfRecordImageExportOptions({compress:!!params.tfrecordCompressed, maxSizeBytes:stringOrNull_(params.tfrecordMaxFileSize), sequenceData:!!params.tfrecordSequenceData, collapseBands:!!params.tfrecordCollapseBands, maxMaskedRatio:numberOrNull_(params.tfrecordMaskedThreshold), defaultValue:numberOrNull_(params.tfrecordDefaultValue), tileDimensions:ee.rpc_convert_batch.buildGridDimensions_(params.tfrecordPatchDimensions),
@ -22163,7 +22164,7 @@ module$contents$ee$batch_Export.classifier.prepareTaskConfig_ = function(taskCon
return taskConfig = module$contents$ee$batch_Export.prepareDestination_(taskConfig, destination);
};
var module$contents$ee$batch_VideoFormat = {MP4:"MP4", GIF:"GIF", VP9:"VP9",}, module$contents$ee$batch_MapFormat = {AUTO_JPEG_PNG:"AUTO_JPEG_PNG", JPEG:"JPEG", PNG:"PNG",}, module$contents$ee$batch_ImageFormat = {GEO_TIFF:"GEO_TIFF", TF_RECORD_IMAGE:"TF_RECORD_IMAGE",}, module$contents$ee$batch_TableFormat = {CSV:"CSV", GEO_JSON:"GEO_JSON", KML:"KML", KMZ:"KMZ", SHP:"SHP", TF_RECORD_TABLE:"TF_RECORD_TABLE",}, module$contents$ee$batch_VideoMapVersion = {V1:"V1", V2:"V2",}, module$contents$ee$batch_FORMAT_OPTIONS_MAP =
{GEO_TIFF:["cloudOptimized", "fileDimensions", "shardSize",], TF_RECORD_IMAGE:"patchDimensions kernelSize compressed maxFileSize defaultValue tensorDepths sequenceData collapseBands maskedThreshold".split(" ")}, module$contents$ee$batch_FORMAT_PREFIX_MAP = {GEO_TIFF:"tiff", TF_RECORD_IMAGE:"tfrecord"};
{GEO_TIFF:["cloudOptimized", "fileDimensions", "noData", "shardSize",], TF_RECORD_IMAGE:"patchDimensions kernelSize compressed maxFileSize defaultValue tensorDepths sequenceData collapseBands maskedThreshold".split(" ")}, module$contents$ee$batch_FORMAT_PREFIX_MAP = {GEO_TIFF:"tiff", TF_RECORD_IMAGE:"tfrecord"};
module$contents$ee$batch_Export.reconcileVideoFormat_ = function(taskConfig) {
taskConfig.videoOptions = taskConfig.framesPerSecond || 5;
taskConfig.maxFrames = taskConfig.maxFrames || 1E3;

View File

@ -2606,9 +2606,10 @@ goog.events.BrowserFeature = {TOUCH_ENABLED:"ontouchstart" in goog.global || !!(
passive = !0;
}});
try {
goog.global.addEventListener("test", function() {
}, options), goog.global.removeEventListener("test", function() {
}, options);
var nullFunction = function() {
};
goog.global.addEventListener("test", nullFunction, options);
goog.global.removeEventListener("test", nullFunction, options);
} catch (e) {
}
return passive;
@ -17587,7 +17588,7 @@ goog.debug.entryPointRegistry.register(function(transformer) {
ee.apiclient = {};
var module$contents$ee$apiclient_apiclient = {};
ee.apiclient.VERSION = module$exports$ee$apiVersion.V1ALPHA;
ee.apiclient.API_CLIENT_VERSION = "0.1.351";
ee.apiclient.API_CLIENT_VERSION = "0.1.352";
ee.apiclient.NULL_VALUE = module$exports$eeapiclient$domain_object.NULL_VALUE;
ee.apiclient.PromiseRequestService = module$exports$eeapiclient$promise_request_service.PromiseRequestService;
ee.apiclient.MakeRequestParams = module$contents$eeapiclient$request_params_MakeRequestParams;
@ -17868,8 +17869,8 @@ module$contents$ee$apiclient_apiclient.send = function(path, params, callback, m
var profileHookAtCallTime = module$contents$ee$apiclient_apiclient.profileHook_, contentType = "application/x-www-form-urlencoded";
body && (contentType = "application/json", method && method.startsWith("multipart") && (contentType = method, method = "POST"));
method = method || "POST";
var headers = {"Content-Type":contentType,}, version = "0.1.351";
"0.1.351" === version && (version = "latest");
var headers = {"Content-Type":contentType,}, version = "0.1.352";
"0.1.352" === version && (version = "latest");
headers[module$contents$ee$apiclient_apiclient.API_CLIENT_VERSION_HEADER] = "ee-js/" + version;
var authToken = module$contents$ee$apiclient_apiclient.getAuthToken();
if (null != authToken) {
@ -19320,7 +19321,7 @@ ee.rpc_convert_batch.buildGeoTiffFormatOptions_ = function(params) {
throw Error('Export cannot set both "fileDimensions" and "tiffFileDimensions".');
}
var tileSize = params.tiffShardSize || params.shardSize;
return new module$exports$eeapiclient$ee_api_client.GeoTiffImageExportOptions({cloudOptimized:!!params.tiffCloudOptimized, skipEmptyFiles:!(!params.skipEmptyTiles && !params.tiffSkipEmptyFiles), tileDimensions:ee.rpc_convert_batch.buildGridDimensions_(params.fileDimensions || params.tiffFileDimensions), tileSize:numberOrNull_(tileSize), noData:noDataOrNull_(params.noData),});
return new module$exports$eeapiclient$ee_api_client.GeoTiffImageExportOptions({cloudOptimized:!!params.tiffCloudOptimized, skipEmptyFiles:!(!params.skipEmptyTiles && !params.tiffSkipEmptyFiles), tileDimensions:ee.rpc_convert_batch.buildGridDimensions_(params.fileDimensions || params.tiffFileDimensions), tileSize:numberOrNull_(tileSize), noData:noDataOrNull_(params.tiffNoData),});
};
ee.rpc_convert_batch.buildTfRecordFormatOptions_ = function(params) {
var tfRecordOptions = new module$exports$eeapiclient$ee_api_client.TfRecordImageExportOptions({compress:!!params.tfrecordCompressed, maxSizeBytes:stringOrNull_(params.tfrecordMaxFileSize), sequenceData:!!params.tfrecordSequenceData, collapseBands:!!params.tfrecordCollapseBands, maxMaskedRatio:numberOrNull_(params.tfrecordMaskedThreshold), defaultValue:numberOrNull_(params.tfrecordDefaultValue), tileDimensions:ee.rpc_convert_batch.buildGridDimensions_(params.tfrecordPatchDimensions),
@ -22163,7 +22164,7 @@ module$contents$ee$batch_Export.classifier.prepareTaskConfig_ = function(taskCon
return taskConfig = module$contents$ee$batch_Export.prepareDestination_(taskConfig, destination);
};
var module$contents$ee$batch_VideoFormat = {MP4:"MP4", GIF:"GIF", VP9:"VP9",}, module$contents$ee$batch_MapFormat = {AUTO_JPEG_PNG:"AUTO_JPEG_PNG", JPEG:"JPEG", PNG:"PNG",}, module$contents$ee$batch_ImageFormat = {GEO_TIFF:"GEO_TIFF", TF_RECORD_IMAGE:"TF_RECORD_IMAGE",}, module$contents$ee$batch_TableFormat = {CSV:"CSV", GEO_JSON:"GEO_JSON", KML:"KML", KMZ:"KMZ", SHP:"SHP", TF_RECORD_TABLE:"TF_RECORD_TABLE",}, module$contents$ee$batch_VideoMapVersion = {V1:"V1", V2:"V2",}, module$contents$ee$batch_FORMAT_OPTIONS_MAP =
{GEO_TIFF:["cloudOptimized", "fileDimensions", "shardSize",], TF_RECORD_IMAGE:"patchDimensions kernelSize compressed maxFileSize defaultValue tensorDepths sequenceData collapseBands maskedThreshold".split(" ")}, module$contents$ee$batch_FORMAT_PREFIX_MAP = {GEO_TIFF:"tiff", TF_RECORD_IMAGE:"tfrecord"};
{GEO_TIFF:["cloudOptimized", "fileDimensions", "noData", "shardSize",], TF_RECORD_IMAGE:"patchDimensions kernelSize compressed maxFileSize defaultValue tensorDepths sequenceData collapseBands maskedThreshold".split(" ")}, module$contents$ee$batch_FORMAT_PREFIX_MAP = {GEO_TIFF:"tiff", TF_RECORD_IMAGE:"tfrecord"};
module$contents$ee$batch_Export.reconcileVideoFormat_ = function(taskConfig) {
taskConfig.videoOptions = taskConfig.framesPerSecond || 5;
taskConfig.maxFrames = taskConfig.maxFrames || 1E3;
@ -25342,28 +25343,28 @@ ee.data.Profiler.Format.prototype.toString = function() {
ee.data.Profiler.Format.TEXT = new ee.data.Profiler.Format("text");
ee.data.Profiler.Format.JSON = new ee.data.Profiler.Format("json");
(function() {
var exportedFnInfo = {}, orderedFnNames = "ee.ApiFunction.lookup ee.ApiFunction._apply ee.ApiFunction._call ee.batch.Export.table.toDrive ee.batch.Export.classifier.toAsset ee.batch.Export.table.toFeatureView ee.batch.Export.video.toDrive ee.batch.Export.video.toCloudStorage ee.batch.Export.image.toDrive ee.batch.Export.table.toAsset ee.batch.Export.table.toCloudStorage ee.batch.Export.map.toCloudStorage ee.batch.Export.image.toAsset ee.batch.Export.videoMap.toCloudStorage ee.batch.Export.image.toCloudStorage ee.Collection.prototype.map ee.Collection.prototype.filter ee.Collection.prototype.filterMetadata ee.Collection.prototype.iterate ee.Collection.prototype.filterDate ee.Collection.prototype.filterBounds ee.Collection.prototype.limit ee.Collection.prototype.sort ee.ComputedObject.prototype.aside ee.ComputedObject.prototype.evaluate ee.ComputedObject.prototype.getInfo ee.ComputedObject.prototype.serialize ee.data.makeThumbUrl ee.data.createAssetHome ee.data.getTaskListWithLimit ee.data.getAssetRoots ee.data.getFilmstripThumbId ee.data.getVideoThumbId ee.data.getInfo ee.data.resetWorkloadTag ee.data.getThumbId ee.data.updateAsset ee.data.authenticate ee.data.getAsset ee.data.computeValue ee.data.listOperations ee.data.cancelOperation ee.data.startTableIngestion ee.data.startIngestion ee.data.getDownloadId ee.data.authenticateViaPopup ee.data.listAssets ee.data.getList ee.data.listFeatures ee.data.authenticateViaPrivateKey ee.data.getFeatureViewTilesKey ee.data.getOperation ee.data.cancelTask ee.data.listImages ee.data.getAssetAcl ee.data.getTaskStatus ee.data.newTaskId ee.data.listBuckets ee.data.makeTableDownloadUrl ee.data.setWorkloadTag ee.data.getWorkloadTag ee.data.deleteAsset ee.data.authenticateViaOauth ee.data.copyAsset ee.data.getTaskList ee.data.getAssetRootQuota ee.data.getTableDownloadId ee.data.renameAsset ee.data.setAssetProperties ee.data.makeDownloadUrl ee.data.createFolder ee.data.setAssetAcl ee.data.getMapId ee.data.setDefaultWorkloadTag ee.data.updateTask ee.data.startProcessing ee.data.getTileUrl ee.data.createAsset ee.Date ee.Deserializer.decodeCloudApi ee.Deserializer.fromJSON ee.Deserializer.decode ee.Deserializer.fromCloudApiJSON ee.Dictionary ee.initialize ee.Algorithms ee.call ee.reset ee.InitState ee.apply ee.TILE_SIZE ee.Element.prototype.set ee.Feature ee.Feature.prototype.getMap ee.Feature.prototype.getInfo ee.FeatureCollection ee.FeatureCollection.prototype.getInfo ee.FeatureCollection.prototype.getDownloadURL ee.FeatureCollection.prototype.getMap ee.FeatureCollection.prototype.select ee.Filter.and ee.Filter.or ee.Filter.gte ee.Filter.date ee.Filter.inList ee.Filter ee.Filter.prototype.not ee.Filter.metadata ee.Filter.eq ee.Filter.neq ee.Filter.bounds ee.Filter.gt ee.Filter.lte ee.Filter.lt ee.Function.prototype.apply ee.Function.prototype.call ee.Geometry.Point ee.Geometry.BBox ee.Geometry.LinearRing ee.Geometry.prototype.serialize ee.Geometry.MultiPolygon ee.Geometry ee.Geometry.MultiPoint ee.Geometry.MultiLineString ee.Geometry.Rectangle ee.Geometry.LineString ee.Geometry.Polygon ee.Geometry.prototype.toGeoJSON ee.Geometry.prototype.toGeoJSONString ee.Image.prototype.expression ee.Image ee.Image.prototype.rename ee.Image.prototype.getMap ee.Image.prototype.getDownloadURL ee.Image.rgb ee.Image.prototype.getInfo ee.Image.prototype.getThumbURL ee.Image.prototype.getThumbId ee.Image.prototype.clip ee.Image.cat ee.Image.prototype.select ee.ImageCollection.prototype.getFilmstripThumbURL ee.ImageCollection.prototype.getVideoThumbURL ee.ImageCollection.prototype.getMap ee.ImageCollection.prototype.getInfo ee.ImageCollection.prototype.first ee.ImageCollection.prototype.select ee.ImageCollection ee.List ee.Number ee.Serializer.encodeCloudApi ee.Serializer.encode ee.Serializer.toJSON ee.Serializer.toReadableJSON ee.Serializer.encodeCloudApiPretty ee.Serializer.toCloudApiJSON ee.Serializer.toReadableCloudApiJSON ee.String ee.Terrain".split(" "),
orderedParamLists = [["name"], ["name", "namedArgs"], ["name", "var_args"], "collection opt_description opt_folder opt_fileNamePrefix opt_fileFormat opt_selectors opt_maxVertices".split(" "), ["classifier", "opt_description", "opt_assetId"], "collection opt_description opt_assetId opt_maxFeaturesPerTile opt_thinningStrategy opt_thinningRanking opt_zOrderRanking".split(" "), "collection opt_description opt_folder opt_fileNamePrefix opt_framesPerSecond opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_maxFrames".split(" "),
"collection opt_description opt_bucket opt_fileNamePrefix opt_framesPerSecond opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_maxFrames".split(" "), "image opt_description opt_folder opt_fileNamePrefix opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize opt_fileDimensions opt_skipEmptyTiles opt_fileFormat opt_formatOptions".split(" "), ["collection", "opt_description", "opt_assetId", "opt_maxVertices"], "collection opt_description opt_bucket opt_fileNamePrefix opt_fileFormat opt_selectors opt_maxVertices".split(" "),
"image opt_description opt_bucket opt_fileFormat opt_path opt_writePublicTiles opt_scale opt_maxZoom opt_minZoom opt_region opt_skipEmptyTiles opt_mapsApiKey opt_bucketCorsUris".split(" "), "image opt_description opt_assetId opt_pyramidingPolicy opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize".split(" "), "collection opt_description opt_bucket opt_fileNamePrefix opt_framesPerSecond opt_writePublicTiles opt_minZoom opt_maxZoom opt_scale opt_region opt_skipEmptyTiles opt_minTimeMachineZoomSubset opt_maxTimeMachineZoomSubset opt_tileWidth opt_tileHeight opt_tileStride opt_videoFormat opt_version opt_mapsApiKey opt_bucketCorsUris".split(" "),
"image opt_description opt_bucket opt_fileNamePrefix opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize opt_fileDimensions opt_skipEmptyTiles opt_fileFormat opt_formatOptions".split(" "), ["algorithm", "opt_dropNulls"], ["filter"], ["name", "operator", "value"], ["algorithm", "opt_first"], ["start", "opt_end"], ["geometry"], ["max", "opt_property", "opt_ascending"], ["property", "opt_ascending"], ["func", "var_args"], ["callback"], ["opt_callback"], ["legacy"],
["id"], ["requestedId", "opt_callback"], ["opt_limit", "opt_callback"], ["opt_callback"], ["params", "opt_callback"], ["params", "opt_callback"], ["id", "opt_callback"], ["opt_resetDefault"], ["params", "opt_callback"], ["assetId", "asset", "updateFields", "opt_callback"], ["clientId", "success", "opt_error", "opt_extraScopes", "opt_onImmediateFailed"], ["id", "opt_callback"], ["obj", "opt_callback"], ["opt_limit", "opt_callback"], ["operationName", "opt_callback"], ["taskId", "request", "opt_callback"],
["taskId", "request", "opt_callback"], ["params", "opt_callback"], ["opt_success", "opt_error"], ["parent", "opt_params", "opt_callback"], ["params", "opt_callback"], ["asset", "params", "opt_callback"], ["privateKey", "opt_success", "opt_error", "opt_extraScopes", "opt_suppressDefaultScopes"], ["params", "opt_callback"], ["operationName", "opt_callback"], ["taskId", "opt_callback"], ["parent", "opt_params", "opt_callback"], ["assetId", "opt_callback"], ["taskId", "opt_callback"], ["opt_count",
"opt_callback"], ["project", "opt_callback"], ["id"], ["tag"], [], ["assetId", "opt_callback"], "clientId success opt_error opt_extraScopes opt_onImmediateFailed opt_suppressDefaultScopes".split(" "), ["sourceId", "destinationId", "opt_overwrite", "opt_callback"], ["opt_callback"], ["rootId", "opt_callback"], ["params", "opt_callback"], ["sourceId", "destinationId", "opt_callback"], ["assetId", "properties", "opt_callback"], ["id"], ["path", "opt_force", "opt_callback"], ["assetId", "aclUpdate",
"opt_callback"], ["params", "opt_callback"], ["tag"], ["taskId", "action", "opt_callback"], ["taskId", "params", "opt_callback"], ["id", "x", "y", "z"], ["value", "opt_path", "opt_force", "opt_properties", "opt_callback"], ["date", "opt_tz"], ["json"], ["json"], ["json"], ["json"], ["opt_dict"], "opt_baseurl opt_tileurl opt_successCallback opt_errorCallback opt_xsrfToken opt_project".split(" "), [], ["func", "var_args"], [], [], ["func", "namedArgs"], [], ["var_args"], ["geometry", "opt_properties"],
["opt_visParams", "opt_callback"], ["opt_callback"], ["args", "opt_column"], ["opt_callback"], ["opt_format", "opt_selectors", "opt_filename", "opt_callback"], ["opt_visParams", "opt_callback"], ["propertySelectors", "opt_newProperties", "opt_retainGeometry"], ["var_args"], ["var_args"], ["name", "value"], ["start", "opt_end"], ["opt_leftField", "opt_rightValue", "opt_rightField", "opt_leftValue"], ["opt_filter"], [], ["name", "operator", "value"], ["name", "value"], ["name", "value"], ["geometry",
"opt_errorMargin"], ["name", "value"], ["name", "value"], ["name", "value"], ["namedArgs"], ["var_args"], ["coords", "opt_proj"], ["west", "south", "east", "north"], ["coords", "opt_proj", "opt_geodesic", "opt_maxError"], ["legacy"], ["coords", "opt_proj", "opt_geodesic", "opt_maxError", "opt_evenOdd"], ["geoJson", "opt_proj", "opt_geodesic", "opt_evenOdd"], ["coords", "opt_proj"], ["coords", "opt_proj", "opt_geodesic", "opt_maxError"], ["coords", "opt_proj", "opt_geodesic", "opt_evenOdd"], ["coords",
"opt_proj", "opt_geodesic", "opt_maxError"], ["coords", "opt_proj", "opt_geodesic", "opt_maxError", "opt_evenOdd"], [], [], ["expression", "opt_map"], ["opt_args"], ["var_args"], ["opt_visParams", "opt_callback"], ["params", "opt_callback"], ["r", "g", "b"], ["opt_callback"], ["params", "opt_callback"], ["params", "opt_callback"], ["geometry"], ["var_args"], ["var_args"], ["params", "opt_callback"], ["params", "opt_callback"], ["opt_visParams", "opt_callback"], ["opt_callback"], [], ["selectors",
"opt_names"], ["args"], ["list"], ["number"], ["obj"], ["obj", "opt_isCompound"], ["obj"], ["obj"], ["obj"], ["obj"], ["obj"], ["string"], []];
[ee.ApiFunction.lookup, ee.ApiFunction._apply, ee.ApiFunction._call, module$contents$ee$batch_Export.table.toDrive, module$contents$ee$batch_Export.classifier.toAsset, module$contents$ee$batch_Export.table.toFeatureView, module$contents$ee$batch_Export.video.toDrive, module$contents$ee$batch_Export.video.toCloudStorage, module$contents$ee$batch_Export.image.toDrive, module$contents$ee$batch_Export.table.toAsset, module$contents$ee$batch_Export.table.toCloudStorage, module$contents$ee$batch_Export.map.toCloudStorage,
module$contents$ee$batch_Export.image.toAsset, module$contents$ee$batch_Export.videoMap.toCloudStorage, module$contents$ee$batch_Export.image.toCloudStorage, ee.Collection.prototype.map, ee.Collection.prototype.filter, ee.Collection.prototype.filterMetadata, ee.Collection.prototype.iterate, ee.Collection.prototype.filterDate, ee.Collection.prototype.filterBounds, ee.Collection.prototype.limit, ee.Collection.prototype.sort, ee.ComputedObject.prototype.aside, ee.ComputedObject.prototype.evaluate,
ee.ComputedObject.prototype.getInfo, ee.ComputedObject.prototype.serialize, ee.data.makeThumbUrl, ee.data.createAssetHome, ee.data.getTaskListWithLimit, ee.data.getAssetRoots, ee.data.getFilmstripThumbId, ee.data.getVideoThumbId, ee.data.getInfo, ee.data.resetWorkloadTag, ee.data.getThumbId, ee.data.updateAsset, ee.data.authenticate, ee.data.getAsset, ee.data.computeValue, ee.data.listOperations, ee.data.cancelOperation, ee.data.startTableIngestion, ee.data.startIngestion, ee.data.getDownloadId,
ee.data.authenticateViaPopup, ee.data.listAssets, ee.data.getList, ee.data.listFeatures, ee.data.authenticateViaPrivateKey, ee.data.getFeatureViewTilesKey, ee.data.getOperation, ee.data.cancelTask, ee.data.listImages, ee.data.getAssetAcl, ee.data.getTaskStatus, ee.data.newTaskId, ee.data.listBuckets, ee.data.makeTableDownloadUrl, ee.data.setWorkloadTag, ee.data.getWorkloadTag, ee.data.deleteAsset, ee.data.authenticateViaOauth, ee.data.copyAsset, ee.data.getTaskList, ee.data.getAssetRootQuota, ee.data.getTableDownloadId,
ee.data.renameAsset, ee.data.setAssetProperties, ee.data.makeDownloadUrl, ee.data.createFolder, ee.data.setAssetAcl, ee.data.getMapId, ee.data.setDefaultWorkloadTag, ee.data.updateTask, ee.data.startProcessing, ee.data.getTileUrl, ee.data.createAsset, ee.Date, ee.Deserializer.decodeCloudApi, ee.Deserializer.fromJSON, ee.Deserializer.decode, ee.Deserializer.fromCloudApiJSON, ee.Dictionary, ee.initialize, ee.Algorithms, ee.call, ee.reset, ee.InitState, ee.apply, ee.TILE_SIZE, ee.Element.prototype.set,
ee.Feature, ee.Feature.prototype.getMap, ee.Feature.prototype.getInfo, ee.FeatureCollection, ee.FeatureCollection.prototype.getInfo, ee.FeatureCollection.prototype.getDownloadURL, ee.FeatureCollection.prototype.getMap, ee.FeatureCollection.prototype.select, ee.Filter.and, ee.Filter.or, ee.Filter.gte, ee.Filter.date, ee.Filter.inList, ee.Filter, ee.Filter.prototype.not, ee.Filter.metadata, ee.Filter.eq, ee.Filter.neq, ee.Filter.bounds, ee.Filter.gt, ee.Filter.lte, ee.Filter.lt, ee.Function.prototype.apply,
ee.Function.prototype.call, ee.Geometry.Point, ee.Geometry.BBox, ee.Geometry.LinearRing, ee.Geometry.prototype.serialize, ee.Geometry.MultiPolygon, ee.Geometry, ee.Geometry.MultiPoint, ee.Geometry.MultiLineString, ee.Geometry.Rectangle, ee.Geometry.LineString, ee.Geometry.Polygon, ee.Geometry.prototype.toGeoJSON, ee.Geometry.prototype.toGeoJSONString, ee.Image.prototype.expression, ee.Image, ee.Image.prototype.rename, ee.Image.prototype.getMap, ee.Image.prototype.getDownloadURL, ee.Image.rgb, ee.Image.prototype.getInfo,
ee.Image.prototype.getThumbURL, ee.Image.prototype.getThumbId, ee.Image.prototype.clip, ee.Image.cat, ee.Image.prototype.select, ee.ImageCollection.prototype.getFilmstripThumbURL, ee.ImageCollection.prototype.getVideoThumbURL, ee.ImageCollection.prototype.getMap, ee.ImageCollection.prototype.getInfo, ee.ImageCollection.prototype.first, ee.ImageCollection.prototype.select, ee.ImageCollection, ee.List, ee.Number, ee.Serializer.encodeCloudApi, ee.Serializer.encode, ee.Serializer.toJSON, ee.Serializer.toReadableJSON,
ee.Serializer.encodeCloudApiPretty, ee.Serializer.toCloudApiJSON, ee.Serializer.toReadableCloudApiJSON, ee.String, ee.Terrain].forEach(function(fn, i) {
var exportedFnInfo = {}, orderedFnNames = "ee.ApiFunction._apply ee.ApiFunction._call ee.ApiFunction.lookup ee.batch.Export.image.toAsset ee.batch.Export.table.toDrive ee.batch.Export.image.toCloudStorage ee.batch.Export.table.toFeatureView ee.batch.Export.map.toCloudStorage ee.batch.Export.video.toDrive ee.batch.Export.video.toCloudStorage ee.batch.Export.table.toCloudStorage ee.batch.Export.image.toDrive ee.batch.Export.videoMap.toCloudStorage ee.batch.Export.table.toAsset ee.batch.Export.classifier.toAsset ee.Collection.prototype.filterMetadata ee.Collection.prototype.filterDate ee.Collection.prototype.iterate ee.Collection.prototype.filter ee.Collection.prototype.map ee.Collection.prototype.filterBounds ee.Collection.prototype.limit ee.Collection.prototype.sort ee.ComputedObject.prototype.aside ee.ComputedObject.prototype.evaluate ee.ComputedObject.prototype.getInfo ee.ComputedObject.prototype.serialize ee.data.copyAsset ee.data.listBuckets ee.data.setAssetAcl ee.data.authenticateViaPrivateKey ee.data.getTaskStatus ee.data.deleteAsset ee.data.authenticateViaPopup ee.data.listImages ee.data.startIngestion ee.data.cancelOperation ee.data.listOperations ee.data.authenticate ee.data.renameAsset ee.data.getThumbId ee.data.makeThumbUrl ee.data.authenticateViaOauth ee.data.makeTableDownloadUrl ee.data.getFilmstripThumbId ee.data.getVideoThumbId ee.data.getDownloadId ee.data.createFolder ee.data.createAssetHome ee.data.setAssetProperties ee.data.resetWorkloadTag ee.data.makeDownloadUrl ee.data.setDefaultWorkloadTag ee.data.getInfo ee.data.setWorkloadTag ee.data.getTableDownloadId ee.data.createAsset ee.data.getMapId ee.data.updateTask ee.data.startProcessing ee.data.getWorkloadTag ee.data.updateAsset ee.data.getAsset ee.data.cancelTask ee.data.getTileUrl ee.data.startTableIngestion ee.data.getOperation ee.data.getList ee.data.listAssets ee.data.getAssetRootQuota ee.data.getAssetRoots ee.data.getAssetAcl ee.data.getFeatureViewTilesKey ee.data.getTaskList ee.data.listFeatures ee.data.getTaskListWithLimit ee.data.computeValue ee.data.newTaskId ee.Date ee.Deserializer.decode ee.Deserializer.fromCloudApiJSON ee.Deserializer.fromJSON ee.Deserializer.decodeCloudApi ee.Dictionary ee.InitState ee.Algorithms ee.reset ee.apply ee.initialize ee.TILE_SIZE ee.call ee.Element.prototype.set ee.Feature ee.Feature.prototype.getMap ee.Feature.prototype.getInfo ee.FeatureCollection.prototype.getMap ee.FeatureCollection.prototype.select ee.FeatureCollection ee.FeatureCollection.prototype.getInfo ee.FeatureCollection.prototype.getDownloadURL ee.Filter.lt ee.Filter.and ee.Filter.or ee.Filter.gte ee.Filter.date ee.Filter.prototype.not ee.Filter.inList ee.Filter ee.Filter.eq ee.Filter.metadata ee.Filter.neq ee.Filter.bounds ee.Filter.gt ee.Filter.lte ee.Function.prototype.apply ee.Function.prototype.call ee.Geometry.prototype.toGeoJSON ee.Geometry.prototype.toGeoJSONString ee.Geometry.BBox ee.Geometry.Point ee.Geometry.LinearRing ee.Geometry.prototype.serialize ee.Geometry.MultiPolygon ee.Geometry ee.Geometry.MultiPoint ee.Geometry.MultiLineString ee.Geometry.Rectangle ee.Geometry.LineString ee.Geometry.Polygon ee.Image.prototype.getThumbId ee.Image.prototype.select ee.Image.cat ee.Image.prototype.expression ee.Image ee.Image.prototype.clip ee.Image.prototype.getMap ee.Image.prototype.rename ee.Image.prototype.getDownloadURL ee.Image.rgb ee.Image.prototype.getInfo ee.Image.prototype.getThumbURL ee.ImageCollection ee.ImageCollection.prototype.getFilmstripThumbURL ee.ImageCollection.prototype.getVideoThumbURL ee.ImageCollection.prototype.getMap ee.ImageCollection.prototype.getInfo ee.ImageCollection.prototype.first ee.ImageCollection.prototype.select ee.List ee.Number ee.Serializer.encode ee.Serializer.toJSON ee.Serializer.encodeCloudApi ee.Serializer.toReadableJSON ee.Serializer.toReadableCloudApiJSON ee.Serializer.encodeCloudApiPretty ee.Serializer.toCloudApiJSON ee.String ee.Terrain".split(" "),
orderedParamLists = [["name", "namedArgs"], ["name", "var_args"], ["name"], "image opt_description opt_assetId opt_pyramidingPolicy opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize".split(" "), "collection opt_description opt_folder opt_fileNamePrefix opt_fileFormat opt_selectors opt_maxVertices".split(" "), "image opt_description opt_bucket opt_fileNamePrefix opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize opt_fileDimensions opt_skipEmptyTiles opt_fileFormat opt_formatOptions".split(" "),
"collection opt_description opt_assetId opt_maxFeaturesPerTile opt_thinningStrategy opt_thinningRanking opt_zOrderRanking".split(" "), "image opt_description opt_bucket opt_fileFormat opt_path opt_writePublicTiles opt_scale opt_maxZoom opt_minZoom opt_region opt_skipEmptyTiles opt_mapsApiKey opt_bucketCorsUris".split(" "), "collection opt_description opt_folder opt_fileNamePrefix opt_framesPerSecond opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_maxFrames".split(" "),
"collection opt_description opt_bucket opt_fileNamePrefix opt_framesPerSecond opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_maxFrames".split(" "), "collection opt_description opt_bucket opt_fileNamePrefix opt_fileFormat opt_selectors opt_maxVertices".split(" "), "image opt_description opt_folder opt_fileNamePrefix opt_dimensions opt_region opt_scale opt_crs opt_crsTransform opt_maxPixels opt_shardSize opt_fileDimensions opt_skipEmptyTiles opt_fileFormat opt_formatOptions".split(" "),
"collection opt_description opt_bucket opt_fileNamePrefix opt_framesPerSecond opt_writePublicTiles opt_minZoom opt_maxZoom opt_scale opt_region opt_skipEmptyTiles opt_minTimeMachineZoomSubset opt_maxTimeMachineZoomSubset opt_tileWidth opt_tileHeight opt_tileStride opt_videoFormat opt_version opt_mapsApiKey opt_bucketCorsUris".split(" "), ["collection", "opt_description", "opt_assetId", "opt_maxVertices"], ["classifier", "opt_description", "opt_assetId"], ["name", "operator", "value"], ["start",
"opt_end"], ["algorithm", "opt_first"], ["filter"], ["algorithm", "opt_dropNulls"], ["geometry"], ["max", "opt_property", "opt_ascending"], ["property", "opt_ascending"], ["func", "var_args"], ["callback"], ["opt_callback"], ["legacy"], ["sourceId", "destinationId", "opt_overwrite", "opt_callback"], ["project", "opt_callback"], ["assetId", "aclUpdate", "opt_callback"], ["privateKey", "opt_success", "opt_error", "opt_extraScopes", "opt_suppressDefaultScopes"], ["taskId", "opt_callback"], ["assetId",
"opt_callback"], ["opt_success", "opt_error"], ["parent", "opt_params", "opt_callback"], ["taskId", "request", "opt_callback"], ["operationName", "opt_callback"], ["opt_limit", "opt_callback"], ["clientId", "success", "opt_error", "opt_extraScopes", "opt_onImmediateFailed"], ["sourceId", "destinationId", "opt_callback"], ["params", "opt_callback"], ["id"], "clientId success opt_error opt_extraScopes opt_onImmediateFailed opt_suppressDefaultScopes".split(" "), ["id"], ["params", "opt_callback"],
["params", "opt_callback"], ["params", "opt_callback"], ["path", "opt_force", "opt_callback"], ["requestedId", "opt_callback"], ["assetId", "properties", "opt_callback"], ["opt_resetDefault"], ["id"], ["tag"], ["id", "opt_callback"], ["tag"], ["params", "opt_callback"], ["value", "opt_path", "opt_force", "opt_properties", "opt_callback"], ["params", "opt_callback"], ["taskId", "action", "opt_callback"], ["taskId", "params", "opt_callback"], [], ["assetId", "asset", "updateFields", "opt_callback"],
["id", "opt_callback"], ["taskId", "opt_callback"], ["id", "x", "y", "z"], ["taskId", "request", "opt_callback"], ["operationName", "opt_callback"], ["params", "opt_callback"], ["parent", "opt_params", "opt_callback"], ["rootId", "opt_callback"], ["opt_callback"], ["assetId", "opt_callback"], ["params", "opt_callback"], ["opt_callback"], ["asset", "params", "opt_callback"], ["opt_limit", "opt_callback"], ["obj", "opt_callback"], ["opt_count", "opt_callback"], ["date", "opt_tz"], ["json"], ["json"],
["json"], ["json"], ["opt_dict"], [], [], [], ["func", "namedArgs"], "opt_baseurl opt_tileurl opt_successCallback opt_errorCallback opt_xsrfToken opt_project".split(" "), [], ["func", "var_args"], ["var_args"], ["geometry", "opt_properties"], ["opt_visParams", "opt_callback"], ["opt_callback"], ["opt_visParams", "opt_callback"], ["propertySelectors", "opt_newProperties", "opt_retainGeometry"], ["args", "opt_column"], ["opt_callback"], ["opt_format", "opt_selectors", "opt_filename", "opt_callback"],
["name", "value"], ["var_args"], ["var_args"], ["name", "value"], ["start", "opt_end"], [], ["opt_leftField", "opt_rightValue", "opt_rightField", "opt_leftValue"], ["opt_filter"], ["name", "value"], ["name", "operator", "value"], ["name", "value"], ["geometry", "opt_errorMargin"], ["name", "value"], ["name", "value"], ["namedArgs"], ["var_args"], [], [], ["west", "south", "east", "north"], ["coords", "opt_proj"], ["coords", "opt_proj", "opt_geodesic", "opt_maxError"], ["legacy"], ["coords", "opt_proj",
"opt_geodesic", "opt_maxError", "opt_evenOdd"], ["geoJson", "opt_proj", "opt_geodesic", "opt_evenOdd"], ["coords", "opt_proj"], ["coords", "opt_proj", "opt_geodesic", "opt_maxError"], ["coords", "opt_proj", "opt_geodesic", "opt_evenOdd"], ["coords", "opt_proj", "opt_geodesic", "opt_maxError"], ["coords", "opt_proj", "opt_geodesic", "opt_maxError", "opt_evenOdd"], ["params", "opt_callback"], ["var_args"], ["var_args"], ["expression", "opt_map"], ["opt_args"], ["geometry"], ["opt_visParams", "opt_callback"],
["var_args"], ["params", "opt_callback"], ["r", "g", "b"], ["opt_callback"], ["params", "opt_callback"], ["args"], ["params", "opt_callback"], ["params", "opt_callback"], ["opt_visParams", "opt_callback"], ["opt_callback"], [], ["selectors", "opt_names"], ["list"], ["number"], ["obj", "opt_isCompound"], ["obj"], ["obj"], ["obj"], ["obj"], ["obj"], ["obj"], ["string"], []];
[ee.ApiFunction._apply, ee.ApiFunction._call, ee.ApiFunction.lookup, module$contents$ee$batch_Export.image.toAsset, module$contents$ee$batch_Export.table.toDrive, module$contents$ee$batch_Export.image.toCloudStorage, module$contents$ee$batch_Export.table.toFeatureView, module$contents$ee$batch_Export.map.toCloudStorage, module$contents$ee$batch_Export.video.toDrive, module$contents$ee$batch_Export.video.toCloudStorage, module$contents$ee$batch_Export.table.toCloudStorage, module$contents$ee$batch_Export.image.toDrive,
module$contents$ee$batch_Export.videoMap.toCloudStorage, module$contents$ee$batch_Export.table.toAsset, module$contents$ee$batch_Export.classifier.toAsset, ee.Collection.prototype.filterMetadata, ee.Collection.prototype.filterDate, ee.Collection.prototype.iterate, ee.Collection.prototype.filter, ee.Collection.prototype.map, ee.Collection.prototype.filterBounds, ee.Collection.prototype.limit, ee.Collection.prototype.sort, ee.ComputedObject.prototype.aside, ee.ComputedObject.prototype.evaluate, ee.ComputedObject.prototype.getInfo,
ee.ComputedObject.prototype.serialize, ee.data.copyAsset, ee.data.listBuckets, ee.data.setAssetAcl, ee.data.authenticateViaPrivateKey, ee.data.getTaskStatus, ee.data.deleteAsset, ee.data.authenticateViaPopup, ee.data.listImages, ee.data.startIngestion, ee.data.cancelOperation, ee.data.listOperations, ee.data.authenticate, ee.data.renameAsset, ee.data.getThumbId, ee.data.makeThumbUrl, ee.data.authenticateViaOauth, ee.data.makeTableDownloadUrl, ee.data.getFilmstripThumbId, ee.data.getVideoThumbId,
ee.data.getDownloadId, ee.data.createFolder, ee.data.createAssetHome, ee.data.setAssetProperties, ee.data.resetWorkloadTag, ee.data.makeDownloadUrl, ee.data.setDefaultWorkloadTag, ee.data.getInfo, ee.data.setWorkloadTag, ee.data.getTableDownloadId, ee.data.createAsset, ee.data.getMapId, ee.data.updateTask, ee.data.startProcessing, ee.data.getWorkloadTag, ee.data.updateAsset, ee.data.getAsset, ee.data.cancelTask, ee.data.getTileUrl, ee.data.startTableIngestion, ee.data.getOperation, ee.data.getList,
ee.data.listAssets, ee.data.getAssetRootQuota, ee.data.getAssetRoots, ee.data.getAssetAcl, ee.data.getFeatureViewTilesKey, ee.data.getTaskList, ee.data.listFeatures, ee.data.getTaskListWithLimit, ee.data.computeValue, ee.data.newTaskId, ee.Date, ee.Deserializer.decode, ee.Deserializer.fromCloudApiJSON, ee.Deserializer.fromJSON, ee.Deserializer.decodeCloudApi, ee.Dictionary, ee.InitState, ee.Algorithms, ee.reset, ee.apply, ee.initialize, ee.TILE_SIZE, ee.call, ee.Element.prototype.set, ee.Feature,
ee.Feature.prototype.getMap, ee.Feature.prototype.getInfo, ee.FeatureCollection.prototype.getMap, ee.FeatureCollection.prototype.select, ee.FeatureCollection, ee.FeatureCollection.prototype.getInfo, ee.FeatureCollection.prototype.getDownloadURL, ee.Filter.lt, ee.Filter.and, ee.Filter.or, ee.Filter.gte, ee.Filter.date, ee.Filter.prototype.not, ee.Filter.inList, ee.Filter, ee.Filter.eq, ee.Filter.metadata, ee.Filter.neq, ee.Filter.bounds, ee.Filter.gt, ee.Filter.lte, ee.Function.prototype.apply,
ee.Function.prototype.call, ee.Geometry.prototype.toGeoJSON, ee.Geometry.prototype.toGeoJSONString, ee.Geometry.BBox, ee.Geometry.Point, ee.Geometry.LinearRing, ee.Geometry.prototype.serialize, ee.Geometry.MultiPolygon, ee.Geometry, ee.Geometry.MultiPoint, ee.Geometry.MultiLineString, ee.Geometry.Rectangle, ee.Geometry.LineString, ee.Geometry.Polygon, ee.Image.prototype.getThumbId, ee.Image.prototype.select, ee.Image.cat, ee.Image.prototype.expression, ee.Image, ee.Image.prototype.clip, ee.Image.prototype.getMap,
ee.Image.prototype.rename, ee.Image.prototype.getDownloadURL, ee.Image.rgb, ee.Image.prototype.getInfo, ee.Image.prototype.getThumbURL, ee.ImageCollection, ee.ImageCollection.prototype.getFilmstripThumbURL, ee.ImageCollection.prototype.getVideoThumbURL, ee.ImageCollection.prototype.getMap, ee.ImageCollection.prototype.getInfo, ee.ImageCollection.prototype.first, ee.ImageCollection.prototype.select, ee.List, ee.Number, ee.Serializer.encode, ee.Serializer.toJSON, ee.Serializer.encodeCloudApi, ee.Serializer.toReadableJSON,
ee.Serializer.toReadableCloudApiJSON, ee.Serializer.encodeCloudApiPretty, ee.Serializer.toCloudApiJSON, ee.String, ee.Terrain].forEach(function(fn, i) {
fn && (exportedFnInfo[fn.toString()] = {name:orderedFnNames[i], paramNames:orderedParamLists[i]});
});
goog.global.EXPORTED_FN_INFO = exportedFnInfo;

View File

@ -1,6 +1,6 @@
{
"name": "@google/earthengine",
"version": "0.1.351",
"version": "0.1.352",
"description": "JavaScript client for Google Earth Engine API.",
"author": "Google LLC",
"license": "Apache-2.0",

View File

@ -25,7 +25,7 @@ const {PromiseRequestService} = goog.require('eeapiclient.promise_request_servic
/** @namespace */
const apiclient = {};
const API_CLIENT_VERSION = '0.1.351';
const API_CLIENT_VERSION = '0.1.352';
exports.VERSION = apiVersion.VERSION;
exports.API_CLIENT_VERSION = API_CLIENT_VERSION;

View File

@ -780,6 +780,7 @@ const FORMAT_OPTIONS_MAP = {
'GEO_TIFF': [
'cloudOptimized',
'fileDimensions',
'noData',
'shardSize',
],
'TF_RECORD_IMAGE': [

View File

@ -306,7 +306,7 @@ ee.rpc_convert_batch.buildGeoTiffFormatOptions_ = function(params) {
Boolean(params['skipEmptyTiles'] || params['tiffSkipEmptyFiles']),
tileDimensions: ee.rpc_convert_batch.buildGridDimensions_(fileDimensions),
tileSize: numberOrNull_(tileSize),
noData: noDataOrNull_(params['noData']),
noData: noDataOrNull_(params['tiffNoData']),
});
};

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python
"""The EE Python library."""
__version__ = '0.1.351'
__version__ = '0.1.352'
# Using lowercase function naming to match the JavaScript names.
# pylint: disable=g-bad-name

View File

@ -184,10 +184,13 @@ def build_cloud_resource(api_base_url,
return resource
def build_cloud_resource_from_document(discovery_document,
http_transport=None,
headers_supplier=None,
response_inspector=None):
def build_cloud_resource_from_document(
discovery_document,
http_transport=None,
headers_supplier=None,
response_inspector=None,
raw=False,
):
"""Builds an Earth Engine Cloud API resource from a description of the API.
This version is intended for use in tests.
@ -199,6 +202,7 @@ def build_cloud_resource_from_document(discovery_document,
to a request. Will be called once for each request.
response_inspector: A callable that will be invoked with the raw
httplib2.Response responses.
raw: Whether to return raw bytes when making method requests.
Returns:
A resource object to use to call the Cloud API.
@ -206,10 +210,13 @@ def build_cloud_resource_from_document(discovery_document,
request_builder = _wrap_request(headers_supplier, response_inspector)
if http_transport is None:
http_transport = _Http()
alt_model = model.RawModel() if raw else None
return discovery.build_from_document(
discovery_document,
http=http_transport,
requestBuilder=request_builder)
requestBuilder=request_builder,
model=alt_model,
)
def _convert_dict(to_convert,

View File

@ -87,27 +87,40 @@ class ApiTestCase(unittest.TestCase):
return {'docid': '5', 'token': '6'}
def _GenerateCloudApiResource(mock_http, raw):
"""Returns a Cloud API resource for testing."""
discovery_doc_path = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
"tests/cloud_api_discovery_document.json")
with open(discovery_doc_path) as discovery_doc_file:
discovery_doc_str = discovery_doc_file.read()
return _cloud_api_utils.build_cloud_resource_from_document(
json.loads(discovery_doc_str),
http_transport=mock_http,
headers_supplier=ee.data._make_request_headers, # pylint: disable=protected-access
response_inspector=ee.data._handle_profiling_response, # pylint: disable=protected-access
raw=raw,
)
@contextlib.contextmanager
def UsingCloudApi(cloud_api_resource=None, mock_http=None):
def UsingCloudApi(
cloud_api_resource=None, cloud_api_resource_raw=None, mock_http=None
):
"""Returns a context manager under which the Cloud API is enabled."""
old_cloud_api_resource = ee.data._cloud_api_resource
old_cloud_api_resource = ee.data._cloud_api_resource # pylint: disable=protected-access
old_cloud_api_resource_raw = ee.data._cloud_api_resource_raw # pylint: disable=protected-access
try:
if cloud_api_resource is None:
discovery_doc_path = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
"tests/cloud_api_discovery_document.json")
with open(discovery_doc_path) as discovery_doc_file:
discovery_doc_str = discovery_doc_file.read()
cloud_api_resource = (
_cloud_api_utils.build_cloud_resource_from_document(
json.loads(discovery_doc_str),
http_transport=mock_http,
headers_supplier=ee.data._make_request_headers,
response_inspector=ee.data._handle_profiling_response))
ee.data._cloud_api_resource = cloud_api_resource
cloud_api_resource = _GenerateCloudApiResource(mock_http, False)
if cloud_api_resource_raw is None:
cloud_api_resource_raw = _GenerateCloudApiResource(mock_http, True)
ee.data._cloud_api_resource = cloud_api_resource # pylint: disable=protected-access
ee.data._cloud_api_resource_raw = cloud_api_resource_raw # pylint: disable=protected-access
yield
finally:
ee.data._cloud_api_resource = old_cloud_api_resource
ee.data._cloud_api_resource = old_cloud_api_resource # pylint: disable=protected-access
ee.data._cloud_api_resource_raw = old_cloud_api_resource_raw # pylint: disable=protected-access
# A sample of encoded EE API JSON, used by SerializerTest and DeserializerTest.

View File

@ -886,14 +886,6 @@ IMAGE_FORMAT_FIELD = 'fileFormat'
# Image format-specific options dictionary config field.
IMAGE_FORMAT_OPTIONS_FIELD = 'formatOptions'
# Format-specific options permitted in formatOptions config parameter.
ALLOWED_FORMAT_OPTIONS = {
'tiffCloudOptimized', 'tiffFileDimensions', 'tfrecordPatchDimensions',
'tfrecordKernelSize', 'tfrecordCompressed', 'tfrecordMaxFileSize',
'tfrecordDefaultValue', 'tfrecordTensorDepths', 'tfrecordSequenceData',
'tfrecordCollapseBands', 'tfrecordMaskedThreshold'
}
# Export destinations which do not require file format/options configuration.
NON_FILE_DESTINATIONS = frozenset([
Task.ExportDestination.ASSET,
@ -917,63 +909,6 @@ def _ConvertConfigParams(config):
return updatedConfig
# TODO(user): This method and its uses are very hack-y, and once we're using One
# Platform API we should stop sending arbitrary parameters from "options".
def ConvertFormatSpecificParams(configDict):
"""Mutates configDict into server params by extracting format options.
For example:
{'fileFormat': 'GeoTIFF', 'formatOptions': {'cloudOptimized': true}}
becomes:
{'fileFormat': 'GeoTIFF', 'tiffCloudOptimized': true}
Also performs checks to make sure any specified options are valid and/or
won't collide with top level arguments when converted to server-friendly
parameters.
Args:
configDict: A task config dict
Raises:
EEException: We were unable to create format specific parameters for the
server.
"""
formatString = 'GeoTIFF'
if IMAGE_FORMAT_FIELD in configDict:
formatString = configDict[IMAGE_FORMAT_FIELD]
formatString = formatString.upper()
if formatString not in FORMAT_PREFIX_MAP:
raise ee_exception.EEException(
'Invalid file format. Currently only "GeoTIFF" and "TFRecord" is '
'supported.')
if IMAGE_FORMAT_OPTIONS_FIELD in configDict:
options = configDict.pop(IMAGE_FORMAT_OPTIONS_FIELD)
if set(options) & set(configDict):
raise ee_exception.EEException(
'Parameter specified at least twice: once in config, '
'and once in format options.')
prefix = FORMAT_PREFIX_MAP[formatString]
_CheckConfigDisallowedPrefixes(configDict, prefix)
prefixedOptions = {}
for key, value in options.items():
prefixedKey = prefix + key[:1].upper() + key[1:]
if prefixedKey not in ALLOWED_FORMAT_OPTIONS:
raise ee_exception.EEException(
'"{}" is not a valid option for "{}".'.format(
key, formatString))
prefixedOptions[prefixedKey] = value
prefixedOptions.update(_ConvertConfigParams(prefixedOptions))
configDict.update(prefixedOptions)
def _prepare_image_export_config(image, config, export_destination):
"""Performs all preparation steps for an image export.
@ -1223,6 +1158,10 @@ def _build_image_file_export_options(config, export_destination):
geo_tiff_options = {}
if file_format_options.pop('cloudOptimized', False):
geo_tiff_options['cloudOptimized'] = True
if 'noData' in file_format_options:
geo_tiff_options['noData'] = {
'floatValue': file_format_options.pop('noData')
}
file_dimensions = file_format_options.pop('fileDimensions', None)
if 'fileDimensions' in config:
if file_dimensions is not None:
@ -1239,8 +1178,6 @@ def _build_image_file_export_options(config, export_destination):
geo_tiff_options['skipEmptyFiles'] = True
if config.get('shardSize', None):
geo_tiff_options['tileSize'] = {'value': config.pop('shardSize')}
if config.get('noData', None):
geo_tiff_options['noData'] = {'floatValue': config.pop('noData')}
if geo_tiff_options:
file_export_options['geoTiffOptions'] = geo_tiff_options
elif file_format == 'TF_RECORD_IMAGE':

View File

@ -553,7 +553,7 @@ class AclChCommand(object):
# We previously used "AllUsers" as the magic string to denote that we wanted
# to apply some permission to everyone. However, Google Cloud convention for
# this concept is "allUsers". Because some people might be using one and
# some the other, we do a case-insentive comparison.
# some the other, we do a case-insensitive comparison.
return user.lower() == ALL_USERS.lower()

View File

@ -284,11 +284,20 @@ def _install_cloud_api_resource():
raw=True)
def _get_cloud_api_resource():
if _cloud_api_resource is None:
def _verify_cloud_api_resource():
if _cloud_api_resource is None or _cloud_api_resource_raw is None:
raise ee_exception.EEException(
'Earth Engine client library not initialized. Run `ee.Initialize()`')
return _cloud_api_resource
def _get_cloud_projects():
_verify_cloud_api_resource()
return _cloud_api_resource.projects()
def _get_cloud_projects_raw():
_verify_cloud_api_resource()
return _cloud_api_resource_raw.projects()
def _make_request_headers():
@ -440,9 +449,13 @@ def getInfo(asset_id):
# Don't use getAsset as it will translate the exception, and we need
# to handle 404s specially.
try:
return _get_cloud_api_resource().projects().assets().get(
name=_cloud_api_utils.convert_asset_id_to_asset_name(asset_id),
prettyPrint=False).execute(num_retries=MAX_RETRIES)
name = _cloud_api_utils.convert_asset_id_to_asset_name(asset_id)
return (
_get_cloud_projects()
.assets()
.get(name=name, prettyPrint=False)
.execute(num_retries=MAX_RETRIES)
)
except googleapiclient.errors.HttpError as e:
if e.resp.status == 404:
return None
@ -459,9 +472,10 @@ def getAsset(asset_id):
Returns:
The asset's information, as an EarthEngineAsset.
"""
return _execute_cloud_call(_get_cloud_api_resource().projects().assets().get(
name=_cloud_api_utils.convert_asset_id_to_asset_name(asset_id),
prettyPrint=False))
name = _cloud_api_utils.convert_asset_id_to_asset_name(asset_id)
return _execute_cloud_call(
_get_cloud_projects().assets().get(name=name, prettyPrint=False)
)
@deprecation.Deprecated('Use listAssets or listImages')
@ -544,9 +558,9 @@ def listAssets(params):
# wants to list their cloud assets, to do this we call the alternative
# listAssets method and remove the trailing '/assets/?'
params['parent'] = re.sub('/assets/?$', '', params['parent'])
cloud_resource_root = _get_cloud_api_resource().projects()
cloud_resource_root = _get_cloud_projects()
else:
cloud_resource_root = _get_cloud_api_resource().projects().assets()
cloud_resource_root = _get_cloud_projects().assets()
request = cloud_resource_root.listAssets(**params)
response = None
while request is not None:
@ -568,8 +582,7 @@ def listAssets(params):
def listBuckets(project=None):
if project is None:
project = _get_projects_path()
return _execute_cloud_call(
_get_cloud_api_resource().projects().listAssets(parent=project))
return _execute_cloud_call(_get_cloud_projects().listAssets(parent=project))
def getMapId(params):
@ -633,8 +646,10 @@ def getMapId(params):
}
_maybe_populate_workload_tag(queryParams)
result = _execute_cloud_call(
_get_cloud_api_resource().projects().maps().create(
parent=_get_projects_path(), **queryParams))
_get_cloud_projects()
.maps()
.create(parent=_get_projects_path(), **queryParams)
)
map_name = result['name']
url_format = '%s/%s/%s/tiles/{z}/{x}/{y}' % (
_tile_base_url, _cloud_api_utils.VERSION, map_name)
@ -669,8 +684,10 @@ def getFeatureViewTilesKey(params):
# Returns only the `name` field, otherwise it echoes the entire request, which
# might be large.
result = _execute_cloud_call(
_get_cloud_api_resource().projects().featureView().create(
parent=_get_projects_path(), fields='name', body=request))
_get_cloud_projects()
.featureView()
.create(parent=_get_projects_path(), fields='name', body=request)
)
name = result['name']
version = _cloud_api_utils.VERSION
format_tile_url = (
@ -708,8 +725,13 @@ def listFeatures(params):
params['asset'] = _cloud_api_utils.convert_asset_id_to_asset_name(
params.get('assetId'))
del params['assetId']
return _execute_cloud_call(
_get_cloud_api_resource().projects().assets().listFeatures(**params))
def call(params):
return _execute_cloud_call(
_get_cloud_projects().assets().listFeatures(**params)
)
return call(params)
def getPixels(params):
@ -740,9 +762,12 @@ def getPixels(params):
del params['assetId']
params['fileFormat'] = _cloud_api_utils.convert_to_image_file_format(
params.get('fileFormat'))
return _execute_cloud_call(
_cloud_api_resource_raw.projects().assets().getPixels(
name=name, body=params))
data = _execute_cloud_call(
_get_cloud_projects_raw()
.assets()
.getPixels(name=name, body=params)
)
return data
def computePixels(params):
@ -771,9 +796,12 @@ def computePixels(params):
params['fileFormat'] = _cloud_api_utils.convert_to_image_file_format(
params.get('fileFormat'))
_maybe_populate_workload_tag(params)
return _execute_cloud_call(
_cloud_api_resource_raw.projects().image().computePixels(
project=_get_projects_path(), body=params))
data = _execute_cloud_call(
_get_cloud_projects_raw()
.image()
.computePixels(project=_get_projects_path(), body=params)
)
return data
def computeImages(params):
@ -796,8 +824,10 @@ def computeImages(params):
params['expression'] = serializer.encode(params['expression'])
_maybe_populate_workload_tag(params)
return _execute_cloud_call(
_cloud_api_resource.projects().imageCollection().computeImages(
project=_get_projects_path(), body=params))
_get_cloud_projects()
.imageCollection()
.computeImages(project=_get_projects_path(), body=params)
)
def computeFeatures(params):
@ -819,9 +849,15 @@ def computeFeatures(params):
params = params.copy()
params['expression'] = serializer.encode(params['expression'])
_maybe_populate_workload_tag(params)
return _execute_cloud_call(
_cloud_api_resource.projects().table().computeFeatures(
project=_get_projects_path(), body=params))
def call(params):
return _execute_cloud_call(
_get_cloud_projects()
.table()
.computeFeatures(project=_get_projects_path(), body=params)
)
return call(params)
def getTileUrl(mapid, x, y, z):
@ -895,9 +931,10 @@ class TileFetcher(object):
EEException if the fetch fails.
"""
return _execute_cloud_call(
_cloud_api_resource_raw.projects().maps().tiles().get(
parent=self._map_name, x=x, y=y, zoom=z,
), num_retries=MAX_RETRIES
_get_cloud_projects_raw()
.maps()
.tiles()
.get(parent=self._map_name, x=x, y=y, zoom=z)
)
@ -914,10 +951,10 @@ def computeValue(obj):
_maybe_populate_workload_tag(body)
return _execute_cloud_call(
_get_cloud_api_resource().projects().value().compute(
body=body,
project=_get_projects_path(),
prettyPrint=False))['result']
_get_cloud_projects()
.value()
.compute(body=body, project=_get_projects_path(), prettyPrint=False)
)['result']
@deprecation.Deprecated('Use getThumbId and makeThumbUrl')
@ -942,21 +979,15 @@ def getThumbnail(params, thumbType=None):
thumbid = params['image'].getThumbId(params)['thumbid']
if thumbType == 'video':
return _execute_cloud_call(
_cloud_api_resource_raw.projects().videoThumbnails().getPixels(
name=thumbid
), num_retries=MAX_RETRIES
_get_cloud_projects_raw().videoThumbnails().getPixels(name=thumbid)
)
elif thumbType == 'filmstrip':
return _execute_cloud_call(
_cloud_api_resource_raw.projects().filmstripThumbnails().getPixels(
name=thumbid
), num_retries=MAX_RETRIES
_get_cloud_projects_raw().filmstripThumbnails().getPixels(name=thumbid)
)
else:
return _execute_cloud_call(
_cloud_api_resource_raw.projects().thumbnails().getPixels(
name=thumbid
), num_retries=MAX_RETRIES
_get_cloud_projects_raw().thumbnails().getPixels(name=thumbid)
)
@ -1018,21 +1049,28 @@ def getThumbId(params, thumbType=None):
'framesPerSecond': params.get('framesPerSecond')
}
result = _execute_cloud_call(
_get_cloud_api_resource().projects().videoThumbnails().create(
parent=_get_projects_path(), **queryParams))
_get_cloud_projects()
.videoThumbnails()
.create(parent=_get_projects_path(), **queryParams)
)
elif thumbType == 'filmstrip':
# Currently only 'VERTICAL' thumbnails are supported.
request['orientation'] = 'VERTICAL'
result = _execute_cloud_call(
_get_cloud_api_resource().projects().filmstripThumbnails().create(
parent=_get_projects_path(), **queryParams))
_get_cloud_projects()
.filmstripThumbnails()
.create(parent=_get_projects_path(), **queryParams)
)
else:
request['filenamePrefix'] = params.get('name')
request['bandIds'] = _cloud_api_utils.convert_to_band_list(
params.get('bands'))
params.get('bands')
)
result = _execute_cloud_call(
_get_cloud_api_resource().projects().thumbnails().create(
parent=_get_projects_path(), **queryParams))
_get_cloud_projects()
.thumbnails()
.create(parent=_get_projects_path(), **queryParams)
)
return {'thumbid': result['name'], 'token': ''}
@ -1157,8 +1195,10 @@ def getDownloadId(params):
}
_maybe_populate_workload_tag(queryParams)
result = _execute_cloud_call(
_get_cloud_api_resource().projects().thumbnails().create(
parent=_get_projects_path(), **queryParams))
_get_cloud_projects()
.thumbnails()
.create(parent=_get_projects_path(), **queryParams)
)
return {'docid': result['name'], 'token': ''}
@ -1217,8 +1257,10 @@ def getTableDownloadId(params):
}
_maybe_populate_workload_tag(queryParams)
result = _execute_cloud_call(
_get_cloud_api_resource().projects().tables().create(
parent=_get_projects_path(), **queryParams))
_get_cloud_projects()
.tables()
.create(parent=_get_projects_path(), **queryParams)
)
return {'docid': result['name'], 'token': ''}
@ -1252,11 +1294,17 @@ def getAlgorithms():
is not specified.
"""
try:
call = _get_cloud_api_resource().projects().algorithms().list(
parent=_get_projects_path(), prettyPrint=False)
call = (
_get_cloud_projects()
.algorithms()
.list(parent=_get_projects_path(), prettyPrint=False)
)
except TypeError:
call = _get_cloud_api_resource().projects().algorithms().list(
project=_get_projects_path(), prettyPrint=False)
call = (
_get_cloud_projects()
.algorithms()
.list(project=_get_projects_path(), prettyPrint=False)
)
def inspect(response):
if _INIT_MESSAGE_HEADER in response:
@ -1302,11 +1350,15 @@ def createAsset(
asset['type'])
parent, asset_id = _cloud_api_utils.split_asset_name(asset.pop('name'))
return _execute_cloud_call(
_get_cloud_api_resource().projects().assets().create(
_get_cloud_projects()
.assets()
.create(
parent=parent,
assetId=asset_id,
body=asset,
prettyPrint=False))
prettyPrint=False,
)
)
def copyAsset(sourceId, destinationId, allowOverwrite=False
@ -1324,11 +1376,10 @@ def copyAsset(sourceId, destinationId, allowOverwrite=False
'overwrite':
allowOverwrite
}
_execute_cloud_call(_get_cloud_api_resource().projects().assets().copy(
sourceName=_cloud_api_utils.convert_asset_id_to_asset_name(sourceId),
body=request))
return
name = _cloud_api_utils.convert_asset_id_to_asset_name(sourceId)
_execute_cloud_call(
_get_cloud_projects().assets().copy(sourceName=name, body=request)
)
def renameAsset(sourceId, destinationId):
@ -1338,13 +1389,13 @@ def renameAsset(sourceId, destinationId):
sourceId: The ID of the asset to rename.
destinationId: The new ID of the asset.
"""
_execute_cloud_call(_get_cloud_api_resource().projects().assets().move(
sourceName=_cloud_api_utils.convert_asset_id_to_asset_name(sourceId),
body={
'destinationName':
_cloud_api_utils.convert_asset_id_to_asset_name(destinationId)
}))
return
src_name = _cloud_api_utils.convert_asset_id_to_asset_name(sourceId)
dest_name = _cloud_api_utils.convert_asset_id_to_asset_name(destinationId)
_execute_cloud_call(
_get_cloud_projects()
.assets()
.move(sourceName=src_name, body={'destinationName': dest_name})
)
def deleteAsset(assetId):
@ -1353,9 +1404,8 @@ def deleteAsset(assetId):
Args:
assetId: The ID of the asset to delete.
"""
_execute_cloud_call(_get_cloud_api_resource().projects().assets().delete(
name=_cloud_api_utils.convert_asset_id_to_asset_name(assetId)))
return
name = _cloud_api_utils.convert_asset_id_to_asset_name(assetId)
_execute_cloud_call(_get_cloud_projects().assets().delete(name=name))
def newTaskId(count=1):
@ -1397,16 +1447,15 @@ def listOperations(project=None):
if project is None:
project = _get_projects_path()
operations = []
request = _get_cloud_api_resource().projects().operations().list(
pageSize=_TASKLIST_PAGE_SIZE, name=project)
request = (
_get_cloud_projects()
.operations()
.list(pageSize=_TASKLIST_PAGE_SIZE, name=project)
)
while request is not None:
try:
response = request.execute(num_retries=MAX_RETRIES)
operations += response.get('operations', [])
request = _cloud_api_resource.projects().operations().list_next(
request, response)
except googleapiclient.errors.HttpError as e:
raise _translate_cloud_exception(e)
response = _execute_cloud_call(request)
operations += response.get('operations', [])
request = _get_cloud_projects().operations().list_next(request, response)
return operations
@ -1433,9 +1482,12 @@ def getTaskStatus(taskId):
try:
# Don't use getOperation as it will translate the exception, and we need
# to handle 404s specially.
operation = _get_cloud_api_resource().projects().operations().get(
name=_cloud_api_utils.convert_task_id_to_operation_name(
one_id)).execute(num_retries=MAX_RETRIES)
operation = (
_get_cloud_projects()
.operations()
.get(name=_cloud_api_utils.convert_task_id_to_operation_name(one_id))
.execute(num_retries=MAX_RETRIES)
)
result.append(_cloud_api_utils.convert_operation_to_task(operation))
except googleapiclient.errors.HttpError as e:
if e.resp.status == 404:
@ -1456,8 +1508,8 @@ def getOperation(operation_name):
An Operation status dictionary for the requested operation.
"""
return _execute_cloud_call(
_get_cloud_api_resource().projects().operations().get(
name=operation_name))
_get_cloud_projects().operations().get(name=operation_name)
)
@deprecation.Deprecated('Use cancelOperation')
@ -1468,8 +1520,9 @@ def cancelTask(taskId):
def cancelOperation(operation_name):
_execute_cloud_call(_get_cloud_api_resource().projects().operations().cancel(
name=operation_name, body={}))
_execute_cloud_call(
_get_cloud_projects().operations().cancel(name=operation_name, body={})
)
def exportImage(request_id, params):
@ -1495,8 +1548,8 @@ def exportImage(request_id, params):
"""
params = params.copy()
return _prepare_and_run_export(
request_id, params,
_get_cloud_api_resource().projects().image().export)
request_id, params, _get_cloud_projects().image().export
)
def exportTable(request_id, params):
@ -1522,8 +1575,8 @@ def exportTable(request_id, params):
"""
params = params.copy()
return _prepare_and_run_export(
request_id, params,
_get_cloud_api_resource().projects().table().export)
request_id, params, _get_cloud_projects().table().export
)
def exportVideo(request_id, params):
@ -1549,8 +1602,8 @@ def exportVideo(request_id, params):
"""
params = params.copy()
return _prepare_and_run_export(
request_id, params,
_get_cloud_api_resource().projects().video().export)
request_id, params, _get_cloud_projects().video().export
)
def exportMap(request_id, params):
@ -1576,8 +1629,8 @@ def exportMap(request_id, params):
"""
params = params.copy()
return _prepare_and_run_export(
request_id, params,
_get_cloud_api_resource().projects().map().export)
request_id, params, _get_cloud_projects().map().export
)
def _prepare_and_run_export(request_id, params, export_endpoint):
@ -1589,7 +1642,7 @@ def _prepare_and_run_export(request_id, params, export_endpoint):
parameter can be the actual object to be exported, not its serialized
form. This may be modified.
export_endpoint: A callable representing the export endpoint to invoke
(e.g., _cloud_api_resource.image().export).
(e.g., _get_cloud_api_resource().image().export).
Returns:
An Operation with information about the created task.
@ -1657,9 +1710,11 @@ def startIngestion(request_id, params, allow_overwrite=False):
# idempotent.
num_retries = MAX_RETRIES if request_id else 0
operation = _execute_cloud_call(
_get_cloud_api_resource().projects().image().import_(
project=_get_projects_path(), body=request),
num_retries=num_retries)
_get_cloud_projects()
.image()
.import_(project=_get_projects_path(), body=request),
num_retries=num_retries,
)
return {
'id':
_cloud_api_utils.convert_operation_name_to_task_id(
@ -1705,9 +1760,11 @@ def startTableIngestion(request_id, params, allow_overwrite=False):
# idempotent.
num_retries = MAX_RETRIES if request_id else 0
operation = _execute_cloud_call(
_get_cloud_api_resource().projects().table().import_(
project=_get_projects_path(), body=request),
num_retries=num_retries)
_get_cloud_projects()
.table()
.import_(project=_get_projects_path(), body=request),
num_retries=num_retries,
)
return {
'id':
_cloud_api_utils.convert_operation_name_to_task_id(
@ -1801,11 +1858,12 @@ def getIamPolicy(asset_id):
Returns:
The asset's ACL, as an IAM Policy.
"""
name = _cloud_api_utils.convert_asset_id_to_asset_name(asset_id)
return _execute_cloud_call(
_get_cloud_api_resource().projects().assets().getIamPolicy(
resource=_cloud_api_utils.convert_asset_id_to_asset_name(asset_id),
body={},
prettyPrint=False))
_get_cloud_projects()
.assets()
.getIamPolicy(resource=name, body={}, prettyPrint=False)
)
@deprecation.Deprecated('Use setIamPolicy')
@ -1839,11 +1897,12 @@ def setIamPolicy(asset_id, policy):
Returns:
The new ACL, as an IAM Policy.
"""
name = _cloud_api_utils.convert_asset_id_to_asset_name(asset_id)
return _execute_cloud_call(
_get_cloud_api_resource().projects().assets().setIamPolicy(
resource=_cloud_api_utils.convert_asset_id_to_asset_name(asset_id),
body={'policy': policy},
prettyPrint=False))
_get_cloud_projects()
.assets()
.setIamPolicy(resource=name, body={'policy': policy}, prettyPrint=False)
)
def setAssetProperties(assetId, properties):
@ -1883,13 +1942,13 @@ def updateAsset(asset_id, asset, update_mask):
empty, all properties and both timestamps will be updated.
"""
name = _cloud_api_utils.convert_asset_id_to_asset_name(asset_id)
_execute_cloud_call(_get_cloud_api_resource().projects().assets().patch(
name=name, body={
'updateMask': {
'paths': update_mask
},
'asset': asset
}))
_execute_cloud_call(
_get_cloud_projects()
.assets()
.patch(
name=name, body={'updateMask': {'paths': update_mask}, 'asset': asset}
)
)
def createAssetHome(requestedId):

View File

@ -1,6 +1,5 @@
#!/usr/bin/env python
"""Test for the ee.batch module."""
import copy
from unittest import mock
import unittest
@ -112,7 +111,7 @@ class BatchTestCase(apitestcase.ApiTestCase):
tiffCloudOptimized=True,
shardSize=512,
fileDimensions=1024,
noData=1,
formatOptions={'noData': 1},
)
task = ee.batch.Export.image(ee.Image(1), 'TestDescription', config)
expected_expression = ee.Image(1).reproject(
@ -348,72 +347,6 @@ class BatchTestCase(apitestcase.ApiTestCase):
},
}, task.config)
def testUnknownFileFormat(self):
self.assertRaisesRegex(ee.EEException, '.*file format.*',
ee.batch.ConvertFormatSpecificParams,
{'fileFormat': 'mp3'})
def testFormatParamSpecifiedTwice(self):
self.assertRaisesRegex(ee.EEException, '.*at least twice.*',
ee.batch.ConvertFormatSpecificParams, {
'cloudOptimized': False,
'formatOptions': {
'cloudOptimized': True
}
})
def testDisallowedFormatPrefix(self):
self.assertRaisesRegex(ee.EEException, '.*prefix "tiff" disallowed.*',
ee.batch.ConvertFormatSpecificParams, {
'tiffCloudOptimized': False,
'formatOptions': {
'cloudOptimized': True
}
})
def testUnknownFormatOption(self):
self.assertRaisesRegex(ee.EEException, '.*not a valid option.*',
ee.batch.ConvertFormatSpecificParams,
{'formatOptions': {
'garbage': 0
}})
def testConvertFormat(self):
config = {
'fieldA': 1,
'fieldB': 3,
'fileFormat': 'GEoTIFF',
'formatOptions': {
'cloudOptimized': False
}
}
fixed_config = copy.copy(config)
ee.batch.ConvertFormatSpecificParams(fixed_config)
self.assertEqual(
fixed_config, {
'fieldA': 1,
'fieldB': 3,
'fileFormat': 'GEoTIFF',
'tiffCloudOptimized': False
})
def testConvertFormatTfRecord(self):
config = {
'fileFormat': 'tfrecord',
'formatOptions': {
'patchDimensions': [10, 10],
'compressed': True
}
}
fixed_config = copy.copy(config)
ee.batch.ConvertFormatSpecificParams(fixed_config)
self.assertEqual(
fixed_config, {
'fileFormat': 'tfrecord',
'tfrecordPatchDimensions': '10,10',
'tfrecordCompressed': True
})
def testExportImageToGoogleDriveCloudApi(self):
"""Verifies the Drive destined task created by Export.image.toDrive()."""
with apitestcase.UsingCloudApi():

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long