#### # new M3DModelCacheLayer(options)

M3D缓存图层，当使用的Cesium版本为10.7.2.x及以下时，M3D缓存图层仅支持设置token参数，不支持设置请求头参数

#### 参数:

名称 | 类型 | 默认值 | 描述
--- | --- | --- | ---
`options` | Object |  | 构造参数
`elevationInfo` | ElevationInfo |  | 高程模式。目前仅支持栅格体元设置高程模式，且如果设置featureExpressionInfo ，则必须按照$feature.z的方式索引高程值，且目前仅支持简单的表达式，例如可以设置将每个高程值替换为原来的10倍,可以设置表达式'$feature.z * 10'
`timeExtent` | TimeExtent |  | 时间范围，具有明确开始和结束日期的一段时间。时间范围用于显示或查询指定时间段内的要素。要表示某个时刻，需要将开始时间和结束时间设置为同一日期。
`clientFilters` | Array.<VoxelFilter> | [] | 客户端过滤器，当前仅支持数据的第一个VoxelFilter过滤器。
`url` | String |  | 服务基地址，支持文件服务和IGS的M3D服务 文件服务基地址格式：必须是.mcj格式的文件 M3D服务基地址格式(IGS1.0)：无此服务 M3D服务基地址格式(IGS2.0)：http://{ip}:{port}/igs/rest/services/{服务名}/M3dServer
`renderer` | BaseRenderer |  | 渲染器， 目前支持如下样式： `1、单值专题图` `2、分段专题图` 参考示例： [1、单值专题图] [2、分段专题图] [3、单值专题图-Cesium原生方式] [4、分段专题图-Cesium原生方式]

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

[1、加载图层资源]
[2、通过传入的json构造并返回一个新的图层对象]
[3、导出为json对象]
[4、克隆图层对象]
[5、通过url构造图层对象]

##### 示例

初始化模型缓存图层

    // ES5引入方式
    const { M3DModelCacheLayer } = zondy.layer
    // ES6引入方式
    import { M3DModelCacheLayer } from "@mapgis/webclient-common"
    const layer = new M3DModelCacheLayer({
      // 服务基地址
      url: '服务基地址'
      // Cesium引擎的额外初始化参数
      extensionOptions: {
        // 开启自动跳转
        autoReset: true
      }
    });

单值专题图

    // ES5引入方式
    const { M3DModelCacheLayer } = zondy.layer
    const { UniqueValueRenderer } = zondy.renderer
    const { SimpleFillSymbol,SimpleLineSymbol } = zondy.symbol
    const { Color } = zondy
    // ES6引入方式
    import { M3DModelCacheLayer,UniqueValueRenderer,SimpleFillSymbol,SimpleLineSymbol,Color } from "@mapgis/webclient-common"
    // 构造单值渲染器
    const renderer = new UniqueValueRenderer({
      // 专题图过滤字段名
      field: "字段名",
      // 单值专题图过滤条件数组
      uniqueValueInfos: [
        {
          // 指定字段值
          value: '过滤字段值1',
          // 匹配到该值后的样式
          // M3D专题图仅支持SimpleFillSymbol符号
          symbol: new SimpleFillSymbol({
            // 填充颜色
            color: new Color(255, 0, 0)
          })
        },
        {
          // 指定字段值
          value: '过滤字段值2',
          // 匹配到该值后的样式
          // M3D专题图仅支持SimpleFillSymbol符号
          symbol: new SimpleFillSymbol({
            // 填充颜色
            color: 'rgb(255, 123, 220)'
          })
        }
      ]
    })
    // 构造模型缓存图层
    const layer = new M3DModelCacheLayer({
      // 服务基地址
      url: '服务基地址',
      // 设置专题图渲染器
      renderer: renderer,
      // Cesium引擎的额外初始化参数
      extensionOptions: {
        // 开启自动跳转
        autoReset: true
      }
    });

