MathEngine

数学

new YS.MathEngine()

数学类库,提供坐标转换等

Methods

staticYS.MathEngine.arrayCartesian3ToXYZ(array)Array.<XYZ>

Cartesian3数组转经纬度坐标数组
Name Type Description
array Array.<Cartesian3> Cartesian3数组
Returns:
array 经纬度坐标数组,单位度

staticYS.MathEngine.arrayCartesianToDegree(array)Array.<XYZ>

世界坐标数组转经纬度数组
Name Type Description
array Array.<Cesium.Cartesian3> WGS84世界坐标数组
Returns:
经纬度高程 Object = {x:114,y:30,z:0}

staticYS.MathEngine.arrayCartographicToXYZ(array)Array.<XYZ>

Cartographic数组转经纬度坐标数组
Name Type Description
array Array.<Cartographic> Cartographic数组
Returns:
array 经纬度坐标数组,单位度

staticYS.MathEngine.arrayColorToArray(array)Array.<Cesium.Color>

Color数组转成一维的Cesium.Color数组,即pack
Name Type Description
array Array.<Color> | Array.<RGBA> Color类型数组
Returns:
Color类型一维数组,用于shader

staticYS.MathEngine.arrayColorToArrayFloat(array)Array.<float>

Color数组转成一维的float数组,即pack
Name Type Description
array Array.<Color> | Array.<RGBA> Color类型数组
Returns:
float类型一维数组,r,g,b,a,r,g,b,a...的形式

staticYS.MathEngine.arrayDegreeToCartesian(array)Array.<Cesium.Cartesian3>

经纬度数组转世界坐标数组
Name Type Description
array Array.<XYZ> 经纬度高程
Returns:
WGS84世界坐标数组

staticYS.MathEngine.arrayRemove(array, deleteItem)Array

删除数组中的第一个匹配元素
只删除一次
Name Type Description
array Array 要删除的数组
deleteItem * 要删除的数组元素
Returns:
返回删除后的数组,等于输入的array本身

staticYS.MathEngine.arrayXYToArrayFloat(array)Array.<float>

XY数组转成一维的float数组,即pack
Name Type Description
array Array.<XY> XY类型数组
Returns:
float类型一维数组,x,y,x,y...的形式

staticYS.MathEngine.arrayXYZToArrayFloat(array)Array.<float>

XYZ数组转成一维的float数组,即pack
Name Type Description
array Array.<XYZ> XYZ类型数组
Returns:
float类型一维数组,x,y,z,x,y,z...的形式

staticYS.MathEngine.arrayXYZToCartesian(array)Array.<Cesium.Cartesian3>

经纬度数组转世界坐标数组
Name Type Description
array Array.<XYZ> 经纬度高程
Returns:
WGS84世界坐标数组

staticYS.MathEngine.arrayXYZToCartographic(array)Array.<Cartographic>

经纬度坐标数组转Cartographic数组
Name Type Description
array Array.<XYZ> 经纬度坐标数组,单位度
Returns:
Cartographic数组

staticYS.MathEngine.azimuth(pA, pB)Number

计算由球面点A 到 B的方位角
Name Type Description
pA XYZ | XY 点A,单位度
pB XYZ | XY 点B,单位度
Returns:
返回两点间方位角,单位弧度

staticYS.MathEngine.calculate2PDistance(point1, point2)Number

通过世界坐标计算两点间距离
Name Type Description
point1 Cartesian3 第一点坐标(笛卡尔)
point2 Cartesian3 第二点坐标(笛卡尔)
Returns:
两点间距离

staticYS.MathEngine.calculateArea(positions)Number

通过经纬度(弧度)坐标计算投影面积
Name Type Description
positions Array.<Cesium.Cartographic> 经纬度(弧度)
Returns:
任意多边形投影面积

staticYS.MathEngine.calculateCenter(positions)Cartesian2

通过经纬度(弧度)坐标计算多边形中心点坐标
Name Type Description
positions Array.<Cesium.Cartographic> 经纬度(弧度)
Returns:
中心点坐标

