# 基础 API 🌎
## DC.Viewer
> 3D 场景主要接口,在给定的 DivId 中构建三维场景
### example
```html
```
```js
let viewer = DC.Viewer('viewer-container')
global.viewer = viewer // 添加到全局变量
```
:::warning
如果开发使用的是 Vue 这样的 MVVM 框架,不要将 viewer、layer、overlay 添加到数据模型中。由于 3D
场景中会不停的刷新每一帧,如果将数据添加到数据模型中,长时间的话会导致浏览器的压力增大而奔溃。
:::
### creation
- **_constructor(container,[options])_**
  构造函数
  - 参数
    - `{String | Cesium.Viewer } container`:容器
    - `{Object} options`:属性
  - 返回值 `viewer`
```js
//属性参数(可选)
const config = {
  contextOptions: {
    webgl: {
      alpha: false, // 背景缓冲区是否包含 alpha 通道
      depth: true,  // 开启深度缓冲区(通常必须开启,否则无法正确遮挡)
      stencil: true, // 是否启用模板缓冲。false 可以节省显存和性能
      antialias: true, // 是否启用抗锯齿
      powerPreference: 'high-performance', // 提示浏览器优先用独显或性能更高的 GPU
      premultipliedAlpha: true, // 颜色预乘 alpha,
      preserveDrawingBuffer: false, // 渲染后是否保留缓冲内容。false 性能更好,但不能直接保存截图
      failIfMajorPerformanceCaveat: false, // 避免低性能环境直接报错
    },
    allowTextureFilterAnisotropic: true, // 启用各向异性纹理过滤,提高贴图锐度
  },
  sceneMode: 3, //1: 2.5D,2: 2D,3: 3D
  enableEventPropagation: false, //是否开启鼠标事件冒泡
  enableMouseMovePick: false, // 是否开启鼠标移动拾取功能,开启后当覆盖物较多的情况下,帧率会下降
  enableMouseOver: false, //是否开启鼠标移入事件,需要开启鼠标移动拾取功能
}
```
### properties
- `{Element} container`:场景容器 **_`readonly`_**
- `{Element} widgetContainer`:场景组件容器 **_`readonly`_**
- `{Element} layerContainer`:场景图层容器 **_`readonly`_**
- `{Object} scene`:场景 **_`readonly`_**,[详细使用说明](http://resource.dvgis.cn/cesium-docs/Scene.html)
- `{Object} camera`:相机 **_`readonly`_**,[详细使用说明](http://resource.dvgis.cn/cesium-docs/Scene.html)
- `{Element} canvas`:canvas 节点 **_`readonly`_**
- `{Object} clock`:时钟,[详细使用说明](http://resource.dvgis.cn/cesium-docs/Clock.html)
- `{Object} dataSources` :数据资源集合,[详细使用说明](http://resource.dvgis.cn/cesium-docs/DataSourceCollection.html)
- `{Object} imageryLayers`:瓦片集合,[详细使用说明](http://resource.dvgis.cn/cesium-docs/ImageryLayerCollection.html)
- `{Object} entities`:实体集合,[详细使用说明](http://resource.dvgis.cn/cesium-docs/EntityCollection.html)
- [`{Popup} popup`](#popup):气泡窗口 **_`readonly`_**
- [`{ContextMenu} contextMenu`](#contextmenu):右击弹框 **_`readonly`_**
- [`{Tooltip} tooltip`](#tooltip):提示框 **_`readonly`_**
- [`{MapSplit} mapSplit`](#mapsplit):地图分割 **_`readonly`_**
- [`{TilesetSplit} tilesetSplit`](#tilesetsplit):模型分割 **_`readonly`_**
- [`{SceneSplit} sceneSplit`](#scenesplit):场景分割 **_`readonly`_**
- [`{Compass} compass`](#compass):罗盘 **_`readonly`_**
- [`{ZoomController} zoomController`](#zoomcontroller):罗盘 **_`readonly`_**
- [`{LocationBar} locationBar`](#locationbar):坐标信息 **_`readonly`_**
- [`{DistanceLegend} distanceLegend`](#distancelegend):比例尺 **_`readonly`_**
- [`{LoadingMask} loadingMask`](#loadingmask):加载蒙层 **_`readonly`_**
- `{Position} cameraPosition`:相机位置 **_`readonly`_**
- `{Number} resolution`:分辨率 **_`readonly`_**
- `{Number} zoom`: 当前层级 **_`readonly`_**
- `{Rect} viewBounds`:视野范围 **_`readonly`_**
- `{Boolean} enableEventPropagation`: 是否开启鼠标事件冒泡
- `{Boolean} enableMouseMovePick`: 是否开启鼠标移动拾取功能,开启后当覆盖物较多的情况下,帧率会下降
- `{Boolean} enableMouseOver`: 是否开启鼠标移入事件,需要开启鼠标移动拾取功能
### methods
- **_setOptions(options)_**
  设置属性
  - 参数
    - `{Object} options`:属性对象
      - 返回值 `this`
```js
// 属性参数(属性可选)
const config = {
  shadows: false, // 是否开启阴影
  resolutionScale: 1, // 设置渲染分辨率的缩放比例
  showAtmosphere: true, //是否显示大气层
  showSun: true, //是否显示太阳
  showMoon: true, //是否显示月亮
  enableFxaa: true, //是否开启抗锯齿
  msaaSamples: 1, //msaa抗拒出取样度
  cameraController: {
    // 相机控制
    enableRotate: true, // 是否可以旋转
    enableTilt: true, // 是否可以翻转
    enableTranslate: true, // 是否可以平移
    enableZoom: true, // 是否可以缩放
    enableCollisionDetection: true, // 是否支持碰撞检测
    minimumZoomDistance: 1.0, // 最小缩放距离
    maximumZoomDistance: 40489014.0, // 最大缩放距离
  },
  globe: {
    show: true, // 是否显示地球
    showGroundAtmosphere: true, // 显示地面大气
    enableLighting: false, //是否开启灯光,开启后地球会根据当前时间启用灯光
    depthTestAgainstTerrain: false, //是否开启深度测试
    tileCacheSize: 100, // 默认瓦片缓存大小
    preloadSiblings: false, //是否应预加载渲染同级图块
    terrainExaggeration: 1, //地形夸张系数
    terrainExaggerationRelativeHeight: 1, //地形相对高度夸张系数
    baseColor: new DC.Color(0, 0, 0.5, 1), //地球默认底色
    filterColor: newDC.Color(0, 0, 0, 0), //瓦片过滤色,设置后不可逆
    translucency: {
      //地表透明
      enabled: false, // 是否开启地表透明
      backFaceAlpha: 1, // 地球背面透明度
      backFaceAlphaByDistance: null, //根据距离设置地球背面透明度: {near:400,nearValue:0.2,far:800,farValue:1}
      frontFaceAlpha: 1, // 地球正面透明度
      frontFaceAlphaByDistance: null, //根据距离设置地球正面透明度: {near:400,nearValue:0.2,far:800,farValue:1}
    },
  },
  skyBox: {
    sources: {}, // 六个面的贴图
    show: true, //是否显示
    offsetAngle: 0, //旋转角度
  },
}
```
- **_setPitchRange(min,max)_**
  设置翻转角度
  - 参数
    - `{Number} min`:最小角度
    - `{Number} max`:最大角度
  - 返回值 `this`
- **_changeSceneMode(sceneMode, duration)_**
  改变场景模式
  - 参数
    - `{Number} sceneMode`:场景模式 ,2:2D,3:3D,2.5:2.5D
    - `{Number} duration`:间隔时间
  - 返回值 `this`
- **_changeMouseMode(mouseMode)_**
  改变鼠标使用模式
  - 参数
    - `{Number} mouseMode`:鼠标模式,详情参考:`DC.MouseMode`
  - 返回值 `this`
- **_addBaseLayer(baseLayers,options)_**
  添加地图
  - 参数
    - `{baseLayer|Array} baseLayers`:地图
    - `{Object} options`:属性
  - 返回值 `this`
```js
//属性参数 (属性可选)
const options = {
  name: '电子地图', //名称
  iconUrl: '../preview.png', //缩略图
  alpha: 1.0,
  nightAlpha: 1.0,
  dayAlpha: 1.0,
  brightness: 1.0,
  contrast: 1.0,
  hue: 1.0,
  saturation: 1.0,
  gamma: 1.0,
}
```
- **_changeBaseLayer(index)_**
  更改地图
  - 参数
    - `{Number} index`:地图索引
  - 返回值 `this`
- **_getImageryLayerInfo(windowPosition)_**
  获取瓦片信息
  - 参数
    - `{Object} windowPosition`:窗口坐标
  - 返回值 `promise`
- **_setTerrain(terrain)_**
  设置地形
  - 参数
    - `{Terrain} terrain`:地形
  - 返回值 `this`
- **_addLayerGroup(layerGroup)_**
  添加图层组
  - 参数
    - `{LayerGroup} layerGroup`:图层组
  - 返回值 `this`
- **_removeLayerGroup(layerGroup)_**
  移除图层组
  - 参数
    - `{LayerGroup} layerGroup`:图层组
  - 返回值 `this`
- **_getLayerGroup(id)_**
  获取图层组
  - 参数
    - `{String} id`:图层组 ID
  - 返回值 `layerGroup`
- **_addLayer(layer)_**
  添加图层
  - 参数
    - `{Layer} layer`:图层
  - 返回值 `this`
- **_removeLayer(layer)_**
  删除图层
  - 参数
    - `{Layer} layer`:图层
  - 返回值 `this`
- **_getLayer(id)_**
  获取图层
  - 参数
    - `{String} id`:图层 ID
  - 返回值 `layer`
- **_getLayers()_**
  获取所有图层,不包括地图
  - 返回值 `layer`
- **_eachLayer(method, context)_**
  遍历所有图层
  - 参数
    - `{Function} method`:回调函数
    - `{Object} context`:上下文,默认为 this
  - 返回值 `this`
  ```js
  viewer.eachLayer((layer) => {})
  ```
- **_flyTo(target,duration)_**
  飞向目标
  - 参数
    - `{VectorLayer|Overlay} target` :目标
    - `{Number} duration`:飞到位置时间,单位:秒
  - 返回值 `this`
- **_zoomTo(target)_**
  缩放到目标
  - 参数
    - `{VectorLayer|Overlay} target` :目标
  - 返回值 `this`
- **_flyToPosition(position, completeCallback, duration)_**
  飞到具体位置
  - 参数
    - `{Position} position`:位置
    - `{Function} completeCallback`:飞完之后触发的回调
    - `{Number} duration`:飞到位置时间,单位:秒
  - 返回值 `this`
- **_zoomToPosition(position, completeCallback)_**
  缩放到具体位置
  - 参数
    - `{DC.Position} position`:位置
    - `{Function} completeCallback`:缩放完成后触发的回调
  - 返回值 `this`
- **_flyToBounds(bounds,{heading,pitch,roll}, completeCallback, duration)_**
  飞到指定的范围
  - 参数
    - `{String|Array} bounds`:范围,格式:[minX,minY,maxX,maxY]
    - `{Object} hpr`:方位角
    - `{Function} completeCallback`:飞完之后触发的回调
    - `{Number} duration`:飞到位置时间,单位:秒
  - 返回值 `this`
- **_zoomToBounds(bounds,{heading,pitch,roll}, completeCallback)_**
  缩放到指定的范围
  - 参数
    - `{String|Array} bounds`:范围,格式:[minX,minY,maxX,maxY]
    - `{Object} hpr`:方位角
    - `{Function} completeCallback`:缩放完之后触发的回调
  - 返回值 `this`
- **_on(type, callback, context)_**
  事件订阅
  - 参数
    - `{Object} type` :订阅类型
    - `{Function} callback` :订阅回调
    - `{Object} context` :上下文
  - 返回值 `this`
- **_once(type, callback, context)_**
  事件订阅(一次)
  - 参数
    - `{Object} type` :订阅类型
    - `{Function} callback` :订阅回调
    - `{Object} context` :上下文
  - 返回值 `this`
- **_off(type, callback, context)_**
  取消事件订阅
  - 参数
    - `{Object} type` :订阅类型
    - `{Function} callback` :订阅回调
    - `{Object} context` :上下文
  - 返回值 `this`
- **_destroy()_**
  销毁三维场景
  - 返回值 `this`
- **_exportScene(name)_**
  导出场景
  - 参数
    - `{String} name` :名称,默认为 scene
  - 返回值 `this`
## Popup
> 气泡窗口
### example
```js
let popup = viewer.popup
popup.setContent('')
```
### properties
- `{String} state`:状态 **_`readonly`_**
- `{Object} config`:配置 **_`writeOnly`_**
```js
// 配置(属性可选),配置后会影响全局的popup的显示样式,请慎重。
const config = {
  position: 'center', // popup的位于鼠标的点击位置的方向,有:center,left ,right
  customClass: 'custom', // 添加自定义的Css 类名到popup中,多个用空格隔开
}
```
### methods
- **_setPosition(position)_**
  设置位置
  - 参数
    - `{Cartesian3} position`:世界坐标
  - 返回值 `this`
- **_setContent(content)_**
  设置内容
  - 参数
    - `{String|Element} content`:内容
  - 返回值 `this`
- **_setWrapper(wrapper)_**
  设置容器
  - 参数
    - `{Element} wrapper`:容器 **_`(一般用于 MVVM 框架的模板)`_**
  - 返回值 `this`
- **_showAt(position, content)_**
  设置内容
  - 参数
    - `{Cartesian3} position`:世界坐标
    - `{String|Element} content`:内容
  - 返回值 `this`
- **_hide()_**
  隐藏气泡窗口
  - 返回值 `this`
## ContextMenu
> 右击菜单
### example
```js
let contextMenu = viewer.contextMenu
contextMenu.enable = true
contextMenu.DEFAULT_MENU = [
  {
    label: '测试',
    callback: (e) => {
    }, // e是一个对象主要包括 windowPosition,position,surfacePosition,overlay
    context: this,
  },
] // 设置默认的右击菜单,会影响全局右击菜单(慎用)。
```
### properties
- `{Boolean} enable`:是否启用
- `{String} state`:状态 **_`readonly`_**
- `{Array} DEFAULT_MENU`:默认菜单,菜单的回调函数参数为一个对象 **_`writeOnly`_**
## Tooltip
> 提示框
### example
```js
let tooltip = viewer.tooltip
tooltip.enable = true
tooltip.showAt({ x: 100, y: 100 }, '测试')
```
### properties
- `{Boolean} enable`:是否启用
- `{String} state`:状态 **_`readonly`_**
### methods
- **_showAt(position,content)_**
  设置位置
  - 参数
    - `{Cartesian2} position`:屏幕坐标
    - `{String|Element} content`:内容
  - 返回值 `this`
## MapSplit
> 地图分割
### examples
```js
let baseLayer_elc = DC.ImageryLayerFactory.createGoogleImageryLayer()
viewer.mapSplit.enable = true
viewer.mapSplit.addBaseLayer(baseLayer_elc, -1)
```
### properties
- `{Boolean} enable`:是否启用
- `{String} state`:状态 **_`readonly`_**
### methods
- **_addBaseLayer(baseLayer,[splitDirection])_**
  添加地图
  - 参数
    - `{BaseLayer} baseLayer`:地图
    - `{Number} splitDirection`:分割方向,-1:左,0:无,1:右
  - 返回值 `this`
## TilesetSplit
> 模型分割
### examples
```js
let tileset = new DC.Tileset('**/tileset.json')
tileset.setSplitDirection(1)
viewer.tilesetSplit.enable = true
viewer.tilesetSplit.addTileset(tileset)
```
### properties
- `{Boolean} enable`:是否启用
- `{String} state`:状态 **_`readonly`_**
### methods
- **_addTileset(tileset)_**
  添加地图
  - 参数
    - `{Tileset} tileset`:模型
  - 返回值 `this`
## SceneSplit
> 场景分割
### examples
```js
let tileset = new DC.Tileset('**/tileset.json')
tileset.setSplitDirection(1)
viewer.sceneSplit.enable = true
viewer.sceneSplit.addTileset(tileset)
```
### properties
- `{Boolean} enable`:是否启用
- `{String} state`:状态 **_`readonly`_**
### methods
- **_addBaseLayer(baseLayer)_**
  添加地图
  - 参数
    - `{BaseLayer} baseLayer`:地图
  - 返回值 `this`
- **_addTileset(tileset)_**
  添加地图
  - 参数
    - `{Tileset} tileset`:模型
  - 返回值 `this`
## Compass
> 罗盘
### examples
```js
viewer.compass.enable = true
```
### properties
- `{Boolean} enable`:是否启用
- `{String} state`:状态 **_`readonly`_**
## ZoomController
> 缩放控制
### examples
```js
viewer.zoomController.enable = true
```
### properties
- `{Boolean} enable`:是否启用
- `{String} state`:状态 **_`readonly`_**
## LocationBar
> 坐标信息
### examples
```js
viewer.locationBar.enable = true
```
### properties
- `{Boolean} enable`:是否启用
- `{String} state`:状态 **_`readonly`_**
## DistanceLegend
> 比例尺
### examples
```js
viewer.distanceLegend.enable = true
```
### properties
- `{Boolean} enable`:是否启用
- `{String} state`:状态 **_`readonly`_**
## LoadingMask
> 加载蒙层
### examples
```js
viewer.loadingMask.enable = true
```
### properties
- `{Boolean} enable`:是否启用
- `{String} state`:状态 **_`readonly`_**
## DC.GroundSkyBox
> 近地天空盒,[详情参考](http://resource.dvgis.cn/cesium-docs/SkyBox.html)
### example
```js
scene.skyBox = new DC.GroundSkyBox({
  sources: {
    positiveX: 'skybox_px.png',
    negativeX: 'skybox_nx.png',
    positiveY: 'skybox_py.png',
    negativeY: 'skybox_ny.png',
    positiveZ: 'skybox_pz.png',
    negativeZ: 'skybox_nz.png',
  },
})
```
### creation
- **_constructor(id)_**
  构造函数
  - 参数
    - `{Object} options`:配置
  - 返回值 `skyBox`
```js
//options(属性可选)
const options = {
  sources: {}, // 六个面的贴图
  show: true, //显示
  offsetAngle: 0, //旋转角度
}
```
### properties
- `{Object} sources`:六个面的贴图
- `{Boolean} show`:显示
- `{Number} offsetAngle`:旋转角度
## DC.Position
> 坐标类,用于描述物体在场景中的具体位置,采用右手标准
### example
```js
let position = new DC.Position(120, 22, 102)
let position1 = DC.Position.fromString('120,22,102')
let position2 = DC.Position.fromArray([120, 22, 102])
let position3 = DC.Position.fromObject({ lng: 120, lat: 22, alt: 102 })
```
### creation
- **_constructor(lng,lat,alt,heading,pitch,roll)_**
  构造函数
  - 参数
    - `{Number} lng`:经度
    - `{Number} lat`:纬度
    - `{Number} alt`:高度,单位:米,默认:0
    - `{Number} heading`:偏航角度,可能其他框架作 yaw,表示绕 Z 轴旋转。默认:0
    - `{Number} pitch`:俯仰角度,表示绕 Y 轴旋转。默认:0
    - `{Number} roll`:翻转角度,表示绕 X 轴旋转。默认:0
  - 返回值 `position`
### properties
- `{Number} lng`:经度
- `{Number} lat`:纬度
- `{Number} alt`:高度,单位:米,默认:0
- `{Number} heading`:偏航角度,可能其他框架作 yaw,表示绕 Z 轴旋转。默认:0
- `{Number} pitch`:俯仰角度,表示绕 Y 轴旋转。默认:0
- `{Number} roll`:翻转角度,表示绕 X 轴旋转。默认:0
### methods
- **_serialize()_**
  序列化
  - 返回值 `string`
- **_copy()_**
  复制一个新的位置
  - 返回值 `position`
- **_toString()_**
  将坐标字符化
  - 返回值 `string`
- **_toArray()_**
  将坐标数组化
  - 返回值 `array`
- **_toObject()_**
  将坐标对象化
  - 返回值 `Object`
### static methods
- **_fromString(str)_**
  将字符化坐标转换为坐标对象
  - 参数
    - `{String} str`:字符化坐标
  - 返回值 `position`
- **_fromArray(array)_**
  将数组化坐标转换为坐标对象
  - 参数
    - `{Array} array`:数组化坐标
  - 返回值 `position`
- **_fromObject(obj)_**
  将 Json 对象坐标转换为坐标对象
  - 参数
    - `{Object} obj`:Json 对象坐标
  - 返回值 `position`
- **_fromCoordString(str)_** `deprecated`
  字符坐标串转换为坐标对象
  - 参数
    - `{String} str`:字符坐标串
  - 返回值 `position`
- **_fromCoordArray(array)_** `deprecated`
  坐标数组转换为坐标对象
  - 参数
    - `{Array} array`:坐标数组
  - 返回值 `position`
- **_deserialize(valStr)_**
  反序列化
  - 参数
    - `{String} valStr`:序列化的对象
  - 返回值 `position`
## DC.Parse
> 坐标解析工具类,可简写为 DC.P
```js
let position = DC.P.parsePosition('123,32,0')
```
### static methods
- **_parsePosition(position)_**
  解析坐标为 DC.Position
  - 参数
    - `{String|Array|Position} position`:坐标
  - 返回值 `position`
- **_parsePositions(positions)_**
  解析坐标为 Array
  - 参数
    - `{String|Array} positions`: 坐标
  - 返回值 `array`
- **_parsePointCoordToArray(position)_**
  解析点位坐标为数组
  - 参数
    - `{String|Position} position`:点位坐标
  - 返回值 `array`
- **_parsePolylineCoordToArray(positions)_**
  解析线坐标为二维数组
  - 参数
    - `{String|Array} positions`:线坐标
  - 返回值 `array`
- **_parsePolygonCoordToArray(positions,loop)_**
  解析面坐标为三维数组
  - 参数
    - `{String|Array} positions`:面坐标
    - `{Boolean} loop`:闭合
  - 返回值 `array`
## DC.Transform
> 坐标转换工具类 ,可简写为 DC.T
```js
let cartesian3 = DC.T.transformWGS84ToCartesian(new DC.Position(120, 20))
```
### static methods
- **_transformCartesianToWGS84(cartesian)_**
  世界坐标转换为 84 坐标
  - 参数
    - `{Cartesian3} cartesian`:世界坐标
  - 返回值 `position`
- **_transformWGS84ToCartesian(position)_**
  84 坐标转换为世界坐标
  - 参数
    - `{Position} position`:84 坐标
  - 返回值 `cartesian`
- **_transformWGS84ToCartographic(position)_**
  84 坐标转换为制图坐标
  - 参数
    - `{Position} position`:84 坐标
  - 返回值 `cartographic`
- **_transformCartesianArrayToWGS84Array(cartesianArr)_**
  世界坐标数组转 84 坐标数组
  - 参数
    - `{Array} cartesianArr`:世界坐标数组
  - 返回值 `array`
- **_transformWGS84ArrayToCartesianArray(WGS84Arr)_**
  84 坐标数组转世界坐标数组
  - 参数
    - `{Array} WGS84Arr`:84 坐标数组
  - 返回值 `array`
- **_transformWGS84ToMercator(position)_**
  84 坐标转 Mercator
  - 参数
    - `{Position} position`:84 坐标
  - 返回值 `position`
- **_transformMercatorToWGS84(position)_**
  Mercator 坐标转 84
  - 参数
    - `{Position} position`:Mercator 坐标
  - 返回值 `position`
- **_transformWindowToWGS84(position,viewer)_**
  屏幕坐标转 84
  - 参数
    - `{Object} position`: 屏幕坐标,格式`{x:1,y:1}`
    - `{Viewer} viewer`:3D 场景
  - 返回值 `position`
- **_transformWGS84ToWindow(position,viewer)_**
  84 转屏幕坐标
  - 参数
    - `{Position} position`: 84 坐标
    - `{Viewer} viewer`:3D 场景
  - 返回值 `Object`
## DC.CoordTransform
> 国内坐标转换工具
```js
let point = DC.CoordTransform.BD09ToGCJ02(120, 20)
```
### static methods
- **_BD09ToGCJ02(lng, lat)_**
  百度坐标系 (BD-09) 的转换 火星坐标系 (GCJ-02)
  - 参数
    - `{Number} lng`:经度
    - `{Number} lat`:纬度
  - 返回值 `[]`
- **_GCJ02ToBD09(lng, lat)_**
  火星坐标系 (GCJ-02) 转换为 百度坐标系 (BD-09)
  - 参数
    - `{Number} lng`:经度
    - `{Number} lat`:纬度
  - 返回值 `[]`
- **_WGS84ToGCJ02(lng, lat)_**
  WGS-84 转换为 火星坐标系 (GCJ-02)
  - 参数
    - `{Number} lng`:经度
    - `{Number} lat`:纬度
  - 返回值 `[]`
- **_GCJ02ToWGS84(lng, lat)_**
  火星坐标系 (GCJ-02) 转换为 WGS-84
  - 参数
    - `{Number} lng`:经度
    - `{Number} lat`:纬度
  - 返回值 `[]`
## DC.Math
> 基本函数类
### static methods
- **_area(positions)_**
  面积,单位:平方米
  - 参数
    - `{Array} positions`: 点位数据
  - 返回值 `number`
- **_bounds(positions , expand)_**
  边界
  - 参数
    - `{Array} positions`: 点位数据
    - `{Number}} expand`: 扩展比例:0~1
  - 返回值 `object`
- **_mid(start , end)_**
  两点之间的中心点
  - 参数
    - `start`: 开始位置
    - `end`: 结束位置
  - 返回值 `position`
- **_center(positions)_**
  中心点
  - 参数
    - `{Array} positions`: 点位数据
  - 返回值 `position`
- **_distance(positions)_**
  距离,单位:米
  - 参数
    - `{Array} positions`: 点位数据
  - 返回值 `number`
- **_heading(start,end)_**
  偏转角度,单位:度
  - 参数
    - `start`: 开始位置
    - `end`: 结束位置
  - 返回值 `number`
- **_parabola(start, end,height,count)_**
  抛物线
  - 参数
    - `start`: 开始位置
    - `end`: 结束位置
    - `{Number} height`: 最高点高度
    - `{Number} count`: 点位数量
  - 返回值 `Array`
> [more](http://resource.dvgis.cn/cesium-docs/Math.html)
## DC.Util
> 工具类
### static methods
- **_uuid(prefix)_**
  生成 uuid
  - 参数
    - `{String} prefix`:前缀,默认为 D
  - 返回值 `string`
- **_merge(dest, ...sources)_**
  属性合并
  - 参数
    - `{Object} dest`:目标对象
    - `{Object|Array} sources`:需要合并的属性
  - 返回值 `object`
- **_emptyImageUrl()_**
  空图片
- **_debounce(fn,delay)_**
  防抖
- **_throttle(fn,delay)_**
  节流
## DC.DomUtil
> Dom 工具类
### static methods
- **_get(id)_**
  创建 dom
  - 参数
    - `{String} id`: 要素 ID
  - 返回值 `Element`
- **_create(tagName, className, [container])_**
  创建 dom
  - 参数
    - `{String} tagName`: 标签名
    - `{String} className`: 样式名,多个用空格隔开
    - `{Element} [container]`: 父容器
  - 返回值 `Element`
- **_addClass(el, name)_**
  添加类名
  - 参数
    - `{Element} el`: 要素
    - `{String} className`: 样式名,多个用空格隔开
- **_removeClass(el, name)_**
  删除类名
  - 参数
    - `{Element} el`: 要素
    - `{String} className`: 样式名,多个用空格隔开
- **_addClass(el, name)_**
  添加类名
  - 参数
    - `{Element} el`: 要素
    - `{String} className`: 样式名,多个用空格隔开
- **_createSvg(width, height, path, [container])_**
  添加类名
  - 参数
    - `{Number} width`: 宽度
    - `{Number} height`: 高度
    - `{String} path`: 路径
    - `{Element} [container]`: 父容器
  - 返回值 `svg`
- **_parseDom(domStr, [withWrapper], [className])_**
  字符串转 Dom
  - 参数
    - `{String} domStr`: dom 字符串
    - `{Boolean} withWrapper`:返回是否含有父容器
    - `{String} className`: 类样式名称
  - 返回值 `Element | Nodes`
- **_enterFullscreen(el)_**
  进入全屏
  - 参数
    - `{Element} el`: 要素
- **_exitFullscreen()_**
  退出全屏
- **_createVideo(url, className, [container])_**
  创建视频节点
  - 参数
    - `{String} url`: 视频地址
    - `{String} className`: 样式名,多个用空格隔开
    - `{Element} [container]`: 父容器
  - 返回值 `Element | Nodes`