arcgis api for js中sketch和sketchViewModel 的区别
时间: 2023-07-30 20:07:32 浏览: 339
在ArcGIS API for JavaScript中,Sketch和SketchViewModel都是用于在地图上绘制几何图形的组件,但它们的作用不同。
Sketch是用于在地图上绘制几何图形的可视化组件。它是一个UI组件,提供了绘制点、线、面等几何图形的交互界面。Sketch组件可以直接添加到地图视图中,用户可以通过Sketch组件的交互界面进行几何图形的绘制。
SketchViewModel是用于在地图上绘制几何图形的逻辑组件。它是一个非可视化的组件,提供了绘制点、线、面等几何图形的逻辑接口。SketchViewModel实例可以与地图视图和Sketch组件一起使用,它可以监听Sketch组件的交互事件,通过调用自身的方法来完成几何图形的绘制,同时也可以对绘制的几何图形进行编辑和删除等操作。
简单来说,Sketch是可视化的绘图组件,而SketchViewModel是用于管理绘图操作的逻辑组件。使用SketchViewModel可以更灵活地控制绘图操作,并且可以轻松地将绘图操作集成到自己的应用程序中。
相关问题
arcgis api for js中sketch 设置撤回按钮不显示
要在ArcGIS API for JavaScript中的Sketch组件中设置撤回按钮不显示,可以在创建SketchViewModel实例时将undoRedoEnabled属性设置为false,如下所示:
```
const sketchViewModel = new SketchViewModel({
view: view,
layer: graphicsLayer,
undoRedoEnabled: false // 设置为false将禁用撤销/重做按钮
});
```
这样就可以禁用撤销/重做按钮,从而达到不显示撤销按钮的效果。
按下面的要求编写代码:arcgis api for js 创建FeatureLayer,其中FeatureLayer图层中包含很多多边形要素。要求提供一个多边形/矩形绘制工具,通过点击多边形按钮或者矩形按钮进行形状绘制。判断绘制的形状与FeatureLayer中的多边形要素的包含关系,突出显示包含在绘制的形状内部的要素
以下是基于ArcGIS API for JavaScript的代码示例,实现创建FeatureLayer、绘制多边形/矩形、判断包含关系和突出显示:
```javascript
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/FeatureLayer",
"esri/Graphic",
"esri/geometry/geometryEngine",
"esri/widgets/Sketch/SketchViewModel",
"esri/widgets/Sketch",
"esri/widgets/Expand",
"dojo/domReady!"
], function(Map, MapView, FeatureLayer, Graphic, geometryEngine, SketchViewModel, Sketch, Expand) {
// 创建地图和视图
var map = new Map({
basemap: "streets-navigation-vector"
});
var view = new MapView({
container: "viewDiv",
map: map,
center: [-118.805, 34.027],
zoom: 13
});
// 创建 FeatureLayer
var featureLayer = new FeatureLayer({
url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/2"
});
// 向地图添加 FeatureLayer
map.add(featureLayer);
// 创建 SketchViewModel 和 Sketch 组件
var sketchViewModel = new SketchViewModel({
view: view,
layer: new GraphicsLayer(),
pointSymbol: {
type: "simple-marker",
style: "square",
size: "8px",
color: "blue",
outline: {
color: [255, 255, 0],
width: 3
}
},
polylineSymbol: {
type: "simple-line",
color: "blue",
width: 3
},
polygonSymbol: {
type: "simple-fill",
color: [0, 0, 200, 0.3],
style: "solid",
outline: {
color: "blue",
width: 2
}
}
});
var sketch = new Sketch({
view: view,
viewModel: sketchViewModel,
container: "sketchDiv"
});
// 创建 Expand 组件,用于显示“多边形”和“矩形”按钮
var sketchExpand = new Expand({
view: view,
content: sketch.domNode,
expandIconClass: "esri-icon-edit",
group: "top-right"
});
view.ui.add(sketchExpand, "top-right");
// 监听 SketchViewModel 的 create event,获取绘制完成的图形
sketchViewModel.on("create", function(event) {
if (event.state === "complete") {
// 获取绘制完成的图形
var graphic = new Graphic({
geometry: event.geometry,
symbol: sketchViewModel.polygonSymbol
});
// 向地图添加图形
view.graphics.add(graphic);
// 判断包含关系
var contains = geometryEngine.contains(featureLayer.fullExtent, event.geometry);
if (contains) {
// 高亮显示包含在绘制的形状内部的要素
featureLayer.definitionExpression = "1=1";
featureLayer.outFields = ["*"];
featureLayer.queryFeatures().then(function(results) {
var graphics = results.features.filter(function(feature) {
return geometryEngine.contains(event.geometry, feature.geometry);
}).map(function(feature) {
return new Graphic({
geometry: feature.geometry,
symbol: {
type: "simple-fill",
color: [255, 0, 0, 0.5],
style: "solid",
outline: {
color: "red",
width: 2
}
}
});
});
view.graphics.addMany(graphics);
});
}
}
});
});
```
该代码示例中,通过 SketchViewModel 和 Sketch 组件实现了绘制多边形/矩形的功能,并通过 geometryEngine.contains() 方法判断绘制的形状与 FeatureLayer 中的多边形要素的包含关系,最后将包含在绘制的形状内部的要素突出显示。
阅读全文