@arcgis/core 5.2.0-next.64 → 5.2.0-next.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/assets/esri/core/workers/RemoteClient.js +1 -1
  2. package/assets/esri/core/workers/chunks/{bb95922cd4631d6f17fb.js → 04ac5ac6f592d8c34bbd.js} +1 -1
  3. package/assets/esri/core/workers/chunks/{0977f4d77c36175c2895.js → 3ddd717ea12d9823eee2.js} +1 -1
  4. package/assets/esri/core/workers/chunks/5adf16c034a590b5e9f5.js +1 -0
  5. package/assets/esri/core/workers/chunks/{57824ecc10b25e3ad794.js → 903e1cd8b76eff19ebdf.js} +1 -1
  6. package/assets/esri/core/workers/chunks/93c0a620a147cbf4a0ba.js +1 -0
  7. package/assets/esri/core/workers/chunks/9be6827e5756031a56c1.js +1 -0
  8. package/assets/esri/core/workers/chunks/a52c88e2d837b525ff6c.js +1 -0
  9. package/assets/esri/core/workers/chunks/{771ead806efbe9c91fdc.js → a5fdb02b1714e93fa69e.js} +1 -1
  10. package/assets/esri/core/workers/chunks/b4e5ee81b9eb171499a6.js +1 -0
  11. package/assets/esri/core/workers/chunks/bece22668622a9a6bfe2.js +1 -0
  12. package/assets/esri/core/workers/chunks/c02ae1d40c1fe95ae6c5.js +1 -0
  13. package/assets/esri/core/workers/chunks/d51c41c1944df0cbab3e.js +1 -0
  14. package/assets/esri/core/workers/chunks/d583bcea4d1a21da9147.js +1 -0
  15. package/assets/esri/core/workers/chunks/{ef27bf1d7941ae265ca4.js → d7267f429a051943187b.js} +1 -1
  16. package/assets/esri/core/workers/chunks/d9c78c2db04a06ee83ed.js +1 -0
  17. package/assets/esri/core/workers/chunks/{c1e45e24f5ef719a714c.js → dc7e4f7879debf557e46.js} +143 -95
  18. package/assets/esri/libs/parquet/pkg/bundle_bg.wasm +0 -0
  19. package/chunks/Component.glsl.js +60 -62
  20. package/chunks/DefaultMaterial.glsl.js +27 -28
  21. package/chunks/GaussianSplat.glsl.js +7 -7
  22. package/chunks/GaussianSplatShadow.glsl.js +9 -9
  23. package/chunks/GlobalIllumination.glsl.js +35 -15
  24. package/chunks/Path.glsl.js +7 -6
  25. package/chunks/RealisticTree.glsl.js +22 -24
  26. package/chunks/SSAO.glsl.js +1 -1
  27. package/chunks/Terrain.glsl.js +3 -2
  28. package/chunks/Water.glsl.js +20 -11
  29. package/chunks/_commonjsHelpers.js +1 -1
  30. package/chunks/bundle2.js +1 -1
  31. package/config.js +1 -1
  32. package/kernel.js +1 -1
  33. package/layers/graphics/sources/ParquetSource.js +1 -1
  34. package/layers/graphics/sources/parquet/FileProvider.js +1 -1
  35. package/layers/graphics/sources/parquet/ParquetFileInfo.js +1 -1
  36. package/layers/graphics/sources/support/ParquetSourceWorker.js +1 -1
  37. package/layers/raster/datasets/EphemeralBlockCache.js +1 -1
  38. package/layers/raster/datasets/RawBlockCache.js +1 -1
  39. package/layers/support/KMLSublayer.js +1 -1
  40. package/layers/video/VideoController.js +1 -1
  41. package/libs/parquet/parquet.js +1 -1
  42. package/package.json +1 -1
  43. package/rest/support/Query.js +1 -1
  44. package/support/revision.js +1 -1
  45. package/symbols/LabelSymbol3D.js +1 -1
  46. package/symbols/LineSymbol3D.js +1 -1
  47. package/symbols/MeshSymbol3D.js +1 -1
  48. package/symbols/PointSymbol3D.js +1 -1
  49. package/symbols/PolygonSymbol3D.js +1 -1
  50. package/views/2d/layers/features/sources/strategies/ParquetTileLoadStrategy.js +1 -1
  51. package/views/3d/interactive/editingTools/transform/TransformTool3D.js +1 -1
  52. package/views/3d/layers/GaussianSplatLayerView3D.js +1 -1
  53. package/views/3d/layers/IntegratedMesh3DTilesLayerView3D.js +1 -1
  54. package/views/3d/state/controllers/RotateController.js +1 -1
  55. package/views/3d/state/utils/navigationUtils.js +1 -1
  56. package/views/3d/support/gaussianSplatting/GaussianSplatDataStore.js +1 -1
  57. package/views/3d/support/gaussianSplatting/GaussianSplatFadeHelper.js +1 -1
  58. package/views/3d/terrain/OverlayRenderer.js +1 -1
  59. package/views/3d/webgl-engine/core/shaderLibrary/default/DefaultMaterialAuxiliaryPasses.glsl.js +24 -16
  60. package/views/3d/webgl-engine/core/shaderLibrary/default/DefaultMaterialExternalColor.glsl.js +25 -0
  61. package/views/3d/webgl-engine/lib/GaussianSplatRenderUtils.js +2 -0
  62. package/views/3d/webgl-engine/lib/GaussianSplatRenderer.js +1 -1
  63. package/views/3d/webgl-engine/lib/GaussianSplatShadows.js +1 -1
  64. package/views/3d/webgl-engine/shaders/DefaultMaterial.glsl.js +1 -1
  65. package/views/3d/webgl-engine/shaders/GaussianSplat.glsl.js +1 -1
  66. package/views/3d/webgl-engine/shaders/GaussianSplatPassParameters.js +2 -0
  67. package/views/3d/webgl-engine/shaders/GaussianSplatShadow.glsl.js +1 -1
  68. package/views/3d/webgl-engine/shaders/GaussianSplatShadowTechnique.js +1 -1
  69. package/views/3d/webgl-engine/shaders/GaussianSplatTechnique.js +1 -1
  70. package/views/3d/webgl-engine/shaders/RealisticTree.glsl.js +1 -1
  71. package/widgets/BatchAttributeForm/BatchAttributeFormViewModel.js +1 -1
  72. package/widgets/BatchAttributeForm/expressions/ExpressionsManager.js +1 -1
  73. package/widgets/BatchAttributeForm/expressions/ExpressionsModel.js +1 -1
  74. package/widgets/LayerList/ListItem.js +1 -1
  75. package/widgets/OrientedImageryViewer/OrientedImageryViewerViewModel.js +1 -1
  76. package/widgets/OrientedImageryViewer/services/SuperimposeService.js +1 -1
  77. package/widgets/OrientedImageryViewer/services/TransformationService.js +1 -1
  78. package/widgets/OrientedImageryViewer/support/superimposeUtils.js +1 -1
  79. package/widgets/OrientedImageryViewer.js +1 -1
  80. package/widgets/TableList/ListItem.js +1 -1
  81. package/assets/esri/core/workers/chunks/43b39abd49c4a8ce891f.js +0 -1
  82. package/assets/esri/core/workers/chunks/5dbd8ca7e7b8eb9a0bf7.js +0 -1
  83. package/assets/esri/core/workers/chunks/6123894e2ae9233cdf89.js +0 -1
  84. package/assets/esri/core/workers/chunks/6b536d03b4bef408035b.js +0 -1
  85. package/assets/esri/core/workers/chunks/6c98a64d92c9bca78203.js +0 -1
  86. package/assets/esri/core/workers/chunks/78b80da3bbc1b608fe83.js +0 -1
  87. package/assets/esri/core/workers/chunks/7d85048c6cd6ad84faf9.js +0 -1
  88. package/assets/esri/core/workers/chunks/9008090a5d8431ddfa22.js +0 -1
  89. package/assets/esri/core/workers/chunks/a2d8bc0efddd2e13b1ad.js +0 -1
  90. package/assets/esri/core/workers/chunks/c97451f75c23be979476.js +0 -1
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../Graphic.js";import{equals as i,isSome as r}from"../../core/arrayUtils.js";import{createTask as a}from"../../core/asyncUtils.js";import s from"../../core/Collection.js";import{deprecatedProperty as o}from"../../core/deprecate.js";import n from"../../core/Error.js";import{EventedMixin as l}from"../../core/Evented.js";import{makeHandle as c}from"../../core/handleUtils.js";import{equalsShallow as d}from"../../core/lang.js";import u from"../../core/Logger.js";import{clamp as h}from"../../core/mathUtils.js";import{destroyMaybe as p,abortMaybe as m}from"../../core/maybe.js";import{EsriPromise as g}from"../../core/Promise.js";import{isAbortError as v,throwIfAborted as y,waitTick as f}from"../../core/promiseUtils.js";import w from"../../core/ReactiveMap.js";import{whenOnce as _,on as F,watch as b,syncAndInitial as M,initial as V,when as S}from"../../core/reactiveUtils.js";import{sqlAnd as I}from"../../core/sql.js";import{getMetersPerUnitForSR as P}from"../../core/units.js";import{property as C,subclass as A}from"../../core/accessorSupport/decorators.js";import{isSerializable as k}from"../../core/support/jsonUtils.js";import{UpdatingHandles as T}from"../../core/support/UpdatingHandles.js";import O from"../../geometry/Extent.js";import L from"../../geometry/Point.js";import{projectAsync as G}from"../../geometry/projectionUtils.js";import E from"../../geometry/SpatialReference.js";import{polygonCentroidPoint as j}from"../../geometry/support/centroid.js";import{isClockwise as R}from"../../geometry/support/coordsUtils.js";import{normalizeMapX as x}from"../../geometry/support/normalizeUtils.js";import{geographicToWebMercator as B}from"../../geometry/support/webMercatorUtils.js";import D from"../../layers/GraphicsLayer.js";import H from"../../layers/MediaLayer.js";import{searchImages as z,getSortedLayerFeatures as N}from"../../layers/orientedImagery/queries.js";import{calculateSuitabilities as U}from"../../layers/orientedImagery/core/bestImageUtils.js";import{createCoveragePolygon as q,computePolygonForInspection as W,resizePolygon as $,checkIfPolygonContainsSelectedPoint as Z}from"../../layers/orientedImagery/core/coverageUtils.js";import{isElevationSource as J}from"../../layers/orientedImagery/core/ElevationSourceDefinitions.js";import{getMetersPerUnitOfSR as K,convertGeographicToWebMercator as Q}from"../../layers/orientedImagery/core/utils.js";import X from"../../layers/orientedImagery/transformations/updateElevation.js";import{getElevationSampler as Y}from"../../layers/orientedImagery/transformations/updateElevationUtils.js";import{or as ee,getInitialAngle as te,convertPixelLocationToSphereVertex as ie,getUpdateElevationProps as re,getImageToWorldProperties as ae,getImageToWorldPanoramicProperties as se}from"../../layers/orientedImagery/transformations/utils.js";import oe from"../../layers/support/ExtentAndRotationGeoreference.js";import{getFloorFilterClause as ne}from"../../layers/support/floorFilterUtils.js";import le from"../../layers/support/VideoElement.js";import ce from"../../views/MapView.js";import de from"../../views/draw/Draw.js";import{scale as ue}from"../../views/draw/support/drawUtils.js";import{ViewEventPriorities as he}from"../../views/input/InputManager.js";import pe from"../PanoramicVideoViewer.js";import me from"../PanoramicViewer.js";import{defaultAngleThresholdInDegrees as ge,videoMapViewConstraint as ve,fixedImageSize as ye,clockwiseDirections as fe,videoFitScaleTolerance as we,videoExtent as _e,invalidCameraHeading as Fe,sectorsInOrder as be,sampleExtent as Me,sectorsRadii as Ve}from"./constants.js";import{isFeatureAttachment as Se}from"./galleryUtils.js";import{crossSymbol as Ie,crossSymbol3D as Pe,measurementPolygonSymbol as Ce,polylineSymbolPanoramic as Ae,measurementPolylineSymbol as ke,cameraOverlaySymbol3D as Te,cameraOverlaySymbol as Oe,diamondSymbol as Le,diamondSymbol3D as Ge,activeSourcePointSymbol as Ee,sourcePointSymbol as je}from"./symbols.js";import{registryKeys as Re}from"./types.js";import{isNoAttachmentError as xe,extractHorizonAnglesFromMedia as Be,isTifOrMrf as De,filterOILLayerView as He,assignElevationSampleToFeatures as ze,filterByZ as Ne,createPanoramicMedia as Ue,createNonPanoramicMedia as qe,isSceneView as We,isGraphic as $e,calculateSegment as Ze,calculateDirection as Je}from"./utils.js";import{disableVideoZoomAndPan as Ke,getUpdatedConstraints as Qe,getUpdatedExtentPoints as Xe}from"./videoViewerUtils.js";import Ye from"./components/ImageViewer.js";import et from"./components/NavigationNode.js";import tt from"./components/OrientedImageryVideoViewModel.js";import{NoFeatureFoundWithObjectIdError as it}from"./navigation/errors.js";import{queryFeatureByObjectIds as rt}from"./navigation/queries.js";import{ImageMeasurementService as at}from"./services/ImageMeasurementService.js";import st from"./services/SuperimposeService.js";import{configureSketchTool as ot,extractFieldsFromDataCaptureLayer as nt,constructGraphicFromImageGeometry as lt}from"./support/dataCaptureUtils.js";import{removeZFromGeometry as ct,imageSpaceToPoint as dt}from"./support/geometryUtils.js";import ut from"./support/resolveMediaProps.js";import{isValidDataCaptureLayer as ht}from"./support/typeUtils.js";const pt=()=>new n("orientedimageryviewer:sketch-not-initialized","Sketch property is not initialized, call loadSketch first");let mt=class extends(l(g)){constructor(e){super(e),this.additionalFeatures=new s,this.additionalCameraLocations=new s,this.additionalFootprints=new s,this.areaMeasurementResult=0,this.areaMeasurementAccuracy=0,this.bestFeatureAngle=0,this.bestFeatureCurrentFootprint=null,this.bestFeatureFootprint=null,this.cameraHeadingThreshold=ge,this.cameraPitchThreshold=ge,this.clickAction="hittest",this.correctedLocationPointOnImage=null,this.videoViewModel=null,this.collectionId=null,this.coverageFrustums=new s,this.coveragePolygons=new s,this.currentBestFeature=null,this.currentBestFeatureMeasurementImage=null,this.currentBestFeatureLocation=null,this.currentCoverageVisible=!0,this.depthImage=null,this.featureCache=[],this.navigationNodes=new s,this.determineWorkflowForFeature=async(e,t,i)=>{const{currentBestFeature:r,selectedPoint:a}=this;if(this.emit("popup-close"),r&&a){this.displayMessage=null,this._initialCurrentCoverageUpdate=!0,this._updateGroundElevation=!0;try{await this._updatePointsAndPolygons(i),await this._loadDepthImage(i),await this._loadCurrentFeatureMedia(r,i)}catch(s){v(s)||(this.loadImageError(s),u.getLogger(this).error("#loadIImage()","error occured while loading image",s))}}},this.determineWorkflowForTriangularMeasurement=async(e,t,i)=>{if(this.emit("popup-close"),this.currentBestFeatureMeasurementImage&&this.selectedPoint)try{await this._loadMeasurementViewerImage(i)}catch(r){v(r)||(this.loadImageError(r),u.getLogger(this).error("#loadIImage()","error occured while loading image",r))}},this.disabled=!1,this.displayMessage={key:"onLoadMessage",type:"info"},this.displayNewMeasurementButton=!0,this.distanceMeasurementResult=0,this.distanceAccuracyArray=[],this.dataCaptureLayer=null,this.features=new s,this.groundCoordinates=null,this.groundCoordinatesAccuracy=null,this.heightGraphic=null,this.heightMeasurementResult=0,this.heightMeasurementAccuracy=0,this.imageGeometryField=null,this.imageLocationToolState=!1,this.initialVideoMapViewExtent=null,this.imageMeasurementViewer=new Ye,this.isAdditionalCoverageVisible=!1,this.isAdditionalPointSourcesVisible=!1,this.layer=null,this.localPort=null,this.locationPointOnImage=null,this.mapImageConversionToolState=!1,this.measureType=null,this.measurementGraphic=null,this.navigatorCurrentBestFeature=null,this.oiObjectIdField=null,this.overlayedCameraLocations=new s,this.overlayedMapFeatures=new w,this.pixelCoordinates=null,this.preserveAngle="none",this.pointSources=new s,this.preloadMedia=!1,this.preloadMediaSize=5,this.previousFeatureAngle=0,this.selectedPoint=null,this.shouldShowSelectedImage=!1,this.superimposeViewEnabled=!1,this.defaultSuperimposeCameraLockEnabled=!0,this.sketch=null,this.sketchTriangular=null,this.sketchTriangularGraphicsLayer=null,this.draw=null,this.drawAdapter=null,this.polylineDrawAction=null,this.scheduledFrameId=null,this.superimposeScheduledFrameId=null,this.superimposeDebounceTimeoutId=null,this.sketchAdapter=null,this.triangularMeasurementActive=!1,this.triangulatedDistanceMeasurement=null,this.triangulatedDistanceAccuracy=null,this.triangulatedAreaMeasurement=null,this.triangulatedAreaAccuracy=0,this.triangulatedMeasurementGraphic=null,this.triangulatedPoint=null,this.triangulatedMeasurementAdapter=null,this.updateFootprint=async(e,t,i)=>{"default"===this.mode&&"image-loaded"!==this.state||await(this._adapter?.updateFootprint(e,t,i))},this.updateVideoFootprint=async e=>{this.mode.includes("video")&&this.videoElement?.content&&await(this._adapter?.updateVideoFootprint(e))},this.updateFootprintPanorama=async(e,t)=>{await(this._adapter?.updateFootprintPanorama(e,t))},this.updatingTriangularMeasurementState=!1,this.videoElement=null,this.videoLayer=null,this.videoMapView=new ce({map:new Map,constraints:ve}),this.verticalFilterEnabled=!1,this._adapter=null,this._highlightedFeatureHandle=null,this._imageViewer=new Ye,this._initialCurrentCoverageUpdate=!0,this._locationViewModel=null,this._measurementService=null,this._mediaPrefetcher=null,this._navigationManager=null,this._overlays=new D({listMode:"hide",internal:!0,elevationInfo:{mode:"absolute-height"},title:"OrentedImageryViewerViewModel overlays layer"}),this._superimposePreviousCurrentCoverageVisible=null,this._superimposeService=new st({getMapPoint:(e,t)=>this.getMapPoint(e,t),getPanoramicTransformationState:()=>{const{imageToWorldProperties:e,mode:t,updateElevationProps:i}=this._transformationService;return"panoramic"===t&&e?{imageToWorldProperties:e,updateElevationProps:i}:null},pointToPixel:(e,t)=>this._transformationService.pointToPixel(e,t),overlays:this._overlays}),this._panoramicVideoViewer=new pe,this._panoramicViewer=new me,this._panoramicMeasurementViewer=new me,this._referencePointOnGround=null,this._referencePointOnImage=null,this._referenceTransformationService=null,this._sectorData=null,this._transformationService=null,this._featureToSector=null,this._updatingHandles=new T,this._clickTask=null,this._crossSymbol=null,this.footprintExtent=null,this._featureChangedTask=null,this._mediaPrefetchTask=null,this._restoreSuperimposeMediaTask=null,this._superimposeScheduleController=null,this._suitabilities=null,this._transformController=new AbortController,this._updateFootprintTask=null,this._updateGroundElevation=!1,this.addUpdatingPromise=e=>this._updatingHandles.addPromise(e),this.filterCapturedFeatures=e=>{const t=this.currentBestFeature?.attributes.objectId,i=this.layer?.imageReferenceField;if(!t||!e||!i)return;const r=this.overlayedMapFeatures.get(e);r?.forEach(e=>{const r=e.attributes??{},a=Object.keys(r).find(e=>e.toLowerCase()===i.toLowerCase());(a?r[a]:null)!==t&&(e.visible=!e.visible)})},this.hideImageGeometry=e=>{},this.highlight=e=>{if(!this._overlaysView)return;this.removeHighlight();const t=this.additionalFootprints.find(({attributes:{imageID:t}})=>t===Number(e));this._highlightedFeatureHandle=t?this._overlaysView?.highlight(t):null},this.loadDataCaptureAdapter=async e=>{await this.loadSketch(e);const t=import("./adapters/sketch/DataCaptureAdapter.js"),{default:i}=await t;return y(e),this.sketchAdapter=new i({viewModel:this}),this.sketchAdapter},this.loadImageFromFeature=(e,t,i)=>this._updatingHandles.addPromise(this._loadImageFromFeature(e,t,i)),this.storeImageMeasurementViewer=e=>{this.imageMeasurementViewer=e},this.storePanoramicMeasurementViewer=e=>{this._panoramicMeasurementViewer=e},this.loadImageViewer=e=>{this._imageViewer?.destroy(),this._imageViewer=e},this.loadPanoramicViewer=e=>{this._panoramicViewer?.destroy(),this._panoramicViewer=e},this.loadPanoramicVideoViewer=e=>{this._panoramicVideoViewer?.destroy(),this._panoramicVideoViewer=e},this.loadVideoViewer=e=>{this.videoMapView.container=e},this.showImageByObjectId=async(e,t)=>{const i=this.additionalFeatures.find(({attributes:t})=>t.objectId===e);if(i)this.currentBestFeature=i;else{const{layer:i,layerFloorFilterClause:a,layerTimeExtent:s}=this;if(!i)return void this.setMessage("noLayerSelected","info");this.beforeLoad();const o=this._updatingHandles.addPromise(this._queryAndLoadByObjectId(i,e,a,s,t));try{await o,await this.selectBestFeature(e,t)}catch(r){v(r)||(u.getLogger(this).error("oriented-imagery-viewer:show-image",r),"NoFeatureFoundWithObjectIdError"===r.name?this.setMessage("noFeatureFoundWithObjectId","error","",{objectId:e}):this.setMessage("imageLoadError","error",r.message))}}},this.getSectorFeatureById=e=>this._suitabilities?.find(({feature:{attributes:{objectId:t}}})=>t===e),this.getFeatureSectorById=e=>this._featureToSector?.[`${e}`],this.navigate=async(e,t)=>{const{mode:i}=this;if("default"!==i&&"panoramic"!==i)throw new n("NavigationError","Navigation is only supported in 'default' and 'panoramic' modes.");const r=e=>"default"===i&&e.declaredClass.endsWith("NavigationManager")||"panoramic"===i&&e.declaredClass.endsWith("NavigationManagerPanoramic");if(null==this._navigationManager||!r(this._navigationManager)){p(this._navigationManager);const e="default"===i?import("./navigation/NavigationManager.js"):import("./navigation/NavigationManagerPanoramic.js");this._navigationManager=new(await e).default({viewModel:this})}return this._navigationManager.navigate(e,t)},this.removeHighlight=()=>this._highlightedFeatureHandle?.remove(),this.revealImageGeometry=e=>{},this.selectBestFeature=async(e,t)=>(y(t),this.currentBestFeature=this.features?.find(({attributes:t})=>`${t.objectId}`==`${e}`),_(()=>{switch(this.mode){case"video":return"video-loaded"===this.state;case"panoramic-video":return this.panoramicVideoLoaded;default:return"image-loaded"===this.state}},t)),this.toggleImageAttributes=()=>{const{currentBestFeature:e,popupEnabled:i,layer:r,view:a}=this;if(this.emit("popup-close"),!(a&&e&&i&&r))return;const{attributes:s,geometry:o}=e,n=new t({geometry:o,attributes:s.toJSON(),origin:r.graphicOrigin,sourceLayer:r});this.emit("popup-open",{features:[n],location:s.location.clone()})},this.updateSuitabilities=(e,t=!0)=>{e.sort((e,t)=>e.suitability-t.suitability),this._suitabilities=e;const i=this._suitabilities.map(({feature:e})=>e);this._initialCurrentCoverageUpdate=!0,this._updateFeatures(i,t),this._groupFeaturesBySectors()},this._computeOverlayImageSize=()=>{const{mode:e}=this;return"video"===e?ye:"panoramic-video"===e?this._panoramicVideoViewer.imageSize:this.activeViewer?.imageSize},this._geometryToOverlayImageGeometry=async(e,t,i)=>{const{mode:r,videoViewModel:a,_panoramicVideoViewer:s}=this;if("video"===r)return await(a?.geometryToOverlayGeometry(e,t))??null;if("panoramic-video"===r){const a={feature:t,mode:r,imageSize:i,footprintExtent:this.footprintExtent};return await this._transformationService.geometryToImageGeometryForFeature(e,a,s.horizonAngles)}return await this._transformationService.geometryToImageGeometry(e)},this._createViewClickHandle=()=>{if(this.removeHandles(Re.click),this.disabled||null==this.view)return;const e=this.mapImageConversionToolState&&("image-loaded"===this.state||"video-loaded"===this.state&&"video"===this.mode&&!!this.videoViewModel?.videoPaused||this.panoramicVideoLoaded&&"panoramic-video"===this.mode&&this.panoramicVideoPaused)?this._mapImageConversionToolViewClickHandler:this._viewClickHandler;this.addHandles(this.view.on("click",e,he.DEFAULT),Re.click)},this._createImageClickHandle=()=>{this.removeHandles(Re.imageClick),this.videoViewModel?.syncMapImageConversionHandle();const{mapImageConversionToolState:e,mode:t,footprintExtent:i,panoramicVideoLoaded:r}=this,s="panoramic-video"===t?this._panoramicVideoViewer:this.activeViewer,o=s?.imageSize;if(!e||"none"===t||"video"===t||!o||!i)return;const n="panoramic-video"===t,l=this._getActiveFeatureForCurrentMode(),d=!n||r&&this.panoramicVideoPaused;if(!l||!d)return;const u=s.clickAction;this.clickAction="pixel-location";const h=c(()=>{this.clickAction=u});let p=null;const m=F(()=>s,"pixel-location",e=>{this.plotReferencePointOnImage(e),p?.abort(),p=a(async r=>{if(!e)return;const a=this._getActiveFeatureForCurrentMode();if(!a)return;const s={feature:a,mode:t,imageSize:o,footprintExtent:i};let l=n?await this.getMapPointForFeature(e,s,{signal:r}):await this._transformationService.pixelToMapPoint(e);const c=this.view?.spatialReference;l&&!ee(!c,l.spatialReference.equals(c))&&(l=await G(l,c,{signal:r})),y(r),this.plotReferencePointOnGround(l)})});this.addHandles([m,h],Re.imageClick)},this._createTriangularImageClickHandle=()=>{this.removeHandles(Re.triangularImageClick),this.triangularMeasurementActive&&"none"!==this.mode&&this.currentBestFeature&&this.currentBestFeatureMeasurementImage&&this.activeTriangulatedViewer&&this.addHandles(this.activeTriangulatedViewer.imageRenderer.on("double-click",this._measurementImageClickHandler),Re.triangularImageClick)},this._enablePan=()=>{this.removeHandles(Re.videoPanHandles)},this._disablePan=()=>{this.removeHandles(Re.videoPanHandles),this.addHandles(Ke(this.videoMapView),Re.videoPanHandles)},this._handleImageHitTestResponse=async e=>{const{layer:t,overlayedCameraLocations:i}=this;if(!t)return;const r=e.results.find(({graphic:e,graphic:{attributes:r}})=>i.includes(e)&&r&&!r[t.imageReferenceField]&&!r[t.imageGeometryField]);if(!r)return;const a=r.graphic.attributes[t.objectIdField];await this.showImageByObjectId(a)},this._loadCurrentFeatureMedia=async(e,t)=>{if("video"===this.mode)return this._initializeVideo(),void this.videoViewModel?.playVideoFromSelectedLocation(e);"panoramic-video"!==this.mode?await this._loadImage(t):await this._loadVideo(t)},this._loadDepthImage=async e=>{const{currentBestFeature:t,layer:i,depthImageNotSupported:r}=this;if(this.depthImage?.destroy(),this.depthImage=null,!i||!t||r)return;const{depthImage:a}=t.attributes;if(!a)return;const s=(await import("./services/DepthImageService.js")).default;y(e),this.depthImage=new s({url:a});try{await this.depthImage.load(e)}catch(o){v(o)||(u.getLogger(this).error("error occurred while loading depth image",o),this.depthImage?.destroy(),this.depthImage=null)}},this._loadImage=async e=>{const{currentBestFeature:t,layer:i,mode:r}=this;if(this.clearGraphics(),i&&t&&"none"!==r&&"video"!==r&&"panoramic-video"!==r)try{await this.loadImageFromFeature(i,t,e),y(e),await this.transformAndPlotSelectedLocation(e)}catch(a){v(a)||this.loadImageError(a)}},this._loadVideo=async e=>{const{currentBestFeature:t,mode:i,selectedPoint:r}=this,a=t?.attributes.imagePath;if(!t||"panoramic-video"!==i||!a)return;const{attributes:s}=t,{cameraPitch:o,cameraOrientation:n,location:l}=s,c=l.spatialReference.isWGS84&&4!==n?.type?B(l):new L(l);try{this._panoramicVideoViewer.viewModel.video&&(this._panoramicVideoViewer.viewModel.video.pause(),this._panoramicVideoViewer.viewModel.videoPaused=!0),this._panoramicVideoViewer.videoSource=a;let t=0;c&&r&&(t=await te(c,r)-t),this._panoramicVideoViewer.pitch=o??0,this._panoramicVideoViewer.yaw=t,await this._panoramicVideoViewer.loadVideo(e),y(e)}catch(d){v(d)||this.loadImageError(d)}},this._loadImageFromFeature=async(e,t,i)=>{const{mode:r}=this;if("default"!==r&&"panoramic"!==r)return;let a;try{a=await ut(t.attributes,e,i),y(i)}catch(f){if(v(f))return;return xe(f)?(u.getLogger(this).error(f),void this.setMessage("noAttachment","error",`${e.objectIdField}: ${t.attributes.objectId}`)):(u.getLogger(this).error(f,{[e.objectIdField]:t.attributes.objectId,layer:e}),void this.setMessage("imageLoadError","error",`query-attachments-failed:${e.objectIdField} ${t.attributes.objectId}`))}if(!a)return;const{mediaUrl:s,datasetFormat:o,rotation:n,searchParams:l,location:c,cameraHeading:d,matrix:h,cameraPitch:p,getDataSetFormatError:m}=a,g=`${t.attributes.objectId}`;try{let a=this._mediaPrefetcher?.getCachedMedia(g);if(!a){const i=this.navigationNodes.find(e=>e.id===t.attributes.objectId);if(i){try{await(this._mediaPrefetcher?.startPrefetchForNode(i,e))}catch(w){}a=this._mediaPrefetcher?.getCachedMedia(g)}}if(a){if("panoramic"===r){const e=this.triangularMeasurementActive?this._panoramicMeasurementViewer:this._panoramicViewer;let r=0;return c&&this.selectedPoint&&(r=await te(c,this.selectedPoint)-r),await e.loadMedia(a,i),this.selectedPoint?e.set({yaw:r,pitch:p}):"viewAngle"in t.attributes&&Number.isFinite(t.attributes.viewAngle)&&e.set({yaw:t.attributes.viewAngle,pitch:p}),void(this.triangularMeasurementActive?await this.initializeReferenceTransformationService(i):await this.initializeTransformationService(i))}return await this._setImageSource(this.triangularMeasurementActive?this.imageMeasurementViewer:this._imageViewer,a,i),void(this.triangularMeasurementActive?await this.initializeReferenceTransformationService(i):await this.initializeTransformationService(i))}}catch(w){}m&&u.getLogger(this).warn("error occurred while getting dataset format",m),"panoramic"===r?await this.loadPanoramicMediaSource({lookAt:{yaw:this.selectedPoint?await te(c,this.selectedPoint):"viewAngle"in t.attributes&&Number.isFinite(t.attributes.viewAngle)?t.attributes.viewAngle:0,pitch:p},extension:o?.toUpperCase(),url:s,cameraHeading:d,matrix:h},i):await this.loadMediaSource({datasetFormat:o?.toUpperCase(),url:s,customParameters:l,rotation:n},i),this.triangularMeasurementActive?await this.initializeReferenceTransformationService(i):await this.initializeTransformationService(i)},this._loadMeasurementViewerImage=async e=>{const{currentBestFeatureMeasurementImage:t,layer:i,mode:r}=this;if(this.imageMeasurementViewer.clearGraphics(),this._panoramicMeasurementViewer.clearGraphics(),i&&t&&"none"!==r&&"video"!==r&&"panoramic-video"!==r)try{await this.loadImageFromFeature(i,t,e),y(e)}catch(a){v(a)||this.loadImageError(a)}},this._loadMediaPrefetcher=async e=>{if(!this._mediaPrefetcher){const{default:t}=await import("./support/MediaPrefetcher.js");y(e),this._mediaPrefetcher=new t({maxEntries:this.preloadMediaSize*fe.length})}return this._mediaPrefetcher},this._loadViewAdapter=async e=>{const{view:t}=this;if(this._adapter?.disableDefaultSuperimposeNavigation?.(),this._adapter?.disablePanoramicSuperimposeNavigation?.(),t)switch(t.type){case"2d":{const{default:t}=await import("./adapters/view/MapViewAdapter.js");y(e),this._adapter=new t(this);break}case"3d":{const{default:t}=await import("./adapters/view/SceneViewAdapter.js");y(e),this._adapter=new t(this);break}}else this._adapter=null},this._mapImageConversionToolViewClickHandler=e=>{if(e.stopPropagation(),e.preventDefault(),e.mapPoint){const t=e.mapPoint;t.x=x(t.x,t.spatialReference),this.plotMapPoint(e.mapPoint)}},this._measurementImageClickHandler=e=>{e.stopPropagation(),e.preventDefault();const{sketchTriangular:t,triangularMeasurementActive:i,currentBestFeatureMeasurementImage:r,triangulatedMeasurementGraphic:a}=this;t&&i&&r&&a&&"active"!==t.state&&(t.update([a],{tool:"reshape"}),this.updatingTriangularMeasurementState=!0)},this._updateInteraction=()=>{const e=this.videoMapView.extent;if(!e)return;const{minScale:t}=this.videoMapView.constraints,i=this.videoMapView.scale<t-we,r=Qe(e);i&&!!r?(this._enablePan(),this.videoMapView.constraints.geometry=r):i?(this._disablePan(),this.videoMapView.constraints.geometry=null):(this.initialVideoMapViewExtent&&!this.videoMapView.extent.equals(this.initialVideoMapViewExtent)&&(this.videoMapView.extent=this.initialVideoMapViewExtent),this._disablePan(),this.videoMapView.constraints.geometry=null)},this._viewClickHandler=e=>{this._clickTask?.abort(),this._clickTask=a(async t=>{const{pointerType:i,button:r,mapPoint:a}=e;if("mouse"===i&&0!==r||!a)return;e.stopPropagation(),e.preventDefault();const{view:s,layer:o}=this;if(s){if(o){if(this.shouldShowSelectedImage){const i=s.hitTest(e,{include:[o]});this._updatingHandles.addPromise(i);const r=await i;return y(t),await this._processHitTestResults(o,r,{signal:t})}return this._updatingHandles.addPromise(this.loadBestImage(a,{signal:t}))}this.setMessage("noLayerSelected","info")}})},this.plotSelectedPointOnImage=async(e,i)=>{if(await f(i),!e)return;const r=new L({...k(e)?e.toJSON():e});if("default"===this.mode)r.x-=.5,r.y=.5-r.y,r.spatialReference=this._imageViewer.imageRenderer.spatialReference.clone(),this._crossSymbol=new t({geometry:r,symbol:Ie}),this._imageViewer.addGraphic(this._crossSymbol,0);else if("panoramic"===this.mode){const{imageSize:i,media:r}=this._panoramicViewer;if(!i||!r)return;const a=Be(r),s=ie(e,...i,a);this._crossSymbol=new t({geometry:new L(s,E.WebMercator),symbol:Pe}),this._panoramicViewer.addGraphic(this._crossSymbol,0)}},this.handleSectorClick=this.handleSectorClick.bind(this),this.searchBestImage=this.searchBestImage.bind(this),this.transformAndPlotReferencePointOnImage=this.transformAndPlotReferencePointOnImage.bind(this)}initialize(){this.addHandles([b(()=>this.view,()=>this.load(),M),b(()=>this.view?.map,(e,t)=>{t?.layers.remove(this._overlays),e?.layers.add(this._overlays)},V),b(()=>this.view?.map?.allLayers?.length,e=>{e&&this.view?.map?.layers.reorder(this._overlays,e-1)},V),b(()=>[this.state,this.panoramicVideoLoaded,this.mapImageConversionToolState,this.view,this.disabled,this.panoramicVideoPaused,this.videoViewModel?.videoPaused],(e,t)=>{const i=e[2],r=t?.[2];r&&!i&&(this.plotReferencePointOnGround(null),this.clearReferencePointOnImage()),this._createViewClickHandle(),this._createImageClickHandle()},M),b(()=>[this.triangularMeasurementActive,this.currentBestFeatureMeasurementImage],()=>{this._createTriangularImageClickHandle()},M),b(()=>[this.state,this.imageLocationToolState,this.view],()=>{this._initializeMeasurementService(),this._initializeLocationViewModel()},M),b(()=>this.measureType,()=>{this.clearPreviousMeasurements(),this._initializeMeasurementService()},M),b(()=>this.bestFeatureAngle,(e,t)=>{this.previousFeatureAngle=t??0},M),b(()=>[this.superimposeViewEnabled,this.defaultSuperimposeCameraLockEnabled,this.superimposeViewSupported,this.currentBestFeature,this.mode,this.state,this.view?.type],()=>{this._shouldDisableUnsupportedSuperimposeView()?this.superimposeViewEnabled=!1:this._hasActiveSuperimposeCameraContext()?this._updateSuperimposedImage():this._resetInactiveSuperimposeState()},M),b(()=>this._getSuperimposeCameraWatchState(),()=>this._handleSuperimposeCameraChange(),M),b(()=>this.currentBestFeature,async(e,t)=>{m(this._featureChangedTask),this._featureChangedTask=a(async i=>this.determineWorkflowForFeature.apply(this,[e,t,{signal:i}])),await this._featureChangedTask.promise},{sync:!0}),b(()=>[this.currentNode,this.preloadMedia,this.navigationMode],()=>{this._mediaPrefetchTask?.abort(),this._mediaPrefetchTask=a(async e=>{this.preloadMedia&&null!=this.navigationMode?(this._mediaPrefetcher??=await this._loadMediaPrefetcher({signal:e}),y(e),"directional"===this.navigationMode?this._mediaPrefetcher.enqueueDirectionalPrefetch(this.layer,this.currentNode,this.preloadMediaSize):this._mediaPrefetcher.enqueueSequentialPrefetch(this.layer,this.currentNode,this.preloadMediaSize)):this._mediaPrefetcher?.clear()})},M),b(()=>this.currentBestFeatureMeasurementImage,(e,t)=>{m(this._featureChangedTask),t&&e!==t&&(this.triangulatedPoint=null,this.sketchTriangularGraphicsLayer?.graphics.destroyAll(),this._measurementService?.resetMeasurementVectors()),this._featureChangedTask=a(async i=>{await this.determineWorkflowForTriangularMeasurement(e,t,{signal:i}),y(i),this._reorderTriangularSketchLayer()})},M),b(()=>this.triangularMeasurementActive,(e,t)=>{t&&!e&&(this._measurementService?.resetMeasurementVectors(),this.currentBestFeatureMeasurementImage=null,this.triangulatedDistanceMeasurement=null,this.triangulatedMeasurementGraphic=null,this.triangulatedPoint=null,this.updatingTriangularMeasurementState=!1,this.triangulatedAreaMeasurement=null,this.triangulatedDistanceAccuracy=null,this.triangulatedAreaAccuracy=0,this.sketchTriangularGraphicsLayer?.graphics.destroyAll(),this.clearReferencePointOnImage(),this.imageMeasurementViewer.clearImage(),this.imageMeasurementViewer.clearGraphics(),this._panoramicMeasurementViewer.clearImage(),this._panoramicMeasurementViewer.clearGraphics())}),b(()=>this.mode,e=>{switch(this.removeHandles(Re.interactionHandles),e){case"default":this.addHandles(b(()=>{const{state:e}=this;return"image-loaded"===e?this._imageViewer.imagePointsInView:null},e=>{e&&(m(this._updateFootprintTask),this._updateFootprintTask=a(async t=>{await this.updateFootprint(e,void 0,{signal:t})}))},{...M,equals:(e,t)=>i(e,t,d)}),Re.interactionHandles);break;case"video":this.addHandles(b(()=>{const{footprintExtent:e,videoElement:t,bestFeatureFootprint:i}=this;if(e&&t?.loaded&&i)return{videoExtent:_e,bestFeatureFootprint:i}},e=>{e?.videoExtent&&e?.bestFeatureFootprint&&(m(this._updateFootprintTask),this._updateFootprintTask=a(async t=>{const i={points:e.videoExtent,feature:void 0,scale:void 0,options:{signal:t}};await this.updateVideoFootprint(i)}))},{...M,equals:(e,t)=>i(e?.videoExtent,t?.videoExtent,d)&&e?.bestFeatureFootprint===t?.bestFeatureFootprint}),Re.interactionHandles);break;case"panoramic":this.addHandles(b(()=>{const{currentBestFeature:e,state:t,_panoramicViewer:i}=this,{imageSize:r,vfov:a,hfov:s,pitch:o,yaw:n}=i;return e&&r&&!t.includes("loading")&&null!=a&&null!=s&&null!=o&&null!=n?[a,s,n,o]:null},e=>{if(!e||this.state.includes("loading"))return;const[t,i,r,s]=e;this.currentNode&&(this.currentNode.currentHeading=r,this.currentNode.currentPitch=s),m(this._updateFootprintTask),this._updateFootprintTask=a(async e=>{await this.updateFootprintPanorama({verticalFieldOfView:t,horizontalFieldOfView:i,yaw:r,pitch:s},{signal:e}),this._updateFootprintTask=null})},{equals:(e,t)=>i(e,t,d)}),Re.interactionHandles);break;case"panoramic-video":this.addHandles(b(()=>{const{currentBestFeature:e,state:t,_panoramicVideoViewer:i}=this,{imageSize:r,vfov:a,hfov:s,pitch:o,yaw:n,viewModel:l}=i,c=l.closestFeature??e;return c&&r&&!t.includes("loading")&&null!=a&&null!=s&&null!=o&&null!=n?[a,s,n,o,c]:null},e=>{if(!e)return;const[t,i,r,s,o]=e;m(this._updateFootprintTask),this._updateFootprintTask=a(async e=>{await this.updateFootprintPanorama({verticalFieldOfView:t,horizontalFieldOfView:i,yaw:r,pitch:s,feature:o,horizonAngles:this._panoramicVideoViewer.horizonAngles},{signal:e}),y(e),this._updateFootprintTask=null})},{equals:(e,t)=>i(e,t,d)}),Re.interactionHandles)}},M),b(()=>[this.brightness,this.contrast,this.sharpness],()=>{const{_imageViewer:e,brightness:t,contrast:i,mode:r,sharpness:a}=this;"default"===r&&(e.brightness=t,e.contrast=i,e.sharpness=a)},M),b(()=>this.activeViewer?.imageRenderer,()=>{this.sketch&&(this.sketch.view=this.activeViewer?.imageRenderer)}),b(()=>this.activeViewer,e=>{this.removeHandles(Re.hittestHandles),e&&this.addHandles(F(()=>e,"hittest-response",this._handleImageHitTestResponse),Re.hittestHandles)}),b(()=>this.videoMapView.extent,async()=>{this._scheduleVideoInteractionUpdate();const e=this.videoViewModel?.closestFeature;e&&(m(this._updateFootprintTask),this._updateFootprintTask=a(async t=>{const i={points:this.videoExtentPoints,feature:e,options:{signal:t}};await this.updateVideoFootprint(i)}))}),b(()=>[this.videoMapView.interacting,this.videoMapView.navigating,this.videoMapView.scale],()=>{this._scheduleVideoInteractionUpdate()},{initial:!0}),S(()=>null!=this.videoMapView.extent,()=>{this.initialVideoMapViewExtent=this.videoMapView.extent},{once:!0})]),this.when().finally(()=>{this.notifyChange("state")})}destroy(){this._adapter?.disableDefaultSuperimposeNavigation?.(),this._adapter?.disablePanoramicSuperimposeNavigation?.(),this._abortSuperimposeSchedule(),this.currentBestFeature=null,this._updateFootprintTask=m(this._updateFootprintTask),this._clickTask=m(this._clickTask),this._restoreSuperimposeMediaTask=m(this._restoreSuperimposeMediaTask),this.coverageFrustums.destroy(),this.coveragePolygons.destroy(),this.pointSources.destroy(),this.additionalFootprints.destroy(),this.additionalCameraLocations.destroy(),this.bestFeatureFootprint=p(this.bestFeatureFootprint),this.bestFeatureCurrentFootprint=p(this.bestFeatureCurrentFootprint),this.videoViewModel=p(this.videoViewModel),this._locationViewModel=p(this._locationViewModel),this._crossSymbol=p(this._crossSymbol),this._referencePointOnGround=p(this._referencePointOnGround),this.clearReferencePointOnImage(),this._superimposeService.destroy(),this._overlays&&this.view?.map?.remove(this._overlays),this._overlays.destroy(),this._imageViewer.destroy(),this.imageMeasurementViewer.destroy(),this._panoramicViewer.destroy(),this._panoramicMeasurementViewer.destroy(),this._mediaPrefetcher?.destroy()}get activeLayer(){return o(u.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer}set activeLayer(e){o(u.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer=e}get activeViewer(){const{_imageViewer:e,_panoramicViewer:t,mode:i}=this;switch(i){case"default":return e;case"panoramic":return t;default:return null}}get activeTriangulatedViewer(){switch(this.mode){case"default":return this.imageMeasurementViewer;case"panoramic":return this._panoramicMeasurementViewer;default:return null}}get accuracyParametersMissing(){return this.layer?.orientationAccuracy?.every(e=>0===e)??!0}get brightness(){return this._get("brightness")??0}set brightness(e){this._set("brightness",h(e,-10,10))}get contrast(){return this._get("contrast")??0}set contrast(e){this._set("contrast",h(e,-10,10))}get currentNode(){const{currentBestFeature:e,navigationNodes:t}=this;return t.find(t=>t.id===e?.attributes.objectId)}get depthImageNotSupported(){if(this.currentBestFeature?.attributes.depthImage)return!De(this.currentBestFeature.attributes.depthImage)}get featureCount(){return this.features?.length??0}get imageGalleryEnabled(){const{currentBestFeature:e}=this;if(!e)return!1;const t=e.attributes.imagePath?.trim();return De(t)||Se(t)}get imageLoaded(){return o(u.getLogger(this),"imageLoaded",{replacement:'Use OrientedImageryViewer.state === "image-loaded"',version:"4.29",warnOnce:!0}),"image-loaded"===this.state}get invalidCameraHeading(){return this.currentBestFeature?.attributes?.cameraHeading===Fe}get imagePointsInView(){const{mode:e,_imageViewer:t}=this;return"default"===e?t.imagePointsInView:null}get layerView(){const{layer:e,view:t}=this;if(e&&t)return t.allLayerViews.find(He(e))}get layerFloorFilterClause(){const{layerView:e}=this;return e?ne(e):null}get layerTimeExtent(){return this.layerView?.timeExtent??null}get mode(){const e=this.currentBestFeature?.attributes;if(!e)return"none";const t=e.orientedImageryType;if(t?.includes("video"))return t.includes("360")?"panoramic-video":"video";const{horizontalFieldOfView:i,isSpherical:r}=e;return 360===i||r?"panoramic":"default"}get panoramicVideoLoaded(){const{mode:e,_panoramicVideoViewer:t}=this,{videoLoaded:i}=t.viewModel;return("panoramic-video"===e&&!0===i)??!1}get overlayGraphicsEnabled(){const{mode:e,state:t,panoramicVideoLoaded:i,videoViewModel:r,panoramicVideoPaused:a}=this;return"image-loaded"===t||"video"===e&&"video-loaded"===t&&!0===r?.videoPaused||"panoramic-video"===e&&i&&a}get panoramicVideoPaused(){return!!this._panoramicVideoViewer.viewModel.videoPaused}get popupEnabled(){return!0===this.layer?.popupEnabled}get referencePoint(){return this._referencePointOnGround?.geometry}get sectorData(){const{_sectorData:e}=this;return e?be.map(t=>e[t]):null}get sharpness(){return this._get("sharpness")??0}set sharpness(e){this._set("sharpness",h(e,0,1))}get superimposeViewSupported(){return"default"===this.mode||"panoramic"===this.mode}get sketchGraphicsLayer(){const{sketch:e}=this;return"graphics"===e?.layer?.type?e.layer:void 0}get state(){const{mode:e,_updatingHandles:{updating:t},_featureChangedTask:i,_navigationManager:r}=this;if(!this.isFulfilled()||t||!1===i?.finished||r?.navigating)return"loading";if(this.isRejected())return"error";if("error"===this.displayMessage?.type)return"image-load-error";switch(e){case"default":return this._imageViewer.state;case"panoramic":return this._panoramicViewer.state;case"video":return this.videoElement?.loaded?"video-loaded":"video-not-loaded"}return"ready"}get thumbnails(){const{features:e}=this;return e?new s(e.map(({attributes:{imagePath:e,objectId:t,cameraRoll:i,imageRotation:r}})=>{const a=e?.trim();return De(a)||Se(a)?{url:a,objectId:t,rotation:(i??0)+(r??0)}:null}).filter(r)):null}get videoExtentPoints(){const e=Xe(this.videoMapView.extent);return e.length?e:_e}set view(e){this._set("view",e)}get _defaultGraphicsLayer(){const e={blendMode:"source-atop"};switch(this.mode){case"panoramic":return new D({...e,elevationInfo:{mode:"absolute-height"}});case"default":return new D({...e});default:return}}get _overlaysView(){return this.view?.layerViews.find(({layer:e})=>e===this._overlays)}updateSuperimposeZOffset(e){this._superimposeService.updateZOffset(e)}setDefaultSuperimposeZOffsetPercentage(e){this._superimposeService.setDefaultZOffsetPercentage(e)}setPanoramicSuperimposeRadiusPercentage(e){this._superimposeService.setPanoramicRadiusPercentage(e)}updateDefaultSuperimposeCameraLock(e){this.defaultSuperimposeCameraLockEnabled=e,this.superimposeViewEnabled&&"default"===this.mode&&(e?this._adapter?.enableDefaultSuperimposeNavigation?.():this._adapter?.disableDefaultSuperimposeNavigation?.())}beforeLoad(e=!0){this.emit("popup-close"),e&&(this.displayMessage=null),this._abortSuperimposeSchedule(),this._adapter?.disableDefaultSuperimposeNavigation?.(),this._adapter?.disablePanoramicSuperimposeNavigation?.(),this.clearPreviousGroundLocation(),this.triangularMeasurementActive=!1,this.currentBestFeatureMeasurementImage=null,this.measureType=null,this.imageLocationToolState=!1,this.features.removeAll(),this.currentBestFeature=null,this.additionalFeatures.removeAll(),this.additionalFootprints.removeAll(),this.additionalCameraLocations.removeAll(),this.bestFeatureCurrentFootprint=p(this.bestFeatureCurrentFootprint),this._restoreSuperimposeMediaTask=m(this._restoreSuperimposeMediaTask),this._superimposeService.clear(),this._overlays?.removeAll()}async calculateLocationAccuracy(e){return this._measurementService?.calculateLocationAccuracy(e)}clearLocationPointOnImage(e=!1){this.locationPointOnImage&&!e&&(this._imageViewer.removeGraphic(this.locationPointOnImage),this._panoramicViewer.removeGraphic(this.locationPointOnImage),this.locationPointOnImage=p(this.locationPointOnImage)),this.correctedLocationPointOnImage&&(this.imageMeasurementViewer.removeGraphic(this.correctedLocationPointOnImage),this._panoramicMeasurementViewer.removeGraphic(this.correctedLocationPointOnImage),this.correctedLocationPointOnImage=p(this.correctedLocationPointOnImage))}clearPreviousMeasurements(){this.clearMeasurementGraphics(),this.resetMeasurementData(),this.stopMeasurement()}clearPreviousGroundLocation(){this.groundCoordinates=null,this.groundCoordinatesAccuracy=null,this.pixelCoordinates=null,this.clearLocationPointOnImage()}clearMeasurementGraphics(){this.measurementGraphic&&(this.activeViewer?.removeGraphic(this.measurementGraphic),this.measurementGraphic=null),this.heightGraphic&&(this.activeViewer?.removeGraphic(this.heightGraphic),this.heightGraphic=null),this.triangularMeasurementActive&&this.sketchTriangularGraphicsLayer?.graphics.destroyAll()}digitizeCancel(){return this.sketch?.cancel()}digitizeCanRedo(){return this.sketch?.canRedo()??!1}digitizeCanUndo(){return this.sketch?.canUndo()??!1}digitizeComplete(){return this.sketch?.complete()}async digitizeCreate(e,t){const{sketch:i,dataCaptureLayer:r}=this;if(!i)throw pt();ot(r,e,i),await i.create(e,{...t,defaultZ:0})}digitizeDelete(){if(!this.sketch)throw pt();return this.sketch.delete()}digitizeDuplicate(){if(!this.sketch)throw pt();return this.sketch.duplicate()}digitizePlace(e,t){if(!this.sketch)throw pt();return this.sketch.place(e,t)}digitizeRedo(){if(!this.sketch)throw pt();return this.sketch.redo()}digitizeUndo(){if(!this.sketch)throw pt();return this.sketch.undo()}digitizeUpdate(e,t){if(!this.sketch)throw pt();return this.sketch.update(e,t)}filterByFootprints(e,t,i=!1){const r=[],a=[],s=[];return e.forEach(e=>{const{layer:{coveragePercent:o},attributes:n}=e;let l;const{polygon:c,frustum:d}=q(n);if(l=c.clone(),n.isInspection&&(l=W(n)),o&&(l=$(l,o)),i||!t||Z(l,t)){s.push(e);const{geometry:t,objectId:i,cameraHeight:o,cameraHeading:l}=n,u=t.clone();u.z=o/K(t.spatialReference),u.imageID=i,this.pointSources.push(u),l!==Fe&&(r.push(c),d&&a.push(d))}}),{features:s,polygons:r,frustums:a}}async deleteDataCaptureFeatures(e){const{dataCaptureLayer:t}=this;if(!t)throw new n("orientedimageryviewer:missing-featurelayer","Data capture layer is not available");return t.queryFeatures({objectIds:e,outFields:[t.objectIdField]}).then(({features:e})=>t.applyEdits({deleteFeatures:e}))}handleSectorClick(e){if(isNaN(e))return;const t=this._sectorData?.[be[e]],i=t?.at(0);i&&(this.triangularMeasurementActive&&this.currentBestFeature?this._updateImageMeasurementBestFeature(i):this._updateCurrentBestFeature(i))}handleFeatureClick(e){const{sector:t,featureIndexInSector:i}=e;if(isNaN(i))return;const r=this._sectorData?.[t],a=r?.at(i);a&&(this.triangularMeasurementActive&&this.currentBestFeature?this._updateImageMeasurementBestFeature(a):this._updateCurrentBestFeature(a))}load(e){return this.addResolvingPromise(this._loadViewAdapter(e).catch(e=>{if(!v(e))throw e})),this}async loadBestImage(e,t){return this.selectedPoint=Q(e),this.beforeLoad(),this._fetchFeaturesWithController(e,t)}async loadHeightMeasurementAdapter(e){if(!this.drawAdapter){const t=import("./adapters/draw/HeightMeasurementAdapter.js"),{default:i}=await t;if(y(e),this.drawAdapter=new i({viewModel:this,measurementService:this._measurementService}),!this.drawAdapter.viewModel.isResolved())return}return this.drawAdapter}loadImageError(e){u.getLogger(this).error("oriented-imagery-viewer:load-image",e),this.setMessage("imageLoadError","error",e.message)}async loadSketch(e){if(!this.sketch){const t=import("../Sketch/SketchViewModel.js"),{default:i}=await t;y(e),this.sketch=new i({layer:this._defaultGraphicsLayer,view:this.activeViewer?.imageRenderer,updateOnGraphicClick:!1,defaultUpdateOptions:{reshapeOptions:{edgeOperation:"none",shapeOperation:"none",vertexOperation:void 0},enableMoveAllGraphics:!1,enableRotation:!1,enableScaling:!1,multipleSelectionEnabled:!1,toggleToolOnClick:!1,tool:"transform"}})}return this.sketch}async loadMeasurementAdapter(e){if(!this.sketchAdapter){const t=import("./adapters/sketch/MeasurementAdapter.js"),{default:i}=await t;if(y(e),this.sketchAdapter=new i({viewModel:this,measurementService:this._measurementService}),!this.sketchAdapter.viewModel.isResolved())return}return this.sketchAdapter}async processFeatureResponse(e,t,i){const{features:r}=e;if(this._clearFeatureGeometries(),!this._checkFeatures(r))return;const{features:a,polygons:s,frustums:o}=this.filterByFootprints(r,t,i?.skipFilter);if(!this._checkFeatures(a))return;this.coveragePolygons.addMany(s),this.coverageFrustums.addMany(o);const n=await this.processElevationSample(s,a,i);y(i),await this._updateElevationOfSelectedPointAndLocations(a,t,n),y(i),ze(a,n);let l=a;if(this.layer?.verticalSearchRange&&this.layer.hasZ&&this.verticalFilterEnabled&&(l=Ne(a,t,this.layer.verticalSearchRange),!l.length))return void this.setMessage("noImageAtElevation","info");const c=this._processSuitableFeatures(l,t);this.updateSuitabilities(c,i?.loadBestImage)}async processFeatureElevation(e,t,i){if(!t)return;const{features:r,polygons:a}=this.filterByFootprints(e,t,!0);if(!r?.length)return;const s=await this.processElevationSample(a,r,i);return y(i),s}async startMeasurement(e,t){this.sketch||await this.loadSketch(t),await this.loadMeasurementAdapter(t);const{sketch:i,sketchAdapter:r,activeViewer:a,mode:s}=this;if(!i||!r||!a||"none"===s)return;if(this.displayNewMeasurementButton=!1,"panoramic"===s&&(i.defaultCreateOptions.defaultZ=0),await i.create(e),"panoramic"===s){const{drawOperation:e}=i.view.activeTool;e.constraintsEnabled=!1,e._set("elevationDrawSurface",null)}const o=this.activeViewer?.imageRenderer.effectiveTheme.accentColor;o&&this.sketch&&(this.sketch.polygonSymbol=Ce(o),this.sketch.polylineSymbol="panoramic"===s?Ae:ke(o,2.5))}async startHeightMeasurement(){this.displayNewMeasurementButton=!1,this.draw??=new de({view:this.activeViewer?.imageRenderer}),this.polylineDrawAction=this.draw.create("polyline"),await this.loadHeightMeasurementAdapter()}initializeMeasurement(e){switch(this.clearMeasurementGraphics(),this.resetMeasurementData(),e){case"distance":this.startMeasurement("polyline");break;case"area":this.startMeasurement("polygon");break;case"height":this.startHeightMeasurement()}}async overlayCameraLocations(e){const{activeViewer:i,overlayedCameraLocations:a,layer:s,mode:o,layerFloorFilterClause:n,layerTimeExtent:l,videoViewModel:c,_panoramicVideoViewer:d}=this,u="video"===o,h="panoramic-video"===o,p=this._getActiveFeatureForCurrentMode(),m=this._computeOverlayImageSize();if(!(m&&p&&s&&"none"!==o&&this.overlayGraphicsEnabled))return;const{polygon:g}=q(p.attributes);if(u?c?.removeOverlayGraphics(a.toArray()):h?d.removeManyGraphics(a.toArray()):i?.removeManyGraphics(a.toArray()),a.removeAll(),e){const{features:e}=await s.queryFeatures({where:I(`${s.objectIdField} <> ${p.attributes.objectId}`,I(s.definitionExpression,n)),geometry:g,returnGeometry:!0,outFields:[s.objectIdField],timeExtent:l}),v=await Promise.all(e.map(async e=>{const{attributes:i,geometry:r}=e;if("point"!==r?.type)return null;const a=await this._geometryToOverlayImageGeometry(r,p,m);if(!a)return null;const s="panoramic"===o||"panoramic-video"===o?Te():Oe();return new t({attributes:i,symbol:s,geometry:a})}));a.addMany(v.filter(r)),u?c?.addOverlayGraphics(a.toArray()):h?d.addManyGraphics(a.toArray()):i?.addManyGraphics(a.toArray())}}overlayGraphicsOnImage(e,t){this.removeOverlayedGraphicsOnImage(e),this.overlayedMapFeatures.set(e,t),"video"!==this.mode?"panoramic-video"!==this.mode?this.activeViewer?.addManyGraphics(t.toArray()):this._panoramicVideoViewer.addManyGraphics(t.toArray()):this.videoViewModel?.addOverlayGraphics(t.toArray())}async overlayMapFeatures(e,i=!1){const{activeViewer:a,mode:o,layer:n,videoViewModel:l,_panoramicVideoViewer:c}=this,d="video"===o,h="panoramic-video"===o,p=this._getActiveFeatureForCurrentMode(),m=this._computeOverlayImageSize();if(!(m&&p&&"none"!==o&&this.overlayGraphicsEnabled&&n))return;const{polygon:g}=q(p.attributes);try{const{imageGeometryField:t,oiObjectIdField:i}=nt(e,n.imageGeometryField,n.imageReferenceField);this.imageGeometryField=t.name,this.oiObjectIdField=i.name}catch(w){u.getLogger(this).warn("oriented-imagery-viewer:overlay-map-features",w)}const{features:v}=await e.queryFeatures({geometry:g,returnGeometry:!0,outFields:["*"]}),y=await Promise.all(v.map(async r=>{const s=r.symbol?.clone()??e.renderer?.getSymbol(r)?.clone(),{attributes:n,geometry:g}=r,{imageGeometryField:v,oiObjectIdField:y}=this;if(v&&y&&ht(e,v,y)&&`${n[y]}`==`${p.attributes.objectId}`)try{const r=h?c.horizonAngles:Be(a?.media),u=lt(n,v,e,i,m,d?"default":o,s,r);if(!d)return u;const p=u.geometry;if(!p)return null;const g=l?.imageGeometryToOverlayGeometry(p);return g?new t({attributes:n,layer:e,symbol:u.symbol,geometry:g,visible:u.visible}):null}catch(w){u.getLogger(this).warn("oriented-imagery-viewer:overlay-map-features","couldn't create graphic from attributes, geometry will be used",{error:w,feature:r,layer:e,imageGeometryField:this.imageGeometryField,imageReferenceField:this.oiObjectIdField})}if(!g)return null;const f={feature:p,imageSize:m,footprintExtent:this.footprintExtent},_=await this._geometryToOverlayImageGeometry(g,f.feature,f.imageSize);return _?new t({attributes:n,layer:e,symbol:s,geometry:_,visible:e.visible&&i}):null})),f=new s(y.filter(r));("video"!==o&&"panoramic-video"!==o||this.overlayGraphicsEnabled)&&this.overlayGraphicsOnImage(`${e.id}`,f)}getDepthAt(e){const{activeViewer:t,currentBestFeature:i,mode:r,state:a,depthImage:s}=this,o=t?.imageSize;if(!o||!i||"none"===r||a.includes("loading"))return u.getLogger(this).warnOnce("oriented-imagery-viewer:get-depth-at","Load an image to use depth"),null;if(!s?.loaded)return u.getLogger(this).error("oriented-imagery-viewer:get-depth-at","Depth image is not loaded"),this.emit("depth-image-service:not-loaded"),null;const n=(Array.isArray(e)?e:[e]).map(e=>s.depthAt(e,{width:o[0],height:o[1]})??null);return Array.isArray(e)?n:n[0]}getActiveSectors(){return be.filter(e=>this._sectorData?.[e]?.length)}async getPixelLocationForFeature(e,t,i){return(await this._transformationService.pointToPixelForFeature([e],t,i))[0]}async getPixelLocationsForFeature(e,t,i){return await this._transformationService.pointToPixelForFeature(e,t,i)}async plotMapPoint(e){this.plotReferencePoint(e);const t=this._getActiveFeatureForCurrentMode();if(t)return this.transformAndPlotReferencePointOnImage({feature:t,selectedLocation:e,options:{signal:this._transformController?.signal}})}plotReferencePointOnGround(e){this._referencePointOnGround&&(this._overlays?.remove(this._referencePointOnGround),this._referencePointOnGround.destroy()),null!=e&&(this._referencePointOnGround=new t({geometry:new L({...e.toJSON()}),symbol:Le}),this.view?this._overlays?.add(this._referencePointOnGround):this.emit("plot-ground-point",{data:{point:this._referencePointOnGround?.geometry}}))}plotReferencePointOnImage(e){switch(this.mode){case"video":return void this._plotReferencePointOnVideo(e);case"panoramic-video":return void this._plotReferencePointOnPanoramicVideo(e);case"default":return void this._plotReferencePointOnDefaultImage(e);case"panoramic":return void this._plotReferencePointOnPanoramicImage(e)}}removeAllOverlayMapFeatures(){const{mode:e}=this;this.overlayedMapFeatures.forEach(t=>{const i=t.toArray();switch(e){case"video":this.videoViewModel?.removeOverlayGraphics(i);break;case"panoramic-video":this._panoramicVideoViewer.removeManyGraphics(i);break;default:this.activeViewer?.removeManyGraphics(i)}}),this.overlayedMapFeatures.clear()}removeOverlayedGraphicsOnImage(e){const t=this.overlayedMapFeatures.get(e),{mode:i}=this;if(!t?.length)return;const r=t.toArray();switch(i){case"video":this.videoViewModel?.removeOverlayGraphics(r);break;case"panoramic-video":this._panoramicVideoViewer.removeManyGraphics(r);break;default:this.activeViewer?.removeManyGraphics(r)}this.overlayedMapFeatures.delete(e)}reset(){const{mode:e}=this;"default"===e||"panoramic"===e?this.resetImage():"video"===e?this.resetVideo():"panoramic-video"===e&&this.resetVideoPanoramic(),this.beforeLoad(!1)}resetImage(){switch(this.setMessage("onLoadMessage","info"),this.mode){case"default":this._imageViewer.clearImage(),this._imageViewer.clearGraphics();break;case"panoramic":this._panoramicViewer.clearGraphics()}this._clickTask=m(this._clickTask)}resetVideo(){this.setMessage("onLoadMessage","info"),this.videoViewModel?.resetVideoHandler(),this._overlays?.removeAll(),this.videoViewModel=null,this.featureCache=[],this.currentBestFeature=null}resetVideoPanoramic(){this.setMessage("onLoadMessage","info"),this._overlays?.removeAll(),this.currentBestFeature=null}resetMeasurementData(){this.areaMeasurementResult=0,this.areaMeasurementAccuracy=0,this.distanceMeasurementResult=0,this.distanceAccuracyArray=[],this.heightMeasurementResult=0,this.heightMeasurementAccuracy=0,this.heightGraphic=null,this.triangulatedDistanceMeasurement=null,this.triangulatedDistanceAccuracy=null,this.triangulatedAreaMeasurement=null,this.triangulatedMeasurementGraphic=null,this.updatingTriangularMeasurementState=!1,this.triangulatedAreaAccuracy=0,this._measurementService?.resetMeasurementVectors()}async saveDrawing(){const{dataCaptureLayer:e,sketchAdapter:t}=this;if(!e||"data-capture"!==t?.type)return;const{pendingGraphics:i,savedGraphics:r}=t,a=i.get(e.id),s=a?.toArray();if(!a||!s?.length)return;const{addFeatureResults:o}=await this.saveDataCaptureFeatures(s),n=o.reduce((t,{objectId:i,globalId:r,error:a},o)=>{const n=s[o],{attributes:l}=n;return a?t.error.push(n):(i&&(l[e.objectIdField]=i),r&&e.globalIdField&&(l[e.globalIdField]=r),t.success.push(n)),t},{success:[],error:[]});r.addMany(n.success),a.removeAll(),a.addMany(n.error)}async saveDataCaptureFeatures(e,t){const{activeViewer:i,currentBestFeature:a,dataCaptureLayer:s,mode:o}=this,l=i?.imageSize;if(!l||!a||"none"===o||"video"===o||"panoramic-video"===o)throw new n("orientedimageryviewer:missing-input","Image size, current best feature and mode are required to save data capture features");if(!s)throw new n("orientedimageryviewer:missing-featurelayer","Data capture layer is not available");const c=await Promise.all(e.map(async e=>{const i=e.clone(),{geometry:r}=i;if(!r)return;const a=r.type,o=s.hasZ,n=s.geometryType,l=a!==n,c=l?await import("./transformers.js"):null,d=c?.default[n],u=l?d?.(r):r;return u&&(i.geometry=await this._transformationService.imageGeometryToMapGeometry(u,t),i.geometry)?(o||ct(i.geometry),i):void 0})),d=c.filter(r);return s.applyEdits({addFeatures:d}).then(e=>{const{addFeatureResults:t}=e;let i=0;const r=c.map(e=>{const r=t[i++];return e?r:{error:new n("orientedimageryviewer:save-unsucccessful","Error in saving data capture features"),objectId:null,globalId:null}});return{...e,addFeatureResults:r}})}async searchBestImage(e,t){try{const i=await z(e,t);i&&await this.processFeatureResponse(i,e.point,t)}catch(i){v(i)||(this.setMessage("imageLoadError","error",i.message),u.getLogger(this).error("error occurred while finding best image",i))}}selectTriangularMeasurementFeature(e){this.currentBestFeatureMeasurementImage=this.features?.find(({attributes:t})=>t.objectId===Number(e))}setAdditionalCameraLocationsVisibility(e){this.additionalCameraLocations.forEach(t=>{t.visible=e})}setAdditionalCoverageVisibility(e){this.additionalFootprints.forEach(t=>{t.visible=e})}setCurrentCoverageVisibility(e){this.bestFeatureCurrentFootprint&&(this.bestFeatureCurrentFootprint.visible=e),this.currentBestFeatureLocation&&(this.currentBestFeatureLocation.visible=e)}setMapImageConversionToolState(e){this.mapImageConversionToolState=e}setCurrentPanoramaView(e,t){this._panoramicViewer?.set({yaw:e,pitch:t})}async startDataCapture(e,t){const i=this.activeViewer?.imageRenderer,{oiObjectIdField:r,currentBestFeature:a}=this;if(!i||!a||!r)return;const{attributes:{objectId:o}}=a,n=this.overlayedMapFeatures.get(e.id)?.toArray()??[],l=[],c=[];for(const s of n)`${s.getAttribute(r)}`==`${o}`?l.push(s):c.push(s);this.overlayGraphicsOnImage(e.id,new s(c)),this.collectionId=e.id;const d=await this.loadSketch(t),u=await this.loadDataCaptureAdapter(t);y(t),d.addGraphics(l),u.savedGraphics.addMany(l);i.ui.find("zoom").visible=!1,i.map.layers.add(this.sketchGraphicsLayer)}async stopDataCapture(e=!1){this.sketch?.cancel(),this.sketchGraphicsLayer?.removeAll(),this.sketchAdapter=p(this.sketchAdapter),this.sketch=p(this.sketch),this.collectionId=null;const{dataCaptureLayer:t}=this,i=this.activeViewer?.imageRenderer;if(!i||i.destroyed)return;i.map.layers.remove(this.sketchGraphicsLayer),e&&t&&await this.overlayMapFeatures(t,!0);const r=i.ui.find("zoom");r&&(r.visible=!0)}stopMeasurement(){this.draw?.reset(),this.sketch?.cancel()}async toggleAllOverlayMapFeatures(e){!e&&this.dataCaptureLayer&&(await this.stopDataCapture(!0),this.dataCaptureLayer=null),this.overlayedMapFeatures.forEach(t=>{this._toggleVisiblity(t,e)})}toggleOverlayMapFeatures(e,t,i){const r=this.overlayedMapFeatures.get(e);r&&i&&this._toggleVisiblity(r,t)}toggleSelection(e){const{sketch:t}=this;t&&(t.updateOnGraphicClick=e,t.cancel())}async transformAndPlotReferencePointOnImage(e){const{feature:t,selectedLocation:i,options:r}=e;let a=!1,s=!1;const o="video"===this.mode?this.bestFeatureCurrentFootprint?.geometry:this.bestFeatureFootprint?.geometry;switch(o?.type){case"polygon":{const e=i.spatialReference.equals(o.spatialReference)?i:await G(i,o.spatialReference);a=o.contains(e);break}case"mesh":{const e=i.spatialReference.equals(o.spatialReference)?i:await G(i,o.spatialReference);s=o.extent.contains(e);break}}if(!a&&!s)return void this.clearReferencePointOnImage();const n="video"===this.mode||"panoramic-video"===this.mode?await this.getPixelLocationForFeature(i,{feature:t,mode:this.mode,imageSize:ye,footprintExtent:this.footprintExtent},r):await this._transformationService.pointToPixel(i,r);if(n)return y(r),this.plotReferencePointOnImage(n),{x:n.x,y:n.y};this.clearReferencePointOnImage()}async updateFeatureCache(e,t){const i=await N(e,t);i.features?.length&&(this.featureCache=i.features)}_plotReferencePointOnVideo(e){"video-loaded"===this.state&&this.videoViewModel?.videoPaused&&(this.clearReferencePointOnImage(),this.videoViewModel.plotReferencePointOnVideo(e))}_plotReferencePointOnPanoramicVideo(e){const i=this._panoramicVideoViewer,{imageSize:r,media:a}=i.viewModel;if(!this.panoramicVideoLoaded||!this.panoramicVideoPaused||!r)return;this.clearReferencePointOnImage();const s=Be(a),o=dt(e,"panoramic",r,s);this._referencePointOnImage=new t({geometry:o,symbol:Ge.clone()}),i.addGraphic(this._referencePointOnImage,0)}_getActiveFeatureForCurrentMode(){switch(this.mode){case"video":return this.videoViewModel?.closestFeature??this.currentBestFeature;case"panoramic-video":return this._panoramicVideoViewer.viewModel.closestFeature??this.currentBestFeature;default:return this.currentBestFeature}}_plotReferencePointOnDefaultImage(e){const i=this._imageViewer,{imageSize:r}=i;if("image-loaded"!==this.state||!r)return;this.clearReferencePointOnImage();const a=dt(e,"default",r);this._referencePointOnImage=new t({geometry:a,symbol:Le.clone()}),i.addGraphic(this._referencePointOnImage,0)}_plotReferencePointOnPanoramicImage(e){const i=this._panoramicViewer,{imageSize:r,media:a}=i;if("image-loaded"!==this.state||!r)return;this.clearReferencePointOnImage();const s=Be(a),o=dt(e,"panoramic",r,s);this._referencePointOnImage=new t({geometry:o,symbol:Ge.clone()}),i.addGraphic(this._referencePointOnImage,0)}async _fetchFeatures(e,t){const{layer:i,layerFloorFilterClause:r,layerTimeExtent:a,view:s}=this;if(!s)return;if(!i)return void this.setMessage("noLayerSelected","info");e.x=x(e.x,e.spatialReference);const o=i.spatialReference.equals(e.spatialReference)?e:await G(e,i.spatialReference),n=o.spatialReference.isGeographic?B(o):o,l=I("1=1",I(i.definitionExpression,r)),c=n.spatialReference.isGeographic?1:P(n.spatialReference),d={layerInstanceOrURL:i,point:n,queryParams:{where:l,maximumDistance:i.maximumDistance?i.maximumDistance/c:void 0,timeExtent:a}};return await this.searchBestImage(d,t)}async _fetchFeaturesWithController(e,t){try{await this._fetchFeatures(e,t)}catch(i){if(v(i))return;this.setMessage("imageLoadError","error"),u.getLogger(this).error("error occurred while fetching features",i)}}_groupFeaturesBySectors(){const{_suitabilities:e,additionalFeatures:t,features:i,invalidCameraHeading:r}=this,a=i.at(0);if(!e||!t||!a||!i||r)return void(this._sectorData=null);this._sectorData={};const o={};this._featureToSector=o;for(const d of be)this._sectorData[d]=new s;const n=e.map((e,t)=>({...e,featureIndex:t}));n.sort((e,t)=>e.trueSuitability-t.trueSuitability);const l=n.map(({distance:e})=>e),c=Math.max(...l);n.forEach(e=>{const{distance:t,angle:r,featureIndex:s}=e,n=t/c*Ve[2],l=Ze(t,c),d=Je(r);if(!this._sectorData)return;const u=Ve[3]+n*Math.sin(r*Math.PI/180),h=Ve[3]+n*Math.cos(r*Math.PI/180);let p;const m=i.at(s),g=m===a,{cameraPitch:v}=m.attributes,y=v<5;if(g&&y)p=-90;else{const e=u-Ve[3],t=h-Ve[3],i=t/Math.sqrt(e**2+t**2);let r=180*Math.acos(i)/Math.PI;(e<0&&t<0||e<0&&t>0)&&(r*=-1),p=r}const f=""===l?d:`${l}_${d}`;g&&(p===this.bestFeatureAngle?this.previousFeatureAngle=p:this.bestFeatureAngle=p,this.navigatorCurrentBestFeature=y?null:{x:u,y:h,direction:d}),o[`${m.attributes.objectId}`]=f;const w=this._sectorData[f];w.add({angle:r,featureIndex:s,x:u,y:h,objectID:m.attributes.objectId,sector:f,featureIndexInSector:w.length})})}async _initializeLocationViewModel(e){if(!this._locationViewModel){const t=import("./components/ImageLocationViewModel.js"),{default:i}=await t;y(e),this._locationViewModel=new i({oiViewModel:this,referenceTransformationService:this._referenceTransformationService})}}_initializeMeasurementService(){this._measurementService||(this._measurementService=new at({transformationService:this._transformationService,referenceTransformationService:this._referenceTransformationService}))}_initializeVideo(){if(this.videoElement||!this.currentBestFeature)return;this.removeHandles(Re.videoPlayerHandles),this.videoElement=new le({video:this.currentBestFeature.attributes.imagePath,georeference:new oe({extent:new O(Me)}),autoplay:!1}),this.videoElement.content?.loop&&(this.videoElement.content.loop=!1);const e=new H({source:this.videoElement,title:this.layer?.title,copyright:this.layer?.copyright});this.videoLayer=e,e&&this.videoMapView.map.layers.add(e),this.videoViewModel=new tt({oiViewModel:this})}async getMapPoint(e,t){const i=await this._transformationService.pixelToMapPoint(Array.isArray(e)?e:[e],t);return Array.isArray(e)?i:i[0]}async getMapPointForFeature(e,t,i){const r=await this._transformationService.pixelToMapPointForFeature(Array.isArray(e)?e:[e],t,i);return Array.isArray(e)?r:r[0]}async loadPanoramicMediaSource(e,t){const{lookAt:i,...r}=e,a=Ue(r);try{await a.load(t)}catch(o){if(v(o))return;if("unsupported-format"===o.name)return void this.setMessage("unsupportedPanoramicImageryError","error",void 0,{datasetFormat:a?.extension??"UNKNOWN FORMAT"})}const s=this.triangularMeasurementActive?this._panoramicMeasurementViewer:this._panoramicViewer;await s.loadMedia(a,t),i&&s.set(i)}async loadMediaSource(e,t){const i=qe(e);await this._setImageSource(this.triangularMeasurementActive?this.imageMeasurementViewer:this._imageViewer,i,t)}_clearFeatureGeometries(){this.coveragePolygons.removeAll(),this.coverageFrustums.removeAll(),this.pointSources.removeAll()}_checkFeatures(e){return!!e?.length||(this.emit("no-image-found"),this.setMessage("noImageError","error"),this.videoElement?.content?.pause(),this.currentBestFeature=null,!1)}async _getElevationSampleFromGround(e,t,i){if(!e[0])return;const r=(await import("../../geometry/operators/unionOperator.js")).executeMany(e);if(this._updateFootprintWithFeatures(t,r),"3d"===this.view?.type)try{return await this.view.map.ground.createElevationSampler(this.footprintExtent,i)}catch(a){v(a)||u.getLogger(this).error(a)}}async processElevationSample(e,t,i){const{elevationSource:r}=t[0].attributes,a=await this._getElevationSampleFromGround(e,t,i);return a||(r&&this.footprintExtent&&J(r)?await Y({extent:this.footprintExtent,lod:r.lod,url:r.url,rasterFunction:r.rasterFunction}):void 0)}_processSuitableFeatures(e,t){return U({features:e,selectedPoint:t,camera:We(this.view)?this.view.camera:null,currentImage:this.currentBestFeature})}async _processHitTestResults(e,t,i){const{results:[r]}=t;if("graphic"!==r?.type)return this.beforeLoad(!1),this.emit("no-image-found"),void this.setMessage("noImageError","error");const a=r.graphic.getAttribute(e.objectIdField);return await this.showImageByObjectId(a,i)}async _queryAndLoadByObjectId(e,t,i,r,a){this.displayMessage=null;const{response:s}=await rt(e,t,i,r,a);if(y(a),!s?.features?.length)throw new it(t);const o=q(s.features[0].attributes).polygon,n=L.fromJSON(j(o)),l=Q(n),c=P(l.spatialReference);this.selectedPoint=l;const d={layerInstanceOrURL:e,point:l,queryParams:{where:I(I("1=1",I(e.definitionExpression,i)),`${e.objectIdField} <> ${t}`),maximumDistance:e.maximumDistance?e.maximumDistance/c:void 0,timeExtent:r}},u=await z(d,a);y(a);const{features:h}=u;return h.push(s.features[0]),await this.processFeatureResponse(u,l,{...a,loadBestImage:!1})}_reorderTriangularSketchLayer(){const e=this.imageMeasurementViewer.imageRenderer.map.layers?.length;this.sketchTriangularGraphicsLayer&&e&&this.imageMeasurementViewer.imageRenderer.map.layers.reorder(this.sketchTriangularGraphicsLayer,e-1)}async _setImageSource(e,t,i){e.media=t,await e.loadMedia(t,i)}_toggleVisiblity(e,t){e.forEach(e=>{e.visible=t})}async _updateElevationOfSelectedPointAndLocations(e,t,i,r){const{location:a,cameraHeight:s}=e[0].attributes,o=await re(a.spatialReference,a.z,s,{elevationSample:i,elevationSource:i?void 0:e[0].attributes.elevationSource,extent:this.footprintExtent},r);y(r);const[n,...l]=await X([t,...e.map(e=>e.attributes.geometry.clone())],o);y(r),t.elevation=n.z,e.forEach((e,t)=>{e.attributes.elevation=l[t].z})}_updateFeatures(e,t=!0){if(!e.length)return this.currentBestFeature=null,void this.additionalFeatures.removeAll();this.features.removeAll(),this.features.addMany(e),this.navigationNodes.removeAll(),this.navigationNodes.addMany(e.map(e=>{const{geometry:t,attributes:i}=e,{isSpherical:r,cameraHeading:a,cameraPitch:s}=i;return new et({geometry:t,attributes:i,currentHeading:r?0:a,currentPitch:r?0:s})})),e.length>1?this.additionalFeatures.addMany(e.slice(1)):this.additionalFeatures.removeAll(),this._updateGroundElevation=!0,t&&(this.currentBestFeature=e[0])}_updateFootprintWithFeatures(e,t){const i=[];for(const{attributes:{geometry:r}}of e)t.contains(r)||i.push([r.x,r.y]);i.sort((e,t)=>+R([e,t])),t.addRing(i),this.footprintExtent=ue(t.extent,2,2)}_scheduleVideoInteractionUpdate(){this.scheduledFrameId||(this.scheduledFrameId=requestAnimationFrame(()=>{this.scheduledFrameId=null,this._updateInteraction()}))}async _updatePointsAndPolygons(e){const{pointSources:i,currentBestFeature:r,currentCoverageVisible:a,isAdditionalPointSourcesVisible:s,mode:o,layer:n}=this;if(r&&(this.additionalFootprints.removeAll(),this.additionalCameraLocations.removeAll(),this.bestFeatureCurrentFootprint&&(this.bestFeatureCurrentFootprint.destroy(),this.bestFeatureCurrentFootprint=null,this.bestFeatureFootprint=null),!this.invalidCameraHeading)){await(this._adapter?.createFootprints(e)),y(e);for(const o of i){const i=this.view&&!this.view.spatialReference?.equals(o.spatialReference)?await G(o.clone(),this.view?.spatialReference,e):o.clone();o.imageID===r.attributes.objectId?this.currentBestFeatureLocation=new t({attributes:{imageID:o.imageID},geometry:i,symbol:Ee,visible:a}):this.additionalCameraLocations.push(new t({attributes:{imageID:o.imageID},geometry:i,symbol:je,visible:s}))}"video"!==o&&"panoramic-video"!==o||(await this.initializeTransformationService(e),n&&!this.featureCache.length&&await this.updateFeatureCache(n,r.geometry.spatialReference))}}_updateCurrentBestFeature(e){if(!e)return;if(this.currentBestFeature=this.features?.at(e.featureIndex),"video"===this.mode)return void(this.currentBestFeature&&this.videoViewModel?.playVideoFromSelectedLocation(this.currentBestFeature));if("panoramic-video"===this.mode)return void(this.currentBestFeature&&this._panoramicVideoViewer.viewModel.playPanoramicVideoFromSelectedLocation(this.currentBestFeature));const t=this.currentBestFeature?.attributes.cameraPitch&&this.currentBestFeature?.attributes.cameraPitch<5;let i;if(t)i=-90;else{const t=e.x-Ve[3],r=e.y-Ve[3],a=r/Math.sqrt(t**2+r**2);let s=180*Math.acos(a)/Math.PI;(t<0&&r<0||t<0&&r>0)&&(s*=-1),i=s}i===this.bestFeatureAngle?this.previousFeatureAngle=i:this.bestFeatureAngle=i,this.navigatorCurrentBestFeature=t?null:{x:e.x,y:e.y,direction:e.sector.includes("_")?e.sector.split("_")[1]:e.sector}}_updateImageMeasurementBestFeature(e){e&&(this.currentBestFeatureMeasurementImage=this.features?.at(e.featureIndex))}clearGraphics(){this._imageViewer.clearGraphics(),this._panoramicViewer.clearGraphics(),this.imageMeasurementViewer.clearGraphics(),this._panoramicMeasurementViewer.clearGraphics()}clearReferencePointOnImage(){this._referencePointOnImage&&(this._imageViewer.removeGraphic(this._referencePointOnImage),this._panoramicViewer.removeGraphic(this._referencePointOnImage),this._panoramicVideoViewer.removeGraphic(this._referencePointOnImage),this._referencePointOnImage=p(this._referencePointOnImage)),this.videoViewModel?.clearReferencePointOnVideo()}async initializeReferenceTransformationService(e){const{currentBestFeatureMeasurementImage:t,activeTriangulatedViewer:i,mode:r}=this;if(!t||!i||!i.imageSize||"panoramic"!==r&&"default"!==r)return;const{imageSize:a}=i,{attributes:s,elevationSample:o}=t,{location:{spatialReference:n,z:l},cameraHeight:c,elevationSource:d}=s;let u=s.location;u.spatialReference.isGeographic&&(u=Q(u));const h="default"===r?ae(s,a[0],a[1]):se(s,a[0],a[1]),p=await re(n,l??0,c,{elevationSample:o,elevationSource:d,extent:this.footprintExtent},e),m=(await import("./services/TransformationService.js")).default,g={imageToWorldProperties:h,updateElevationProps:p,mode:r,imageSize:a,depthImageService:this.depthImage};this._referenceTransformationService=new m(g),this._locationViewModel&&(this._locationViewModel.referenceTransformationService=this._referenceTransformationService),this._measurementService&&(this._measurementService.referenceTransformationService=this._referenceTransformationService)}async initializeTransformationService(e){const{currentBestFeature:t,activeViewer:i,mode:r}=this,a="video"===r||"panoramic-video"===r?ye:i?.imageSize;if(!t||!a||"none"===r)return;const{attributes:s,elevationSample:o}=t,{location:{spatialReference:n,z:l},cameraHeight:c,elevationSource:d}=s;let u=s.location;u.spatialReference.isGeographic&&(u=Q(u));const h="default"===r||"video"===r?"default":"panoramic",p={..."default"===h?ae(s,a[0],a[1]):se(s,a[0],a[1]),cameraLocation:u},m=await re(n,l??0,c,{elevationSample:o,elevationSource:d,extent:this.footprintExtent},e),g=(await import("./services/TransformationService.js")).default,v={imageToWorldProperties:p,updateElevationProps:m,mode:h,imageSize:a,depthImageService:this.depthImage};this._transformationService=new g(v),this._measurementService&&(this._measurementService.transformationService=this._transformationService)}plotReferencePoint(e){"mapPoint"in e?this.plotReferencePointOnGround(e.mapPoint):this.plotReferencePointOnGround(e)}setMessage(e,t,i,r){this.displayMessage={key:e,type:t,data:i,map:r}}async transformAndPlotSelectedLocation(e){const{currentBestFeature:t,invalidCameraHeading:i,selectedPoint:r,activeViewer:a}=this;if(this._crossSymbol&&(this._panoramicViewer.removeGraphic(this._crossSymbol),this._imageViewer.removeGraphic(this._crossSymbol),this._crossSymbol=p(this._crossSymbol)),!r||!t||"image-loaded"!==a?.state||i)return;let s;try{s=await this._transformationService.pointToPixel(r,{signal:e?.signal}),y(e),await this.plotSelectedPointOnImage(s,e)}catch(o){v(o)||u.getLogger(this).error("failed to transform map point to pixel, cross symbol will not be plotted on image",{error:o,selectedPoint:r,feature:t})}}updateCurrentCoveragePolygon(e){const{additionalFootprints:i,additionalCameraLocations:r,currentBestFeature:a,currentBestFeatureLocation:s,currentCoverageVisible:o,selectedPoint:n,view:l,_adapter:c,mode:d}=this;if(!a)return;const{attributes:{objectId:u},elevationSample:h}=a;if(this._initialCurrentCoverageUpdate){if(this._overlays?.removeAll(),this._initialCurrentCoverageUpdate=!1,this.bestFeatureCurrentFootprint=p(this.bestFeatureCurrentFootprint),e&&!this.invalidCameraHeading&&(e.visible=o,this.bestFeatureCurrentFootprint=e),l){const e=[...i,...r,s].filter($e);"3d"===l?.type&&h&&c?.updateGroundElevation&&(this._updateGroundElevation&&c.updateGroundElevation(e),"panoramic"===d&&c.updateGroundElevation([this.bestFeatureCurrentFootprint])),this._updateGroundElevation=!1,n&&(e.splice(-2,0,this.bestFeatureCurrentFootprint),e.push(new t({geometry:n.clone(),symbol:Ie.clone(),attributes:{imageID:u}}))),this._overlays.graphics.addMany(e)}}else if(l){if(this.invalidCameraHeading)return void this._superimposeService.clear();this.bestFeatureCurrentFootprint&&(this._overlays?.remove(this.bestFeatureCurrentFootprint),this.bestFeatureCurrentFootprint=p(this.bestFeatureCurrentFootprint));const t=this.bestFeatureCurrentFootprint&&this._overlays?this._overlays.graphics.indexOf(this.bestFeatureCurrentFootprint):-1;e&&(this.bestFeatureCurrentFootprint=e,"3d"===l?.type&&h&&c?.updateGroundElevation&&"panoramic"===d&&c.updateGroundElevation([e]),e.visible=this.currentCoverageVisible,this._overlays?.graphics.add(this.bestFeatureCurrentFootprint,t>=0?t:this._overlays.graphics.length-1))}}_updateSuperimposedImage(){if(!this._hasActiveSuperimposeCameraContext())return;const e="panoramic"===this.mode?this._panoramicViewer:null,{currentBestFeature:t,defaultSuperimposeCameraLockEnabled:i,layer:r,mode:a,view:s,state:o,superimposeViewEnabled:n,superimposeViewSupported:l,activeViewer:c,depthImage:d}=this,u=this.coverageFrustums.find(({imageID:e})=>e===t?.attributes.objectId);this._superimposeService.update({activeImageSize:c?.imageSize||void 0,adapter:this._adapter,currentBestFeature:t,currentBestFeatureFrustum:u,defaultSuperimposeCameraLockEnabled:i,depthImageLoaded:d?.loaded??!1,layer:r,mode:a,panoramicCamera:e?.camera,state:o,superimposeViewEnabled:n&&l,view:s}),this.setMessage("superimposeImageDescription","info"),this._superimposePreviousCurrentCoverageVisible??=this.currentCoverageVisible,this.currentCoverageVisible=!1}_getSuperimposeCameraWatchState(){const e="3d"===this.view?.type?this.view:null,t=e?.camera;return[this.superimposeViewEnabled,this.superimposeViewSupported,this.mode,this.state,this.view?.type,this.view?.interacting,this.view?.navigating,t?.heading,t?.tilt,t?.fov,t?.position.x,t?.position.y,t?.position.z]}_handleSuperimposeCameraChange(){const e=this.view,t="3d"===e?.type?e:null;this._hasActiveSuperimposeCameraContext()?"panoramic"!==this.mode?!t||t.interacting||t.navigating?this._abortSuperimposeSchedule():this._scheduleDefaultSuperimposeUpdate():this._schedulePanoramicSuperimposeUpdate():this._abortSuperimposeSchedule()}_shouldDisableUnsupportedSuperimposeView(){return this.superimposeViewEnabled&&"panoramic"===this.mode&&!this.superimposeViewSupported}_hasActiveSuperimposeCameraContext(){return("default"===this.mode||"panoramic"===this.mode)&&this.superimposeViewEnabled&&this.superimposeViewSupported&&"image-loaded"===this.state&&"3d"===this.view?.type&&!!this.view.camera}_abortSuperimposeSchedule(){this._superimposeScheduleController?.abort(),this._superimposeScheduleController=null,this._clearSuperimposeDebounceTimeout(),this._clearSuperimposeScheduledFrame()}_resetInactiveSuperimposeState(){const e=null!=this._superimposePreviousCurrentCoverageVisible;this._abortSuperimposeSchedule(),this._adapter?.disableDefaultSuperimposeNavigation?.(),this._adapter?.disablePanoramicSuperimposeNavigation?.(),this._superimposeService.clear(),this._restoreCurrentCoverageVisibilityAfterSuperimpose(),this._restoreDefaultMessageAfterSuperimpose(),e&&this._restoreViewerMediaAfterSuperimpose()}_restoreCurrentCoverageVisibilityAfterSuperimpose(){null!=this._superimposePreviousCurrentCoverageVisible&&(this.currentCoverageVisible=this._superimposePreviousCurrentCoverageVisible,this._superimposePreviousCurrentCoverageVisible=null)}_restoreViewerMediaAfterSuperimpose(){const{currentBestFeature:e,mode:t}=this;if(!e||"default"!==t&&"panoramic"!==t)return;this._restoreSuperimposeMediaTask?.abort();const i=a(async t=>{await this._loadCurrentFeatureMedia(e,{signal:t})});this._restoreSuperimposeMediaTask=i,i.promise.finally(()=>{this._restoreSuperimposeMediaTask===i&&(this._restoreSuperimposeMediaTask=null)})}_restoreDefaultMessageAfterSuperimpose(){if("superimposeImageDescription"===this.displayMessage?.key){!!this.currentBestFeature&&("default"===this.mode||"panoramic"===this.mode)?this.displayMessage=null:this.setMessage("onLoadMessage","info")}}_clearSuperimposeDebounceTimeout(){null!=this.superimposeDebounceTimeoutId&&(clearTimeout(this.superimposeDebounceTimeoutId),this.superimposeDebounceTimeoutId=null)}_clearSuperimposeScheduledFrame(){null!=this.superimposeScheduledFrameId&&(cancelAnimationFrame(this.superimposeScheduledFrameId),this.superimposeScheduledFrameId=null)}_schedulePanoramicSuperimposeUpdate(){this._abortSuperimposeSchedule(),this.superimposeDebounceTimeoutId=window.setTimeout(()=>{this.superimposeDebounceTimeoutId=null,this._hasActiveSuperimposeCameraContext()&&"panoramic"===this.mode&&this._updateSuperimposedImage()},150)}_scheduleDefaultSuperimposeUpdate(){const e=this.view;if(!("3d"===e?.type?e:null))return;if(this.superimposeScheduledFrameId)return;this._superimposeScheduleController?.abort();const t=new AbortController,{signal:i}=t,r=()=>{this._clearSuperimposeDebounceTimeout(),this._clearSuperimposeScheduledFrame(),this._superimposeScheduleController===t&&(this._superimposeScheduleController=null),i.removeEventListener("abort",r)};this._superimposeScheduleController=t,i.addEventListener("abort",r),this.superimposeScheduledFrameId=requestAnimationFrame(()=>{if(i.removeEventListener("abort",r),this.superimposeScheduledFrameId=null,this._superimposeScheduleController===t&&(this._superimposeScheduleController=null),i.aborted)return;const e=this.view,a="3d"===e?.type?e:null;!this._hasActiveSuperimposeCameraContext()||null==a||a.interacting||a.navigating||this._updateSuperimposedImage()})}};e([C()],mt.prototype,"activeLayer",null),e([C({readOnly:!0})],mt.prototype,"activeViewer",null),e([C()],mt.prototype,"activeTriangulatedViewer",null),e([C()],mt.prototype,"accuracyParametersMissing",null),e([C()],mt.prototype,"additionalFeatures",void 0),e([C({type:s.ofType(t)})],mt.prototype,"additionalCameraLocations",void 0),e([C({type:s.ofType(t)})],mt.prototype,"additionalFootprints",void 0),e([C()],mt.prototype,"areaMeasurementResult",void 0),e([C()],mt.prototype,"areaMeasurementAccuracy",void 0),e([C()],mt.prototype,"bestFeatureAngle",void 0),e([C()],mt.prototype,"bestFeatureCurrentFootprint",void 0),e([C({type:t})],mt.prototype,"bestFeatureFootprint",void 0),e([C({type:Number})],mt.prototype,"brightness",null),e([C()],mt.prototype,"cameraHeadingThreshold",void 0),e([C()],mt.prototype,"cameraPitchThreshold",void 0),e([C()],mt.prototype,"clickAction",void 0),e([C()],mt.prototype,"correctedLocationPointOnImage",void 0),e([C()],mt.prototype,"videoViewModel",void 0),e([C()],mt.prototype,"collectionId",void 0),e([C({type:Number})],mt.prototype,"contrast",null),e([C()],mt.prototype,"coverageFrustums",void 0),e([C()],mt.prototype,"coveragePolygons",void 0),e([C()],mt.prototype,"currentBestFeature",void 0),e([C()],mt.prototype,"currentBestFeatureMeasurementImage",void 0),e([C()],mt.prototype,"currentBestFeatureLocation",void 0),e([C()],mt.prototype,"currentCoverageVisible",void 0),e([C()],mt.prototype,"currentNode",null),e([C()],mt.prototype,"depthImage",void 0),e([C()],mt.prototype,"depthImageNotSupported",null),e([C()],mt.prototype,"featureCache",void 0),e([C()],mt.prototype,"navigationNodes",void 0),e([C({json:{write:!1}})],mt.prototype,"determineWorkflowForFeature",void 0),e([C({json:{write:!1}})],mt.prototype,"determineWorkflowForTriangularMeasurement",void 0),e([C()],mt.prototype,"disabled",void 0),e([C()],mt.prototype,"displayMessage",void 0),e([C()],mt.prototype,"displayNewMeasurementButton",void 0),e([C()],mt.prototype,"distanceMeasurementResult",void 0),e([C()],mt.prototype,"distanceAccuracyArray",void 0),e([C()],mt.prototype,"dataCaptureLayer",void 0),e([C({readOnly:!0})],mt.prototype,"featureCount",null),e([C()],mt.prototype,"features",void 0),e([C()],mt.prototype,"groundCoordinates",void 0),e([C()],mt.prototype,"groundCoordinatesAccuracy",void 0),e([C()],mt.prototype,"heightGraphic",void 0),e([C()],mt.prototype,"heightMeasurementResult",void 0),e([C()],mt.prototype,"heightMeasurementAccuracy",void 0),e([C({readOnly:!0})],mt.prototype,"imageGalleryEnabled",null),e([C()],mt.prototype,"imageGeometryField",void 0),e([C({readOnly:!0})],mt.prototype,"imageLoaded",null),e([C()],mt.prototype,"imageLocationToolState",void 0),e([C()],mt.prototype,"initialVideoMapViewExtent",void 0),e([C({readOnly:!0})],mt.prototype,"invalidCameraHeading",null),e([C()],mt.prototype,"imagePointsInView",null),e([C()],mt.prototype,"imageMeasurementViewer",void 0),e([C()],mt.prototype,"isAdditionalCoverageVisible",void 0),e([C()],mt.prototype,"isAdditionalPointSourcesVisible",void 0),e([C()],mt.prototype,"layer",void 0),e([C()],mt.prototype,"layerView",null),e([C({readOnly:!0})],mt.prototype,"layerFloorFilterClause",null),e([C({readOnly:!0})],mt.prototype,"layerTimeExtent",null),e([C({type:Number})],mt.prototype,"localPort",void 0),e([C()],mt.prototype,"locationPointOnImage",void 0),e([C()],mt.prototype,"mapImageConversionToolState",void 0),e([C()],mt.prototype,"measureType",void 0),e([C()],mt.prototype,"measurementGraphic",void 0),e([C({readOnly:!0,value:"none"})],mt.prototype,"mode",null),e([C()],mt.prototype,"navigationMode",void 0),e([C()],mt.prototype,"navigatorCurrentBestFeature",void 0),e([C()],mt.prototype,"oiObjectIdField",void 0),e([C({type:s.ofType(t)})],mt.prototype,"overlayedCameraLocations",void 0),e([C()],mt.prototype,"overlayedMapFeatures",void 0),e([C()],mt.prototype,"panoramicVideoLoaded",null),e([C()],mt.prototype,"panoramicVideoPaused",null),e([C()],mt.prototype,"pixelCoordinates",void 0),e([C()],mt.prototype,"preserveAngle",void 0),e([C()],mt.prototype,"pointSources",void 0),e([C({readOnly:!0})],mt.prototype,"popupEnabled",null),e([C()],mt.prototype,"preloadMedia",void 0),e([C()],mt.prototype,"preloadMediaSize",void 0),e([C()],mt.prototype,"previousFeatureAngle",void 0),e([C()],mt.prototype,"referencePoint",null),e([C({readOnly:!0})],mt.prototype,"sectorData",null),e([C()],mt.prototype,"selectedPoint",void 0),e([C({type:Number})],mt.prototype,"sharpness",null),e([C()],mt.prototype,"shouldShowSelectedImage",void 0),e([C()],mt.prototype,"superimposeViewEnabled",void 0),e([C()],mt.prototype,"defaultSuperimposeCameraLockEnabled",void 0),e([C()],mt.prototype,"superimposeViewSupported",null),e([C()],mt.prototype,"sketch",void 0),e([C()],mt.prototype,"sketchTriangular",void 0),e([C()],mt.prototype,"sketchTriangularGraphicsLayer",void 0),e([C()],mt.prototype,"draw",void 0),e([C()],mt.prototype,"drawAdapter",void 0),e([C()],mt.prototype,"polylineDrawAction",void 0),e([C()],mt.prototype,"scheduledFrameId",void 0),e([C()],mt.prototype,"superimposeScheduledFrameId",void 0),e([C()],mt.prototype,"superimposeDebounceTimeoutId",void 0),e([C()],mt.prototype,"sketchAdapter",void 0),e([C({readOnly:!0})],mt.prototype,"sketchGraphicsLayer",null),e([C({readOnly:!0})],mt.prototype,"state",null),e([C({readOnly:!0})],mt.prototype,"thumbnails",null),e([C()],mt.prototype,"videoExtentPoints",null),e([C()],mt.prototype,"triangularMeasurementActive",void 0),e([C()],mt.prototype,"triangulatedDistanceMeasurement",void 0),e([C()],mt.prototype,"triangulatedDistanceAccuracy",void 0),e([C()],mt.prototype,"triangulatedAreaMeasurement",void 0),e([C()],mt.prototype,"triangulatedAreaAccuracy",void 0),e([C()],mt.prototype,"triangulatedMeasurementGraphic",void 0),e([C()],mt.prototype,"triangulatedPoint",void 0),e([C()],mt.prototype,"triangulatedMeasurementAdapter",void 0),e([C()],mt.prototype,"updateFootprint",void 0),e([C()],mt.prototype,"updateVideoFootprint",void 0),e([C()],mt.prototype,"updateFootprintPanorama",void 0),e([C()],mt.prototype,"updatingTriangularMeasurementState",void 0),e([C({value:null})],mt.prototype,"view",null),e([C()],mt.prototype,"videoElement",void 0),e([C()],mt.prototype,"videoLayer",void 0),e([C()],mt.prototype,"videoMapView",void 0),e([C()],mt.prototype,"verticalFilterEnabled",void 0),e([C()],mt.prototype,"_adapter",void 0),e([C()],mt.prototype,"_defaultGraphicsLayer",null),e([C()],mt.prototype,"_highlightedFeatureHandle",void 0),e([C()],mt.prototype,"_imageViewer",void 0),e([C()],mt.prototype,"_initialCurrentCoverageUpdate",void 0),e([C()],mt.prototype,"_locationViewModel",void 0),e([C()],mt.prototype,"_measurementService",void 0),e([C()],mt.prototype,"_mediaPrefetcher",void 0),e([C()],mt.prototype,"_navigationManager",void 0),e([C()],mt.prototype,"_overlays",void 0),e([C()],mt.prototype,"_superimposePreviousCurrentCoverageVisible",void 0),e([C()],mt.prototype,"_superimposeService",void 0),e([C({readOnly:!0})],mt.prototype,"_overlaysView",null),e([C()],mt.prototype,"_panoramicVideoViewer",void 0),e([C()],mt.prototype,"_panoramicViewer",void 0),e([C()],mt.prototype,"_panoramicMeasurementViewer",void 0),e([C()],mt.prototype,"_referencePointOnGround",void 0),e([C()],mt.prototype,"_referencePointOnImage",void 0),e([C()],mt.prototype,"_referenceTransformationService",void 0),e([C()],mt.prototype,"_sectorData",void 0),e([C()],mt.prototype,"_transformationService",void 0),e([C()],mt.prototype,"_featureToSector",void 0),e([C({readOnly:!0})],mt.prototype,"_updatingHandles",void 0),e([C()],mt.prototype,"footprintExtent",void 0),e([C()],mt.prototype,"_featureChangedTask",void 0),mt=e([A("esri.widgets.OrientedImageryViewer.OrientedImageryViewerViewModel")],mt);const gt=mt;export{gt as default};
2
+ import{__decorate as e}from"tslib";import t from"../../Graphic.js";import{equals as i,isSome as r}from"../../core/arrayUtils.js";import{createTask as a}from"../../core/asyncUtils.js";import s from"../../core/Collection.js";import{deprecatedProperty as o}from"../../core/deprecate.js";import n from"../../core/Error.js";import{EventedMixin as l}from"../../core/Evented.js";import{makeHandle as c}from"../../core/handleUtils.js";import{equalsShallow as d}from"../../core/lang.js";import u from"../../core/Logger.js";import{clamp as h}from"../../core/mathUtils.js";import{destroyMaybe as p,abortMaybe as m}from"../../core/maybe.js";import{EsriPromise as g}from"../../core/Promise.js";import{isAbortError as v,throwIfAborted as y,waitTick as f}from"../../core/promiseUtils.js";import w from"../../core/ReactiveMap.js";import{whenOnce as _,on as F,watch as b,syncAndInitial as M,initial as V,when as S}from"../../core/reactiveUtils.js";import{sqlAnd as I}from"../../core/sql.js";import{getMetersPerUnitForSR as P}from"../../core/units.js";import{property as C,subclass as A}from"../../core/accessorSupport/decorators.js";import{isSerializable as k}from"../../core/support/jsonUtils.js";import{UpdatingHandles as T}from"../../core/support/UpdatingHandles.js";import O from"../../geometry/Extent.js";import L from"../../geometry/Point.js";import{projectAsync as G}from"../../geometry/projectionUtils.js";import E from"../../geometry/SpatialReference.js";import{polygonCentroidPoint as j}from"../../geometry/support/centroid.js";import{isClockwise as R}from"../../geometry/support/coordsUtils.js";import{normalizeMapX as x}from"../../geometry/support/normalizeUtils.js";import{geographicToWebMercator as B}from"../../geometry/support/webMercatorUtils.js";import D from"../../layers/GraphicsLayer.js";import H from"../../layers/MediaLayer.js";import{searchImages as z,getSortedLayerFeatures as N}from"../../layers/orientedImagery/queries.js";import{calculateSuitabilities as U}from"../../layers/orientedImagery/core/bestImageUtils.js";import{createCoveragePolygon as q,computePolygonForInspection as W,resizePolygon as $,checkIfPolygonContainsSelectedPoint as Z}from"../../layers/orientedImagery/core/coverageUtils.js";import{isElevationSource as J}from"../../layers/orientedImagery/core/ElevationSourceDefinitions.js";import{getMetersPerUnitOfSR as K,convertGeographicToWebMercator as Q}from"../../layers/orientedImagery/core/utils.js";import X from"../../layers/orientedImagery/transformations/updateElevation.js";import{getElevationSampler as Y}from"../../layers/orientedImagery/transformations/updateElevationUtils.js";import{or as ee,getInitialAngle as te,convertPixelLocationToSphereVertex as ie,getUpdateElevationProps as re,getImageToWorldProperties as ae,getImageToWorldPanoramicProperties as se}from"../../layers/orientedImagery/transformations/utils.js";import oe from"../../layers/support/ExtentAndRotationGeoreference.js";import{getFloorFilterClause as ne}from"../../layers/support/floorFilterUtils.js";import le from"../../layers/support/VideoElement.js";import ce from"../../views/MapView.js";import de from"../../views/draw/Draw.js";import{scale as ue}from"../../views/draw/support/drawUtils.js";import{ViewEventPriorities as he}from"../../views/input/InputManager.js";import pe from"../PanoramicVideoViewer.js";import me from"../PanoramicViewer.js";import{defaultAngleThresholdInDegrees as ge,videoMapViewConstraint as ve,fixedImageSize as ye,clockwiseDirections as fe,videoFitScaleTolerance as we,videoExtent as _e,invalidCameraHeading as Fe,sectorsInOrder as be,sampleExtent as Me,sectorsRadii as Ve}from"./constants.js";import{isFeatureAttachment as Se}from"./galleryUtils.js";import{crossSymbol as Ie,crossSymbol3D as Pe,measurementPolygonSymbol as Ce,polylineSymbolPanoramic as Ae,measurementPolylineSymbol as ke,cameraOverlaySymbol3D as Te,cameraOverlaySymbol as Oe,diamondSymbol as Le,diamondSymbol3D as Ge,activeSourcePointSymbol as Ee,sourcePointSymbol as je}from"./symbols.js";import{registryKeys as Re}from"./types.js";import{isNoAttachmentError as xe,extractHorizonAnglesFromMedia as Be,isTifOrMrf as De,filterOILLayerView as He,assignElevationSampleToFeatures as ze,filterByZ as Ne,createPanoramicMedia as Ue,createNonPanoramicMedia as qe,isSceneView as We,isGraphic as $e,calculateSegment as Ze,calculateDirection as Je}from"./utils.js";import{disableVideoZoomAndPan as Ke,getUpdatedConstraints as Qe,getUpdatedExtentPoints as Xe}from"./videoViewerUtils.js";import Ye from"./components/ImageViewer.js";import et from"./components/NavigationNode.js";import tt from"./components/OrientedImageryVideoViewModel.js";import{NoFeatureFoundWithObjectIdError as it}from"./navigation/errors.js";import{queryFeatureByObjectIds as rt}from"./navigation/queries.js";import{ImageMeasurementService as at}from"./services/ImageMeasurementService.js";import st from"./services/SuperimposeService.js";import{configureSketchTool as ot,extractFieldsFromDataCaptureLayer as nt,constructGraphicFromImageGeometry as lt}from"./support/dataCaptureUtils.js";import{removeZFromGeometry as ct,imageSpaceToPoint as dt}from"./support/geometryUtils.js";import ut from"./support/resolveMediaProps.js";import{isValidDataCaptureLayer as ht}from"./support/typeUtils.js";const pt=()=>new n("orientedimageryviewer:sketch-not-initialized","Sketch property is not initialized, call loadSketch first");let mt=class extends(l(g)){constructor(e){super(e),this.additionalFeatures=new s,this.additionalCameraLocations=new s,this.additionalFootprints=new s,this.areaMeasurementResult=0,this.areaMeasurementAccuracy=0,this.bestFeatureAngle=0,this.bestFeatureCurrentFootprint=null,this.bestFeatureFootprint=null,this.cameraHeadingThreshold=ge,this.cameraPitchThreshold=ge,this.clickAction="hittest",this.correctedLocationPointOnImage=null,this.videoViewModel=null,this.collectionId=null,this.coverageFrustums=new s,this.coveragePolygons=new s,this.currentBestFeature=null,this.currentBestFeatureMeasurementImage=null,this.currentBestFeatureLocation=null,this.currentCoverageVisible=!0,this.depthImage=null,this.featureCache=[],this.navigationNodes=new s,this.determineWorkflowForFeature=async(e,t,i)=>{const{currentBestFeature:r,selectedPoint:a}=this;if(this.emit("popup-close"),r&&a){this.displayMessage=null,this._initialCurrentCoverageUpdate=!0,this._updateGroundElevation=!0;try{await this._updatePointsAndPolygons(i),await this._loadDepthImage(i),await this._loadCurrentFeatureMedia(r,i)}catch(s){v(s)||(this.loadImageError(s),u.getLogger(this).error("#loadIImage()","error occured while loading image",s))}}},this.determineWorkflowForTriangularMeasurement=async(e,t,i)=>{if(this.emit("popup-close"),this.currentBestFeatureMeasurementImage&&this.selectedPoint)try{await this._loadMeasurementViewerImage(i)}catch(r){v(r)||(this.loadImageError(r),u.getLogger(this).error("#loadIImage()","error occured while loading image",r))}},this.disabled=!1,this.displayMessage={key:"onLoadMessage",type:"info"},this.displayNewMeasurementButton=!0,this.distanceMeasurementResult=0,this.distanceAccuracyArray=[],this.dataCaptureLayer=null,this.features=new s,this.groundCoordinates=null,this.groundCoordinatesAccuracy=null,this.heightGraphic=null,this.heightMeasurementResult=0,this.heightMeasurementAccuracy=0,this.imageGeometryField=null,this.imageLocationToolState=!1,this.initialVideoMapViewExtent=null,this.imageMeasurementViewer=new Ye,this.isAdditionalCoverageVisible=!1,this.isAdditionalPointSourcesVisible=!1,this.layer=null,this.localPort=null,this.locationPointOnImage=null,this.mapImageConversionToolState=!1,this.measureType=null,this.measurementGraphic=null,this.navigatorCurrentBestFeature=null,this.oiObjectIdField=null,this.overlayedCameraLocations=new s,this.overlayedMapFeatures=new w,this.pixelCoordinates=null,this.preserveAngle="none",this.pointSources=new s,this.preloadMedia=!1,this.preloadMediaSize=5,this.previousFeatureAngle=0,this.selectedPoint=null,this.shouldShowSelectedImage=!1,this.superimposeViewEnabled=!1,this.defaultSuperimposeCameraLockEnabled=!0,this.sketch=null,this.sketchTriangular=null,this.sketchTriangularGraphicsLayer=null,this.draw=null,this.drawAdapter=null,this.polylineDrawAction=null,this.scheduledFrameId=null,this.superimposeScheduledFrameId=null,this.superimposeDebounceTimeoutId=null,this.sketchAdapter=null,this.triangularMeasurementActive=!1,this.triangulatedDistanceMeasurement=null,this.triangulatedDistanceAccuracy=null,this.triangulatedAreaMeasurement=null,this.triangulatedAreaAccuracy=0,this.triangulatedMeasurementGraphic=null,this.triangulatedPoint=null,this.triangulatedMeasurementAdapter=null,this.updateFootprint=async(e,t,i)=>{"default"===this.mode&&"image-loaded"!==this.state||await(this._adapter?.updateFootprint(e,t,i))},this.updateVideoFootprint=async e=>{this.mode.includes("video")&&this.videoElement?.content&&await(this._adapter?.updateVideoFootprint(e))},this.updateFootprintPanorama=async(e,t)=>{await(this._adapter?.updateFootprintPanorama(e,t))},this.updatingTriangularMeasurementState=!1,this.videoElement=null,this.videoLayer=null,this.videoMapView=new ce({map:new Map,constraints:ve}),this.verticalFilterEnabled=!1,this._adapter=null,this._highlightedFeatureHandle=null,this._imageViewer=new Ye,this._initialCurrentCoverageUpdate=!0,this._locationViewModel=null,this._measurementService=null,this._mediaPrefetcher=null,this._navigationManager=null,this._overlays=new D({listMode:"hide",internal:!0,elevationInfo:{mode:"absolute-height"},title:"OrentedImageryViewerViewModel overlays layer"}),this._superimposePreviousCurrentCoverageVisible=null,this._superimposeService=new st({getMapPoint:(e,t)=>this.getMapPoint(e,t),getPanoramicTransformationState:()=>{const{imageToWorldProperties:e,mode:t,updateElevationProps:i}=this._transformationService;return"panoramic"===t&&e?{imageToWorldProperties:e,updateElevationProps:i}:null},pointToPixel:(e,t)=>this._transformationService.pointToPixel(e,t),overlays:this._overlays,getPointAtDistance:(e,t,i)=>this._transformationService.pixelToPointAtDistance(e,t,i)}),this._panoramicVideoViewer=new pe,this._panoramicViewer=new me,this._panoramicMeasurementViewer=new me,this._referencePointOnGround=null,this._referencePointOnImage=null,this._referenceTransformationService=null,this._sectorData=null,this._transformationService=null,this._featureToSector=null,this._updatingHandles=new T,this._clickTask=null,this._crossSymbol=null,this.footprintExtent=null,this._featureChangedTask=null,this._mediaPrefetchTask=null,this._restoreSuperimposeMediaTask=null,this._superimposeScheduleController=null,this._suitabilities=null,this._transformController=new AbortController,this._updateFootprintTask=null,this._updateGroundElevation=!1,this.addUpdatingPromise=e=>this._updatingHandles.addPromise(e),this.filterCapturedFeatures=e=>{const t=this.currentBestFeature?.attributes.objectId,i=this.layer?.imageReferenceField;if(!t||!e||!i)return;const r=this.overlayedMapFeatures.get(e);r?.forEach(e=>{const r=e.attributes??{},a=Object.keys(r).find(e=>e.toLowerCase()===i.toLowerCase());(a?r[a]:null)!==t&&(e.visible=!e.visible)})},this.hideImageGeometry=e=>{},this.highlight=e=>{if(!this._overlaysView)return;this.removeHighlight();const t=this.additionalFootprints.find(({attributes:{imageID:t}})=>t===Number(e));this._highlightedFeatureHandle=t?this._overlaysView?.highlight(t):null},this.loadDataCaptureAdapter=async e=>{await this.loadSketch(e);const t=import("./adapters/sketch/DataCaptureAdapter.js"),{default:i}=await t;return y(e),this.sketchAdapter=new i({viewModel:this}),this.sketchAdapter},this.loadImageFromFeature=(e,t,i)=>this._updatingHandles.addPromise(this._loadImageFromFeature(e,t,i)),this.storeImageMeasurementViewer=e=>{this.imageMeasurementViewer=e},this.storePanoramicMeasurementViewer=e=>{this._panoramicMeasurementViewer=e},this.loadImageViewer=e=>{this._imageViewer?.destroy(),this._imageViewer=e},this.loadPanoramicViewer=e=>{this._panoramicViewer?.destroy(),this._panoramicViewer=e},this.loadPanoramicVideoViewer=e=>{this._panoramicVideoViewer?.destroy(),this._panoramicVideoViewer=e},this.loadVideoViewer=e=>{this.videoMapView.container=e},this.showImageByObjectId=async(e,t)=>{const i=this.additionalFeatures.find(({attributes:t})=>t.objectId===e);if(i)this.currentBestFeature=i;else{const{layer:i,layerFloorFilterClause:a,layerTimeExtent:s}=this;if(!i)return void this.setMessage("noLayerSelected","info");this.beforeLoad();const o=this._updatingHandles.addPromise(this._queryAndLoadByObjectId(i,e,a,s,t));try{await o,await this.selectBestFeature(e,t)}catch(r){v(r)||(u.getLogger(this).error("oriented-imagery-viewer:show-image",r),"NoFeatureFoundWithObjectIdError"===r.name?this.setMessage("noFeatureFoundWithObjectId","error","",{objectId:e}):this.setMessage("imageLoadError","error",r.message))}}},this.getSectorFeatureById=e=>this._suitabilities?.find(({feature:{attributes:{objectId:t}}})=>t===e),this.getFeatureSectorById=e=>this._featureToSector?.[`${e}`],this.navigate=async(e,t)=>{const{mode:i}=this;if("default"!==i&&"panoramic"!==i)throw new n("NavigationError","Navigation is only supported in 'default' and 'panoramic' modes.");const r=e=>"default"===i&&e.declaredClass.endsWith("NavigationManager")||"panoramic"===i&&e.declaredClass.endsWith("NavigationManagerPanoramic");if(null==this._navigationManager||!r(this._navigationManager)){p(this._navigationManager);const e="default"===i?import("./navigation/NavigationManager.js"):import("./navigation/NavigationManagerPanoramic.js");this._navigationManager=new(await e).default({viewModel:this})}return this._navigationManager.navigate(e,t)},this.removeHighlight=()=>this._highlightedFeatureHandle?.remove(),this.revealImageGeometry=e=>{},this.selectBestFeature=async(e,t)=>(y(t),this.currentBestFeature=this.features?.find(({attributes:t})=>`${t.objectId}`==`${e}`),_(()=>{switch(this.mode){case"video":return"video-loaded"===this.state;case"panoramic-video":return this.panoramicVideoLoaded;default:return"image-loaded"===this.state}},t)),this.toggleImageAttributes=()=>{const{currentBestFeature:e,popupEnabled:i,layer:r,view:a}=this;if(this.emit("popup-close"),!(a&&e&&i&&r))return;const{attributes:s,geometry:o}=e,n=new t({geometry:o,attributes:s.toJSON(),origin:r.graphicOrigin,sourceLayer:r});this.emit("popup-open",{features:[n],location:s.location.clone()})},this.updateSuitabilities=(e,t=!0)=>{e.sort((e,t)=>e.suitability-t.suitability),this._suitabilities=e;const i=this._suitabilities.map(({feature:e})=>e);this._initialCurrentCoverageUpdate=!0,this._updateFeatures(i,t),this._groupFeaturesBySectors()},this._computeOverlayImageSize=()=>{const{mode:e}=this;return"video"===e?ye:"panoramic-video"===e?this._panoramicVideoViewer.imageSize:this.activeViewer?.imageSize},this._geometryToOverlayImageGeometry=async(e,t,i)=>{const{mode:r,videoViewModel:a,_panoramicVideoViewer:s}=this;if("video"===r)return await(a?.geometryToOverlayGeometry(e,t))??null;if("panoramic-video"===r){const a={feature:t,mode:r,imageSize:i,footprintExtent:this.footprintExtent};return await this._transformationService.geometryToImageGeometryForFeature(e,a,s.horizonAngles)}return await this._transformationService.geometryToImageGeometry(e)},this._createViewClickHandle=()=>{if(this.removeHandles(Re.click),this.disabled||null==this.view)return;const e=this.mapImageConversionToolState&&("image-loaded"===this.state||"video-loaded"===this.state&&"video"===this.mode&&!!this.videoViewModel?.videoPaused||this.panoramicVideoLoaded&&"panoramic-video"===this.mode&&this.panoramicVideoPaused)?this._mapImageConversionToolViewClickHandler:this._viewClickHandler;this.addHandles(this.view.on("click",e,he.DEFAULT),Re.click)},this._createImageClickHandle=()=>{this.removeHandles(Re.imageClick),this.videoViewModel?.syncMapImageConversionHandle();const{mapImageConversionToolState:e,mode:t,footprintExtent:i,panoramicVideoLoaded:r}=this,s="panoramic-video"===t?this._panoramicVideoViewer:this.activeViewer,o=s?.imageSize;if(!e||"none"===t||"video"===t||!o||!i)return;const n="panoramic-video"===t,l=this._getActiveFeatureForCurrentMode(),d=!n||r&&this.panoramicVideoPaused;if(!l||!d)return;const u=s.clickAction;this.clickAction="pixel-location";const h=c(()=>{this.clickAction=u});let p=null;const m=F(()=>s,"pixel-location",e=>{this.plotReferencePointOnImage(e),p?.abort(),p=a(async r=>{if(!e)return;const a=this._getActiveFeatureForCurrentMode();if(!a)return;const s={feature:a,mode:t,imageSize:o,footprintExtent:i};let l=n?await this.getMapPointForFeature(e,s,{signal:r}):await this._transformationService.pixelToMapPoint(e);const c=this.view?.spatialReference;l&&!ee(!c,l.spatialReference.equals(c))&&(l=await G(l,c,{signal:r})),y(r),this.plotReferencePointOnGround(l)})});this.addHandles([m,h],Re.imageClick)},this._createTriangularImageClickHandle=()=>{this.removeHandles(Re.triangularImageClick),this.triangularMeasurementActive&&"none"!==this.mode&&this.currentBestFeature&&this.currentBestFeatureMeasurementImage&&this.activeTriangulatedViewer&&this.addHandles(this.activeTriangulatedViewer.imageRenderer.on("double-click",this._measurementImageClickHandler),Re.triangularImageClick)},this._enablePan=()=>{this.removeHandles(Re.videoPanHandles)},this._disablePan=()=>{this.removeHandles(Re.videoPanHandles),this.addHandles(Ke(this.videoMapView),Re.videoPanHandles)},this._handleImageHitTestResponse=async e=>{const{layer:t,overlayedCameraLocations:i}=this;if(!t)return;const r=e.results.find(({graphic:e,graphic:{attributes:r}})=>i.includes(e)&&r&&!r[t.imageReferenceField]&&!r[t.imageGeometryField]);if(!r)return;const a=r.graphic.attributes[t.objectIdField];await this.showImageByObjectId(a)},this._loadCurrentFeatureMedia=async(e,t)=>{if("video"===this.mode)return this._initializeVideo(),void this.videoViewModel?.playVideoFromSelectedLocation(e);"panoramic-video"!==this.mode?await this._loadImage(t):await this._loadVideo(t)},this._loadDepthImage=async e=>{const{currentBestFeature:t,layer:i,depthImageNotSupported:r}=this;if(this.depthImage?.destroy(),this.depthImage=null,!i||!t||r)return;const{depthImage:a}=t.attributes;if(!a)return;const s=(await import("./services/DepthImageService.js")).default;y(e),this.depthImage=new s({url:a});try{await this.depthImage.load(e)}catch(o){v(o)||(u.getLogger(this).error("error occurred while loading depth image",o),this.depthImage?.destroy(),this.depthImage=null)}},this._loadImage=async e=>{const{currentBestFeature:t,layer:i,mode:r}=this;if(this.clearGraphics(),i&&t&&"none"!==r&&"video"!==r&&"panoramic-video"!==r)try{await this.loadImageFromFeature(i,t,e),y(e),await this.transformAndPlotSelectedLocation(e)}catch(a){v(a)||this.loadImageError(a)}},this._loadVideo=async e=>{const{currentBestFeature:t,mode:i,selectedPoint:r}=this,a=t?.attributes.imagePath;if(!t||"panoramic-video"!==i||!a)return;const{attributes:s}=t,{cameraPitch:o,cameraOrientation:n,location:l}=s,c=l.spatialReference.isWGS84&&4!==n?.type?B(l):new L(l);try{this._panoramicVideoViewer.viewModel.video&&(this._panoramicVideoViewer.viewModel.video.pause(),this._panoramicVideoViewer.viewModel.videoPaused=!0),this._panoramicVideoViewer.videoSource=a;let t=0;c&&r&&(t=await te(c,r)-t),this._panoramicVideoViewer.pitch=o??0,this._panoramicVideoViewer.yaw=t,await this._panoramicVideoViewer.loadVideo(e),y(e)}catch(d){v(d)||this.loadImageError(d)}},this._loadImageFromFeature=async(e,t,i)=>{const{mode:r}=this;if("default"!==r&&"panoramic"!==r)return;let a;try{a=await ut(t.attributes,e,i),y(i)}catch(f){if(v(f))return;return xe(f)?(u.getLogger(this).error(f),void this.setMessage("noAttachment","error",`${e.objectIdField}: ${t.attributes.objectId}`)):(u.getLogger(this).error(f,{[e.objectIdField]:t.attributes.objectId,layer:e}),void this.setMessage("imageLoadError","error",`query-attachments-failed:${e.objectIdField} ${t.attributes.objectId}`))}if(!a)return;const{mediaUrl:s,datasetFormat:o,rotation:n,searchParams:l,location:c,cameraHeading:d,matrix:h,cameraPitch:p,getDataSetFormatError:m}=a,g=`${t.attributes.objectId}`;try{let a=this._mediaPrefetcher?.getCachedMedia(g);if(!a){const i=this.navigationNodes.find(e=>e.id===t.attributes.objectId);if(i){try{await(this._mediaPrefetcher?.startPrefetchForNode(i,e))}catch(w){}a=this._mediaPrefetcher?.getCachedMedia(g)}}if(a){if("panoramic"===r){const e=this.triangularMeasurementActive?this._panoramicMeasurementViewer:this._panoramicViewer;let r=0;return c&&this.selectedPoint&&(r=await te(c,this.selectedPoint)-r),await e.loadMedia(a,i),this.selectedPoint?e.set({yaw:r,pitch:p}):"viewAngle"in t.attributes&&Number.isFinite(t.attributes.viewAngle)&&e.set({yaw:t.attributes.viewAngle,pitch:p}),void(this.triangularMeasurementActive?await this.initializeReferenceTransformationService(i):await this.initializeTransformationService(i))}return await this._setImageSource(this.triangularMeasurementActive?this.imageMeasurementViewer:this._imageViewer,a,i),void(this.triangularMeasurementActive?await this.initializeReferenceTransformationService(i):await this.initializeTransformationService(i))}}catch(w){}m&&u.getLogger(this).warn("error occurred while getting dataset format",m),"panoramic"===r?await this.loadPanoramicMediaSource({lookAt:{yaw:this.selectedPoint?await te(c,this.selectedPoint):"viewAngle"in t.attributes&&Number.isFinite(t.attributes.viewAngle)?t.attributes.viewAngle:0,pitch:p},extension:o?.toUpperCase(),url:s,cameraHeading:d,matrix:h},i):await this.loadMediaSource({datasetFormat:o?.toUpperCase(),url:s,customParameters:l,rotation:n},i),this.triangularMeasurementActive?await this.initializeReferenceTransformationService(i):await this.initializeTransformationService(i)},this._loadMeasurementViewerImage=async e=>{const{currentBestFeatureMeasurementImage:t,layer:i,mode:r}=this;if(this.imageMeasurementViewer.clearGraphics(),this._panoramicMeasurementViewer.clearGraphics(),i&&t&&"none"!==r&&"video"!==r&&"panoramic-video"!==r)try{await this.loadImageFromFeature(i,t,e),y(e)}catch(a){v(a)||this.loadImageError(a)}},this._loadMediaPrefetcher=async e=>{if(!this._mediaPrefetcher){const{default:t}=await import("./support/MediaPrefetcher.js");y(e),this._mediaPrefetcher=new t({maxEntries:this.preloadMediaSize*fe.length})}return this._mediaPrefetcher},this._loadViewAdapter=async e=>{const{view:t}=this;if(this._adapter?.disableDefaultSuperimposeNavigation?.(),this._adapter?.disablePanoramicSuperimposeNavigation?.(),t)switch(t.type){case"2d":{const{default:t}=await import("./adapters/view/MapViewAdapter.js");y(e),this._adapter=new t(this);break}case"3d":{const{default:t}=await import("./adapters/view/SceneViewAdapter.js");y(e),this._adapter=new t(this);break}}else this._adapter=null},this._mapImageConversionToolViewClickHandler=e=>{if(e.stopPropagation(),e.preventDefault(),e.mapPoint){const t=e.mapPoint;t.x=x(t.x,t.spatialReference),this.plotMapPoint(e.mapPoint)}},this._measurementImageClickHandler=e=>{e.stopPropagation(),e.preventDefault();const{sketchTriangular:t,triangularMeasurementActive:i,currentBestFeatureMeasurementImage:r,triangulatedMeasurementGraphic:a}=this;t&&i&&r&&a&&"active"!==t.state&&(t.update([a],{tool:"reshape"}),this.updatingTriangularMeasurementState=!0)},this._updateInteraction=()=>{const e=this.videoMapView.extent;if(!e)return;const{minScale:t}=this.videoMapView.constraints,i=this.videoMapView.scale<t-we,r=Qe(e);i&&!!r?(this._enablePan(),this.videoMapView.constraints.geometry=r):i?(this._disablePan(),this.videoMapView.constraints.geometry=null):(this.initialVideoMapViewExtent&&!this.videoMapView.extent.equals(this.initialVideoMapViewExtent)&&(this.videoMapView.extent=this.initialVideoMapViewExtent),this._disablePan(),this.videoMapView.constraints.geometry=null)},this._viewClickHandler=e=>{this._clickTask?.abort(),this._clickTask=a(async t=>{const{pointerType:i,button:r,mapPoint:a}=e;if("mouse"===i&&0!==r||!a)return;e.stopPropagation(),e.preventDefault();const{view:s,layer:o}=this;if(s){if(o){if(this.shouldShowSelectedImage){const i=s.hitTest(e,{include:[o]});this._updatingHandles.addPromise(i);const r=await i;return y(t),await this._processHitTestResults(o,r,{signal:t})}return this._updatingHandles.addPromise(this.loadBestImage(a,{signal:t}))}this.setMessage("noLayerSelected","info")}})},this.plotSelectedPointOnImage=async(e,i)=>{if(await f(i),!e)return;const r=new L({...k(e)?e.toJSON():e});if("default"===this.mode)r.x-=.5,r.y=.5-r.y,r.spatialReference=this._imageViewer.imageRenderer.spatialReference.clone(),this._crossSymbol=new t({geometry:r,symbol:Ie}),this._imageViewer.addGraphic(this._crossSymbol,0);else if("panoramic"===this.mode){const{imageSize:i,media:r}=this._panoramicViewer;if(!i||!r)return;const a=Be(r),s=ie(e,...i,a);this._crossSymbol=new t({geometry:new L(s,E.WebMercator),symbol:Pe}),this._panoramicViewer.addGraphic(this._crossSymbol,0)}},this.handleSectorClick=this.handleSectorClick.bind(this),this.searchBestImage=this.searchBestImage.bind(this),this.transformAndPlotReferencePointOnImage=this.transformAndPlotReferencePointOnImage.bind(this)}initialize(){this.addHandles([b(()=>this.view,()=>this.load(),M),b(()=>this.view?.map,(e,t)=>{t?.layers.remove(this._overlays),e?.layers.add(this._overlays)},V),b(()=>this.view?.map?.allLayers?.length,e=>{e&&this.view?.map?.layers.reorder(this._overlays,e-1)},V),b(()=>[this.state,this.panoramicVideoLoaded,this.mapImageConversionToolState,this.view,this.disabled,this.panoramicVideoPaused,this.videoViewModel?.videoPaused],(e,t)=>{const i=e[2],r=t?.[2];r&&!i&&(this.plotReferencePointOnGround(null),this.clearReferencePointOnImage()),this._createViewClickHandle(),this._createImageClickHandle()},M),b(()=>[this.triangularMeasurementActive,this.currentBestFeatureMeasurementImage],()=>{this._createTriangularImageClickHandle()},M),b(()=>[this.state,this.imageLocationToolState,this.view],()=>{this._initializeMeasurementService(),this._initializeLocationViewModel()},M),b(()=>this.measureType,()=>{this.clearPreviousMeasurements(),this._initializeMeasurementService()},M),b(()=>this.bestFeatureAngle,(e,t)=>{this.previousFeatureAngle=t??0},M),b(()=>[this.superimposeViewEnabled,this.defaultSuperimposeCameraLockEnabled,this.superimposeViewSupported,this.currentBestFeature,this.mode,this.state,this.view?.type],()=>{this._shouldDisableUnsupportedSuperimposeView()?this.superimposeViewEnabled=!1:this._hasActiveSuperimposeCameraContext()?this._updateSuperimposedImage():this._resetInactiveSuperimposeState()},M),b(()=>this._getSuperimposeCameraWatchState(),()=>this._handleSuperimposeCameraChange(),M),b(()=>this.currentBestFeature,async(e,t)=>{m(this._featureChangedTask),this._featureChangedTask=a(async i=>this.determineWorkflowForFeature.apply(this,[e,t,{signal:i}])),await this._featureChangedTask.promise},{sync:!0}),b(()=>[this.currentNode,this.preloadMedia,this.navigationMode],()=>{this._mediaPrefetchTask?.abort(),this._mediaPrefetchTask=a(async e=>{this.preloadMedia&&null!=this.navigationMode?(this._mediaPrefetcher??=await this._loadMediaPrefetcher({signal:e}),y(e),"directional"===this.navigationMode?this._mediaPrefetcher.enqueueDirectionalPrefetch(this.layer,this.currentNode,this.preloadMediaSize):this._mediaPrefetcher.enqueueSequentialPrefetch(this.layer,this.currentNode,this.preloadMediaSize)):this._mediaPrefetcher?.clear()})},M),b(()=>this.currentBestFeatureMeasurementImage,(e,t)=>{m(this._featureChangedTask),t&&e!==t&&(this.triangulatedPoint=null,this.sketchTriangularGraphicsLayer?.graphics.destroyAll(),this._measurementService?.resetMeasurementVectors()),this._featureChangedTask=a(async i=>{await this.determineWorkflowForTriangularMeasurement(e,t,{signal:i}),y(i),this._reorderTriangularSketchLayer()})},M),b(()=>this.triangularMeasurementActive,(e,t)=>{t&&!e&&(this._measurementService?.resetMeasurementVectors(),this.currentBestFeatureMeasurementImage=null,this.triangulatedDistanceMeasurement=null,this.triangulatedMeasurementGraphic=null,this.triangulatedPoint=null,this.updatingTriangularMeasurementState=!1,this.triangulatedAreaMeasurement=null,this.triangulatedDistanceAccuracy=null,this.triangulatedAreaAccuracy=0,this.sketchTriangularGraphicsLayer?.graphics.destroyAll(),this.clearReferencePointOnImage(),this.imageMeasurementViewer.clearImage(),this.imageMeasurementViewer.clearGraphics(),this._panoramicMeasurementViewer.clearImage(),this._panoramicMeasurementViewer.clearGraphics())}),b(()=>this.mode,e=>{switch(this.removeHandles(Re.interactionHandles),e){case"default":this.addHandles(b(()=>{const{state:e}=this;return"image-loaded"===e?this._imageViewer.imagePointsInView:null},e=>{e&&(m(this._updateFootprintTask),this._updateFootprintTask=a(async t=>{await this.updateFootprint(e,void 0,{signal:t})}))},{...M,equals:(e,t)=>i(e,t,d)}),Re.interactionHandles);break;case"video":this.addHandles(b(()=>{const{footprintExtent:e,videoElement:t,bestFeatureFootprint:i}=this;if(e&&t?.loaded&&i)return{videoExtent:_e,bestFeatureFootprint:i}},e=>{e?.videoExtent&&e?.bestFeatureFootprint&&(m(this._updateFootprintTask),this._updateFootprintTask=a(async t=>{const i={points:e.videoExtent,feature:void 0,scale:void 0,options:{signal:t}};await this.updateVideoFootprint(i)}))},{...M,equals:(e,t)=>i(e?.videoExtent,t?.videoExtent,d)&&e?.bestFeatureFootprint===t?.bestFeatureFootprint}),Re.interactionHandles);break;case"panoramic":this.addHandles(b(()=>{const{currentBestFeature:e,state:t,_panoramicViewer:i}=this,{imageSize:r,vfov:a,hfov:s,pitch:o,yaw:n}=i;return e&&r&&!t.includes("loading")&&null!=a&&null!=s&&null!=o&&null!=n?[a,s,n,o]:null},e=>{if(!e||this.state.includes("loading"))return;const[t,i,r,s]=e;this.currentNode&&(this.currentNode.currentHeading=r,this.currentNode.currentPitch=s),m(this._updateFootprintTask),this._updateFootprintTask=a(async e=>{await this.updateFootprintPanorama({verticalFieldOfView:t,horizontalFieldOfView:i,yaw:r,pitch:s},{signal:e}),this._updateFootprintTask=null})},{equals:(e,t)=>i(e,t,d)}),Re.interactionHandles);break;case"panoramic-video":this.addHandles(b(()=>{const{currentBestFeature:e,state:t,_panoramicVideoViewer:i}=this,{imageSize:r,vfov:a,hfov:s,pitch:o,yaw:n,viewModel:l}=i,c=l.closestFeature??e;return c&&r&&!t.includes("loading")&&null!=a&&null!=s&&null!=o&&null!=n?[a,s,n,o,c]:null},e=>{if(!e)return;const[t,i,r,s,o]=e;m(this._updateFootprintTask),this._updateFootprintTask=a(async e=>{await this.updateFootprintPanorama({verticalFieldOfView:t,horizontalFieldOfView:i,yaw:r,pitch:s,feature:o,horizonAngles:this._panoramicVideoViewer.horizonAngles},{signal:e}),y(e),this._updateFootprintTask=null})},{equals:(e,t)=>i(e,t,d)}),Re.interactionHandles)}},M),b(()=>[this.brightness,this.contrast,this.sharpness],()=>{const{_imageViewer:e,brightness:t,contrast:i,mode:r,sharpness:a}=this;"default"===r&&(e.brightness=t,e.contrast=i,e.sharpness=a)},M),b(()=>this.activeViewer?.imageRenderer,()=>{this.sketch&&(this.sketch.view=this.activeViewer?.imageRenderer)}),b(()=>this.activeViewer,e=>{this.removeHandles(Re.hittestHandles),e&&this.addHandles(F(()=>e,"hittest-response",this._handleImageHitTestResponse),Re.hittestHandles)}),b(()=>this.videoMapView.extent,async()=>{this._scheduleVideoInteractionUpdate();const e=this.videoViewModel?.closestFeature;e&&(m(this._updateFootprintTask),this._updateFootprintTask=a(async t=>{const i={points:this.videoExtentPoints,feature:e,options:{signal:t}};await this.updateVideoFootprint(i)}))}),b(()=>[this.videoMapView.interacting,this.videoMapView.navigating,this.videoMapView.scale],()=>{this._scheduleVideoInteractionUpdate()},{initial:!0}),S(()=>null!=this.videoMapView.extent,()=>{this.initialVideoMapViewExtent=this.videoMapView.extent},{once:!0})]),this.when().finally(()=>{this.notifyChange("state")})}destroy(){this._adapter?.disableDefaultSuperimposeNavigation?.(),this._adapter?.disablePanoramicSuperimposeNavigation?.(),this._abortSuperimposeSchedule(),this.currentBestFeature=null,this._updateFootprintTask=m(this._updateFootprintTask),this._clickTask=m(this._clickTask),this._restoreSuperimposeMediaTask=m(this._restoreSuperimposeMediaTask),this.coverageFrustums.destroy(),this.coveragePolygons.destroy(),this.pointSources.destroy(),this.additionalFootprints.destroy(),this.additionalCameraLocations.destroy(),this.bestFeatureFootprint=p(this.bestFeatureFootprint),this.bestFeatureCurrentFootprint=p(this.bestFeatureCurrentFootprint),this.videoViewModel=p(this.videoViewModel),this._locationViewModel=p(this._locationViewModel),this._crossSymbol=p(this._crossSymbol),this._referencePointOnGround=p(this._referencePointOnGround),this.clearReferencePointOnImage(),this._superimposeService.destroy(),this._overlays&&this.view?.map?.remove(this._overlays),this._overlays.destroy(),this._imageViewer.destroy(),this.imageMeasurementViewer.destroy(),this._panoramicViewer.destroy(),this._panoramicMeasurementViewer.destroy(),this._mediaPrefetcher?.destroy()}get activeLayer(){return o(u.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer}set activeLayer(e){o(u.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer=e}get activeViewer(){const{_imageViewer:e,_panoramicViewer:t,mode:i}=this;switch(i){case"default":return e;case"panoramic":return t;default:return null}}get activeTriangulatedViewer(){switch(this.mode){case"default":return this.imageMeasurementViewer;case"panoramic":return this._panoramicMeasurementViewer;default:return null}}get accuracyParametersMissing(){return this.layer?.orientationAccuracy?.every(e=>0===e)??!0}get brightness(){return this._get("brightness")??0}set brightness(e){this._set("brightness",h(e,-10,10))}get contrast(){return this._get("contrast")??0}set contrast(e){this._set("contrast",h(e,-10,10))}get currentNode(){const{currentBestFeature:e,navigationNodes:t}=this;return t.find(t=>t.id===e?.attributes.objectId)}get depthImageNotSupported(){if(this.currentBestFeature?.attributes.depthImage)return!De(this.currentBestFeature.attributes.depthImage)}get featureCount(){return this.features?.length??0}get imageGalleryEnabled(){const{currentBestFeature:e}=this;if(!e)return!1;const t=e.attributes.imagePath?.trim();return De(t)||Se(t)}get imageLoaded(){return o(u.getLogger(this),"imageLoaded",{replacement:'Use OrientedImageryViewer.state === "image-loaded"',version:"4.29",warnOnce:!0}),"image-loaded"===this.state}get invalidCameraHeading(){return this.currentBestFeature?.attributes?.cameraHeading===Fe}get imagePointsInView(){const{mode:e,_imageViewer:t}=this;return"default"===e?t.imagePointsInView:null}get layerView(){const{layer:e,view:t}=this;if(e&&t)return t.allLayerViews.find(He(e))}get layerFloorFilterClause(){const{layerView:e}=this;return e?ne(e):null}get layerTimeExtent(){return this.layerView?.timeExtent??null}get mode(){const e=this.currentBestFeature?.attributes;if(!e)return"none";const t=e.orientedImageryType;if(t?.includes("video"))return t.includes("360")?"panoramic-video":"video";const{horizontalFieldOfView:i,isSpherical:r}=e;return 360===i||r?"panoramic":"default"}get panoramicVideoLoaded(){const{mode:e,_panoramicVideoViewer:t}=this,{videoLoaded:i}=t.viewModel;return("panoramic-video"===e&&!0===i)??!1}get overlayGraphicsEnabled(){const{mode:e,state:t,panoramicVideoLoaded:i,videoViewModel:r,panoramicVideoPaused:a}=this;return"image-loaded"===t||"video"===e&&"video-loaded"===t&&!0===r?.videoPaused||"panoramic-video"===e&&i&&a}get panoramicVideoPaused(){return!!this._panoramicVideoViewer.viewModel.videoPaused}get popupEnabled(){return!0===this.layer?.popupEnabled}get referencePoint(){return this._referencePointOnGround?.geometry}get sectorData(){const{_sectorData:e}=this;return e?be.map(t=>e[t]):null}get sharpness(){return this._get("sharpness")??0}set sharpness(e){this._set("sharpness",h(e,0,1))}get superimposeViewSupported(){return"default"===this.mode||"panoramic"===this.mode}get sketchGraphicsLayer(){const{sketch:e}=this;return"graphics"===e?.layer?.type?e.layer:void 0}get state(){const{mode:e,_updatingHandles:{updating:t},_featureChangedTask:i,_navigationManager:r}=this;if(!this.isFulfilled()||t||!1===i?.finished||r?.navigating)return"loading";if(this.isRejected())return"error";if("error"===this.displayMessage?.type)return"image-load-error";switch(e){case"default":return this._imageViewer.state;case"panoramic":return this._panoramicViewer.state;case"video":return this.videoElement?.loaded?"video-loaded":"video-not-loaded"}return"ready"}get thumbnails(){const{features:e}=this;return e?new s(e.map(({attributes:{imagePath:e,objectId:t,cameraRoll:i,imageRotation:r}})=>{const a=e?.trim();return De(a)||Se(a)?{url:a,objectId:t,rotation:(i??0)+(r??0)}:null}).filter(r)):null}get videoExtentPoints(){const e=Xe(this.videoMapView.extent);return e.length?e:_e}set view(e){this._set("view",e)}get _defaultGraphicsLayer(){const e={blendMode:"source-atop"};switch(this.mode){case"panoramic":return new D({...e,elevationInfo:{mode:"absolute-height"}});case"default":return new D({...e});default:return}}get _overlaysView(){return this.view?.layerViews.find(({layer:e})=>e===this._overlays)}updatePanoramicSuperimposeRadiusOffset(e){this._superimposeService.updatePanoramicRadiusOffset(e)}setDefaultSuperimposeZOffsetPercentage(e){this._superimposeService.setDefaultZOffsetPercentage(e)}setPanoramicSuperimposeRadiusPercentage(e){this._superimposeService.setPanoramicRadiusPercentage(e)}updateDefaultSuperimposeCameraLock(e){this.defaultSuperimposeCameraLockEnabled=e,this.superimposeViewEnabled&&"default"===this.mode&&(e?this._adapter?.enableDefaultSuperimposeNavigation?.():this._adapter?.disableDefaultSuperimposeNavigation?.())}beforeLoad(e=!0){this.emit("popup-close"),e&&(this.displayMessage=null),this._abortSuperimposeSchedule(),this._adapter?.disableDefaultSuperimposeNavigation?.(),this._adapter?.disablePanoramicSuperimposeNavigation?.(),this.clearPreviousGroundLocation(),this.triangularMeasurementActive=!1,this.currentBestFeatureMeasurementImage=null,this.measureType=null,this.imageLocationToolState=!1,this.features.removeAll(),this.currentBestFeature=null,this.additionalFeatures.removeAll(),this.additionalFootprints.removeAll(),this.additionalCameraLocations.removeAll(),this.bestFeatureCurrentFootprint=p(this.bestFeatureCurrentFootprint),this._restoreSuperimposeMediaTask=m(this._restoreSuperimposeMediaTask),this._superimposeService.clear(),this._overlays?.removeAll()}async calculateLocationAccuracy(e){return this._measurementService?.calculateLocationAccuracy(e)}clearLocationPointOnImage(e=!1){this.locationPointOnImage&&!e&&(this._imageViewer.removeGraphic(this.locationPointOnImage),this._panoramicViewer.removeGraphic(this.locationPointOnImage),this.locationPointOnImage=p(this.locationPointOnImage)),this.correctedLocationPointOnImage&&(this.imageMeasurementViewer.removeGraphic(this.correctedLocationPointOnImage),this._panoramicMeasurementViewer.removeGraphic(this.correctedLocationPointOnImage),this.correctedLocationPointOnImage=p(this.correctedLocationPointOnImage))}clearPreviousMeasurements(){this.clearMeasurementGraphics(),this.resetMeasurementData(),this.stopMeasurement()}clearPreviousGroundLocation(){this.groundCoordinates=null,this.groundCoordinatesAccuracy=null,this.pixelCoordinates=null,this.clearLocationPointOnImage()}clearMeasurementGraphics(){this.measurementGraphic&&(this.activeViewer?.removeGraphic(this.measurementGraphic),this.measurementGraphic=null),this.heightGraphic&&(this.activeViewer?.removeGraphic(this.heightGraphic),this.heightGraphic=null),this.triangularMeasurementActive&&this.sketchTriangularGraphicsLayer?.graphics.destroyAll()}digitizeCancel(){return this.sketch?.cancel()}digitizeCanRedo(){return this.sketch?.canRedo()??!1}digitizeCanUndo(){return this.sketch?.canUndo()??!1}digitizeComplete(){return this.sketch?.complete()}async digitizeCreate(e,t){const{sketch:i,dataCaptureLayer:r}=this;if(!i)throw pt();ot(r,e,i),await i.create(e,{...t,defaultZ:0})}digitizeDelete(){if(!this.sketch)throw pt();return this.sketch.delete()}digitizeDuplicate(){if(!this.sketch)throw pt();return this.sketch.duplicate()}digitizePlace(e,t){if(!this.sketch)throw pt();return this.sketch.place(e,t)}digitizeRedo(){if(!this.sketch)throw pt();return this.sketch.redo()}digitizeUndo(){if(!this.sketch)throw pt();return this.sketch.undo()}digitizeUpdate(e,t){if(!this.sketch)throw pt();return this.sketch.update(e,t)}filterByFootprints(e,t,i=!1){const r=[],a=[],s=[];return e.forEach(e=>{const{layer:{coveragePercent:o},attributes:n}=e;let l;const{polygon:c,frustum:d}=q(n);if(l=c.clone(),n.isInspection&&(l=W(n)),o&&(l=$(l,o)),i||!t||Z(l,t)){s.push(e);const{geometry:t,objectId:i,cameraHeight:o,cameraHeading:l}=n,u=t.clone();u.z=o/K(t.spatialReference),u.imageID=i,this.pointSources.push(u),l!==Fe&&(r.push(c),d&&a.push(d))}}),{features:s,polygons:r,frustums:a}}async deleteDataCaptureFeatures(e){const{dataCaptureLayer:t}=this;if(!t)throw new n("orientedimageryviewer:missing-featurelayer","Data capture layer is not available");return t.queryFeatures({objectIds:e,outFields:[t.objectIdField]}).then(({features:e})=>t.applyEdits({deleteFeatures:e}))}handleSectorClick(e){if(isNaN(e))return;const t=this._sectorData?.[be[e]],i=t?.at(0);i&&(this.triangularMeasurementActive&&this.currentBestFeature?this._updateImageMeasurementBestFeature(i):this._updateCurrentBestFeature(i))}handleFeatureClick(e){const{sector:t,featureIndexInSector:i}=e;if(isNaN(i))return;const r=this._sectorData?.[t],a=r?.at(i);a&&(this.triangularMeasurementActive&&this.currentBestFeature?this._updateImageMeasurementBestFeature(a):this._updateCurrentBestFeature(a))}load(e){return this.addResolvingPromise(this._loadViewAdapter(e).catch(e=>{if(!v(e))throw e})),this}async loadBestImage(e,t){return this.selectedPoint=Q(e),this.beforeLoad(),this._fetchFeaturesWithController(e,t)}async loadHeightMeasurementAdapter(e){if(!this.drawAdapter){const t=import("./adapters/draw/HeightMeasurementAdapter.js"),{default:i}=await t;if(y(e),this.drawAdapter=new i({viewModel:this,measurementService:this._measurementService}),!this.drawAdapter.viewModel.isResolved())return}return this.drawAdapter}loadImageError(e){u.getLogger(this).error("oriented-imagery-viewer:load-image",e),this.setMessage("imageLoadError","error",e.message)}async loadSketch(e){if(!this.sketch){const t=import("../Sketch/SketchViewModel.js"),{default:i}=await t;y(e),this.sketch=new i({layer:this._defaultGraphicsLayer,view:this.activeViewer?.imageRenderer,updateOnGraphicClick:!1,defaultUpdateOptions:{reshapeOptions:{edgeOperation:"none",shapeOperation:"none",vertexOperation:void 0},enableMoveAllGraphics:!1,enableRotation:!1,enableScaling:!1,multipleSelectionEnabled:!1,toggleToolOnClick:!1,tool:"transform"}})}return this.sketch}async loadMeasurementAdapter(e){if(!this.sketchAdapter){const t=import("./adapters/sketch/MeasurementAdapter.js"),{default:i}=await t;if(y(e),this.sketchAdapter=new i({viewModel:this,measurementService:this._measurementService}),!this.sketchAdapter.viewModel.isResolved())return}return this.sketchAdapter}async processFeatureResponse(e,t,i){const{features:r}=e;if(this._clearFeatureGeometries(),!this._checkFeatures(r))return;const{features:a,polygons:s,frustums:o}=this.filterByFootprints(r,t,i?.skipFilter);if(!this._checkFeatures(a))return;this.coveragePolygons.addMany(s),this.coverageFrustums.addMany(o);const n=await this.processElevationSample(s,a,i);y(i),await this._updateElevationOfSelectedPointAndLocations(a,t,n),y(i),ze(a,n);let l=a;if(this.layer?.verticalSearchRange&&this.layer.hasZ&&this.verticalFilterEnabled&&(l=Ne(a,t,this.layer.verticalSearchRange),!l.length))return void this.setMessage("noImageAtElevation","info");const c=this._processSuitableFeatures(l,t);this.updateSuitabilities(c,i?.loadBestImage)}async processFeatureElevation(e,t,i){if(!t)return;const{features:r,polygons:a}=this.filterByFootprints(e,t,!0);if(!r?.length)return;const s=await this.processElevationSample(a,r,i);return y(i),s}async startMeasurement(e,t){this.sketch||await this.loadSketch(t),await this.loadMeasurementAdapter(t);const{sketch:i,sketchAdapter:r,activeViewer:a,mode:s}=this;if(!i||!r||!a||"none"===s)return;if(this.displayNewMeasurementButton=!1,"panoramic"===s&&(i.defaultCreateOptions.defaultZ=0),await i.create(e),"panoramic"===s){const{drawOperation:e}=i.view.activeTool;e.constraintsEnabled=!1,e._set("elevationDrawSurface",null)}const o=this.activeViewer?.imageRenderer.effectiveTheme.accentColor;o&&this.sketch&&(this.sketch.polygonSymbol=Ce(o),this.sketch.polylineSymbol="panoramic"===s?Ae:ke(o,2.5))}async startHeightMeasurement(){this.displayNewMeasurementButton=!1,this.draw??=new de({view:this.activeViewer?.imageRenderer}),this.polylineDrawAction=this.draw.create("polyline"),await this.loadHeightMeasurementAdapter()}initializeMeasurement(e){switch(this.clearMeasurementGraphics(),this.resetMeasurementData(),e){case"distance":this.startMeasurement("polyline");break;case"area":this.startMeasurement("polygon");break;case"height":this.startHeightMeasurement()}}async overlayCameraLocations(e){const{activeViewer:i,overlayedCameraLocations:a,layer:s,mode:o,layerFloorFilterClause:n,layerTimeExtent:l,videoViewModel:c,_panoramicVideoViewer:d}=this,u="video"===o,h="panoramic-video"===o,p=this._getActiveFeatureForCurrentMode(),m=this._computeOverlayImageSize();if(!(m&&p&&s&&"none"!==o&&this.overlayGraphicsEnabled))return;const{polygon:g}=q(p.attributes);if(u?c?.removeOverlayGraphics(a.toArray()):h?d.removeManyGraphics(a.toArray()):i?.removeManyGraphics(a.toArray()),a.removeAll(),e){const{features:e}=await s.queryFeatures({where:I(`${s.objectIdField} <> ${p.attributes.objectId}`,I(s.definitionExpression,n)),geometry:g,returnGeometry:!0,outFields:[s.objectIdField],timeExtent:l}),v=await Promise.all(e.map(async e=>{const{attributes:i,geometry:r}=e;if("point"!==r?.type)return null;const a=await this._geometryToOverlayImageGeometry(r,p,m);if(!a)return null;const s="panoramic"===o||"panoramic-video"===o?Te():Oe();return new t({attributes:i,symbol:s,geometry:a})}));a.addMany(v.filter(r)),u?c?.addOverlayGraphics(a.toArray()):h?d.addManyGraphics(a.toArray()):i?.addManyGraphics(a.toArray())}}overlayGraphicsOnImage(e,t){this.removeOverlayedGraphicsOnImage(e),this.overlayedMapFeatures.set(e,t),"video"!==this.mode?"panoramic-video"!==this.mode?this.activeViewer?.addManyGraphics(t.toArray()):this._panoramicVideoViewer.addManyGraphics(t.toArray()):this.videoViewModel?.addOverlayGraphics(t.toArray())}async overlayMapFeatures(e,i=!1){const{activeViewer:a,mode:o,layer:n,videoViewModel:l,_panoramicVideoViewer:c}=this,d="video"===o,h="panoramic-video"===o,p=this._getActiveFeatureForCurrentMode(),m=this._computeOverlayImageSize();if(!(m&&p&&"none"!==o&&this.overlayGraphicsEnabled&&n))return;const{polygon:g}=q(p.attributes);try{const{imageGeometryField:t,oiObjectIdField:i}=nt(e,n.imageGeometryField,n.imageReferenceField);this.imageGeometryField=t.name,this.oiObjectIdField=i.name}catch(w){u.getLogger(this).warn("oriented-imagery-viewer:overlay-map-features",w)}const{features:v}=await e.queryFeatures({geometry:g,returnGeometry:!0,outFields:["*"]}),y=await Promise.all(v.map(async r=>{const s=r.symbol?.clone()??e.renderer?.getSymbol(r)?.clone(),{attributes:n,geometry:g}=r,{imageGeometryField:v,oiObjectIdField:y}=this;if(v&&y&&ht(e,v,y)&&`${n[y]}`==`${p.attributes.objectId}`)try{const r=h?c.horizonAngles:Be(a?.media),u=lt(n,v,e,i,m,d?"default":o,s,r);if(!d)return u;const p=u.geometry;if(!p)return null;const g=l?.imageGeometryToOverlayGeometry(p);return g?new t({attributes:n,layer:e,symbol:u.symbol,geometry:g,visible:u.visible}):null}catch(w){u.getLogger(this).warn("oriented-imagery-viewer:overlay-map-features","couldn't create graphic from attributes, geometry will be used",{error:w,feature:r,layer:e,imageGeometryField:this.imageGeometryField,imageReferenceField:this.oiObjectIdField})}if(!g)return null;const f={feature:p,imageSize:m,footprintExtent:this.footprintExtent},_=await this._geometryToOverlayImageGeometry(g,f.feature,f.imageSize);return _?new t({attributes:n,layer:e,symbol:s,geometry:_,visible:e.visible&&i}):null})),f=new s(y.filter(r));("video"!==o&&"panoramic-video"!==o||this.overlayGraphicsEnabled)&&this.overlayGraphicsOnImage(`${e.id}`,f)}getDepthAt(e){const{activeViewer:t,currentBestFeature:i,mode:r,state:a,depthImage:s}=this,o=t?.imageSize;if(!o||!i||"none"===r||a.includes("loading"))return u.getLogger(this).warnOnce("oriented-imagery-viewer:get-depth-at","Load an image to use depth"),null;if(!s?.loaded)return u.getLogger(this).error("oriented-imagery-viewer:get-depth-at","Depth image is not loaded"),this.emit("depth-image-service:not-loaded"),null;const n=(Array.isArray(e)?e:[e]).map(e=>s.depthAt(e,{width:o[0],height:o[1]})??null);return Array.isArray(e)?n:n[0]}getActiveSectors(){return be.filter(e=>this._sectorData?.[e]?.length)}async getPixelLocationForFeature(e,t,i){return(await this._transformationService.pointToPixelForFeature([e],t,i))[0]}async getPixelLocationsForFeature(e,t,i){return await this._transformationService.pointToPixelForFeature(e,t,i)}async plotMapPoint(e){this.plotReferencePoint(e);const t=this._getActiveFeatureForCurrentMode();if(t)return this.transformAndPlotReferencePointOnImage({feature:t,selectedLocation:e,options:{signal:this._transformController?.signal}})}plotReferencePointOnGround(e){this._referencePointOnGround&&(this._overlays?.remove(this._referencePointOnGround),this._referencePointOnGround.destroy()),null!=e&&(this._referencePointOnGround=new t({geometry:new L({...e.toJSON()}),symbol:Le}),this.view?this._overlays?.add(this._referencePointOnGround):this.emit("plot-ground-point",{data:{point:this._referencePointOnGround?.geometry}}))}plotReferencePointOnImage(e){switch(this.mode){case"video":return void this._plotReferencePointOnVideo(e);case"panoramic-video":return void this._plotReferencePointOnPanoramicVideo(e);case"default":return void this._plotReferencePointOnDefaultImage(e);case"panoramic":return void this._plotReferencePointOnPanoramicImage(e)}}removeAllOverlayMapFeatures(){const{mode:e}=this;this.overlayedMapFeatures.forEach(t=>{const i=t.toArray();switch(e){case"video":this.videoViewModel?.removeOverlayGraphics(i);break;case"panoramic-video":this._panoramicVideoViewer.removeManyGraphics(i);break;default:this.activeViewer?.removeManyGraphics(i)}}),this.overlayedMapFeatures.clear()}removeOverlayedGraphicsOnImage(e){const t=this.overlayedMapFeatures.get(e),{mode:i}=this;if(!t?.length)return;const r=t.toArray();switch(i){case"video":this.videoViewModel?.removeOverlayGraphics(r);break;case"panoramic-video":this._panoramicVideoViewer.removeManyGraphics(r);break;default:this.activeViewer?.removeManyGraphics(r)}this.overlayedMapFeatures.delete(e)}reset(){const{mode:e}=this;"default"===e||"panoramic"===e?this.resetImage():"video"===e?this.resetVideo():"panoramic-video"===e&&this.resetVideoPanoramic(),this.beforeLoad(!1)}resetImage(){switch(this.setMessage("onLoadMessage","info"),this.mode){case"default":this._imageViewer.clearImage(),this._imageViewer.clearGraphics();break;case"panoramic":this._panoramicViewer.clearGraphics()}this._clickTask=m(this._clickTask)}resetVideo(){this.setMessage("onLoadMessage","info"),this.videoViewModel?.resetVideoHandler(),this._overlays?.removeAll(),this.videoViewModel=null,this.featureCache=[],this.currentBestFeature=null}resetVideoPanoramic(){this.setMessage("onLoadMessage","info"),this._overlays?.removeAll(),this.currentBestFeature=null}resetMeasurementData(){this.areaMeasurementResult=0,this.areaMeasurementAccuracy=0,this.distanceMeasurementResult=0,this.distanceAccuracyArray=[],this.heightMeasurementResult=0,this.heightMeasurementAccuracy=0,this.heightGraphic=null,this.triangulatedDistanceMeasurement=null,this.triangulatedDistanceAccuracy=null,this.triangulatedAreaMeasurement=null,this.triangulatedMeasurementGraphic=null,this.updatingTriangularMeasurementState=!1,this.triangulatedAreaAccuracy=0,this._measurementService?.resetMeasurementVectors()}async saveDrawing(){const{dataCaptureLayer:e,sketchAdapter:t}=this;if(!e||"data-capture"!==t?.type)return;const{pendingGraphics:i,savedGraphics:r}=t,a=i.get(e.id),s=a?.toArray();if(!a||!s?.length)return;const{addFeatureResults:o}=await this.saveDataCaptureFeatures(s),n=o.reduce((t,{objectId:i,globalId:r,error:a},o)=>{const n=s[o],{attributes:l}=n;return a?t.error.push(n):(i&&(l[e.objectIdField]=i),r&&e.globalIdField&&(l[e.globalIdField]=r),t.success.push(n)),t},{success:[],error:[]});r.addMany(n.success),a.removeAll(),a.addMany(n.error)}async saveDataCaptureFeatures(e,t){const{activeViewer:i,currentBestFeature:a,dataCaptureLayer:s,mode:o}=this,l=i?.imageSize;if(!l||!a||"none"===o||"video"===o||"panoramic-video"===o)throw new n("orientedimageryviewer:missing-input","Image size, current best feature and mode are required to save data capture features");if(!s)throw new n("orientedimageryviewer:missing-featurelayer","Data capture layer is not available");const c=await Promise.all(e.map(async e=>{const i=e.clone(),{geometry:r}=i;if(!r)return;const a=r.type,o=s.hasZ,n=s.geometryType,l=a!==n,c=l?await import("./transformers.js"):null,d=c?.default[n],u=l?d?.(r):r;return u&&(i.geometry=await this._transformationService.imageGeometryToMapGeometry(u,t),i.geometry)?(o||ct(i.geometry),i):void 0})),d=c.filter(r);return s.applyEdits({addFeatures:d}).then(e=>{const{addFeatureResults:t}=e;let i=0;const r=c.map(e=>{const r=t[i++];return e?r:{error:new n("orientedimageryviewer:save-unsucccessful","Error in saving data capture features"),objectId:null,globalId:null}});return{...e,addFeatureResults:r}})}async searchBestImage(e,t){try{const i=await z(e,t);i&&await this.processFeatureResponse(i,e.point,t)}catch(i){v(i)||(this.setMessage("imageLoadError","error",i.message),u.getLogger(this).error("error occurred while finding best image",i))}}selectTriangularMeasurementFeature(e){this.currentBestFeatureMeasurementImage=this.features?.find(({attributes:t})=>t.objectId===Number(e))}setAdditionalCameraLocationsVisibility(e){this.additionalCameraLocations.forEach(t=>{t.visible=e})}setAdditionalCoverageVisibility(e){this.additionalFootprints.forEach(t=>{t.visible=e})}setCurrentCoverageVisibility(e){this.bestFeatureCurrentFootprint&&(this.bestFeatureCurrentFootprint.visible=e),this.currentBestFeatureLocation&&(this.currentBestFeatureLocation.visible=e)}setMapImageConversionToolState(e){this.mapImageConversionToolState=e}setCurrentPanoramaView(e,t){this._panoramicViewer?.set({yaw:e,pitch:t})}async startDataCapture(e,t){const i=this.activeViewer?.imageRenderer,{oiObjectIdField:r,currentBestFeature:a}=this;if(!i||!a||!r)return;const{attributes:{objectId:o}}=a,n=this.overlayedMapFeatures.get(e.id)?.toArray()??[],l=[],c=[];for(const s of n)`${s.getAttribute(r)}`==`${o}`?l.push(s):c.push(s);this.overlayGraphicsOnImage(e.id,new s(c)),this.collectionId=e.id;const d=await this.loadSketch(t),u=await this.loadDataCaptureAdapter(t);y(t),d.addGraphics(l),u.savedGraphics.addMany(l);i.ui.find("zoom").visible=!1,i.map.layers.add(this.sketchGraphicsLayer)}async stopDataCapture(e=!1){this.sketch?.cancel(),this.sketchGraphicsLayer?.removeAll(),this.sketchAdapter=p(this.sketchAdapter),this.sketch=p(this.sketch),this.collectionId=null;const{dataCaptureLayer:t}=this,i=this.activeViewer?.imageRenderer;if(!i||i.destroyed)return;i.map.layers.remove(this.sketchGraphicsLayer),e&&t&&await this.overlayMapFeatures(t,!0);const r=i.ui.find("zoom");r&&(r.visible=!0)}stopMeasurement(){this.draw?.reset(),this.sketch?.cancel()}async toggleAllOverlayMapFeatures(e){!e&&this.dataCaptureLayer&&(await this.stopDataCapture(!0),this.dataCaptureLayer=null),this.overlayedMapFeatures.forEach(t=>{this._toggleVisiblity(t,e)})}toggleOverlayMapFeatures(e,t,i){const r=this.overlayedMapFeatures.get(e);r&&i&&this._toggleVisiblity(r,t)}toggleSelection(e){const{sketch:t}=this;t&&(t.updateOnGraphicClick=e,t.cancel())}async transformAndPlotReferencePointOnImage(e){const{feature:t,selectedLocation:i,options:r}=e;let a=!1,s=!1;const o="video"===this.mode?this.bestFeatureCurrentFootprint?.geometry:this.bestFeatureFootprint?.geometry;switch(o?.type){case"polygon":{const e=i.spatialReference.equals(o.spatialReference)?i:await G(i,o.spatialReference);a=o.contains(e);break}case"mesh":{const e=i.spatialReference.equals(o.spatialReference)?i:await G(i,o.spatialReference);s=o.extent.contains(e);break}}if(!a&&!s)return void this.clearReferencePointOnImage();const n="video"===this.mode||"panoramic-video"===this.mode?await this.getPixelLocationForFeature(i,{feature:t,mode:this.mode,imageSize:ye,footprintExtent:this.footprintExtent},r):await this._transformationService.pointToPixel(i,r);if(n)return y(r),this.plotReferencePointOnImage(n),{x:n.x,y:n.y};this.clearReferencePointOnImage()}async updateFeatureCache(e,t){const i=await N(e,t);i.features?.length&&(this.featureCache=i.features)}_plotReferencePointOnVideo(e){"video-loaded"===this.state&&this.videoViewModel?.videoPaused&&(this.clearReferencePointOnImage(),this.videoViewModel.plotReferencePointOnVideo(e))}_plotReferencePointOnPanoramicVideo(e){const i=this._panoramicVideoViewer,{imageSize:r,media:a}=i.viewModel;if(!this.panoramicVideoLoaded||!this.panoramicVideoPaused||!r)return;this.clearReferencePointOnImage();const s=Be(a),o=dt(e,"panoramic",r,s);this._referencePointOnImage=new t({geometry:o,symbol:Ge.clone()}),i.addGraphic(this._referencePointOnImage,0)}_getActiveFeatureForCurrentMode(){switch(this.mode){case"video":return this.videoViewModel?.closestFeature??this.currentBestFeature;case"panoramic-video":return this._panoramicVideoViewer.viewModel.closestFeature??this.currentBestFeature;default:return this.currentBestFeature}}_plotReferencePointOnDefaultImage(e){const i=this._imageViewer,{imageSize:r}=i;if("image-loaded"!==this.state||!r)return;this.clearReferencePointOnImage();const a=dt(e,"default",r);this._referencePointOnImage=new t({geometry:a,symbol:Le.clone()}),i.addGraphic(this._referencePointOnImage,0)}_plotReferencePointOnPanoramicImage(e){const i=this._panoramicViewer,{imageSize:r,media:a}=i;if("image-loaded"!==this.state||!r)return;this.clearReferencePointOnImage();const s=Be(a),o=dt(e,"panoramic",r,s);this._referencePointOnImage=new t({geometry:o,symbol:Ge.clone()}),i.addGraphic(this._referencePointOnImage,0)}async _fetchFeatures(e,t){const{layer:i,layerFloorFilterClause:r,layerTimeExtent:a,view:s}=this;if(!s)return;if(!i)return void this.setMessage("noLayerSelected","info");e.x=x(e.x,e.spatialReference);const o=i.spatialReference.equals(e.spatialReference)?e:await G(e,i.spatialReference),n=o.spatialReference.isGeographic?B(o):o,l=I("1=1",I(i.definitionExpression,r)),c=n.spatialReference.isGeographic?1:P(n.spatialReference),d={layerInstanceOrURL:i,point:n,queryParams:{where:l,maximumDistance:i.maximumDistance?i.maximumDistance/c:void 0,timeExtent:a}};return await this.searchBestImage(d,t)}async _fetchFeaturesWithController(e,t){try{await this._fetchFeatures(e,t)}catch(i){if(v(i))return;this.setMessage("imageLoadError","error"),u.getLogger(this).error("error occurred while fetching features",i)}}_groupFeaturesBySectors(){const{_suitabilities:e,additionalFeatures:t,features:i,invalidCameraHeading:r}=this,a=i.at(0);if(!e||!t||!a||!i||r)return void(this._sectorData=null);this._sectorData={};const o={};this._featureToSector=o;for(const d of be)this._sectorData[d]=new s;const n=e.map((e,t)=>({...e,featureIndex:t}));n.sort((e,t)=>e.trueSuitability-t.trueSuitability);const l=n.map(({distance:e})=>e),c=Math.max(...l);n.forEach(e=>{const{distance:t,angle:r,featureIndex:s}=e,n=t/c*Ve[2],l=Ze(t,c),d=Je(r);if(!this._sectorData)return;const u=Ve[3]+n*Math.sin(r*Math.PI/180),h=Ve[3]+n*Math.cos(r*Math.PI/180);let p;const m=i.at(s),g=m===a,{cameraPitch:v}=m.attributes,y=v<5;if(g&&y)p=-90;else{const e=u-Ve[3],t=h-Ve[3],i=t/Math.sqrt(e**2+t**2);let r=180*Math.acos(i)/Math.PI;(e<0&&t<0||e<0&&t>0)&&(r*=-1),p=r}const f=""===l?d:`${l}_${d}`;g&&(p===this.bestFeatureAngle?this.previousFeatureAngle=p:this.bestFeatureAngle=p,this.navigatorCurrentBestFeature=y?null:{x:u,y:h,direction:d}),o[`${m.attributes.objectId}`]=f;const w=this._sectorData[f];w.add({angle:r,featureIndex:s,x:u,y:h,objectID:m.attributes.objectId,sector:f,featureIndexInSector:w.length})})}async _initializeLocationViewModel(e){if(!this._locationViewModel){const t=import("./components/ImageLocationViewModel.js"),{default:i}=await t;y(e),this._locationViewModel=new i({oiViewModel:this,referenceTransformationService:this._referenceTransformationService})}}_initializeMeasurementService(){this._measurementService||(this._measurementService=new at({transformationService:this._transformationService,referenceTransformationService:this._referenceTransformationService}))}_initializeVideo(){if(this.videoElement||!this.currentBestFeature)return;this.removeHandles(Re.videoPlayerHandles),this.videoElement=new le({video:this.currentBestFeature.attributes.imagePath,georeference:new oe({extent:new O(Me)}),autoplay:!1}),this.videoElement.content?.loop&&(this.videoElement.content.loop=!1);const e=new H({source:this.videoElement,title:this.layer?.title,copyright:this.layer?.copyright});this.videoLayer=e,e&&this.videoMapView.map.layers.add(e),this.videoViewModel=new tt({oiViewModel:this})}async getMapPoint(e,t){const i=await this._transformationService.pixelToMapPoint(Array.isArray(e)?e:[e],t);return Array.isArray(e)?i:i[0]}async getMapPointForFeature(e,t,i){const r=await this._transformationService.pixelToMapPointForFeature(Array.isArray(e)?e:[e],t,i);return Array.isArray(e)?r:r[0]}async loadPanoramicMediaSource(e,t){const{lookAt:i,...r}=e,a=Ue(r);try{await a.load(t)}catch(o){if(v(o))return;if("unsupported-format"===o.name)return void this.setMessage("unsupportedPanoramicImageryError","error",void 0,{datasetFormat:a?.extension??"UNKNOWN FORMAT"})}const s=this.triangularMeasurementActive?this._panoramicMeasurementViewer:this._panoramicViewer;await s.loadMedia(a,t),i&&s.set(i)}async loadMediaSource(e,t){const i=qe(e);await this._setImageSource(this.triangularMeasurementActive?this.imageMeasurementViewer:this._imageViewer,i,t)}_clearFeatureGeometries(){this.coveragePolygons.removeAll(),this.coverageFrustums.removeAll(),this.pointSources.removeAll()}_checkFeatures(e){return!!e?.length||(this.emit("no-image-found"),this.setMessage("noImageError","error"),this.videoElement?.content?.pause(),this.currentBestFeature=null,!1)}async _getElevationSampleFromGround(e,t,i){if(!e[0])return;const r=(await import("../../geometry/operators/unionOperator.js")).executeMany(e);if(this._updateFootprintWithFeatures(t,r),"3d"===this.view?.type)try{return await this.view.map.ground.createElevationSampler(this.footprintExtent,i)}catch(a){v(a)||u.getLogger(this).error(a)}}async processElevationSample(e,t,i){const{elevationSource:r}=t[0].attributes,a=await this._getElevationSampleFromGround(e,t,i);return a||(r&&this.footprintExtent&&J(r)?await Y({extent:this.footprintExtent,lod:r.lod,url:r.url,rasterFunction:r.rasterFunction}):void 0)}_processSuitableFeatures(e,t){return U({features:e,selectedPoint:t,camera:We(this.view)?this.view.camera:null,currentImage:this.currentBestFeature})}async _processHitTestResults(e,t,i){const{results:[r]}=t;if("graphic"!==r?.type)return this.beforeLoad(!1),this.emit("no-image-found"),void this.setMessage("noImageError","error");const a=r.graphic.getAttribute(e.objectIdField);return await this.showImageByObjectId(a,i)}async _queryAndLoadByObjectId(e,t,i,r,a){this.displayMessage=null;const{response:s}=await rt(e,t,i,r,a);if(y(a),!s?.features?.length)throw new it(t);const o=q(s.features[0].attributes).polygon,n=L.fromJSON(j(o)),l=Q(n),c=P(l.spatialReference);this.selectedPoint=l;const d={layerInstanceOrURL:e,point:l,queryParams:{where:I(I("1=1",I(e.definitionExpression,i)),`${e.objectIdField} <> ${t}`),maximumDistance:e.maximumDistance?e.maximumDistance/c:void 0,timeExtent:r}},u=await z(d,a);y(a);const{features:h}=u;return h.push(s.features[0]),await this.processFeatureResponse(u,l,{...a,loadBestImage:!1})}_reorderTriangularSketchLayer(){const e=this.imageMeasurementViewer.imageRenderer.map.layers?.length;this.sketchTriangularGraphicsLayer&&e&&this.imageMeasurementViewer.imageRenderer.map.layers.reorder(this.sketchTriangularGraphicsLayer,e-1)}async _setImageSource(e,t,i){e.media=t,await e.loadMedia(t,i)}_toggleVisiblity(e,t){e.forEach(e=>{e.visible=t})}async _updateElevationOfSelectedPointAndLocations(e,t,i,r){const{location:a,cameraHeight:s}=e[0].attributes,o=await re(a.spatialReference,a.z,s,{elevationSample:i,elevationSource:i?void 0:e[0].attributes.elevationSource,extent:this.footprintExtent},r);y(r);const[n,...l]=await X([t,...e.map(e=>e.attributes.geometry.clone())],o);y(r),t.elevation=n.z,e.forEach((e,t)=>{e.attributes.elevation=l[t].z})}_updateFeatures(e,t=!0){if(!e.length)return this.currentBestFeature=null,void this.additionalFeatures.removeAll();this.features.removeAll(),this.features.addMany(e),this.navigationNodes.removeAll(),this.navigationNodes.addMany(e.map(e=>{const{geometry:t,attributes:i}=e,{isSpherical:r,cameraHeading:a,cameraPitch:s}=i;return new et({geometry:t,attributes:i,currentHeading:r?0:a,currentPitch:r?0:s})})),e.length>1?this.additionalFeatures.addMany(e.slice(1)):this.additionalFeatures.removeAll(),this._updateGroundElevation=!0,t&&(this.currentBestFeature=e[0])}_updateFootprintWithFeatures(e,t){const i=[];for(const{attributes:{geometry:r}}of e)t.contains(r)||i.push([r.x,r.y]);i.sort((e,t)=>+R([e,t])),t.addRing(i),this.footprintExtent=ue(t.extent,2,2)}_scheduleVideoInteractionUpdate(){this.scheduledFrameId||(this.scheduledFrameId=requestAnimationFrame(()=>{this.scheduledFrameId=null,this._updateInteraction()}))}async _updatePointsAndPolygons(e){const{pointSources:i,currentBestFeature:r,currentCoverageVisible:a,isAdditionalPointSourcesVisible:s,mode:o,layer:n}=this;if(r&&(this.additionalFootprints.removeAll(),this.additionalCameraLocations.removeAll(),this.bestFeatureCurrentFootprint&&(this.bestFeatureCurrentFootprint.destroy(),this.bestFeatureCurrentFootprint=null,this.bestFeatureFootprint=null),!this.invalidCameraHeading)){await(this._adapter?.createFootprints(e)),y(e);for(const o of i){const i=this.view&&!this.view.spatialReference?.equals(o.spatialReference)?await G(o.clone(),this.view?.spatialReference,e):o.clone();o.imageID===r.attributes.objectId?this.currentBestFeatureLocation=new t({attributes:{imageID:o.imageID},geometry:i,symbol:Ee,visible:a}):this.additionalCameraLocations.push(new t({attributes:{imageID:o.imageID},geometry:i,symbol:je,visible:s}))}"video"!==o&&"panoramic-video"!==o||(await this.initializeTransformationService(e),n&&!this.featureCache.length&&await this.updateFeatureCache(n,r.geometry.spatialReference))}}_updateCurrentBestFeature(e){if(!e)return;if(this.currentBestFeature=this.features?.at(e.featureIndex),"video"===this.mode)return void(this.currentBestFeature&&this.videoViewModel?.playVideoFromSelectedLocation(this.currentBestFeature));if("panoramic-video"===this.mode)return void(this.currentBestFeature&&this._panoramicVideoViewer.viewModel.playPanoramicVideoFromSelectedLocation(this.currentBestFeature));const t=this.currentBestFeature?.attributes.cameraPitch&&this.currentBestFeature?.attributes.cameraPitch<5;let i;if(t)i=-90;else{const t=e.x-Ve[3],r=e.y-Ve[3],a=r/Math.sqrt(t**2+r**2);let s=180*Math.acos(a)/Math.PI;(t<0&&r<0||t<0&&r>0)&&(s*=-1),i=s}i===this.bestFeatureAngle?this.previousFeatureAngle=i:this.bestFeatureAngle=i,this.navigatorCurrentBestFeature=t?null:{x:e.x,y:e.y,direction:e.sector.includes("_")?e.sector.split("_")[1]:e.sector}}_updateImageMeasurementBestFeature(e){e&&(this.currentBestFeatureMeasurementImage=this.features?.at(e.featureIndex))}clearGraphics(){this._imageViewer.clearGraphics(),this._panoramicViewer.clearGraphics(),this.imageMeasurementViewer.clearGraphics(),this._panoramicMeasurementViewer.clearGraphics()}clearReferencePointOnImage(){this._referencePointOnImage&&(this._imageViewer.removeGraphic(this._referencePointOnImage),this._panoramicViewer.removeGraphic(this._referencePointOnImage),this._panoramicVideoViewer.removeGraphic(this._referencePointOnImage),this._referencePointOnImage=p(this._referencePointOnImage)),this.videoViewModel?.clearReferencePointOnVideo()}async initializeReferenceTransformationService(e){const{currentBestFeatureMeasurementImage:t,activeTriangulatedViewer:i,mode:r}=this;if(!t||!i||!i.imageSize||"panoramic"!==r&&"default"!==r)return;const{imageSize:a}=i,{attributes:s,elevationSample:o}=t,{location:{spatialReference:n,z:l},cameraHeight:c,elevationSource:d}=s;let u=s.location;u.spatialReference.isGeographic&&(u=Q(u));const h="default"===r?ae(s,a[0],a[1]):se(s,a[0],a[1]),p=await re(n,l??0,c,{elevationSample:o,elevationSource:d,extent:this.footprintExtent},e),m=(await import("./services/TransformationService.js")).default,g={imageToWorldProperties:h,updateElevationProps:p,mode:r,imageSize:a,depthImageService:this.depthImage};this._referenceTransformationService=new m(g),this._locationViewModel&&(this._locationViewModel.referenceTransformationService=this._referenceTransformationService),this._measurementService&&(this._measurementService.referenceTransformationService=this._referenceTransformationService)}async initializeTransformationService(e){const{currentBestFeature:t,activeViewer:i,mode:r}=this,a="video"===r||"panoramic-video"===r?ye:i?.imageSize;if(!t||!a||"none"===r)return;const{attributes:s,elevationSample:o}=t,{location:{spatialReference:n,z:l},cameraHeight:c,elevationSource:d}=s;let u=s.location;u.spatialReference.isGeographic&&(u=Q(u));const h="default"===r||"video"===r?"default":"panoramic",p={..."default"===h?ae(s,a[0],a[1]):se(s,a[0],a[1]),cameraLocation:u},m=await re(n,l??0,c,{elevationSample:o,elevationSource:d,extent:this.footprintExtent},e),g=(await import("./services/TransformationService.js")).default,v={imageToWorldProperties:p,updateElevationProps:m,mode:h,imageSize:a,depthImageService:this.depthImage};this._transformationService=new g(v),this._measurementService&&(this._measurementService.transformationService=this._transformationService)}plotReferencePoint(e){"mapPoint"in e?this.plotReferencePointOnGround(e.mapPoint):this.plotReferencePointOnGround(e)}setMessage(e,t,i,r){this.displayMessage={key:e,type:t,data:i,map:r}}async transformAndPlotSelectedLocation(e){const{currentBestFeature:t,invalidCameraHeading:i,selectedPoint:r,activeViewer:a}=this;if(this._crossSymbol&&(this._panoramicViewer.removeGraphic(this._crossSymbol),this._imageViewer.removeGraphic(this._crossSymbol),this._crossSymbol=p(this._crossSymbol)),!r||!t||"image-loaded"!==a?.state||i)return;let s;try{s=await this._transformationService.pointToPixel(r,{signal:e?.signal}),y(e),await this.plotSelectedPointOnImage(s,e)}catch(o){v(o)||u.getLogger(this).error("failed to transform map point to pixel, cross symbol will not be plotted on image",{error:o,selectedPoint:r,feature:t})}}updateCurrentCoveragePolygon(e){const{additionalFootprints:i,additionalCameraLocations:r,currentBestFeature:a,currentBestFeatureLocation:s,currentCoverageVisible:o,selectedPoint:n,view:l,_adapter:c,mode:d}=this;if(!a)return;const{attributes:{objectId:u},elevationSample:h}=a;if(this._initialCurrentCoverageUpdate){if(this._overlays?.removeAll(),this._initialCurrentCoverageUpdate=!1,this.bestFeatureCurrentFootprint=p(this.bestFeatureCurrentFootprint),e&&!this.invalidCameraHeading&&(e.visible=o,this.bestFeatureCurrentFootprint=e),l){const e=[...i,...r,s].filter($e);"3d"===l?.type&&h&&c?.updateGroundElevation&&(this._updateGroundElevation&&c.updateGroundElevation(e),"panoramic"===d&&c.updateGroundElevation([this.bestFeatureCurrentFootprint])),this._updateGroundElevation=!1,n&&(e.splice(-2,0,this.bestFeatureCurrentFootprint),e.push(new t({geometry:n.clone(),symbol:Ie.clone(),attributes:{imageID:u}}))),this._overlays.graphics.addMany(e)}}else if(l){if(this.invalidCameraHeading)return void this._superimposeService.clear();this.bestFeatureCurrentFootprint&&(this._overlays?.remove(this.bestFeatureCurrentFootprint),this.bestFeatureCurrentFootprint=p(this.bestFeatureCurrentFootprint));const t=this.bestFeatureCurrentFootprint&&this._overlays?this._overlays.graphics.indexOf(this.bestFeatureCurrentFootprint):-1;e&&(this.bestFeatureCurrentFootprint=e,"3d"===l?.type&&h&&c?.updateGroundElevation&&"panoramic"===d&&c.updateGroundElevation([e]),e.visible=this.currentCoverageVisible,this._overlays?.graphics.add(this.bestFeatureCurrentFootprint,t>=0?t:this._overlays.graphics.length-1))}}_updateSuperimposedImage(){if(!this._hasActiveSuperimposeCameraContext())return;const e="panoramic"===this.mode?this._panoramicViewer:null,{currentBestFeature:t,defaultSuperimposeCameraLockEnabled:i,layer:r,mode:a,view:s,state:o,superimposeViewEnabled:n,superimposeViewSupported:l,activeViewer:c,depthImage:d}=this,u=this.coverageFrustums.find(({imageID:e})=>e===t?.attributes.objectId);this._superimposeService.update({activeImageSize:c?.imageSize||void 0,adapter:this._adapter,currentBestFeature:t,currentBestFeatureFrustum:u,defaultSuperimposeCameraLockEnabled:i,depthImageLoaded:d?.loaded??!1,layer:r,mode:a,panoramicCamera:e?.camera,state:o,superimposeViewEnabled:n&&l,view:s}),this.setMessage("superimposeImageDescription","info"),this._superimposePreviousCurrentCoverageVisible??=this.currentCoverageVisible,this.currentCoverageVisible=!1}_getSuperimposeCameraWatchState(){const e="3d"===this.view?.type?this.view:null,t=e?.camera;return[this.superimposeViewEnabled,this.superimposeViewSupported,this.mode,this.state,this.view?.type,this.view?.interacting,this.view?.navigating,t?.heading,t?.tilt,t?.fov,t?.position.x,t?.position.y,t?.position.z]}_handleSuperimposeCameraChange(){const e=this.view,t="3d"===e?.type?e:null;this._hasActiveSuperimposeCameraContext()?"panoramic"!==this.mode?!t||t.interacting||t.navigating?this._abortSuperimposeSchedule():this._scheduleDefaultSuperimposeUpdate():this._schedulePanoramicSuperimposeUpdate():this._abortSuperimposeSchedule()}_shouldDisableUnsupportedSuperimposeView(){return this.superimposeViewEnabled&&"panoramic"===this.mode&&!this.superimposeViewSupported}_hasActiveSuperimposeCameraContext(){return("default"===this.mode||"panoramic"===this.mode)&&this.superimposeViewEnabled&&this.superimposeViewSupported&&"image-loaded"===this.state&&"3d"===this.view?.type&&!!this.view.camera}_abortSuperimposeSchedule(){this._superimposeScheduleController?.abort(),this._superimposeScheduleController=null,this._clearSuperimposeDebounceTimeout(),this._clearSuperimposeScheduledFrame()}_resetInactiveSuperimposeState(){const e=null!=this._superimposePreviousCurrentCoverageVisible;this._abortSuperimposeSchedule(),this._adapter?.disableDefaultSuperimposeNavigation?.(),this._adapter?.disablePanoramicSuperimposeNavigation?.(),this._superimposeService.clear(),this._restoreCurrentCoverageVisibilityAfterSuperimpose(),this._restoreDefaultMessageAfterSuperimpose(),e&&this._restoreViewerMediaAfterSuperimpose()}_restoreCurrentCoverageVisibilityAfterSuperimpose(){null!=this._superimposePreviousCurrentCoverageVisible&&(this.currentCoverageVisible=this._superimposePreviousCurrentCoverageVisible,this._superimposePreviousCurrentCoverageVisible=null)}_restoreViewerMediaAfterSuperimpose(){const{currentBestFeature:e,mode:t}=this;if(!e||"default"!==t&&"panoramic"!==t)return;this._restoreSuperimposeMediaTask?.abort();const i=a(async t=>{await this._loadCurrentFeatureMedia(e,{signal:t})});this._restoreSuperimposeMediaTask=i,i.promise.finally(()=>{this._restoreSuperimposeMediaTask===i&&(this._restoreSuperimposeMediaTask=null)})}_restoreDefaultMessageAfterSuperimpose(){if("superimposeImageDescription"===this.displayMessage?.key){!!this.currentBestFeature&&("default"===this.mode||"panoramic"===this.mode)?this.displayMessage=null:this.setMessage("onLoadMessage","info")}}_clearSuperimposeDebounceTimeout(){null!=this.superimposeDebounceTimeoutId&&(clearTimeout(this.superimposeDebounceTimeoutId),this.superimposeDebounceTimeoutId=null)}_clearSuperimposeScheduledFrame(){null!=this.superimposeScheduledFrameId&&(cancelAnimationFrame(this.superimposeScheduledFrameId),this.superimposeScheduledFrameId=null)}_schedulePanoramicSuperimposeUpdate(){this._abortSuperimposeSchedule(),this.superimposeDebounceTimeoutId=window.setTimeout(()=>{this.superimposeDebounceTimeoutId=null,this._hasActiveSuperimposeCameraContext()&&"panoramic"===this.mode&&this._updateSuperimposedImage()},150)}_scheduleDefaultSuperimposeUpdate(){const e=this.view;if(!("3d"===e?.type?e:null))return;if(this.superimposeScheduledFrameId)return;this._superimposeScheduleController?.abort();const t=new AbortController,{signal:i}=t,r=()=>{this._clearSuperimposeDebounceTimeout(),this._clearSuperimposeScheduledFrame(),this._superimposeScheduleController===t&&(this._superimposeScheduleController=null),i.removeEventListener("abort",r)};this._superimposeScheduleController=t,i.addEventListener("abort",r),this.superimposeScheduledFrameId=requestAnimationFrame(()=>{if(i.removeEventListener("abort",r),this.superimposeScheduledFrameId=null,this._superimposeScheduleController===t&&(this._superimposeScheduleController=null),i.aborted)return;const e=this.view,a="3d"===e?.type?e:null;!this._hasActiveSuperimposeCameraContext()||null==a||a.interacting||a.navigating||this._updateSuperimposedImage()})}};e([C()],mt.prototype,"activeLayer",null),e([C({readOnly:!0})],mt.prototype,"activeViewer",null),e([C()],mt.prototype,"activeTriangulatedViewer",null),e([C()],mt.prototype,"accuracyParametersMissing",null),e([C()],mt.prototype,"additionalFeatures",void 0),e([C({type:s.ofType(t)})],mt.prototype,"additionalCameraLocations",void 0),e([C({type:s.ofType(t)})],mt.prototype,"additionalFootprints",void 0),e([C()],mt.prototype,"areaMeasurementResult",void 0),e([C()],mt.prototype,"areaMeasurementAccuracy",void 0),e([C()],mt.prototype,"bestFeatureAngle",void 0),e([C()],mt.prototype,"bestFeatureCurrentFootprint",void 0),e([C({type:t})],mt.prototype,"bestFeatureFootprint",void 0),e([C({type:Number})],mt.prototype,"brightness",null),e([C()],mt.prototype,"cameraHeadingThreshold",void 0),e([C()],mt.prototype,"cameraPitchThreshold",void 0),e([C()],mt.prototype,"clickAction",void 0),e([C()],mt.prototype,"correctedLocationPointOnImage",void 0),e([C()],mt.prototype,"videoViewModel",void 0),e([C()],mt.prototype,"collectionId",void 0),e([C({type:Number})],mt.prototype,"contrast",null),e([C()],mt.prototype,"coverageFrustums",void 0),e([C()],mt.prototype,"coveragePolygons",void 0),e([C()],mt.prototype,"currentBestFeature",void 0),e([C()],mt.prototype,"currentBestFeatureMeasurementImage",void 0),e([C()],mt.prototype,"currentBestFeatureLocation",void 0),e([C()],mt.prototype,"currentCoverageVisible",void 0),e([C()],mt.prototype,"currentNode",null),e([C()],mt.prototype,"depthImage",void 0),e([C()],mt.prototype,"depthImageNotSupported",null),e([C()],mt.prototype,"featureCache",void 0),e([C()],mt.prototype,"navigationNodes",void 0),e([C({json:{write:!1}})],mt.prototype,"determineWorkflowForFeature",void 0),e([C({json:{write:!1}})],mt.prototype,"determineWorkflowForTriangularMeasurement",void 0),e([C()],mt.prototype,"disabled",void 0),e([C()],mt.prototype,"displayMessage",void 0),e([C()],mt.prototype,"displayNewMeasurementButton",void 0),e([C()],mt.prototype,"distanceMeasurementResult",void 0),e([C()],mt.prototype,"distanceAccuracyArray",void 0),e([C()],mt.prototype,"dataCaptureLayer",void 0),e([C({readOnly:!0})],mt.prototype,"featureCount",null),e([C()],mt.prototype,"features",void 0),e([C()],mt.prototype,"groundCoordinates",void 0),e([C()],mt.prototype,"groundCoordinatesAccuracy",void 0),e([C()],mt.prototype,"heightGraphic",void 0),e([C()],mt.prototype,"heightMeasurementResult",void 0),e([C()],mt.prototype,"heightMeasurementAccuracy",void 0),e([C({readOnly:!0})],mt.prototype,"imageGalleryEnabled",null),e([C()],mt.prototype,"imageGeometryField",void 0),e([C({readOnly:!0})],mt.prototype,"imageLoaded",null),e([C()],mt.prototype,"imageLocationToolState",void 0),e([C()],mt.prototype,"initialVideoMapViewExtent",void 0),e([C({readOnly:!0})],mt.prototype,"invalidCameraHeading",null),e([C()],mt.prototype,"imagePointsInView",null),e([C()],mt.prototype,"imageMeasurementViewer",void 0),e([C()],mt.prototype,"isAdditionalCoverageVisible",void 0),e([C()],mt.prototype,"isAdditionalPointSourcesVisible",void 0),e([C()],mt.prototype,"layer",void 0),e([C()],mt.prototype,"layerView",null),e([C({readOnly:!0})],mt.prototype,"layerFloorFilterClause",null),e([C({readOnly:!0})],mt.prototype,"layerTimeExtent",null),e([C({type:Number})],mt.prototype,"localPort",void 0),e([C()],mt.prototype,"locationPointOnImage",void 0),e([C()],mt.prototype,"mapImageConversionToolState",void 0),e([C()],mt.prototype,"measureType",void 0),e([C()],mt.prototype,"measurementGraphic",void 0),e([C({readOnly:!0,value:"none"})],mt.prototype,"mode",null),e([C()],mt.prototype,"navigationMode",void 0),e([C()],mt.prototype,"navigatorCurrentBestFeature",void 0),e([C()],mt.prototype,"oiObjectIdField",void 0),e([C({type:s.ofType(t)})],mt.prototype,"overlayedCameraLocations",void 0),e([C()],mt.prototype,"overlayedMapFeatures",void 0),e([C()],mt.prototype,"panoramicVideoLoaded",null),e([C()],mt.prototype,"panoramicVideoPaused",null),e([C()],mt.prototype,"pixelCoordinates",void 0),e([C()],mt.prototype,"preserveAngle",void 0),e([C()],mt.prototype,"pointSources",void 0),e([C({readOnly:!0})],mt.prototype,"popupEnabled",null),e([C()],mt.prototype,"preloadMedia",void 0),e([C()],mt.prototype,"preloadMediaSize",void 0),e([C()],mt.prototype,"previousFeatureAngle",void 0),e([C()],mt.prototype,"referencePoint",null),e([C({readOnly:!0})],mt.prototype,"sectorData",null),e([C()],mt.prototype,"selectedPoint",void 0),e([C({type:Number})],mt.prototype,"sharpness",null),e([C()],mt.prototype,"shouldShowSelectedImage",void 0),e([C()],mt.prototype,"superimposeViewEnabled",void 0),e([C()],mt.prototype,"defaultSuperimposeCameraLockEnabled",void 0),e([C()],mt.prototype,"superimposeViewSupported",null),e([C()],mt.prototype,"sketch",void 0),e([C()],mt.prototype,"sketchTriangular",void 0),e([C()],mt.prototype,"sketchTriangularGraphicsLayer",void 0),e([C()],mt.prototype,"draw",void 0),e([C()],mt.prototype,"drawAdapter",void 0),e([C()],mt.prototype,"polylineDrawAction",void 0),e([C()],mt.prototype,"scheduledFrameId",void 0),e([C()],mt.prototype,"superimposeScheduledFrameId",void 0),e([C()],mt.prototype,"superimposeDebounceTimeoutId",void 0),e([C()],mt.prototype,"sketchAdapter",void 0),e([C({readOnly:!0})],mt.prototype,"sketchGraphicsLayer",null),e([C({readOnly:!0})],mt.prototype,"state",null),e([C({readOnly:!0})],mt.prototype,"thumbnails",null),e([C()],mt.prototype,"videoExtentPoints",null),e([C()],mt.prototype,"triangularMeasurementActive",void 0),e([C()],mt.prototype,"triangulatedDistanceMeasurement",void 0),e([C()],mt.prototype,"triangulatedDistanceAccuracy",void 0),e([C()],mt.prototype,"triangulatedAreaMeasurement",void 0),e([C()],mt.prototype,"triangulatedAreaAccuracy",void 0),e([C()],mt.prototype,"triangulatedMeasurementGraphic",void 0),e([C()],mt.prototype,"triangulatedPoint",void 0),e([C()],mt.prototype,"triangulatedMeasurementAdapter",void 0),e([C()],mt.prototype,"updateFootprint",void 0),e([C()],mt.prototype,"updateVideoFootprint",void 0),e([C()],mt.prototype,"updateFootprintPanorama",void 0),e([C()],mt.prototype,"updatingTriangularMeasurementState",void 0),e([C({value:null})],mt.prototype,"view",null),e([C()],mt.prototype,"videoElement",void 0),e([C()],mt.prototype,"videoLayer",void 0),e([C()],mt.prototype,"videoMapView",void 0),e([C()],mt.prototype,"verticalFilterEnabled",void 0),e([C()],mt.prototype,"_adapter",void 0),e([C()],mt.prototype,"_defaultGraphicsLayer",null),e([C()],mt.prototype,"_highlightedFeatureHandle",void 0),e([C()],mt.prototype,"_imageViewer",void 0),e([C()],mt.prototype,"_initialCurrentCoverageUpdate",void 0),e([C()],mt.prototype,"_locationViewModel",void 0),e([C()],mt.prototype,"_measurementService",void 0),e([C()],mt.prototype,"_mediaPrefetcher",void 0),e([C()],mt.prototype,"_navigationManager",void 0),e([C()],mt.prototype,"_overlays",void 0),e([C()],mt.prototype,"_superimposePreviousCurrentCoverageVisible",void 0),e([C()],mt.prototype,"_superimposeService",void 0),e([C({readOnly:!0})],mt.prototype,"_overlaysView",null),e([C()],mt.prototype,"_panoramicVideoViewer",void 0),e([C()],mt.prototype,"_panoramicViewer",void 0),e([C()],mt.prototype,"_panoramicMeasurementViewer",void 0),e([C()],mt.prototype,"_referencePointOnGround",void 0),e([C()],mt.prototype,"_referencePointOnImage",void 0),e([C()],mt.prototype,"_referenceTransformationService",void 0),e([C()],mt.prototype,"_sectorData",void 0),e([C()],mt.prototype,"_transformationService",void 0),e([C()],mt.prototype,"_featureToSector",void 0),e([C({readOnly:!0})],mt.prototype,"_updatingHandles",void 0),e([C()],mt.prototype,"footprintExtent",void 0),e([C()],mt.prototype,"_featureChangedTask",void 0),mt=e([A("esri.widgets.OrientedImageryViewer.OrientedImageryViewerViewModel")],mt);const gt=mt;export{gt as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import e from"../../../Graphic.js";import{createTask as t}from"../../../core/asyncUtils.js";import a from"../../../core/Collection.js";import{destroyMaybe as r}from"../../../core/maybe.js";import{throwIfAborted as s}from"../../../core/promiseUtils.js";import i from"../../../geometry/Mesh.js";import{projectAsync as n}from"../../../geometry/projectionUtils.js";import o from"../../../geometry/support/MeshComponent.js";import c from"../../../geometry/support/MeshMaterial.js";import u from"../../../geometry/support/MeshTexture.js";import l from"../../../geometry/support/MeshVertexAttributes.js";import{imageToWorldPanoramic as h}from"../../../layers/orientedImagery/transformations/imageToWorld.js";import m from"../../../symbols/FillSymbol3DLayer.js";import f from"../../../symbols/MeshSymbol3D.js";import{calculateUpdatedWmsf as p}from"../imageMeasurementUtils.js";import{validateTifOrMrfExtension as _}from"../utils.js";import d from"../support/resolveMediaProps.js";import{computeDefaultAreaOfInterest as x,getBaseRasterLevel as g,computePanoramicAreasOfInterest as y,applySphereMeshOffsetInMeters as v,applyMeshOffsetInMeters as w,getRasterFetchParameters as I,getRasterLevelSize as R,getViewDependentRasterLevel as M,clampRasterLevelForTextureSize as O,createSuperimposeGridVertexAttributes as P,createSuperimposeSamplePixels as b}from"../support/superimposeUtils.js";const T=2,D=2,F=10,Z=128,C=[255,255,255,255];class j{constructor(e){this._properties=e,this._cachedBaseTexture=null,this._cachedDefaultFrustumObjectId=null,this._cachedDefaultFrustumNearPlaneAverageZ=0,this._cachedPanoramicRadiusObjectId=null,this._defaultZOffsetInMeters=0,this._defaultZOffsetPercentage=0,this._defaultZOffsetRangeInMeters=0,this._defaultCameraFeature=null,this._graphics=[],this._panoramicZOffsetInMeters=0,this._panoramicZOffsetPercentage=0,this._panoramicZOffsetRangeInMeters=0,this._panoramicNavigationFeature=null,this._rasterTextureCacheFeature=null,this._rasterTextureFetchCache=new Map,this._task=null}clear(){this._destroyGraphics(this._graphics,!0),this._cachedBaseTexture=null,this._cachedDefaultFrustumObjectId=null,this._cachedDefaultFrustumNearPlaneAverageZ=0,this._cachedPanoramicRadiusObjectId=null,this._defaultZOffsetInMeters=0,this._defaultZOffsetRangeInMeters=0,this._defaultCameraFeature=null,this._graphics=[],this._panoramicZOffsetInMeters=0,this._panoramicZOffsetPercentage=0,this._panoramicZOffsetRangeInMeters=0,this._panoramicNavigationFeature=null,this._rasterTextureCacheFeature=null,this._rasterTextureFetchCache.clear()}destroy(){this._task=this._task?.abort()??null,this.clear()}update(e){this._task?.abort(),this._task=t(async t=>{if(!this._canUpdate(e))return void this._resetInactiveState(e.adapter);let a=!1,r=[];try{await this._updateDefaultCameraIfNeeded(e,t),this._resetRasterTextureCacheIfNeeded(e.currentBestFeature);const i=await this._resolveMedia(e,t);if(!i)return;if(({graphics:r}=await this._createGraphics(e,i,t)),!r.length)return;await this._updateNavigation(e,t),await this._applyPersistentZOffset(r,e,t),s(t),this._replaceGraphics(r,e.mode),a=!0}finally{a||this._destroyGraphics(r,!1)}})}_canUpdate(e){const t=["default","panoramic"];return e.superimposeViewEnabled&&"image-loaded"===e.state&&"3d"===e.view?.type&&!!e.currentBestFeature&&!!e.layer&&t.includes(e.mode)}_resetInactiveState(e){e?.disableDefaultSuperimposeNavigation?.(),e?.disablePanoramicSuperimposeNavigation?.(),this.clear()}async _updateDefaultCameraIfNeeded(e,t){const{currentBestFeature:a,mode:r}=e;if(a&&"default"===r)return this._shouldUpdateDefaultCamera(r,a)?(await(e.adapter?.updateDefaultSuperimposeCamera?.({currentBestFeature:a},{signal:t})),s(t),void(this._defaultCameraFeature=a)):void 0}async _resolveMedia(e,t){const{currentBestFeature:a,layer:r,mode:i,view:n}=e;if(!a||!r||!n||"default"!==i&&"panoramic"!==i)return null;const o=await d(a.attributes,r,{signal:t});if(s(t),!o?.mediaUrl)return null;if(!_(o.datasetFormat))return this._resolveNonRasterMedia(o);const c=await this._resolveRasterMedia(o,n,t);if(!c)return null;switch(i){case"default":{const a=await this._resolveDefaultAreaOfInterest(e,o,t);return this._resolveDefaultRasterMedia(c,a,n,t)}case"panoramic":return this._resolvePanoramicRasterMedia(c,e,t)}}_resolveNonRasterMedia(e){return{areaOfInterest:null,textureUrl:this._resolveTextureUrl(e)}}async _resolveDefaultAreaOfInterest(e,t,a){const{activeImageSize:r,currentBestFeature:i,mode:n,view:o}=e;if(!("default"===n&&r&&i&&o&&_(t.datasetFormat)))return null;const c=await x(i,o,r,this._properties.pointToPixel,{signal:a});return s(a),c}async _resolveRasterMedia(e,t,a){const r=await this._loadRaster(e,{signal:a});if(s(a),!r)return null;const i=g(r,t);let n=this._cachedBaseTexture;if(!n){const e=await this._createRasterTexture(r,null,i,{signal:a});s(a),e&&(n=e,this._cachedBaseTexture=e)}return n?{baseLevel:i,baseTexture:n,raster:r}:null}async _resolveDefaultRasterMedia(e,t,a,r){const{baseLevel:i,baseTexture:n,raster:o}=e;if(!t)return{areaOfInterest:null,baseTexture:n,raster:o,texture:n};const c=g(o,a,t),u=await this._createCompositedDefaultRasterTexture(o,t,c,i,{signal:r});return s(r),{areaOfInterest:t,baseTexture:n,overlayTexture:u,raster:o,texture:u??n}}async _resolvePanoramicRasterMedia(e,t,a){const{activeImageSize:r,currentBestFeature:i,view:n}=t,{baseTexture:o,raster:c}=e;if(!r||!i||!n)return{areaOfInterest:null,baseTexture:o,panoramicAreasOfInterest:void 0,raster:c,texture:o};const u=await y(i,n,r,this._properties.pointToPixel,{signal:a});s(a);const l=await this._createPanoramicRasterTexture(c,i,n,r,u,{signal:a})??o;return s(a),{areaOfInterest:null,baseTexture:o,panoramicAreasOfInterest:u,raster:c,texture:l}}async _createGraphics(e,t,a){switch(e.mode){case"default":return this._createDefaultGraphics(e,t,a);case"panoramic":return this._createPanoramicGraphics(e,t,a)}return{graphics:[]}}async _createDefaultGraphics(e,t,a){const r=await this._createAndDrapeDefaultGraphic(e,a,{texture:t.texture,textureUrl:t.textureUrl});return{graphics:r?[r]:[]}}async _createAndDrapeDefaultGraphic(e,t,a){const{activeImageSize:r,depthImageLoaded:i,view:n}=e,{areaOfInterest:o,texture:c,textureUrl:u}=a;if(!r||!n)return null;const l=await this._createDefaultGraphic({areaOfInterest:o,depthImageLoaded:i,imageSize:r,signal:t,texture:c,textureUrl:u,view:n});return l?(s(t),l):null}async _createPanoramicGraphics(e,t,a){const r=await this._createPanoramicSuperimposeGraphic(e,t,a,null);return{graphics:r?[r]:[]}}async _createPanoramicSuperimposeGraphic(e,t,a,r){const{activeImageSize:s,currentBestFeature:i,view:n}=e;return n?this._createPanoramicGraphic({areaOfInterest:r,currentBestFeature:i??void 0,imageSize:s,signal:a,texture:t.texture,textureUrl:t.textureUrl,view:n}):null}async _updateNavigation(e,t){const{currentBestFeature:a,mode:r,view:s}=e;if(a&&s&&"3d"===s.type)switch(r){case"default":return void this._updateDefaultNavigation(e);case"panoramic":return void await this._updatePanoramicNavigation(e,a,s,t)}}_updateDefaultNavigation(e){this._updateDefaultSuperimposeNavigation(e.adapter,e.defaultSuperimposeCameraLockEnabled)}async _updatePanoramicNavigation(e,t,a,r){e.adapter?.disableDefaultSuperimposeNavigation?.();const i=t!==this._panoramicNavigationFeature?e.panoramicCamera??a.camera:a.camera;i&&this._shouldUpdatePanoramicCamera(e.mode,t)&&(e.adapter?.disablePanoramicSuperimposeNavigation?.(),await(e.adapter?.updatePanoramicSuperimposeCamera?.({camera:i,currentBestFeature:t},{signal:r})),s(r)),this._panoramicNavigationFeature=t}_replaceGraphics(e,t){if("panoramic"===t&&this._updatePanoramicGraphicInPlace(e))return;const a=this._graphics;this._graphics=e,this._properties.overlays.addMany(e),this._destroyGraphics(a,!0)}_updatePanoramicGraphicInPlace(e){if(1!==this._graphics.length||1!==e.length)return!1;const t=this._graphics[0],a=e[0];return!(!t||!a)&&(t.geometry=a.geometry,t.symbol=a.symbol,t.visible=a.visible,a.geometry=null,a.symbol=null,r(a),!0)}_destroyGraphics(e,t){e.length&&(t&&this._properties.overlays.removeMany(e),e.forEach(e=>r(e)))}_updateDefaultSuperimposeNavigation(e,t=!0){t?e?.enableDefaultSuperimposeNavigation?.():e?.disableDefaultSuperimposeNavigation?.(),this._panoramicNavigationFeature&&e?.disablePanoramicSuperimposeNavigation?.(),this._panoramicNavigationFeature=null}_shouldUpdateDefaultCamera(e,t){return"default"===e&&t!==this._defaultCameraFeature}_shouldUpdatePanoramicCamera(e,t){return"panoramic"===e&&t!==this._panoramicNavigationFeature}setDefaultZOffsetPercentage(e){const t=Math.max(0,Math.min(100,e)),a=this._defaultZOffsetRangeInMeters*t/100,r=a-this._defaultZOffsetInMeters;this._defaultZOffsetPercentage=t,this._defaultZOffsetInMeters=a,this._applyZOffset(this._graphics,"default",r)}setPanoramicRadiusPercentage(e){const t=Math.max(0,Math.min(100,e)),a=this._panoramicZOffsetRangeInMeters*t/100,r=a-this._panoramicZOffsetInMeters;this._panoramicZOffsetPercentage=t,this._panoramicZOffsetInMeters=a,this._applyZOffset(this._graphics,"panoramic",r)}updateZOffset(e){0!==e&&(this._panoramicZOffsetInMeters+=e,this._applyZOffset(this._graphics,"panoramic",e))}_applyZOffset(e,t,a){0!==a&&e.forEach(e=>{const r=e.geometry;"mesh"===r?.type&&("panoramic"!==t?w(r,{z:a}):v(r,{radiusOffset:a,minimumRadiusInMeters:F}))})}async _applyPersistentZOffset(e,t,a){if("panoramic"===t.mode)return this._panoramicZOffsetRangeInMeters=await this._resolvePanoramicZOffsetRangeInMeters(t.currentBestFeature,t.view,a),this._panoramicZOffsetInMeters=this._panoramicZOffsetRangeInMeters*this._panoramicZOffsetPercentage/100,void this._applyZOffset(e,"panoramic",this._panoramicZOffsetInMeters);this._defaultZOffsetRangeInMeters=await this._resolveDefaultZOffsetRangeInMeters(e,t.currentBestFeature,t.currentBestFeatureFrustum,t.view,a),this._defaultZOffsetInMeters=this._defaultZOffsetRangeInMeters*this._defaultZOffsetPercentage/100,this._applyZOffset(e,"default",this._defaultZOffsetInMeters)}async _resolveDefaultZOffsetRangeInMeters(e,t,a,r,i){const[o]=e,c=o?.geometry,u=t.attributes.objectId;if("mesh"!==c?.type||!a)return 0;if(this._cachedDefaultFrustumObjectId!==u){const e=a.spatialReference.equals(r.spatialReference)?a:await n(a.clone(),r.spatialReference,{signal:i});if(s(i),!e||"mesh"!==e.type)return this._cachedDefaultFrustumObjectId=u,this._cachedDefaultFrustumNearPlaneAverageZ=0,0;this._cachedDefaultFrustumObjectId=u,this._cachedDefaultFrustumNearPlaneAverageZ=this._getFrustumNearPlaneAverageZ(e)}return this._cachedDefaultFrustumNearPlaneAverageZ-this._getMeshAverageZ(c)}async _resolvePanoramicZOffsetRangeInMeters(e,t,a){const r=e.attributes.objectId;if(this._cachedPanoramicRadiusObjectId!==r){const i=e.attributes.farDistance,o=Math.max(F,e.attributes.nearDistance??i);if(!(i>0&&o>=0))return this._cachedPanoramicRadiusObjectId=r,this._panoramicZOffsetRangeInMeters=0,0;const c=e.attributes.location,u=c.spatialReference.equals(t.spatialReference)?c:await n(c,t.spatialReference,{signal:a});if(s(a),!u)return this._cachedPanoramicRadiusObjectId=r,this._panoramicZOffsetRangeInMeters=0,0;const l=u.spatialReference.isWebMercator?p(u.y):1;this._cachedPanoramicRadiusObjectId=r,this._panoramicZOffsetRangeInMeters=(o-i)*l}return this._panoramicZOffsetRangeInMeters}_getFrustumNearPlaneAverageZ(e){const{position:t}=e.vertexAttributes;if(t.length<12)return this._getMeshAverageZ(e);let a=0;for(let r=0;r<4;r+=1)a+=t[3*r+2];return a/4}_getMeshAverageZ(e){const{position:t}=e.vertexAttributes,a=Math.floor(t.length/3);if(0===a)return 0;let r=0;for(let s=0;s<a;s+=1)r+=t[3*s+2];return r/a}_resolveTextureUrl(e){const t=new URL(e.mediaUrl);return Object.entries(e.searchParams).forEach(([e,a])=>{t.searchParams.has(e)||t.searchParams.set(e,a)}),t.toString()}_resetRasterTextureCacheIfNeeded(e){e&&e!==this._rasterTextureCacheFeature&&(this._cachedBaseTexture=null,this._rasterTextureFetchCache.clear(),this._rasterTextureCacheFeature=e)}_createImageDataFromPixelBlock(e){return new ImageData(e.getAsRGBA(),e.width,e.height)}_copyImageData(e,t,a,r,s=e.width,i=e.height){const n=e.data,o=t.data,c=e.width,u=e.height,l=t.width,h=t.height;for(let m=0;m<i;m+=1){const e=r+m;if(e<0||e>=h)continue;const t=Math.min(u-1,Math.floor(m*u/i));for(let r=0;r<s;r+=1){const i=a+r;if(i<0||i>=l)continue;const u=4*(t*c+Math.min(c-1,Math.floor(r*c/s))),h=4*(e*l+i);o[h]=n[u],o[h+1]=n[u+1],o[h+2]=n[u+2],o[h+3]=n[u+3]}}}_copyImageDataRegion(e,t,a,r,s,i,n,o){const c=e.data,u=t.data,l=e.width,h=t.width;for(let m=0;m<o;m+=1)for(let e=0;e<n;e+=1){const t=4*((r+m)*l+(a+e)),n=4*((i+m)*h+(s+e));u[n]=c[t],u[n+1]=c[t+1],u[n+2]=c[t+2],u[n+3]=c[t+3]}}async _fetchRasterTextureAtLevel(e,t,a,r){const{offset:i,size:n}=I(e,t,a),o=this._createRasterTextureExtent(i,n),c=this._createRasterTextureLevelCacheKey(e,t),u=this._getOrCreateRasterTextureLevelCache(c),l=this._getUncoveredRasterTextureExtents(o,u.patches);for(const h of l){const a=this._createRasterTextureExtentCacheKey(h);let i=u.inflight.get(a);i||(i=this._fetchRasterTexturePatch(e,t,h,r),u.inflight.set(a,i));try{const e=await i;s(r),e&&u.patches.push(e)}finally{u.inflight.delete(a)}}return this._composeRasterTextureFromCachedPatches(o,u.patches)}_getOrCreateRasterTextureLevelCache(e){let t=this._rasterTextureFetchCache.get(e);return t||(t={inflight:new Map,patches:[]},this._rasterTextureFetchCache.set(e,t)),t}_createRasterTextureLevelCacheKey(e,t){return[e.url,e.rasterInfo.width,e.rasterInfo.height,t].join(":")}_createRasterTextureExtentCacheKey(e){return[e.xmin,e.ymin,e.xmax,e.ymax].join(":")}_createRasterTextureExtent(e,t){return{xmin:e.x,ymin:e.y,xmax:e.x+t.width,ymax:e.y+t.height}}_getUncoveredRasterTextureExtents(e,t){let a=[e];for(const r of t)if(a=a.flatMap(e=>this._subtractRasterTextureExtent(e,r.extent)),!a.length)break;return a}_subtractRasterTextureExtent(e,t){const a=this._intersectRasterTextureExtents(e,t);if(!a)return[e];const r=[];return e.ymin<a.ymin&&r.push({xmin:e.xmin,ymin:e.ymin,xmax:e.xmax,ymax:a.ymin}),a.ymax<e.ymax&&r.push({xmin:e.xmin,ymin:a.ymax,xmax:e.xmax,ymax:e.ymax}),e.xmin<a.xmin&&r.push({xmin:e.xmin,ymin:a.ymin,xmax:a.xmin,ymax:a.ymax}),a.xmax<e.xmax&&r.push({xmin:a.xmax,ymin:a.ymin,xmax:e.xmax,ymax:a.ymax}),r.filter(({xmin:e,ymin:t,xmax:a,ymax:r})=>a>e&&r>t)}_intersectRasterTextureExtents(e,t){const a=Math.max(e.xmin,t.xmin),r=Math.max(e.ymin,t.ymin),s=Math.min(e.xmax,t.xmax),i=Math.min(e.ymax,t.ymax);return s>a&&i>r?{xmin:a,ymin:r,xmax:s,ymax:i}:null}async _fetchRasterTexturePatch(e,t,a,r){const{pixelBlock:i}=await e.fetchRawPixels(t,{x:a.xmin,y:a.ymin},{width:a.xmax-a.xmin,height:a.ymax-a.ymin},r);if(s(r),i)return{extent:a,imageData:this._createImageDataFromPixelBlock(i)}}_composeRasterTextureFromCachedPatches(e,t){const a=t.filter(t=>this._intersectRasterTextureExtents(e,t.extent));if(!a.length)return;const r=new ImageData(e.xmax-e.xmin,e.ymax-e.ymin);for(const s of a){const t=this._intersectRasterTextureExtents(e,s.extent);t&&this._copyImageDataRegion(s.imageData,r,t.xmin-s.extent.xmin,t.ymin-s.extent.ymin,t.xmin-e.xmin,t.ymin-e.ymin,t.xmax-t.xmin,t.ymax-t.ymin)}return r}async _loadRaster(e,t){const{loadRaster:a}=await import("../../PanoramicViewer/utils.js"),r=await a(this._resolveTextureUrl(e),t);return s(t),r}async _createCompositedDefaultRasterTexture(e,t,a,r,i){const{pyramidScalingFactor:n}=e.rasterInfo.storageInfo,o=n??T,c=R(e.rasterInfo.width,e.rasterInfo.height,a,o),l=await this._fetchRasterTextureAtLevel(e,r,null,i);if(s(i),!l)return;const h=await this._fetchRasterTextureAtLevel(e,a,t,i);if(s(i),!h)return new u({data:l});const m=new ImageData(c.width,c.height);this._copyImageData(l,m,0,0,c.width,c.height);const f=o**a,{x:p,y:_}=this._resolveRasterDrawOrigin(t,f);return this._copyImageData(h,m,p,_),new u({data:m})}async _createRasterTexture(e,t,a,r){const{maximumPyramidLevel:s}=e.rasterInfo.storageInfo,i=await this._fetchRasterTextureAtLevel(e,a??s,t,r);if(i)return new u({data:i})}async _createPanoramicRasterTexture(e,t,a,r,i,n){if(i??=await y(t,a,r,this._properties.pointToPixel,n),s(n),!i?.length)return this._createRasterTexture(e,null,void 0,n);const{baseLevel:o,level:c,scalingFactor:u}=this._resolvePanoramicRasterLevels(e,a,i);return o<=c?this._createRasterTexture(e,null,c,n):this._createCompositedPanoramicRasterTexture(e,i,{baseLevel:o,level:c,scalingFactor:u},n)}_resolvePanoramicRasterLevels(e,t,a){const{maximumPyramidLevel:r,pyramidScalingFactor:s}=e.rasterInfo.storageInfo,i=a.reduce((a,r)=>Math.min(a,M(e,t,r)),r),n=O(e,i),o=s??T;return{baseLevel:Math.min(r,n+D),level:n,scalingFactor:o}}async _createCompositedPanoramicRasterTexture(e,t,a,r){const{baseLevel:i,level:n,scalingFactor:o}=a,c=R(e.rasterInfo.width,e.rasterInfo.height,n,o),l=await this._fetchRasterTextureAtLevel(e,i,null,r);if(s(r),!l)return;const h=new ImageData(c.width,c.height);this._copyImageData(l,h,0,0,c.width,c.height);const m=o**n;for(const u of t){const t=await this._fetchRasterTextureAtLevel(e,n,u,r);if(s(r),!t)continue;const{x:a,y:i}=this._resolveRasterDrawOrigin(u,m);this._copyImageData(t,h,a,i)}return new u({data:h})}_resolveRasterDrawOrigin(e,t){return{x:Math.max(0,Math.floor(e.xmin/t)),y:Math.max(0,Math.floor(e.ymin/t))}}async _createGridMesh(e,t,a,r,s,c){if("3d"!==t.type)return null;const u=await Promise.all(r.map(e=>e.spatialReference.equals(t.spatialReference)?e:n(e,t.spatialReference)));if(u.some(e=>!e))return null;const{faces:h,position:m,uv:f}=P(u,e,a,s);return c?.forEach((t,a)=>{const r=2*a;f[r]=t.x/e[0],f[r+1]=t.y/e[1]}),new i({vertexAttributes:new l({position:m,uv:f}),components:[new o({faces:h})],spatialReference:t.spatialReference.clone()})}async _createFootprintMesh(e,t,a,r){const i=b(e,a),n=await this._properties.getMapPoint(i,r);return s(r),this._createGridMesh(e,t,a,n)}async _createPanoramicGraphic(t){const{areaOfInterest:r,imageSize:s,signal:i,texture:n,textureUrl:o,view:l}=t;if(!n&&!o)throw new Error("Missing texture URL or texture data.");if(!s)return null;const h=await this._createPanoramicMesh(s,l,r,t.currentBestFeature,i);if(!h)return null;const p=h.vertexAttributes.position,_=[];for(let e=0;e<p.length;e+=3)_.push(...C);h.vertexAttributes.color=new Uint8Array(_);const d=new c({colorTexture:n??new u({url:o})});return h.components?.forEach(e=>{e.shading="source",e.material=d}),new e({geometry:h,symbol:new f({symbolLayers:new a([new m({})])})})}async _createPanoramicMesh(e,t,a,r,i){if("3d"!==t.type)return null;if(!r)return null;const{attributes:n}=r,{farDistance:o}=n;if("number"!=typeof o||!(o>0))return null;const c=b(e,a,Z),u=this._properties.getPanoramicTransformationState?.();if(!u)return null;const{imageToWorldProperties:l,updateElevationProps:m}=u,f=await h(c.map(e=>({...e,depth:o??l.farDistance})),l,m);return s(i),this._createGridMesh(e,t,a,f,Z,c)}async _createDefaultGraphic(t){const{texture:r,textureUrl:s}=t;if(!r&&!s)throw new Error("Missing texture URL or texture data.");if(!t.imageSize)return null;const i=await this._createFootprintMesh(t.imageSize,t.view,t.areaOfInterest,{signal:t.signal});if(!i)return null;const n=i.vertexAttributes.position,o=[];for(let e=0;e<n.length;e+=3)o.push(...C);i.vertexAttributes.color=new Uint8Array(o);const l=new c({colorTexture:r??new u({url:s})});return i.components?.forEach(e=>{e.shading="source",e.material=l}),new e({geometry:i,symbol:new f({symbolLayers:new a([new m({})])})})}}export{j as default};
2
+ import e from"../../../Graphic.js";import{createTask as t}from"../../../core/asyncUtils.js";import a from"../../../core/Collection.js";import{destroyMaybe as r}from"../../../core/maybe.js";import{throwIfAborted as s}from"../../../core/promiseUtils.js";import i from"../../../geometry/Mesh.js";import{projectAsync as n}from"../../../geometry/projectionUtils.js";import o from"../../../geometry/support/MeshComponent.js";import c from"../../../geometry/support/MeshMaterial.js";import u from"../../../geometry/support/MeshTexture.js";import l from"../../../geometry/support/MeshVertexAttributes.js";import{imageToWorldPanoramic as h}from"../../../layers/orientedImagery/transformations/imageToWorld.js";import m from"../../../symbols/FillSymbol3DLayer.js";import p from"../../../symbols/MeshSymbol3D.js";import{calculateUpdatedWmsf as f}from"../imageMeasurementUtils.js";import{validateTifOrMrfExtension as d}from"../utils.js";import x from"../support/resolveMediaProps.js";import{computeDefaultAreaOfInterest as _,getBaseRasterLevel as g,computePanoramicAreasOfInterest as y,applySphereMeshOffsetInMeters as v,getRasterFetchParameters as R,getRasterLevelSize as w,getViewDependentRasterLevel as P,clampRasterLevelForTextureSize as M,createSuperimposeGridVertexAttributes as I,createSuperimposeSamplePixels as b}from"../support/superimposeUtils.js";const D=2,T=2,O=10,F=128,C=[255,255,255,255];class S{constructor(e){this._properties=e,this._cachedBaseTexture=null,this._cachedPanoramicRadiusObjectId=null,this._defaultGraphicProperties=null,this._defaultZOffsetPercentage=0,this._defaultCameraFeature=null,this._graphics=[],this._panoramicRadiusOffsetInMeters=0,this._panoramicRadiusOffsetPercentage=0,this._panoramicRadiusOffsetRangeInMeters=0,this._panoramicNavigationFeature=null,this._rasterTextureCacheFeature=null,this._rasterTextureFetchCache=new Map,this._task=null}clear(){this._destroyGraphics(this._graphics,!0),this._cachedBaseTexture=null,this._cachedPanoramicRadiusObjectId=null,this._defaultGraphicProperties=null,this._defaultZOffsetPercentage=0,this._defaultCameraFeature=null,this._graphics=[],this._panoramicRadiusOffsetInMeters=0,this._panoramicRadiusOffsetPercentage=0,this._panoramicRadiusOffsetRangeInMeters=0,this._panoramicNavigationFeature=null,this._rasterTextureCacheFeature=null,this._rasterTextureFetchCache.clear()}destroy(){this._task=this._task?.abort()??null,this.clear()}update(e){this._task?.abort(),this._task=t(async t=>{if(!this._canUpdate(e))return void this._resetInactiveState(e.adapter);let a=!1,r=[];try{await this._updateDefaultCameraIfNeeded(e,t),this._resetRasterTextureCacheIfNeeded(e.currentBestFeature);const i=await this._resolveMedia(e,t);if(!i)return;if(({graphics:r}=await this._createGraphics(e,i,t)),!r.length)return;await this._updateNavigation(e,t),"panoramic"===e.mode&&await this._applyPersistentPanoramicRadiusOffset(r,e.currentBestFeature,e.view,t),s(t),this._replaceGraphics(r,e.mode),a=!0}finally{a||this._destroyGraphics(r,!1)}})}_canUpdate(e){const t=["default","panoramic"];return e.superimposeViewEnabled&&"image-loaded"===e.state&&"3d"===e.view?.type&&!!e.currentBestFeature&&!!e.layer&&t.includes(e.mode)}_resetInactiveState(e){e?.disableDefaultSuperimposeNavigation?.(),e?.disablePanoramicSuperimposeNavigation?.(),this.clear()}async _updateDefaultCameraIfNeeded(e,t){const{currentBestFeature:a,mode:r}=e;if(a&&"default"===r)return this._shouldUpdateDefaultCamera(r,a)?(await(e.adapter?.updateDefaultSuperimposeCamera?.({currentBestFeature:a},{signal:t})),s(t),void(this._defaultCameraFeature=a)):void 0}async _resolveMedia(e,t){const{currentBestFeature:a,layer:r,mode:i,view:n}=e;if(!a||!r||!n||"default"!==i&&"panoramic"!==i)return null;const o=await x(a.attributes,r,{signal:t});if(s(t),!o?.mediaUrl)return null;if(!d(o.datasetFormat))return this._resolveNonRasterMedia(o);const c=await this._resolveRasterMedia(o,n,t);if(!c)return null;switch(i){case"default":{const a=await this._resolveDefaultAreaOfInterest(e,o,t);return this._resolveDefaultRasterMedia(c,a,n,t)}case"panoramic":return this._resolvePanoramicRasterMedia(c,e,t)}}_resolveNonRasterMedia(e){return{areaOfInterest:null,textureUrl:this._resolveTextureUrl(e)}}async _resolveDefaultAreaOfInterest(e,t,a){const{activeImageSize:r,currentBestFeature:i,mode:n,view:o}=e;if(!("default"===n&&r&&i&&o&&d(t.datasetFormat)))return null;const c=await _(i,o,r,this._properties.pointToPixel,{signal:a});return s(a),c}async _resolveRasterMedia(e,t,a){const r=await this._loadRaster(e,{signal:a});if(s(a),!r)return null;const i=g(r,t);let n=this._cachedBaseTexture;if(!n){const e=await this._createRasterTexture(r,null,i,{signal:a});s(a),e&&(n=e,this._cachedBaseTexture=e)}return n?{baseLevel:i,baseTexture:n,raster:r}:null}async _resolveDefaultRasterMedia(e,t,a,r){const{baseLevel:i,baseTexture:n,raster:o}=e;if(!t)return{areaOfInterest:null,baseTexture:n,raster:o,texture:n};const c=g(o,a,t),u=await this._createCompositedDefaultRasterTexture(o,t,c,i,{signal:r});return s(r),{areaOfInterest:t,baseTexture:n,overlayTexture:u,raster:o,texture:u??n}}async _resolvePanoramicRasterMedia(e,t,a){const{activeImageSize:r,currentBestFeature:i,view:n}=t,{baseTexture:o,raster:c}=e;if(!r||!i||!n)return{areaOfInterest:null,baseTexture:o,panoramicAreasOfInterest:void 0,raster:c,texture:o};const u=await y(i,n,r,this._properties.pointToPixel,{signal:a});s(a);const l=await this._createPanoramicRasterTexture(c,i,n,r,u,{signal:a})??o;return s(a),{areaOfInterest:null,baseTexture:o,panoramicAreasOfInterest:u,raster:c,texture:l}}async _createGraphics(e,t,a){switch(e.mode){case"default":return this._createDefaultGraphics(e,t,a);case"panoramic":return this._createPanoramicGraphics(e,t,a)}return{graphics:[]}}async _createDefaultGraphics(e,t,a){const r=await this._createAndDrapeDefaultGraphic(e,a,{texture:t.texture,textureUrl:t.textureUrl});return{graphics:r?[r]:[]}}async _createAndDrapeDefaultGraphic(e,t,a){const{activeImageSize:r,currentBestFeature:i,depthImageLoaded:n,view:o}=e,{areaOfInterest:c,texture:u,textureUrl:l}=a;if(!r||"3d"!==o?.type||!i)return null;const h=await this._createDefaultGraphic({areaOfInterest:c,currentBestFeature:i,depthImageLoaded:n,imageSize:r,signal:t,texture:u,textureUrl:l,view:o});if(!h)return null;const m=await this._resolveDefaultMeshPosition(h,r,o,i,c,t,100),p=await this._resolveDefaultMeshPosition(h,r,o,i,c,t,0);return s(t),this._defaultGraphicProperties={areaOfInterest:c??null,currentBestFeature:i,farPosition:p??("mesh"===h.geometry?.type?h.geometry.vertexAttributes.position.slice():new Float64Array),imageSize:r,nearPosition:m,view:o},h}async _createPanoramicGraphics(e,t,a){const r=await this._createPanoramicSuperimposeGraphic(e,t,a,null);return{graphics:r?[r]:[]}}async _createPanoramicSuperimposeGraphic(e,t,a,r){const{activeImageSize:s,currentBestFeature:i,view:n}=e;return n?this._createPanoramicGraphic({areaOfInterest:r,currentBestFeature:i??void 0,imageSize:s,signal:a,texture:t.texture,textureUrl:t.textureUrl,view:n}):null}async _updateNavigation(e,t){const{currentBestFeature:a,mode:r,view:s}=e;if(a&&s&&"3d"===s.type)switch(r){case"default":return void this._updateDefaultNavigation(e);case"panoramic":return void await this._updatePanoramicNavigation(e,a,s,t)}}_updateDefaultNavigation(e){this._updateDefaultSuperimposeNavigation(e.adapter,e.defaultSuperimposeCameraLockEnabled)}async _updatePanoramicNavigation(e,t,a,r){e.adapter?.disableDefaultSuperimposeNavigation?.();const i=t!==this._panoramicNavigationFeature?e.panoramicCamera??a.camera:a.camera;i&&this._shouldUpdatePanoramicCamera(e.mode,t)&&(e.adapter?.disablePanoramicSuperimposeNavigation?.(),await(e.adapter?.updatePanoramicSuperimposeCamera?.({camera:i,currentBestFeature:t},{signal:r})),s(r)),this._panoramicNavigationFeature=t}_replaceGraphics(e,t){if("panoramic"===t&&this._updatePanoramicGraphicInPlace(e))return;const a=this._graphics;this._graphics=e,this._properties.overlays.addMany(e),this._destroyGraphics(a,!0)}_updatePanoramicGraphicInPlace(e){if(1!==this._graphics.length||1!==e.length)return!1;const t=this._graphics[0],a=e[0];return!(!t||!a)&&(t.geometry=a.geometry,t.symbol=a.symbol,t.visible=a.visible,a.geometry=null,a.symbol=null,r(a),!0)}_destroyGraphics(e,t){e.length&&(t&&this._properties.overlays.removeMany(e),e.forEach(e=>r(e)))}_updateDefaultSuperimposeNavigation(e,t=!0){t?e?.enableDefaultSuperimposeNavigation?.():e?.disableDefaultSuperimposeNavigation?.(),this._panoramicNavigationFeature&&e?.disablePanoramicSuperimposeNavigation?.(),this._panoramicNavigationFeature=null}_shouldUpdateDefaultCamera(e,t){return"default"===e&&t!==this._defaultCameraFeature}_shouldUpdatePanoramicCamera(e,t){return"panoramic"===e&&t!==this._panoramicNavigationFeature}setDefaultZOffsetPercentage(e){this._defaultZOffsetPercentage=Math.max(0,Math.min(100,e)),this._defaultGraphicProperties&&1===this._graphics.length&&this._rebuildDefaultGraphicForPercentage(this._defaultZOffsetPercentage)}setPanoramicRadiusPercentage(e){const t=Math.max(0,Math.min(100,e)),a=this._panoramicRadiusOffsetRangeInMeters*t/100,r=a-this._panoramicRadiusOffsetInMeters;this._panoramicRadiusOffsetPercentage=t,this._panoramicRadiusOffsetInMeters=a,this._applyPanoramicRadiusOffset(this._graphics,r)}updatePanoramicRadiusOffset(e){0!==e&&(this._panoramicRadiusOffsetInMeters+=e,this._applyPanoramicRadiusOffset(this._graphics,e))}_applyPanoramicRadiusOffset(e,t){0!==t&&e.forEach(e=>{const a=e.geometry;"mesh"===a?.type&&v(a,{radiusOffset:t,minimumRadiusInMeters:O})})}async _applyPersistentPanoramicRadiusOffset(e,t,a,r){this._panoramicRadiusOffsetRangeInMeters=await this._resolvePanoramicRadiusOffsetRangeInMeters(t,a,r),this._panoramicRadiusOffsetInMeters=this._panoramicRadiusOffsetRangeInMeters*this._panoramicRadiusOffsetPercentage/100,this._applyPanoramicRadiusOffset(e,this._panoramicRadiusOffsetInMeters)}_rebuildDefaultGraphicForPercentage(e){const t=this._defaultGraphicProperties,[a]=this._graphics;if(!t||!a||"mesh"!==a.geometry?.type)return;const r=this._createDefaultMeshForPercentage(t,a.geometry,e);r&&(this._applyDefaultMeshAppearance(r,a.geometry),a.geometry=r)}_createDefaultMeshForPercentage(e,t,a){const{farPosition:r,nearPosition:s,view:n}=e;if(!s||s.length!==r.length)return null;const c=new Float64Array(r.length),u=a/100;for(let i=0;i<r.length;i+=1)c[i]=r[i]+(s[i]-r[i])*u;const h=t.vertexAttributes.uv,m=t.components;return h&&m&&!m.some(e=>!e.faces)?new i({vertexAttributes:new l({position:c,uv:h.slice()}),components:m.map(e=>new o({faces:e.faces.slice()})),spatialReference:n.spatialReference.clone()}):null}_resolveDefaultSuperimposeDistance(e,t){const a=e.attributes.farDistance,r=Math.max(0,e.attributes.nearDistance??a);if(a>0&&r>=0)return a+(r-a)*t/100}async _resolvePanoramicRadiusOffsetRangeInMeters(e,t,a){const r=e.attributes.objectId;if(this._cachedPanoramicRadiusObjectId!==r){const i=e.attributes.farDistance,o=Math.max(O,e.attributes.nearDistance??i);if(!(i>0&&o>=0))return this._cachedPanoramicRadiusObjectId=r,this._panoramicRadiusOffsetRangeInMeters=0,0;const c=e.attributes.location,u=c.spatialReference.equals(t.spatialReference)?c:await n(c,t.spatialReference,{signal:a});if(s(a),!u)return this._cachedPanoramicRadiusObjectId=r,this._panoramicRadiusOffsetRangeInMeters=0,0;const l=u.spatialReference.isWebMercator?f(u.y):1;this._cachedPanoramicRadiusObjectId=r,this._panoramicRadiusOffsetRangeInMeters=(o-i)*l}return this._panoramicRadiusOffsetRangeInMeters}_resolveTextureUrl(e){const t=new URL(e.mediaUrl);return Object.entries(e.searchParams).forEach(([e,a])=>{t.searchParams.has(e)||t.searchParams.set(e,a)}),t.toString()}_resetRasterTextureCacheIfNeeded(e){e&&e!==this._rasterTextureCacheFeature&&(this._cachedBaseTexture=null,this._rasterTextureFetchCache.clear(),this._rasterTextureCacheFeature=e)}_createImageDataFromPixelBlock(e){return new ImageData(e.getAsRGBA(),e.width,e.height)}_copyImageData(e,t,a,r,s=e.width,i=e.height){const n=e.data,o=t.data,c=e.width,u=e.height,l=t.width,h=t.height;for(let m=0;m<i;m+=1){const e=r+m;if(e<0||e>=h)continue;const t=Math.min(u-1,Math.floor(m*u/i));for(let r=0;r<s;r+=1){const i=a+r;if(i<0||i>=l)continue;const u=4*(t*c+Math.min(c-1,Math.floor(r*c/s))),h=4*(e*l+i);o[h]=n[u],o[h+1]=n[u+1],o[h+2]=n[u+2],o[h+3]=n[u+3]}}}_copyImageDataRegion(e,t,a,r,s,i,n,o){const c=e.data,u=t.data,l=e.width,h=t.width;for(let m=0;m<o;m+=1)for(let e=0;e<n;e+=1){const t=4*((r+m)*l+(a+e)),n=4*((i+m)*h+(s+e));u[n]=c[t],u[n+1]=c[t+1],u[n+2]=c[t+2],u[n+3]=c[t+3]}}async _fetchRasterTextureAtLevel(e,t,a,r){const{offset:i,size:n}=R(e,t,a),o=this._createRasterTextureExtent(i,n),c=this._createRasterTextureLevelCacheKey(e,t),u=this._getOrCreateRasterTextureLevelCache(c),l=this._getUncoveredRasterTextureExtents(o,u.patches);for(const h of l){const a=this._createRasterTextureExtentCacheKey(h);let i=u.inflight.get(a);i||(i=this._fetchRasterTexturePatch(e,t,h,r),u.inflight.set(a,i));try{const e=await i;s(r),e&&u.patches.push(e)}finally{u.inflight.delete(a)}}return this._composeRasterTextureFromCachedPatches(o,u.patches)}_getOrCreateRasterTextureLevelCache(e){let t=this._rasterTextureFetchCache.get(e);return t||(t={inflight:new Map,patches:[]},this._rasterTextureFetchCache.set(e,t)),t}_createRasterTextureLevelCacheKey(e,t){return[e.url,e.rasterInfo.width,e.rasterInfo.height,t].join(":")}_createRasterTextureExtentCacheKey(e){return[e.xmin,e.ymin,e.xmax,e.ymax].join(":")}_createRasterTextureExtent(e,t){return{xmin:e.x,ymin:e.y,xmax:e.x+t.width,ymax:e.y+t.height}}_getUncoveredRasterTextureExtents(e,t){let a=[e];for(const r of t)if(a=a.flatMap(e=>this._subtractRasterTextureExtent(e,r.extent)),!a.length)break;return a}_subtractRasterTextureExtent(e,t){const a=this._intersectRasterTextureExtents(e,t);if(!a)return[e];const r=[];return e.ymin<a.ymin&&r.push({xmin:e.xmin,ymin:e.ymin,xmax:e.xmax,ymax:a.ymin}),a.ymax<e.ymax&&r.push({xmin:e.xmin,ymin:a.ymax,xmax:e.xmax,ymax:e.ymax}),e.xmin<a.xmin&&r.push({xmin:e.xmin,ymin:a.ymin,xmax:a.xmin,ymax:a.ymax}),a.xmax<e.xmax&&r.push({xmin:a.xmax,ymin:a.ymin,xmax:e.xmax,ymax:a.ymax}),r.filter(({xmin:e,ymin:t,xmax:a,ymax:r})=>a>e&&r>t)}_intersectRasterTextureExtents(e,t){const a=Math.max(e.xmin,t.xmin),r=Math.max(e.ymin,t.ymin),s=Math.min(e.xmax,t.xmax),i=Math.min(e.ymax,t.ymax);return s>a&&i>r?{xmin:a,ymin:r,xmax:s,ymax:i}:null}async _fetchRasterTexturePatch(e,t,a,r){const{pixelBlock:i}=await e.fetchRawPixels(t,{x:a.xmin,y:a.ymin},{width:a.xmax-a.xmin,height:a.ymax-a.ymin},r);if(s(r),i)return{extent:a,imageData:this._createImageDataFromPixelBlock(i)}}_composeRasterTextureFromCachedPatches(e,t){const a=t.filter(t=>this._intersectRasterTextureExtents(e,t.extent));if(!a.length)return;const r=new ImageData(e.xmax-e.xmin,e.ymax-e.ymin);for(const s of a){const t=this._intersectRasterTextureExtents(e,s.extent);t&&this._copyImageDataRegion(s.imageData,r,t.xmin-s.extent.xmin,t.ymin-s.extent.ymin,t.xmin-e.xmin,t.ymin-e.ymin,t.xmax-t.xmin,t.ymax-t.ymin)}return r}async _loadRaster(e,t){const{loadRaster:a}=await import("../../PanoramicViewer/utils.js"),r=await a(this._resolveTextureUrl(e),t);return s(t),r}async _createCompositedDefaultRasterTexture(e,t,a,r,i){const{pyramidScalingFactor:n}=e.rasterInfo.storageInfo,o=n??D,c=w(e.rasterInfo.width,e.rasterInfo.height,a,o),l=await this._fetchRasterTextureAtLevel(e,r,null,i);if(s(i),!l)return;const h=await this._fetchRasterTextureAtLevel(e,a,t,i);if(s(i),!h)return new u({data:l});const m=new ImageData(c.width,c.height);this._copyImageData(l,m,0,0,c.width,c.height);const p=o**a,{x:f,y:d}=this._resolveRasterDrawOrigin(t,p);return this._copyImageData(h,m,f,d),new u({data:m})}async _createRasterTexture(e,t,a,r){const{maximumPyramidLevel:s}=e.rasterInfo.storageInfo,i=await this._fetchRasterTextureAtLevel(e,a??s,t,r);if(i)return new u({data:i})}async _createPanoramicRasterTexture(e,t,a,r,i,n){if(i??=await y(t,a,r,this._properties.pointToPixel,n),s(n),!i?.length)return this._createRasterTexture(e,null,void 0,n);const{baseLevel:o,level:c,scalingFactor:u}=this._resolvePanoramicRasterLevels(e,a,i);return o<=c?this._createRasterTexture(e,null,c,n):this._createCompositedPanoramicRasterTexture(e,i,{baseLevel:o,level:c,scalingFactor:u},n)}_resolvePanoramicRasterLevels(e,t,a){const{maximumPyramidLevel:r,pyramidScalingFactor:s}=e.rasterInfo.storageInfo,i=a.reduce((a,r)=>Math.min(a,P(e,t,r)),r),n=M(e,i),o=s??D;return{baseLevel:Math.min(r,n+T),level:n,scalingFactor:o}}async _createCompositedPanoramicRasterTexture(e,t,a,r){const{baseLevel:i,level:n,scalingFactor:o}=a,c=w(e.rasterInfo.width,e.rasterInfo.height,n,o),l=await this._fetchRasterTextureAtLevel(e,i,null,r);if(s(r),!l)return;const h=new ImageData(c.width,c.height);this._copyImageData(l,h,0,0,c.width,c.height);const m=o**n;for(const u of t){const t=await this._fetchRasterTextureAtLevel(e,n,u,r);if(s(r),!t)continue;const{x:a,y:i}=this._resolveRasterDrawOrigin(u,m);this._copyImageData(t,h,a,i)}return new u({data:h})}_resolveRasterDrawOrigin(e,t){return{x:Math.max(0,Math.floor(e.xmin/t)),y:Math.max(0,Math.floor(e.ymin/t))}}async _createGridMesh(e,t,a,r,c,u,h){if("3d"!==t.type)return null;const m=await Promise.all(r.map(e=>e.spatialReference.equals(t.spatialReference)?e:n(e,t.spatialReference,h)));if(s(h),m.some(e=>!e))return null;const{faces:p,position:f,uv:d}=I(m,e,a,c);return u?.forEach((t,a)=>{const r=2*a;d[r]=t.x/e[0],d[r+1]=t.y/e[1]}),new i({vertexAttributes:new l({position:f,uv:d}),components:[new o({faces:p})],spatialReference:t.spatialReference.clone()})}async _createFootprintMesh(e,t,a,r,i,n){if("3d"!==t.type)return null;const o=a?.attributes.farDistance,c=b(e,r),u=i??o,l="number"==typeof u&&u>0?await this._properties.getPointAtDistance(c,u,n):await this._properties.getMapPoint(c,n);return s(n),this._createGridMesh(e,t,r,l)}async _resolveDefaultMeshPosition(e,t,a,r,i,n,o){const c=e.geometry;if("mesh"===c?.type&&o===this._defaultZOffsetPercentage)return c.vertexAttributes.position.slice();const u=this._resolveDefaultSuperimposeDistance(r,o),l=await this._createFootprintMesh(t,a,r,i,u,{signal:n});return s(n),l?.vertexAttributes.position.slice()??null}async _createPanoramicGraphic(t){const{areaOfInterest:r,imageSize:s,signal:i,texture:n,textureUrl:o,view:l}=t;if(!n&&!o)throw new Error("Missing texture URL or texture data.");if(!s)return null;const h=await this._createPanoramicMesh(s,l,r,t.currentBestFeature,i);if(!h)return null;const f=h.vertexAttributes.position,d=[];for(let e=0;e<f.length;e+=3)d.push(...C);h.vertexAttributes.color=new Uint8Array(d);const x=new c({colorTexture:n??new u({url:o})});return h.components?.forEach(e=>{e.shading="source",e.material=x}),new e({geometry:h,symbol:new p({symbolLayers:new a([new m({})])})})}async _createPanoramicMesh(e,t,a,r,i){if("3d"!==t.type)return null;if(!r)return null;const{attributes:n}=r,{farDistance:o}=n;if("number"!=typeof o||!(o>0))return null;const c=b(e,a,F),u=this._properties.getPanoramicTransformationState?.();if(!u)return null;const{imageToWorldProperties:l,updateElevationProps:m}=u,p=await h(c.map(e=>({...e,depth:o??l.farDistance})),l,m);return s(i),this._createGridMesh(e,t,a,p,F,c)}async _createDefaultGraphic(t){const{texture:r,textureUrl:s}=t;if(!r&&!s)throw new Error("Missing texture URL or texture data.");if(!t.imageSize)return null;const i=t.currentBestFeature?this._resolveDefaultSuperimposeDistance(t.currentBestFeature,this._defaultZOffsetPercentage):void 0,n=await this._createFootprintMesh(t.imageSize,t.view,t.currentBestFeature,t.areaOfInterest,i,{signal:t.signal});return n?(this._applyDefaultMeshAppearance(n,r??new u({url:s})),new e({geometry:n,symbol:new p({symbolLayers:new a([new m({})])})})):null}_applyDefaultMeshAppearance(e,t){const a=e.vertexAttributes.position,r=[];for(let i=0;i<a.length;i+=3)r.push(...C);e.vertexAttributes.color=new Uint8Array(r);const s=t instanceof i?t.components?.[0]?.material??null:new c({colorTexture:t});e.components?.forEach((e,a)=>{e.shading="source",e.material=t instanceof i?t.components?.[a]?.material??s:s})}}export{S as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../core/Accessor.js";import{throwIfAborted as a}from"../../../core/promiseUtils.js";import{property as o}from"../../../core/accessorSupport/decorators/property.js";import{subclass as r}from"../../../core/accessorSupport/decorators/subclass.js";import i from"../../../geometry/Multipoint.js";import n from"../../../geometry/Polygon.js";import s from"../../../geometry/Polyline.js";import{projectAsync as m}from"../../../geometry/projectionUtils.js";import p from"../../../geometry/SpatialReference.js";import{imageToWorld as l,imageToWorldPanoramic as c}from"../../../layers/orientedImagery/transformations/imageToWorld.js";import y from"../../../layers/orientedImagery/transformations/updateElevation.js";import{getUpdateElevationProps as u,getImageToWorldProperties as g,getImageToWorldPanoramicProperties as h,pointToArray as f}from"../../../layers/orientedImagery/transformations/utils.js";import{worldToImagePanoramic as d,worldToImage as w}from"../../../layers/orientedImagery/transformations/worldToImage.js";import{imageSpaceToPoint as T,coordinateToPoints as P,pointToImageSpace as S}from"../support/geometryUtils.js";function G(e){switch(e){case"video":case"default":default:return"default";case"panoramic":return"panoramic";case"panoramic-video":return"panoramic-video"}}let x=class extends t{constructor(e){super(e),this.mode="default"}get horizonAngles(){if("panoramic"!==this.mode)return;const{horizonPitch:e,horizonRoll:t,horizonYaw:a}=this.imageToWorldProperties;return[e,t,a]}async pixelToMapPoint(e,t){const{imageToWorldProperties:o,updateElevationProps:r,mode:i}=this,n=Array.isArray(e)?e:[e];await(this.depthImageService?.load(t)),a(t);const s=await Promise.all(n.map(async e=>{e.depth=await(this.depthImageService?.depthAt(e,{width:this.imageSize?.[0]??0,height:this.imageSize?.[1]??0}))}));if(await Promise.all(s),a(t),"default"===i){const i=await l(n,o,r);return a(t),Array.isArray(e)?i:i[0]}const m=await c(n,o,r);return a(t),Array.isArray(e)?m:m[0]}async pixelToMapPointForFeature(e,t,o){const{feature:r,mode:i,imageSize:n,footprintExtent:s}=t,{elevationSample:y,attributes:f}=r,{elevationSource:d,location:w,cameraHeight:T}=f;let P=w.clone();P.spatialReference.isGeographic&&(P=await m(P,p.WebMercator));const S=await u(w.spatialReference,w.z??0,T,{elevationSample:y,elevationSource:d,extent:s});let G;"elevationSample"in S&&(r.elevationSample=S.elevationSample);const x=Array.isArray(e)?e:[e];await(this.depthImageService?.load(o)),a(o);const v=await Promise.all(x.map(async e=>{e.depth=this.depthImageService?.depthAt(e,{width:n?.[0]??0,height:n?.[1]??0})}));if(await Promise.all(v),a(o),"default"===i||"video"===i){const e=g(f,n[0],n[1]);G=await l(x,{...e,cameraLocation:P},S)}else{const e=h(f,n[0],n[1]);G=await c(x,{...e,cameraLocation:P},S)}return Array.isArray(e)?G:G[0]}async pointToPixel(e,t){const{imageToWorldProperties:o,updateElevationProps:r,mode:i}=this;if(!r||!o)throw new Error("updateElevationProps and imageToWorldProperties are required to perform pointToPixel operation.");const n=Array.isArray(e)?e:[e],{spatialReference:s}=o.cameraLocation,p=await Promise.all(n.map(async e=>{let o=e;return e.hasZ||(o=await y(e,r,t)),o.spatialReference.equals(s)||(o=await m(o,s,t)),a(t),o}));let l;return a(t),l="panoramic"===i?d(p,o):w(p,o),a(t),Array.isArray(e)?l:l[0]}async pointToPixelForFeature(e,t,o){const{feature:r,mode:i,imageSize:n,footprintExtent:s}=t,{elevationSample:l,attributes:c}=r,{elevationSource:f,location:T,cameraHeight:P}=c;let S=T.clone();S.spatialReference.isGeographic&&(S=await m(S,p.WebMercator));const G=await u(T.spatialReference,T.z??0,P,{elevationSample:l,elevationSource:f,extent:s});"elevationSample"in G&&(r.elevationSample=G.elevationSample);const x=Array.isArray(e)?e:[e],v=await Promise.all(x.map(async e=>{let t=e;return e.hasZ||(t=await y(e,G,o)),t.spatialReference.equals(S.spatialReference)||(t=await m(t,S.spatialReference,o)),a(o),t}));a(o);const F="panoramic"===i||"panoramic-video"===i?d(v,{...h(c,n[0],n[1]),cameraLocation:S}):w(v,{...g(c,n[0],n[1]),cameraLocation:S});return a(o),Array.isArray(e)?F:F[0]}async pointToImageGeometry(e,t){const o=await this.pointToPixel(e,t);return a(t),T(o,this.mode,this.imageSize,this.horizonAngles)}async pointToImageGeometryForFeature(e,t,o,r){const i=await this.pointToPixelForFeature(e,t,r);return a(r),T(i,G(t.mode),t.imageSize,o)}async polygonToImageGeometry(e,t){const o=await Promise.all(e.rings.map(async o=>{const r=o.map(t=>P(t,e.spatialReference)),i=await this.pointToPixel(r,t);return a(t),i.map(e=>f(T(e,this.mode,this.imageSize,this.horizonAngles)))}));return a(t),n.fromJSON({rings:o,spatialReference:p.WebMercator})}async polygonToImageGeometryForFeature(e,t,o,r){const i=await Promise.all(e.rings.map(async i=>{const n=i.map(t=>P(t,e.spatialReference)),s=await this.pointToPixelForFeature(n,t,r);return a(r),s.map(e=>f(T(e,G(t.mode),t.imageSize,o)))}));return a(r),n.fromJSON({rings:i,spatialReference:p.WebMercator,hasZ:!0})}async polylineToImageGeometry(e,t){const o=await Promise.all(e.paths.map(async o=>{const r=o.map(t=>P(t,e.spatialReference)),i=await this.pointToPixel(r,t);return a(t),i.map(e=>f(T(e,this.mode,this.imageSize,this.horizonAngles)))}));return a(t),s.fromJSON({paths:o,spatialReference:p.WebMercator})}async polylineToImageGeometryForFeature(e,t,o,r){const i=await Promise.all(e.paths.map(async i=>{const n=i.map(t=>P(t,e.spatialReference)),s=await this.pointToPixelForFeature(n,t,r);return a(r),s.map(e=>f(T(e,G(t.mode),t.imageSize,o)))}));return a(r),s.fromJSON({paths:i,spatialReference:p.WebMercator,hasZ:!0})}async multipointToImageGeometry(e,t){const o=e.points.map(t=>P(t,e.spatialReference)),r=await this.pointToPixel(o,t);a(t);const n=r.map(e=>f(T(e,this.mode,this.imageSize,this.horizonAngles)));return a(t),i.fromJSON({points:n,spatialReference:p.WebMercator})}async multipointToImageGeometryForFeature(e,t,o,r){const n=e.points.map(t=>P(t,e.spatialReference)),s=await this.pointToPixelForFeature(n,t,r);a(r);const m=s.map(e=>f(T(e,G(t.mode),t.imageSize,o)));return a(r),i.fromJSON({points:m,spatialReference:p.WebMercator,hasZ:!0})}async extentToImageGeometry(e,t){const o=n.fromExtent(e),r=await this.polygonToImageGeometry(o,t);return a(t),r.extent}async geometryToImageGeometry(e,t){switch(e.type){case"point":return await this.pointToImageGeometry(e,t);case"polygon":return await this.polygonToImageGeometry(e,t);case"polyline":return await this.polylineToImageGeometry(e,t);case"multipoint":return await this.multipointToImageGeometry(e,t);case"extent":return await this.extentToImageGeometry(e,t);default:return null}}async extentToImageGeometryForFeature(e,t,o,r){const i=n.fromExtent(e),s=await this.polygonToImageGeometryForFeature(i,t,o,r);return a(r),s.extent}async geometryToImageGeometryForFeature(e,t,a,o){switch(e.type){case"point":return await this.pointToImageGeometryForFeature(e,t,a,o);case"polygon":return await this.polygonToImageGeometryForFeature(e,t,a,o);case"polyline":return await this.polylineToImageGeometryForFeature(e,t,a,o);case"multipoint":return await this.multipointToImageGeometryForFeature(e,t,a,o);case"extent":return await this.extentToImageGeometryForFeature(e,t,a,o);default:return null}}async imagePointToMapGeometry(e,t){const o=S(e,this.mode,this.imageSize,this.horizonAngles),r=await this.pixelToMapPoint(o,t);return a(t),r}async imagePolygonToMapGeometry(e,t){const o=await Promise.all(e.rings.map(async a=>{const o=a.map(t=>P(t,e.spatialReference)).map(e=>S(e,this.mode,this.imageSize,this.horizonAngles));return await this.pixelToMapPoint(o,t)}));return a(t),new n({rings:o.map(e=>e.map(f)),spatialReference:o[0][0].spatialReference})}async imagePolylineToMapGeometry(e,t){const o=await Promise.all(e.paths.map(async a=>{const o=a.map(t=>P(t,e.spatialReference)).map(e=>S(e,this.mode,this.imageSize,this.horizonAngles));return await this.pixelToMapPoint(o,t)}));return a(t),new s({paths:o.map(e=>e.map(f)),spatialReference:o[0][0].spatialReference})}async imageMultipointToMapGeometry(e,t){const o=e.points.map(t=>P(t,e.spatialReference)).map(e=>S(e,this.mode,this.imageSize,this.horizonAngles)),r=await this.pixelToMapPoint(o,t);return a(t),new i({points:r.map(e=>f(e)),spatialReference:r[0].spatialReference})}async imageExtentToMapGeometry(e,t){const o=n.fromExtent(e),r=await this.imagePolygonToMapGeometry(o,t);a(t);const i=await this.imageGeometryToMapGeometry(r,t);return a(t),i.extent}async imageGeometryToMapGeometry(e,t){switch(e.type){case"point":return await this.imagePointToMapGeometry(e,t);case"polygon":return await this.imagePolygonToMapGeometry(e,t);case"polyline":return await this.imagePolylineToMapGeometry(e,t);case"multipoint":return await this.imageMultipointToMapGeometry(e,t);case"extent":return await this.imageExtentToMapGeometry(e,t);default:return null}}};e([o()],x.prototype,"mode",void 0),e([o()],x.prototype,"imageToWorldProperties",void 0),e([o()],x.prototype,"updateElevationProps",void 0),e([o()],x.prototype,"depthImageService",void 0),e([o()],x.prototype,"imageSize",void 0),e([o()],x.prototype,"horizonAngles",null),x=e([r("esri.widgets.OrientedImageryViewer.services.TransformationService")],x);const v=x;export{v as default};
2
+ import{__decorate as e}from"tslib";import t from"../../../core/Accessor.js";import{throwIfAborted as a}from"../../../core/promiseUtils.js";import{property as o}from"../../../core/accessorSupport/decorators/property.js";import{subclass as r}from"../../../core/accessorSupport/decorators/subclass.js";import i from"../../../geometry/Multipoint.js";import n from"../../../geometry/Polygon.js";import s from"../../../geometry/Polyline.js";import{projectAsync as m}from"../../../geometry/projectionUtils.js";import p from"../../../geometry/SpatialReference.js";import{imageToWorld as l,imageToWorldPanoramic as c}from"../../../layers/orientedImagery/transformations/imageToWorld.js";import y from"../../../layers/orientedImagery/transformations/updateElevation.js";import{getUpdateElevationProps as u,getImageToWorldProperties as h,getImageToWorldPanoramicProperties as g,pointToArray as f}from"../../../layers/orientedImagery/transformations/utils.js";import{worldToImagePanoramic as d,worldToImage as w}from"../../../layers/orientedImagery/transformations/worldToImage.js";import{imageSpaceToPoint as T,coordinateToPoints as P,pointToImageSpace as S}from"../support/geometryUtils.js";function G(e){switch(e){case"video":case"default":default:return"default";case"panoramic":return"panoramic";case"panoramic-video":return"panoramic-video"}}let x=class extends t{constructor(e){super(e),this.mode="default"}get horizonAngles(){if("panoramic"!==this.mode)return;const{horizonPitch:e,horizonRoll:t,horizonYaw:a}=this.imageToWorldProperties;return[e,t,a]}async pixelToMapPoint(e,t){const{imageToWorldProperties:o,updateElevationProps:r,mode:i}=this,n=Array.isArray(e)?e:[e];await(this.depthImageService?.load(t)),a(t);const s=await Promise.all(n.map(async e=>{e.depth=await(this.depthImageService?.depthAt(e,{width:this.imageSize?.[0]??0,height:this.imageSize?.[1]??0}))}));if(await Promise.all(s),a(t),"default"===i){const i=await l(n,o,r);return a(t),Array.isArray(e)?i:i[0]}const m=await c(n,o,r);return a(t),Array.isArray(e)?m:m[0]}async pixelToPointAtDistance(e,t,o){if("default"!==this.mode)throw new Error("pixelToPointAtDistance requires default transformation mode.");const r=this.imageToWorldProperties,i=(Array.isArray(e)?e:[e]).map(e=>({...e,depth:t??r.farDistance})),n=await l(i,r,this.updateElevationProps);return a(o),Array.isArray(e)?n:n[0]}async pixelToMapPointForFeature(e,t,o){const{feature:r,mode:i,imageSize:n,footprintExtent:s}=t,{elevationSample:y,attributes:f}=r,{elevationSource:d,location:w,cameraHeight:T}=f;let P=w.clone();P.spatialReference.isGeographic&&(P=await m(P,p.WebMercator));const S=await u(w.spatialReference,w.z??0,T,{elevationSample:y,elevationSource:d,extent:s});let G;"elevationSample"in S&&(r.elevationSample=S.elevationSample);const x=Array.isArray(e)?e:[e];await(this.depthImageService?.load(o)),a(o);const v=await Promise.all(x.map(async e=>{e.depth=this.depthImageService?.depthAt(e,{width:n?.[0]??0,height:n?.[1]??0})}));if(await Promise.all(v),a(o),"default"===i||"video"===i){const e=h(f,n[0],n[1]);G=await l(x,{...e,cameraLocation:P},S)}else{const e=g(f,n[0],n[1]);G=await c(x,{...e,cameraLocation:P},S)}return Array.isArray(e)?G:G[0]}async pointToPixel(e,t){const{imageToWorldProperties:o,updateElevationProps:r,mode:i}=this;if(!r||!o)throw new Error("updateElevationProps and imageToWorldProperties are required to perform pointToPixel operation.");const n=Array.isArray(e)?e:[e],{spatialReference:s}=o.cameraLocation,p=await Promise.all(n.map(async e=>{let o=e;return e.hasZ||(o=await y(e,r,t)),o.spatialReference.equals(s)||(o=await m(o,s,t)),a(t),o}));let l;return a(t),l="panoramic"===i?d(p,o):w(p,o),a(t),Array.isArray(e)?l:l[0]}async pointToPixelForFeature(e,t,o){const{feature:r,mode:i,imageSize:n,footprintExtent:s}=t,{elevationSample:l,attributes:c}=r,{elevationSource:f,location:T,cameraHeight:P}=c;let S=T.clone();S.spatialReference.isGeographic&&(S=await m(S,p.WebMercator));const G=await u(T.spatialReference,T.z??0,P,{elevationSample:l,elevationSource:f,extent:s});"elevationSample"in G&&(r.elevationSample=G.elevationSample);const x=Array.isArray(e)?e:[e],v=await Promise.all(x.map(async e=>{let t=e;return e.hasZ||(t=await y(e,G,o)),t.spatialReference.equals(S.spatialReference)||(t=await m(t,S.spatialReference,o)),a(o),t}));a(o);const A="panoramic"===i||"panoramic-video"===i?d(v,{...g(c,n[0],n[1]),cameraLocation:S}):w(v,{...h(c,n[0],n[1]),cameraLocation:S});return a(o),Array.isArray(e)?A:A[0]}async pointToImageGeometry(e,t){const o=await this.pointToPixel(e,t);return a(t),T(o,this.mode,this.imageSize,this.horizonAngles)}async pointToImageGeometryForFeature(e,t,o,r){const i=await this.pointToPixelForFeature(e,t,r);return a(r),T(i,G(t.mode),t.imageSize,o)}async polygonToImageGeometry(e,t){const o=await Promise.all(e.rings.map(async o=>{const r=o.map(t=>P(t,e.spatialReference)),i=await this.pointToPixel(r,t);return a(t),i.map(e=>f(T(e,this.mode,this.imageSize,this.horizonAngles)))}));return a(t),n.fromJSON({rings:o,spatialReference:p.WebMercator})}async polygonToImageGeometryForFeature(e,t,o,r){const i=await Promise.all(e.rings.map(async i=>{const n=i.map(t=>P(t,e.spatialReference)),s=await this.pointToPixelForFeature(n,t,r);return a(r),s.map(e=>f(T(e,G(t.mode),t.imageSize,o)))}));return a(r),n.fromJSON({rings:i,spatialReference:p.WebMercator,hasZ:!0})}async polylineToImageGeometry(e,t){const o=await Promise.all(e.paths.map(async o=>{const r=o.map(t=>P(t,e.spatialReference)),i=await this.pointToPixel(r,t);return a(t),i.map(e=>f(T(e,this.mode,this.imageSize,this.horizonAngles)))}));return a(t),s.fromJSON({paths:o,spatialReference:p.WebMercator})}async polylineToImageGeometryForFeature(e,t,o,r){const i=await Promise.all(e.paths.map(async i=>{const n=i.map(t=>P(t,e.spatialReference)),s=await this.pointToPixelForFeature(n,t,r);return a(r),s.map(e=>f(T(e,G(t.mode),t.imageSize,o)))}));return a(r),s.fromJSON({paths:i,spatialReference:p.WebMercator,hasZ:!0})}async multipointToImageGeometry(e,t){const o=e.points.map(t=>P(t,e.spatialReference)),r=await this.pointToPixel(o,t);a(t);const n=r.map(e=>f(T(e,this.mode,this.imageSize,this.horizonAngles)));return a(t),i.fromJSON({points:n,spatialReference:p.WebMercator})}async multipointToImageGeometryForFeature(e,t,o,r){const n=e.points.map(t=>P(t,e.spatialReference)),s=await this.pointToPixelForFeature(n,t,r);a(r);const m=s.map(e=>f(T(e,G(t.mode),t.imageSize,o)));return a(r),i.fromJSON({points:m,spatialReference:p.WebMercator,hasZ:!0})}async extentToImageGeometry(e,t){const o=n.fromExtent(e),r=await this.polygonToImageGeometry(o,t);return a(t),r.extent}async geometryToImageGeometry(e,t){switch(e.type){case"point":return await this.pointToImageGeometry(e,t);case"polygon":return await this.polygonToImageGeometry(e,t);case"polyline":return await this.polylineToImageGeometry(e,t);case"multipoint":return await this.multipointToImageGeometry(e,t);case"extent":return await this.extentToImageGeometry(e,t);default:return null}}async extentToImageGeometryForFeature(e,t,o,r){const i=n.fromExtent(e),s=await this.polygonToImageGeometryForFeature(i,t,o,r);return a(r),s.extent}async geometryToImageGeometryForFeature(e,t,a,o){switch(e.type){case"point":return await this.pointToImageGeometryForFeature(e,t,a,o);case"polygon":return await this.polygonToImageGeometryForFeature(e,t,a,o);case"polyline":return await this.polylineToImageGeometryForFeature(e,t,a,o);case"multipoint":return await this.multipointToImageGeometryForFeature(e,t,a,o);case"extent":return await this.extentToImageGeometryForFeature(e,t,a,o);default:return null}}async imagePointToMapGeometry(e,t){const o=S(e,this.mode,this.imageSize,this.horizonAngles),r=await this.pixelToMapPoint(o,t);return a(t),r}async imagePolygonToMapGeometry(e,t){const o=await Promise.all(e.rings.map(async a=>{const o=a.map(t=>P(t,e.spatialReference)).map(e=>S(e,this.mode,this.imageSize,this.horizonAngles));return await this.pixelToMapPoint(o,t)}));return a(t),new n({rings:o.map(e=>e.map(f)),spatialReference:o[0][0].spatialReference})}async imagePolylineToMapGeometry(e,t){const o=await Promise.all(e.paths.map(async a=>{const o=a.map(t=>P(t,e.spatialReference)).map(e=>S(e,this.mode,this.imageSize,this.horizonAngles));return await this.pixelToMapPoint(o,t)}));return a(t),new s({paths:o.map(e=>e.map(f)),spatialReference:o[0][0].spatialReference})}async imageMultipointToMapGeometry(e,t){const o=e.points.map(t=>P(t,e.spatialReference)).map(e=>S(e,this.mode,this.imageSize,this.horizonAngles)),r=await this.pixelToMapPoint(o,t);return a(t),new i({points:r.map(e=>f(e)),spatialReference:r[0].spatialReference})}async imageExtentToMapGeometry(e,t){const o=n.fromExtent(e),r=await this.imagePolygonToMapGeometry(o,t);a(t);const i=await this.imageGeometryToMapGeometry(r,t);return a(t),i.extent}async imageGeometryToMapGeometry(e,t){switch(e.type){case"point":return await this.imagePointToMapGeometry(e,t);case"polygon":return await this.imagePolygonToMapGeometry(e,t);case"polyline":return await this.imagePolylineToMapGeometry(e,t);case"multipoint":return await this.imageMultipointToMapGeometry(e,t);case"extent":return await this.imageExtentToMapGeometry(e,t);default:return null}}};e([o()],x.prototype,"mode",void 0),e([o()],x.prototype,"imageToWorldProperties",void 0),e([o()],x.prototype,"updateElevationProps",void 0),e([o()],x.prototype,"depthImageService",void 0),e([o()],x.prototype,"imageSize",void 0),e([o()],x.prototype,"horizonAngles",null),x=e([r("esri.widgets.OrientedImageryViewer.services.TransformationService")],x);const v=x;export{v as default};