@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
1 lines • 6.49 kB
JavaScript
"use strict";(self.webpackChunkRemoteClient=self.webpackChunkRemoteClient||[]).push([[5217,5243],{25217(t,e,i){i.r(e),i.d(e,{default:()=>u});var s=i(49186),a=i(74887),o=i(40036),n=i(16930),r=i(19211),l=i(35063),h=i(28208),c=i(66655);class u{constructor(t,e,i,o,u,m,f,d,w,g){this.level=t,this.row=e,this.column=i,this.horizontalFieldOfView=o,this.verticalFieldOfView=u,this.yaw=m,this.pitch=f,this.distance=d,this.horizonAngles=w,this.getPixelBlock=g,this._cache=null,this.loadMesh=async t=>{const{level:e,row:i,column:o,horizontalFieldOfView:u,verticalFieldOfView:m,yaw:f,pitch:d,distance:w}=this,{Mesh:g,MeshComponent:p,MeshVertexAttributes:M,panoramicMeshManager:x}=await(0,c.Zg)(),{faces:_,...v}=await x.getFacesWithVertexAttributes({distance:w,yaw:f,horizontalFieldOfView:u,pitch:d,verticalFieldOfView:m});(0,a.Te)(t);const y=await this.getPixelBlock(e,i,o,t);if((0,a.Te)(t),!y)throw new s.A("panoramic-viewer:missing-tile-data",`Tile data for level ${e}, row ${i}, column ${o} is missing`,{level:e,row:i,column:o});const z=await x.convertPixelBlockToImageData(y);(0,a.Te)(t);const b=new g({vertexAttributes:new M(v),components:[new p({faces:_,trustSourceNormals:!0,material:new r.default({colorTexture:new l.default({data:z})})})],spatialReference:n.A.WebMercator});return b.rotate(...this.horizonAngles,{origin:h.ZH}),await b.load(t),this._cache=b,this._cache},this.loadMeshAtDistance=async(t,e)=>{const i=this.distance;return this.distance=t,Math.abs(i-t)>1e-6&&this._cache?this._cache:await this.loadMesh(e)}}get loaded(){return null!==this._cache}get key(){return`${this.level}/${this.row}/${this.column}`}clone(){const{level:t,row:e,column:i,horizontalFieldOfView:s,verticalFieldOfView:a,yaw:n,pitch:r,distance:l,getPixelBlock:h,horizonAngles:c}=this,m=new u(t,e,i,s,a,n,r,l,c,h);if(this._cache){const{vertexAttributes:t,components:e,spatialReference:i}=this._cache,s=e?.map(({material:t,faces:e,trustSourceNormals:i})=>({material:t,faces:e?.slice(),trustSourceNormals:i}));m._cache=new o.default({components:s,vertexAttributes:t.clone(),spatialReference:i})}return m}}},95243(t,e,i){i.r(e),i.d(e,{default:()=>_});var s=i(5482),a=i(69622),o=i(49186),n=i(91429),r=i(5443),l=i(72545),h=i(28208);class c{constructor(){this._keys=[],this._map=new Map}set(t,e){let i=0;for(;i<this._keys.length&&this._keys[i]<t;)i++;return this._keys.splice(i,0,t),this._map.set(t,e),this}get(t){let e=this._keys[0];for(const i of this._keys)t>=i&&(e=i);return this._map.get(e)}clear(){this._keys=[],this._map.clear()}}function u(t){return((t+180)%360+360)%360-180}function m(t){return Math.max(-90,Math.min(90,t))}function f(t,e,i,s){const a=Math.min(Math.max(i,0),360),o=Math.min(Math.max(s,0),180),n=a/2,r=o/2,l=e-90,h=m(l-r),c=m(l+r),f=c>=90||h<=-90||a>=360,d=u(t);return{latMin:h,latMax:c,lonMin:u(d-n),lonMax:u(d+n),fullLongitude:f,hfov:a,vfov:o}}function d(t,e,i,s){if(Math.abs(e-t)>=360||Math.abs(s-i)>=360)return!0;function a(t,e){return t<=e?[[t,e]]:[[t,180],[-180,e]]}const o=a(t,e),n=a(i,s);for(const t of o)for(const e of n)if(!(t[1]<=e[0]||t[0]>=e[1]))return!0;return!1}function w(t,e,i,s){return!(e<=i||t>=s)}function g(t,e,i,s){const a=360/i,o=180/s,n=t*a-180,r=n+a,l=90-e*o,h=l-o;return{lonMinRaw:n,lonMaxRaw:r,lonMin:u(n),lonMax:u(r),latMin:h,latMax:l}}function p(t,[e,i],[s,a],o,n,r,l,h){const{latMin:c,latMax:u,lonMin:m,lonMax:p,fullLongitude:M}=f(n,r,l,h),x=s-e+1,_=a-i+1,v=[];for(let n=e;n<=s;n++){const{lonMin:e,lonMax:s}=g(n,i,x,_);if(M||d(m,p,e,s))for(let e=i;e<=a;e++){const{latMin:i,latMax:s}=g(n,e,x,_);if(!w(c,u,i,s))continue;const a=`${t}/${e}/${n}`,r=o.get(a);r&&v.push(r)}}return v}var M=i(25217);let x=class extends((0,l.G)(a.A)){constructor(t){super(t),this._maximumPyramidLevel=-1,this._pixelAngleToLevelMap=new c,this._tileMap=new Map,this.horizonPitch=0,this.horizonYaw=0,this.horizonRoll=0,this.raster=null,this._fetchRawTile=async(t,e,i,s)=>{await this._initJobHandler();const{pyramidBlockWidth:a,pyramidBlockHeight:o}=this.storageInfo,{minCol:n,maxCol:l,minRow:h,maxRow:c}=this.storageInfo.blockBoundary[t],u=l-n+1,m=c-h+1,f=i*this.imageSize[0]/u,d=e*this.imageSize[1]/m,w=Math.min((i+1)*this.imageSize[0]/u,this.imageSize[0]),g=Math.min((e+1)*this.imageSize[1]/m,this.imageSize[1]),p=w-f,M=g-d,x=new r.A({xmin:f-.5,ymin:.5-g,xmax:w-.5,ymax:.5-d,spatialReference:this.raster.rasterInfo.spatialReference}),{pixelBlock:_}=await this.raster.fetchPixels(x,a??p,o??M,s);return _},this.getLevelTiles=t=>{const e=[],{minCol:i,maxCol:s,minRow:a,maxRow:o}=this.storageInfo.blockBoundary[t];for(let n=a;n<=o;n++)for(let a=i;a<=s;a++){const i=this._tileMap.get(`${t}/${n}/${a}`);i&&e.push(i)}return e.length?e:null},this.getLevelWithPixelAngle=t=>this._pixelAngleToLevelMap.get(t)??0,this.getLowResolutionTiles=()=>{const t=this.maximumPyramidLevel;return t<0?null:this.getLevelTiles(t)},this.getTiles=(t,e,i,s,a)=>{const{minCol:o,minRow:n,maxCol:r,maxRow:l}=this.storageInfo.blockBoundary[t];return p(t,[o,n],[r,l],this._tileMap,e,i,s,a)}}initialize(){this._processLevels()}destroy(){this.raster.rasterJobHandler=null,this.raster=null,this._shutdownJobHandler(),this._tileMap.clear(),this._pixelAngleToLevelMap.clear()}async _initJobHandler(){this._rasterJobHandler||(await super._initJobHandler(),this.raster.rasterJobHandler=this._rasterJobHandler)}_processLevels(){const{blockBoundary:t,tileInfo:e}=this.storageInfo,i=t?.length;if(!i)throw new o.A("panoramic-viewer:missing-pyramid-resolutions","TIFF/MRF must have pyramid resolutions defined",{rasterId:this.raster.rasterId});this._tileMap.clear();for(let s=0;s<i;s++){const{maxCol:i,maxRow:a,minCol:o,minRow:n}=t[s],r=180/(a-n+1),l=360/(i-o+1),c=l/e.size[0];if(c>h.NU)break;this._pixelAngleToLevelMap.set(c,s);for(let t=n;t<=a;t++){const e=180-(t+.5)*r;for(let a=o;a<=i;a++){const i=(a+.5)*l-180;this._tileMap.set(`${s}/${t}/${a}`,new M.default(s,t,a,l,r,i,e,h.vK/2,[this.horizonPitch,this.horizonRoll,this.horizonYaw],this._fetchRawTile))}}this._maximumPyramidLevel=s}}get rasterInfo(){return this.raster.rasterInfo}get storageInfo(){return this.rasterInfo.storageInfo}get imageSize(){const{width:t,height:e}=this.rasterInfo;return[t,e]}get maximumPyramidLevel(){return this._maximumPyramidLevel}};(0,s.Cg)([(0,n.MZ)()],x.prototype,"horizonPitch",void 0),(0,s.Cg)([(0,n.MZ)()],x.prototype,"horizonYaw",void 0),(0,s.Cg)([(0,n.MZ)()],x.prototype,"horizonRoll",void 0),(0,s.Cg)([(0,n.MZ)()],x.prototype,"raster",void 0),x=(0,s.Cg)([(0,n.$K)("esri.widgets.PanoramicViewer.support.PanoramicTilePyramid")],x);const _=x}}]);