staticYS.MathEngine.calculateCenterXYZ(positions)XYZ

通过经纬度(度)坐标计算多边形中心点坐标
Name Type Description
positions Array.<XYZ> 经纬度(度)
Returns:
经纬度坐标(度)

staticYS.MathEngine.cartesian3ToXYZ(cartesian3)XYZ

世界坐标转xyz格式
Name Type Description
cartesian3 Cartesian3 世界坐标
Returns:
xyz格式的经纬度

staticYS.MathEngine.cartesianToDegree(cartesian3)Object

世界坐标转经纬度
Name Type Description
cartesian3 Cartesian3 世界坐标(笛卡尔)
Returns:
经纬度坐标(角度)

staticYS.MathEngine.clamp(value, v1, v2)Number

将数字限制到值域内
Name Type Description
value Number
v1 Number 值域范围
v2 Number 值域范围
Returns:
如果value小于v1、v2中的最小值, 将返回最小值, 大于最大值将返回最大值,在值域内直接返回

staticYS.MathEngine.contour(pnts, options)Object

根据规则格网的数据点生成等值线
Name Type Description
pnts Array.<XYZ> 要生成等值线的规则格网点,长度不能等于0
options Object 参数
Name Type Default Description
numbers Array.<Number> 要生成等值线的值域数组
smooth Boolean true optional 要不要用贝塞尔曲线平滑
Returns:
GeoJson对象,包含多条等值线

staticYS.MathEngine.degreeToCartesian(cartographic)Cartesian3

经纬度转世界坐标
Name Type Description
cartographic Cartographic 经纬度(弧度)
Returns:
世界坐标

staticYS.MathEngine.degreeToDMS(cartographic)String

经纬度(度)转经纬度度分秒字符串
Name Type Description
cartographic Cartographic 经纬度(度)
Returns:
经纬度坐标

staticYS.MathEngine.degreeToRadian(d)Number

将度转成弧度
Name Type Description
d Number 度数
Returns:
弧度数

staticYS.MathEngine.degreeToXYZ(cartographic)XYZ

经纬度转xyz格式
Name Type Description
cartographic Cartographic 经纬度(弧度或度)
Returns:
xyz格式的经纬度

staticYS.MathEngine.distance(p1, p2)Number

计算世界坐标两点间直线距离
Name Type Description
p1 XYZ 包含xyz的坐标点
p2 XYZ 包含xyz的坐标点
Returns:
输入单位是米则返回米

staticYS.MathEngine.generateCartographicArc(positions, granularity, isSameLon)Array.<Cesium.Cartographic>

通过相同经纬度弧度点数组和弧度步长生成球面的内插加密点
Name Type Description
positions Array.<Cesium.Cartographic> 起始点经纬度(弧度)
granularity Number 步长(弧度)
isSameLon Boolean 经度是否相同
Returns:
坐标集(弧度)

staticYS.MathEngine.getBufferArea(positions, radius, units)Array.<XY>

计算缓冲区域
Name Type Default Description
positions Array.<XY> 点或线的经纬度坐标点集(如果是点的话,只传一个点;如果是线的话,传多个点)
radius radius 缓冲区半径
units units 'meters' optional 单位('meters'米,'kilometers'千米,'miles'英里)
Returns:
缓冲区经纬度坐标点集

staticYS.MathEngine.getFittingPlane(viewer, positions)Object

计算多个点的拟合平面(不支持过坐标原点的平面)
Name Type Description
viewer Viewer YouScene.earth.viewer
positions Array.<XYZ> 世界坐标点数组
Returns:
返回结果 {A:1, B:1, C:1, D:1} 平面为Ax + By + Cz + D = 0

staticYS.MathEngine.getMatrix(targetPosition, heading, pitch, roll, scaleX, scaleY, scaleZ)Matrix4

