|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772 | # 图层 API 🌎
将具有相同业务逻辑或属性的覆盖元素进行分类,以便于同一管理
## DC.Layer
> 图层的基类,其子类是实例化后需添加到三维场景中方可展示各类三维数据
:::warning
该基本类无法实例化,既视实例化后也无法使用
:::
### properties
- `{String} id`:唯一标识 **_`readonly`_**
- `{Boolean} show`:是否显示
- `{Object} attr`:业务属性
- `{String} state`:图层状态 **_`readonly`_**
- `{String} type`:图层类型 **_`readonly`_**
### methods
- **_addOverlay(overlay)_**
  添加覆盖物
  - 参数
    - `{Overlay} overlay`:覆盖物
  - 返回值 `this`
- **_addOverlays(overlays)_**
  添加覆盖物数组
  - 参数
    - `{Array<Overlay>} overlays`:覆盖物数组
  - 返回值 `this`
- **_removeOverlay(overlay)_**
  删除覆盖物
  - 参数
    - `{Overlay} overlay`:覆盖物
  - 返回值 `this`
- **_getOverlay(overlayId)_**
  根据 Id 获取覆盖物`(不推荐用)`
  - 参数
    - `{String} overlayId`:覆盖物唯一标识(默认产生)
  - 返回值 `overlay`
- **_getOverlayById(Id)_**
  根据业务 Id 获取覆盖物`(推荐用)`
  - 参数
    - `{String} Id`:覆盖物业务唯一标识
  - 返回值 `overlay`
- **_getOverlaysByAttr(attrName, attrVal)_**
  根据覆盖物属性获取覆盖物
  - 参数
    - `{String} attrName`:属性名称
    - `{Object} attrVal`:属性值
  - 返回值 `array`
  ```js
  overlay.attr.name = 'test' //设置覆盖物的属性
  let arr = layer.getOverlaysByAttr('name', 'test') //根据属性获取覆盖物
  ```
- **_getOverlays()_**
  获取所有覆盖物
  - 返回值 `array`
- **_eachOverlay(method, context)_**
  遍历覆盖物
  - 参数
    - `{Function} method`:回调函数,参数为每一个覆盖物
    - `{Object} context`:上下文
  - 返回值 `this`
  ```js
  layer.eachOverlay((item) => {})
  ```
- **_clear()_**
  清空图层
  - 返回值 `this`
- **_remove()_**
  删除图层
  - 返回值 `this`
- **_addTo(viewer)_**
  添加图层到场景
  - 参数
    - `{Viewer|World} viewer`:场景
  - 返回值 `this`
- **_on(type, callback, context)_**
  事件订阅
  - 参数
    - `{Object} type` :订阅类型
    - `{Function} callback` :订阅回调
    - `{Object} context` :上下文
  - 返回值 `this`
- **_off(type, callback, context)_**
  取消事件订阅
  - 参数
    - `{Object} type` :订阅类型
    - `{Function} callback` :订阅回调
    - `{Object} context` :上下文
  - 返回值 `this`
- **_fire(type,params)_**
  触发事件
  - 参数
    - `{Object} type` :订阅类型
    - `{Object} params` :参数
  - 返回值 `this`
### static methods
- **_registerType(type)_**
  注册图层类型
  - 参数
    - `{String} type`:图层类型
- **_getLayerType()_**
  获取图层类型
  - 返回值 `string`
## DC.LayerGroup
> 图层组,将图层按一定的逻辑分组,方便统一管理
### example
```js
let layerGroup = new DC.LayerGroup('id')
viewer.addLayerGroup(layerGroup)
let layer = new DC.VectorLayer('layer')
layerGroup.addLayer(layer)
```
### creation
- **_constructor(id)_**
  构造函数
  - 参数
    - `{String} id`:图层组唯一标识
  - 返回值 `layerGroup`
