UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) • 5.74 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{JSONMap as t}from"../../../core/jsonMap.js";import{isIntegerPixelType as n,clipBandToPixelTypeRange as e}from"../formats/pixelRangeUtils.js";import{calculateCustomBandIndex as r}from"./customBandIndexUtils.js";import{isValidPixelBlock as o}from"./pixelUtils.js";import a from"../../support/PixelBlock.js";const i=new t({0:"custom",1:"ndvi",2:"savi",3:"tsavi",4:"msavi",5:"gemi",6:"pvi",7:"gvitm",8:"sultan",9:"vari",10:"gndvi",11:"sr",12:"ndvi-re",13:"sr-re",14:"mtvi2",15:"rtvi-core",16:"ci-re",17:"ci-g",18:"ndwi",19:"evi",20:"iron-oxide",21:"ferrous-minerals",22:"clay-minerals",23:"wndwi",24:"bai",25:"nbr",26:"ndbi",27:"ndmi",28:"ndsi",29:"mndwi"},{useNumericKeys:!0});function s(t,i){if(!o(t))return t;const{equation:s,method:l}=i,c=i.bandIndexes.map(t=>t-1),{pixels:U,mask:q}=t;let M;switch(l){case"gndvi":case"nbr":case"ndbi":case"ndvi":case"ndvi-re":case"ndsi":case"ndmi":case"mndwi":M=u(q,U[c[0]],U[c[1]]);break;case"ndwi":M=u(q,U[c[1]],U[c[0]]);break;case"sr":case"sr-re":case"iron-oxide":case"ferrous-minerals":case"clay-minerals":M=f(q,U[c[0]],U[c[1]]);break;case"ci-g":case"ci-re":M=h(q,U[c[0]],U[c[1]]);break;case"savi":M=w(q,U[c[0]],U[c[1]],c[2]+1);break;case"tsavi":M=m(q,U[c[0]],U[c[1]],c[2]+1,c[3]+1,c[4]+1);break;case"msavi":M=d(q,U[c[0]],U[c[1]]);break;case"gemi":M=g(q,U[c[0]],U[c[1]]);break;case"pvi":M=y(q,U[c[0]],U[c[1]],c[2]+1,c[3]+1);break;case"gvitm":M=p(q,[U[c[0]],U[c[1]],U[c[2]],U[c[3]],U[c[4]],U[c[5]]]);break;case"sultan":M=b(q,[U[c[0]],U[c[1]],U[c[2]],U[c[3]],U[c[4]]]);break;case"vari":M=v(q,[U[c[0]],U[c[1]],U[c[2]]]);break;case"mtvi2":M=k(q,[U[c[0]],U[c[1]],U[c[2]]]);break;case"rtvi-core":M=A(q,[U[c[0]],U[c[1]],U[c[2]]]);break;case"evi":M=F(q,[U[c[0]],U[c[1]],U[c[2]]]);break;case"wndwi":M=x(q,[U[c[0]],U[c[1]],U[c[2]]],c[3]?c[3]+1:.5);break;case"bai":M=j(q,U[c[0]],U[c[1]]);break;case"custom":M=r(q,U,s);break;default:return t}const{outputPixelType:B="f32"}=i,T=null!=B&&n(B);let I;q?(I=new Uint8Array(t.width*t.height),I.set(q)):T&&(I=new Uint8Array(t.width*t.height).fill(255)),T&&(M=M.map(t=>{const n=a.createEmptyBand(B,t.length);return e(t,I,B,n),n}));const P=new a({width:t.width,height:t.height,pixelType:B,pixels:M,mask:I});return P.updateStatistics(),P}function l(t,n,e,r){const{mask:o,pixels:i,width:s,height:l}=t,c=i[e],u=i[n],f=u.length,h=r?new Uint8Array(f):new Float32Array(f),w=r?100:1,m=r?100.5:0;for(let a=0;a<f;a++)if(null==o||o[a]){const t=c[a],n=u[a],e=t+n;e&&(h[a]=(t-n)/e*w+m)}const d=new a({width:s,height:l,mask:o,pixelType:r?"u8":"f32",pixels:[h]});return d.updateStatistics(),d}function c(t){const n=new Float32Array(9);return n[3*t[0]]=1,n[3*t[1]+1]=1,n[3*t[2]+2]=1,n}function u(t,n,e){const r=e.length,o=new Float32Array(r);for(let a=0;a<r;a++)if(null==t||t[a]){const t=n[a],r=e[a],i=t+r;i&&(o[a]=(t-r)/i)}return[o]}function f(t,n,e){const r=e.length,o=new Float32Array(r);for(let a=0;a<r;a++)if(null==t||t[a]){const t=n[a],r=e[a];r&&(o[a]=t/r)}return[o]}function h(t,n,e){const r=n.length,o=new Float32Array(r);for(let a=0;a<r;a++)if(null==t||t[a]){const t=n[a],r=e[a];r&&(o[a]=t/r-1)}return[o]}function w(t,n,e,r){const o=e.length,a=new Float32Array(o);for(let i=0;i<o;i++)if(null==t||t[i]){const t=e[i],o=n[i],s=o+t+r;s&&(a[i]=(o-t)/s*(1+r))}return[a]}function m(t,n,e,r,o,a){const i=e.length,s=new Float32Array(i),l=-o*r+a*(1+r*r);for(let c=0;c<i;c++)if(null==t||t[c]){const t=e[c],a=n[c],i=o*a+t+l;i&&(s[c]=r*(a-r*t-o)/i)}return[s]}function d(t,n,e){const r=e.length,o=new Float32Array(r);for(let a=0;a<r;a++)if(null==t||t[a]){const t=e[a],r=n[a],i=2*r+1;o[a]=.5*(i-Math.sqrt(i*i-8*(r-t)))}return[o]}function g(t,n,e){const r=e.length,o=new Float32Array(r);for(let a=0;a<r;a++)if(null==t||t[a]){const t=e[a],r=n[a];if(1!==t&&r+t+.5!==0){const n=(2*(r*r-t*t)+1.5*r+.5*t)/(r+t+.5);o[a]=n*(1-.25*n)-(t-.125)/(1-t)}}return[o]}function y(t,n,e,r,o){const a=e.length,i=new Float32Array(a),s=1/Math.sqrt(1+r*r);for(let l=0;l<a;l++)if(null==t||t[l]){const t=e[l],a=n[l];i[l]=(a-r*t-o)*s}return[i]}function p(t,n){const[e,r,o,a,i,s]=n,l=e.length,c=new Float32Array(l);for(let u=0;u<l;u++)(null==t||t[u])&&(c[u]=-.2848*e[u]-.2435*r[u]-.5436*o[u]+.7243*a[u]+.084*i[u]-.18*s[u]);return[c]}function b(t,n){const[e,r,o,a,i]=n,s=e.length,l=new Float32Array(s),c=new Float32Array(s),u=new Float32Array(s);for(let f=0;f<s;f++)(null==t||t[f])&&(l[f]=i[f]?a[f]/i[f]*100:0,c[f]=e[f]?a[f]/e[f]*100:0,u[f]=o[f]?r[f]/o[f]*(a[f]/o[f])*100:0);return[l,c,u]}function v(t,n){const[e,r,o]=n,a=e.length,i=new Float32Array(a);for(let s=0;s<a;s++)if(null==t||t[s])for(s=0;s<a;s++){const t=e[s],n=r[s],a=n+t-o[s];a&&(i[s]=(n-t)/a)}return[i]}function k(t,n){const[e,r,o]=n,a=e.length,i=new Float32Array(a);for(let s=0;s<a;s++)if(null==t||t[s])for(s=0;s<a;s++){const t=e[s],n=r[s],a=o[s],l=Math.sqrt((2*t+1)**2-(6*t-5*Math.sqrt(n))-.5);if(l){const e=1.5*(1.2*(t-a)-2.5*(n-a));i[s]=e/l}}return[i]}function A(t,n){const[e,r,o]=n,a=e.length,i=new Float32Array(a);for(let s=0;s<a;s++)if(null==t||t[s])for(s=0;s<a;s++){const t=e[s],n=r[s],a=o[s];i[s]=100*(t-n)-10*(t-a)}return[i]}function F(t,n){const[e,r,o]=n,a=e.length,i=new Float32Array(a);for(let s=0;s<a;s++)if(null==t||t[s])for(s=0;s<a;s++){const t=e[s],n=r[s],a=t+6*n-7.5*o[s]+1;a&&(i[s]=2.5*(t-n)/a)}return[i]}function x(t,n,e=.5){const[r,o,a]=n,i=o.length,s=new Float32Array(i);for(let l=0;l<i;l++)if(null==t||t[l])for(l=0;l<i;l++){const t=r[l],n=o[l],i=a[l],c=t+e*n+(1-e)*i;c&&(s[l]=(t-e*n-(1-e)*i)/c)}return[s]}function j(t,n,e){const r=e.length,o=new Float32Array(r);for(let a=0;a<r;a++)if(null==t||t[a])for(a=0;a<r;a++){const t=(.1-n[a])**2+(.06-e[a])**2;t&&(o[a]=1/t)}return[o]}export{i as bandIndexMethodMap,s as calculateBandIndex,l as calculateNDVI,c as getBandMatrix3};