AreaMeasurementAnalysis

ESM: import AreaMeasurementAnalysis from "@arcgis/core/analysis/AreaMeasurementAnalysis.js";
CDN: const AreaMeasurementAnalysis = await $arcgis.import("@arcgis/core/analysis/AreaMeasurementAnalysis.js");
Class: @arcgis/core/analysis/AreaMeasurementAnalysis
Inheritance: AreaMeasurementAnalysisAnalysisAccessor
Since: ArcGIS Maps SDK for JavaScript 4.23

AreaMeasurementAnalysis computes the area of a polygonal region and displays the measurement in a 3D SceneView.

To display an area measurement of a polygon, create a new instance of AreaMeasurementAnalysis, add it to SceneView.analyses and set the geometry property.

Use the AreaMeasurementAnalysisView3D to retrieve analysis results.

// create analysis
const areaMeasurement = new AreaMeasurementAnalysis({
  geometry: new Polygon({ })
});

// add to scene view
sceneView.analyses.add(areaMeasurement);

// retrieve measured results from analysis view once available
const analysisView = await sceneView.whenAnalysisView(areaMeasurement);
await reactiveUtils.whenOnce(() => analysisView.result);

const result = analysisView.result;

To draw an area measurement interactively, use the AreaMeasurementAnalysisView3D.place() method.

const abortController = new AbortController();

try {
  await analysisView.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();

How the area and perimeter are computed depends on the scene's spatial reference and the length of the measured perimeter.

In geographic coordinate systems (GCS) and in Web Mercator:

  • If the measurement's perimeter is below 100 km, they are computed in a Euclidean manner, in an ECEF coordinate system (or equivalent on other planets).
  • If the perimeter is above 100 km, they are computed geodetically, and the visualization takes the curvature of the planet into consideration.

In projected coordinate systems (PCS), apart from Web Mercator, the area and perimeter are always calculated in a Euclidean manner (in their respective PCS).

The area may be visualized and calculated in two ways:

  1. If all the vertices are mostly coplanar (lying on the same plane), the measurement polygon is formed on that plane, and area and perimeter are calculated from its geometry.
  2. If the vertices don't form a planar surface, the measurement polygon is projected to a horizontal plane, and area and perimeter are calculated from its geometry.

area-measurement-3d-types

Use the Area Measurement 3D component to display a user interface for the area measurement analysis.

Known Limitation

This analysis is only supported in a 3D SceneView.

See also

Constructors

AreaMeasurementAnalysis

Constructor
new AreaMeasurementAnalysis(properties)
Parameter
properties Object
optional

See the properties for a list of all the properties that may be passed into the constructor.

Property Overview

Any properties can be set, retrieved or listened to. See the Watch for changes topic.
Show inherited properties Hide inherited properties
Name Type Summary Class

The name of the class.

Accessor

Polygon whose area is to be computed and displayed in the view.

AreaMeasurementAnalysis

A user settable identifier for the analysis.

Analysis

The origin of the analysis.

Analysis

The type of analysis.

AreaMeasurementAnalysis

An automatically generated unique identifier assigned to the instance.

Analysis

Unit system (imperial, metric) or specific unit used for displaying the computed area in the view.

AreaMeasurementAnalysis

Indicates whether the analysis is ready to be computed and interacted with in the view.

AreaMeasurementAnalysis

Property Details

declaredClass

Inherited
Property
declaredClass Stringreadonly
Inherited from Accessor

The name of the class. The declared class name is formatted as esri.folder.className.

geometry

Property
geometry Polygon |null |undefinedautocast

Polygon whose area is to be computed and displayed in the view.

If the polygon has z-values then these will be treated as absolute values.

Known Limitation

For polygons with multiple rings, only the measurement of the first ring will be displayed.

id

Inherited
Property
id String
Inherited from Analysis

A user settable identifier for the analysis. A unique value is automatically generated when the analysis is created if it is not set explicitly during construction.

origin

Inherited
Property
origin AnalysisOriginWebScene |null |undefinedautocast
Inherited from Analysis

The origin of the analysis. The origin can be of type web-scene when the analysis was applied from the WebScene.initialViewProperties or a Slide.

type

Property
type Stringreadonly

The type of analysis. For area measurement analysis, this is always "area-measurement".

For AreaMeasurementAnalysis the type is always "area-measurement".

uid

Inherited
Property
uid Stringreadonly
Inherited from Analysis
Since: ArcGIS Maps SDK for JavaScript 4.33 Analysis since 4.33, uid added at 4.33.

An automatically generated unique identifier assigned to the instance. The unique id is generated each time the application is loaded.

unit

Property
unit SystemOrAreaUnit |null |undefined

Unit system (imperial, metric) or specific unit used for displaying the computed area in the view.

valid

Property
valid Booleanreadonly
Since: ArcGIS Maps SDK for JavaScript 4.33 AreaMeasurementAnalysis since 4.23, valid added at 4.33.

Indicates whether the analysis is ready to be computed and interacted with in the view. It requires the geometry to be a valid polygon whose first ring contains at least 4 points, with the first and last points being the same to close the polygon.

Method Overview

Show inherited methods Hide inherited methods
Name Return Type Summary Class

Adds one or more handles which are to be tied to the lifecycle of the object.

Accessor
this

Creates a deep clone of this object.

Analysis

Returns true if a named group of handles exist.

Accessor

Removes a group of handles owned by the object.

Accessor

Method Details

addHandles

Inherited
Method
addHandles(handleOrHandles, groupKey)
Inherited from Accessor
Since: ArcGIS Maps SDK for JavaScript 4.25 Accessor since 4.0, addHandles added at 4.25.

Adds one or more handles which are to be tied to the lifecycle of the object. The handles will be removed when the object is destroyed.

// Manually manage handles
const handle = reactiveUtils.when(
  () => !view.updating,
  () => {
    wkidSelect.disabled = false;
  },
  { once: true }
);

this.addHandles(handle);

// Destroy the object
this.destroy();
Parameters
handleOrHandles WatchHandle|WatchHandle[]

Handles marked for removal once the object is destroyed.

groupKey *
optional

Key identifying the group to which the handles should be added. All the handles in the group can later be removed with Accessor.removeHandles(). If no key is provided the handles are added to a default group.

clone

Inherited
Method
clone(){this}
Inherited from Analysis

Creates a deep clone of this object. Any properties that store values by reference will be assigned copies of the referenced values on the cloned instance.

Returns
Type Description
this A deep clone of the class instance that invoked this method.

hasHandles

Inherited
Method
hasHandles(groupKey){Boolean}
Inherited from Accessor
Since: ArcGIS Maps SDK for JavaScript 4.25 Accessor since 4.0, hasHandles added at 4.25.

Returns true if a named group of handles exist.

Parameter
groupKey *
optional

A group key.

Returns
Type Description
Boolean Returns true if a named group of handles exist.
Example
// Remove a named group of handles if they exist.
if (obj.hasHandles("watch-view-updates")) {
  obj.removeHandles("watch-view-updates");
}

removeHandles

Inherited
Method
removeHandles(groupKey)
Inherited from Accessor
Since: ArcGIS Maps SDK for JavaScript 4.25 Accessor since 4.0, removeHandles added at 4.25.

Removes a group of handles owned by the object.

Parameter
groupKey *
optional

A group key or an array or collection of group keys to remove.

Example
obj.removeHandles(); // removes handles from default group

obj.removeHandles("handle-group");
obj.removeHandles("other-handle-group");

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.