core/Layers.js

import { default as baseLayer } from './layers/BaseLayer'
import { Creator, Add } from './Creator'
import Geojson from './layers/Geojson'
import { getLayerById, layerType, removeLayer } from '../utils/Layers'
import Model from './layers/Models'
import Imagery from './layers/Imagery'
import Voxels from './layers/Voxels'
import { Particle } from '../utils/Particle'
import { activeEntity, inactiveEntity } from '../utils/layers/Entity'
export const BaseLayer = new baseLayer()
/**
 * 图层主类
 */
export class Layers {
  /**
   * 构造函数
   * @param {*} viewer 地图场景
   * @see {@link Creator} - 创建对象类
   * @see {@link Add} - 添加对象类
   * @see {@link Imagery} - 影像图层主类
   * @see {@link Geojson} - Geojson主类
   * @see {@link Model} - 模型主类
   * @see {@link Particle} - 粒子效果
   * @see {@link Voxels} - 体元栅格主类
   */
  constructor(viewer) {
    this._viewer = viewer
    /**
     * 创建对象类
     * @type {Creator}
     */
    this.Creator = new Creator(this._viewer)
    /**
     * 添加对象类
     * @type {Add}
     */
    this.Add = new Add(this._viewer)
    /**
     * 影像图层主类
     * @type {Imagery}
     */
    this.Imagery = new Imagery(this._viewer)
    /**
     * Geojson主类
     * @type {Geojson}
     */
    this.Geojson = new Geojson(this._viewer)
    /**
     * 模型主类
     * @type {Model}
     */
    this.Model = new Model(this._viewer)
    /**
     * 粒子效果
     * @type {Particle}
     */
    this.Particle = new Particle(this._viewer)

    /**
     * 体元栅格主类
     * @type {Voxels}
     */
    this.Voxels = new Voxels(this._viewer)
  }

  /**
   * 所有场景中的图层
   */
  get _layers() {
    const entities = this._viewer.entities._entities._array
    const imageryLayers = this._viewer.imageryLayers._layers
    const primitives = this._viewer.scene.primitives._primitives
    const dataSources = this._viewer.dataSources._dataSources
    return { entities, imageryLayers, primitives, dataSources }
  }
  /**
   * 根据id获取图层
   * @param {String} id 待获取id
   * @returns 图层对象
   */
  getById(id) {
    return getLayerById(this._viewer, id)
  }

  /**
   * 移除指定图层
   * @param {Object} layer 待移除图层
   */
  remove(layer) {
    removeLayer(this._viewer, layer)
  }
  /**
   * 移除指定ID图层
   * @param {String} id 图层Id
   */
  removeById(id) {
    const layer = this.getById(id)
    layer && this.remove(layer)
  }
  /**
   * 图层对象开启/关闭高亮效果,目前限制Entity形式加载的图层
   * @param {Entity} item 图层对象,Entity形式,参考Cesium
   * @param {Boolean} bool 是否高亮
   * @param {ActiveType} [type=ActiveType.BLINK] 高亮类型,默认呼吸灯类型
   */
  active(item, bool, type = 'blink') {
    const geoType = layerType(item)
    switch (geoType.toLowerCase()) {
      case 'entity':
        bool ? activeEntity(item, type) : inactiveEntity(item)
        break
      default:
        break
    }
  }
}