类名 document/IGSMapImageLayerView.js
import {
  getIGSDynamicLayer,
  LayerView,
  showLayerByScale
} from '@mapgis/webclient-common'
import { IGSMapImageUtil } from '../view/utils'
import LeafletPlugin from '../util/LeafletPlugin'

class IGSMapImageLayerView extends LayerView {
  /**
   * 添加图层视图
   * @param {LayerEvent} 图层事件
   * @return {Promise<LayerView>} 图层视图
   */
  onAdd() {
    const layer = this.layer
    const innerView = this.innerView
    // 不在比例尺范围内,隐藏图层
    showLayerByScale(this.view, layer)
    this.innerLayer = IGSMapImageUtil.addIGSMapImageLayer(layer, innerView, {
      // 初始化裁剪区
      clippingArea: LeafletPlugin.convertClippingArea(layer.clippingArea)
    })
    this.innerLayer.commonLayerId = layer.id
    return Promise.resolve(this)
  }

  /**
   * 移除图层视图
   * @param {LayerEvent} 图层事件
   * @return {Promise<LayerView>} 图层视图
   */
  onRemove() {
    this.innerView.removeLayer(this.innerLayer)
    return Promise.resolve(this)
  }

  /**
   * 更新图层视图
   * @param {LayerViewUpdateEvent} 图层事件
   * @return {Promise<LayerView>} 图层视图
   */
  onUpdate(event) {
    // 确保有updateContent
    if (event.updateContent) {
      for (let i = 0; i < event.updateContent.length; i++) {
        const updateContent = event.updateContent[i]
        // 有updateContent
        if (updateContent) {
          switch (updateContent.name) {
            // 更新主图层可见性
            case 'visible':
              // 如果记录了上一次的透明度
              if (this.layer.hasOwnProperty('lastOpacity')) {
                this.innerLayer.setOpacity(
                  this.layer.visible ? this.layer.lastOpacity : 0
                )
              } else {
                this.innerLayer.setOpacity(
                  this.layer.visible ? this.layer.opacity : 0
                )
              }
              // 记录上次的透明度
              this.layer.lastOpacity = this.layer.opacity
              break
            // 更新透明度
            case 'opacity':
              this.innerLayer.setOpacity(this.layer.opacity)
              break
            // 更新子图层
            case 'sublayerVisible':
              // 子图层类型
              switch (this.layer.type) {
                // WMS图层
                case this.LayerType.wms:
                  this.innerLayer.setParams({
                    layers: this.ayer.layers
                  })
                  break
                // IGS地图图层
                case this.LayerType.igsMapImage:
                  this._refresh()
                  break
                default:
              }
              break
            // 刷新图层
            case 'refresh':
              const { layer, innerLayer, innerView } = this
              IGSMapImageUtil.updateIGSMapImageLayer(
                innerLayer,
                layer,
                innerView,
                {}
              )
              innerLayer.refresh()
              break
            // 更新图层顺序
            case 'index':
              this.innerLayer.setZIndex(this.layer._realIndex)
              break
            // clipping图层
            case 'clippingArea': {
              const args = updateContent.params
              // 解析layout style 此参数键值对
              const clippingArea = args[0]
              this.innerLayer.setClippingArea(
                LeafletPlugin.convertClippingArea(clippingArea)
              )
              break
            }
            default:
          }
        }
      }
    }
    return Promise.resolve(this)
  }

  _refresh() {
    this.innerView.removeLayer(this.innerLayer)
    // 不在比例尺范围内,隐藏图层
    showLayerByScale(this.view, this.layer)
    this.innerLayer = IGSMapImageUtil.addIGSMapImageLayer(
      this.layer,
      this.innerView,
      {
        // 初始化裁剪区
        clippingArea: LeafletPlugin.convertClippingArea(this.layer.clippingArea)
      }
    )
  }
}

export default IGSMapImageLayerView
构造函数
成员变量
方法
事件