UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) • 12.8 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import t from"../../core/Error.js";import e from"../../core/Logger.js";import{assertIsSome as r}from"../../core/maybe.js";import{is as n,fromRectValues as o}from"../../geometry/support/aaBoundingBox.js";import{fromValues as s}from"../../geometry/support/aaBoundingRect.js";import{isPoint as u,isPolygon as c,isPolyline as l,isMultipoint as i,isGeometryWithZ as f,isGeometryWithM as a}from"../../geometry/support/jsonTypeUtils.js";import{OptimizedFeature as h}from"./OptimizedFeature.js";import m from"./OptimizedFeatureSet.js";import d from"./OptimizedGeometry.js";import{createFeatureId as g}from"./data/createFeatureId.js";const y=()=>e.getLogger("esri.layers.graphics.featureConversionUtils"),p={esriGeometryPoint:0,esriGeometryPolyline:2,esriGeometryPolygon:3,esriGeometryMultipoint:0,esriGeometryMultiPatch:3,esriGeometryEnvelope:0};function I({scale:t,translate:e},r){return Math.round((r-e[0])/t[0])}function M({scale:t,translate:e},r){return Math.round((e[1]-r)/t[1])}function b({scale:t,translate:e},r){return Math.round((r-e[0])/t[0])}function w({scale:t,translate:e},r){return Math.round((r-e[1])/t[1])}function G(t,e){return T(t,e,0)}function N(t,e){return T(t,-e,1)}function T({scale:t,translate:e},r,n){return r*t[n]+e[n]}function P(t,e,r){return e&&(t.hasZ=!0),r&&(t.hasM=!0),t}function F(t,e,r,n){if(e&&n&&t!==r)return(e,r,n,o)=>{n[o++]=e[r++],n[o++]=e[r++],t?r++:n[o++]=0,n[o++]=e[r++]??0};const o=2+(r?1:0)+(n?1:0),s=o-((!t&&r?1:0)+(!e&&n?1:0));return(t,e,r,n)=>{for(let u=0;u<o;++u)r[n++]=u<s?t[e++]??0:0}}function Z(t,e,r){if(!t)return null;const{coords:n,hasZ:o,hasM:s}=t,[u,c]=n,l=o?n[2]:0,i=s?n[2+(o?1:0)]:0;return{x:u,y:c,z:e?l:void 0,m:r?i:void 0}}function x(t,e,r,n){for(const{geometry:o,attributes:s}of e)t.push({attributes:s,geometry:Z(o,r,n)});return t}function E(t,e,r,n,o){for(const s of e){const{geometry:e,attributes:u,centroid:c}=s,l=f(e),i=a(e);t.push(new h(e?j(e,r&&l,n&&i):null,u,c?j(c,!1,!1):null,g(s,o)))}return t}function j(t,e=f(t),r=a(t)){const{x:n,y:o,z:s,m:u}=t,c=[n,o];return e&&c.push(s??0),r&&c.push(u??0),new d([],c,e,r)}function v(t,e,r,n){for(const{geometry:o,attributes:s}of e)t.push({geometry:o&&k(o,r,n),attributes:s});return t}function k(t,e,r){if(null==t)return null;const{coords:n,stride:o,hasZ:s,hasM:u}=t,c=F(s,u,e,r),l=[];for(let i=0;i<n.length;i+=o){const t=[];c(n,i,t,0),l.push(t)}return P({points:l},e,r)}function V(t,e,r,n,o){for(const s of e){const{geometry:e,attributes:u}=s,c=f(e),l=a(e);t.push(new h(e?Y(e,r&&c,n&&l):null,u,null,g(s,o)))}return t}function Y(t,e=f(t),r=a(t)){const{points:n,hasZ:o,hasM:s}=t,u=new d([n.length],[],e,r),{coords:c,stride:l}=u;let i=0;const h=F(o??!1,s??!1,e,r);for(const f of n)h(f,0,c,i),i+=l;return u}function _(t,e,r,n){for(const{geometry:o,attributes:s}of e)t.push({geometry:o&&L(o,r,n),attributes:s});return t}function L(t,e,r){if(!t)return null;const{coords:n,lengths:o,stride:s,hasZ:u,hasM:c}=t;let l=0;const i=F(u,c,e,r),f=[];for(const a of o){const t=[];for(let e=0;e<a;e++){const e=[];i(n,l,e,0),l+=s,t.push(e)}f.push(t)}return P({paths:f},e,r)}function O(t,e,r,n,o){for(const s of e){const{geometry:e,attributes:u,centroid:c}=s,l=f(e),i=a(e);t.push(new h(e?S(e,r&&l,n&&i):null,u,c?j(c,!1,!1):null,g(s,o)))}return t}function S(t,e=f(t),r=a(t)){const{paths:n,hasZ:o,hasM:s}=t,u=F(o??!1,s??!1,e,r),c=new d([],[],e,r),{lengths:l,coords:i,stride:h}=c;let m=0;for(const f of n){for(const t of f)u(t,0,i,m),m+=h;l.push(f.length)}return c}function U(t,e,r,n){for(const{geometry:o,attributes:s,centroid:u}of e){const e=z(o,r,n),c=Z(u,!1,!1);t.push(u?{geometry:e,attributes:s,centroid:c}:{geometry:e,attributes:s})}return t}function z(t,e,r){if(!t)return null;const{coords:n,lengths:o,stride:s,hasZ:u,hasM:c}=t;let l=0;const i=F(u,c,e,r),f=[];for(const a of o){const t=[];for(let e=0;e<a;e++){const e=[];i(n,l,e,0),l+=s,t.push(e)}f.push(t)}return P({rings:f},e,r)}function R(t,e,r,n,o){for(const s of e){const{geometry:e,attributes:u,centroid:c}=s,l=f(e),i=a(e);t.push(new h(e?A(e,r&&l,n&&i):null,u,c?j(c,!1,!1):null,g(s,o)))}return t}function A(t,e=f(t),r=a(t)){const{rings:n,hasZ:o,hasM:s}=t,u=new d([],[],e,r),{lengths:c,coords:l,stride:i}=u;let h=0;const m=F(o??!1,s??!1,e,r);for(const f of n){for(const t of f)m(t,0,l,h),h+=i;c.push(f.length)}return u}const $=[],q=[];function B(t,e,r,n,o){$[0]=t;const[s]=C(q,$,e,r,n,o);return dt($),dt(q),s}function C(e,r,n,o,s,u){if(dt(e),!n){for(const t of r){const r=g(t,u);e.push(new h(null,t.attributes,null,r))}return e}switch(n){case"esriGeometryPoint":return E(e,r,o,s,u);case"esriGeometryMultipoint":return V(e,r,o,s,u);case"esriGeometryPolyline":return O(e,r,o,s,u);case"esriGeometryPolygon":case"esriGeometryMultiPatch":return R(e,r,o,s,u);default:y().error("convertToFeatureSet:unknown-geometry",new t("internal:geometry",`Unable to parse unknown geometry type '${n}'`)),dt(e)}return e}function D(t,e,r,n){q[0]=t,Q($,q,e,r,n);const o=$[0];return dt($),dt(q),o}function H(e,r=f(e),n=a(e)){return null==e?null:u(e)?j(e,r,n):c(e)?A(e,r,n):l(e)?S(e,r,n):i(e)?Y(e,r,n):void y().error("convertFromGeometry:unknown-geometry",new t("internal:geometry",`Unable to parse unknown geometry type '${e}'`))}function J(e,r,n,o){if(null==e)return null;const s="coords"in e?e:e.geometry;if(null==s)return null;switch(r){case"esriGeometryPoint":return Z(s,n,o);case"esriGeometryMultipoint":return k(s,n,o);case"esriGeometryPolyline":return L(s,n,o);case"esriGeometryPolygon":return z(s,n,o);default:return y().error("convertToGeometry:unknown-geometry",new t("internal:geometry",`Unable to parse unknown geometry type '${r}'`)),null}}function K(t,e){for(const r of e)t.push({attributes:r.attributes});return t}function Q(e,r,n,o,s){if(dt(e),null==n)return K(e,r);switch(n){case"esriGeometryPoint":return x(e,r,o,s);case"esriGeometryMultipoint":return v(e,r,o,s);case"esriGeometryPolyline":return _(e,r,o,s);case"esriGeometryPolygon":return U(e,r,o,s);default:y().error("convertToFeatureSet:unknown-geometry",new t("internal:geometry",`Unable to parse unknown geometry type '${n}'`))}return e}function W(t){const{spatialReference:e,transform:r,fields:n,hasM:o,hasZ:s,features:u,geometryType:c,exceededTransferLimit:l,queryGeometry:i,queryGeometryType:f}=t,a={features:Q([],u,c,s,o),fields:n,geometryType:c,spatialReference:e,queryGeometry:J(i,f,s,o)};return r&&(a.transform=r),l&&(a.exceededTransferLimit=l),o&&(a.hasM=o),s&&(a.hasZ=s),a}function X(t,e){const r=new m,{hasM:n,hasZ:o,features:s,spatialReference:u,geometryType:c,exceededTransferLimit:l,transform:i,fields:f,globalIdFieldName:a}=t;return f&&(r.fields=f),r.geometryType=c??null,r.spatialReference=u??null,s&&C(r.features,s,c,o,n,e),l&&(r.exceededTransferLimit=l),n&&(r.hasM=n),o&&(r.hasZ=o),i&&(r.transform=i),a&&(r.globalIdFieldName=a),r}function tt(t){const{transform:e,features:r}=t;if(!e)return t;for(const n of r)null!=n.geometry&&lt(n.geometry,e),null!=n.centroid&&lt(n.centroid,e);return t.transform=null,t}function et(t,e){const{geometryType:r,features:n}=e;if(!t)return e;for(let o=0;o<n.length;o++){const e=n[o],s=e.weakClone();s.geometry=rt(e.geometry,r,t),s.centroid=rt(e.centroid,"esriGeometryPoint",t),n[o]=s}return e.transform=t,e}function rt(t,e,r,n,o){if(null==t)return null;if(!t?.coords.length)return null;const s=p[e],{coords:u,lengths:c,stride:l,hasZ:i,hasM:f}=t;n??=i,o??=f;const a=new d([],[],n,o),h=a.stride,m=F(i,f,n,o);let g=0;const y=[0,0,0,0].slice(h);function b(){m(u,g,y,0),g+=l,y[0]=I(r,y[0]),y[1]=M(r,y[1])}if(t.isPoint)return b(),a.coords.push(...y),a;let w=0;for(const d of c){if(d<s)continue;let t=1;b(),a.coords.push(...y);let[e,r]=y;for(let n=1;n<d;n++){b();const[n,o]=y;e===n&&r===o||(y[0]-=e,y[1]-=r,a.coords.push(...y),e=n,r=o,t++)}t>=s?(a.lengths.push(t),w=a.coords.length):dt(a.coords,w)}return dt(a.coords,w),a.coords.length?a:null}function nt(t,e,r,n=t.hasZ,o=t.hasM){if(!t.coords.length)return null;const s=p[e],{coords:u,lengths:c,stride:l,hasZ:i,hasM:f}=t,a=new d([],[],n,o),h=a.stride,m=F(i,f,n,o);if(t.isPoint)return m(u,0,a.coords,0),a;let g=0;const y=r*r;for(const d of c){if(d<s){g+=d*l;continue}const t=a.coords.length/h,e=g,r=g+(d-1)*l;m(u,e,a.coords,a.coords.length),st(a.coords,u,l,y,m,e,r),m(u,r,a.coords,a.coords.length);const n=a.coords.length/h-t;n>=s?a.lengths.push(n):dt(a.coords,t*h),g+=d*l}return a.coords.length?a:null}function ot(t,e,r,n){const o=t[e],s=t[e+1],u=t[r],c=t[r+1],l=t[n],i=t[n+1];let f=u,a=c,h=l-f,m=i-a;if(0!==h||0!==m){const t=((o-f)*h+(s-a)*m)/(h*h+m*m);t>1?(f=l,a=i):t>0&&(f+=h*t,a+=m*t)}return h=o-f,m=s-a,h*h+m*m}function st(t,e,r,n,o,s,u){let c,l=n,i=0;for(let f=s+r;f<u;f+=r)c=ot(e,f,s,u),c>l&&(i=f,l=c);l>n&&(i-s>r&&st(t,e,r,n,o,s,i),o(e,i,t,t.length),u-i>r&&st(t,e,r,n,o,i,u))}function ut(t,e){if(!e?.coords?.length)return null;let r=Number.POSITIVE_INFINITY,u=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY;const{coords:i,stride:f}=e;for(let n=0;n<i.length;n+=f){const t=i[n],e=i[n+1];r=Math.min(r,t),c=Math.max(c,t),u=Math.min(u,e),l=Math.max(l,e)}return n(t)?o(t,r,u,c,l):s(r,u,c,l,t),t}function ct(t,e){const{lengths:r,coords:n,stride:o}=e;let s=Number.POSITIVE_INFINITY,u=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY,i=0;for(const f of r){let t=n[i],e=n[i+1];s=Math.min(t,s),u=Math.min(e,u),c=Math.max(t,c),l=Math.max(e,l),i+=o;for(let r=1;r<f;r++,i+=o){const r=n[i],o=n[i+1];t+=r,e+=o,r<0&&(s=Math.min(s,t)),r>0&&(c=Math.max(c,t)),o<0?u=Math.min(u,e):o>0&&(l=Math.max(l,e))}}return t[0]=s,t[1]=u,t[2]=c,t[3]=l,t}function lt(t,e){const{coords:n,lengths:o,stride:s}=t;if(!n.length)return void(o.length=0);r(e);const{originPosition:u,scale:c,translate:l}=e,i=gt;i.originPosition=u;const f=i.scale;f[0]=c[0]??1,f[1]=-(c[1]??1),f[2]=c[2]??1,f[3]=c[3]??1;const a=i.translate;if(a[0]=l[0]??0,a[1]=l[1]??0,a[2]=l[2]??0,a[3]=l[3]??0,!o.length){for(let t=0;t<s;++t)n[t]=T(i,n[t],t);return void(o.length=0)}let h=0;for(let r=0;r<o.length;r++){const t=o[r];o[r]=t;for(let r=0;r<s;++r)n[h+r]=T(i,n[h+r],r);let e=n[h],u=n[h+1];h+=s;for(let r=1;r<t;r++,h+=s){e+=n[h]*f[0],u+=n[h+1]*f[1],n[h]=e,n[h+1]=u;for(let t=2;t<s;++t)n[h+t]=T(i,n[h+t],t)}}}function it(t,e){if(!t?.coords?.length)return null;const r=p[e],{coords:n,lengths:o,stride:s,hasZ:u,hasM:c}=t,l=F(u,c,u,c),i=new d([],[],u,c);let f=0,a=0,h=0,m=0;for(const d of o){a=m,l(n,f,i.coords,a),f+=s,a+=s;let t=n[f],e=n[f+1];for(let r=1;r<d;r++){const o=n[f+s],u=n[f+s+1];t*u-e*o===0&&r!==d-1||(l(n,f,i.coords,a),i.coords[a]=t,i.coords[a+1]=e,a+=s,t=e=0),t+=o,e+=u,f+=s}const o=(a-m)/s;o>=r&&(i.lengths[h]=o,m=a,h++)}return i.coords.length>m&&(i.coords.length=m),i.lengths.length>h&&(i.lengths.length=h),i.coords.length&&i.lengths.length?i:null}function ft(t,e,r,n){let o=0,s=t[n*e],u=t[n*(e+1)];for(let c=1;c<r;c++){const r=s+t[n*(e+c)],l=u+t[n*(e+c)+1],i=(r-s)*(l+u);s=r,u=l,o+=i}return.5*o}function at(t,e){const{coords:r,lengths:n}=t;let o=0,s=0;for(let u=0;u<n.length;u++){const t=n[u];s+=ft(r,o,t,e),o+=t}return Math.abs(s)}function ht(t,e,r,n){return 0===t*n-r*e&&t*r+e*n>0}function mt(t,e,r){const{stride:n}=t;if(t.isPoint){if(t.coords.length<2)return null;const[r,n]=t.coords,o=b(e,r),s=w(e,n);return new d([],[o,s])}const o=new d([],[0,0]),s=p[r],u="esriGeometryPolygon"===r||"esriGeometryPolyline"===r;let c=0,l=0;for(let i=0;i<t.lengths.length;i++){const r=t.lengths[i],f=l;let a=b(e,t.coords[n*c]),h=w(e,t.coords[n*c+1]);o.coords[l++]=a,o.coords[l++]=h;let m=0,d=0,g=1;for(let s=1;s<r;s++){const r=b(e,t.coords[n*(s+c)]),i=w(e,t.coords[n*(s+c)+1]);if(r!==a||i!==h){const t=r-a,e=i-h;u&&ht(m,d,t,e)?(o.coords[l-2]+=t,o.coords[l-1]+=e,a+=t,h+=e):(o.coords[l++]=r,o.coords[l++]=i,a=r,h=i,m=t,d=e,g+=1)}}g<s?l=f:o.lengths.push(g),c+=r}return 0===o.lengths.length?null:o}function dt(t,e=0){t.length!==e&&(t.length=e)}const gt={originPosition:"lowerLeft",scale:[1,1,1,1],translate:[0,0,0,0]};export{B as convertFromFeature,X as convertFromFeatureSet,C as convertFromFeatures,H as convertFromGeometry,Y as convertFromMultipoint,V as convertFromMultipointFeatures,j as convertFromPoint,E as convertFromPointFeatures,A as convertFromPolygon,S as convertFromPolyline,O as convertFromPolylineFeatures,D as convertToFeature,W as convertToFeatureSet,Q as convertToFeatures,J as convertToGeometry,k as convertToMultipoint,v as convertToMultipointFeatures,Z as convertToPoint,z as convertToPolygon,L as convertToPolyline,nt as generalizeOptimizedGeometry,ut as getBoundsOptimizedGeometry,at as getQuantizedArea,ct as getQuantizedBoundsOptimizedGeometry,ft as getSignedQuantizedRingArea,mt as quantizeForDisplay,et as quantizeOptimizedFeatureSet,rt as quantizeOptimizedGeometry,I as quantizeX,M as quantizeY,it as removeCollinearVertices,tt as unquantizeOptimizedFeatureSetInPlace,lt as unquantizeOptimizedGeometryInPlace,T as unquantizeValue,G as unquantizeX,N as unquantizeY};