UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.02 kB
import"../../../../geometry.js";import{remove as e}from"../../../../core/arrayUtils.js";import{isSome as t}from"../../../../core/maybe.js";import{onAbort as r,createAbortError as s}from"../../../../core/promiseUtils.js";import{TaskPriority as i,noBudget as o}from"../../../support/Scheduler.js";import n from"../../../../geometry/Multipoint.js";class a{constructor(e,t){this.spatialReference=e,this._view=t}getElevation(e,t,r){return this._view.elevationProvider.getElevation(e,t,0,this.spatialReference,r)}async queryElevation(e,t,r,s,i){return this._view.elevationProvider.queryElevation(e,t,0,this.spatialReference,i,r,s)}}class l{constructor(e,t,r,s){this.spatialReference=t,this._getElevationQueryProvider=r,this._queries=new Array,this._queryOptions={...s,ignoreInvisibleLayers:!0},this._frameTask=e.registerTask(i.ELEVATION_QUERY,this)}destroy(){this._frameTask.remove()}queryElevation(t,i,o,n=0){return new Promise(((a,l)=>{const u={x:t,y:i,minDemResolution:n,result:{resolve:a,reject:l},signal:o};this._queries.push(u),r(o,(()=>{e(this._queries,u),l(s())}))}))}get running(){return this._queries.length>0}runTask(e){const i=this._queries;this._queries=[];const o=this._getElevationQueryProvider();if(!o)return i.forEach((e=>e.result.reject())),void e.madeProgress();const a=i.map((e=>[e.x,e.y])),l=i.reduce(((e,t)=>Math.min(e,t.minDemResolution)),1/0),u=new n({points:a,spatialReference:this.spatialReference}),c=i.length>1&&i.some((e=>!!e.signal))?new AbortController:null,h=t(c)?c.signal:i[0].signal;if(t(c)){let e=0;i.forEach((t=>r(t.signal,(()=>{e++,t.result.reject(s()),e===i.length&&c.abort()}))))}const m={...this._queryOptions,minDemResolution:l,signal:h};o.queryElevation(u,m).then((e=>{i.forEach(((r,i)=>{t(r.signal)&&r.signal.aborted?r.result.reject(s()):r.result.resolve(e.geometry.points[i][2])}))})).catch((e=>{i.forEach((t=>t.result.reject(e)))})),e.madeProgress()}get test(){const e=this;return{update:()=>e._queries.length>0&&e.runTask(o)}}}export{l as ElevationQuery,a as ViewElevationProvider};