类名 common/document/layer/TerrainCacheLayer.js
import { Layer } from './baseLayer'
import { Zondy } from '../../base'
import {defaultValue, Log, toJSON} from '../../util'
import TerrainServer from '../../service/igs/TerrainServer'
import {Extent, Geometry} from '../../base/geometry'
import { LayerType, LoadStatus } from '../../base/enum'
import {jsonClone} from '../../util/Utils';
/**
 * 地形图层
 * @class TerrainCacheLayer
 * @moduleEX LayerModule
 * @extends Layer
 * @fires TerrainCacheLayer#图层加载完毕事件
 * @param {Object} options 构造参数
 * @param {String} [options.url] 服务基地址
 * @param {String} [options.tokenKey = 'token'] token名
 * @param {String} [options.tokenValue] token值
 * @param {Boolean} [options.autoReset = false] 是否自动跳转
 * @param {Boolean} [options.requestVertexNormals = true] 是否请求地形法向量
 * @example <caption><h7>添加地形</h7></caption>
 * // ES5引入方式
 * const { Map, SceneView } = Zondy
 * const { TerrainCacheLayer } = Zondy.Layer
 * // ES6引入方式
 * import { Map, SceneView, TerrainCacheLayer } from "@mapgis/webclient-common"
 * // 初始化图层管理容器
 * const map = new Map();
 * // 初始化地图视图对象
 * const sceneView = new SceneView({
 *   // 视图id
 *   viewId: "mapgis-3d-viewer",
 *   // 图层管理容器
 *   map: map
 * });
 * // 初始化地形图层对象
 * terrainCacheLayer = new TerrainCacheLayer({
 *   url: 'http://192.168.82.89:8089/igs/rest/services/Scene/TwTerrain/SceneServer'
 * });
 * map.add(terrainCacheLayer);
 * */
class TerrainCacheLayer extends Layer {
  constructor(options) {
    super(options)
    options = defaultValue(options, {})

    /**
     * 服务基地址
     * @member {String} TerrainCacheLayer.prototype.url
     */
    this.url = defaultValue(options.url, undefined)
    /**
     * 图层类型
     * @member {String} TerrainCacheLayer.prototype.type
     */
    this.type = LayerType.terrain
    /**
     * 初始化图层的额外参数,三维引擎专有的初始化参数请传入此对象
     * @member {Object} TerrainCacheLayer.prototype.extendOptions
     */
    this.extendOptions = defaultValue(options.extendOptions, {})

    // 地形服务
    this._terrainServer = new TerrainServer({
      url: this.url
    })
  }

  /**
   * 从igs获取图层信息的方法
   */
  load() {
    return super.load()
  }

  /**
   * 子类加载服务端元信息的方法
   * @private
   * */
  _load() {
    const self = this
    return new Promise((resolve) => {
      self.loadStatus = LoadStatus.loaded
      self.loaded = true
      resolve(self)
    })
  }

  /**
   * 将图层转为json对象
   * @return {Object} josn对象
   * */
  toJSON() {
    const _json = super.toJSON()

    _json.url = this.url
    _json.tokenKey = this.tokenKey
    _json.tokenValue = this.tokenValue
    _json.autoReset = this.autoReset
    _json.requestVertexNormals = this.requestVertexNormals
    _json.fullExtent = toJSON(this.fullExtent, Extent)

    return _json
  }

  static fromJSON(json) {
    json = jsonClone(json)
    const _layer = new TerrainCacheLayer(json)
    _layer._isFromJSON = true
    _layer.fullExtent = Geometry.fromJSON(json.fullExtent)

    return _layer
  }

  /**
   * 克隆并返回一个新图层
   * @return {TerrainCacheLayer} 新的图层对象
   * */
  clone() {
    return new TerrainCacheLayer(this.toJSON())
  }
}

/**
 * 通过url创建图层对象
 * @param {String} url 服务基地址
 * @return {TerrainCacheLayer} 新的图层对象
 * */
TerrainCacheLayer.fromServerUrl = function (url) {
  return new TerrainCacheLayer({
    url
  })
}

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