Module

Math3d

数学3d计算模块

Parameters:
Name Type Description
params object
viewer object

cesium 实例

cesiumGlobal object

cesium 全局对象

Methods

# computeCartographicPointsTerrainData(Cartographics, callback)

传入Cartographic类型数组 弧度制经纬度,计算位于地形中高度

Parameters:
Name Type Description
Cartographics Array.<CartographicType>

地理坐标数组

callback function
Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const coors = [new Cesium.Cartographic(110.16018735617934, 31.036076859828338,5000), new Cesium.Cartographic(110.17845812703679,31.033686527335444,5000)];
math3d.computeCartographicPointsTerrainData(coors,res=>{console.log(res)});

# computeEllipseEdgePositions(options) → {Array}

计算范围当前椭圆位置的数组

Parameters:
Name Type Description
options object
semiMinorAxis number

短半轴

semiMajorAxis number

长半轴

rotation number

旋转角度 弧度

center Cartesian3

中心点 笛卡尔坐标

granularity number

粒度(圆内切数量)

Returns an array of positions that make up the ellipse.

Array
Example
import {Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);

const ellipse = math3d.computeEllipseEdgePositions({
  semiMinorAxis:50,
  semiMajorAxis:50,
  rotation :0,
  center:Cesium.Cartesian3.fromDegrees(110.16018735617934, 31.036076859828338)
  granularity : Math.PI / 45.0});

# computeInterpolate2IndexLineHeightCartographic(start, end, num, curIndex) → {Array.<CartographicType>}

线段插值/经纬度高程插值

Parameters:
Name Type Description
start CartographicType

开始坐标点

end CartographicType

结束坐标点

num number

分总段数 传入数组长度

curIndex Array

第index个插值点数组

Array.<CartographicType>
Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const strCartCoor = new Cesium.Cartographic(110.16018735617934, 31.036076859828338,5000)
const endCartCoor = new Cesium.Cartographic(110.17845812703679,31.033686527335444,5000)
let curPoint = math3d.computeInterpolate2IndexLineHeightCartographic(strCartCoor, endCartCoor,20,[0,3,7,9]);

# computeInterpolateIndexLineHeightCartographic(start, end, num, index) → {CartographicType}

经纬度高程插值,指定插值位置index

Parameters:
Name Type Description
start CartographicType

开始坐标点

end CartographicType

结束坐标点

num number

分总段数 传入数组长度

index number

获取第index个插值点 0点是开始点

Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const strCartCoor = new Cesium.Cartographic(110.16018735617934, 31.036076859828338,5000)
const endCartCoor = new Cesium.Cartographic(110.17845812703679,31.033686527335444,5000)
let curPoint = math3d.computeInterpolateIndexLineHeightCartographic(strCartCoor, endCartCoor,1,0 );

# computeLonlatPointsTerrainData(lonlats, callback)

获取3DTiles高度 传入lonlat数组 角度制的lon lat

Parameters:
Name Type Description
lonlats lonlatType

坐标数组

callback function

回调

Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const coors = [{lon:110.16018735617934, lat:31.036076859828338}, {lon:110.17845812703679,lat:31.033686527335444}];
math3d.computeLonlatPointsTerrainData(coors,res=>{console.log(res)});

# computeSectorEdgePositions(options) → {Array}

计算某角度下椭圆位置坐标

Parameters:
Name Type Description
options object
semiMinorAxis number

短半轴

semiMajorAxis number

长半轴

rotation number

旋转角度 弧度

center number

中心点 笛卡尔坐标

granularity number

粒度 弧度

angle number

角度 弧度

Returns an array of positions that make up the ellipse.

Array
Example
import {Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);

const ellipse = math3d.computeEllipseEdgePositions({
  semiMinorAxis:50,
  semiMajorAxis:50,
  rotation :0,
  center:Cesium.Cartesian3.fromDegrees(110.16018735617934, 31.036076859828338)
  granularity : Math.PI / 45.0,
   angle: Math.PI / 45.0
});

# getIntersectObj(startPos, endPos, excludeArr, bDrillPick) → {object}

获取相交对象

Parameters:
Name Type Description
startPos Cartesian3

起始点坐标

endPos Cartesian3

终点坐标

excludeArr Array

排除对象数组, see createPointsGraphics

bDrillPick boolean

只pick首个物体

