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