当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


JavaScript ArcGIS Sketch用法及代码示例


基本信息

以下是所在类或对象的基本信息。

AMD: require(["esri/widgets/Sketch"], (Sketch) => { /* code goes here */ });

ESM: import Sketch from "@arcgis/core/widgets/Sketch";

类: esri/widgets/Sketch

继承: Sketch > Widget > Accessor

自从:用于 JavaScript 4.10 的 ArcGIS API

用法说明

Sketch 小部件提供了一个简单的 UI,用于在 MapViewSceneView 上创建和更新图形。这大大减少了在视图中处理图形所需的代码。它旨在与存储在其图层属性中的 graphics 一起使用。

默认情况下,草图小部件提供 out-of-the-box 工具,用于创建和更新具有 pointpolylinepolygonrectanglecircle 几何图形的图形。

在MapView 中发现 Sketch 小部件这个样本
sketch-geometries

在SceneView 中发现 Sketch 小部件这个样本
sketch-geometries-3D

已知限制

  • 具有折线或多边形几何图形的图形不能在 SceneView 中旋转或缩放。
  • 多点几何只能在 MapView 中创建。

下表说明了用于创建具有不同几何形状的图形的指针和键盘手势。

创建点图形

手势 行动
Left-click 在指针位置添加点图形。
Enter 在指针位置添加点图形。

创建折线和多边形图形

创建折线和多边形图形时适用以下键盘快捷键。

手势 行动 示例
Left-click 在指针位置添加一个顶点。 Left-click
Left-drag hybridfreehand 模式下为每次指针移动添加一个顶点。 Left drag
F 将顶点添加到 polylinepolygon 图形。在click模式下完成rectanglecircle多边形图形。 F vertex add
Enter 完成没有分段顶点的 polylinepolygon 图形。 double-click 将在当前鼠标光标的位置完成图形。 Enter
Z 逐步撤消堆栈中记录的操作。撤消/重做堆栈用于单个草图操作,这意味着您可以在创建或更新图形时重做/撤消操作。 Undo
R 增量重做堆栈中记录的操作。撤消/重做堆栈用于单个草图操作,这意味着您可以在创建或更新图形时重做/撤消操作。 Redo
Ctrl 根据 snappingOptions 中的配置切换捕捉。 Ctrl key
空格键+Left-drag 在创建折线或多边形图形时平移视图。 Space left drag
左键单击第一个顶点 完成多边形图形草图。 Left-click first vertex

创建具有预定义形状的多边形图形

以下键盘快捷键适用于创建具有预定义形状的多边形图形(rectanglecircle)。

手势 行动 示例
左键单击+拖动 创建一个 rectangle 图形,其尺寸基于初始单击和光标位置之间的边界框。根据初始单击和光标位置之间的距离创建半径为 circle 的图形。 Polygon Left-click drag
Shift+左键单击+拖动 将形状从 rectangle 更改为 square 或从 circle 更改为 ellipse Shift Left-click drag
Alt+左键单击+拖动 创建一个 rectangle 图形,在初始单击时具有中心,尺寸基于初始单击与光标位置之间的距离。创建一个 circle 图形,其半径基于初始单击和光标位置之间的边界框。 Alt Left-click drag
Shift+Alt+左键单击+拖动 结合上述行为。 Shift Alt Left-click drag

更新图形

Sketch 小部件使用户能够在更新操作期间移动、旋转、缩放或重塑图形。要开始更新,请在图形上使用Left-click。使用 Shift+Left-click 将更多图形添加到选择中,或从选择中删除图形,以进行批量更新。选择图形后,可以执行以下操作。

