@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 1.69 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
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 i}from"./TerrainConst.js";class e{constructor(t,o,i){this.type="elevation",this.level=t[0],this.i=t[1],this.j=t[2],this.extent=o,this.samplerData=new a(i,o)}computeMinMaxValue(t,a,e,s){s.minElevation=1/0,s.maxElevation=-1/0,s.hasNoDataValues=!1;const l=t-this.level;if(l<=0)return s;const r=2**l;if(!(Math.floor(a/r)===this.i&&Math.floor(e/r)===this.j))return s;let n=1/0,h=-1/0;const f=this.samplerData.data.width,m=this.samplerData.data.values,u=.5*i;let c=(f-1)/r,p=(e-this.j*r)*c,M=(a-this.i*r)*c;if(c<1){const t=Math.floor(p),a=Math.floor(M),i=t+a*f,e=m[i],l=m[i+1],r=m[i+f],n=m[i+f+1];if(e+l+r+n<u){const i=p-t,h=M-a,f=o(e,l,r,n,i,h),m=o(e,l,r,n,i+c,h),u=o(e,l,r,n,i,h+c),v=o(e,l,r,n,i+c,h+c);return s.minElevation=Math.min(f,m,u,v),s.maxElevation=Math.max(f,m,u,v),s}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)):s.hasNoDataValues=!0}return s.minElevation=n,s.maxElevation=h,s}}const s=.5*i;function l(a,o,i){if(null==i)return null;for(const e of i){if(!e)continue;const i=e.safeWidth;let l=t(e.dy*(e.y1-o),0,i),r=t(e.dx*(a-e.x0),0,i);const n=Math.floor(l),h=Math.floor(r),f=e.data.width,m=n*f+h,u=e.data.values,c=u[m],p=u[m+1],M=m+f,v=u[M],x=u[M+1];if(c+v+p+x<s){l-=n,r-=h;const t=c+(p-c)*r;return t+(v+(x-v)*r-t)*l}}return null}export{e as ElevationData,l as sampleElevation};