# Measure
查阅Cesium API

#### new mars3d.thing.Measure(options)
thing/analysis/Measure.js 54

图上量算

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 可选 参数对象，包括以下：
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`label` | LabelEntity.StyleOptions |  | 可选 测量结果文本的样式 //以下是内置GraphicLayer的参数
`isAutoEditing` | boolean | `false` | 可选 是否自动激活编辑,完成标绘时是否自动启动编辑,单击对象自动激活编辑
`isContinued` | boolean | `false` | 可选 是否连续标绘,连续标绘状态下无法编辑已有对象。
`isRestorePositions` | boolean | `false` | 可选 在标绘和编辑结束时，是否将坐标还原为普通值，true: 停止编辑时会有闪烁，但效率要好些。
`drawAddEventType` | string | EventType | `EventType.click` | 可选 绘制时增加点的事件，默认单击
`drawEndEventType` | string | EventType | `EventType.dblClick` | 可选 绘制时结束的事件，默认双击
`drawDelEventType` | string | EventType | `EventType.rightClick` | 可选 绘制时删除点的事件，默认右键
`id` | string | number | `createGuid()` | 可选 对象的id标识
`enabled` | boolean | `true` | 可选 对象的启用状态
`eventParent` | BaseClass | boolean |  | 可选 指定的事件冒泡对象，默认为所加入的map对象，false时不冒泡事件
`pid` | string | number |  | 可选 量算对应的图层父级的id，一般图层管理中使用
`name` | string |  | 可选 量算对应的图层名称

##### 参考:

- `支持的事件类型`

### 继承自

- BaseThing

### 属性值

#### enabled : boolean
core/BaseThing.js 99

设置对象的启用和禁用状态。

继承自:
  - BaseThing#enabled

#### enabledEvent : boolean
core/BaseClass.js 32

设置事件的启用和禁用状态

继承自:
  - BaseClass#enabledEvent

#### 只读 graphicLayer : GraphicLayer
thing/analysis/Measure.js 85

对应的矢量图层

#### 只读 graphics : Array.<BaseGraphic>
thing/analysis/Measure.js 95

图层内的Graphic集合对象

#### 只读 hasMeasure : boolean
thing/analysis/Measure.js 123

是否有进行量算

#### 只读 id : string|number
core/BaseThing.js 86

对象的id标识

继承自:
  - BaseThing#id

#### 只读 isAdded : boolean
core/BaseThing.js 67

是否已添加到地图

继承自:
  - BaseThing#isAdded

#### 只读 isDestroy : boolean
core/BaseThing.js 77

是否已经销毁了

继承自:
  - BaseThing#isDestroy

#### 只读 isDrawing : boolean
thing/analysis/Measure.js 104

是否正在绘制状态

#### 只读 isEditing : boolean
thing/analysis/Measure.js 113

是否正在编辑状态

#### 只读 options : object
core/BaseClass.js 18

当前类的构造参数

继承自:
  - BaseClass#options

#### 只读 state : State
core/BaseThing.js 56

当前对象的状态

继承自:
  - BaseThing#state

#### 只读 type : string|number
core/BaseThing.js 41

类型

继承自:
  - BaseThing#type

### 方法

#### addEventParent(obj) → BaseClass
core/BaseClass.js 303

添加抛出事件到父类，它将接收传播的事件

参数名称 | 类型 | 描述信息
--- | --- | ---
`obj` | object | 父类对象

##### 返回值:

当前对象本身,可以链式调用

继承自:
  - BaseClass#addEventParent

#### addTo(map) → BaseThing
core/BaseThing.js 118

添加到地图上，同 map.addThing

参数名称 | 类型 | 描述信息
--- | --- | ---
`map` | Map | 地图对象

##### 返回值:

当前对象本身，可以链式调用

继承自:
  - BaseThing#addTo

#### angle(options) → Promise.<(AngleMeasure|*)>
thing/analysis/Measure.js 402

