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