UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 2.19 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{remove as e}from"../../../../core/arrayUtils.js";import"../../../../core/has.js";import{createAbortError as t,createResolver as r,onAbort as s}from"../../../../core/promiseUtils.js";import i from"../../../../geometry/Multipoint.js";import{TaskPriority as o,noBudget as n}from"../../../support/Scheduler.js";class l{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 a{constructor(e,t,r,s){this.spatialReference=t,this._getElevationQueryProvider=r,this._queries=new Array,this._queryOptions={...s,ignoreInvisibleLayers:!0},this._frameTask=e.registerTask(o.ELEVATION_QUERY,this)}destroy({completeTasks:e}={completeTasks:!1}){if(this._frameTask.remove(),this.running)if(e)this.runTask(n);else for(const r of this._queries)r.result.reject(t())}queryElevation(i,o,n,l=0){const a=r(),u={x:i,y:o,minDemResolution:l,result:a,signal:n};return this._queries.push(u),s(n,(()=>{e(this._queries,u),a.reject(t())})),a.promise}get running(){return this._queries.length>0}runTask(e){const r=this._queries;this._queries=[];const o=this._getElevationQueryProvider();if(!o)return r.forEach((e=>e.result.reject())),void e.madeProgress();const n=r.map((e=>[e.x,e.y])),l=r.reduce(((e,t)=>Math.min(e,t.minDemResolution)),1/0),a=new i({points:n,spatialReference:this.spatialReference}),u=r.length>1&&r.some((e=>!!e.signal))?new AbortController:null,c=null!=u?u.signal:r[0].signal;if(null!=u){let e=0;r.forEach((i=>s(i.signal,(()=>{e++,i.result.reject(t()),e===r.length&&u.abort()}))))}const h={...this._queryOptions,minDemResolution:l,signal:c};o.queryElevation(a,h).then((e=>{r.forEach(((r,s)=>{null!=r.signal&&r.signal.aborted?r.result.reject(t()):r.result.resolve(e.geometry.points[s][2])}))})).catch((e=>{r.forEach((t=>t.result.reject(e)))})),e.madeProgress()}get test(){}}export{a as ElevationQuery,l as ViewElevationProvider};