UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 2.52 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{__decorate as t}from"tslib";import e from"../../../../core/Accessor.js";import i from"../../../../core/Logger.js";import{toUnit as n}from"../../../../core/quantity.js";import{watch as o,syncAndInitial as r}from"../../../../core/reactiveUtils.js";import{adaptiveLengthUnit as s,adaptiveVerticalLengthUnit as a}from"../../../../core/units.js";import{property as l,subclass as c}from"../../../../core/accessorSupport/decorators.js";import{applyProjectionAndElevationAlignment as u,logFailedGeometryProjectionError as p}from"../support/projectionUtils.js";import{euclideanDistanceBetweenPoints as d}from"../../../support/euclideanLengthMeasurementUtils.js";let v=class extends e{constructor(t){super(t)}initialize(){this.addHandles([o(()=>({viewData:this.viewData,startPoint:this.analysis.startPoint}),({viewData:t,startPoint:e})=>{t.elevationAlignedStartPoint=this._applyProjectionAndElevationAlignment(e)},r),o(()=>({viewData:this.viewData,endPoint:this.analysis.endPoint}),({viewData:t,endPoint:e})=>{t.elevationAlignedEndPoint=this._applyProjectionAndElevationAlignment(e)},r),o(()=>({result:this._computedResult,viewData:this.viewData}),({result:t,viewData:e})=>{e.result=t},r)])}_applyProjectionAndElevationAlignment(t){if(null==t)return t;const{spatialReference:e,elevationProvider:n}=this.view,o=u(t,e,n);return o??(p(this.analysis,t.spatialReference,i.getLogger(this)),null)}get _computedResult(){const{elevationAlignedStartPoint:t,elevationAlignedEndPoint:e,measurementMode:i,unit:o}=this.viewData;if(null==t||null==e)return null;const r=d(t,e),l=this.geodesicLengthMeasurementUtils.geodesicDistanceBetweenPoints(t,e);if(null==r)return null;let c,u;switch(i){case 0:u=null!=l?"geodesic":"euclidean",c=l??r.horizontal;break;case 2:if(null==l)return null;u="geodesic",c=l;break;case 1:u="euclidean",c=r.horizontal}let p=r.direct,v=r.vertical;const m=s(p.value,p.unit,o),g=s(c.value,c.unit,o),h=a(v.value,v.unit,o);return p=n(p,m),c=n(c,g),v=n(v,h),{mode:u,directDistance:p,horizontalDistance:c,verticalDistance:v}}};t([l({constructOnly:!0})],v.prototype,"view",void 0),t([l({constructOnly:!0})],v.prototype,"analysis",void 0),t([l({constructOnly:!0})],v.prototype,"viewData",void 0),t([l({constructOnly:!0})],v.prototype,"geodesicLengthMeasurementUtils",void 0),t([l()],v.prototype,"_computedResult",null),v=t([c("esri.views.3d.analysis.DirectLineMeasurement.DirectLineMeasurementController")],v);export{v as DirectLineMeasurementController};