UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 2.76 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{_ as t}from"../../../../chunks/tslib.es6.js";import e from"../../../../core/Accessor.js";import i from"../../../../core/Logger.js";import{toUnit as o}from"../../../../core/quantityUtils.js";import{watch as r,syncAndInitial as s}from"../../../../core/reactiveUtils.js";import{adaptiveLengthUnit as n,adaptiveVerticalLengthUnit as a}from"../../../../core/unitUtils.js";import{property as l}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/has.js";import"../../../../core/RandomLCG.js";import{subclass as c}from"../../../../core/accessorSupport/decorators/subclass.js";import{MeasurementMode as u}from"../interfaces.js";import{applyProjectionAndElevationAlignment as p,logFailedGeometryProjectionError as m}from"../support/projectionUtils.js";import{euclideanDistanceBetweenPoints as d}from"../../../support/euclideanLengthMeasurementUtils.js";import{geodesicDistanceBetweenPoints as v}from"../../../support/geodesicLengthMeasurementUtils.js";let h=class extends e{constructor(t){super(t)}initialize(){this.addHandles([r((()=>({viewData:this.viewData,startPoint:this.analysis.startPoint})),(({viewData:t,startPoint:e})=>{t.elevationAlignedStartPoint=this._applyProjectionAndElevationAlignment(e)}),s),r((()=>({viewData:this.viewData,endPoint:this.analysis.endPoint})),(({viewData:t,endPoint:e})=>{t.elevationAlignedEndPoint=this._applyProjectionAndElevationAlignment(e)}),s),r((()=>({result:this._computedResult,viewData:this.viewData})),(({result:t,viewData:e})=>{e.result=t}),s)])}_applyProjectionAndElevationAlignment(t){if(null==t)return t;const{spatialReference:e,elevationProvider:o}=this.view,r=p(t,e,o);return r??(m(this.analysis,t.spatialReference,i.getLogger(this)),null)}get _computedResult(){const{elevationAlignedStartPoint:t,elevationAlignedEndPoint:e,measurementMode:i,unit:r}=this.viewData;if(null==t||null==e)return null;const s=d(t,e),l=v(t,e);if(null==s)return null;let c,p;switch(i){case u.Auto:p=null!=l?"geodesic":"euclidean",c=l??s.horizontal;break;case u.Geodesic:if(null==l)return null;p="geodesic",c=l;break;case u.Euclidean:p="euclidean",c=s.horizontal}let m=s.direct,h=s.vertical;const f=n(m.value,m.unit,r),g=n(c.value,c.unit,r),j=a(h.value,h.unit,r);return m=o(m,f),c=o(c,g),h=o(h,j),{mode:p,directDistance:m,horizontalDistance:c,verticalDistance:h}}};t([l()],h.prototype,"view",void 0),t([l()],h.prototype,"analysis",void 0),t([l()],h.prototype,"viewData",void 0),t([l()],h.prototype,"_computedResult",null),h=t([c("esri.views.3d.analysis.DirectLineMeasurement.DirectLineMeasurementController")],h);export{h as DirectLineMeasurementController};