object
Example
import {initCesium, Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const {viewer,graphics,base} = new initCesium({
    cesiumGlobal: Cesium,
    containerId: 'cesiumContainer'
})
 const  position1 = base.transformWGS84ToCartesian({lng:110.16018735617934, lat:31.036076859828338, alt:0 });
 const position2 = base.transformWGS84ToCartesian({lng:110.17845812703679, lat:31.033686527335444, alt:0 });
  const  points =  graphics.createPointsGraphics({
        point: true,
       positions: [position1, position2],
  });

  var results = math3d.getIntersectObj(position1, position2, points, true); //碰撞检测

# getLinkedPointList(startPoint, endPoint, angularityFactor, numOfSingleLine) → {Array}

计算两点的点集

Parameters:
Name Type Description
startPoint Cartesian3

开始节点

endPoint Cartesian3

结束节点

angularityFactor number

曲率

numOfSingleLine number

点集数量

Array
Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
var startPoint = Cesium.Cartesian3.fromDegrees(104.081701757991, 30.627042558105988)
 var endPoint = Cesium.Cartesian3.fromDegrees((Math.random() / 100) + 104.081701757991, (Math.random() / 100) + 30.627042558105988);

var positions = math3d.getLinkedPointList(startPoint, endPoint, 100000, 50);

# getPointDistance(point1, point2) → {number}

获取两点距离

Parameters:
Name Type Description
point1 Cartesian3

坐标1

point2 Cartesian3

坐标2

距离

number
Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const dis =  math3d.getPointDistance(Cesium.Cartesian3.fromDegrees(110.16018735617934, 31.036076859828338),Cesium.Cartesian3.fromDegrees(110.20775152895165,31.02475678594998))

# getPointOnEllipsoid(theta, rotation, northVec, eastVec, aSqr, ab, bSqr, mag, unitPos, result)

椭圆计算

Parameters:
Name Type Description
theta number

角度θ

rotation number

旋转角度

northVec Matrix3

东北角

eastVec Matrix3

西南角

aSqr number

短半轴平方根

ab number

长半轴与短半轴乘积

bSqr number

长半轴平方根

mag number

中心坐标最大长度

unitPos Cartesian3

中心坐标归一化

result Cartesian3

椭圆坐标

# getPolygonArea(points) → {number}

计算多边形的面积

Parameters:
Name Type Description
points Array

多边形数组(数据格式见: WGS84Type

See:

面积数据

number
Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const orgArr = [
      { lon: 110.16018735617934, lat: 31.036076859828338, alt: 0 },
      { lon: 110.17845812703679, lat: 31.033686527335444, alt: 0 },
      { lon: 110.19261040403379, lat: 31.02892781958261, alt: 0 },
      { lon: 110.20775152895165, lat: 31.02475678594998, alt: 0 },
    ];
const areaNum =  math3d.getPolygonArea(orgArr)

# getPositionDistance(positions)

获取84坐标的距离

Parameters:
Name Type Description
positions Array

84坐标数组(数据格式见: WGS84Type

Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const res = math3d.getPositionDistance([{lng: 104.09816110606057, lat:30.659821965447698, lat:0 },{lng:104.1120972824757, lat:30.65330300319938, lat:0 },{lng:104.09816110606057,lat: 30.659821965447698, lat:0 }])

# getPositionsAngle(option) → {number}

计算两点的角度

Parameters:
Name Type Description
option object
options.position1 Cartesian3

第一个点坐标

options.position2 Cartesian3

第二个点坐标

角度

number
Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const angle =  math3d.getPositionsAngle(Cesium.Cartesian3.fromDegrees(110.16018735617934, 31.036076859828338),Cesium.Cartesian3.fromDegrees(110.20775152895165,31.02475678594998))

# getPositionsArea(positions) → {number}

计算一组坐标组成的面的面积

Parameters:
Name Type Description
positions Array

需要计算的84数组(数据格式见: WGS84Type

See:

面积数据

number
Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const orgArr = [
      { lng: 110.16018735617934, lat: 31.036076859828338, alt: 0 },
      { lng: 110.17845812703679, lat: 31.033686527335444, alt: 0 },
      { lng: 110.19261040403379, lat: 31.02892781958261, alt: 0 },
      { lng: 110.20775152895165, lat: 31.02475678594998, alt: 0 },
    ];
const areaNum =  math3d.getPositionsArea(orgArr)

# raisePositionsToHeight(positions, options, extrude) → {Float64Array}

计算坐标数组插值高度

Parameters:
Name Type Description
positions Array

插值数组[x,y,z,x,y,z,...]

options object
ellipsoid Ellipsoid

椭球对象

height object

缩放比例

extrudedHeight object

拉伸高度

extrude boolean

是否拉伸

Returns the positions raised to the given heights

Float64Array
Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const res = math3d.raisePositionsToHeight([
110.16018735617934,31.036076859828338, 0,
110.17845812703679,31.033686527335444, 0,
110.19261040403379,31.02892781958261, 0],
 { ellipsoid: Cesium.Ellipsoid.WGS84, height: 6, extrudedHeight: 5 }, true);

# splitCartesians3(cartesianArr) → {Array.<Cartesian3>}

拆分组合坐标数组

Parameters:
Name Type Description
cartesianArr Array

返回Cartesian3 类型的数组

Array.<Cartesian3>
Example
import { Math3d } from 'cesium_dev_kit'
const math3d = new Math3d(viewer,Cesium);
const res = math3d.splitCartesians3(
[[104.09816110606057, 30.659821965447698],
 [104.1120972824757,30.65330300319938],
[104.10758419863926, 30.64592470850288],
[104.09351691196979, 30.652434826507452]])