import {
getRasterLayer,
getRasterSource,
removeLayer,
setOpacity,
setVisible
} from './support'
/**
* 实际加载图层的工具类
* @private
* */
class IGSTileLayerUtil {}
/**
* 添加地图图片图层
* @param {IGSTileLayerView} layerView 图层视图对象
* @param {Object} options 额外参数
* @return {Object} 实际的图层对象
* */
IGSTileLayerUtil.addIGSTileLayer = function (layerView, options) {
const layer = layerView.layer
const innerView = layerView.innerView
// 图层初始化参数
const layerOptions = {
// igs版本
igsVersion: layer._igsVersion,
// token名
tokenKey: layer.tokenKey,
// token值
tokenValue: layer.tokenValue
}
// 定义source和layer
const sourceID = `source_${layer.id}`
const layerID = `layer_${layer.id}`
options = Object.assign(options, layerOptions)
const layerUrl = IGSTileLayerUtil.initLayerUrl(layer.url, options)
const mapSource = getRasterSource(layerUrl, layer.tileSize)
const mapLayer = getRasterLayer(layerID, sourceID, layer, layerView)
// 添加source和layer
innerView.addSource(sourceID, mapSource)
innerView.addLayer(mapLayer)
// 记录sourceID
const innerLayer = innerView.getLayer(layerID)
innerLayer.sourceID = sourceID
// 返回图层
return innerLayer
}
/**
* 根据服务基地址和图层初始化参数,构造最终的URL地址
* @param {String} url 服务基地址
* @param {Object} options 图层初始化参数
* @return {String} 最终的URL地址
* */
IGSTileLayerUtil.initLayerUrl = function (url, options) {
const igsVersion = options.igsVersion
if (igsVersion === '1.0') {
url += '/{z}/{y}/{x}'
if (options.tokenKey && options.tokenValue) {
url += `?${options.tokenKey}=${options.tokenValue}`
}
} else {
url = `${url}/tileImage/{z}/{y}/{x}?f=image`
if (options.tokenKey && options.tokenValue) {
url += `&${options.tokenKey}=${options.tokenValue}`
}
}
return url
}
/**
* 设置图层可见性
* @param {IGSTileLayerView} layerView 图层视图对象
* */
IGSTileLayerUtil.setVisible = function (layerView) {
setVisible(layerView)
}
/**
* 设置图层透明度
* @param {IGSTileLayerView} layerView 图层视图对象
* */
IGSTileLayerUtil.setOpacity = function (layerView) {
setOpacity(layerView)
}
/**
* 刷新图层
* @param {IGSTileLayerView} layerView 图层视图对象
* */
IGSTileLayerUtil.refresh = function (layerView) {
// 删除图层
layerView.innerView.removeLayer(layerView.innerLayer.id)
// 删除source
layerView.innerView.removeSource(layerView.innerLayer.sourceID)
// 重新添加layer和source
layerView.innerLayer = IGSTileLayerUtil.addIGSTileLayer(layerView, {})
}
/**
* 删除图层
* @param {IGSTileLayerView} layerView 图层视图对象
* */
IGSTileLayerUtil.removeLayer = function (layerView) {
removeLayer(layerView)
}
export default IGSTileLayerUtil