UNPKG

@arcgis/core

Version:

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

195 lines (193 loc) • 8.49 kB
import type Accessor from "../../core/Accessor.js"; import type MapView from "../../views/MapView.js"; import type SnappingOptions from "../../views/interactive/snapping/SnappingOptions.js"; import type { SystemOrLengthUnit } from "../../core/units.js"; import type { LinearMeasurement, MeasurementState } from "../types.js"; import type { SnappingOptionsProperties } from "../../views/interactive/snapping/SnappingOptions.js"; export interface DistanceMeasurement2DViewModelProperties extends Partial<Pick<DistanceMeasurement2DViewModel, "view">> { /** * The [SnappingOptions](https://developers.arcgis.com/javascript/latest/references/core/views/interactive/snapping/SnappingOptions/) for sketching. * It supports [self](https://developers.arcgis.com/javascript/latest/references/core/views/interactive/snapping/SnappingOptions/#selfEnabled) and * [feature](https://developers.arcgis.com/javascript/latest/references/core/views/interactive/snapping/SnappingOptions/#featureEnabled) snapping. * * @beta * @since 4.32 */ snappingOptions?: SnappingOptionsProperties; /** * Unit system (imperial, metric) or specific unit used for displaying the distance values. * Possible values are listed in [unitOptions](https://developers.arcgis.com/javascript/latest/references/core/widgets/DistanceMeasurement2D/DistanceMeasurement2DViewModel/#unitOptions). * * @example * // To create the DistanceMeasurement2D widget that displays distance in yards * let measurementWidget = new DistanceMeasurement2D({ * viewModel: { * view: view, * unit: "yards" * } * }); * * // To display the current measurement unit * console.log('Current unit: ', measurementWidget.viewModel.unit); */ unit?: SystemOrLengthUnit | null; /** * List of available units and unit systems (imperial, metric) for displaying the distance values. * By default, the following units are included: `metric`, `imperial`, `inches`, `feet`, `us-feet`, `yards`, `miles`, `nautical-miles`, `meters`, `kilometers`. * Possible [unit](https://developers.arcgis.com/javascript/latest/references/core/widgets/DistanceMeasurement2D/DistanceMeasurement2DViewModel/#unit) values can only be a subset of this list. * * @example * // To display the available units to the console * let measurementWidget = new DistanceMeasurement2D({ * view: view * }); * console.log('All units: ', measurementWidget.viewModel.unitOptions.join(", ")); */ unitOptions?: SystemOrLengthUnit[] | null; } /** * Provides the logic for the [DistanceMeasurement2D](https://developers.arcgis.com/javascript/latest/references/core/widgets/DistanceMeasurement2D/) widget and [component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-distance-measurement-2d/). * * @since 4.10 * @see [DistanceMeasurement2D](https://developers.arcgis.com/javascript/latest/references/core/widgets/DistanceMeasurement2D/) widget * @see [Distance Measurement 2D component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-distance-measurement-2d/) * @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern) */ export default class DistanceMeasurement2DViewModel extends Accessor { constructor(properties?: DistanceMeasurement2DViewModelProperties); /** * The length and geometry of the measurement polyline in meters. * * @example * // After creating and adding the DistanceMeasurement2D widget * let measurementWidget = new DistanceMeasurement2D({ * view: view * }); * view.ui.add(measurementWidget, "top-right"); * * // Raw measurements (in meters) can be accessed from this property * reactiveUtils.watch( * () => measurementWidget.viewModel.measurement, * (measurement) => { * console.log( * "Length: ", measurement.length, * "Geometry: ", measurement.geometry * ); * } * ); */ get measurement(): LinearMeasurement | null | undefined; /** * This property returns the locale specific representation of the length. Lengths are * rounded to two decimal places. Lengths are sourced from the [measurement](https://developers.arcgis.com/javascript/latest/references/core/widgets/DistanceMeasurement2D/DistanceMeasurement2DViewModel/#measurement) property * (in meters) and converted to the user defined units or system. * * @example * // After creating and adding the DistanceMeasurement2D widget * let measurementWidget = new DistanceMeasurement2D({ * view: view * }); * view.ui.add(measurementWidget, "top-right"); * * // The measurement label can be accessed from this property * reactiveUtils.watch( * () => measurementWidget.viewModel.measurementLabel, * (label) => console.log("Label: ", label) * ); */ get measurementLabel(): string | null | undefined; /** * The [SnappingOptions](https://developers.arcgis.com/javascript/latest/references/core/views/interactive/snapping/SnappingOptions/) for sketching. * It supports [self](https://developers.arcgis.com/javascript/latest/references/core/views/interactive/snapping/SnappingOptions/#selfEnabled) and * [feature](https://developers.arcgis.com/javascript/latest/references/core/views/interactive/snapping/SnappingOptions/#featureEnabled) snapping. * * @beta * @since 4.32 */ get snappingOptions(): SnappingOptions; set snappingOptions(value: SnappingOptionsProperties); /** * The view model's state. * * Value | Description * ------------|------------- * disabled | not ready yet * ready | ready for measuring * measuring | measuring has started * measured | measuring has finished * * @default "disabled" * @example * // To display the state of the DistanceMeasurement2D widget * let measurementWidget = new DistanceMeasurement2D({ view }); * * reactiveUtils.watch( * () => measurementWidget.viewModel.state, * (state) => console.log("Current state: ", state) * ); */ get state(): MeasurementState; /** * Unit system (imperial, metric) or specific unit used for displaying the distance values. * Possible values are listed in [unitOptions](https://developers.arcgis.com/javascript/latest/references/core/widgets/DistanceMeasurement2D/DistanceMeasurement2DViewModel/#unitOptions). * * @example * // To create the DistanceMeasurement2D widget that displays distance in yards * let measurementWidget = new DistanceMeasurement2D({ * viewModel: { * view: view, * unit: "yards" * } * }); * * // To display the current measurement unit * console.log('Current unit: ', measurementWidget.viewModel.unit); */ get unit(): SystemOrLengthUnit; set unit(value: SystemOrLengthUnit | null | undefined); /** * List of available units and unit systems (imperial, metric) for displaying the distance values. * By default, the following units are included: `metric`, `imperial`, `inches`, `feet`, `us-feet`, `yards`, `miles`, `nautical-miles`, `meters`, `kilometers`. * Possible [unit](https://developers.arcgis.com/javascript/latest/references/core/widgets/DistanceMeasurement2D/DistanceMeasurement2DViewModel/#unit) values can only be a subset of this list. * * @example * // To display the available units to the console * let measurementWidget = new DistanceMeasurement2D({ * view: view * }); * console.log('All units: ', measurementWidget.viewModel.unitOptions.join(", ")); */ get unitOptions(): SystemOrLengthUnit[]; set unitOptions(value: SystemOrLengthUnit[] | null | undefined); /** * The view from which the widget will operate. * * @example * // To create DistanceMeasurement2D widget with the view property * let measurementWidget = new DistanceMeasurement2D({ * viewModel: { * view: view * } * }); */ accessor view: MapView | null | undefined; /** * Clears the current measurement. * * @since 4.16 */ clear(): void; /** * Starts a new measurement. * * @since 4.16 * @example * const distanceMeasurement2DViewModel = new DistanceMeasurement2DViewModel({ * view: view, * unit: "us-feet" * }); * * await distanceMeasurement2DViewModel.start(); */ start(): Promise<void>; }