UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.64 kB
import{_ as e}from"../chunks/tslib.es6.js";import t from"./Analysis.js";import r from"./LineOfSightAnalysisObserver.js";import o from"./LineOfSightAnalysisTarget.js";import s from"../core/Collection.js";import{referenceSetter as i,castForReferenceSetter as n}from"../core/collectionUtils.js";import{isNone as p,isSome as l,applySome as a,unwrap as c}from"../core/maybe.js";import{watch as m,syncAndInitial as u}from"../core/reactiveUtils.js";import{property as g}from"../core/accessorSupport/decorators/property.js";import"../core/accessorSupport/ensureType.js";import"../core/arrayUtils.js";import{subclass as y}from"../core/accessorSupport/decorators/subclass.js";import{projectOrLoad as f}from"../geometry/projection.js";import{fromValues as h,expandWithVec3 as d,toExtent as v}from"../geometry/support/aaBoundingBox.js";import{getGeometryEffectiveElevationMode as j}from"../support/elevationInfoUtils.js";const b=s.ofType(o);let x=class extends t{constructor(e){super(e),this.type="line-of-sight",this.observer=null,this.extent=null}initialize(){this.addHandles(m((()=>this._computeExtent()),(e=>{(p(e)||p(e.pending))&&this._set("extent",l(e)?e.extent:null)}),u))}get targets(){return this._get("targets")||new b}set targets(e){this._set("targets",i(e,this.targets,b))}get spatialReference(){return l(this.observer)&&l(this.observer.position)?this.observer.position.spatialReference:null}get requiredPropertiesForEditing(){return[a(this.observer,(e=>e.position))]}async waitComputeExtent(){const e=this._computeExtent();return l(e)?c(e.pending):Promise.resolve()}_computeExtent(){const e=this.spatialReference;if(p(this.observer)||p(this.observer.position)||p(e))return null;const t=e=>"absolute-height"===j(e.position,e.elevationInfo),r=this.observer.position,o=h(r.x,r.y,r.z,r.x,r.y,r.z);for(const i of this.targets)if(l(i.position)){const t=f(i.position,e);if(l(t.pending))return{pending:t.pending,extent:null};if(l(t.geometry)){const{x:e,y:r,z:s}=t.geometry;d(o,[e,r,s])}}const s=v(o,e);return t(this.observer)&&this.targets.every(t)||(s.zmin=void 0,s.zmax=void 0),{pending:null,extent:s}}clear(){this.observer=null,this.targets.removeAll()}};e([g({type:["line-of-sight"]})],x.prototype,"type",void 0),e([g({type:r,json:{read:!0,write:!0}})],x.prototype,"observer",void 0),e([g({cast:n,type:b,nonNullable:!0,json:{read:!0,write:!0}})],x.prototype,"targets",null),e([g({value:null,readOnly:!0})],x.prototype,"extent",void 0),e([g({readOnly:!0})],x.prototype,"spatialReference",null),e([g({readOnly:!0})],x.prototype,"requiredPropertiesForEditing",null),x=e([y("esri.analysis.LineOfSightAnalysis")],x);const O=x;export{O as default};