# MeasureUtil
查阅Cesium API

#### MeasureUtil()
util/MeasureUtil.js 1

图上量算 的 常用静态方法

### 方法

#### static mars3d.MeasureUtil.formatArea(val, options) → string
util/MeasureUtil.js 463

格式化显示面积值, 可指定单位

参数名称 | 类型 | 描述信息
--- | --- | ---
`val` | number | 面积值，平方米
`options` | object | 可选 参数：
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`unit` | string | `'auto'` | 可选 计量单位，可选值：auto(根据面积值自动选用m或km)、m(平方米)、km(平方公里)、mile(平方海里)、mu(亩)、ha(公顷)
`getLangText` | function |  | 可选 获取文本的对应方法
`decimal` | number | `2` | 可选 保留的小数位

##### 返回值:

带单位的格式化面积值字符串，如：20.21 平方公里

#### static mars3d.MeasureUtil.formatDistance(val, options) → string
util/MeasureUtil.js 409

格式化显示距离值, 可指定单位

参数名称 | 类型 | 描述信息
--- | --- | ---
`val` | number | 距离值，米
`options` | object | 可选 参数：
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`unit` | string | `'auto'` | 可选 计量单位, 可选值：auto(根据距离值自动选用k或km)、m(米)、km(公里)、wm(万米)、mile(海里)、zhang(丈)
`getLangText` | function |  | 可选 获取文本的对应方法
`decimal` | number | `2` | 可选 保留的小数位

##### 返回值:

带单位的格式化距离值字符串，如：20.17 米

#### static mars3d.MeasureUtil.formatVolume(val, options) → string
util/MeasureUtil.js 521

格式化显示体积值, 可指定单位

参数名称 | 类型 | 描述信息
--- | --- | ---
`val` | number | 体积值，立方米
`options` | object | 可选 参数：
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`unit` | string | `'auto'` | 可选 计量单位，当前无用，备用参数
`getLangText` | function |  | 可选 获取文本的对应方法
`decimal` | number | `2` | 可选 保留的小数位

##### 返回值:

带单位的格式化体积值字符串，如：20.21立方米

#### static mars3d.MeasureUtil.getAngle(startPosition, endPosition, isNorthZero) → number
util/MeasureUtil.js 312

计算2点的角度值，角度已正东为0度，顺时针为正方向 [采用经纬度坐标规则算法计算]

参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`startPosition` | Cesium.Cartesian3 |  | 需要计算的点
`endPosition` | Cesium.Cartesian3 |  | 目标点，以该点为参考中心。
`isNorthZero` | boolean | `false` | 可选 是否正北为0度角度（如方位角）

##### 返回值:

返回角度值，0至360度

#### static mars3d.MeasureUtil.getAngle2(startPosition, endPosition, isNorthZero) → number
util/MeasureUtil.js 362

计算2点的角度值，角度已正东为0度，顺时针为正方向 [采用笛卡尔坐标规则算法计算]

参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`startPosition` | Cesium.Cartesian3 |  | 需要计算的点
`endPosition` | Cesium.Cartesian3 |  | 目标点，以该点为参考中心。
`isNorthZero` | boolean | `false` | 可选 是否正北为0度角度（如方位角）

##### 返回值:

返回角度值，0至360度

#### static mars3d.MeasureUtil.getArea(positions) → number
util/MeasureUtil.js 188

计算坐标范围内 三维空间平面面积

参数名称 | 类型 | 描述信息
--- | --- | ---
`positions` | Array.<Cesium.Cartesian3> | Array.<LngLatPoint> | 坐标数组

##### 返回值:

面积，单位：平方米

#### static mars3d.MeasureUtil.getClampArea(positions, options) → Promise.<object>
util/MeasureUtil.js 250

计算坐标范围内 贴地形的插值三角网平面面积(单位：平方米)

参数名称 | 类型 | 描述信息
--- | --- | ---
`positions` | Array.<Cesium.Cartesian3> | Array.<LngLatPoint> | 坐标数组
`options` | object | 参数对象，具有以下属性:
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`scene` | Cesium.Scene |  | 三维地图场景对象，一般用map.scene或viewer.scene
`splitNum` | number | `10` | 可选 插值数，将面分割的网格数(概略值，有经纬网网格来插值)
`has3dtiles` | boolean | `auto` | 可选 是否在3dtiles模型上分析（模型分析较慢，按需开启）,默认内部根据点的位置自动判断（但可能不准）
`exact` | boolean | `true` | 可选 是否进行精确计算， 传false时是否快速概略计算方式，该方式计算精度较低，但计算速度快，仅能计算在当前视域内坐标的高度
`depth` | boolean |  | 可选 是否使用`PolyUtil#interPolygonByDepth`离屏渲染深度图的方式加速计算贴地高度

##### 返回值:

异步计算完成的Promise

#### static mars3d.MeasureUtil.getClampDistance(positions, options) → Promise.<object>
util/MeasureUtil.js 126

