类名 common/document/layer/baseLayer/SubLayer.js
import { Collection, Evented, Zondy } from '../../../base'
import {defaultValue, getGUID, toJSON} from '../../../util'
import { LayerType } from '../../../base/enum'

/**
 * 子图层基类
 * @class SubLayer
 * @moduleEX LayerModule
 * @extends Evented
 * @param {Object} options 构造参数
 * @param {String} [options.id] 图层id,不给则生成随机id
 * @param {Layer} [options.layer] 父图层对象
 * @param {Array} [options.sublayers = []] 包含的子图层对象
 * @param {String} [options.title] 图层名称
 * @param {Boolean} [options.visible] 图层可见性
 */
class SubLayer extends Evented {
  constructor(options) {
    super(options)
    options = defaultValue(options, {})

    /**
     * 图层id,不给则生成随机id
     * @member {String} SubLayer.prototype.id
     */
    this.id = defaultValue(options.id, getGUID())
    /**
     * 父图层对象
     * @member {Layer} SubLayer.prototype.layer
     */
    this.layer = defaultValue(options.layer, undefined)
    /**
     * 包含的子图层对象
     * @member {Array} SubLayer.prototype.sublayers
     */
    this.sublayers = defaultValue(options.sublayers, new Collection())
    /**
     * 图层名称
     * @member {String} SubLayer.prototype.title
     */
    this.title = defaultValue(options.title || options.layerName, undefined)
    /**
     * 图层可见性
     * @member {Boolean} SubLayer.prototype.visible
     */
    // eslint-disable-next-line no-nested-ternary
    this._visible = options.hasOwnProperty('visible')
      ? options.visible
      : options.hasOwnProperty('isVisible')
      ? options.isVisible
      : true
  }

  /**
   * @description 转换为json对象
   * @return {Object} json对象
   */
  toJSON() {
    const _sublayers = []
    this.sublayers.forEach(function (sublayer) {
      _sublayers.push(toJSON(sublayer, SubLayer))
    })

    return {
      id: this.id,
      sublayers: _sublayers,
      title: this.title,
      visible: this.visible
    }
  }

  /**
   * @description 克隆方法
   * @return {SubLayer} 图层
   */
  clone() {
    return new SubLayer(this.toJSON())
  }
}

Object.defineProperties(SubLayer.prototype, {
  /**
   * 子图层显示或隐藏
   * @member {Boolean} SubLayer.prototype.visible
   */
  visible: {
    get() {
      return this._visible
    },
    set(value) {
      this._visible = value
      // 更新子图层
      if (this.layer && this.layer.refresh) {
        switch (this.layer.type) {
          case LayerType.igsMapImage:
            this.layer._setLayers()
            this.layer.refresh()
            break
          case LayerType.wms:
            this.layer.setSubLayer(this)
            break
          default:
            break
        }
      }
    }
  }
})

Zondy.Layer.SubLayer = SubLayer
export default SubLayer
构造函数
成员变量
方法
事件