通过世界坐标,X,Y,Z各方向旋转角度获取矩阵
Name Type Default Description
targetPosition Cartesian3 世界坐标
heading Number 0 optional 绕Z轴旋转角度
pitch Number 0 optional 绕Y轴旋转角度
roll Number 0 optional 绕X轴旋转角度
scaleX Number 1 optional X轴放大系数
scaleY Number 1 optional Y轴放大系数
scaleZ Number 1 optional Z轴放大系数
Returns:
Matrix4

staticYS.MathEngine.getMinMax(xyzArray, field)Object

统计一系列数据中的最大值和最小值、平均值
Name Type Description
xyzArray Array.<Object> 要统计的对象数组
field String 要统计数值的对象属性名
Returns:
返回统计结果{min:0,max:2,average:1},空数组返回{}
Example:
console.log(YS.MathEngine.getMinMax([{x:1,y:2,z:3}, {x:3,y:2,z:1}], 'z') );
 //输出:{ min: 1, max: 3, average: 2 }

staticYS.MathEngine.getMinMaxVal(array)Object

统计一系列数据中的最大值和最小值、平均值
Name Type Description
array Array.<Number> 要统计的数值数组
Returns:
返回统计结果{min:0,max:2,average:1},空数组返回{}
Example:
console.log( YS.MathEngine.getMinMaxVal([3, 1, 2], 'z') );
 //输出:{ min: 1, max: 3, average: 2 }

staticYS.MathEngine.inPolygon(points, p)Boolean

二维计算点是否在任意多边形内部
Name Type Description
points Array.<Number> 要统计的多边形数值数组
p Object 要计算的点坐标{x:0,y:0}
Returns:
返回结果
Example:
console.log( YS.MathEngine.inPolygon([3, 1, 2, 2, 3, 5], {x:2.5, y:2}) );
 //输出:true

staticYS.MathEngine.isPolygoninPolygon(polygon1, polygon2)Bool

Name Type Description
polygon1 Array.<XY> 多边形点集合
polygon2 Array.<XY> 多边形点集合
Returns:
polygon1多边形是否完全包含在polygon2中

staticYS.MathEngine.leftRightToCenterWithVerticalAngleBetween(left, right, center)Number

根据左右两点和模型中心点,获取模型倾斜角度
Name Type Description
left XYZ 左边点坐标
right XYZ 右边点坐标
center XYZ 模型中心点坐标
Returns:
倾斜角度

staticYS.MathEngine.lerp(point1, point2, ys)Array

计算两点间离散点的坐标集合, 请在俯视视角计算(计算结果不包括传入的两点坐标)
Name Type Description
point1 XYZ 经纬度(度)
point2 XYZ 经纬度(度)
ys Object YouScene对象
Returns:
xyz坐标数组
Example:
例,在模型上画线时,需要将线贴在模型上可以用此方法
   var layer = youScene.layers.addLinesLayer({
        id:'123',
        name:'213',
    });
 var points = [];
 function polylineTool(ys) {
     ys.viewTool = YS.ViewTool.POLYLINE;
     var onViewToolTagAdded = function (global, viewTool, trackObject) {
         var point = trackObject.json.tag;
         if (points.length === 0) {
             points.push(point);
         } else {
             var arr = YS.MathEngine.lerp(points[points.length - 1], point, youScene);
             points.push.apply(points, arr);
             points.push(point);

         }
     };

     var onViewToolUsed = function (global, viewTool, trackObject) {
         var point = trackObject.json.pointArray[trackObject.json.pointArray.length - 1];
         var arr = YS.MathEngine.lerp(points[points.length - 1], point, youScene);
         points.push.apply(points, arr);
         points.push(point);
         var line = new YS.Line({
             points: points,
             width: 3,
             color: {r: 1, g: 0, b: 0, a: 1}
         });
         layer.add(line)
     }
     ys.events.viewToolUsed.addEventListener(onViewToolUsed);
     ys.events.viewToolTagAdded.addEventListener(onViewToolTagAdded);
 }
 polylineTool(youScene);

staticYS.MathEngine.modelToWorld(modelMatrix, model)Cartesian3

