@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 6.02 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import{__decorate as e}from"tslib";import i from"../../../Graphic.js";import t from"../../../core/Accessor.js";import{createTask as o}from"../../../core/asyncUtils.js";import{equalsMaybe as r}from"../../../core/maybe.js";import{throwIfAborted as a}from"../../../core/promiseUtils.js";import{on as s,watch as n,syncAndInitial as l}from"../../../core/reactiveUtils.js";import{property as c,subclass as m}from"../../../core/accessorSupport/decorators.js";import{isSerializable as d}from"../../../core/support/jsonUtils.js";import{projectAsync as u}from"../../../geometry/projectionUtils.js";import{or as w}from"../../../layers/orientedImagery/transformations/utils.js";import{computeTriangulatedVector as h,computeTriangulatedPoint as g}from"../imageMeasurementUtils.js";import{locationSymbol as V,locationSymbol3D as p}from"../symbols.js";import{registryKeys as M}from"../types.js";import{extractHorizonAnglesFromMedia as f}from"../utils.js";import{imageSpaceToPoint as v}from"../support/geometryUtils.js";let y=class extends t{constructor(e){super(e),this.referenceTransformationService=null,this._createImageLocationHandle=()=>{this.oiViewModel.removeHandles("image-click");const{imageLocationToolState:e,mode:i,activeViewer:t,currentBestFeature:r,footprintExtent:n,layer:l}=this.oiViewModel,c=t?.imageSize;if(!(e&&"none"!==i&&c&&n&&r))return;this.oiViewModel.clickAction="pixel-location";let m=null;const d=s(()=>t,"pixel-location",e=>{const{currentBestFeatureMeasurementImage:s,triangularMeasurementActive:c,activeTriangulatedViewer:d}=this.oiViewModel;if(!e)return;this.oiViewModel.pixelCoordinates=e;const h=null!=s&&!d?.state.includes("loading");w(!c,h)&&this._plotLocationPointOnImage(e),m?.abort(),m=o(async o=>{if(!e)return;let s=await this.oiViewModel.getMapPoint(e);a(o);const m=this.oiViewModel.view?.spatialReference;m&&!s.spatialReference.equals(m)&&(s=await u(s,m),a(o)),this.oiViewModel.groundCoordinates=s,c&&s&&h&&await this._triangulatedLocationWorkflow(s,o);const d=l?.orientationAccuracy;if(!d)return;const w={pixel:e,currentResult:s,currentBestFeature:r,mode:i,activeViewer:t,footprintExtent:n,accuracyParameters:d,viewSpatialReference:m,signal:o},g=await this.oiViewModel.calculateLocationAccuracy(w);a(o),g&&(this.oiViewModel.groundCoordinatesAccuracy=g)})});this.oiViewModel.addHandles(d,"image-click")},this._createTriangularImageLocationHandle=()=>{this.oiViewModel.removeHandles(M.triangularImageClick);const{imageLocationToolState:e,mode:i,activeTriangulatedViewer:t}=this.oiViewModel,r=t?.imageSize;if(!e||"none"===i||!r)return;this.oiViewModel.clickAction="pixel-location";let n=null;const l=s(()=>t,"pixel-location",e=>{1===this.measurementVectors.length&&e&&(this._plotLocationPointOnImage(e,!0),n?.abort(),n=o(async i=>{if(!e||this.oiViewModel.triangulatedPoint||2===this.measurementVectors?.length||!this.oiViewModel.currentBestFeatureMeasurementImage)return;let t=await(this.referenceTransformationService?.pixelToMapPoint(e));if(a(i),!t)return;const o=this.oiViewModel.view?.spatialReference;o&&!t.spatialReference.equals(o)&&(t=await u(t,o),a(i)),await this._calculateTriangulatedPointFromGroundPoint(t,{signal:i}),a(i)}))});this.oiViewModel.addHandles(l,M.triangularImageClick)}}initialize(){this.addHandles([n(()=>[this.oiViewModel.state,this.oiViewModel.imageLocationToolState,this.oiViewModel.view],(e,i)=>{if(this._resetMeasurementVectors(),this._createImageLocationHandle(),!e[1])return this.oiViewModel.clearPreviousGroundLocation(),void this._resetCursor();e[1]!==i?.[1]&&this._setMeasurementCursor()},l)])}async _calculateTriangulatedPointFromGroundPoint(e,i){if(this.oiViewModel.currentBestFeatureMeasurementImage&&e){const{currentBestFeatureMeasurementImage:t,view:o}=this.oiViewModel,s=h(e,t);s&&this.measurementVectors.push(s);let n=await g(this.measurementVectors);a(i),r(n?.spatialReference,o?.spatialReference)||(n=await u(n,o?.spatialReference)),this.oiViewModel.triangulatedPoint=n??this.oiViewModel.triangulatedPoint}}async _plotReferenceLocationPoint(e,i){if(this.oiViewModel.currentBestFeatureMeasurementImage){const t=await(this.referenceTransformationService?.pointToPixel(e,{signal:i}));a(i),t&&this._plotLocationPointOnImage(t,!0)}}_plotLocationPointOnImage(e,t=!1){const{activeViewer:o,mode:r,state:a,activeTriangulatedViewer:s}=this.oiViewModel,n=t?s:o;if("image-loaded"!==a||!n?.imageSize||"default"!==r&&"panoramic"!==r)return;this.oiViewModel.clearLocationPointOnImage(t);const l=d(e)?e.toJSON():e,c=f(n?.media),m=v(l,r,n.imageSize,c),u=new i({geometry:m,symbol:"default"===r?V:p});t?this.oiViewModel.correctedLocationPointOnImage=u:this.oiViewModel.locationPointOnImage=u,n.addGraphic(u,0)}_resetCursor(){const{activeViewer:e,imageMeasurementViewer:i}=this.oiViewModel;e&&this.oiViewModel.removeHandles(M.activeViewerCursorHandles),i&&this.oiViewModel.removeHandles(M.imageViewerCursorHandles)}_resetMeasurementVectors(){this.measurementVectors=[]}_setMeasurementCursor(){const{activeViewer:e,imageMeasurementViewer:i,triangularMeasurementActive:t}=this.oiViewModel;e&&this.oiViewModel.addHandles(e.imageRenderer.acquireCursor("crosshair","high"),M.activeViewerCursorHandles),i&&t&&this.oiViewModel.addHandles(i.imageRenderer.acquireCursor("crosshair","high"),M.activeViewerCursorHandles)}async _triangulatedLocationWorkflow(e,i){if(this.oiViewModel.currentBestFeature&&e){const{currentBestFeature:t}=this.oiViewModel;this.oiViewModel.triangulatedPoint&&(this.measurementVectors=[],this.oiViewModel.triangulatedPoint=null,this.oiViewModel.clearLocationPointOnImage(!0));const o=h(e,t);if(!o)return;this.measurementVectors.push(o),await this._plotReferenceLocationPoint(e,i),a(i),this._createTriangularImageLocationHandle()}}};e([c()],y.prototype,"measurementVectors",void 0),e([c()],y.prototype,"oiViewModel",void 0),e([c()],y.prototype,"referenceTransformationService",void 0),y=e([m("esri.widgets.OrientedImageryViewer.components.ImageLocationViewModel")],y);const P=y;export{P as default};