### properties
- `{String} id`:唯一标识 **_`readonly`_**
- `{Boolean} show`:是否显示
- `{String} type`:图层类型 **_`readonly`_**
### methods
- **_addLayer(layer)_**
  添加图层
  - 参数
    - `{Layer} layer`:图层
  - 返回值 `this`
- **_removeLayer(layer)_**
  删除图层
  - 参数
    - `{Layer} layer`:图层
  - 返回值 `this`
- **_getLayer(id)_**
  获取图层
  - 参数
    - `{String} id`:图层 ID
  - 返回值 `layer`
- **_getLayers()_**
  获取所有图层,不包括地图
  - 返回值 `layer`
- **_remove()_**
  删除图层组
  - 返回值 `this`
- **_addTo(viewer)_**
  添加图层到场景
  - 参数
    - `{Viewer|World} viewer`:场景
  - 返回值 `this`
## DC.VectorLayer
> 矢量图层,用于添加各类矢量数据(点、线、面等),将矢量数据按一定的逻辑分组,方便统一管理,继承于[Layer](#dc-layer)
### example
```js
let layer = new DC.VectorLayer('id')
viewer.addLayer(layer)
```
### creation
- **_constructor(id)_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
  - 返回值 `vectorLayer`
## DC.DynamicLayer
> 动态图层,用于添加各类动态矢量数据(图标、模型等),将矢量数据按一定的逻辑分组,方便统一管理,继承于[Layer](#dc-layer)
### example
```js
let layer = new DC.DynamicLayer('id')
viewer.addLayer(layer)
```
### creation
- **_constructor(id)_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
  - 返回值 `dynamicLayer`
## DC.PrimitiveLayer
> 图元图层,用于添加各类图元数据,将图元数据按一定的逻辑分组,方便统一管理,继承于[Layer](#dc-layer)
### example
```js
let layer = new DC.PrimitiveLayer('id')
viewer.addLayer(layer)
```
### creation
- **_constructor(id)_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
  - 返回值 `primitiveLayer`
## DC.GroundPrimitiveLayer
> 贴地图元图层,用于添加各类贴地图元数据,将贴地图元数据按一定的逻辑分组,方便统一管理,继承于[Layer](#dc-layer)
### example
```js
let layer = new DC.GroundPrimitiveLayer('id')
viewer.addLayer(layer)
```
### creation
- **_constructor(id)_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
  - 返回值 `groundPrimitiveLayer`
## DC.TilesetLayer
> 3dTiles 图层,用于添加 3dTiles 模型数据, 继承于[Layer](#dc-layer)
### example
```js
let layer = new DC.TilesetLayer('id')
viewer.addLayer(layer)
```
### creation
- **_constructor(id)_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
  - 返回值 `tilesetLayer`
## DC.GeoJsonLayer
> GeoJson 图层,用于加载 GeoJson 格式数据,继承于[Layer](#dc-layer),
### example
```js
let layer = new DC.GeoJsonLayer('id', '**/**.geojson')
layer.eachOverlay((item) => {
  // item 为一个entity,
  if (item.polyline) {
    //todo
    let polyline = DC.Polyline.fromEntity(item)
  }
  if (item.polygon) {
    //todo
    let polygon = DC.Polygon.fromEntity(item)
  }
  if (item.billboard) {
    //todo
    let point = DC.Point.fromEntity(item)
    let divIcon = DC.DivIcon.fromEntity(item)
    let billboard = DC.Billboard.fromEntity(item)
  }
})
```
### creation
- **_constructor(id,url,[options])_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
    - `{String} url`:数据地址
    - `{Object} options`:属性配置,详情参考:[GeoJsonDataSource](http://resource.dvgis.cn/cesium-docs/GeoJsonDataSource.html)
  - 返回值 `geoJsonLayer`
### methods
- **_toVectorLayer()_**
  转换为矢量图层
  - 返回值 `vectorLayer`
- **_toModelLayer(modelUrl)_**
  转换为模型图层
  - 参数
    - `{String} modelUrl`:模型地址
  - 返回值 `vectorLayer`
## DC.TopoJsonLayer
> TopoJson 图层,用于加载 TopoJson 格式数据,继承于[Layer](#dc-layer),
### example
```js
let layer = new DC.GeoJsonLayer('id', '**/**.geojson')
layer.eachOverlay((item) => {
  // item 为一个entity,
  if (item.polyline) {
    //todo
    let polyline = DC.Polyline.fromEntity(item)
  }
  if (item.polygon) {
    //todo
    let polygon = DC.Polygon.fromEntity(item)
  }
  if (item.billboard) {
    //todo
    let point = DC.Point.fromEntity(item)
    let divIcon = DC.DivIcon.fromEntity(item)
    let billboard = DC.Billboard.fromEntity(item)
  }
})
```
### creation
- **_constructor(id,url,[options])_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
    - `{String} url`:数据地址
    - `{Object} options`:属性配置,详情参考:[GeoJsonDataSource](http://resource.dvgis.cn/cesium-docs/GeoJsonDataSource.html)
  - 返回值 `topoJsonLayer`
### methods
- **_toVectorLayer()_**
  转换为矢量图层
  - 返回值 `vectorLayer`
- **_toModelLayer(modelUrl)_**
  转换为模型图层
  - 参数
    - `{String} modelUrl`:模型地址
  - 返回值 `vectorLayer`
## DC.HtmlLayer
> Html 图层,用于加载 DivIcon 节点,继承于[Layer](#dc-layer),
### example
```js
let layer = new DC.HtmlLayer('dom')
viewer.addLayer(layer)
```
### creation
- **_constructor(id)_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
  - 返回值 `htmlLayer`
## DC.CzmlLayer
> Czml 图层,用于加载 Czml 数据,继承于[Layer](#dc-layer)
### example
```js
let layer = new DC.CzmlLayer('id', '**/**.czml')
layer.eachOverlay((item) => {
  if (item.polyline) {
    //todo
  }
  if (item.polygon) {
    //todo
  }
  if (item.billboard) {
    //todo
  }
})
```
### creation
- **_constructor(id,url,[options])_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
    - `{String} url`:数据地址
    - `{Object} options`:属性配置,详情参考:[CzmlDataSource](http://resource.dvgis.cn/cesium-docs/CzmlDataSource.html)
  - 返回值 `czmlLayer`
## DC.KmlLayer
> Kml 图层,用于加载 Kml 数据,继承于[Layer](#dc-layer)
### example
```js
let layer = new DC.KmlLayer('id', '**/**.kml')
layer.eachOverlay((item) => {
  if (item.polyline) {
    //todo
  }
  if (item.polygon) {
    //todo
  }
  if (item.billboard) {
    //todo
  }
})
```
### creation
- **_constructor(id,url,[options])_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
    - `{String} url`:数据地址
    - `{Object} options`:属性配置,详情参考:[KmlDataSource](http://resource.dvgis.cn/cesium-docs/KmlDataSource.html)
  - 返回值 `kmlLayer`
## DC.GpxLayer
> GPX 图层,用于加载 gpx 数据,继承于[Layer](#dc-layer)
### example
```js
let layer = new DC.GpxLayer('id', '**/**.gpx')
```
### creation
- **_constructor(id,url,[options])_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
    - `{String} url`:数据地址
    - `{Object} options`:属性配置,详情参考:[GpxDataSource](http://resource.dvgis.cn/cesium-docs/GpxDataSource.html)
  - 返回值 `gpxLayer`
## DC.ClusterLayer
> 聚合图层,继承于[Layer](#dc-layer)
### example
```js
let layer = new DC.ClusterLayer('id', { image: '' })
viewer.addLayer(layer)
```
### creation
- **_constructor(id,[options])_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
    - `{Object} options`:属性配置
  - 返回值 `clusterLayer`
```js
// 属性参数(可选)
{
  "radius": 40,//像素范围
  "maxZoom": 25,
  "image": "<单个点图片地址>",
  "style": "circle", // circle 、 clustering 、custom
  "gradientColors": {
    "0.0001": DC.Color.DEEPSKYBLUE,
    "0.001": DC.Color.GREEN,
    "0.01": DC.Color.ORANGE,
    "0.1": DC.Color.RED
  },//幅度颜色设置
  "gradientImages": {},//幅度图片设置,仅当style为custom有效
  "clusterSize":16//集合图标尺寸
  "fontSize": 12,
  // 字体大小
  "fontColor": DC.Color.BLACK //字体颜色
  "getCountOffset": (count)=>{return {x:0,y:0}} //字体偏移函数
}
```
### methods
- **_setPoints(points)_**
  设置点位
  - 参数
    - `{Array<Object>} points`:点位信息
  - 返回值 `clusterLayer`
## DC.HeatMapLayer
> 热区图层,继承于[Layer](#dc-layer)
### example
```js
let layer = new DC.HeatMapLayer('layer')
viewer.addLayer(layer)
```
### creation
- **_constructor(id,bounds,[options])_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
    - `{Object} options`:属性配置
  - 返回值 `heatMapLayer`
```json
//属性参数(可选)
{
  "gradient": {
    "0.5": "green",
    "0.6": "orange",
    "0.95": "red"
  }, //颜色设置
  "height": 0, // 高度
  "radius": 30, // 半径
  "useGround": false, //是否使用贴地模式
  "classificationType": 2 //分类 是否影响地形,3D切片或同时影响这两者。0:地形、1:3D切片、2:两者。贴地模式下生效
}
```
### methods
- **_setPoints(points)_**
  设置点位
  - 参数
    - `{Array<Object>} points`:点位信息
  - 返回值 `heatMapLayer`
```json
//点位信息参数
{
  "lng": "", //经度
  "lat": "", //纬度
  "value": 10 //强度
}
```
## DC.WindLayer
> 风向图层,继承于[Layer](#dc-layer)
### example
```js
let layer = new DC.WindLayer('id')
viewer.addLayer(layer)
```
### creation
- **_constructor(id,[options])_**
  构造函数
  - 参数
    - `{String} id`:图层唯一标识
    - `{Object} options`:属性配置
  - 返回值 `windLayer`
```json
//属性参数(可选)
{
  "globalAlpha": 0.9, //透明度
  "lineWidth": 1, // 线宽
  "colorScale": "#fff", //颜色
  "velocityScale": 1 / 25,
  "maxAge": 90,
  "paths": 800, // 路径数
  "frameRate": 20,
  "useCoordsDraw": true,
  "gpet": true
}
```
### methods
- **_setData(data,[options])_**
  设置风向数据
  - 参数
    - `{Object} data`:风向数据
    - `{Object} options`:配置信息,参考构造函数的配置信息
  - 返回值 `windLayer`
- **_setOptions(options)_**
  设置风向数据
  - 参数
    - `{Object} options`:配置信息,参考构造函数的配置信息
  - 返回值 `windLayer`
## DC.ChartLayer
> 图表图层,继承于[Layer](#dc-layer)
### example
```js
let chartLayer = new DC.ChartLayer('layer')
viewer.addLayer(chartLayer)
```
:::warning
图表图层依赖于 echarts 库,使用前请确保全局变量中能够获取到 echarts
:::
### creation
- **_constructor([id],[option])_**
  构造函数
  - 参数
    - `{String} id`:唯一标识
    - `{Object} option`:echarts 配置,详情参考:[echarts](https://www.echartsjs.com/zh/option.html#title)
  - 返回值 `chartLayer`
```json
// options,其他的参数参考 echarts
{
  "animation": false, // 必须要加
  "GLMap": {}, //地图
  "series": [
    {
      "coordinateSystem": "GLMap" // 坐标系统
    }
  ]
}
```
### methods
- **_setOption(option)_**
  设置点位
  - 参数
    - `{Object} option`:echarts 配置,详情参考:[echarts](https://www.echartsjs.com/zh/option.html#title)
  - 返回值 `this`
 |