UNPKG

@arcgis/core

Version:

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

201 lines (199 loc) • 8.65 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 { SystemOrAreaUnit } from "../../core/units.js"; import type { AreaMeasurement, AreaMeasurementLabel, MeasurementState } from "../types.js"; import type { SnappingOptionsProperties } from "../../views/interactive/snapping/SnappingOptions.js"; export interface AreaMeasurement2DViewModelProperties extends Partial<Pick<AreaMeasurement2DViewModel, "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 area values. * Possible values are listed in [unitOptions](https://developers.arcgis.com/javascript/latest/references/core/widgets/AreaMeasurement2D/AreaMeasurement2DViewModel/#unitOptions). * * @example * // To create the AreaMeasurement2D widget that displays area in square US feet * let measurementWidget = new AreaMeasurement2D({ * viewModel: { * view: view, * unit: "square-us-feet" * } * }); * * // To display the current measurement unit * console.log('Current unit: ', measurementWidget.viewModel.unit); */ unit?: SystemOrAreaUnit | null; /** * List of available units and unit systems (imperial, metric) for displaying the area values. * By default, the following units are included: `metric`, `imperial`, `square-inches`, `square-feet`, `square-us-feet`, `square-yards`, `square-miles`, `square-meters`, `square-kilometers`, `acres`, `ares`, `hectares`. * Possible [unit](https://developers.arcgis.com/javascript/latest/references/core/widgets/AreaMeasurement2D/AreaMeasurement2DViewModel/#unit) values can only be a subset of this list. * * @example * // To display the available units to the console * let measurementWidget = new AreaMeasurement2D({ * view: view * }); * console.log('All units: ', measurementWidget.viewModel.unitOptions.join(", ")); */ unitOptions?: SystemOrAreaUnit[] | null; } /** * Provides the logic for the [AreaMeasurement2D](https://developers.arcgis.com/javascript/latest/references/core/widgets/AreaMeasurement2D/) widget and [component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-area-measurement-2d/). * * @since 4.10 * @see [AreaMeasurement2D](https://developers.arcgis.com/javascript/latest/references/core/widgets/AreaMeasurement2D/) widget * @see [Area Measurement 2D component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-area-measurement-2d/) * @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern) */ export default class AreaMeasurement2DViewModel extends Accessor { constructor(properties?: AreaMeasurement2DViewModelProperties); /** * The area and perimeter of the measurement polygon in square meters and meters respectively. * * @example * // After creating and adding the AreaMeasurement2D widget * let measurementWidget = new AreaMeasurement2D({ * 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( * "Area: ", measurement.area, * "Perimeter: ", measurement.perimeter * ); * } * ); */ get measurement(): AreaMeasurement | null | undefined; /** * This property returns the locale specific representation of the area and perimeter. * Areas and perimeters are rounded to two decimal places. Areas are sourced from the [measurement](https://developers.arcgis.com/javascript/latest/references/core/widgets/AreaMeasurement2D/AreaMeasurement2DViewModel/#measurement) property * (in square meters) and converted to the user defined units/system. * * @example * // After creating and adding the AreaMeasurement2D widget * let measurementWidget = new AreaMeasurement2D({ * view: view * }); * view.ui.add(measurementWidget, "top-right"); * * // Measurement labels can be accessed from this property * reactiveUtils.watch( * () => measurementWidget.viewModel.measurementLabel, * (label) => { * console.log( * "Area: ", label.area, * "Perimeter: ", label.perimeter * ); * } * ); */ get measurementLabel(): AreaMeasurementLabel | 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 ViewModel'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 AreaMeasurement2D widget * let measurementWidget = new AreaMeasurement2D({ * view: 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 area values. * Possible values are listed in [unitOptions](https://developers.arcgis.com/javascript/latest/references/core/widgets/AreaMeasurement2D/AreaMeasurement2DViewModel/#unitOptions). * * @example * // To create the AreaMeasurement2D widget that displays area in square US feet * let measurementWidget = new AreaMeasurement2D({ * viewModel: { * view: view, * unit: "square-us-feet" * } * }); * * // To display the current measurement unit * console.log('Current unit: ', measurementWidget.viewModel.unit); */ get unit(): SystemOrAreaUnit; set unit(value: SystemOrAreaUnit | null | undefined); /** * List of available units and unit systems (imperial, metric) for displaying the area values. * By default, the following units are included: `metric`, `imperial`, `square-inches`, `square-feet`, `square-us-feet`, `square-yards`, `square-miles`, `square-meters`, `square-kilometers`, `acres`, `ares`, `hectares`. * Possible [unit](https://developers.arcgis.com/javascript/latest/references/core/widgets/AreaMeasurement2D/AreaMeasurement2DViewModel/#unit) values can only be a subset of this list. * * @example * // To display the available units to the console * let measurementWidget = new AreaMeasurement2D({ * view: view * }); * console.log('All units: ', measurementWidget.viewModel.unitOptions.join(", ")); */ get unitOptions(): SystemOrAreaUnit[]; set unitOptions(value: SystemOrAreaUnit[] | null | undefined); /** * The view from which the widget will operate. * * @example * // To create the AreaMeasurement2D widget with the view property * let measurementWidget = new AreaMeasurement2D({ * 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 areaMeasurement2DViewModel = new AreaMeasurement2DViewModel({ * view: view, * unit: "square-yards" * }); * * await areaMeasurement2DViewModel.start(); */ start(): Promise<void>; }