类名 common/document/layer/ogc/WMTSSubLayer.js
import { Layer } from '../baseLayer'
import { WMTSStyle, Zondy } from '../../../base'
import { defaultValue } from '../../../util'
import { SpatialReference } from '../../../base/geometry'
import { getEPSGFromTileMatrixSetId } from '../support/Utils'
import Extent from '../../../base/geometry/Extent'

/**
 * IGS地图服务图层
 * @class WMTSSubLayer
 * @moduleEX LayerModule
 * @classdesc IGS地图图层
 * @extends Layer
 * @param {Object} options 构造参数
 * @param {String} [options.description = 'IGS WMTS子图层'] 描述信息
 * @param {String} [options.imageFormat = 'image/png'] 图像格式
 * @param {Array<String>} [options.imageFormats = undefined] 图像格式组
 * @param {String} [options.styleId = undefined] 样式id
 * @param {Array<WMTSStyle>} [options.styles = undefined] 样式组
 * @param {Array<TileMatrixSet>} [options.tileMatrixSets = undefined] 要请求的图块矩阵集
 * @param {String} [options.tileMatrixSetId = undefined] 要请求的图块矩阵集id
 * @param {Extent} [options.extent = undefined] 图层范围
 * @param {Array<String>} [options.resourceURLTemplates = undefined] 资源地址模板
 */

class WMTSSubLayer extends Layer {
  constructor(options) {
    super(options)
    options = defaultValue(options, {})
    /**
     * 描述信息
     * @member {String} WMTSSubLayer.prototype.description
     */
    this.description = 'IGS WMTS子图层'
    /**
     * 图像格式
     * @member {String} WMTSSubLayer.prototype.imageFormat
     */
    this.imageFormat = defaultValue(options.imageFormat, 'image/png')
    this.identifier = defaultValue(options.identifier, '')
    this.title = defaultValue(options.title, '')
    /**
     * 图像格式组
     * @member {Array<String>} WMTSSubLayer.prototype.imageFormats
     */
    this.imageFormats = defaultValue(options.imageFormats, undefined)
    /**
     * 样式id, 默认为样式中第一项的 ID
     * @member {String} WMTSSubLayer.prototype.styleId
     */
    this.styleId = defaultValue(options.styleId, undefined)
    /**
     * 样式组
     * @member {Array<WMTSStyle>} WMTSSubLayer.prototype.styles
     */
    this.styles = defaultValue(options.styles, undefined)
    /**
     * 要请求的图块矩阵集
     * @member {Array<TileMatrixSet>} WMTSSubLayer.prototype.tileMatrixSets
     */
    this.tileMatrixSets = defaultValue(options.tileMatrixSets, undefined)
    /**
     * 要请求的图块矩阵集id
     * @member {String} WMTSSubLayer.prototype.tileMatrixSetId
     */
    this.tileMatrixSetId = defaultValue(options.tileMatrixSetId, undefined)
    /**
     * 图层范围
     * @member {Extent} WMTSSubLayer.prototype.extent
     */
    this.extent = defaultValue(options.extent, undefined)
    /**
     * 资源地址模板
     * @member {Array<String>} WMTSSubLayer.prototype.resourceURLTemplates
     */
    this.resourceURLTemplates = defaultValue(
      options.resourceURLTemplates,
      undefined
    )
    /**
     * 图层坐标系
     * @member {SpatialReference} WMTSSubLayer.prototype.spatialReference
     */
    let _tileMatrixSetId
    if (this.tileMatrixSetId === 'c') {
      _tileMatrixSetId = 'EPSG:4326'
    } else if (this.tileMatrixSetId === 'w') {
      _tileMatrixSetId = 'EPSG:900913'
    } else {
      _tileMatrixSetId = this.tileMatrixSetId
    }
    this.spatialReference = new SpatialReference(
      getEPSGFromTileMatrixSetId(_tileMatrixSetId)
    )
  }

  /**
   * @function WMTSSubLayer.prototype.toJSON
   * @description 将JS对象转换为JSON格式
   * @returns {Object} 子图层的实例化JSON
   */
  toJSON() {
    const json = super.toJSON()
    json.description = this.description
    json.imageFormat = this.imageFormat
    json.identifier = this.identifier
    json.title = this.title
    json.imageFormats = this.imageFormats
    json.styleId = this.styleId
    json.tileMatrixSets = this.tileMatrixSets
    json.tileMatrixSetId = this.tileMatrixSetId
    json.extent =
      this.extent instanceof Extent ? this.extent.toJSON() : this.extent
    json.resourceURLTemplates = this.resourceURLTemplates
    json.spatialReference =
      this.spatialReference instanceof SpatialReference
        ? this.spatialReference.toJSON()
        : this.spatialReference

    const _styles = []
    if (this.styles) {
      for (let i = 0; i < this.styles.length; i++) {
        _styles.push(
          this.styles[i] instanceof WMTSStyle
            ? this.styles[i].toJSON()
            : this.styles[i]
        )
      }
    }
    json.styles = _styles

    return json
  }

  /**
   * 克隆图层对象
   * @return {WMTSSubLayer} 克隆后的图层对象
   */
  clone() {
    return new WMTSSubLayer(this.toJSON())
  }
}

/**
 * @function WMTSSubLayer.prototype.fromJSON
 * @description 将JSON格式的子图层参数转换为JS对象
 * @param {Object} json 子图层的实例化JSON
 */
WMTSSubLayer.fromJSON = function (json) {
  json = defaultValue(json, {})

  return new WMTSSubLayer(json)
}

Zondy.Layer.WMTSSubLayer = WMTSSubLayer
export default WMTSSubLayer
构造函数
成员变量
方法
事件