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
}
}
}