arcgis js 动态绘制白膜

arcgis动态绘制白膜

javascript 复制代码
export default {
  name: 'ControlHeight',
  data () {
    return {
      offsetHeight: 350,
      limitHeight: 100, // 限高高度
      opacity: 0,
      color: '#409EFF',
      currPolygon: null,
      polygonLayerList: [],
      polygonData: [],
      currChangedOpacity: 0,
      polygonNum: 0
    }
  },
  methods: {
    draw () {
      const self = this
      self.map.container.style.cursor = 'crosshair'
      let arr = []
      //   self.map.graphics.remove(self.currPolygon)
      const controlHeightGraphicLayer = new self.GraphicsLayer({
        // graphics: [graphic],
        elevationInfo: {
          mode: 'absolute-height',
          // 偏移
          offset: self.offsetHeight,
          unit: 'meters'
        }
        // screenSizePerspectiveEnabled: true
      })
      self.clickEvent = self.map.on('click', evt => {
        arr.push([evt.mapPoint.longitude, evt.mapPoint.latitude])
      })
      self.moveEvent = self.map.on('pointer-move', evt => {
        if (arr.length > 0) {
        //   self.map.graphics.remove(self.currPolygon)
          controlHeightGraphicLayer.graphics.remove(self.currPolygon)
          const mapPoint = self.map.toMap({ x: evt.x, y: evt.y })
          let arr2 = []
          arr.forEach(res => {
            arr2.push(res)
          })
          arr2.push([mapPoint.longitude, mapPoint.latitude])
          arr2.push(arr[0])

          const graphic = new self.Graphic({
            geometry: new self.Polygon({
            //   hasZ: true,
            //   hasM: false,
              rings: [arr2],
              spatialReference: self.map.spatialReference
            }),
            symbol: {
              type: 'polygon-3d', // 'simple-fill',
              symbolLayers: [{
                type: 'extrude',
                size: self.limitHeight,
                material: {
                  color: self.color
                  // opacity: (100 - self.opacity) / 100
                }
              }]
            //   color: [ 0, 255, 0, 0.2],
            //   style: 'solid',
            //   outline: {
            //     color: 'white',
            //     width: 1
            //   }
            }
          })
          controlHeightGraphicLayer.elevationInfo.offset = self.offsetHeight
          controlHeightGraphicLayer.opacity = (100 - self.opacity) / 100
          controlHeightGraphicLayer.graphics.add(graphic)
          //   self.map.graphics.add(graphic)
          self.map.map.add(controlHeightGraphicLayer)
          self.currPolygon = graphic
        }
      })
      self.dbclickEvent = self.map.on('double-click', evt => {
        evt.stopPropagation()
        self.map.container.style.cursor = 'default'
        self.clickEvent.remove()
        self.clickEvent = ''
        self.moveEvent.remove()
        self.moveEvent = ''
        self.dbclickEvent.remove()
        self.dbclickEvent = ''
        // console.log(self.currPolygon)
        // self.polygonLayerList.push(controlHeightGraphicLayer)
        self.polygonData.push({
          layer: controlHeightGraphicLayer,
          name: `模型_${self.polygonNum}`,
          opacity: self.opacity,
          edit: false
        })
        self.polygonNum++
        // self.geometry = self.polygonObj.geometry
      })
    },
    deleteGraphicer (row) {
      row.layer.removeAll()
      this.map.map.remove(row.layer)
      this.polygonData = this.polygonData.filter(item => item.layer !== row.layer)
    },
    editData (row) {
      row.edit = true
      this.currChangedOpacity = row.opacity
    },
    saveData (row) {
      row.layer.opacity = (100 - row.opacity) / 100
      row.edit = false
    },
    cancelSaveData (row) {
      row.layer.opacity = (100 - this.currChangedOpacity) / 100
      row.edit = false
    },
    changeOpacity (row) {
      row.layer.opacity = (100 - row.opacity) / 100
    },
    close () {
      this.polygonNum = 0
      this.$emit('close')
    }
  },
  mounted () {
    let self = this
    // self.wkid = sysConfig.wkid
    mapManager.getMap(this.mapId).then(({ map }) => {
      self.map = map
      esriLoader.loadModules([
        'esri/Map',
        'esri/layers/GraphicsLayer',
        'esri/widgets/Sketch/SketchViewModel',
        'esri/Graphic',
        'esri/geometry/Polygon'
      ], { url: serverConfig.arcgis_js_api_url }).then(([Map, GraphicsLayer, SketchViewModel, Graphic, Polygon]) => {
        self.Map = Map
        self.GraphicsLayer = GraphicsLayer
        self.SketchViewModel = SketchViewModel
        self.Graphic = Graphic
        self.Polygon = Polygon
      })
    })
  }
}
相关推荐
小江的记录本1 分钟前
【RabbitMQ】RabbitMQ核心知识体系全解(5大核心模块:Exchange类型、消息确认机制、死信队列、延迟队列、镜像队列)
java·前端·分布式·后端·spring·rabbitmq·mvc
心静财富之门2 分钟前
《前端零基础入门:HTML + CSS + JavaScript 全套速查表(详细版 + 实例)》
前端·javascript·python
星空3 分钟前
前端--A_4--HTML表单
前端
We་ct15 分钟前
JS手撕:DOM操作 & 浏览器API高频场景详解
开发语言·前端·javascript·面试·状态模式·操作·考点
小江的记录本21 分钟前
【RocketMQ】RocketMQ核心知识体系全解(5大核心模块:架构模型、事务消息两阶段提交、回查机制、延迟消息、顺序消息)
linux·运维·服务器·前端·后端·架构·rocketmq
三万棵雪松24 分钟前
【Linux 物联网网关主控系统-Web部分(二)】
linux·前端·物联网
We་ct32 分钟前
LeetCode 137. 只出现一次的数字 II:从基础到最优的两种解法详解
前端·数据结构·算法·leetcode·typescript·位运算
星空35 分钟前
前端--A_3--HTML区块_块元素与行内元素
前端·html
如意猴37 分钟前
【前端】001 前端初识——数字世界的门面
前端
Dxy123931021640 分钟前
如何使用 ECharts 绘制 K 线图
开发语言·javascript