分段专题图

    // ES5引入方式
    const { M3DModelCacheLayer } = zondy.layer
    const { ClassBreakRenderer } = zondy.renderer
    const { SimpleFillSymbol } = zondy.symbol
    const { Color } = zondy
    // ES6引入方式
    import { M3DModelCacheLayer,ClassBreakRenderer,SimpleFillSymbol,Color } from "@mapgis/webclient-common"
    // 构造分段渲染器
    const renderer = new ClassBreakRenderer({
      // 专题图过滤字段名
      field: "字段名",
      // 分段专题图过滤条件数组
      classBreakInfos: [
        {
          // 最小过滤范围，field对应的值大于等于minValue
          minValue: 0,
          // 最大过滤范围，field对应的值小于maxValue
          maxValue: 2,
          // 匹配到该值后的样式
          // M3D专题图仅支持SimpleFillSymbol符号
          symbol: new SimpleFillSymbol({
            // 填充颜色
            color: new Color(255, 0, 0)
          })
        },
        {
          // 最小过滤范围，field对应的值大于等于minValue
          minValue: 3,
          // 最大过滤范围，field对应的值小于maxValue
          maxValue: 5,
          // 匹配到该值后的样式
          // M3D专题图仅支持SimpleFillSymbol符号
          symbol: new SimpleFillSymbol({
            // 填充颜色
            color: 'rgb(255, 123, 220)'
          })
        }
      ]
    })
    // 构造模型缓存图层
    const layer = new M3DModelCacheLayer({
      // 服务基地址
      url: '服务基地址',
      // 设置专题图渲染器
      renderer: renderer,
      // Cesium引擎的额外初始化参数
      extensionOptions: {
        // 开启自动跳转
        autoReset: true
      }
    });

单值专题图-Cesium原生方式

    // ES5引入方式
    const { M3DModelCacheLayer } = zondy.layer
    // ES6引入方式
    import { M3DModelCacheLayer } from "@mapgis/webclient-common"
    // 构造Cesium原生渲染器
    const renderer = {
      // 专题图过滤字段名
      field: "字段名",
      // 专题图类型-分段
      type: "class-breaks",
      // 分段专题图过滤条件数组
      classBreakInfos: [{
        // 最小过滤范围，field对应的值大于等于minValue
        minValue: 1,
        // 最大过滤范围，field对应的值小于maxValue
        maxValue: 7,
        // 渲染符号
        symbol: {
          // 渲染类型为M3D
          type: 'mesh-3d',
          // 覆盖物图层
          symbolLayers: [{
            // 图层类型-颜色填充
            type: "fill",
            // 图层材质
            material: {
              // 填充颜色
              color: Cesium.Color.ANTIQUEWHITE
            }
          }]
        }
      }]
    }
    // 构造模型缓存图层
    const layer = new M3DModelCacheLayer({
      // 服务基地址
      url: '服务基地址',
      // Cesium引擎的额外初始化参数
      extensionOptions: {
        // 开启自动跳转
        autoReset: true,
        // 设置专题图渲染器
        renderer: renderer
      }
    });

分段专题图-Cesium原生方式

    // ES5引入方式
    const { M3DModelCacheLayer } = zondy.layer
    // ES6引入方式
    import { M3DModelCacheLayer } from "@mapgis/webclient-common"
    // 构造Cesium原生渲染器
    const renderer = {
      // 专题图过滤字段名
      field: "字段名",
      // 专题图类型-单值
      type: "unique-value",
      // 单值专题图过滤条件数组
      uniqueValueInfos: [
        // 指定字段值
        value: '过滤字段值',
        // 渲染符号
        symbol: {
          // 渲染类型为M3D
          type: 'mesh-3d',
          // 覆盖物图层
          symbolLayers: [{
            // 图层类型-颜色填充
            type: "fill",
            // 图层材质
            material: {
              // 填充颜色
              color: new Cesium.Color(0.0, 0.0, 1.0, 0.5)
            }
          }]
        }
      ]
    };
    // 构造模型缓存图层
    const layer = new M3DModelCacheLayer({
      // 服务基地址
      url: '服务基地址',
      // Cesium引擎的额外初始化参数
      extensionOptions: {
        // 开启自动跳转
        autoReset: true,
        // 设置专题图渲染器
        renderer: renderer
      }
    });

### 继承关系

- Layer

### 成员变量

类型: Object

#### # boundingVolume

模型外包盒

类型: Object

#### # readonly capabilities

图层支持能力。图层支持能力分为客户端能力和服务端能力，其中客户端能力包含cesium、leaflet、mapboxgl引擎能力。默认图层客户端能力：所有引擎支持图层加载；默认图层服务端能力为空。

