▾
import SnappingOptions from "@arcgis/core/views/interactive/options/SnappingOptions.js";const SnappingOptions = await $arcgis.import("@arcgis/core/views/interactive/options/SnappingOptions.js");- Inheritance
- SnappingOptions→
Accessor
- Subclasses
- SnappingOptions
- Since
- ArcGIS Maps SDK for JavaScript 5.2
Configures snapping while drawing, editing, or placing analyses.
Use view.options.snapping to share snapping options across supported components, view models, and analyses. See ViewOptions for supported tools and opt-in requirements.
Snapping can also be configured on the Sketch and Editor components or their view models, SketchViewModel and EditorViewModel.
Enable self snapping, feature snapping, or both, as described below.
In tools that support the shortcut, holding down the CTRL key temporarily toggles snapping on or off.
Self snapping (Geometry guides)
Self snapping is set via the selfEnabled property. This means that while a user is actively creating or updating a feature or graphic, they will see visualizations to help identify perpendicular and parallel lines, in addition to visualizations which aid in snapping to an extension of an existing feature. The following briefly demonstrates what self snapping looks like in a 2D application. Although this is shown for 2D, the same premise applies for 3D as well.
Feature snapping
Feature snapping is set via the featureEnabled property. It provides the ability to snap vertices of a graphic or feature that is currently being drawn or reshaped to that of an existing feature's vertex, edge, or end point. These existing features belong to layers within the Map. See featureSources for configuring sources or using the automatic sources provided by view options. The following two images demonstrate feature snapping in a 2D application. Similar to self snapping, the same premise applies for 3D as well.
The above shows feature snapping to an existing feature's vertex endpoint and edge while creating a new feature. The bottom demonstrates taking an existing feature and reshaping its geometry to snap to another feature's vertex points.
Things to consider:
Layer types currently supported for snapping are: FeatureLayer, GraphicsLayer (except Mesh geometries),
GeoJSONLayer, WFSLayer, CSVLayer,
MapNotesLayer (2D only), 3D Object SceneLayer (3D only), and
BuildingSceneLayer (3D only).
Snapping is not yet implemented when using the Sketch widget's circle tool. It will be addressed in a future release.
Enabling snapping via the CTRL key is not currently supported using the Sketch widget's rectangle and circle tools. However, snapping can still be activated by setting the enabled property to true in the Sketch widget or its view model. Note that this enables snapping for all tools. This behavior is subject to change in a future release.
| Name | Details | 3D Example | 2D Example |
|---|---|---|---|
| Rectangle | Snap lines that are perpendicular to each other | ![]() | ![]() |
| Parallel | Snap to all parallel lines | ![]() | ![]() |
| Extension | Snap to an extension of the current shape | ![]() | ![]() |
| Vertex (as seen when updating geometries) | Snap vertices to an existing vertex | ![]() | ![]() |
- See also
- Example
- // Create a new instance of Sketch, and// specify a layer in featureSources.// This enables feature snapping on that layer.const sketch = new Sketch({layer: graphicsLayer,view: view,snappingOptions: { // autocasts to SnappingOptions()enabled: true, // snapping is turned on// assigns a collection of FeatureSnappingLayerSource() and enables feature snapping on this layerfeatureSources: [{ layer: graphicsLayer, enabled: true }]}});
Constructors
Constructor
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| properties | | |
Properties
| Property | Type | Class |
|---|---|---|
| | ||
| readonly inherited | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| |
attributeRulesEnabled
- Type
- boolean
When true, enables support for attribute rule-based snapping. When enabled, resources needed for rule-based snapping, including any Utility Networks present in the map, will be automatically loaded.
- Default value
- false
enabled
- Type
- boolean
Indicates whether snapping is enabled.
The default is false for a new SnappingOptions instance. Snapping configured through
ViewOptions.snapping is disabled by default in a MapView
and enabled by default in a SceneView.
- Default value
- false
featureEnabled
- Type
- boolean
Indicates whether feature snapping is enabled.
- Default value
- true
featureSources
List of sources for feature snapping. See FeatureSnappingLayerSource for supported layer sources.
When used through ViewOptions.snapping, supported layers in the view's map are used automatically if this property has not been explicitly configured. Explicitly configuring this property replaces the automatic source list.
gridEnabled
- Type
- boolean
Turns the grid on or off. The grid is a network of columns and rows used to divide the view into equal-area squares. The GridControls provides a user interface to interact and configure the grid's properties.
Note
It is recommended to wait for the view to be loaded first before setting the gridEnabled prop in the GridControls constructor. The grid is dependent on the view to be loaded first for it to be displayed.
- This grid is only supported in a 2D MapView.
- See also
- Default value
- false
- Example
- // Turn on the grid programmatically for the GridControls.// Wait for the view to load first.view.when(() => {const gridControls = new GridControls({view,snappingOptions: {enabled: true,gridEnabled: true}});// Add GridControls to the viewview.ui.add(gridControls, "top-left");});
selfEnabled
- Type
- boolean
Indicates whether self snapping is enabled within one feature while drawing or reshaping.
- Default value
- true