角度测量

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 可选 控制参数
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`style` | PolylineEntity.StyleOptions |  | 可选 路线的样式，默认为箭头线
`label` | LabelEntity.StyleOptions | object |  | 可选 测量结果文本的样式
`angleDecimal` | number | `1` | 可选 显示的 角度值 文本中保留的小数位
`decimal` | number | `2` | 可选 显示的 距离值 文本中保留的小数位

##### 返回值:

绘制创建完成的Promise，返回 角度测量控制类 对象

#### area(options) → Promise.<(AreaMeasure|*)>
thing/analysis/Measure.js 294

面积测量（水平面）

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 可选 控制参数
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`style` | PolygonEntity.StyleOptions |  | 可选 面的样式
`label` | LabelEntity.StyleOptions | object |  | 可选 测量结果文本的样式
`unit` | string | `'auto'` | 可选 计量单位,`MeasureUtil#formatArea`，可选值：auto(根据面积值自动选用m或km)、m(平方米)、km(平方公里)、mile(平方海里)、mu(亩)、ha(公顷)
`decimal` | number | `2` | 可选 显示的文本中保留的小数位

##### 返回值:

绘制创建完成的Promise，返回 面积测量控制类 对象

#### areaSurface(options) → Promise.<(AreaSurfaceMeasure|*)>
thing/analysis/Measure.js 314

贴地面积测量

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 可选 控制参数
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`style` | PolygonEntity.StyleOptions |  | 可选 面的样式
`label` | LabelEntity.StyleOptions | object |  | 可选 测量结果文本的样式
`unit` | string | `'auto'` | 可选 计量单位,`MeasureUtil#formatArea`，可选值：auto(根据面积值自动选用m或km)、m(平方米)、km(平方公里)、mile(平方海里)、mu(亩)、ha(公顷)
`splitNum` | number | `10` | 可选 插值数，将面分割的网格数(概略值，有经纬网网格来插值)
`has3dtiles` | boolean | `auto` | 可选 是否在3dtiles模型上分析（模型分析较慢，按需开启）,默认内部根据点的位置自动判断（但可能不准）
`decimal` | number | `2` | 可选 显示的文本中保留的小数位
`exact` | boolean | `true` | 可选 是否进行精确计算， 传false时是否快速概略计算方式，该方式计算精度较低，但计算速度快，仅能计算在当前视域内坐标的高度

##### 返回值:

绘制创建完成的Promise，返回 面积测量控制类 对象

#### clear() → void
thing/analysis/Measure.js 454

清除测量

##### 返回值:

无

#### clearDrawing() → boolean
thing/analysis/Measure.js 437

清除正在绘制

##### 返回值:

是否清除了对象

#### destroy(noDel) → void
core/BaseClass.js 47

销毁当前对象

参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`noDel` | boolean | `false` | 可选 false:会自动delete释放所有属性，true：不delete绑定的变量

##### 返回值:

无

继承自:
  - BaseClass#destroy

#### distance(options) → Promise.<(DistanceMeasure|*)>
thing/analysis/Measure.js 221

测量 空间长度

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 可选 控制参数
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`style` | PolylineEntity.StyleOptions |  | 可选 路线的样式
`label` | LabelEntity.StyleOptions | object |  | 可选 测量结果文本的样式 // * @param {function} [options.label.updateText] 测量结果文本更新的回调方法
`unit` | string | `'auto'` | 可选 计量单位`MeasureUtil#formatDistance`, 可选值：auto(根据距离值自动选用k或km)、m(米)、km(公里)、wm(万米)、mile(海里)、zhang(丈)
`maxPointNum` | number | `9999` | 可选 绘制时，最多允许点的个数
`addHeight` | number |  | 可选 在绘制时，在绘制点的基础上增加的高度值
`showAddText` | boolean | `true` | 可选 是否显示每一段的增加部分距离，如（+10.1km）
`decimal` | number | `2` | 可选 显示的文本中保留的小数位

##### 返回值:

