#### # new IGSSceneLayerUtil()

IGS场景图层的工具类

##### 支持如下方法：

[1、将地形图层对象转换为MapGISTerrainProvider]
[2、将模型和注记图层对象转换为Primitive]

### 方法

#### 方法概述

名称 | 返回值类型 | 描述
--- | --- | ---
`addSceneLayer` | `` | `添加场景图层`
`initializeOptions` | `Object` | `根据场景图层的子图层对象获取构造参数options`
`removeLayer` | `` | `移除图层`
`reset` | `` | `重置视角到子图层外包盒处`
`setOpacity` | `` | `设置图层透明度`
`setSubLayerOpacity` | `` | `设置子图层透明度`
`setSubLayerVisible` | `` | `设置子图层显隐，受最大最小比例尺影响，会在内部进行判断`
`setVisible` | `` | `设置图层显隐，受最大最小比例尺影响，会在内部进行判断`
`toPrimitive` | `Primitive` | `将模型和注记图层对象转换为Primitive`
`toTerrainProvider` | `MapGISTerrainProvider | undefined` | `将地形图层对象转换为MapGISTerrainProvider`

#### 方法详情

#### # static addSceneLayer(layerView, callback, errorCallback)

添加场景图层

#### 参数

名称 | 类型 | 描述
--- | --- | ---
`layerView` | LayerView | 图层视图对象
`callback` | function | 所有子图层加载完毕后的回调函数
`errorCallback` | function | 加载失败的回调函数

#### # static initializeOptions(subLayer, innerView)

根据场景图层的子图层对象获取构造参数options

#### 参数

名称 | 类型 | 描述
--- | --- | ---
`subLayer` | Object | 地形图层对象
`innerView` | View | cesium的view对象

返回值
类型: Object

#### # static removeLayer(tileSets, sceneView, innerView)

移除图层

#### 参数

名称 | 类型 | 描述
--- | --- | ---
`tileSets` | Array | tileSet数组
`sceneView` | SceneView | 场景视图对象
`innerView` | Viewer | Cesium的视图对象

#### # static reset(id, layerView)

重置视角到子图层外包盒处

#### 参数

名称 | 类型 | 描述
--- | --- | ---
`id` | String | 子图层ID
`layerView` | LayerView | 图层视图对象

#### # static setOpacity(opacity, layerView)

设置图层透明度

#### 参数

名称 | 类型 | 描述
--- | --- | ---
`opacity` | Number | 图层透明度
`layerView` | LayerView | 图层视图对象

#### # static setSubLayerOpacity(opacity, id, layerView)

设置子图层透明度

#### 参数

名称 | 类型 | 描述
--- | --- | ---
`opacity` | Number | 子图层透明度
`id` | String | 子图层ID
`layerView` | LayerView | 图层视图对象

#### # static setSubLayerVisible(visible, id, layerView)

设置子图层显隐，受最大最小比例尺影响，会在内部进行判断

#### 参数

名称 | 类型 | 描述
--- | --- | ---
`visible` | Boolean | 是否显隐图层
`id` | String | 子图层ID
`layerView` | LayerView | 图层视图对象

#### # static setVisible(visible, layerView)

设置图层显隐，受最大最小比例尺影响，会在内部进行判断

#### 参数

名称 | 类型 | 描述
--- | --- | ---
`visible` | Boolean | 是否显隐图层
`layerView` | LayerView | 图层视图对象

#### # static toPrimitive(subLayer, innerView)

将模型和注记图层对象转换为Primitive

#### 参数

名称 | 类型 | 描述
--- | --- | ---
`subLayer` | Object | 地形图层对象
`innerView` | View | cesium的view对象

返回值
类型: Primitive

##### 示例

    const url = 'http://webclient.smaryun.com:8089/igs/rest/services/Scene/DaYanTa-M3D/SceneServer'
    const addSceneLayer = async (url) => {
      const layer = new IGSSceneLayer({
        url,
      })
      const loadedLayer = await layer.load()
      const subLayers = loadedLayer.activeScene.sublayers
      for (let i = 0; i < subLayers.length; i++) {
        switch (_subLayer.type) {
          case SceneSubLayerType.g3d:
          case SceneSubLayerType.label:
          case SceneSubLayerType.sceneServer:
            // 若是注记类型则要传入viewer对象实现注记避让效果
            const primitive = IGSSceneLayerUtil.toPrimitive(_subLayer, viewer)
            viewer.scene.primitives.add(primitive)
            viewer.zoomTo(primitive)
            break
        }
      }
    }
    addSceneLayer(url)

#### # static toTerrainProvider(subLayer)

将地形图层对象转换为MapGISTerrainProvider

#### 参数

名称 | 类型 | 描述
--- | --- | ---
`subLayer` | Object | 地形图层对象

返回值
类型: MapGISTerrainProvider | undefined

##### 示例

    const url = 'http://webclient.smaryun.com:8089/igs/rest/services/Scene/TwTerrain/SceneServer'
    const addSceneLayer = async (url) => {
      const layer = new IGSSceneLayer({
        url,
      })
      const loadedLayer = await layer.load()
      const subLayers = loadedLayer.activeScene.sublayers
      for (let i = 0; i < subLayers.length; i++) {
        switch (_subLayer.type) {
          case SceneSubLayerType.terrain:
            const provider = IGSSceneLayerUtil.toTerrainProvider(_subLayer)
            if (provider) {
              viewer.terrainProvider = provider
            }
            break
        }
      }
    }
    addSceneLayer(url)