Overrides:
  - Layer#capabilities

类型: Array.<VoxelFilter>

#### # clientFilters

客户端过滤器，当前仅支持数据的第一个VoxelFilter过滤器。

类型: String

#### # readonly copyright

版权所有

Inherited From:
  - Layer#copyright

类型: String

#### # description

描述信息

Overrides:
  - Layer#description

类型: ElevationInfo

#### # elevationInfo

高程模式。目前仅支持栅格体元设置高程模式，且如果设置featureExpressionInfo ，则必须按照$feature.z的方式索引高程值，且目前仅支持简单的表达式，例如可以设置将每个高程值替换为原来的10倍,可以设置表达式'$feature.z * 10'

类型: Object

#### # extendProps

当前图层对象上不支持的属性，二次开发用户希望挂在图层对像上的属性可以存储到该属性中

Inherited From:
  - Layer#extendProps
Default Value:
  - {}

类型: Object

#### # extensionOptions

初始化图层的额外参数，可以通过该参数传入引擎原生的构造参数

Inherited From:
  - Layer#extensionOptions
Default Value:
  - {}

类型: Extent | null

#### # readonly extent

图层的范围。从元信息或数据中获取，默认为null表示取不到范围。

Inherited From:
  - Layer#extent

类型: Array.<String>

#### # fieldInfo

服务包含的表字段数组

类型: String

#### # readonly headers

设置服务请求头

Inherited From:
  - Layer#headers

类型: FetchMethod

#### # readonly httpMethod

http请求方式

Inherited From:
  - Layer#httpMethod

类型: String

#### # readonly id

图层id

Inherited From:
  - Layer#id

类型: Boolean

#### # readonly loaded

是否加载完毕

Inherited From:
  - Layer#loaded
Default Value:
  - false

类型: String

#### # readonly loadStatus

图层加载状态

Inherited From:
  - Layer#loadStatus
Default Value:
  - not-loaded

类型: Number

#### # maxScale

最大显示比例尺，图层在视图中可见的最大比例尺(最放大)。如果地图被放大到超过这个比例，图层将不可见。默认值为0，如果图层是瓦片类型，maxScale、minScale的默认值能和tileInfo上的保持一致，如果图层是动态图层，则和地图视图保持一致。maxScale应该始终小于minScale。

Inherited From:
  - Layer#maxScale
Default Value:
  - 0

类型: Number

#### # minScale

最小显示比例尺，图层在视图中可见的最小比例尺(最缩小)。如果地图被缩小到超过这个比例，图层将不可见。默认值为0，如果图层是瓦片类型，maxScale、minScale的默认值能和tileInfo上的保持一致，如果图层是动态图层，则和地图视图保持一致。minScale应该始终大于maxScale。

Inherited From:
  - Layer#minScale
Default Value:
  - 0

类型: Number

#### # opacity

图层透明度，0到1之间的值，0为完全透明，1为不透明，会触发图层更新完毕事件。IGSSceneLayer图层类型为地形时，不支持该属性。

Inherited From:
  - Layer#opacity

类型: BaseRenderer | null

#### # renderer

渲染器

类型: String

#### # readonly sceneName

服务名

类型: SpatialReference | null

#### # spatialReference

图层坐标系对象

Inherited From:
  - Layer#spatialReference

类型: TimeExtent

#### # timeExtent

时间范围，具有明确开始和结束日期的一段时间。时间范围用于显示或查询指定时间段内的要素。要表示某个时刻，需要将开始时间和结束时间设置为同一日期。

类型: TimeInfo | null

#### # readonly timeInfo

对于数据时间维度信息的描述。

类型: String

#### # title

图层名称

Overrides:
  - Layer#title

类型: TokenAttachType

#### # tokenAttachType

token附加类型。默认psot请求优先附加到body，get请求优先附加到url末尾

Inherited From:
  - Layer#tokenAttachType

类型: String

#### # tokenKey

token名

Inherited From:
  - Layer#tokenKey
Default Value:
  - token

类型: String

#### # tokenValue

token值

Inherited From:
  - Layer#tokenValue

类型: String

#### # readonly type