绘制创建完成的Promise，返回 长度测量控制类 对象

#### distanceSurface(options) → Promise.<(DistanceSurfaceMeasure|*)>
thing/analysis/Measure.js 246

测量 贴地长度

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 可选 控制参数
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`style` | PolylineEntity.StyleOptions |  | 可选 路线的样式
`label` | LabelEntity.StyleOptions | object |  | 可选 测量结果文本的样式, // * @param {function} [options.label.updateText] 测量结果文本更新的回调方法
`unit` | string | `'auto'` | 可选 计量单位`MeasureUtil#formatDistance`, 可选值：auto(根据距离值自动选用k或km)、m(米)、km(公里)、wm(万米)、mile(海里)、zhang(丈)
`maxPointNum` | number | `9999` | 可选 绘制时，最多允许点的个数
`addHeight` | number |  | 可选 在绘制时，在绘制点的基础上增加的高度值
`showAddText` | boolean | `true` | 可选 是否显示每一段的增加部分距离，如（+10.1km）
`splitNum` | number | `200` | 可选 插值数，将线段分割的个数(概略值，有经纬网网格来插值)
`minDistance` | number |  | 可选 插值最小间隔(单位：米)，提示：优先级高于splitNum，用于计算splitNum（非严格按这个值分割）
`has3dtiles` | boolean | `auto` | 可选 是否在3dtiles模型上分析（模型分析较慢，按需开启）,默认内部根据点的位置自动判断（但可能不准）
`hasTerrain` | boolean | `true` | 可选 是否不考虑地形，仅在模型上分析（比如完全地下的场景下，可以设置为false）
`exact` | boolean | `true` | 可选 是否进行精确计算， 传false时是否快速概略计算方式，该方式计算精度较低，但计算速度快，仅能计算在当前视域内坐标的高度
`decimal` | number | `2` | 可选 显示的文本中保留的小数位

##### 返回值:

绘制创建完成的Promise，返回 贴地长度测量控制类 对象

#### endDraw() → boolean
thing/analysis/Measure.js 446

完成绘制和编辑，如有未完成的绘制会自动完成。 在移动端需要调用此方法来类似PC端双击结束。

##### 返回值:

是否正常结束了矢量对象绘制

#### fire(type, data, propagate) → BaseClass
core/BaseClass.js 199

触发指定类型的事件。

参数名称 | 类型 | 描述信息
--- | --- | ---
`type` | EventType | string | 事件类型
`data` | object | 可选 传输的数据或对象，可在事件回调方法中event对象中获取进行使用
`propagate` | BaseClass | 可选 将事件传播给父类 (用addEventParent设置)

##### 返回值:

当前对象本身,可以链式调用

继承自:
  - BaseClass#fire

#### hasEventParent(obj) → boolean
core/BaseClass.js 330

是否绑定了抛出事件到指定父类

参数名称 | 类型 | 描述信息
--- | --- | ---
`obj` | object | 父类对象

##### 返回值:

是否绑定了抛出事件

继承自:
  - BaseClass#hasEventParent

#### height(options) → Promise.<(HeightMeasure|*)>
thing/analysis/Measure.js 368

高度测量

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 可选 控制参数
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`style` | PolylineEntity.StyleOptions |  | 可选 路线的样式
`label` | LabelEntity.StyleOptions | object |  | 可选 测量结果文本的样式
`unit` | string | `'auto'` | 可选 计量单位`MeasureUtil#formatDistance`, 可选值：auto(根据距离值自动选用k或km)、m(米)、km(公里)、wm(万米)、mile(海里)、zhang(丈)
`decimal` | number | `2` | 可选 显示的文本中保留的小数位
`hasAbs` | boolean |  | 可选 显示的 高度值 是否取绝对值，默认时:高度下降为负数、上升是正数。

##### 返回值:

绘制创建完成的Promise，返回 高度测量 对象

#### heightTriangle(options) → Promise.<(HeightTriangleMeasure|*)>
thing/analysis/Measure.js 386

