ArcGis如何修改多边形边界
先上效果图
一、前言
在Vue ArcGis鼠标打点、中心打点绘制多边形这篇文章里给大家讲了ArcGis如何绘制多边形,那在ArcGis绘制多边形后多边形边界不理想怎么办?想调整多边形覆盖面积怎么办?今天这里给出一种解决方案以供各位看官参考。
二、监听地图(mapView)点击事件
初始化ArcGis地图时监听地图(mapView)的点击事件,获取到click
的回调参数event
,这里我们可以写一个方法去接收这个event参数,这样有关地图的点击处理逻辑都可以在这个方法里处理,大大的提高了代码的可读性
// 监听地图(mapView)点击过程 mapView.on("click", (event) => { this.mapLayerController(event); });复制代码
三、获取mapView构造器点击事件(hitTest)
地图点击时将获取到的回调参数event
传给mapView构造器的点击事件(hitTest),获取点击的图形
mapLayerController(event) { this.mapViewController.hitTest(event).then(({ results }) => { }) }复制代码
四、遍历多边形数组,处理已绘制好的的多边形图形
判断绘制多边形时打的点位数组是否为空,因为编辑图形时会创建一个新的可编辑的多边形,需要先删除已绘制好的多边形图形。在这里处理是因为在绘制多边形时有些不需要调整多边形边界,不需要删除绘制好的多边形。
// results 图形数组 results.forEach((result) => { // 判断绘制多边形时打的点位数组是否为空 if (this.spotArray.length) { let sketchGraphicsLayer = this.mapViewController.map.findLayerById("sketchGraphicsLayer"); let rm = []; sketchGraphicsLayer.graphics.items.forEach((item) => { // 字符串进循环 if (typeof item.attributes === 'string') { if (item.attributes.includes('point') || item.attributes.includes('polyline')){ rm.push(item); } if (item.attributes === 'remove') { item.attributes = undefined; } } }); sketchGraphicsLayer.removeMany(rm); } })复制代码
五、调用undate
方法编辑图形
this.sketchViewModel.update([result.graphic], { tool: "reshape" }).then(v => { });
作者:inline705
链接:https://juejin.cn/post/7026299339186110471