图层类型

Overrides:
  - Layer#type

类型: Number

#### # visible

图层显示或隐藏，true则显示，false则隐藏，会触发图层更新完毕事件

Inherited From:
  - Layer#visible

### 方法

#### # static fromJSON(json)

通过json构造并返回图层对象

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`json` | Object | json对象

#### # static fromServerUrl(url)

通过url创建图层对象

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`url` | String | 服务基地址

返回值:

新的图层对象

类型: IGSMapImageLayer

#### # clone()

克隆图层对象

Overrides:
  - Layer#clone

返回值:

克隆后的图层对象

类型: M3DModelCacheLayer

#### # destroy()

Inherited From:
  - Layer#destroy

返回值:
类型: *

#### # isLoaded()

判断图层是否加载成功

Inherited From:
  - Layer#isLoaded

返回值:

图层是否加载成功

类型: Boolean

#### # load()

加载图层资源

返回值:
类型: Promise.<M3DModelCacheLayer>

##### 示例

不加载图层，仅获取图层信息

    // ES5引入方式
    const { M3DModelCacheLayer } = zondy.layer
    // ES6引入方式
    import { M3DModelCacheLayer } from "@mapgis/webclient-common"
    // 初始化图层
    const layer = new M3DModelCacheLayer({
      // 服务基地址
      url: '服务基地址',
    });
    layer.load().then((result) => {
      // 获取完图层信息
      console.log(result)
    })

#### # toJSON()

将图层转为json对象

Overrides:
  - Layer#toJSON

返回值:

json对象

类型: Object

### 事件

#### # 图层加载完毕事件

图层加载完毕事件

##### 属性:

Name | Type | Attributes | Default | Description
--- | --- | --- | --- | ---
`event` | Object |  |  | 事件对象
`type` | String | <optional> | 'layerview-created' | 图层加载完毕事件
`message` | String | <optional> | null | 更新描述
`UpdateContent` | Array.<UpdateContent> | <optional> | null | 更新详情对象
`layer` | Layer | <optional> | null | 地图图层对象
`layerView` | MapView | <optional> | null | 图层的视图对象
`sourceTarget` | Layer | <optional> | null | 事件发起对象
`target` | Map | <optional> | null | 事件接收对象

Inherited From:
  - Layer#event:图层加载完毕事件

##### 示例

图层加载完毕事件

    Layer.on('layerview-created', function (result) {
      console.log("加载完毕:", result.layer)
    });

#### # 图层显隐更新完毕事件

图层显隐更新完毕事件，请注意该事件是图层更新事件(layerview-update)的子事件

##### 属性:

Name | Type | Attributes | Default | Description
--- | --- | --- | --- | ---
`event` | Object |  |  | 事件对象
`type` | String | <optional> | 'layerview-update' | 图层更新完毕事件
`message` | String | <optional> | null | 更新描述
`updateContent` | Array.<UpdateContent> | <optional> | null | 更新详情对象
`layer` | Layer | <optional> | null | 地图图层对象
`layerView` | MapView | <optional> | null | 图层的视图对象
`sourceTarget` | Layer | <optional> | null | 事件发起对象
`target` | Map | <optional> | null | 事件接收对象

Inherited From:
  - Layer#event:图层显隐更新完毕事件

##### 示例

##### 图层显隐更新完毕事件

    Layer.on('layerview-update', function (event) {
      // 获取更新事件对象
      console.log("更新完毕:", event)
      // 获取更新详情数组
      const updateContent = event.updateContent
      // 循环数组，根据事件名进行后续操作
      for (let i = 0; i < updateContent.length; i++) {
        // 图层显隐事件
        if(updateContent[i].name === 'visible'){
          console.log("图层显隐更新事件:", event);
        }
      }
    });

#### # 图层更新完毕事件

图层更新完毕事件

##### 属性:

Name | Type | Attributes | Default | Description
--- | --- | --- | --- | ---
`event` | Object |  |  | 事件对象
`type` | String | <optional> | 'layerview-update' | 图层更新完毕事件
`message` | String | <optional> | null | 更新描述
`updateContent` | Array.<UpdateContent> | <optional> | null | 更新详情对象
`layer` | Layer | <optional> | null | 地图图层对象
`layerView` | MapView | <optional> | null | 图层的视图对象
`sourceTarget` | Layer | <optional> | null | 事件发起对象
`target` | Map | <optional> | null | 事件接收对象

