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
      })
    })
  }
}
相关推荐
M_emory_21 分钟前
解决 git clone 出现:Failed to connect to 127.0.0.1 port 1080: Connection refused 错误
前端·vue.js·git
Ciito24 分钟前
vue项目使用eslint+prettier管理项目格式化
前端·javascript·vue.js
成都被卷死的程序员1 小时前
响应式网页设计--html
前端·html
fighting ~1 小时前
react17安装html-react-parser运行报错记录
javascript·react.js·html
老码沉思录1 小时前
React Native 全栈开发实战班 - 列表与滚动视图
javascript·react native·react.js
abments1 小时前
JavaScript逆向爬虫教程-------基础篇之常用的编码与加密介绍(python和js实现)
javascript·爬虫·python
mon_star°1 小时前
将答题成绩排行榜数据通过前端生成excel的方式实现导出下载功能
前端·excel
Zrf21913184551 小时前
前端笔试中oj算法题的解法模版
前端·readline·oj算法
老码沉思录1 小时前
React Native 全栈开发实战班 - 状态管理入门(Context API)
javascript·react native·react.js
文军的烹饪实验室2 小时前
ValueError: Circular reference detected
开发语言·前端·javascript