异步计算贴地(地表或模型表面)距离，单位：米

参数名称 | 类型 | 描述信息
--- | --- | ---
`positions` | Array.<Cesium.Cartesian3> | Array.<LngLatPoint> | 坐标数组
`options` | object | 参数对象，具有以下属性:
参数名称 | 类型 | 默认值 | 描述信息
--- | --- | --- | ---
`scene` | Cesium.Scene |  | 三维地图场景对象，一般用map.scene或viewer.scene
`splitNum` | number | `100` | 可选 插值数，将线段分割的个数(概略值，有经纬网网格来插值)
`has3dtiles` | boolean | `auto` | 可选 是否在3dtiles模型上分析（模型分析较慢，按需开启）,默认内部根据点的位置自动判断（但可能不准）
`hasTerrain` | boolean | `true` | 可选 是否不考虑地形，仅在模型上分析（比如完全地下的场景下，可以设置为false）
`exact` | boolean | `true` | 可选 是否进行精确计算， 传false时是否快速概略计算方式，该方式计算精度较低，但计算速度快，仅能计算在当前视域内坐标的高度
`depth` | boolean |  | 可选 是否使用`PolyUtil#interPolylineByDepth`离屏渲染深度图的方式加速计算贴地高度
`endItem` | getClampDistance_endItem |  | 异步计算贴地距离中，每计算完成2个点之间的距离后 的回调方法
`end` | getClampDistance_endItem |  | 异步计算完成的 回调方法

##### 返回值:

异步计算完成的Promise

#### static mars3d.MeasureUtil.getDistance(positions, closure) → number
util/MeasureUtil.js 21

求坐标数组的空间距离

参数名称 | 类型 | 描述信息
--- | --- | ---
`positions` | Array.<Cesium.Cartesian3> | Array.<LngLatPoint> | 坐标数组
`closure` | boolean | 可选 是否闭合，如求面的周长时，传入true

##### 返回值:

距离（单位：米）

#### static mars3d.MeasureUtil.getMinDistancePoint(point, positions) → number
util/MeasureUtil.js 76

求坐标列表中的最近点

参数名称 | 类型 | 描述信息
--- | --- | ---
`point` | Cesium.Cartesian3 | LngLatPoint | 目标坐标
`positions` | Array.<Cesium.Cartesian3> | Array.<LngLatPoint> | 坐标列表

##### 返回值:

距离（单位：米）

#### static mars3d.MeasureUtil.getSurfaceArea(positions) → number
util/MeasureUtil.js 282

计算坐标范围内 投影在椭球面平面的二维平面面积（基于turf.area计算）

参数名称 | 类型 | 描述信息
--- | --- | ---
`positions` | Array.<Cesium.Cartesian3> | Array.<LngLatPoint> | 坐标数组

##### 返回值:

距离（单位：米）

#### static mars3d.MeasureUtil.getSurfaceDistance(positions) → number
util/MeasureUtil.js 49

求坐标数组的 距离（地球表面弧度的）, 比如北京到纽约（不能穿过球心，是贴地表的线的距离）

参数名称 | 类型 | 描述信息
--- | --- | ---
`positions` | Array.<Cesium.Cartesian3> | Array.<LngLatPoint> | 坐标数组

##### 返回值:

距离（单位：米）

#### static mars3d.MeasureUtil.getTriangleArea(pos1, pos2, pos3) → number
util/MeasureUtil.js 224

计算三角形面积（空间平面）

参数名称 | 类型 | 描述信息
--- | --- | ---
`pos1` | Cesium.Cartesian3 | 三角形顶点坐标1
`pos2` | Cesium.Cartesian3 | 三角形顶点坐标2
`pos3` | Cesium.Cartesian3 | 三角形顶点坐标3

##### 返回值:

面积，单位：平方米

### 定义的类型

#### getClampDistance_callback(all_distance, arrDistance)
util/MeasureUtil.js 103

异步计算贴地距离完成 的回调方法

参数名称 | 类型 | 描述信息
--- | --- | ---
`all_distance` | number | 路线的全部距离，单位：米
`arrDistance` | Array | 每2个点间的 每一段的长度数组

#### getClampDistance_endItem(options)
util/MeasureUtil.js 92

异步计算贴地距离中，每计算完成2个点之间的距离后 的回调方法

参数名称 | 类型 | 描述信息
--- | --- | ---
`options` | object | 参数对象，具有以下属性:
参数名称 | 类型 | 描述信息
--- | --- | ---
`index` | number | 坐标数组的index顺序
`positions` | Array.<Cesium.Cartesian3> | 当前2个点之间的 贴地坐标数组
`distance` | number | 当前2个点之间的 贴地距离
`arrDistance` | Array.<number> | 已计算完成从第0点到index点的 每一段的长度数组
`all_distance` | number | 已计算完成从第0点到index点的 贴地距离