Inherited From:
  - Layer#event:图层更新完毕事件

##### 示例

图层更新完毕事件

    Layer.on('layerview-update', function (result) {
      console.log("更新完毕:", result.layer)
    });

#### # 图层比例尺显示隐藏状态更新事件。当前仅支持非组图层以及场景子图层

图层刷新完毕事件，请注意该事件是图层更新事件(layerview-update)的子事件

##### 属性:

Name | Type | Attributes | Default | Description
--- | --- | --- | --- | ---
`event` | Object |  |  | 事件对象
`type` | String | <optional> | 'layerview-update' | 图层更新完毕事件
`message` | String | <optional> | null | 更新描述
`updateContent` | Array.<UpdateContent> | <optional> | null | 更新详情对象
`layer` | Layer | <optional> | null | 地图图层对象
`layerView` | MapView | <optional> | null | 图层的视图对象
`sourceTarget` | Layer | <optional> | null | 事件发起对象
`target` | Map | <optional> | null | 事件接收对象
`event` | LayerViewScaleVisibleEvent |  |  | 事件对象 layer.on('layerview-scale-visible', (event) => { console.log("图层比例尺显示隐藏状态更新事件:", event) })

Inherited From:
  - Layer#event:图层比例尺显示隐藏状态更新事件。当前仅支持非组图层以及场景子图层

##### 示例

##### 图层刷新完毕事件

    Layer.on('layerview-update', function (event) {
      // 获取更新事件对象
      console.log("更新完毕:", event)
      // 获取更新详情数组
      const updateContent = event.updateContent
      // 循环数组，根据事件名进行后续操作
      for (let i = 0; i < updateContent.length; i++) {
        // 图层刷新完毕事件
        if(updateContent[i].name === 'refresh'){
          console.log("图层刷新完毕事件:", event);
        }
      }
    });

    /**

#### # 图层透明度更新完毕事件

图层透明度更新完毕事件，请注意该事件是图层更新事件(layerview-update)的子事件

##### 属性:

Name | Type | Attributes | Default | Description
--- | --- | --- | --- | ---
`event` | Object |  |  | 事件对象
`type` | String | <optional> | 'layerview-update' | 图层更新完毕事件
`message` | String | <optional> | null | 更新描述
`updateContent` | Array.<UpdateContent> | <optional> | null | 更新详情对象
`layer` | Layer | <optional> | null | 地图图层对象
`layerView` | MapView | <optional> | null | 图层的视图对象
`sourceTarget` | Layer | <optional> | null | 事件发起对象
`target` | Map | <optional> | null | 事件接收对象

Inherited From:
  - Layer#event:图层透明度更新完毕事件

##### 示例

##### 图层透明度更新完毕事件

    Layer.on('layerview-update', function (event) {
      // 获取更新事件对象
      console.log("更新完毕:", event)
      // 获取更新详情数组
      const updateContent = event.updateContent
      // 循环数组，根据事件名进行后续操作
      for (let i = 0; i < updateContent.length; i++) {
        // 图层透明度更新事件
        if(updateContent[i].name === 'opacity'){
          console.log("图层透明度更新事件:", event);
        }
      }
    });

#### # 图层销毁完毕事件

图层销毁完毕事件

##### 属性:

Name | Type | Attributes | Default | Description
--- | --- | --- | --- | ---
`event` | Object |  |  | 事件对象
`type` | String | <optional> | 'layerview-remove' | 图层销毁完毕事件
`message` | String | <optional> | null | 更新描述
`updateContent` | Array.<UpdateContent> | <optional> | null | 更新详情对象
`layer` | Layer | <optional> | null | 要销毁的地图图层对象
`layerView` | MapView | <optional> | null | 图层的视图对象
`sourceTarget` | Layer | <optional> | null | 事件发起对象
`target` | Map | <optional> | null | 事件接收对象

Inherited From:
  - Layer#event:图层销毁完毕事件

##### 示例

图层销毁完毕事件

    Layer.on('layerview-remove', function (result) {
      console.log("销毁完毕:", result.layer)
    });