@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 16.6 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import n from"../ArcadePortal.js";import t from"../Dictionary.js";import{ArcadeExecutionError as e,ExecutionErrorCodes as r}from"../executionError.js";import{cloneGeometry as a}from"../kernel.js";import{C as i,B as o,e as s,g as c,f as l,w as u,j as f,D as d,m as w,E as m,h as y,F as h,G as p,u as g,H as N,J as S,K as O}from"../../chunks/languageUtils.js";import{getPortal as v}from"../portalUtils.js";import{commonRelationsCheck as J,toCurveType as P,planarLength3D as A,toOffsetJoinType as I,toCentroidAlgorithm as F,measureToCoordinateFunc as j,pointToCoordinateFunc as R,distanceToCoordinateFunc as b}from"../geometry/functions.js";import{invokeRemoteGeometryOp as x}from"../geometry/operatorsWorkerConnection.js";import{equals as D}from"../../core/arrayUtils.js";import L from"../../geometry/Extent.js";import C from"../../geometry/Geometry.js";import U from"../../geometry/Multipoint.js";import E from"../../geometry/Point.js";import k from"../../geometry/Polygon.js";import M from"../../geometry/Polyline.js";import{fromJSON as T}from"../../geometry/support/jsonUtils.js";import Z from"../../portal/Portal.js";import{lookupUser as q}from"../../portal/support/utils.js";import{isArray as z}from"../../support/guards.js";function B(n){if(null==n)return n;switch(typeof n){case"string":case"number":return n;default:throw new e(null,r.InvalidParameter,null)}}function G(G){"async"===G.mode&&(G.functions.disjoint=function(n,t){return G.standardFunctionAsync(n,t,((e,r,a)=>(a=i(a),J(a,n,t),null===a[0]||null===a[1]||x("disjoint",[a[0].toJSON(),a[1].toJSON()]))))},G.functions.intersects=function(n,t){return G.standardFunctionAsync(n,t,((e,r,a)=>(a=i(a),J(a,n,t),null!==a[0]&&null!==a[1]&&x("intersects",[a[0].toJSON(),a[1].toJSON()]))))},G.functions.touches=function(n,t){return G.standardFunctionAsync(n,t,((e,r,a)=>(a=i(a),J(a,n,t),null!==a[0]&&null!==a[1]&&x("touches",[a[0].toJSON(),a[1].toJSON()]))))},G.functions.crosses=function(n,t){return G.standardFunctionAsync(n,t,((e,r,a)=>(a=i(a),J(a,n,t),null!==a[0]&&null!==a[1]&&x("crosses",[a[0].toJSON(),a[1].toJSON()]))))},G.functions.within=function(n,t){return G.standardFunctionAsync(n,t,((e,r,a)=>(a=i(a),J(a,n,t),null!==a[0]&&null!==a[1]&&x("within",[a[0].toJSON(),a[1].toJSON()]))))},G.functions.contains=function(n,t){return G.standardFunctionAsync(n,t,((e,r,a)=>(a=i(a),J(a,n,t),null!==a[0]&&null!==a[1]&&x("contains",[a[0].toJSON(),a[1].toJSON()]))))},G.functions.overlaps=function(n,t){return G.standardFunctionAsync(n,t,((e,r,a)=>(a=i(a),J(a,n,t),null!==a[0]&&null!==a[1]&&x("overlaps",[a[0].toJSON(),a[1].toJSON()]))))},G.functions.equals=function(n,t){return G.standardFunctionAsync(n,t,((e,r,a)=>(o(a,2,2,n,t),a[0]===a[1]||(a[0]instanceof C&&a[1]instanceof C?x("equals",[a[0].toJSON(),a[1].toJSON()]):(s(a[0])&&s(a[1])||!!(c(a[0])&&c(a[1])||l(a[0])&&l(a[1])))&&a[0].equals(a[1])))))},G.functions.relate=function(n,t){return G.standardFunctionAsync(n,t,((a,s,c)=>{if(c=i(c),o(c,3,3,n,t),c[0]instanceof C&&c[1]instanceof C)return x("relate",[c[0].toJSON(),c[1].toJSON(),u(c[2])]);if(c[0]instanceof C&&null===c[1])return!1;if(c[1]instanceof C&&null===c[0])return!1;if(null===c[0]&&null===c[1])return!1;throw new e(n,r.InvalidParameter,t)}))},G.functions.intersection=function(n,t){return G.standardFunctionAsync(n,t,(async(e,r,a)=>(a=i(a),J(a,n,t),null===a[0]||null===a[1]?null:T(await x("intersection",[a[0].toJSON(),a[1].toJSON()])))))},G.functions.union=function(n,t){return G.standardFunctionAsync(n,t,(async(o,s,c)=>{if(0===(c=i(c)).length)throw new e(n,r.WrongNumberOfParameters,t);const l=[];if(1===c.length)if(z(c[0])){for(const a of i(c[0]))if(null!==a){if(!(a instanceof C))throw new e(n,r.InvalidParameter,t);l.push(a.toJSON())}}else{if(!f(c[0])){if(c[0]instanceof C)return d(a(c[0]),n.spatialReference);if(null===c[0])return null;throw new e(n,r.InvalidParameter,t)}for(const a of i(c[0].toArray()))if(null!==a){if(!(a instanceof C))throw new e(n,r.InvalidParameter,t);l.push(a.toJSON())}}else for(const a of c)if(null!==a){if(!(a instanceof C))throw new e(n,r.InvalidParameter,t);l.push(a.toJSON())}return 0===l.length?null:T(await x("union",[l]))}))},G.functions.difference=function(n,t){return G.standardFunctionAsync(n,t,(async(e,r,o)=>(o=i(o),J(o,n,t),null===o[0]?null:null===o[1]?a(o[0]):T(await x("difference",[o[0].toJSON(),o[1].toJSON()])))))},G.functions.symmetricdifference=function(n,t){return G.standardFunctionAsync(n,t,(async(e,r,o)=>(o=i(o),J(o,n,t),null===o[0]&&null===o[1]?null:null===o[0]?a(o[1]):null===o[1]?a(o[0]):T(await x("symmetricDifference",[o[0].toJSON(),o[1].toJSON()])))))},G.functions.clip=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{if(c=i(c),o(c,2,2,n,t),!(c[1]instanceof L)&&null!==c[1])throw new e(n,r.InvalidParameter,t);if(null===c[0])return null;if(!(c[0]instanceof C))throw new e(n,r.InvalidParameter,t);return null===c[1]?null:T(await x("clip",[c[0].toJSON(),c[1].toJSON()]))}))},G.functions.cut=function(n,t){return G.standardFunctionAsync(n,t,(async(s,c,l)=>{if(l=i(l),o(l,2,2,n,t),!(l[1]instanceof M)&&null!==l[1])throw new e(n,r.InvalidParameter,t);if(null===l[0])return[];if(!(l[0]instanceof C))throw new e(n,r.InvalidParameter,t);return null===l[1]?[a(l[0])]:(await x("cut",[l[0].toJSON(),l[1].toJSON()])).map((n=>T(n)))}))},G.functions.area=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{if(o(c,1,2,n,t),c=i(c),w(c[0])){const a=await c[0].sumArea(B(c[1]),null,n.abortSignal);if(n.abortSignal.aborted)throw new e(n,r.Cancelled,t);return a}let l=c[0];if((z(l)||f(l))&&(l=m(c[0],n.spatialReference)),null===l)return 0;if(!(l instanceof C))throw new e(n,r.InvalidParameter,t);return x("area",[l.toJSON(),B(c[1])])}))},G.functions.areageodetic=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{o(c,1,3,n,t);let l=(c=i(c))[0];(z(l)||f(l))&&(l=m(l,n.spatialReference));const u=B(c[1]),d=P(c[2]);if(w(l)){const a=await l.sumArea(u,d,n.abortSignal);if(n.abortSignal.aborted)throw new e(n,r.Cancelled,t);return a}if(null==l)return 0;if(!y(l))throw new e(n,r.InvalidParameter,t);return x("geodeticArea",[l.toJSON(),u,d])}))},G.functions.length=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{if(o(c,1,2,n,t),c=i(c),w(c[0])){const a=await c[0].sumLength(B(c[1]),null,n.abortSignal);if(n.abortSignal.aborted)throw new e(n,r.Cancelled,t);return a}let l=c[0];if((z(c[0])||f(c[0]))&&(l=h(c[0],n.spatialReference)),null===l)return 0;if(!(l instanceof C))throw new e(n,r.InvalidParameter,t);return x("length",[l.toJSON(),B(c[1])])}))},G.functions.length3d=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{if(o(c,1,2,n,t),null===(c=i(c))[0])return 0;let l=c[0];if((z(c[0])||f(c[0]))&&(l=h(c[0],n.spatialReference)),null===l)return 0;if(!(l instanceof C))throw new e(n,r.InvalidParameter,t);if(!0===l.hasZ){const{convertFromSpatialReferenceUnit:n,toLengthUnit:t}=await import("../geometry/unitConversion.js"),e=A(l);return n(l.spatialReference,t(c[1]),e)}return x("length",[l.toJSON(),B(c[1])])}))},G.functions.lengthgeodetic=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{o(c,1,3,n,t);let l=(c=i(c))[0];(z(c[0])||f(c[0]))&&(l=h(c[0],n.spatialReference));const u=B(c[1]),d=P(c[2]);if(w(l)){const a=await l.sumLength(u,d,n.abortSignal);if(n.abortSignal.aborted)throw new e(n,r.Cancelled,t);return a}if(null===l)return 0;if(!y(l))throw new e(n,r.InvalidParameter,t);return x("geodeticLength",[l.toJSON(),u,d])}))},G.functions.distance=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{c=i(c),o(c,2,3,n,t);let l=c[0];if((z(c[0])||f(c[0]))&&(l=p(c[0],n.spatialReference)),!(l instanceof C))throw new e(n,r.InvalidParameter,t);let u=c[1];if((z(c[1])||f(c[1]))&&(u=p(c[1],n.spatialReference)),!(u instanceof C))throw new e(n,r.InvalidParameter,t);return x("distance",[l.toJSON(),u.toJSON(),B(c[2])])}))},G.functions.distancegeodetic=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{c=i(c),o(c,2,4,n,t);const l=c[0];if(!(l instanceof E))throw new e(n,r.InvalidParameter,t);const u=c[1];if(!(u instanceof E))throw new e(n,r.InvalidParameter,t);const f=new M({paths:[],spatialReference:l.spatialReference});return f.addPath([l,u]),x("geodeticLength",[f.toJSON(),B(c[2]),P(c[3])])}))},G.functions.densify=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{if(c=i(c),o(c,2,3,n,t),null===c[0])return null;if(!(c[0]instanceof C))throw new e(n,r.InvalidParameter,t);const l=g(c[1]);if(isNaN(l))throw new e(n,r.InvalidParameter,t);if(l<=0)throw new e(n,r.InvalidParameter,t);switch(c[0].type){case"polygon":case"polyline":case"extent":return T(await x("densify",[c[0].toJSON(),l,B(c[2])]));default:return c[0]}}))},G.functions.densifygeodetic=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{c=i(c),o(c,2,4,n,t);const l=c[0];if(null==l)return null;if(!y(l))throw new e(n,r.InvalidParameter,t);const u=g(c[1]);if(isNaN(u))throw new e(n,r.InvalidParameter,t);if(u<=0)throw new e(n,r.InvalidParameter,t);const f=B(c[2]),d=P(c[3]);switch(l.type){case"polygon":case"polyline":case"extent":return T(await x("geodeticDensify",[l.toJSON(),u,f,d]));default:return l}}))},G.functions.generalize=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{if(c=i(c),o(c,2,4,n,t),null===c[0])return null;if(!(c[0]instanceof C))throw new e(n,r.InvalidParameter,t);const l=g(c[1]);if(isNaN(l))throw new e(n,r.InvalidParameter,t);const u=N(S(c[2],!0));return T(await x("generalize",[c[0].toJSON(),l,B(c[3]),{removeDegenerateParts:u}]))}))},G.functions.buffer=function(n,t){return G.standardFunctionAsync(n,t,(async(s,c,l)=>{if(l=i(l),o(l,2,3,n,t),null===l[0])return null;if(!(l[0]instanceof C))throw new e(n,r.InvalidParameter,t);const u=g(l[1]);if(isNaN(u))throw new e(n,r.InvalidParameter,t);return 0===u?a(l[0]):T(await x("buffer",[l[0].toJSON(),u,B(l[2])]))}))},G.functions.buffergeodetic=function(n,t){return G.standardFunctionAsync(n,t,(async(s,c,l)=>{l=i(l),o(l,2,4,n,t);const u=l[0];if(null==u)return null;if(!y(u))throw new e(n,r.InvalidParameter,t);const f=g(l[1]);if(isNaN(f))throw new e(n,r.InvalidParameter,t);if(0===f)return a(u);const d=B(l[2]),w=P(l[3]);return T(await x("geodesicBuffer",[u.toJSON(),f,d,w]))}))},G.functions.offset=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{if(c=i(c),o(c,2,6,n,t),null===c[0])return null;if(!(c[0]instanceof k||c[0]instanceof M))throw new e(n,r.InvalidParameter,t);const l=g(c[1]);if(isNaN(l))throw new e(n,r.InvalidParameter,t);const u=I(c[3]),f=g(S(c[4],10));if(isNaN(f))throw new e(n,r.InvalidParameter,t);const d=g(S(c[5],0));if(isNaN(d))throw new e(n,r.InvalidParameter,t);return T(await x("offset",[c[0].toJSON(),l,B(c[2]),{joins:u,miterLimit:f,flattenError:d}]))}))},G.functions.rotate=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{if(c=i(c),o(c,2,3,n,t),null===c[0])return null;if(!(c[0]instanceof C))throw new e(n,r.InvalidParameter,t);const l=c[0]instanceof L?k.fromExtent(c[0]):c[0],u=g(c[1]);if(isNaN(u))throw new e(n,r.InvalidParameter,t);const f=S(c[2],null);if(null===f){const n="point"===l.type?l:l.extent?.center;return T(await x("rotate",[l.toJSON(),u,n?.x,n?.y]))}if(f instanceof E)return T(await x("rotate",[l.toJSON(),u,f.x,f.y]));throw new e(n,r.InvalidParameter,t)}))},G.functions.centroid=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{if(c=i(c),o(c,1,2,n,t),null===c[0])return null;const l=F(c[1]);let u=c[0];if((z(c[0])||f(c[0]))&&(u="geometric"===l?p(c[0],n.spatialReference):m(c[0],n.spatialReference),null===u))return null;if(!(u instanceof C))throw new e(n,r.InvalidParameter,t);return T("geometric"===l?await x("centroid",[u.toJSON()]):await x("labelPoint",[u.toJSON()]))}))},G.functions.measuretocoordinate=function(n,t){return G.standardFunctionAsync(n,t,j)},G.functions.pointtocoordinate=function(n,t){return G.standardFunctionAsync(n,t,R)},G.functions.distancetocoordinate=function(n,t){return G.standardFunctionAsync(n,t,b)},G.functions.multiparttosinglepart=function(n,t){return G.standardFunctionAsync(n,t,(async(s,c,l)=>{if(l=i(l),o(l,1,1,n,t),null===l[0])return null;if(!(l[0]instanceof C))throw new e(n,r.InvalidParameter,t);if(l[0]instanceof E)return[d(a(l[0]),n.spatialReference)];if(l[0]instanceof L)return[d(a(l[0]),n.spatialReference)];const u=T(await x("simplify",[l[0].toJSON()]));if(u instanceof k){const n=[],t=[];for(let e=0;e<u.rings.length;e++)if(u.isClockwise(u.rings[e])){const t=T({rings:[u.rings[e]],hasZ:!0===u.hasZ,hasM:!0===u.hasM,spatialReference:u.spatialReference.toJSON()});n.push(t)}else t.push({ring:u.rings[e],pt:u.getPoint(e,0)});for(let e=0;e<t.length;e++)for(let r=0;r<n.length;r++)if(n[r].contains(t[e].pt)){n[r].addRing(t[e].ring);break}return n}if(u instanceof M){const n=[];for(let t=0;t<u.paths.length;t++){const e=T({paths:[u.paths[t]],hasZ:!0===u.hasZ,hasM:!0===u.hasM,spatialReference:u.spatialReference.toJSON()});n.push(e)}return n}if(l[0]instanceof U){const t=[],e=d(a(l[0]),n.spatialReference);for(let n=0;n<e.points.length;n++)t.push(e.getPoint(n));return t}return null}))},G.functions.isselfintersecting=function(n,t){return G.standardFunctionAsync(n,t,(async(n,t,e)=>{o(e,1,1,n,t);let r=(e=i(e))[0];if((z(e[0])||f(e[0]))&&(r=h(e[0],n.spatialReference)),r instanceof U){const n=r.points;for(let t=0;t<n.length;t++)for(let e=t+1;e<n.length;e++)if(D(n[t],n[e]))return!0;return!1}return(r instanceof M||r instanceof k)&&await x("isSelfIntersecting",[r.toJSON()])}))},G.functions.issimple=function(n,t){return G.standardFunctionAsync(n,t,((a,s,c)=>{if(c=i(c),o(c,1,1,n,t),null===c[0])return!0;if(!(c[0]instanceof C))throw new e(n,r.InvalidParameter,t);return x("isSimple",[c[0].toJSON()])}))},G.functions.simplify=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{if(c=i(c),o(c,1,1,n,t),null===c[0])return null;if(!(c[0]instanceof C))throw new e(n,r.InvalidParameter,t);return T(await x("simplify",[c[0].toJSON()]))}))},G.functions.convexhull=function(n,t){return G.standardFunctionAsync(n,t,(async(a,s,c)=>{if(c=i(c),o(c,1,1,n,t),null===c[0])return null;if(!(c[0]instanceof C))throw new e(n,r.InvalidParameter,t);return T(await x("convexHull",[c[0].toJSON()]))}))},G.functions.getuser=function(a,i){return G.standardFunctionAsync(a,i,(async(s,c,l)=>{o(l,0,2,a,i);let f=S(l[1],""),d=!0===f;if(f=!0===f||!1===f?"":u(f),0===l.length||l[0]instanceof n){let n;n=a.services?.portal?a.services.portal:Z.getDefault(),l.length>0&&(n=v(l[0],n));const e=await q(n,f,d);if(e){const n=JSON.parse(JSON.stringify(e));for(const t of["lastLogin","created","modified"])void 0!==n[t]&&null!==n[t]&&(n[t]=new Date(n[t]));return t.convertObjectToArcadeDictionary(n,O(a))}return null}let m=null;if(w(l[0])&&(m=l[0]),m){if(d=!1,f)return null;await m.load();const e=await m.getOwningSystemUrl();if(!e){if(!f){const n=await m.getIdentityUser();return n?t.convertObjectToArcadeDictionary({username:n},O(a)):null}return null}let r;r=a.services?.portal?a.services.portal:Z.getDefault(),r=v(new n(e),r);const i=await q(r,f,d);if(i){const n=JSON.parse(JSON.stringify(i));for(const t of["lastLogin","created","modified"])void 0!==n[t]&&null!==n[t]&&(n[t]=new Date(n[t]));return t.convertObjectToArcadeDictionary(n,O(a))}return null}throw new e(a,r.InvalidParameter,i)}))},G.functions.nearestcoordinate=function(n,a){return G.standardFunctionAsync(n,a,(async(s,c,l)=>{if(l=i(l),o(l,2,2,n,a),!(l[0]instanceof C||null===l[0]))throw new e(n,r.InvalidParameter,a);if(!(l[1]instanceof E||null===l[1]))throw new e(n,r.InvalidParameter,a);if(null===l[0]||null===l[1])return null;const u=l[0]instanceof L?k.fromExtent(l[0]):l[0],f=await x("getNearestCoordinate",[u.toJSON(),l[1].toJSON(),{calculateLeftRightSide:!0}]);return null===f?null:t.convertObjectToArcadeDictionary({coordinate:T(f.coordinate),distance:f.distance,sideOfLine:0===f.distance?"straddle":f.isRightSide?"right":"left"},O(n),!1,!0)}))},G.functions.nearestvertex=function(n,a){return G.standardFunctionAsync(n,a,(async(s,c,l)=>{if(l=i(l),o(l,2,2,n,a),!(l[0]instanceof C||null===l[0]))throw new e(n,r.InvalidParameter,a);if(!(l[1]instanceof E||null===l[1]))throw new e(n,r.InvalidParameter,a);if(null===l[0]||null===l[1])return null;const u=l[0]instanceof L?k.fromExtent(l[0]):l[0],f=await x("getNearestVertex",[u.toJSON(),l[1].toJSON()]);return null===f?null:t.convertObjectToArcadeDictionary({coordinate:T(f.coordinate),distance:f.distance,sideOfLine:0===f.distance?"straddle":f.isRightSide?"right":"left"},O(n),!1,!0)}))})}export{G as registerFunctions};