三角高度测量， 包括水平距离、空间距离、高度差。

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 可选 控制参数
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`style` | PolylineEntity.StyleOptions |  | 可选 路线的样式
`label` | LabelEntity.StyleOptions | object |  | 可选 测量结果文本的样式
`unit` | string | `'auto'` | 可选 计量单位`MeasureUtil#formatDistance`, 可选值：auto(根据距离值自动选用k或km)、m(米)、km(公里)、wm(万米)、mile(海里)、zhang(丈)
`decimal` | number | `2` | 可选 显示的文本中保留的小数位

##### 返回值:

绘制创建完成的Promise，返回 三角高度测量控制类 对象

#### listens(type, propagate) → boolean
core/BaseClass.js 253

是否有绑定指定的事件

参数名称 | 类型 | 描述信息
--- | --- | ---
`type` | EventType | string | 事件类型
`propagate` | BaseClass | 可选 是否判断指定的父类 (用addEventParent设置的)

##### 返回值:

是否存在

继承自:
  - BaseClass#listens

#### off(types, fn, context) → BaseClass
core/BaseClass.js 96

解除绑定指定类型事件监听器

参数名称 | 类型 | 描述信息
--- | --- | ---
`types` | string | EventType | Array.<string> | Array.<EventType> | 可选 事件类型，tip:多个事件也可以数组或空格间隔的字符串 , 传入空值时解绑所有事件
`fn` | function | 可选 绑定的监听器回调方法,未传值时解绑所有指定类型对应事件，特殊说明：map.on监听的Cesium相关原生事件时必须传入该参数
`context` | object | 可选 侦听器的上下文(this关键字将指向的对象)。

##### 返回值:

当前对象本身,可以链式调用

继承自:
  - BaseClass#off

#### on(types, fn, context) → BaseClass
core/BaseClass.js 66

绑定指定类型事件监听器, 支持在监听中调用 event.stopPropagation(); 阻止事件冒泡

参数名称 | 类型 | 描述信息
--- | --- | ---
`types` | string | EventType | Array.<string> | Array.<EventType> | 事件类型，tip:多个事件也可以数组或空格间隔的字符串
`fn` | function | 绑定的监听器回调方法
`context` | object | 可选 侦听器的上下文(this关键字将指向的对象)。

##### 返回值:

当前对象本身,可以链式调用

继承自:
  - BaseClass#on

#### once(types, fn, context) → BaseClass
core/BaseClass.js 280

绑定一次性执行的指定类型事件监听器 与on类似，监听器只会被触发一次，然后被删除。

参数名称 | 类型 | 描述信息
--- | --- | ---
`types` | EventType | string | Array.<EventType> | 事件类型
`fn` | function | 绑定的监听器回调方法
`context` | object | 可选 侦听器的上下文(this关键字将指向的对象)。

##### 返回值:

当前对象本身,可以链式调用

继承自:
  - BaseClass#once

#### point(options) → Promise.<(PointMeasure|*)>
thing/analysis/Measure.js 418

坐标测量 popup

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 可选 控制参数
参数名称 | 类型 | 描述信息
--- | --- | ---
`style` | PointEntity.StyleOptions | 可选 点的样式
`popup` | function | 可选 绑定的popup弹窗值的自定义回调方法
`popupOptions` | Popup.StyleOptions | 可选 popup弹窗时的配置参数，也支持如pointerEvents等`Popup`构造参数

##### 返回值:

绘制创建完成的Promise，返回 坐标测量控制类 对象

#### remove(destroy) → void
core/BaseThing.js 131

从地图上移除，同map.removeThing

参数名称 | 类型 | 描述信息
--- | --- | ---
`destroy` | boolean | 可选 是否调用destroy释放

##### 返回值:

无

继承自:
  - BaseThing#remove

#### removeEventParent(obj) → BaseClass
core/BaseClass.js 316

移除抛出事件到父类

参数名称 | 类型 | 描述信息
--- | --- | ---
`obj` | object | 父类对象

