UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 1.72 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{clamp as t}from"../../../core/mathUtils.js";import{ElevationSamplerData as a}from"../../../layers/support/ElevationSamplerData.js";import{bilerp as o}from"../support/mathUtils.js";import{elevationNoDataValue as s}from"./TerrainConst.js";class r{constructor(t,o,s){this.type="elevation",this.level=t[0],this.i=t[1],this.j=t[2],this.extent=o,this.samplerData=new a(s,o)}computeMinMaxValue(t,a,r,i){i.min=1/0,i.max=-1/0,i.hasNoDataValues=!1;const e=t-this.level;if(e<=0)return i;const l=2**e;if(!(Math.floor(a/l)===this.i&&Math.floor(r/l)===this.j))return i;let n=1/0,h=-1/0;const f=this.samplerData.data.width,m=this.samplerData.data.values,u=.5*s;let c=(f-1)/l,p=(r-this.j*l)*c,M=(a-this.i*l)*c;if(c<1){const t=Math.floor(p),a=Math.floor(M),s=t+a*f,r=m[s],e=m[s+1],l=m[s+f],n=m[s+f+1];if(r+e+l+n<u){const s=p-t,h=M-a,f=o(r,e,l,n,s,h),m=o(r,e,l,n,s+c,h),u=o(r,e,l,n,s,h+c),x=o(r,e,l,n,s+c,h+c);return i.min=Math.min(f,m,u,x),i.max=Math.max(f,m,u,x),i}p=t,M=a,c=1}else p=Math.floor(p),M=Math.floor(M),c=Math.ceil(c);for(let o=p;o<=p+c;o++)for(let t=M;t<=M+c;t++){const a=m[o+t*f];a<u?(n=Math.min(n,a),h=Math.max(h,a)):i.hasNoDataValues=!0}return i.min=n,i.max=h,i}}const i=.5*s;function e(a,o,s){if(null==s)return null;for(const r of s){if(!r)continue;const s=r.safeWidth;let e=t(r.dy*(r.y1-o),0,s),l=t(r.dx*(a-r.x0),0,s);const n=Math.floor(e),h=Math.floor(l),f=r.data.width,m=n*f+h,u=r.data.values,c=u[m],p=u[m+1],M=m+f,x=u[M],d=u[M+1];if(c+x+p+d<i){e-=n,l-=h;const t=c+(p-c)*l;return t+(x+(d-x)*l-t)*e}}return null}export{r as ElevationData,e as sampleElevation};