手势 行动 示例
左键单击图形 选择要移动、旋转或缩放的图形。 Select a graphic
Shift+左键单击图形 选择或取消选择多个图形以移动、旋转或缩放。 Select graphics
拖动图形 移动选定的图形。 Drag the graphic
拖动旋转手柄 旋转选定的图形。 Rotate the graphic
拖动刻度手柄 缩放选定的图形。 Scale the graphic
Shift+左键单击+拖动缩放手柄 在中心缩放所选图形。 Scale the graphic at the center
Z 逐步撤消堆栈中记录的操作。撤消/重做堆栈用于单个草图操作,这意味着您可以在创建或更新图形时重做/撤消操作。 Undo update
R 增量重做堆栈中记录的操作。撤消/重做堆栈用于单个草图操作,这意味着您可以在创建或更新图形时重做/撤消操作。 Redo update
左键单击视图(不是图形) 完成图形更新。 Sketch update complete
Delete 从图层中删除选定的图形。 Sketch delete graphic

可以对单个折线或多边形图形执行以下更新操作:

手势 行动 示例
左键单击图形 选择要移动或重塑的图形。 Select a graphic
拖动图形 移动选定的图形。 Drag the graphic
左键单击幽灵顶点 添加一个新顶点。 Add a vertex
左键单击一个顶点 选择一个顶点。 Select a vertex
Shift+左键单击顶点 选择或取消选择多个顶点。 Select vertices
拖动顶点 移动选定的一个或多个顶点。 Drag vertices
右键单击一个顶点 删除一个顶点。 Delete a vertex
选择多个顶点并按 BackspaceDelete 删除多个顶点。 Delete vertices

如果图形使用 3D object symbol layer ,则可以对具有 SceneView 中的点几何图形的单个图形执行以下更新操作:

手势 行动 示例
左键单击图形 选择要移动、旋转或缩放的图形。 Select a graphic
拖动内手柄 移动选定的图形。 Drag the graphic
拖动高度手柄 垂直移动所选图形(在 z 轴上)。 Drag the graphic
横向拖动外手柄 旋转选定的图形。 Rotate the graphic
向内或向外拖动外部手柄 缩放选定的图形。 Scale the graphic

素描 3D

为了能够使用高度手柄操纵 z 轴上的特征,以下配置是相关的:

  • GraphicsLayerElevation info mode 需要设置为 absolute-heightrelative-to-scenerelative-to-ground
  • 要使用 z-value 创建图形,defaultCreateOptions 和/或 createOptions 中的 hasZ 需要为 true
  • 要更新图形的 z-value,defaultUpdateOptions 和/或 updateOptions 中的 enableZ 需要为 true
// define the GraphicsLayer
const gLayer = new GraphicsLayer({
  elevationInfo: {
    mode: "absolute-height" // default value
  }
});

// define the SketchViewModel
const sketchVM = new SketchViewModel({
  layer: gLayer,
  view: view,
  defaultCreateOptions: {
    hasZ: true  // default value
  },
  defaultUpdateOptions: {
    enableZ: true  // default value
  }
});

absolute-height 模式下,草图顶点捕捉到场景元素(特征和地面)。在absolute-height 模式下绘制的polygon 是平面的,这意味着所有polygon 顶点都使用第一个顶点的高度。有关如何将z-values 与不同的高程模式一起使用的更多信息,请参阅elevation info

有关获得对小部件样式的完全控制的信息,请参阅Styling 主题。

例子:

// Create a new instance of sketch widget and set
// its required parameters
let sketch = new Sketch({
  layer: graphicsLayer,
  view: view
});

// Listen to sketch widget's create event.
sketch.on("create", function(event) {
  // check if the create event's state has changed to complete indicating
  // the graphic create operation is completed.
  if (event.state === "complete") {
    // remove the graphic from the layer. Sketch adds
    // the completed graphic to the layer by default.
    graphicsLayer.remove(event.graphic);

    // use the graphic.geometry to query features that intersect it
    selectFeatures(event.graphic.geometry);
  }
});

相关用法


注:本文由纯净天空筛选整理自arcgis.com大神的英文原创作品 Sketch。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。