UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) • 13.9 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{b as i,t}from"./Geometry.js";import{P as s,m,c as h,g as x}from"./Point2D.js";class n{static construct(i,t,s,m){return new n(i,t,s,m)}constructor(i,t,s,m){this.m_EnvelopeType=2,void 0===i?(this.xmin=Number.NaN,this.ymin=Number.NaN,this.xmax=Number.NaN,this.ymax=Number.NaN):"number"==typeof i?(this.xmin=i,this.ymin=t,this.xmax=s,this.ymax=m):(this.xmin=i.xmin,this.ymin=i.ymin,this.xmax=i.xmax,this.ymax=i.ymax),this.normalize()}static constructEmpty(){return new n(Number.NaN,Number.NaN,Number.NaN,Number.NaN)}clone(){return new n(this)}assign(i){return this.xmin=i.xmin,this.xmax=i.xmax,this.ymin=i.ymin,this.ymax=i.ymax,this}width(){return this.xmax-this.xmin}height(){return this.ymax-this.ymin}maxDimension(){return Math.max(this.width(),this.height())}minDimension(){return Math.min(this.width(),this.height())}sqrDiagonal(){const i=this.width(),t=this.height();return i*i+t*t}diagonal(){return Math.sqrt(this.sqrDiagonal())}getCenterX(){return.5*(this.xmin+this.xmax)}getCenterY(){return.5*(this.ymin+this.ymax)}getCenter(){return s.construct(this.getCenterX(),this.getCenterY())}queryCenter(i){i.x=.5*(this.xmin+this.xmax),i.y=.5*(this.ymin+this.ymax)}setEmpty(){this.xmin=Number.NaN,this.ymin=Number.NaN,this.xmax=Number.NaN,this.ymax=Number.NaN}setInfinite(){this.xmin=Number.NEGATIVE_INFINITY,this.xmax=Number.POSITIVE_INFINITY,this.ymin=Number.NEGATIVE_INFINITY,this.ymax=Number.POSITIVE_INFINITY}isDegenerate(i){return!this.isEmpty()&&(this.width()<=i||this.height()<=i)}isZero(){return!(this.isEmpty()||this.width()&&this.height())}isEmpty(){return Number.isNaN(this.xmin)||Number.isNaN(this.ymin)||Number.isNaN(this.xmax)||Number.isNaN(this.ymax)}mergeNeCoords(i,t){this.xmin>i?this.xmin=i:this.xmax<i&&(this.xmax=i),this.ymin>t?this.ymin=t:this.ymax<t&&(this.ymax=t)}mergeNe(i){this.mergeNeCoords(i.x,i.y)}mergeCoords(i,t){this.isEmpty()?(this.xmin=i,this.ymin=t,this.xmax=i,this.ymax=t):(this.xmin>i?this.xmin=i:this.xmax<i&&(this.xmax=i),this.ymin>t?this.ymin=t:this.ymax<t&&(this.ymax=t))}merge(i){this.mergeCoords(i.x,i.y)}mergeEnvelope2D(i){i.isEmpty()||(this.mergeCoords(i.xmin,i.ymin),this.mergeNeCoords(i.xmax,i.ymax))}mergePoints(i,t){for(let s=0;s<t;){if(!this.isEmpty()){for(let m=s;m<t;m++)this.mergeNe(i[m]);break}this.setCoords(i[s]),s++}}mergePointsInterleaved(i,t,s){for(let m=2*t,h=m+2*s;m<h;m+=2)this.mergeCoords(i.read(m),i.read(m+1))}inflateCoords(i,t){this.isEmpty()||(this.xmin-=i,this.xmax+=i,this.ymin-=t,this.ymax+=t,(this.xmin>this.xmax||this.ymin>this.ymax)&&this.setEmpty())}getInflatedCoords(i,t){const s=this.clone();return s.inflateCoords(i,t),s}inflate(i){this.inflateCoords(i,i)}getInflated(i){const t=this.clone();return t.inflateCoords(i,i),t}zoom(i,t){this.isEmpty()||this.setCoords({center:this.getCenter(),width:i*this.width(),height:t*this.height()})}scale(i){i<0&&this.setEmpty(),this.xmin*=i,this.xmax*=i,this.ymin*=i,this.ymax*=i}equals(i,t){return!(!this.isEmpty()||!i.isEmpty())||(t?Math.abs(this.xmin-i.xmin)<=t&&Math.abs(this.ymin-i.ymin)<=t&&Math.abs(this.xmax-i.xmax)<=t&&Math.abs(this.ymax-i.ymax)<=t:this.xmin===i.xmin&&this.ymin===i.ymin&&this.xmax===i.xmax&&this.ymax===i.ymax)}setCoords(t){void 0!==t.xmin?(this.xmin=t.xmin,this.xmax=t.xmax,this.ymin=t.ymin,this.ymax=t.ymax):void 0!==t.x?(this.xmin=t.x,this.xmax=t.x,this.ymin=t.y,this.ymax=t.y):void 0!==t.pt1?(this.xmin=t.pt1.x,this.ymin=t.pt1.y,this.xmax=t.pt2.x,this.ymax=t.pt2.y,this.normalize()):void 0!==t.env2D?(this.xmin=t.env2D.xmin,this.xmax=t.env2D.xmax,this.ymin=t.env2D.ymin,this.ymax=t.env2D.ymax,this.normalize()):void 0!==t.pt?(this.xmin=t.pt.x,this.xmax=t.pt.x,this.ymin=t.pt.y,this.ymax=t.pt.y):void 0!==t.center?(this.xmin=t.center.x-.5*t.width,this.xmax=this.xmin+t.width,this.ymin=t.center.y-.5*t.height,this.ymax=this.ymin+t.height,this.normalize()):i("unrecognized input type for setCoords"),this.normalize()}queryIntervalX(i){this.isEmpty()?i.setEmpty():i.setCoords(this.xmin,this.xmax)}queryIntervalY(i){this.isEmpty()?i.setEmpty():i.setCoords(this.ymin,this.ymax)}setFromPoints(i,t){if(0===t)return void this.setEmpty();if(Array.isArray(i)){const s=i;this.setCoords(s[0]);for(let i=1;i<t;){if(!this.isEmpty()){for(let m=i;m<t;m++)this.mergeNe(s[m]);return}this.setCoords(s[i]),i++}return}const s=i;this.setCoords({x:s[0],y:s[1]});for(let m=1,h=2*t;m<h;m+=2){if(!this.isEmpty()){for(let i=m,h=2*t;i<h;i+=2)this.mergeNeCoords(s[i],s[i+1]);return}this.setCoords({x:s[m],y:s[m+1]}),m+=2}}normalize(){let i=!1;this.xmin<=this.xmax||([this.xmin,this.xmax]=[this.xmax,this.xmin],i=!0),this.ymin<=this.ymax||([this.ymin,this.ymax]=[this.ymax,this.ymin],i=!0),!i||this.xmin<=this.xmax&&this.ymin<=this.ymax||this.setEmpty()}isValid(){return this.isEmpty()||this.xmin<=this.xmax&&this.ymin<=this.ymax}getLowerLeft(){return new s(this.xmin,this.ymin)}getLowerRight(){return new s(this.xmax,this.ymin)}getUpperLeft(){return new s(this.xmin,this.ymax)}getUpperRight(){return new s(this.xmax,this.ymax)}move(i,t){this.isEmpty()||(this.xmin+=i,this.ymin+=t,this.xmax+=i,this.ymax+=t)}centerAtCoords(i,t){this.move(i-this.getCenterX(),t-this.getCenterY())}centerAt(i){this.centerAtCoords(i.x,i.y)}containsCoords(i,t){return i>=this.xmin&&i<=this.xmax&&t>=this.ymin&&t<=this.ymax}contains(i){return this.containsCoords(i.x,i.y)}containsEnvelope(i){return i.xmin>=this.xmin&&i.xmax<=this.xmax&&i.ymin>=this.ymin&&i.ymax<=this.ymax}containsExclusiveCoords(i,t){return i>this.xmin&&i<this.xmax&&t>this.ymin&&t<this.ymax}containsExclusive(i){return this.containsExclusiveCoords(i.x,i.y)}containsExclusiveEnvelope(i){return i.xmin>this.xmin&&i.xmax<this.xmax&&i.ymin>this.ymin&&i.ymax<this.ymax}isIntersecting(i){return(this.xmin<=i.xmin?this.xmax>=i.xmin:i.xmax>=this.xmin)&&(this.ymin<=i.ymin?this.ymax>=i.ymin:i.ymax>=this.ymin)}isIntersectingNe(i){return(this.xmin<=i.xmin?this.xmax>=i.xmin:i.xmax>=this.xmin)&&(this.ymin<=i.ymin?this.ymax>=i.ymin:i.ymax>=this.ymin)}intersect(i){if(this.isEmpty())return!1;if(i.isEmpty())return this.setEmpty(),!1;i.xmin>this.xmin&&(this.xmin=i.xmin),i.xmax<this.xmax&&(this.xmax=i.xmax),i.ymin>this.ymin&&(this.ymin=i.ymin),i.ymax<this.ymax&&(this.ymax=i.ymax);const t=this.xmin<=this.xmax&&this.ymin<=this.ymax;return t||this.setEmpty(),t}queryCorner(i){switch(3&i){case 0:return new s(this.xmin,this.ymin);case 1:return new s(this.xmin,this.ymax);case 2:return new s(this.xmax,this.ymax);default:return new s(this.xmax,this.ymin)}}queryCorners(i){i[0].setCoords(this.xmin,this.ymin),i[1].setCoords(this.xmin,this.ymax),i[2].setCoords(this.xmax,this.ymax),i[3].setCoords(this.xmax,this.ymin)}queryCornersReversed(i){i[0].setCoords(this.xmin,this.ymin),i[1].setCoords(this.xmax,this.ymin),i[2].setCoords(this.xmax,this.ymax),i[3].setCoords(this.xmin,this.ymax)}reaspect(i,t){if(this.isEmpty())return;const s=i/t,m=.5*this.width(),h=.5*this.height()*s;if(m<=h){const i=this.getCenterX();this.xmin=i-h,this.xmax=i+h}else{const i=m/s,t=this.getCenterY();this.ymin=t-i,this.ymax=t+i}this.normalize()}getArea(){return this.isEmpty()?0:this.width()*this.height()}getLength(){return this.isEmpty()?0:2*(this.width()+this.height())}clipCode(i){return(i.x<this.xmin?1:0)|(i.x>this.xmax?1:0)<<1|(i.y<this.ymin?1:0)<<2|(i.y>this.ymax?1:0)<<3}clipLine(i,t){let s=this.clipCode(i),m=this.clipCode(t);if(s&m)return 0;if(!(s|m))return 4;const h=(s?1:0)|(m?2:0);do{const h=t.x-i.x,x=t.y-i.y;if(Math.abs(h)>Math.abs(x)?s&n.XMASK?(s&n.XLESSXMIN?(i.y+=x*(this.xmin-i.x)/h,i.x=this.xmin):(i.y+=x*(this.xmax-i.x)/h,i.x=this.xmax),s=this.clipCode(i)):m&n.XMASK?(m&n.XLESSXMIN?(t.y+=x*(this.xmin-t.x)/h,t.x=this.xmin):(t.y+=x*(this.xmax-t.x)/h,t.x=this.xmax),m=this.clipCode(t)):s?(s&n.YLESSYMIN?(i.x+=h*(this.ymin-i.y)/x,i.y=this.ymin):(i.x+=h*(this.ymax-i.y)/x,i.y=this.ymax),s=this.clipCode(i)):(m&n.YLESSYMIN?(t.x+=h*(this.ymin-t.y)/x,t.y=this.ymin):(t.x+=h*(this.ymax-t.y)/x,t.y=this.ymax),m=this.clipCode(t)):s&n.YMASK?(s&n.YLESSYMIN?(i.x+=h*(this.ymin-i.y)/x,i.y=this.ymin):(i.x+=h*(this.ymax-i.y)/x,i.y=this.ymax),s=this.clipCode(i)):m&n.YMASK?(m&n.YLESSYMIN?(t.x+=h*(this.ymin-t.y)/x,t.y=this.ymin):(t.x+=h*(this.ymax-t.y)/x,t.y=this.ymax),m=this.clipCode(t)):s?(s&n.XLESSXMIN?(i.y+=x*(this.xmin-i.x)/h,i.x=this.xmin):(i.y+=x*(this.xmax-i.x)/h,i.x=this.xmax),s=this.clipCode(i)):(m&n.XLESSXMIN?(t.y+=x*(this.xmin-t.x)/h,t.x=this.xmin):(t.y+=x*(this.xmax-t.x)/h,t.x=this.xmax),m=this.clipCode(t)),s&m)return 0}while(s|m);return h}distanceFromEnvelope(i){return Math.sqrt(this.sqrDistanceEnvelope(i,null,null))}distance(i){return Math.sqrt(this.sqrDistance(i))}sqrDistanceEnvelope(i,t,s){if(!t&&!s){if(this.isEmpty()||i.isEmpty())return Number.NaN;let t,s=0,m=0;return t=this.xmin-i.xmax,t>s&&(s=t),t=this.ymin-i.ymax,t>m&&(m=t),t=i.xmin-this.xmax,t>s&&(s=t),t=i.ymin-this.ymax,t>m&&(m=t),s*s+m*m}if(this.isEmpty()||i.isEmpty())return t&&t.setNAN(),s&&s.setNAN(),Number.NaN;let m,h=0,x=0;const n=Math.max(this.xmin,i.xmin),e=Math.max(this.ymin,i.ymin);return t&&t.setCoords(n,e),s&&s.setCoords(n,e),m=this.xmin-i.xmax,m>h&&(h=m,t&&(t.x=this.xmin),s&&(s.x=i.xmax)),m=this.ymin-i.ymax,m>x&&(x=m,t&&(t.y=this.ymin),s&&(s.y=i.ymax)),m=i.xmin-this.xmax,m>h&&(h=m,t&&(t.x=this.xmax),s&&(s.x=i.xmin)),m=i.ymin-this.ymax,m>x&&(x=m,t&&(t.y=this.ymax),s&&(s.y=i.ymin)),h*h+x*x}sqrDistance(i,t){if(void 0===t){if(this.isEmpty()||i.isNAN())return Number.NaN;let t,s=0,m=0;return t=this.xmin-i.x,t>s&&(s=t),t=this.ymin-i.y,t>m&&(m=t),t=i.x-this.xmax,t>s&&(s=t),t=i.y-this.ymax,t>m&&(m=t),s*s+m*m}if(this.isEmpty()||i.isNAN())return t.setNAN(),Number.NaN;t.assign(i);let s,m=0,h=0;return s=this.xmin-i.x,s>m&&(m=s,t.x=this.xmin),s=this.ymin-i.y,s>h&&(h=s,t.y=this.ymin),s=i.x-this.xmax,s>m&&(m=s,t.x=this.xmax),s=i.y-this.ymax,s>h&&(h=s,t.y=this.ymax),m*m+h*h}sqrMaxMinDistanceEnvelope(i){if(this.isEmpty()||i.isEmpty())return Number.NaN;let t=Number.MAX_VALUE;{const m=s.sqrDistanceCoords(this.xmin,this.ymin,i.xmax,i.ymin),h=s.sqrDistanceCoords(this.xmin,this.ymin,i.xmax,i.ymax),x=s.sqrDistanceCoords(this.xmin,this.ymax,i.xmax,i.ymin),n=s.sqrDistanceCoords(this.xmin,this.ymax,i.xmax,i.ymax),e=Math.max(m,h),a=Math.max(x,n),r=Math.max(e,a);t=Math.min(r,t)}{const m=s.sqrDistanceCoords(this.xmin,this.ymin,i.xmin,i.ymax),h=s.sqrDistanceCoords(this.xmin,this.ymin,i.xmax,i.ymax),x=s.sqrDistanceCoords(this.xmax,this.ymin,i.xmin,i.ymax),n=s.sqrDistanceCoords(this.xmax,this.ymin,i.xmax,i.ymax),e=Math.max(m,h),a=Math.max(x,n),r=Math.max(e,a);t=Math.min(r,t)}{const m=s.sqrDistanceCoords(this.xmax,this.ymin,i.xmin,i.ymin),h=s.sqrDistanceCoords(this.xmax,this.ymin,i.xmin,i.ymax),x=s.sqrDistanceCoords(this.xmax,this.ymax,i.xmin,i.ymin),n=s.sqrDistanceCoords(this.xmax,this.ymax,i.xmin,i.ymax),e=Math.max(m,h),a=Math.max(x,n),r=Math.max(e,a);t=Math.min(r,t)}{const m=s.sqrDistanceCoords(this.xmin,this.ymax,i.xmin,i.ymin),h=s.sqrDistanceCoords(this.xmin,this.ymax,i.xmax,i.ymin),x=s.sqrDistanceCoords(this.xmax,this.ymax,i.xmin,i.ymin),n=s.sqrDistanceCoords(this.xmax,this.ymax,i.xmax,i.ymin),e=Math.max(m,h),a=Math.max(x,n),r=Math.max(e,a);t=Math.min(r,t)}return t}sqrMaxDistanceEnvelope(i){if(this.isEmpty()||i.isEmpty())return Number.NaN;let t=0;const h=m(s,4);this.queryCorners(h);const x=m(s,4);i.queryCorners(x);for(let m=0;m<4;m++)for(let i=0;i<4;i++){const n=s.sqrDistance(h[m],x[i]);n>t&&(t=n)}return t}sqrMaxMinDistance(i){const t=s.sqrDistance(i,this.getLowerLeft()),m=s.sqrDistance(i,this.getUpperLeft()),h=s.sqrDistance(i,this.getLowerRight()),x=s.sqrDistance(i,this.getUpperRight());let n,e=Math.max(t,m);return n=Math.max(t,h),e>n&&(e=n),n=Math.max(m,x),e>n&&(e=n),n=Math.max(h,x),e>n&&(e=n),e}sqrMinDistance(i){if(this.contains(i))return 0;return this.sqrDistance(i)}sqrMaxDistance(i){let t=s.sqrDistance(i,this.getLowerLeft());return t=Math.max(s.sqrDistance(i,this.getUpperLeft()),t),t=Math.max(s.sqrDistance(i,this.getUpperRight()),t),t=Math.max(s.sqrDistance(i,this.getLowerRight()),t),t}snapToBoundary(i){if(i.isNAN())return!1;if(this.isEmpty())return i.setNAN(),!0;let t=!0;if(i.x<this.xmin?i.x=this.xmin:i.x>this.xmax?i.x=this.xmax:t=!1,i.y<this.ymin?i.y=this.ymin:i.y>this.ymax?i.y=this.ymax:t=!1,t)return!0;if(i.x===this.xmin||i.x===this.xmax||i.y===this.ymin||i.y===this.ymax)return!1;const s=this.xmax-i.x,m=i.x-this.xmin,h=this.ymax-i.y,x=i.y-this.ymin;return Math.max(s,m)>Math.max(h,x)?i.y=x<h?this.ymin:this.ymax:i.x=m<s?this.xmin:this.xmax,!0}snapClip(i){const t=h(i.x,this.xmin,this.xmax),m=h(i.y,this.ymin,this.ymax);return s.construct(t,m)}boundaryDistance(i){if(this.isEmpty()||i.isNAN())return Number.NaN;if(i.x===this.xmin)return i.y-this.ymin;const t=this.ymax-this.ymin,m=this.xmax-this.xmin;if(i.y===this.ymax)return t+i.x-this.xmin;if(i.x===this.xmax)return t+m+this.ymax-i.y;if(i.y===this.ymin)return 2*t+m+this.xmax-i.x;const h=new s;return h.setCoordsPoint2D(i),this.snapToBoundary(h),this.boundaryDistance(h)}envelopeSide(i){if(this.isEmpty())return-1;let t=this.boundaryDistance(i);const s=this.ymax-this.ymin,m=this.xmax-this.xmin;return t<s?0:(t-=s)<m?1:t-m<s?2:3}querySide(i,s){switch(i){case 0:s.constructFromCoords(this.xmin,this.ymin,this.xmin,this.ymax);break;case 1:s.constructFromCoords(this.xmin,this.ymax,this.xmax,this.ymax);break;case 2:s.constructFromCoords(this.xmax,this.ymax,this.xmax,this.ymin);break;case 3:s.constructFromCoords(this.xmax,this.ymin,this.xmin,this.ymin);break;default:t("query_side")}return s}isPointOnBoundary(i,t){return Math.abs(i.x-this.xmin)<=t||Math.abs(i.x-this.xmax)<=t||Math.abs(i.y-this.ymin)<=t||Math.abs(i.y-this.ymax)<=t}calculateToleranceFromEnvelope(){if(this.isEmpty())return x();return(Math.abs(this.xmin)+Math.abs(this.xmax)+Math.abs(this.ymin)+Math.abs(this.ymax)+1)*x()}toString(){return`[${this.xmin}, ${this.ymin}, ${this.xmax}, ${this.ymax}]`}}n.XLESSXMIN=1,n.YLESSYMIN=4,n.XMASK=3,n.YMASK=12;export{n as Envelope2D};