@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 5.05 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{deprecatedModule as n}from"../core/deprecate.js";import r from"../core/Error.js";import o from"../core/Logger.js";import{throwIfAborted as t}from"../core/promiseUtils.js";import{SimpleObservable as e}from"../core/accessorSupport/tracking/SimpleObservable.js";import{create as s}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{assertNotMeshes as i,assertNotMesh as l}from"./asserts.js";import{isSphericalECEF as u,isSphericalPCPF as a}from"./ellipsoidUtils.js";import c from"./Extent.js";import p from"./Multipoint.js";import{l as m,i as f,p as h}from"../chunks/pe.js";import j from"./Point.js";import y from"./Polygon.js";import g from"./Polyline.js";import x from"./SpatialReference.js";import{projectBuffer as d}from"./projection/projectBuffer.js";import{getProjector as w}from"./projection/projectors.js";import{projectXYZToVector as z}from"./projection/projectXYZToVector.js";import R from"./support/GeographicTransformation.js";import{equals as v,isValid as M}from"./support/spatialReferenceUtils.js";import{getGeometryZScaler as Z}from"./support/zscale.js";n(o.getLogger("esri.geometry.projection"),"esri.geometry.projection",{replacement:"esri.geometry.operators.projectOperator",version:"4.32",warnOnce:!0});let S=null,A=null,G=null;const b={},E=new e;function P(){return!!S&&f()}function _(n){return null==G&&(G=Promise.all([m(),import("../chunks/geometryEngineBase.js").then((n=>n.g)),import("./geometryAdapters/hydrated.js")])),G.then((([,r,{hydratedAdapter:o}])=>{t(n),A=o,S=r.default,S._enableProjection(h),E.notify()}))}function T(n,r,o=null,t=null){return Array.isArray(n)?0===n.length?[]:(i(n),k(A,n,n[0].spatialReference,r,o,t)):(l(n),k(A,[n],n.spatialReference,r,o,t)[0])}function k(n,r,o,t,e=null,s=null){if(null==o||null==t)return r;if(L(o,t,e))return r.map((n=>K(n,o,t)));if(null==e&&u(o)){return r.map((n=>K(n,o,x.WGS84))).map((n=>W(n,t)))}if(null==e&&u(t)){return r.map((n=>W(n,x.WGS84))).map((n=>K(n,x.WGS84,t)))}if(null==e){const n=R.cacheKey(o,t);void 0!==b[n]?e=b[n]:(null==(e=B(o,t,void 0))&&(e=new R),b[n]=e)}if(null==S||null==n)throw new U;return null!=s?S._project(n,r,o,t,e,s):S._project(n,r,o,t,e)}function B(n,r,o=null){if(null==n||null==r)return null;if(null==S||null==A)throw new U;const t=S._getTransformation(A,n,r,o,o?.spatialReference);return null!==t?R.fromGE(t):null}function O(n,r,o=null){if(null==S||null==A)throw new U;const t=S._getTransformationBySuitability(A,n,r,o,o?.spatialReference);if(null!==t){const n=[];for(const r of t)n.push(R.fromGE(r));return n}return[]}class U extends r{constructor(){super("projection:not-loaded","projection engine not fully loaded yet, please call load()")}}function W(n,r){try{const o=T(n,r);if(null==o)return null;"xmin"in n&&"xmin"in o&&(o.zmin=n.zmin,o.zmax=n.zmax);const t=Z(o.type,n.spatialReference,r);return null!=t&&t(o),o}catch(o){if(!(o instanceof U))throw o;return null}}function L(n,r,o){return!o&&(!!v(n,r)||M(n)&&M(r)&&!!w(n,r))}function K(n,r,o){return n?"x"in n?V(n,r,new j,o,0):"xmin"in n?C(n,r,new c,o,0):"rings"in n?q(n,r,new y,o,0):"paths"in n?Y(n,r,new g,o,0):"points"in n?X(n,r,new p,o,0):null:null}function V(n,r,o,t,e){F[0]=n.x,F[1]=n.y;const s=n.z;return F[2]=void 0!==s?s:e,d(F,r,0,F,t,0)?(o.x=F[0],o.y=F[1],o.spatialReference=t,void 0!==s||a(t)?(o.z=F[2],o.hasZ=!0):(o.z=void 0,o.hasZ=!1),void 0===n.m?(o.m=void 0,o.hasM=!1):(o.m=n.m,o.hasM=!0),o):null}function X(n,r,o,t,e){const{points:s,hasZ:i,hasM:l}=n,u=[],c=s.length,p=[];for(const a of s)p.push(a[0],a[1],i?a[2]:e);if(!d(p,r,0,p,t,0,c))return null;const m=i||a(t);for(let a=0;a<c;++a){const n=3*a,r=p[n],o=p[n+1];m&&l?u.push([r,o,p[n+2],s[a][3]]):m?u.push([r,o,p[n+2]]):l?u.push([r,o,s[a][2]]):u.push([r,o])}return o.points=u,o.spatialReference=t,o.hasZ=i,o.hasM=l,o}function Y(n,r,o,t,e){const{paths:s,hasZ:i,hasM:l}=n,u=[];if(!D(s,i??!1,l??!1,r,u,t,e))return null;const c=i||a(t);return o.paths=u,o.spatialReference=t,o.hasZ=c,o.hasM=l,o}function q(n,r,o,t,e){const{rings:s,hasZ:i,hasM:l}=n,u=[];if(!D(s,i??!1,l??!1,r,u,t,e))return null;const c=i||a(t);return o.rings=u,o.spatialReference=t,o.hasZ=c,o.hasM=l,o}function C(n,r,o,t,e){const{xmin:s,ymin:i,xmax:l,ymax:u,hasZ:c,hasM:p}=n,m=c?n.zmin:e;if(!z(s,i,m,r,F,t))return null;const f=c||a(t);o.xmin=F[0],o.ymin=F[1],f&&(o.zmin=F[2]);const h=c?n.zmax:e;return z(l,u,h,r,F,t)?(o.xmax=F[0],o.ymax=F[1],f&&(o.zmax=F[2]),p&&(o.mmin=n.mmin,o.mmax=n.mmax),o.spatialReference=t,o):null}function D(n,r,o,t,e,s,i=0){const l=new Array;for(const a of n)for(const n of a)l.push(n[0],n[1],r?n[2]:i);if(!d(l,t,0,l,s,0))return!1;let u=0;e.length=0;const c=r||a(s);for(const a of n){const n=new Array;for(const r of a)c&&o?n.push([l[u++],l[u++],l[u++],r[3]]):c?n.push([l[u++],l[u++],l[u++]]):o?(n.push([l[u++],l[u++],r[2]]),u++):(n.push([l[u++],l[u++]]),u++);e.push(n)}return!0}const F=s();export{B as getTransformation,O as getTransformations,P as isLoaded,_ as load,T as project};