模型坐标转世界坐标
Name Type Description
modelMatrix Matrix4 模型矩阵
model Cartesian3 模型坐标,xyz
Returns:
世界坐标

staticYS.MathEngine.pointWithinPolygon(position, polygonPositions)Boolean

判断点是否在区域内
Name Type Description
position Cartographic 点坐标(弧度)
polygonPositions Array.<Cesium.Cartographic> 区域坐标集(弧度)
Returns:

staticYS.MathEngine.radiansToDMS(cartographic)String

经纬度(弧度)转经纬度度分秒
Name Type Description
cartographic Cartographic 经纬度(弧度)
Returns:
经纬度坐标

staticYS.MathEngine.radianToDegree(r)Number

将弧度转成度
Name Type Description
r Number 弧度数
Returns:
度数

staticYS.MathEngine.rotateOffsetPoint(center, point, options)XYZ

根据中心点与选点方向计算偏移距离和高度上的点
Name Type Description
center XYZ 中心点
point XYZ 选点的坐标
options Object options有下面这些属性
Name Type Description
dis Number 偏移距离
height Number 偏移高度
Returns:
偏移后的坐标

staticYS.MathEngine.sampleTerrainMostDetailed2(terrainProvider, positions, level)Promise

根据坐标和级别计算当前坐标处的贴地坐标,如果请求级别大于当前位置处的最大级别,则采用最大级别。反之则采用请求级别
Name Type Description
terrainProvider Object viewer.terrainProvider对象
positions Array.<Cesium.Cartographic> Cesium.Cartographic坐标数组(经纬度弧度)
level Number 当前请求的地形级别
Returns:
返回Promise, Promise.then方法里面的参数为请求到的贴地坐标数组

staticYS.MathEngine.screenToRadians(viewer, screenPosition)Cartographic

屏幕坐标转经纬度(弧度)
Name Type Description
viewer Viewer YouScene.earth.viewer
screenPosition XY 屏幕坐标{x:200,y:700}
Returns:
经纬度坐标(弧度)

staticYS.MathEngine.screenToWorld(viewer, screenPosition)XYZ

获取屏幕坐标下对应的世界坐标
Name Type Description
viewer Viewer YouScene.earth.viewer
screenPosition XY 屏幕坐标{x:200,y:700}
Returns:
}} 世界坐标

staticYS.MathEngine.screenToWorld2(viewer, screenPosition)XYZ

获取当前屏幕坐标下对应的地形上的坐标
Name Type Description
viewer Viewer YouScene.earth.viewer
screenPosition XY 屏幕坐标{x:200,y:700}
Returns:
}} 世界坐标

staticYS.MathEngine.sphericalDistance(p1, p2)Number

计算两点间球面大圆距离,单位度
Name Type Description
p1 XYZ | XY 球面一个点
p2 XYZ | XY 球面另一个点
Returns:
返回两点间的球面距离,单位度
To Do:
  • 已实现,待测试验证精度

staticYS.MathEngine.sphericalDistanceM(p1, p2)Number

计算两点间球面大圆距离,单位米
Name Type Description
p1 XYZ | XY 球面一个点
p2 XYZ | XY 球面另一个点
Returns:
返回两点间的球面距离,单位米
To Do:
  • 已实现,现在使用的相同半径,后续需要根据长短轴半径分别计算

staticYS.MathEngine.sphericalToModel(modelMatrix, cartographic)Cartesian3

经纬度点转模型坐标
Name Type Description
modelMatrix Matrix4 模型矩阵
cartographic Cartographic 经纬度点坐标(弧度)
Returns:
模型坐标

staticYS.MathEngine.sphericalToModelD(modelMatrix, longitude, latitude, altitude)Cartesian3

经纬度转模型坐标
Name Type Description
modelMatrix Matrix4 模型矩阵
longitude var 经度(度)
latitude var 纬度(度)
altitude var 海拔高程(米)
Returns:
模型坐标

staticYS.MathEngine.sphericalToModelR(modelMatrix, longitude, latitude, altitude)Cartesian3

