类名 view/utils/IGSTileLayerUtil.js
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
构造函数
成员变量
方法
事件