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.8/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 i,isMultipoint as l,isGeometryWithZ as f,isGeometryWithM as a}from"../../geometry/support/jsonTypeUtils.js";import{OptimizedFeature as h}from"./OptimizedFeature.js";import m from"./OptimizedFeatureSet.js";import g from"./OptimizedGeometry.js";import{createFeatureId as d}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 M({scale:t,translate:e},r){return Math.round((r-e[0])/t[0])}function I({scale:t,translate:e},r){return Math.round((e[1]-r)/t[1])}function w({scale:t,translate:e},r){return Math.round((r-e[0])/t[0])}function G({scale:t,translate:e},r){return Math.round((r-e[1])/t[1])}function b(t,e){return N(t,e,0)}function T(t,e){return N(t,-e,1)}function N({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 Z(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 x(t,e,r){if(!t)return null;const{coords:n,hasZ:o,hasM:s}=t,[u,c]=n,i=o?n[2]:0,l=s?n[2+(o?1:0)]:0;return{x:u,y:c,z:e?i:void 0,m:r?l:void 0}}function E(t,e,r,n){for(const{geometry:o,attributes:s}of e)t.push({attributes:s,geometry:x(o,r,n)});return t}function F(t,e,r,n,o){for(const s of e){const{geometry:e,attributes:u,centroid:c}=s,i=f(e),l=a(e);t.push(new h(e?j(e,r&&i,n&&l):null,u,c?j(c,!1,!1):null,d(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 g([],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=Z(s,u,e,r),i=[];for(let l=0;l<n.length;l+=o){const t=[];c(n,l,t,0),i.push(t)}return P({points:i},e,r)}function V(t,e,r,n,o){for(const s of e){const{geometry:e,attributes:u}=s,c=f(e),i=a(e);t.push(new h(e?Y(e,r&&c,n&&i):null,u,null,d(s,o)))}return t}function Y(t,e=f(t),r=a(t)){const{points:n,hasZ:o,hasM:s}=t,u=new g([n.length],[],e,r),{coords:c,stride:i}=u;let l=0;const h=Z(o??!1,s??!1,e,r);for(const f of n)h(f,0,c,l),l+=i;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 i=0;const l=Z(u,c,e,r),f=[];for(const a of o){const t=[];for(let e=0;e<a;e++){const e=[];l(n,i,e,0),i+=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,i=f(e),l=a(e);t.push(new h(e?S(e,r&&i,n&&l):null,u,c?j(c,!1,!1):null,d(s,o)))}return t}function S(t,e=f(t),r=a(t)){const{paths:n,hasZ:o,hasM:s}=t,u=Z(o??!1,s??!1,e,r),c=new g([],[],e,r),{lengths:i,coords:l,stride:h}=c;let m=0;for(const f of n){for(const t of f)u(t,0,l,m),m+=h;i.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=x(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 i=0;const l=Z(u,c,e,r),f=[];for(const a of o){const t=[];for(let e=0;e<a;e++){const e=[];l(n,i,e,0),i+=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,i=f(e),l=a(e);t.push(new h(e?A(e,r&&i,n&&l):null,u,c?j(c,!1,!1):null,d(s,o)))}return t}function A(t,e=f(t),r=a(t)){const{rings:n,hasZ:o,hasM:s}=t,u=new g([],[],e,r),{lengths:c,coords:i,stride:l}=u;let h=0;const m=Z(o??!1,s??!1,e,r);for(const f of n){for(const t of f)m(t,0,i,h),h+=l;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 gt($),gt(q),s}function C(e,r,n,o,s,u){if(gt(e),!n){for(const t of r){const r=d(t,u);e.push(new h(null,t.attributes,null,r))}return e}switch(n){case"esriGeometryPoint":return F(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}'`)),gt(e)}return e}function D(t,e,r,n){q[0]=t,Q($,q,e,r,n);const o=$[0];return gt($),gt(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):i(e)?S(e,r,n):l(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 x(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(gt(e),null==n)return K(e,r);switch(n){case"esriGeometryPoint":return E(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:i,queryGeometry:l,queryGeometryType:f}=t,a={features:Q([],u,c,s,o),fields:n,geometryType:c,spatialReference:e,queryGeometry:J(l,f,s,o)};return r&&(a.transform=r),i&&(a.exceededTransferLimit=i),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:i,transform:l,fields:f}=t;return f&&(r.fields=f),r.geometryType=c??null,r.spatialReference=u??null,s&&C(r.features,s,c,o,n,e),i&&(r.exceededTransferLimit=i),n&&(r.hasM=n),o&&(r.hasZ=o),l&&(r.transform=l),r}function tt(t){const{transform:e,features:r}=t;if(!e)return t;for(const n of r)null!=n.geometry&&it(n.geometry,e),null!=n.centroid&&it(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:i,hasZ:l,hasM:f}=t;n??=l,o??=f;const a=new g([],[],n,o),h=a.stride,m=Z(l,f,n,o);let d=0;const y=[0,0,0,0].slice(h);function w(){m(u,d,y,0),d+=i,y[0]=M(r,y[0]),y[1]=I(r,y[1])}if(t.isPoint)return w(),a.coords.push(...y),a;let G=0;for(const g of c){if(g<s)continue;let t=1;w(),a.coords.push(...y);let[e,r]=y;for(let n=1;n<g;n++){w();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),G=a.coords.length):gt(a.coords,G)}return gt(a.coords,G),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:i,hasZ:l,hasM:f}=t,a=new g([],[],n,o),h=a.stride,m=Z(l,f,n,o);if(t.isPoint)return m(u,0,a.coords,0),a;let d=0;const y=r*r;for(const g of c){if(g<s){d+=g*i;continue}const t=a.coords.length/h,e=d,r=d+(g-1)*i;m(u,e,a.coords,a.coords.length),st(a.coords,u,i,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):gt(a.coords,t*h),d+=g*i}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],i=t[n],l=t[n+1];let f=u,a=c,h=i-f,m=l-a;if(0!==h||0!==m){const t=((o-f)*h+(s-a)*m)/(h*h+m*m);t>1?(f=i,a=l):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,i=n,l=0;for(let f=s+r;f<u;f+=r)c=ot(e,f,s,u),c>i&&(l=f,i=c);i>n&&(l-s>r&&st(t,e,r,n,o,s,l),o(e,l,t,t.length),u-l>r&&st(t,e,r,n,o,l,u))}function ut(t,e){if(!e?.coords?.length)return null;let r=Number.POSITIVE_INFINITY,u=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,i=Number.NEGATIVE_INFINITY;const{coords:l,stride:f}=e;for(let n=0;n<l.length;n+=f){const t=l[n],e=l[n+1];r=Math.min(r,t),c=Math.max(c,t),u=Math.min(u,e),i=Math.max(i,e)}return n(t)?o(t,r,u,c,i):s(r,u,c,i,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,i=Number.NEGATIVE_INFINITY,l=0;for(const f of r){let t=n[l],e=n[l+1];s=Math.min(t,s),u=Math.min(e,u),c=Math.max(t,c),i=Math.max(e,i),l+=o;for(let r=1;r<f;r++,l+=o){const r=n[l],o=n[l+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&&(i=Math.max(i,e))}}return t[0]=s,t[1]=u,t[2]=c,t[3]=i,t}function it(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:i}=e,l=dt;l.originPosition=u;const f=l.scale;f[0]=c[0]??1,f[1]=-(c[1]??1),f[2]=c[2]??1,f[3]=c[3]??1;const a=l.translate;if(a[0]=i[0]??0,a[1]=i[1]??0,a[2]=i[2]??0,a[3]=i[3]??0,!o.length){for(let t=0;t<s;++t)n[t]=N(l,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]=N(l,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]=N(l,n[h+t],t)}}}function lt(t,e){if(!t?.coords?.length)return null;const r=p[e],{coords:n,lengths:o,stride:s,hasZ:u,hasM:c}=t,i=Z(u,c,u,c),l=new g([],[],u,c);let f=0,a=0,h=0,m=0;for(const g of o){a=m,i(n,f,l.coords,a),f+=s,a+=s;let t=n[f],e=n[f+1];for(let r=1;r<g;r++){const o=n[f+s],u=n[f+s+1];t*u-e*o===0&&r!==g-1||(i(n,f,l.coords,a),l.coords[a]=t,l.coords[a+1]=e,a+=s,t=e=0),t+=o,e+=u,f+=s}const o=(a-m)/s;o>=r&&(l.lengths[h]=o,m=a,h++)}return l.coords.length>m&&(l.coords.length=m),l.lengths.length>h&&(l.lengths.length=h),l.coords.length&&l.lengths.length?l: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)],i=u+t[n*(e+c)+1],l=(r-s)*(i+u);s=r,u=i,o+=l}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=w(e,r),s=G(e,n);return new g([],[o,s])}const o=new g([],[0,0]),s=p[r],u="esriGeometryPolygon"===r||"esriGeometryPolyline"===r;let c=0,i=0;for(let l=0;l<t.lengths.length;l++){const r=t.lengths[l],f=i;let a=w(e,t.coords[n*c]),h=G(e,t.coords[n*c+1]);o.coords[i++]=a,o.coords[i++]=h;let m=0,g=0,d=1;for(let s=1;s<r;s++){const r=w(e,t.coords[n*(s+c)]),l=G(e,t.coords[n*(s+c)+1]);if(r!==a||l!==h){const t=r-a,e=l-h;u&&ht(m,g,t,e)?(o.coords[i-2]+=t,o.coords[i-1]+=e,a+=t,h+=e):(o.coords[i++]=r,o.coords[i++]=l,a=r,h=l,m=t,g=e,d+=1)}}d<s?i=f:o.lengths.push(d),c+=r}return 0===o.lengths.length?null:o}function gt(t,e=0){t.length!==e&&(t.length=e)}const dt={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,F 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,x 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,M as quantizeX,I as quantizeY,lt as removeCollinearVertices,tt as unquantizeOptimizedFeatureSetInPlace,it as unquantizeOptimizedGeometryInPlace,N as unquantizeValue,b as unquantizeX,T as unquantizeY};