阅读 574

ArcGis如何修改多边形边界

先上效果图

编辑.gif

一、前言

在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


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