数学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 |
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
|
多边形数组(数据格式见: |
面积数据
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坐标数组(数据格式见: |
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数组(数据格式见: |
面积数据
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]])