经纬度(弧度)转模型坐标
Name Type Description
modelMatrix Matrix4 模型矩阵
longitude var 经度(弧度)
latitude var 纬度(弧度)
altitude var 海拔高程(米)
Returns:
模型坐标

staticYS.MathEngine.sphericalToScreen(ys, Cartesian3)ScreenCoordinates

球面坐标转屏幕坐标
Name Type Description
ys Object YouScene对象
Cartesian3 Cartesian3 世界坐标
Returns:
屏幕坐标

staticYS.MathEngine.toDegreeRect(rectangle)Rectangle

将弧度单位的Rectange转成以度为单位
Name Type Description
rectangle Rectangle 任意类型的rectangle,弧度单位
Returns:
返回度为单位的Rectangle

staticYS.MathEngine.toRadiansRect(rectangle)Rectangle

将度单位的Rectange转成以弧度为单位
Name Type Description
rectangle Rectangle 任意类型的rectangle,度单位
Returns:
返回弧度为单位的Rectangle

staticYS.MathEngine.translateRotateScaleFromMatrix(matrix)Object

通过矩阵获取当前的位置,旋转角,放大系数
Name Type Description
matrix Matrix4 矩阵,通过MathEngine.getMatrix生成的矩阵
Returns:
  • options
  • options.longitude 经度
  • options.latitude 纬度
  • options.altitude 高度
  • options.heading 绕Z轴旋转角度
  • options.pitch 绕Y轴旋转角度
  • options.roll 绕X轴旋转角度
  • options.scaleX X轴放大系数
  • options.scaleY Y轴放大系数
  • options.scaleZ Z轴放大系数

staticYS.MathEngine.twoBezierPoints(p1, p2, h, n)Array.<XYZ>

根据两点生成以两点中心点贝赛尔曲线点
Name Type Description
p1 XYZ 第一点
p2 XYZ 第二点
h Number 贝赛尔曲线的高度
n Number 生成贝赛尔曲线点的个数(越多越平滑)
Returns:
返回贝赛尔曲线点的坐标数组

staticYS.MathEngine.worldToModel(modelMatrix, cartesian3)Cartesian3

世界坐标转模型坐标
Name Type Description
modelMatrix Matrix4 模型矩阵
cartesian3 Cartesian3 世界坐标,xyz
Returns:
模型坐标

staticYS.MathEngine.xyzDegreeToRadian(xyz)XYZ

经纬度(度)转经纬度弧度
Name Type Description
xyz XYZ 经纬度(度)
Returns:
经纬度坐标(弧度)

staticYS.MathEngine.xyzDegreeToRadians(xyz)XYZ

经纬度(弧度)转经纬度度分秒
Name Type Description
xyz Cartographic 经纬度(弧度)
Returns:
经纬度坐标

staticYS.MathEngine.xyzRadianToDegree(xyz)XYZ

经纬度(弧度)转经纬度度
Name Type Description
xyz XYZ 经纬度(弧度)
Returns:
经纬度坐标(度)

staticYS.MathEngine.xyzsToModel(modelMatrix, positions)Array.<Cartesian3>

xyz经纬度数组坐标转模型坐标
Name Type Description
modelMatrix Matrix4 模型矩阵
positions Array.<XYZ> 经纬度坐标数组
Returns:
模型坐标数组

staticYS.MathEngine.xyzToCartesian3(xyz)Cartesian3

xyz格式转Cartesian3世界坐标
Name Type Description
xyz XYZ 经纬度(度)
Returns:
世界坐标

staticYS.MathEngine.xyzToCartographic(xyz)Cesium.Cartographic

经纬度坐标转Cartographic
Name Type Description
xyz XYZ 经纬度坐标,单位度
Returns:
Cartographic

staticYS.MathEngine.xyzToModel(modelMatrix, xyz)Cartesian3

xyz经纬度坐标转模型坐标
Name Type Description
modelMatrix Matrix4 模型矩阵
xyz XYZ 经纬度坐标
Returns:
模型坐标