##### 返回值:

当前对象本身,可以链式调用

继承自:
  - BaseClass#removeEventParent

#### section(options) → Promise.<(SectionMeasure|*)>
thing/analysis/Measure.js 273

剖面分析，测量线插值点的高程数据

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 可选 控制参数
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`style` | PolylineEntity.StyleOptions |  | 可选 路线的样式
`label` | LabelEntity.StyleOptions | object |  | 可选 测量结果文本的样式 // * @param {function} [options.label.updateText] 测量结果文本更新的回调方法
`decimal` | number | `2` | 可选 显示的文本中保留的小数位
`unit` | string | `'auto'` | 可选 计量单位`MeasureUtil#formatDistance`, 可选值：auto(根据距离值自动选用k或km)、m(米)、km(公里)、wm(万米)、mile(海里)、zhang(丈)
`maxPointNum` | number | `9999` | 可选 绘制时，最多允许点的个数
`addHeight` | number |  | 可选 在绘制时，在绘制点的基础上增加的高度值
`splitNum` | number | `200` | 可选 插值数，等比分割的个数(概略值，有经纬网网格来插值)
`minDistance` | number |  | 可选 插值最小间隔(单位：米)，提示：优先级高于splitNum，用于计算splitNum（非严格按这个值分割）
`has3dtiles` | boolean | `auto` | 可选 是否在3dtiles模型上分析（模型分析较慢，按需开启）,默认内部根据点的位置自动判断（但可能不准）
`hasTerrain` | boolean | `true` | 可选 是否不考虑地形，仅在模型上分析（比如完全地下的场景下，可以设置为false）
`objectsToExclude` | Array.<object> |  | 可选 贴模型分析时，排除的不进行贴模型计算的模型对象，可以是： primitives, entities, 或 3D Tiles features
`exact` | boolean | `false` | 可选 是否进行精确计算， 传false时是否快速概略计算方式，该方式计算精度较低，但计算速度快，仅能计算在当前视域内坐标的高度

##### 返回值:

绘制创建完成的Promise，返回 剖面分析控制类矢量对象

#### setOptions(options, funOptions) → BaseThing|BaseControl|object
core/BaseThing.js 246

更新图层参数

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 与类的构造方法参数相同
`funOptions` | object | 可选 方法参数
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`merge` | boolean | `true` | 可选 是否合并参数, 如是完整覆盖不合并老的options，请传入fasle

##### 返回值:

当前对象本身，可以链式调用

继承自:
  - BaseThing#setOptions

#### stopDraw() → boolean
thing/analysis/Measure.js 429

停止绘制，如有未完成的绘制会自动删除

##### 返回值:

是否清除了未完成的对象

#### toJSON() → object
core/BaseThing.js 268

将对象转为Json简单对象，用于存储后再传参加载

##### 返回值:

Json简单对象

继承自:
  - BaseThing#toJSON

#### updateUnit(unit) → void
thing/analysis/Measure.js 464

更新量测结果的单位

参数名称 | 类型 | 描述信息
--- | --- | ---
`unit` | string | 计量单位,参考`MeasureUtil#formatDistance`距离和`MeasureUtil#formatArea`面积的本身可选值说明

##### 返回值:

无

#### volume(options) → Promise.<(VolumeMeasure|*)>
thing/analysis/Measure.js 351

