设置一条颜色带,由数字0处颜色渐变到1处颜色,计算0-1中插值t处对应的颜色值。
getColor(t) {
let material = new Cesium.Color(1.0, 1.0, 1.0, 1.0);//初始化定义material
return Cesium.Color.lerp(
Cesium.Color.YELLOW.withAlpha(0.8),//0.0处对应的颜色
Cesium.Color.RED.withAlpha(0.8),//1.0处对应的颜色
t,
material//存储结果的对象
);
},
计算两点间距离
getDistance(start, end) {//start、end为弧度坐标
var geodesic = new Cesium.EllipsoidGeodesic();
geodesic.setEndPoints(start, end);
return geodesic.surfaceDistance;
},
计算两点连线方向
//角度
getAngle(lng_a, lat_a, lng_b, lat_b) {
var localToWorld_Matrix = Cesium.Transforms.eastNorthUpToFixedFrame(
new Cesium.Cartesian3.fromDegrees(lng_a, lat_a)
);
var worldToLocal_Matrix = Cesium.Matrix4.inverse(
localToWorld_Matrix,
new Cesium.Matrix4()
);
var localPosition_A = Cesium.Matrix4.multiplyByPoint(
worldToLocal_Matrix,
new Cesium.Cartesian3.fromDegrees(lng_a, lat_a),
new Cesium.Cartesian3()
);
var localPosition_B = Cesium.Matrix4.multiplyByPoint(
worldToLocal_Matrix,
new Cesium.Cartesian3.fromDegrees(lng_b, lat_b),
new Cesium.Cartesian3()
);
var angle = Math.atan2(
localPosition_B.y - localPosition_A.y,
localPosition_B.x - localPosition_A.x
);
var theta = angle * (180 / Math.PI);
if (theta < 0) {
theta = theta + 360;
}
return 360 - Number(theta.toFixed(0));
},
//方向
setModelDirection(position, angle) {
let center = position;
let heading = Cesium.Math.toRadians(angle);
let pitch = 0;
let roll = 0;
let hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
return Cesium.Transforms.headingPitchRollQuaternion(center, hpr);
},
给定一个点,延指定角度距离该点定长的另一点坐标
//点、方向、距离计算另一点
getPointByDirectionAndLen(position, angle, len) {
let matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);
let mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(angle || 0));
let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
Cesium.Matrix4.multiply(matrix, rotationZ, matrix);
let result = Cesium.Matrix4.multiplyByPoint(
matrix,
new Cesium.Cartesian3(0, len, 0),
new Cesium.Cartesian3()
);
return result;
},