UNPKG

@arcgis/core

Version:

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

107 lines (105 loc) 6.91 kB
import type LineOfSightLayer from "../../layers/LineOfSightLayer.js"; import type LineOfSightAnalysisView3D from "../3d/analysis/LineOfSightAnalysisView3D.js"; import type LayerView from "./LayerView.js"; import type { AbortOptions } from "../../core/promiseUtils.js"; import type { LineOfSightPlacementResult } from "../3d/analysis/LineOfSight/types.js"; import type { LayerViewProperties } from "./LayerView.js"; export interface LineOfSightLayerViewProperties extends LayerViewProperties, Partial<Pick<LineOfSightLayerView, "interactive">> {} /** * Represents the [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/) of a [LineOfSightLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/LineOfSightLayer/) * after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/references/core/Map/) in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/). * * The line of sight layer view controls whether the [LineOfSightLayer.analysis](https://developers.arcgis.com/javascript/latest/references/core/layers/LineOfSightLayer/#analysis) in its associated * [LineOfSightLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/LineOfSightLayer/) can be created or edited interactively. * * It allows to create an observer and/or targets interactively using the [place()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LineOfSightLayerView/#place) method, query the [results](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LineOfSightLayerView/#results), * or make an existing analysis editable by enabling the [interactive](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LineOfSightLayerView/#interactive) property. * * The view for the layer can be retrieved using [SceneView.whenLayerView()](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#whenLayerView). * * ```js * // create new layer and add it to the map * const lineOfSightLayer = new LineOfSightLayer(); * view.map.add(lineOfSightLayer); * * // retrieve layer view for the layer * const lineOfSightLayerView = await view.whenLayerView(lineOfSightLayer); * ``` * * @see [LineOfSightLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/LineOfSightLayer/) * @see [LineOfSightAnalysis](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysis/) * @see [LineOfSightAnalysisTarget](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysisTarget/) * @see [LineOfSightAnalysisObserver](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysisObserver/) * @see [LineOfSightAnalysisView3D](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/LineOfSightAnalysisView3D/) * @see [Line Of Sight component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-line-of-sight/) */ export default abstract class LineOfSightLayerView extends LayerView { /** * Enables interactivity for the [layer](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LineOfSightLayerView/#layer). When set to `true`, manipulators will be displayed, * allowing users to click and drag to edit the layer's * [LineOfSightLayer.analysis](https://developers.arcgis.com/javascript/latest/references/core/layers/LineOfSightLayer/#analysis) if it has a valid * [LineOfSightAnalysis.observer](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysis/#observer) and * [LineOfSightAnalysis.targets](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysis/#targets). Right-clicking a target will remove it. * * This property is automatically set to `true` when the analysis is assigned to a * [Line Of Sight component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-line-of-sight/). * * @default false */ accessor interactive: boolean; /** The layer this layer view represents. */ get layer(): LineOfSightLayer; /** * Analysis results for each target. * * The order of results matches the order of targets, so if the index of the target is known the collection can be * indexed directly: * * ```js * const layerView = await view.whenLayerView(lineOfSightLayer); * const result = layerView.results.at(targetIdx); * ``` * * Given a [target](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysisTarget/) object, the results collection can also be * searched: * * ```js * const result = layerView.results.find((result) => result.target === targetObject); * ``` */ get results(): LineOfSightAnalysisView3D["results"]; /** * Starts the interactive placement of an observer and/or targets on the [layer](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LineOfSightLayerView/#layer)'s * [LineOfSightLayer.analysis](https://developers.arcgis.com/javascript/latest/references/core/layers/LineOfSightLayer/#analysis). * * If the analysis does not have a valid observer yet, this method will allow placing an observer, which can be followed * by zero or more targets. Otherwise, if it already has a valid observer, it will allow placing targets. * * The placement operation will finish when the user presses the escape key. * To stop the placing programmatically, pass an abort signal as an argument when calling the method. * The promise resolves when the operation is productive, i.e. an oberver or any targets were added. * Otherwise, if nothing was added or signal was aborted, the promise is rejected. * * Calling this method sets [interactive](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LineOfSightLayerView/#interactive) to `true`. * * @param options - An object specifying additional options. * @returns A promise * which resolves when the operation is completed successfully - i.e. the user places an observer and/or target(s), * leaving the analysis in a valid state. Otherwise, the promise is rejected. * @since 4.33 * @example * const abortController = new AbortController(); * * try { * await layerView.place({ signal: abortController.signal }); * } catch (error) { * if (error.name === "AbortError") { * console.log("Placement operation was cancelled."); * } * } * * // cancel the placement operation at some later point * abortController.abort(); */ place(options?: AbortOptions | null | undefined): Promise<LineOfSightPlacementResult>; }