createVerticesFromGoogleEarthEnterpriseBuffer.js 7.5 KB

1
  1. define(["./AxisAlignedBoundingBox-37250ed6","./Transforms-98ffa11d","./Matrix2-e3fb4559","./Cartesian3-7e9cc2ff","./defaultValue-81eec7ed","./TerrainEncoding-2e2628a7","./Math-5f585871","./Matrix4-d34187af","./OrientedBoundingBox-3db45505","./RuntimeError-26acdd3b","./WebMercatorProjection-f5706bbf","./createTaskProcessorWorker","./Check-741c5f3c","./_commonjsHelpers-3aae1032-26891ab7","./combine-3c023bda","./AttributeCompression-e2e3f0dd","./ComponentDatatype-aaeec80f","./WebGLConstants-508b9636","./EllipsoidTangentPlane-fa1337e1","./IntersectionTests-73b87d72","./Plane-4f75b3df"],(function(t,e,n,i,o,a,r,s,c,u,h,d,l,g,m,p,f,I,E,T,C){"use strict";const M=Uint16Array.BYTES_PER_ELEMENT,x=Int32Array.BYTES_PER_ELEMENT,N=Uint32Array.BYTES_PER_ELEMENT,b=Float32Array.BYTES_PER_ELEMENT,S=Float64Array.BYTES_PER_ELEMENT;function w(t,e,n){n=o.defaultValue(n,r.CesiumMath);const i=t.length;for(let o=0;o<i;++o)if(n.equalsEpsilon(t[o],e,r.CesiumMath.EPSILON12))return o;return-1}const B=new n.Cartographic,P=new i.Cartesian3,A=new i.Cartesian3,y=new i.Cartesian3,R=new s.Matrix4;function _(t,e,a,c,u,h,d,l,g,m,p){const f=l.length;for(let I=0;I<f;++I){const E=l[I],T=E.cartographic,C=E.index,M=t.length,x=T.longitude;let N=T.latitude;N=r.CesiumMath.clamp(N,-r.CesiumMath.PI_OVER_TWO,r.CesiumMath.PI_OVER_TWO);const b=T.height-d.skirtHeight;d.hMin=Math.min(d.hMin,b),n.Cartographic.fromRadians(x,N,b,B),m&&(B.longitude+=g),m?I===f-1?B.latitude+=p:0===I&&(B.latitude-=p):B.latitude+=g;const S=d.ellipsoid.cartographicToCartesian(B);t.push(S),e.push(b),a.push(n.Cartesian2.clone(a[C])),c.length>0&&c.push(c[C]),u.length>0&&u.push(u[C]),s.Matrix4.multiplyByPoint(d.toENU,S,P);const w=d.minimum,A=d.maximum;i.Cartesian3.minimumByComponent(P,w,w),i.Cartesian3.maximumByComponent(P,A,A);const y=d.lastBorderPoint;if(o.defined(y)){const t=y.index;h.push(t,M-1,M,M,C,t)}d.lastBorderPoint=E}}return d((function(d,l){d.ellipsoid=n.Ellipsoid.clone(d.ellipsoid),d.rectangle=n.Rectangle.clone(d.rectangle);const g=function(d,l,g,m,p,f,I,E,T,C,W){let v,F,O,V,Y,k;o.defined(m)?(v=m.west,F=m.south,O=m.east,V=m.north,Y=m.width,k=m.height):(v=r.CesiumMath.toRadians(p.west),F=r.CesiumMath.toRadians(p.south),O=r.CesiumMath.toRadians(p.east),V=r.CesiumMath.toRadians(p.north),Y=r.CesiumMath.toRadians(m.width),k=r.CesiumMath.toRadians(m.height));const H=[F,V],U=[v,O],L=e.Transforms.eastNorthUpToFixedFrame(l,g),j=s.Matrix4.inverseTransformation(L,R);let D,G;T&&(D=h.WebMercatorProjection.geodeticLatitudeToMercatorAngle(F),G=1/(h.WebMercatorProjection.geodeticLatitudeToMercatorAngle(V)-D));const z=1!==f,q=new DataView(d);let J=Number.POSITIVE_INFINITY,K=Number.NEGATIVE_INFINITY;const Q=A;Q.x=Number.POSITIVE_INFINITY,Q.y=Number.POSITIVE_INFINITY,Q.z=Number.POSITIVE_INFINITY;const X=y;X.x=Number.NEGATIVE_INFINITY,X.y=Number.NEGATIVE_INFINITY,X.z=Number.NEGATIVE_INFINITY;let Z,$,tt=0,et=0,nt=0;for($=0;$<4;++$){let t=tt;Z=q.getUint32(t,!0),t+=N;const e=r.CesiumMath.toRadians(180*q.getFloat64(t,!0));t+=S,-1===w(U,e)&&U.push(e);const n=r.CesiumMath.toRadians(180*q.getFloat64(t,!0));t+=S,-1===w(H,n)&&H.push(n),t+=2*S;let i=q.getInt32(t,!0);t+=x,et+=i,i=q.getInt32(t,!0),nt+=3*i,tt+=Z+N}const it=[],ot=[],at=new Array(et),rt=new Array(et),st=new Array(et),ct=T?new Array(et):[],ut=z?new Array(et):[],ht=new Array(nt),dt=[],lt=[],gt=[],mt=[];let pt=0,ft=0;for(tt=0,$=0;$<4;++$){Z=q.getUint32(tt,!0),tt+=N;const t=tt,e=r.CesiumMath.toRadians(180*q.getFloat64(tt,!0));tt+=S;const o=r.CesiumMath.toRadians(180*q.getFloat64(tt,!0));tt+=S;const a=r.CesiumMath.toRadians(180*q.getFloat64(tt,!0)),c=.5*a;tt+=S;const d=r.CesiumMath.toRadians(180*q.getFloat64(tt,!0)),l=.5*d;tt+=S;const m=q.getInt32(tt,!0);tt+=x;const p=q.getInt32(tt,!0);tt+=x,tt+=x;const f=new Array(m);for(let t=0;t<m;++t){const u=e+q.getUint8(tt++)*a;B.longitude=u;const m=o+q.getUint8(tt++)*d;B.latitude=m;let p=q.getFloat32(tt,!0);if(tt+=b,0!==p&&p<W&&(p*=-Math.pow(2,C)),p*=6371010,B.height=p,-1!==w(U,u)||-1!==w(H,m)){const e=w(it,B,n.Cartographic);if(-1!==e){f[t]=ot[e];continue}it.push(n.Cartographic.clone(B)),ot.push(pt)}f[t]=pt,Math.abs(u-v)<c?dt.push({index:pt,cartographic:n.Cartographic.clone(B)}):Math.abs(u-O)<c?gt.push({index:pt,cartographic:n.Cartographic.clone(B)}):Math.abs(m-F)<l?lt.push({index:pt,cartographic:n.Cartographic.clone(B)}):Math.abs(m-V)<l&&mt.push({index:pt,cartographic:n.Cartographic.clone(B)}),J=Math.min(p,J),K=Math.max(p,K),st[pt]=p;const I=g.cartographicToCartesian(B);if(at[pt]=I,T&&(ct[pt]=(h.WebMercatorProjection.geodeticLatitudeToMercatorAngle(m)-D)*G),z){const t=g.geodeticSurfaceNormal(I);ut[pt]=t}s.Matrix4.multiplyByPoint(j,I,P),i.Cartesian3.minimumByComponent(P,Q,Q),i.Cartesian3.maximumByComponent(P,X,X);let E=(u-v)/(O-v);E=r.CesiumMath.clamp(E,0,1);let M=(m-F)/(V-F);M=r.CesiumMath.clamp(M,0,1),rt[pt]=new n.Cartesian2(E,M),++pt}const I=3*p;for(let t=0;t<I;++t,++ft)ht[ft]=f[q.getUint16(tt,!0)],tt+=M;if(Z!==tt-t)throw new u.RuntimeError("Invalid terrain tile.")}at.length=pt,rt.length=pt,st.length=pt,T&&(ct.length=pt);z&&(ut.length=pt);const It=pt,Et=ft,Tt={hMin:J,lastBorderPoint:void 0,skirtHeight:E,toENU:j,ellipsoid:g,minimum:Q,maximum:X};dt.sort((function(t,e){return e.cartographic.latitude-t.cartographic.latitude})),lt.sort((function(t,e){return t.cartographic.longitude-e.cartographic.longitude})),gt.sort((function(t,e){return t.cartographic.latitude-e.cartographic.latitude})),mt.sort((function(t,e){return e.cartographic.longitude-t.cartographic.longitude}));const Ct=1e-5;if(_(at,st,rt,ct,ut,ht,Tt,dt,-Ct*Y,!0,-Ct*k),_(at,st,rt,ct,ut,ht,Tt,lt,-Ct*k,!1),_(at,st,rt,ct,ut,ht,Tt,gt,Ct*Y,!0,Ct*k),_(at,st,rt,ct,ut,ht,Tt,mt,Ct*k,!1),dt.length>0&&mt.length>0){const t=dt[0].index,e=It,n=mt[mt.length-1].index,i=at.length-1;ht.push(n,i,e,e,t,n)}et=at.length;const Mt=e.BoundingSphere.fromPoints(at);let xt;o.defined(m)&&(xt=c.OrientedBoundingBox.fromRectangle(m,J,K,g));const Nt=new a.EllipsoidalOccluder(g).computeHorizonCullingPointPossiblyUnderEllipsoid(l,at,J),bt=new t.AxisAlignedBoundingBox(Q,X,l),St=new a.TerrainEncoding(l,bt,Tt.hMin,K,L,!1,T,z,f,I),wt=new Float32Array(et*St.stride);let Bt=0;for(let t=0;t<et;++t)Bt=St.encode(wt,Bt,at[t],rt[t],st[t],void 0,ct[t],ut[t]);const Pt=dt.map((function(t){return t.index})).reverse(),At=lt.map((function(t){return t.index})).reverse(),yt=gt.map((function(t){return t.index})).reverse(),Rt=mt.map((function(t){return t.index})).reverse();return At.unshift(yt[yt.length-1]),At.push(Pt[0]),Rt.unshift(Pt[Pt.length-1]),Rt.push(yt[0]),{vertices:wt,indices:new Uint16Array(ht),maximumHeight:K,minimumHeight:J,encoding:St,boundingSphere3D:Mt,orientedBoundingBox:xt,occludeePointInScaledSpace:Nt,vertexCountWithoutSkirts:It,indexCountWithoutSkirts:Et,westIndicesSouthToNorth:Pt,southIndicesEastToWest:At,eastIndicesNorthToSouth:yt,northIndicesWestToEast:Rt}}(d.buffer,d.relativeToCenter,d.ellipsoid,d.rectangle,d.nativeRectangle,d.exaggeration,d.exaggerationRelativeHeight,d.skirtHeight,d.includeWebMercatorT,d.negativeAltitudeExponentBias,d.negativeElevationThreshold),m=g.vertices;l.push(m.buffer);const p=g.indices;return l.push(p.buffer),{vertices:m.buffer,indices:p.buffer,numberOfAttributes:g.encoding.stride,minimumHeight:g.minimumHeight,maximumHeight:g.maximumHeight,boundingSphere3D:g.boundingSphere3D,orientedBoundingBox:g.orientedBoundingBox,occludeePointInScaledSpace:g.occludeePointInScaledSpace,encoding:g.encoding,vertexCountWithoutSkirts:g.vertexCountWithoutSkirts,indexCountWithoutSkirts:g.indexCountWithoutSkirts,westIndicesSouthToNorth:g.westIndicesSouthToNorth,southIndicesEastToWest:g.southIndicesEastToWest,eastIndicesNorthToSouth:g.eastIndicesNorthToSouth,northIndicesWestToEast:g.northIndicesWestToEast}}))}));