KMLLayerView2D.f49949db.js 12 KB

1
  1. import{cx as P,a7 as A,U as z,di as S,ct as O,R as F,cA as U,a as C,t as W,dl as Y,aL as L,dw as H,dx as j,dy as K,dz as J,_ as x,$ as f,a0 as Q}from"./index.6c049565.js";import{b as I,g as X,d as Z}from"./kmlUtils.8643ad03.js";import{S as tt,T as et,R as it}from"./Bitmap.5c9e2d15.js";import{a as at}from"./BitmapContainer.941a277e.js";import{y as st,u as rt}from"./LayerView.7c2db9bf.js";import{i as D}from"./GraphicContainer.ec6ac6c0.js";import{o as R}from"./BaseGraphicContainer.8f76c915.js";import{C as ot,$ as nt}from"./rasterProjectionHelper.3c27ded5.js";import{a as lt,e as ht}from"./WGLContainer.bbd0fcb8.js";import{y as pt,o as mt}from"./RenderingContext.f389fdc6.js";import{P as M,G as T,D as q,L as N,Y as dt,V as ct,f as G}from"./enums.2d9e6f64.js";import{x as gt}from"./VertexArrayObject.729879be.js";import{E as B}from"./Texture.8e8dfb11.js";import"./utils.eb2c3fd5.js";import"./Utils.e8554a0e.js";import"./enums.0295eb81.js";import"./VertexElementDescriptor.1fdca6da.js";import"./MaterialKey.bbaab8f1.js";import"./ExpandedCIM.64535143.js";import"./BidiEngine.d8bba3fc.js";import"./Rect.95b0fd2e.js";import"./quantizationUtils.4f3ed95a.js";import"./GeometryUtils.4f19e772.js";import"./floatRGBA.c5518572.js";import"./normalizeUtilsSync.f896b328.js";import"./projectionSupport.2b4a8796.js";import"./json.879c9adc.js";import"./FeatureContainer.8e5dd053.js";import"./TileContainer.282da507.js";import"./visualVariablesUtils.4b17aac7.js";import"./visualVariablesUtils.88ca310b.js";import"./Matcher.d9c9cebd.js";import"./tileUtils.a1e62810.js";import"./TileClipper.7297efa2.js";import"./Geometry.d049a63c.js";import"./GeometryUtils.51c4032a.js";import"./earcut.afc1d357.js";import"./devEnvironmentUtils.d8d0484c.js";import"./schemaUtils.7eee5b9f.js";import"./createSymbolSchema.30665f63.js";import"./util.d5f4af7b.js";import"./ComputedAttributeStorage.dc79b701.js";import"./centroid.0c969b82.js";import"./vec3f32.1121a836.js";import"./pixelUtils.f4eba4af.js";import"./ProgramTemplate.83fdf5b6.js";import"./StyleDefinition.d56936e4.js";import"./config.82550349.js";import"./programUtils.7e7bf03b.js";import"./OrderIndependentTransparency.4d1575c0.js";class p{constructor(t){if(t)this._ownsRctx=!1,this._rctx=t;else{if(p._instance)return p._instanceRefCount++,p._instance;p._instanceRefCount=1,p._instance=this,this._ownsRctx=!0;const i=document.createElement("canvas").getContext("webgl");i.getExtension("OES_texture_float"),this._rctx=new pt(i,{})}const a={applyProjection:!0,bilinear:!1,bicubic:!1},r=mt("raster/reproject","raster/reproject",new Map([["a_position",0]]),a);this._program=this._rctx.programCache.acquire(r.shaders.vertexShader,r.shaders.fragmentShader,r.attributes),this._rctx.useProgram(this._program),this._program.setUniform1f("u_opacity",1),this._program.setUniform1i("u_image",0),this._program.setUniform1i("u_flipY",0),this._program.setUniform1i("u_transformGrid",1),this._quad=new lt(this._rctx,[0,0,1,0,0,1,1,1])}reprojectTexture(t,a,r=!1){const i=P(t.extent,a),s=new A({x:(t.extent.xmax-t.extent.xmin)/t.texture.descriptor.width,y:(t.extent.ymax-t.extent.ymin)/t.texture.descriptor.height,spatialReference:t.extent.spatialReference}),{x:o,y:m}=ot(s,a,t.extent);let h=(o+m)/2;const n=Math.round((i.xmax-i.xmin)/h),d=Math.round((i.ymax-i.ymin)/h);h=(i.width/n+i.height/d)/2;const b=new A({x:h,y:h,spatialReference:i.spatialReference}),w=nt({projectedExtent:i,srcBufferExtent:t.extent,pixelSize:b,hasWrapAround:!0,spacing:[16,16]}),y=ht(this._rctx,w),g=new B(this._rctx,{width:n,height:d,pixelFormat:M.RGBA,dataType:T.UNSIGNED_BYTE,wrapMode:q.CLAMP_TO_EDGE,samplingMode:N.LINEAR,hasMipmap:!1}),l=new gt(this._rctx,{colorTarget:dt.TEXTURE,depthStencilTarget:ct.NONE,width:n,height:d},g);if(this._rctx.bindFramebuffer(l),this._rctx.setViewport(0,0,n,d),this._rctx.useProgram(this._program),this._rctx.bindTexture(t.texture,0),this._rctx.bindTexture(y,1),this._quad.bind(),this._program.setUniform2f("u_srcImageSize",t.texture.descriptor.width,t.texture.descriptor.height),this._program.setUniform2fv("u_transformSpacing",w.spacing),this._program.setUniform2fv("u_transformGridSize",w.size),this._program.setUniform2f("u_targetImageSize",n,d),this._quad.draw(),this._quad.unbind(),this._rctx.useProgram(null),this._rctx.bindFramebuffer(null),y.dispose(),r){const u=new ImageData(l.descriptor.width,l.descriptor.height);return l.readPixels(0,0,l.descriptor.width,l.descriptor.height,M.RGBA,T.UNSIGNED_BYTE,u.data),l.detachColorTexture(G.COLOR_ATTACHMENT0),l.dispose(),{texture:g,extent:i,imageData:u}}return l.detachColorTexture(G.COLOR_ATTACHMENT0),l.dispose(),{texture:g,extent:i}}reprojectBitmapData(t,a){const r=tt(t.bitmapData)?et(t.bitmapData):t.bitmapData,i=new B(this._rctx,{width:t.bitmapData.width,height:t.bitmapData.height,pixelFormat:M.RGBA,dataType:T.UNSIGNED_BYTE,wrapMode:q.CLAMP_TO_EDGE,samplingMode:N.LINEAR,hasMipmap:!1},r),s=this.reprojectTexture({texture:i,extent:t.extent},a,!0);s.texture.dispose();const o=document.createElement("canvas");return o.width=s.imageData.width,o.height=s.imageData.height,o.getContext("2d").putImageData(s.imageData,0,0),{bitmapData:o,extent:s.extent}}async loadAndReprojectBitmapData(t,a,r){const i=(await z(t,{responseType:"image"})).data,s=document.createElement("canvas");s.width=i.width,s.height=i.height;const o=s.getContext("2d");o.drawImage(i,0,0);const m=o.getImageData(0,0,s.width,s.height);if(a.spatialReference.equals(r))return{bitmapData:m,extent:a};const h=this.reprojectBitmapData({bitmapData:m,extent:a},r);return{bitmapData:h.bitmapData,extent:h.extent}}destroy(){this._ownsRctx?(p._instanceRefCount--,p._instanceRefCount===0&&(this._quad.dispose(),this._program.dispose(),this._rctx.dispose(),p._instance=null)):(this._quad.dispose(),this._program.dispose())}}p._instanceRefCount=0;class ${constructor(){this.allSublayers=new Map,this.allPoints=[],this.allPolylines=[],this.allPolygons=[],this.allMapImages=[]}}let c=class extends st(rt){constructor(){super(...arguments),this._bitmapIndex=new Map,this._mapImageContainer=new at,this._kmlVisualData=new $,this.allVisiblePoints=new S,this.allVisiblePolylines=new S,this.allVisiblePolygons=new S,this.allVisibleMapImages=new O}async hitTest(e,t){var r,i,s;const a=this.layer;return[(r=this._pointsView)==null?void 0:r.hitTest(e),(i=this._polylinesView)==null?void 0:i.hitTest(e),(s=this._polygonsView)==null?void 0:s.hitTest(e)].flat().filter(Boolean).map(o=>(o.layer=a,o.sourceLayer=a,{type:"graphic",graphic:o,layer:a,mapPoint:e}))}update(e){this._polygonsView&&this._polygonsView.processUpdate(e),this._polylinesView&&this._polylinesView.processUpdate(e),this._pointsView&&this._pointsView.processUpdate(e)}attach(){this._fetchController=new AbortController,this.container.addChild(this._mapImageContainer),this._polygonsView=new R({view:this.view,graphics:this.allVisiblePolygons,requestUpdateCallback:()=>this.requestUpdate(),container:new D(this.view.featuresTilingScheme)}),this.container.addChild(this._polygonsView.container),this._polylinesView=new R({view:this.view,graphics:this.allVisiblePolylines,requestUpdateCallback:()=>this.requestUpdate(),container:new D(this.view.featuresTilingScheme)}),this.container.addChild(this._polylinesView.container),this._pointsView=new R({view:this.view,graphics:this.allVisiblePoints,requestUpdateCallback:()=>this.requestUpdate(),container:new D(this.view.featuresTilingScheme)}),this.container.addChild(this._pointsView.container),this.handles.add([this.allVisibleMapImages.on("change",e=>{e.added.forEach(t=>this._addMapImage(t)),e.removed.forEach(t=>this._removeMapImage(t))}),F(()=>this.layer.visibleSublayers,e=>{for(const[t,a]of this._kmlVisualData.allSublayers)a.visibility=0;for(const t of e){const a=this._kmlVisualData.allSublayers.get(t.id);a&&(a.visibility=1)}this._refreshCollections()})]),this.updatingHandles.addPromise(this._fetchService(this._fetchController.signal)),this._imageReprojector=new p}detach(){this._fetchController.abort(),this._fetchController=null,this._mapImageContainer.removeAllChildren(),this.container.removeAllChildren(),this._bitmapIndex.clear(),this._polygonsView&&(this._polygonsView.destroy(),this._polygonsView=null),this._polylinesView&&(this._polylinesView.destroy(),this._polylinesView=null),this._pointsView&&(this._pointsView.destroy(),this._pointsView=null),this._imageReprojector&&(this._imageReprojector.destroy(),this._imageReprojector=null)}moveStart(){}viewChange(){this._polygonsView.viewChange(),this._polylinesView.viewChange(),this._pointsView.viewChange()}moveEnd(){}isUpdating(){return this._pointsView.updating||this._polygonsView.updating||this._polylinesView.updating}_addMapImage(e){(this.view.spatialReference.isWGS84||this.view.spatialReference.isWebMercator)&&this._imageReprojector.loadAndReprojectBitmapData(e.href,U.fromJSON(e.extent),this.view.spatialReference).then(t=>{const a=new it(t.bitmapData,{immutable:!1,requestRenderOnSourceChangedEnabled:!0});a.x=t.extent.xmin,a.y=t.extent.ymax,a.resolution=t.extent.width/t.bitmapData.width,a.rotation=e.rotation,this._mapImageContainer.addChild(a),this._bitmapIndex.set(e,a)})}async _getViewDependentUrl(e,t){const{viewFormat:a,viewBoundScale:r,httpQuery:i}=e;if(C(a)){if(W(t))throw new Error("Loading this network link requires a view state.");let s;if(await Y(),C(r)&&r!==1){const _=new U(t.extent);_.expand(r),s=_}else s=t.extent;s=P(s,L.WGS84);const o=P(s,L.WebMercator),m=s.xmin,h=s.xmax,n=s.ymin,d=s.ymax,b=t.size[0]*t.pixelRatio,w=t.size[1]*t.pixelRatio,y=Math.max(o.width,o.height),g={"[bboxWest]":m.toString(),"[bboxEast]":h.toString(),"[bboxSouth]":n.toString(),"[bboxNorth]":d.toString(),"[lookatLon]":s.center.x.toString(),"[lookatLat]":s.center.y.toString(),"[lookatRange]":y.toString(),"[lookatTilt]":"0","[lookatHeading]":t.rotation.toString(),"[lookatTerrainLon]":s.center.x.toString(),"[lookatTerrainLat]":s.center.y.toString(),"[lookatTerrainAlt]":"0","[cameraLon]":s.center.x.toString(),"[cameraLat]":s.center.y.toString(),"[cameraAlt]":y.toString(),"[horizFov]":"60","[vertFov]":"60","[horizPixels]":b.toString(),"[vertPixels]":w.toString(),"[terrainEnabled]":"0","[clientVersion]":H,"[kmlVersion]":"2.2","[clientName]":"ArcGIS API for JavaScript","[language]":"en-US"},l=_=>{for(const E in _)for(const k in g)_[E]=_[E].replace(k,g[k])},u=j(a);l(u);let V={};C(i)&&(V=j(i),l(V));const v=K(e.href);return v.query={...v.query,...u,...V},`${v.path}?${J(u)}`}return e.href}async _fetchService(e){const t=new $;await this._loadVisualData(this.layer.url,t,e),this._kmlVisualData=t,this._refreshCollections()}_refreshCollections(){this.allVisiblePoints.removeAll(),this.allVisiblePolylines.removeAll(),this.allVisiblePolygons.removeAll(),this.allVisibleMapImages.removeAll(),this.allVisiblePoints.addMany(this._kmlVisualData.allPoints.filter(e=>this._isSublayerVisible(e.sublayerId)).map(({item:e})=>e)),this.allVisiblePolylines.addMany(this._kmlVisualData.allPolylines.filter(e=>this._isSublayerVisible(e.sublayerId)).map(({item:e})=>e)),this.allVisiblePolygons.addMany(this._kmlVisualData.allPolygons.filter(e=>this._isSublayerVisible(e.sublayerId)).map(({item:e})=>e)),this.allVisibleMapImages.addMany(this._kmlVisualData.allMapImages.filter(e=>this._isSublayerVisible(e.sublayerId)).map(({item:e})=>e))}_isSublayerVisible(e){const t=this._kmlVisualData.allSublayers.get(e);return!!t.visibility&&(t.parentFolderId===-1||this._isSublayerVisible(t.parentFolderId))}_loadVisualData(e,t,a){return this._fetchParsedKML(e,a).then(async r=>{for(const i of r.sublayers){t.allSublayers.set(i.id,i);const s=i.points?await I(i.points):[],o=i.polylines?await I(i.polylines):[],m=i.polygons?await I(i.polygons):[],h=i.mapImages||[];if(t.allPoints.push(...s.map(n=>({item:n,sublayerId:i.id}))),t.allPolylines.push(...o.map(n=>({item:n,sublayerId:i.id}))),t.allPolygons.push(...m.map(n=>({item:n,sublayerId:i.id}))),t.allMapImages.push(...h.map(n=>({item:n,sublayerId:i.id}))),i.networkLink){const n=await this._getViewDependentUrl(i.networkLink,this.view.state);await this._loadVisualData(n,t,a)}}})}_fetchParsedKML(e,t){return X(e,this.layer.spatialReference,this.layer.refreshInterval,t).then(a=>Z(a.data))}_removeMapImage(e){const t=this._bitmapIndex.get(e);t&&(this._mapImageContainer.removeChild(t),this._bitmapIndex.delete(e))}};x([f()],c.prototype,"_pointsView",void 0),x([f()],c.prototype,"_polylinesView",void 0),x([f()],c.prototype,"_polygonsView",void 0),x([f()],c.prototype,"updating",void 0),c=x([Q("esri.views.2d.layers.KMLLayerView2D")],c);const me=c;export{me as default};