Newer
Older
ganzhou-feidu / static / lib / freedo / Freedo / Workers / createVerticesFromHeightmap.js
bairujie on 14 Apr 2023 27 KB init
define(["./when-cbf8cd21","./Check-35e1a91d","./Math-e66fad2a","./Cartesian2-44433f55","./Matrix3-146a3f23","./Transforms-fc4c03e8","./RuntimeError-f4c64df1","./WebGLConstants-95ceb4e9","./ComponentDatatype-7ee14e67","./AttributeCompression-170b3be0","./IntersectionTests-caa0ba1a","./Plane-e04c899a","./WebMercatorProjection-c689ba4a","./createTaskProcessorWorker","./EllipsoidTangentPlane-d27aa001","./OrientedBoundingBox-6e047f5d","./TerrainEncoding-5829782a"],function(We,e,Ye,Xe,t,Ze,n,a,i,r,V,s,je,l,Ge,qe,Qe){"use strict";var o=Object.freeze({NONE:0,LERC:1}),Je={};Je.DEFAULT_STRUCTURE=Object.freeze({heightScale:1,heightOffset:0,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1});var Ke=new Xe.Cartesian3,$e=new Ze.Matrix4,et=new Xe.Cartesian3,tt=new Xe.Cartesian3;Je.computeVertices=function(e){var t,a,i,r=Math.cos,n=Math.sin,s=Math.sqrt,l=Math.atan,o=Math.exp,f=Ye.CesiumMath.PI_OVER_TWO,u=Ye.CesiumMath.toRadians,h=e.heightmap,c=e.width,d=e.height,m=e.skirtHeight,g=We.defaultValue(e.isGeographic,!0),p=We.defaultValue(e.ellipsoid,Xe.Ellipsoid.WGS84),w=1/p.maximumRadius,x=e.nativeRectangle,y=e.rectangle,k=We.defined(y)?(t=y.west,a=y.south,i=y.east,y.north):g?(t=u(x.west),a=u(x.south),i=u(x.east),u(x.north)):(t=x.west*w,a=f-2*l(o(-x.south*w)),i=x.east*w,f-2*l(o(-x.north*w))),U=e.relativeToCenter,T=We.defined(U),U=T?U:Xe.Cartesian3.ZERO,I=We.defaultValue(e.exaggeration,1),b=We.defaultValue(e.includeWebMercatorT,!1),v=We.defaultValue(e.structure,Je.DEFAULT_STRUCTURE),V=We.defaultValue(v.heightScale,Je.DEFAULT_STRUCTURE.heightScale),M=We.defaultValue(v.heightOffset,Je.DEFAULT_STRUCTURE.heightOffset),A=We.defaultValue(v.elementsPerHeight,Je.DEFAULT_STRUCTURE.elementsPerHeight),D=We.defaultValue(v.stride,Je.DEFAULT_STRUCTURE.stride),S=We.defaultValue(v.elementMultiplier,Je.DEFAULT_STRUCTURE.elementMultiplier),B=We.defaultValue(v.isBigEndian,Je.DEFAULT_STRUCTURE.isBigEndian),E=Xe.Rectangle.computeWidth(x),P=Xe.Rectangle.computeHeight(x),C=E/(c-1),F=P/(d-1);g||(E*=w,P*=w);var R,L,O=p.radiiSquared,N=O.x,z=O.y,_=O.z,H=65536,W=-65536,Y=Ze.Transforms.eastNorthUpToFixedFrame(U,p),X=Ze.Matrix4.inverseTransformation(Y,$e);b&&(R=je.WebMercatorProjection.geodeticLatitudeToMercatorAngle(a),L=1/(je.WebMercatorProjection.geodeticLatitudeToMercatorAngle(k)-R));var Z=et;Z.x=Number.POSITIVE_INFINITY,Z.y=Number.POSITIVE_INFINITY,Z.z=Number.POSITIVE_INFINITY;var j=tt;j.x=Number.NEGATIVE_INFINITY,j.y=Number.NEGATIVE_INFINITY,j.z=Number.NEGATIVE_INFINITY;var G=Number.POSITIVE_INFINITY,q=c*d,Q=q+(0<m?2*c+2*d:0),J=new Array(Q),K=new Array(Q),$=new Array(Q),ee=b?new Array(Q):[],te=0,ae=d,ie=0,re=c;0<m&&(--te,++ae,--ie,++re);for(var ne=te;ne<ae;++ne){var se=ne;se<0&&(se=0),d<=se&&(se=d-1);var le=x.north-F*se,oe=((le=g?u(le):f-2*l(o(-le*w)))-a)/(k-a),oe=Ye.CesiumMath.clamp(oe,0,1),fe=ne===te,ue=ne===ae-1;0<m&&(fe?le+=1e-5*P:ue&&(le-=1e-5*P));var he,ce=r(le),de=n(le),me=_*de;b&&(he=(je.WebMercatorProjection.geodeticLatitudeToMercatorAngle(le)-R)*L);for(var ge=ie;ge<re;++ge){var pe=ge;pe<0&&(pe=0),c<=pe&&(pe=c-1);var we=se*(c*D)+pe*D;if(1===A)ye=h[we];else{var xe,ye=0;if(B)for(xe=0;xe<A;++xe)ye=ye*S+h[we+xe];else for(xe=A-1;0<=xe;--xe)ye=ye*S+h[we+xe]}ye=(ye*V+M)*I,W=Math.max(W,ye),H=Math.min(H,ye);var ke=x.west+C*pe;g?ke=u(ke):ke*=w;var Ue=(ke-t)/(i-t),Ue=Ye.CesiumMath.clamp(Ue,0,1),Te=se*c+pe;if(0<m){var Ie=ge===ie,be=ge===re-1,ve=fe||ue||Ie||be;if((fe||ue)&&(Ie||be))continue;ve&&(ye-=m,Ie?(Te=d-se-1+q,ke-=1e-5*E):ue?Te=q+d+(c-pe-1):be?(Te=q+d+c+se,ke+=1e-5*E):fe&&(Te=q+d+c+d+pe))}var Ve=ce*r(ke),Me=ce*n(ke),Ae=N*Ve,De=z*Me,Se=1/s(Ae*Ve+De*Me+me*de),Be=Ae*Se,Ee=De*Se,Pe=me*Se,Ce=new Xe.Cartesian3;Ce.x=Be+Ve*ye,Ce.y=Ee+Me*ye,Ce.z=Pe+de*ye,J[Te]=Ce,K[Te]=ye,$[Te]=new Xe.Cartesian2(Ue,oe),b&&(ee[Te]=he),Ze.Matrix4.multiplyByPoint(X,Ce,Ke),Xe.Cartesian3.minimumByComponent(Ke,Z,Z),Xe.Cartesian3.maximumByComponent(Ke,j,j),G=Math.min(G,ye)}}var Fe,Re,Le=Ze.BoundingSphere.fromPoints(J);We.defined(y)&&(Fe=qe.OrientedBoundingBox.fromRectangle(y,H,W,p)),T&&(Re=new Qe.EllipsoidalOccluder(p).computeHorizonCullingPointPossiblyUnderEllipsoid(U,J,H));for(var Oe=new Ge.AxisAlignedBoundingBox(Z,j,U),Ne=new Qe.TerrainEncoding(Oe,G,W,Y,!1,b),ze=new Float32Array(Q*Ne.getStride()),_e=0,He=0;He<Q;++He)_e=Ne.encode(ze,_e,J[He],$[He],K[He],void 0,ee[He]);return{vertices:ze,maximumHeight:W,minimumHeight:H,encoding:Ne,boundingSphere3D:Le,orientedBoundingBox:Fe,occludeePointInScaledSpace:Re}};var f,u,h,c,d,D,M,A,S,B,E,P,z,C,m,g,x,y,k,p,w={};f={defaultNoDataValue:-34027999387901484e22,decode:function(e,t){var a=(t=t||{}).encodedMaskData||null===t.encodedMaskData,i=d(e,t.inputOffset||0,a),r=null!==t.noDataValue?t.noDataValue:f.defaultNoDataValue,n=u(i,t.pixelType||Float32Array,t.encodedMaskData,r,t.returnMask),s={width:i.width,height:i.height,pixelData:n.resultPixels,minValue:n.minValue,maxValue:i.pixels.maxValue,noDataValue:r};return n.resultMask&&(s.maskData=n.resultMask),t.returnEncodedMask&&i.mask&&(s.encodedMaskData=i.mask.bitset?i.mask.bitset:null),t.returnFileInfo&&(s.fileInfo=h(i),t.computeUsedBitDepths&&(s.fileInfo.bitDepths=c(i))),s}},u=function(e,t,a,i,r){var n,s,l,o=0,f=e.pixels.numBlocksX,u=e.pixels.numBlocksY,h=Math.floor(e.width/f),c=Math.floor(e.height/u),d=2*e.maxZError,m=Number.MAX_VALUE;a=a||(e.mask?e.mask.bitset:null),s=new t(e.width*e.height),r&&a&&(l=new Uint8Array(e.width*e.height));for(var g,p,w=new Float32Array(h*c),x=0;x<=u;x++){var y=x!==u?c:e.height%u;if(0!==y)for(var k=0;k<=f;k++){var U=k!==f?h:e.width%f;if(0!==U){var T,I,b,v,V=x*e.width*c+k*h,M=e.width-U,A=e.pixels.blocks[o];if(A.encoding<2?(T=0===A.encoding?A.rawData:(D(A.stuffedData,A.bitsPerPixel,A.numValidPixels,A.offset,d,w,e.pixels.maxValue),w),I=0):b=2===A.encoding?0:A.offset,a)for(p=0;p<y;p++){for(7&V&&(v=a[V>>3],v<<=7&V),g=0;g<U;g++)7&V||(v=a[V>>3]),128&v?(l&&(l[V]=1),m=(n=A.encoding<2?T[I++]:b)<m?n:m,s[V++]=n):(l&&(l[V]=0),s[V++]=i),v<<=1;V+=M}else if(A.encoding<2)for(p=0;p<y;p++){for(g=0;g<U;g++)m=(n=T[I++])<m?n:m,s[V++]=n;V+=M}else for(m=b<m?b:m,p=0;p<y;p++){for(g=0;g<U;g++)s[V++]=b;V+=M}if(1===A.encoding&&I!==A.numValidPixels)throw"Block and Mask do not match";o++}}}return{resultPixels:s,resultMask:l,minValue:m}},h=function(e){return{fileIdentifierString:e.fileIdentifierString,fileVersion:e.fileVersion,imageType:e.imageType,height:e.height,width:e.width,maxZError:e.maxZError,eofOffset:e.eofOffset,mask:e.mask?{numBlocksX:e.mask.numBlocksX,numBlocksY:e.mask.numBlocksY,numBytes:e.mask.numBytes,maxValue:e.mask.maxValue}:null,pixels:{numBlocksX:e.pixels.numBlocksX,numBlocksY:e.pixels.numBlocksY,numBytes:e.pixels.numBytes,maxValue:e.pixels.maxValue,noDataValue:e.noDataValue}}},c=function(e){for(var t=e.pixels.numBlocksX*e.pixels.numBlocksY,a={},i=0;i<t;i++){var r=e.pixels.blocks[i];0===r.encoding?a.float32=!0:1===r.encoding?a[r.bitsPerPixel]=!0:a[0]=!0}return Object.keys(a)},d=function(e,t,a){var i={},r=new Uint8Array(e,t,10);if(i.fileIdentifierString=String.fromCharCode.apply(null,r),"CntZImage"!==i.fileIdentifierString.trim())throw"Unexpected file identifier string: "+i.fileIdentifierString;t+=10;var n=new DataView(e,t,24);if(i.fileVersion=n.getInt32(0,!0),i.imageType=n.getInt32(4,!0),i.height=n.getUint32(8,!0),i.width=n.getUint32(12,!0),i.maxZError=n.getFloat64(16,!0),t+=24,!a)if(n=new DataView(e,t,16),i.mask={},i.mask.numBlocksY=n.getUint32(0,!0),i.mask.numBlocksX=n.getUint32(4,!0),i.mask.numBytes=n.getUint32(8,!0),i.mask.maxValue=n.getFloat32(12,!0),t+=16,0<i.mask.numBytes){var s=new Uint8Array(Math.ceil(i.width*i.height/8)),l=(n=new DataView(e,t,i.mask.numBytes)).getInt16(0,!0),o=2,f=0;do{if(0<l)for(;l--;)s[f++]=n.getUint8(o++);else for(var u=n.getUint8(o++),l=-l;l--;)s[f++]=u;l=n.getInt16(o,!0),o+=2}while(o<i.mask.numBytes);if(-32768!==l||f<s.length)throw"Unexpected end of mask RLE encoding";i.mask.bitset=s,t+=i.mask.numBytes}else 0==(i.mask.numBytes|i.mask.numBlocksY|i.mask.maxValue)&&(i.mask.bitset=new Uint8Array(Math.ceil(i.width*i.height/8)));n=new DataView(e,t,16),i.pixels={},i.pixels.numBlocksY=n.getUint32(0,!0),i.pixels.numBlocksX=n.getUint32(4,!0),i.pixels.numBytes=n.getUint32(8,!0),i.pixels.maxValue=n.getFloat32(12,!0),t+=16;var h=i.pixels.numBlocksX,c=i.pixels.numBlocksY,d=h+(0<i.width%h?1:0),m=c+(0<i.height%c?1:0);i.pixels.blocks=new Array(d*m);for(var g=0,p=0;p<m;p++)for(var w=0;w<d;w++){var x=0,y=e.byteLength-t;n=new DataView(e,t,Math.min(10,y));var k={};i.pixels.blocks[g++]=k;var U,T,I,b=n.getUint8(0);if(x++,k.encoding=63&b,3<k.encoding)throw"Invalid block encoding ("+k.encoding+")";if(2!==k.encoding){if(0!==b&&2!==b){if(b>>=6,2===(k.offsetType=b))k.offset=n.getInt8(1),x++;else if(1===b)k.offset=n.getInt16(1,!0),x+=2;else{if(0!==b)throw"Invalid block offset type";k.offset=n.getFloat32(1,!0),x+=4}if(1===k.encoding)if(b=n.getUint8(x),x++,k.bitsPerPixel=63&b,b>>=6,2===(k.numValidPixelsType=b))k.numValidPixels=n.getUint8(x),x++;else if(1===b)k.numValidPixels=n.getUint16(x,!0),x+=2;else{if(0!==b)throw"Invalid valid pixel count type";k.numValidPixels=n.getUint32(x,!0),x+=4}}if(t+=x,3!==k.encoding)if(0===k.encoding){var v=(i.pixels.numBytes-1)/4;if(v!==Math.floor(v))throw"uncompressed block has invalid length";I=new ArrayBuffer(4*v),new Uint8Array(I).set(new Uint8Array(e,t,4*v));var V=new Float32Array(I);k.rawData=V,t+=4*v}else{1===k.encoding&&(U=Math.ceil(k.numValidPixels*k.bitsPerPixel/8),T=Math.ceil(U/4),I=new ArrayBuffer(4*T),new Uint8Array(I).set(new Uint8Array(e,t,U)),k.stuffedData=new Uint32Array(I),t+=U)}}else t++}return i.eofOffset=t,i},D=function(e,t,a,i,r,n,s){var l,o,f,u,h=(1<<t)-1,c=0,d=0,m=Math.ceil((s-i)/r),g=4*e.length-Math.ceil(t*a/8);for(e[e.length-1]<<=8*g,l=0;l<a;l++){0===d&&(u=e[c++],d=32),t<=d?(f=u>>>d-t&h,d-=t):(f=(u&h)<<(o=t-d)&h,f+=(u=e[c++])>>>(d=32-o)),n[l]=f<m?i+f*r:s}return n},x=f,M=function(e,t,a,i,r,n,s,l){var o,f,u,h,c,d=(1<<a)-1,m=0,g=0,p=4*e.length-Math.ceil(a*i/8);if(e[e.length-1]<<=8*p,r)for(o=0;o<i;o++)0===g&&(u=e[m++],g=32),a<=g?(f=u>>>g-a&d,g-=a):(f=(u&d)<<(h=a-g)&d,f+=(u=e[m++])>>>(g=32-h)),t[o]=r[f];else for(c=Math.ceil((l-n)/s),o=0;o<i;o++)0===g&&(u=e[m++],g=32),a<=g?(f=u>>>g-a&d,g-=a):(f=(u&d)<<(h=a-g)&d,f+=(u=e[m++])>>>(g=32-h)),t[o]=f<c?n+f*s:l},A=function(e,t,a,i,r,n){var s,l,o=(1<<t)-1,f=0,u=0,h=0,c=0,d=[],m=4*e.length-Math.ceil(t*a/8);e[e.length-1]<<=8*m;for(var g=Math.ceil((n-i)/r),u=0;u<a;u++)0===h&&(l=e[f++],h=32),t<=h?(c=l>>>h-t&o,h-=t):(c=(l&o)<<(s=t-h)&o,c+=(l=e[f++])>>>(h=32-s)),d[u]=c<g?i+c*r:n;return d.unshift(i),d},S=function(e,t,a,i,r,n,s,l){var o,f,u,h=(1<<a)-1,c=0,d=0,m=0;if(r)for(p=0;p<i;p++)0===d&&(f=e[c++],d=32,m=0),a<=d?(o=f>>>m&h,d-=a,m+=a):(o=f>>>m&h,d=32-(u=a-d),o|=((f=e[c++])&(1<<u)-1)<<a-u,m=u),t[p]=r[o];else for(var g=Math.ceil((l-n)/s),p=0;p<i;p++)0===d&&(f=e[c++],d=32,m=0),a<=d?(o=f>>>m&h,d-=a,m+=a):(o=f>>>m&h,d=32-(u=a-d),o|=((f=e[c++])&(1<<u)-1)<<a-u,m=u),t[p]=o<g?n+o*s:l;return t},B=function(e,t,a,i,r,n){for(var s,l,o=(1<<t)-1,f=0,u=0,h=0,c=0,d=0,m=[],g=Math.ceil((n-i)/r),u=0;u<a;u++)0===h&&(l=e[f++],h=32,d=0),t<=h?(c=l>>>d&o,h-=t,d+=t):(c=l>>>d&o,h=32-(s=t-h),c|=((l=e[f++])&(1<<s)-1)<<t-s,d=s),m[u]=c<g?i+c*r:n;return m.unshift(i),m},E=function(e,t,a,i){var r,n,s,l,o=(1<<a)-1,f=0,u=0,h=4*e.length-Math.ceil(a*i/8);for(e[e.length-1]<<=8*h,r=0;r<i;r++)0===u&&(s=e[f++],u=32),a<=u?(n=s>>>u-a&o,u-=a):(n=(s&o)<<(l=a-u)&o,n+=(s=e[f++])>>>(u=32-l)),t[r]=n;return t},P=function(e,t,a,i){for(var r,n,s,l=(1<<a)-1,o=0,f=0,u=0,h=0;h<i;h++)0===f&&(n=e[o++],f=32,u=0),a<=f?(r=n>>>u&l,f-=a,u+=a):(r=n>>>u&l,f=32-(s=a-f),r|=((n=e[o++])&(1<<s)-1)<<a-s,u=s),t[h]=r;return t},z={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(e){for(var t=65535,a=65535,i=e.length,r=Math.floor(i/2),n=0;r;){var s=359<=r?359:r;for(r-=s;t+=e[n++]<<8,a+=t+=e[n++],--s;);t=(65535&t)+(t>>>16),a=(65535&a)+(a>>>16)}return 1&i&&(a+=t+=e[n]<<8),((a=(65535&a)+(a>>>16))<<16|(t=(65535&t)+(t>>>16)))>>>0},readHeaderInfo:function(e,t){var a=t.ptr,i=new Uint8Array(e,a,6),r={};if(r.fileIdentifierString=String.fromCharCode.apply(null,i),0!==r.fileIdentifierString.lastIndexOf("Lerc2",0))throw"Unexpected file identifier string (expect Lerc2 ): "+r.fileIdentifierString;a+=6;var n,s=new DataView(e,a,8),l=s.getInt32(0,!0);if(a+=4,3<=(r.fileVersion=l)&&(r.checksum=s.getUint32(4,!0),a+=4),s=new DataView(e,a,12),r.height=s.getUint32(0,!0),r.width=s.getUint32(4,!0),a+=8,4<=l?(r.numDims=s.getUint32(8,!0),a+=4):r.numDims=1,s=new DataView(e,a,40),r.numValidPixel=s.getUint32(0,!0),r.microBlockSize=s.getInt32(4,!0),r.blobSize=s.getInt32(8,!0),r.imageType=s.getInt32(12,!0),r.maxZError=s.getFloat64(16,!0),r.zMin=s.getFloat64(24,!0),r.zMax=s.getFloat64(32,!0),a+=40,t.headerInfo=r,t.ptr=a,3<=l&&(n=4<=l?52:48,this.computeChecksumFletcher32(new Uint8Array(e,a-n,r.blobSize-14))!==r.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(e,t){var a=t.headerInfo,i=this.getDataTypeArray(a.imageType),r=a.numDims*this.getDataTypeSize(a.imageType),n=this.readSubArray(e,t.ptr,i,r),s=this.readSubArray(e,t.ptr+r,i,r);t.ptr+=2*r;for(var l=!0,o=0;o<a.numDims;o++)if(n[o]!==s[o]){l=!1;break}return a.minValues=n,a.maxValues=s,l},readSubArray:function(e,t,a,i){var r,n=a===Uint8Array?new Uint8Array(e,t,i):(r=new ArrayBuffer(i),new Uint8Array(r).set(new Uint8Array(e,t,i)),new a(r));return n},readMask:function(e,t){var a,i,r=t.ptr,n=t.headerInfo,s=n.width*n.height,l=n.numValidPixel,o=new DataView(e,r,4),f={};if(f.numBytes=o.getUint32(0,!0),r+=4,(0===l||s===l)&&0!==f.numBytes)throw"invalid mask";if(0===l)a=new Uint8Array(Math.ceil(s/8)),f.bitset=a,i=new Uint8Array(s),t.pixels.resultMask=i,r+=f.numBytes;else if(0<f.numBytes){a=new Uint8Array(Math.ceil(s/8));var u,h=(o=new DataView(e,r,f.numBytes)).getInt16(0,!0),c=2,d=0;do{if(0<h)for(;h--;)a[d++]=o.getUint8(c++);else for(u=o.getUint8(c++),h=-h;h--;)a[d++]=u;h=o.getInt16(c,!0),c+=2}while(c<f.numBytes);if(-32768!==h||d<a.length)throw"Unexpected end of mask RLE encoding";i=new Uint8Array(s);for(var m=0,g=0,g=0;g<s;g++)7&g?(m=a[g>>3],m<<=7&g):m=a[g>>3],128&m&&(i[g]=1);t.pixels.resultMask=i,f.bitset=a,r+=f.numBytes}return t.ptr=r,t.mask=f,!0},readDataOneSweep:function(e,t,a){var i,r=t.ptr,n=t.headerInfo,s=n.numDims,l=n.width*n.height,o=n.imageType,f=n.numValidPixel*z.getDataTypeSize(o)*s,u=t.pixels.resultMask,h=a===Uint8Array?new Uint8Array(e,r,f):(i=new ArrayBuffer(f),new Uint8Array(i).set(new Uint8Array(e,r,f)),new a(i));if(h.length===l*s)t.pixels.resultPixels=h;else{t.pixels.resultPixels=new a(l*s);var c,d=0,m=0,g=0;if(1<s)for(g=0;g<s;g++)for(c=g*l,m=0;m<l;m++)u[m]&&(t.pixels.resultPixels[c+m]=h[d++]);else for(m=0;m<l;m++)u[m]&&(t.pixels.resultPixels[m]=h[d++])}return r+=f,t.ptr=r,!0},readHuffmanTree:function(e,t){var a=this.HUFFMAN_LUT_BITS_MAX,i=new DataView(e,t.ptr,16);if(t.ptr+=16,i.getInt32(0,!0)<2)throw"unsupported Huffman version";var r=i.getInt32(4,!0),n=i.getInt32(8,!0),s=i.getInt32(12,!0);if(s<=n)return!1;var l=new Uint32Array(s-n);z.decodeBits(e,t,l);for(var o,f,u,h=[],c=n;c<s;c++)h[o=c-(c<r?0:r)]={first:l[c-n],second:null};var d=e.byteLength-t.ptr,m=Math.ceil(d/4),g=new ArrayBuffer(4*m);new Uint8Array(g).set(new Uint8Array(e,t.ptr,d));var p=new Uint32Array(g),w=0,x=0,y=p[0];for(c=n;c<s;c++)0<(u=h[o=c-(c<r?0:r)].first)&&(h[o].second=y<<w>>>32-u,u<=32-w?32===(w+=u)&&(w=0,y=p[++x]):(w+=u-32,y=p[++x],h[o].second|=y>>>32-w));var k=0,U=0,T=new C;for(c=0;c<h.length;c++)void 0!==h[c]&&(k=Math.max(k,h[c].first));U=a<=k?a:k,30<=k&&console.log("WARning, large NUM LUT BITS IS "+k);var I,b,v,V,M,A=[];for(c=n;c<s;c++)if(0<(u=h[o=c-(c<r?0:r)].first))if(I=[u,o],u<=U)for(b=h[o].second<<U-u,v=1<<U-u,f=0;f<v;f++)A[b|f]=I;else for(b=h[o].second,M=T,V=u-1;0<=V;V--)M=b>>>V&1?(M.right||(M.right=new C),M.right):(M.left||(M.left=new C),M.left),0!==V||M.val||(M.val=I[1]);return{decodeLut:A,numBitsLUTQick:U,numBitsLUT:k,tree:T,stuffedData:p,srcPtr:x,bitPos:w}},readHuffman:function(e,t,a){var i,r,n,s,l,o,f,u,h,c=t.headerInfo,d=c.numDims,m=t.headerInfo.height,g=t.headerInfo.width,p=g*m,w=this.readHuffmanTree(e,t),x=w.decodeLut,y=w.tree,k=w.stuffedData,U=w.srcPtr,T=w.bitPos,I=w.numBitsLUTQick,b=w.numBitsLUT,v=0===t.headerInfo.imageType?128:0,V=t.pixels.resultMask,M=0;0<T&&(U++,T=0);for(var A=k[U],D=1===t.encodeMode,S=new a(p*d),B=S,E=0;E<c.numDims;E++){if(1<d&&(B=new a(S.buffer,p*E,p),M=0),t.headerInfo.numValidPixel===g*m)for(o=u=0;o<m;o++)for(f=0;f<g;f++,u++){if(r=0,l=s=A<<T>>>32-I,32-T<I&&(l=s|=k[U+1]>>>64-T-I),x[l])r=x[l][1],T+=x[l][0];else for(l=s=A<<T>>>32-b,32-T<b&&(l=s|=k[U+1]>>>64-T-b),i=y,h=0;h<b;h++)if(!(i=s>>>b-h-1&1?i.right:i.left).left&&!i.right){r=i.val,T=T+h+1;break}32<=T&&(T-=32,A=k[++U]),n=r-v,D?(n+=!(0<f)&&0<o?B[u-g]:M,n&=255,M=B[u]=n):B[u]=n}else for(o=u=0;o<m;o++)for(f=0;f<g;f++,u++)if(V[u]){if(r=0,l=s=A<<T>>>32-I,32-T<I&&(l=s|=k[U+1]>>>64-T-I),x[l])r=x[l][1],T+=x[l][0];else for(l=s=A<<T>>>32-b,32-T<b&&(l=s|=k[U+1]>>>64-T-b),i=y,h=0;h<b;h++)if(!(i=s>>>b-h-1&1?i.right:i.left).left&&!i.right){r=i.val,T=T+h+1;break}32<=T&&(T-=32,A=k[++U]),n=r-v,D?(!(0<f&&V[u-1])&&0<o&&V[u-g]?n+=B[u-g]:n+=M,n&=255,M=B[u]=n):B[u]=n}t.ptr=t.ptr+4*(U+1)+(0<T?4:0)}t.pixels.resultPixels=S},decodeBits:function(e,t,a,i,r){var n=t.headerInfo,s=n.fileVersion,l=0,o=5<=e.byteLength-t.ptr?5:e.byteLength-t.ptr,f=new DataView(e,t.ptr,o),u=f.getUint8(0);l++;var h=u>>6,c=0==h?4:3-h,d=0<(32&u),m=31&u,g=0;if(1==c)g=f.getUint8(l),l++;else if(2==c)g=f.getUint16(l,!0),l+=2;else{if(4!=c)throw"Invalid valid pixel count type";g=f.getUint32(l,!0),l+=4}var p,w,x,y,k,U,T,I,b,v=2*n.maxZError,V=1<n.numDims?n.maxValues[r]:n.zMax;if(d){for(t.counter.lut++,I=f.getUint8(l),l++,y=Math.ceil((I-1)*m/8),k=Math.ceil(y/4),w=new ArrayBuffer(4*k),x=new Uint8Array(w),t.ptr+=l,x.set(new Uint8Array(e,t.ptr,y)),T=new Uint32Array(w),t.ptr+=y,b=0;I-1>>>b;)b++;y=Math.ceil(g*b/8),k=Math.ceil(y/4),w=new ArrayBuffer(4*k),(x=new Uint8Array(w)).set(new Uint8Array(e,t.ptr,y)),p=new Uint32Array(w),t.ptr+=y,U=(3<=s?B:A)(T,m,I-1,i,v,V),(3<=s?S:M)(p,a,b,g,U)}else t.counter.bitstuffer++,b=m,t.ptr+=l,0<b&&(y=Math.ceil(g*b/8),k=Math.ceil(y/4),w=new ArrayBuffer(4*k),(x=new Uint8Array(w)).set(new Uint8Array(e,t.ptr,y)),p=new Uint32Array(w),t.ptr+=y,3<=s?null===i?P(p,a,b,g):S(p,a,b,g,!1,i,v,V):null===i?E(p,a,b,g):M(p,a,b,g,!1,i,v,V))},readTiles:function(e,t,a){var i=t.headerInfo,r=i.width,n=i.height,s=i.microBlockSize,l=i.imageType,o=z.getDataTypeSize(l),f=Math.ceil(r/s),u=Math.ceil(n/s);t.pixels.numBlocksY=u,t.pixels.numBlocksX=f;for(var h,c,d,m,g,p,w,x,y,k,U,T,I,b,v,V=t.pixels.ptr=0,M=0,A=0,D=0,S=0,B=0,E=0,P=0,C=new a(s*s),F=n%s||s,R=r%s||s,L=i.numDims,O=t.pixels.resultMask,N=t.pixels.resultPixels,A=0;A<u;A++)for(h=A!==u-1?s:F,D=0;D<f;D++)for(S=A*r*s+D*s,p=r-(c=D!==f-1?s:R),v=0;v<L;v++){if(1<L&&(N=new a(t.pixels.resultPixels.buffer,r*n*v*o,r*n)),d=e.byteLength-t.ptr,y={},P=0,P++,g=(m=(x=new DataView(e,t.ptr,Math.min(10,d))).getUint8(0))>>6&255,(m>>2&15)!=(D*s>>3&15))throw"integrity issue";if(3<(T=3&m))throw t.ptr+=P,"Invalid block encoding ("+T+")";if(2!=T)if(0==T){if(t.counter.uncompressed++,t.ptr+=P,B=(B=h*c*o)<(w=e.byteLength-t.ptr)?B:w,k=new ArrayBuffer(B%o==0?B:B+o-B%o),new Uint8Array(k).set(new Uint8Array(e,t.ptr,B)),U=new a(k),E=0,O)for(V=0;V<h;V++){for(M=0;M<c;M++)O[S]&&(N[S]=U[E++]),S++;S+=p}else for(V=0;V<h;V++){for(M=0;M<c;M++)N[S++]=U[E++];S+=p}t.ptr+=E*o}else if(I=z.getDataTypeUsed(l,g),b=z.getOnePixel(y,P,I,x),P+=z.getDataTypeSize(I),3==T)if(t.ptr+=P,t.counter.constantoffset++,O)for(V=0;V<h;V++){for(M=0;M<c;M++)O[S]&&(N[S]=b),S++;S+=p}else for(V=0;V<h;V++){for(M=0;M<c;M++)N[S++]=b;S+=p}else if(t.ptr+=P,z.decodeBits(e,t,C,b,v),P=0,O)for(V=0;V<h;V++){for(M=0;M<c;M++)O[S]&&(N[S]=C[P++]),S++;S+=p}else for(V=0;V<h;V++){for(M=0;M<c;M++)N[S++]=C[P++];S+=p}else t.counter.constant++,t.ptr+=P}},formatFileInfo:function(e){return{fileIdentifierString:e.headerInfo.fileIdentifierString,fileVersion:e.headerInfo.fileVersion,imageType:e.headerInfo.imageType,height:e.headerInfo.height,width:e.headerInfo.width,numValidPixel:e.headerInfo.numValidPixel,microBlockSize:e.headerInfo.microBlockSize,blobSize:e.headerInfo.blobSize,maxZError:e.headerInfo.maxZError,pixelType:z.getPixelType(e.headerInfo.imageType),eofOffset:e.eofOffset,mask:e.mask?{numBytes:e.mask.numBytes}:null,pixels:{numBlocksX:e.pixels.numBlocksX,numBlocksY:e.pixels.numBlocksY,maxValue:e.headerInfo.zMax,minValue:e.headerInfo.zMin,noDataValue:e.noDataValue}}},constructConstantSurface:function(e){var t,a=e.headerInfo.zMax,i=e.headerInfo.numDims,r=e.headerInfo.height*e.headerInfo.width,n=r*i,s=0,l=0,o=e.pixels.resultMask;if(o)if(1<i)for(s=0;s<i;s++)for(t=s*r,l=0;l<r;l++)o[l]&&(e.pixels.resultPixels[t+l]=a);else for(l=0;l<r;l++)o[l]&&(e.pixels.resultPixels[l]=a);else if(e.pixels.resultPixels.fill)e.pixels.resultPixels.fill(a);else for(l=0;l<n;l++)e.pixels.resultPixels[l]=a},getDataTypeArray:function(e){var t;switch(e){case 0:t=Int8Array;break;case 1:t=Uint8Array;break;case 2:t=Int16Array;break;case 3:t=Uint16Array;break;case 4:t=Int32Array;break;case 5:t=Uint32Array;break;case 6:t=Float32Array;break;case 7:t=Float64Array;break;default:t=Float32Array}return t},getPixelType:function(e){var t;switch(e){case 0:t="S8";break;case 1:t="U8";break;case 2:t="S16";break;case 3:t="U16";break;case 4:t="S32";break;case 5:t="U32";break;case 6:t="F32";break;case 7:t="F64";break;default:t="F32"}return t},isValidPixelValue:function(e,t){if(null===t)return!1;var a;switch(e){case 0:a=-128<=t&&t<=127;break;case 1:a=0<=t&&t<=255;break;case 2:a=-32768<=t&&t<=32767;break;case 3:a=0<=t&&t<=65536;break;case 4:a=-2147483648<=t&&t<=2147483647;break;case 5:a=0<=t&&t<=4294967296;break;case 6:a=-34027999387901484e22<=t&&t<=34027999387901484e22;break;case 7:a=5e-324<=t&&t<=17976931348623157e292;break;default:a=!1}return a},getDataTypeSize:function(e){var t=0;switch(e){case 0:case 1:t=1;break;case 2:case 3:t=2;break;case 4:case 5:case 6:t=4;break;case 7:t=8;break;default:t=e}return t},getDataTypeUsed:function(e,t){var a=e;switch(e){case 2:case 4:a=e-t;break;case 3:case 5:a=e-2*t;break;case 6:a=0===t?e:1===t?2:1;break;case 7:a=0===t?e:e-2*t+1;break;default:a=e}return a},getOnePixel:function(e,t,a,i){var r=0;switch(a){case 0:r=i.getInt8(t);break;case 1:r=i.getUint8(t);break;case 2:r=i.getInt16(t,!0);break;case 3:r=i.getUint16(t,!0);break;case 4:r=i.getInt32(t,!0);break;case 5:r=i.getUInt32(t,!0);break;case 6:r=i.getFloat32(t,!0);break;case 7:r=i.getFloat64(t,!0);break;default:throw"the decoder does not understand this pixel type"}return r}},C=function(e,t,a){this.val=e,this.left=t,this.right=a},y={decode:function(e,t){var a=(t=t||{}).noDataValue,i=0,r={};if(r.ptr=t.inputOffset||0,r.pixels={},z.readHeaderInfo(e,r)){var n=r.headerInfo,s=n.fileVersion,l=z.getDataTypeArray(n.imageType);z.readMask(e,r),n.numValidPixel===n.width*n.height||r.pixels.resultMask||(r.pixels.resultMask=t.maskData);var o,f=n.width*n.height;if(r.pixels.resultPixels=new l(f*n.numDims),r.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0},0!==n.numValidPixel)if(n.zMax===n.zMin)z.constructConstantSurface(r);else if(4<=s&&z.checkMinMaxRanges(e,r))z.constructConstantSurface(r);else{var u=new DataView(e,r.ptr,2),h=u.getUint8(0);if(r.ptr++,h)z.readDataOneSweep(e,r,l);else if(1<s&&n.imageType<=1&&Math.abs(n.maxZError-.5)<1e-5){var c=u.getUint8(1);if(r.ptr++,2<(r.encodeMode=c)||s<4&&1<c)throw"Invalid Huffman flag "+c;c?z.readHuffman(e,r,l):z.readTiles(e,r,l)}else z.readTiles(e,r,l)}r.eofOffset=r.ptr,t.inputOffset?(o=r.headerInfo.blobSize+t.inputOffset-r.ptr,1<=Math.abs(o)&&(r.eofOffset=t.inputOffset+r.headerInfo.blobSize)):(o=r.headerInfo.blobSize-r.ptr,1<=Math.abs(o)&&(r.eofOffset=r.headerInfo.blobSize));var d={width:n.width,height:n.height,pixelData:r.pixels.resultPixels,minValue:n.zMin,maxValue:n.zMax,validPixelCount:n.numValidPixel,dimCount:n.numDims,dimStats:{minValues:n.minValues,maxValues:n.maxValues},maskData:r.pixels.resultMask};if(r.pixels.resultMask&&z.isValidPixelValue(n.imageType,a)){for(var m=r.pixels.resultMask,i=0;i<f;i++)m[i]||(d.pixelData[i]=a);d.noDataValue=a}return r.noDataValue=a,t.returnFileInfo&&(d.fileInfo=z.formatFileInfo(r)),d}},getBandCount:function(e){for(var t=0,a=0,i={ptr:0,pixels:{}};a<e.byteLength-58;)z.readHeaderInfo(e,i),a+=i.headerInfo.blobSize,t++,i.ptr=a;return t}},m=new ArrayBuffer(4),g=new Uint8Array(m),k=(new Uint32Array(m)[0]=1)===g[0],p={decode:function(e,t){if(!k)throw"Big endian system is not supported.";var a,i,r=(t=t||{}).inputOffset||0,n=new Uint8Array(e,r,10),s=String.fromCharCode.apply(null,n);if("CntZImage"===s.trim())a=x,i=1;else{if("Lerc2"!==s.substring(0,5))throw"Unexpected file identifier string: "+s;a=y,i=2}for(var l,o,f,u,h,c,d=0,m=e.byteLength-10,g=[],p={width:0,height:0,pixels:[],pixelType:t.pixelType,mask:null,statistics:[]};r<m;){var w=a.decode(e,{inputOffset:r,encodedMaskData:l,maskData:f,returnMask:0===d,returnEncodedMask:0===d,returnFileInfo:!0,pixelType:t.pixelType||null,noDataValue:t.noDataValue||null}),r=w.fileInfo.eofOffset;0===d&&(l=w.encodedMaskData,f=w.maskData,p.width=w.width,p.height=w.height,p.dimCount=w.dimCount||1,p.pixelType=w.pixelType||w.fileInfo.pixelType,p.mask=w.maskData),1<i&&w.fileInfo.mask&&0<w.fileInfo.mask.numBytes&&g.push(w.maskData),d++,p.pixels.push(w.pixelData),p.statistics.push({minValue:w.minValue,maxValue:w.maxValue,noDataValue:w.noDataValue,dimStats:w.dimStats})}if(1<i&&1<g.length){for(c=p.width*p.height,p.bandMasks=g,(f=new Uint8Array(c)).set(g[0]),u=1;u<g.length;u++)for(o=g[u],h=0;h<c;h++)f[h]=f[h]&o[h];p.maskData=f}return p}},w.Lerc=p;var U=w.Lerc,F=new Xe.Cartographic;return l(function(e,t){if(e.encoding===o.LERC){var a;try{a=U.decode(e.heightmap)}catch(e){throw new n.RuntimeError(e)}if(a.statistics[0].minValue===Number.MAX_VALUE)throw new n.RuntimeError("Invalid tile data");e.heightmap=a.pixels[0],e.width=a.width,e.height=a.height}e.ellipsoid=Xe.Ellipsoid.clone(e.ellipsoid),e.rectangle=Xe.Rectangle.clone(e.rectangle),We.defined(e.constraintRegions)&&function(e){var t=e.constraintRegions,a=e.rectangle,i=V.IntersectionTests.intersetRectangleWithConstraintRegion(a,t);if(-1!==i)for(var r=We.defaultValue(e.structure,Je.DEFAULT_STRUCTURE),n=We.defaultValue(r.heightScale,Je.DEFAULT_STRUCTURE.heightScale),s=We.defaultValue(r.heightOffset,Je.DEFAULT_STRUCTURE.heightOffset),l=We.defaultValue(r.elementsPerHeight,Je.DEFAULT_STRUCTURE.elementsPerHeight),o=We.defaultValue(r.stride,Je.DEFAULT_STRUCTURE.stride),f=We.defaultValue(r.elementMultiplier,Je.DEFAULT_STRUCTURE.elementMultiplier),u=We.defaultValue(r.isBigEndian,Je.DEFAULT_STRUCTURE.isBigEndian),h=We.defaultValue(e.exaggeration,1),c=e.heightmap,d=e.width,m=e.height,g=Xe.Rectangle.computeWidth(a)/(d-1),p=Xe.Rectangle.computeHeight(a)/(m-1),w=0,x=0,y=0,k=0;k<m;k++)for(var U,T=0;T<d;T++){F.longitude=a.west+T*g,F.latitude=a.north-k*p,F.height=0;var I=V.IntersectionTests.isCartographicInConstraintRegion(F,i,t);if(-1!==I){var b=(t[I].height/h-s)/n;if(1===l)"ERASE"===t[I].eraseType?e.heightmap[w]=b:"OFFSET"===t[I].eraseType?e.heightmap[w]=b+c[w]:"SMOOTH"===t[I].eraseType&&((U=V.IntersectionTests.interoplateCartographicWhenSmooth(F,t[I]))<t[I].height&&(U=t[I].height),e.heightmap[w]=(U/h-s)/n);else{if("OFFSET"===t[I].eraseType){var v,y=0;if(u)for(v=0;v<l;++v)y=y*f+c[w+v];else for(v=l-1;0<=v;--v)y=y*f+c[w+v];b+=y}else"SMOOTH"===t[I].eraseType&&((U=V.IntersectionTests.interoplateCartographicWhenSmooth(F,t[I]))<t[I].height&&(U=t[I].height),b=(U/h-s)/n);if(u)for(x=0;x<l;x++)y=b%f,b=(b-(e.heightmap[w+x]=y))/f;else for(x=l-1;0<=x;--x)y=b%f,b=(b-(e.heightmap[w+x]=y))/f}}w+=o}}(e);var i=Je.computeVertices(e),r=i.vertices;return t.push(r.buffer),{vertices:r.buffer,numberOfAttributes:i.encoding.getStride(),minimumHeight:i.minimumHeight,maximumHeight:i.maximumHeight,gridWidth:e.width,gridHeight:e.height,boundingSphere3D:i.boundingSphere3D,orientedBoundingBox:i.orientedBoundingBox,occludeePointInScaledSpace:i.occludeePointInScaledSpace,encoding:i.encoding,westIndicesSouthToNorth:i.westIndicesSouthToNorth,southIndicesEastToWest:i.southIndicesEastToWest,eastIndicesNorthToSouth:i.eastIndicesNorthToSouth,northIndicesWestToEast:i.northIndicesWestToEast}})});