UNPKG

@sakitam-gis/kriging

Version:

kriging.js is a Javascript library providing spatial prediction and mapping capabilities via the ordinary kriging algorithm.

2 lines (1 loc) 6.72 kB
!function(r,a){"object"==typeof exports&&"undefined"!=typeof module?a(exports):"function"==typeof define&&define.amd?define(["exports"],a):a((r=r||self).kriging={})}(this,function(r){"use strict";function M(r){return Math.max.apply(null,r)}function x(r){return Math.min.apply(null,r)}function z(r,a){for(var t=[],o=0;o<a;o++)t.push(r);return t}function y(r,a,t){for(var o=0,e=r.length-1,n=!1,i=r.length;o<i;e=o++)r[o][1]>t!=r[e][1]>t&&a<(r[e][0]-r[o][0])*(t-r[o][1])/(r[e][1]-r[o][1])+r[o][0]&&(n=!n);return n}function D(r,a){for(var t=0,o=z(0,a*a);t<a;t++)o[t*a+t]=r;return o}function E(r,a,t){for(var o,e=0,n=Array(t*a);e<a;e++)for(o=0;o<t;o++)n[o*a+e]=r[e*t+o];return n}function G(r,a,t,o){for(var e,n=0,i=Array(t*o);n<t;n++)for(e=0;e<o;e++)i[n*o+e]=r[n*o+e]+a[n*o+e];return i}function R(r,a,t,o,e){for(var n,i,f=0,l=Array(t*e);f<t;f++)for(n=0;n<e;n++)for(i=l[f*e+n]=0;i<o;i++)l[f*e+n]+=r[f*o+i]*a[i*e+n];return l}function T(r,a){var t,o,e,n=Array(a);for(t=0;t<a;t++)n[t]=r[t*a+t];for(t=0;t<a;t++){for(o=0;o<t;o++)n[t]-=r[t*a+o]*r[t*a+o];if(n[t]<=0)return!1;for(n[t]=Math.sqrt(n[t]),o=t+1;o<a;o++){for(e=0;e<t;e++)r[o*a+t]-=r[o*a+e]*r[t*a+e];r[o*a+t]/=n[t]}}for(t=0;t<a;t++)r[t*a+t]=n[t];return!0}function _(r,a){var t,o,e,n;for(t=0;t<a;t++)for(r[t*a+t]=1/r[t*a+t],o=t+1;o<a;o++){for(n=0,e=t;e<o;e++)n-=r[o*a+e]*r[e*a+t];r[o*a+t]=n/r[o*a+o]}for(t=0;t<a;t++)for(o=t+1;o<a;o++)r[t*a+o]=0;for(t=0;t<a;t++){for(r[t*a+t]*=r[t*a+t],e=t+1;e<a;e++)r[t*a+t]+=r[e*a+t]*r[e*a+t];for(o=t+1;o<a;o++)for(e=o;e<a;e++)r[t*a+o]+=r[e*a+t]*r[e*a+o]}for(t=0;t<a;t++)for(o=0;o<t;o++)r[t*a+o]=r[o*a+t]}function q(r,a){var t,o,e,n,i,f,l,h,u,g=a,c=Array(a*a),p=Array(a),s=Array(a),v=Array(a),d=0,m=0;for(t=0;t<a;t++)for(o=0;o<a;o++)c[t*a+o]=t===o?1:0;for(o=0;o<a;o++)v[o]=0;for(t=0;t<a;t++){for(o=f=0;o<a;o++)if(1!==v[o])for(e=0;e<a;e++)0===v[e]&&Math.abs(r[o*a+e])>=f&&(f=Math.abs(r[o*a+e]),m=o,d=e);if(++v[d],m!==d){for(n=0;n<a;n++)u=r[m*a+n],r[m*a+n]=r[d*a+n],r[d*a+n]=u;for(n=0;n<g;n++)u=c[m*a+n],c[m*a+n]=c[d*a+n],c[d*a+n]=u}if(s[t]=m,0===r[(p[t]=d)*a+d])return!1;for(h=1/r[d*a+d],r[d*a+d]=1,n=0;n<a;n++)r[d*a+n]*=h;for(n=0;n<g;n++)c[d*a+n]*=h;for(i=0;i<a;i++)if(i!==d){for(l=r[i*a+d],n=r[i*a+d]=0;n<a;n++)r[i*a+n]-=r[d*a+n]*l;for(n=0;n<g;n++)c[i*a+n]-=c[d*a+n]*l}}for(n=a-1;0<=n;n--)if(s[n]!==p[n])for(e=0;e<a;e++)u=r[e*a+s[n]],r[e*a+s[n]]=r[e*a+p[n]],r[e*a+p[n]]=u;return!0}function O(r,a,t,o,e){return a+(o-a)/t*(1-Math.exp(-1/e*Math.pow(r/t,2)))}function P(r,a,t,o,e){return a+(o-a)/t*(1-Math.exp(-1/e*(r/t)))}function B(r,a,t,o){return t<r?a+(o-a)/t:a+(o-a)/t*(r/t*1.5-.5*Math.pow(r/t,3))}function a(r,a,t,o,e,n){var i,f,l,h,u={t:r,x:a,y:t,nugget:0,range:0,sill:0,A:1/3,n:0,model:P,K:[],M:[]};switch(o){case"gaussian":u.model=O;break;case"exponential":u.model=P;break;case"spherical":u.model=B;break;default:u.model=P}var g=r.length,c=Array((g*g-g)/2);for(l=i=0;i<g;i++)for(f=0;f<i;f++,l++)c[l]=Array(2),c[l][0]=Math.pow(Math.pow(a[i]-a[f],2)+Math.pow(t[i]-t[f],2),.5),c[l][1]=Math.abs(r[i]-r[f]);c.sort(function(r,a){return r[0]-a[0]}),u.range=c[(g*g-g)/2-1][0];var p=30<(g*g-g)/2?30:(g*g-g)/2,s=u.range/p,v=z(0,p),d=z(0,p);if(p<30)for(h=0;h<p;h++)v[h]=c[h][0],d[h]=c[h][1];else{for(h=l=f=i=0;i<p&&f<(g*g-g)/2;i++,l=0){for(;c[f][0]<=(i+1)*s&&(v[h]+=c[f][0],d[h]+=c[f][1],l++,!((g*g-g)/2<=++f)););0<l&&(v[h]/=l,d[h]/=l,h++)}if(h<2)return u}g=h,u.range=v[g-1]-v[0];var m=z(1,2*g),M=Array(g),x=u.A;for(i=0;i<g;i++){switch(o){case"gaussian":m[2*i+1]=1-Math.exp(-1/x*Math.pow(v[i]/u.range,2));break;case"exponential":m[2*i+1]=1-Math.exp(-1/x*v[i]/u.range);break;case"spherical":m[2*i+1]=v[i]/u.range*1.5-.5*Math.pow(v[i]/u.range,3)}M[i]=d[i]}var y=E(m,g,2),A=R(y,m,2,g,2),w=(A=G(A,D(1/n,2),2,2)).slice(0);T(A,2)?_(A,2):(q(w,2),A=w);var b=R(R(A,y,2,2,g),M,2,g,1);u.nugget=b[0],u.sill=b[1]*u.range+u.nugget,u.n=a.length,g=a.length;var k=Array(g*g);for(i=0;i<g;i++){for(f=0;f<i;f++)k[i*g+f]=u.model(Math.pow(Math.pow(a[i]-a[f],2)+Math.pow(t[i]-t[f],2),.5),u.nugget,u.range,u.sill,u.A),k[f*g+i]=k[i*g+f];k[i*g+i]=u.model(0,u.nugget,u.range,u.sill,u.A)}var C=G(k,D(e,g),g,g),S=C.slice(0);T(C,g)?_(C,g):(q(S,g),C=S);var K=C.slice(0),j=R(C,r,g,g,1);return u.K=K,u.M=j,u}function A(r,a,t){var o,e=Array(t.n);for(o=0;o<t.n;o++)e[o]=t.model(Math.pow(Math.pow(r-t.x[o],2)+Math.pow(a-t.y[o],2),.5),t.nugget,t.range,t.sill,t.A);return R(e,t.M,1,t.n,1)[0]}function t(r,a,t){var o,e=Array(t.n);for(o=0;o<t.n;o++)e[o]=t.model(Math.pow(Math.pow(r-t.x[o],2)+Math.pow(a-t.y[o],2),.5),t.nugget,t.range,t.sill,t.A);var n=R(R(e,t.K,1,t.n,t.n),e,1,t.n,1)[0];return t.model(0,t.nugget,t.range,t.sill,t.A)+n}function o(r,a,t){var o,e,n,i=r.length;if(0!==i){var f,l,h=[r[0][0][0],r[0][0][0]],u=[r[0][0][1],r[0][0][1]];for(o=0;o<i;o++)for(e=0;e<r[o].length;e++)r[o][e][0]<h[0]&&(h[0]=r[o][e][0]),r[o][e][0]>h[1]&&(h[1]=r[o][e][0]),r[o][e][1]<u[0]&&(u[0]=r[o][e][1]),r[o][e][1]>u[1]&&(u[1]=r[o][e][1]);var g=Array(2),c=Array(2),p=Array(2),s=Array(2),v=Math.ceil((h[1]-h[0])/t),d=Math.ceil((u[1]-u[0])/t),m=Array(v+1);for(o=0;o<=v;o++)m[o]=Array(d+1);for(o=0;o<i;o++){for(p[0]=r[o][0][0],p[1]=p[0],s[0]=r[o][0][1],s[1]=s[0],e=1;e<r[o].length;e++)r[o][e][0]<p[0]&&(p[0]=r[o][e][0]),r[o][e][0]>p[1]&&(p[1]=r[o][e][0]),r[o][e][1]<s[0]&&(s[0]=r[o][e][1]),r[o][e][1]>s[1]&&(s[1]=r[o][e][1]);for(g[0]=Math.floor((p[0]-(p[0]-h[0])%t-h[0])/t),g[1]=Math.ceil((p[1]-(p[1]-h[1])%t-h[0])/t),c[0]=Math.floor((s[0]-(s[0]-u[0])%t-u[0])/t),c[1]=Math.ceil((s[1]-(s[1]-u[1])%t-u[0])/t),e=g[0];e<=g[1];e++)for(n=c[0];n<=c[1];n++)f=h[0]+e*t,l=u[0]+n*t,y(r[o],f,l)&&(m[e][n]=A(f,l,a))}return{xlim:h,ylim:u,width:t,data:m,zlim:[x(a.t),M(a.t)]}}}function e(r,a,t,o,e){var n=r.getContext("2d"),i=a.data,f=a.zlim,l=a.width;if(n){n.clearRect(0,0,r.width,r.height);var h=[t[1]-t[0],o[1]-o[0],f[1]-f[0]],u=void 0,g=void 0,c=void 0,p=void 0,s=void 0,v=i.length,d=i[0].length,m=Math.ceil(l*r.width/(t[1]-t[0])),M=Math.ceil(l*r.height/(o[1]-o[0]));for(u=0;u<v;u++)for(g=0;g<d;g++)void 0!==i[u][g]&&(c=r.width*(u*l+a.xlim[0]-t[0])/h[0],p=r.height*(1-(g*l+a.ylim[0]-o[0])/h[1]),(s=(i[u][g]-f[0])/h[2])<0&&(s=0),1<s&&(s=1),n.fillStyle=e[Math.floor((e.length-1)*s)],n.fillRect(Math.round(c-m/2),Math.round(p-M/2),m,M))}}var n={train:a,predict:A,variance:t,grid:o,plot:e,max:M,min:x,pip:y,rep:z,matrixDiag:D,matrixTranspose:E,matrixAdd:G,matrixMultiply:R,matrixChol:T,matrixChol2inv:_,matrixSolve:q,variogramGaussian:O,variogramExponential:P,variogramSpherical:B};r.default=n,r.grid=o,r.matrixAdd=G,r.matrixChol=T,r.matrixChol2inv=_,r.matrixDiag=D,r.matrixMultiply=R,r.matrixSolve=q,r.matrixTranspose=E,r.max=M,r.min=x,r.pip=y,r.plot=e,r.predict=A,r.rep=z,r.train=a,r.variance=t,r.variogramExponential=P,r.variogramGaussian=O,r.variogramSpherical=B,Object.defineProperty(r,"__esModule",{value:!0})});