体积测量（方量分析）

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 可选 控制参数
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`style` | PolygonEntity.StyleOptions |  | 可选 基准面的样式
`polygonWall` | PolygonEntity.StyleOptions |  | 可选 围墙面的样式
`label` | LabelEntity.StyleOptions |  | 可选 测量结果文本的样式
`showFillVolume` | boolean | `true` | 可选 是否显示填方体积结果文本
`fillVolumeName` | string | `'填方体积'` | 可选 填方体积结果的名称
`showDigVolume` | boolean | `true` | 可选 是否显示挖方体积结果文本
`digVolumeName` | string | `'挖方体积'` | 可选 挖方体积结果的名称
`showArea` | boolean | `true` | 可选 是否显示横切面积结果文本
`areaName` | string | `'横切面积'` | 可选 横切面积结果的名称
`heightLabel` | boolean | `true` | 可选 是否显示各边界点高度值文本
`offsetLabel` | boolean | `false` | 可选 是否显示各边界点高度差文本
`labelHeight` | LabelEntity.StyleOptions |  | 可选 各边界点高度结果文本的样式
`decimal` | number | `2` | 可选 显示的 数值 文本中保留的小数位
`has3dtiles` | boolean |  | 可选 是否在3dtiles模型上分析（模型分析较慢，按需开启）,默认内部根据点的位置自动判断（但可能不准）
`exact` | boolean | `true` | 可选 是否进行精确计算， 传false时是否快速概略计算方式，该方式计算精度较低，但计算速度快，仅能计算在当前视域内坐标的高度
`unit` | string | `'auto'` | 可选 计量单位,`MeasureUtil#formatArea`可选值：auto、m、km、mu、ha 。auto时根据面积值自动选用k或km
`splitNum` | number | `10` | 可选 插值数，将面分割的网格数(概略值，有经纬网网格来插值)
`minHeight` | number |  | 可选 可以指定最低高度（单位：米）
`maxHeight` | number |  | 可选 可以指定最高高度（单位：米）
`height` | number |  | 可选 可以指定基准面高度（单位：米），默认是绘制后的最低高度值
`depth` | boolean | `false` | 可选 是否采用 `VolumeDepthMeasure`进行分析

##### 返回值:

绘制创建完成的Promise，返回 体积测量控制类 对象

### 定义的类型

#### mars3d.thing.Measure.EventType
thing/analysis/Measure.js 7

##### 属性:

属性名称 | 类型 | 描述信息
--- | --- | ---
`change` | string | 测量值变化了
`start` | string | 异步测量中，开始测量
`end` | string | 异步测量中，完成了测量后
`addGraphic` | string | 添加了矢量对象
`removeGraphic` | string | 移除了矢量对象
`show` | string | 显示了对象
`hide` | string | 隐藏了对象
`click` | string | 左键单击 鼠标事件
`rightClick` | string | 右键单击 鼠标事件
`mouseOver` | string | 鼠标移入 鼠标事件
`mouseOut` | string | 鼠标移出 鼠标事件
`popupOpen` | string | popup弹窗打开后
`popupClose` | string | popup弹窗关闭
`tooltipOpen` | string | tooltip弹窗打开后
`tooltipClose` | string | tooltip弹窗关闭
`contextMenuOpen` | string | 右键菜单 打开后
`contextMenuClose` | string | 右键菜单 关闭
`contextMenuClick` | string | 右键菜单 单击某一项后
`drawStart` | string | 开始绘制 标绘事件
`drawMouseMove` | string | 正在移动鼠标中，绘制过程中鼠标移动了点 标绘事件
`drawAddPoint` | string | 绘制过程中增加了点 标绘事件
`drawRemovePoint` | string | 绘制过程中删除了最后一个点 标绘事件
`drawCreated` | string | 创建完成 标绘事件
`editStart` | string | 开始编辑 标绘事件
`editMouseDown` | string | 移动鼠标按下左键（LEFT_DOWN）标绘事件
`editMouseMove` | string | 正在移动鼠标中，正在编辑拖拽修改点中（MOUSE_MOVE） 标绘事件
`editMovePoint` | string | 编辑修改了点（LEFT_UP）标绘事件
`editRemovePoint` | string | 编辑删除了点 标绘事件
`editStyle` | string | 图上编辑修改了相关style属性 标绘事件
`editStop` | string | 停止编辑 标绘事件

##### 使用示例:

    //绑定监听事件
    thing.on(mars3d.EventType.change, function (event) {
      console.log('发送了变化', event)
    })

##### 参考:

- BaseClass#on
- BaseClass#off