|
@@ -47,12 +47,15 @@ export default class Roaming {
|
|
|
* @param {Number} [options.label.outlineWidth=1] 边框宽度
|
|
|
* @param {Number} [options.label.showBackground=false] 是否显示背景颜色
|
|
|
* @param {Number} [options.label.backgroundColor=[255,255,255,0]] 背景颜色
|
|
|
- * @param {Number} [options.label.pixelOffset=0] 偏移量
|
|
|
+ * @param {Number} [options.label.pixelOffset] 偏移像素
|
|
|
+ * @param {Number} [options.label.pixelOffset.x=0] 横向偏移像素
|
|
|
+ * @param {Number} [options.label.pixelOffset.y=0] 纵向偏移像素
|
|
|
* @param {Number} [options.label.scale=1] 尺寸
|
|
|
- * @param {Number} [options.label.near=1.5e2] 相机范围的下界。
|
|
|
- * @param {String} [options.label.nearValue=1] 相机范围下界的值。
|
|
|
- * @param {String} [options.label.far=2400] 相机范围的上限。
|
|
|
- * @param {Number} [options.label.farValue=0] 该值位于摄像机范围的上界。
|
|
|
+ * @param {Number} [options.label.scaleByDistance] 相机范围
|
|
|
+ * @param {Number} [options.label.scaleByDistance.near=1.5e2] 相机范围的下界。
|
|
|
+ * @param {String} [options.label.scaleByDistance.nearValue=1] 相机范围下界的值。
|
|
|
+ * @param {String} [options.label.scaleByDistance.far=2400] 相机范围的上限。
|
|
|
+ * @param {Number} [options.label.scaleByDistance.farValue=0] 该值位于摄像机范围的上界。
|
|
|
* @memberof Roaming
|
|
|
*/
|
|
|
constructor(viewer, positions, options) {
|
|
@@ -268,7 +271,7 @@ export default class Roaming {
|
|
|
point.color = new Cesium.Color.fromCssColorString("#FFFF00");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//点位轮廓颜色
|
|
|
if (point.outlineColor) {
|
|
|
if (point.outlineColor instanceof Array) {
|
|
@@ -279,7 +282,7 @@ export default class Roaming {
|
|
|
point.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//点位轮廓宽度
|
|
|
point.outlineWidth = Cesium.defaultValue(point.outlineWidth, 2);
|
|
|
|
|
@@ -304,7 +307,7 @@ export default class Roaming {
|
|
|
label.fillColor = new Cesium.Color.fromCssColorString("#FFFF00");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//字体边框颜色
|
|
|
if (label.outlineColor) {
|
|
|
if (label.outlineColor instanceof Array) {
|
|
@@ -315,7 +318,7 @@ export default class Roaming {
|
|
|
label.outlineColor = new Cesium.Color.fromCssColorString("#FFFF00");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//字体边框宽度
|
|
|
label.outlineWidth = Cesium.defaultValue(label.outlineWidth, 1);
|
|
|
|
|
@@ -335,10 +338,6 @@ export default class Roaming {
|
|
|
label.pixelOffset = Cesium.defaultValue(label.pixelOffset, 0);
|
|
|
label.scale = Cesium.defaultValue(label.scale, 1);
|
|
|
|
|
|
- label.near = Cesium.defaultValue(label.near, 1.5e2);
|
|
|
- label.nearValue = Cesium.defaultValue(label.nearValue, 1);
|
|
|
- label.far = Cesium.defaultValue(label.far, 2400);
|
|
|
- label.farValue = Cesium.defaultValue(label.farValue, 0);
|
|
|
|
|
|
this.entity.label = {
|
|
|
text: label.text,
|
|
@@ -354,11 +353,25 @@ export default class Roaming {
|
|
|
backgroundPadding: new Cesium.Cartesian2(6, 6), //指定以像素为单位的水平和垂直背景填充padding
|
|
|
disableDepthTestDistance: Number.POSITIVE_INFINITY,
|
|
|
|
|
|
- pixelOffset: new Cesium.Cartesian2(0, label.pixelOffset), //偏移量
|
|
|
scale: label.scale, //尺寸
|
|
|
- // scaleByDistance: new Cesium.NearFarScalar(label.near, label.nearValue, label.far, label.farValue) //按距离缩放,即距离大于180米时,图标不显示 Cesium.NearFarScalar(near, nearValue, far, farValue)相机范围的下界。相机范围下界的值。相机范围的上限。该值位于摄像机范围的上界。
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ //偏移量
|
|
|
+ if (label.pixelOffset) {
|
|
|
+ label.pixelOffset.x = Cesium.defaultValue(label.pixelOffset.x, 0);
|
|
|
+ label.pixelOffset.y = Cesium.defaultValue(label.pixelOffset.y, 0);
|
|
|
+ this.entity.label.pixelOffset = new Cesium.Cartesian2(label.pixelOffset.x, label.pixelOffset.y);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (label.scaleByDistance) {
|
|
|
+ label.scaleByDistance.near = Cesium.defaultValue(label.scaleByDistance.near, 0);
|
|
|
+ label.scaleByDistance.nearValue = Cesium.defaultValue(label.scaleByDistance.nearValue, 0);
|
|
|
+ label.scaleByDistance.far = Cesium.defaultValue(label.scaleByDistance.far, 1);
|
|
|
+ label.scaleByDistance.farValue = Cesium.defaultValue(label.scaleByDistance.farValue, 0);
|
|
|
+
|
|
|
+ this.entity.label.scaleByDistance = new Cesium.NearFarScalar(label.scaleByDistance.near, label.scaleByDistance.nearValue, label.scaleByDistance.far, label.scaleByDistance.farValue) //按距离缩放,即距离大于180米时,图标不显示 Cesium.NearFarScalar(near, nearValue, far, farValue)相机范围的下界。相机范围下界的值。相机范围的上限。该值位于摄像机范围的上界。
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -376,7 +389,8 @@ export default class Roaming {
|
|
|
initRole(role) {
|
|
|
let _self = this;
|
|
|
|
|
|
- if (role == 0) {
|
|
|
+ if (role == 0) { //自由模式
|
|
|
+
|
|
|
this.viewer.trackedEntity = undefined;
|
|
|
|
|
|
//获取被clock监听的全部事件数量
|
|
@@ -385,7 +399,7 @@ export default class Roaming {
|
|
|
//将被监听的方法移除来停止方法
|
|
|
_self.viewer.clock.onTick.removeEventListener(_self.viewer.clock.onTick._listeners[i]);
|
|
|
}
|
|
|
- } else if (role == 1) {
|
|
|
+ } else if (role == 1) { //跟随模式
|
|
|
|
|
|
this.viewer.trackedEntity = this.entity;
|
|
|
|
|
@@ -396,7 +410,7 @@ export default class Roaming {
|
|
|
_self.viewer.clock.onTick.removeEventListener(_self.viewer.clock.onTick._listeners[i]);
|
|
|
}
|
|
|
|
|
|
- } else if (role == 2) {
|
|
|
+ } else if (role == 2) { //第一视角
|
|
|
|
|
|
this.viewer.trackedEntity = this.entity;
|
|
|
|
|
@@ -413,8 +427,8 @@ export default class Roaming {
|
|
|
let transform = Cesium.Transforms.eastNorthUpToFixedFrame(center);
|
|
|
transform = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromQuaternion(orientation), center);
|
|
|
|
|
|
- var transformX = _self.followedX || 50; //距离运动点的距离(后方)
|
|
|
- var transformZ = _self.followedZ || 10; //距离运动点的高度(上方)
|
|
|
+ var transformX = _self.followedX || -100; //距离运动点的距离(后方)
|
|
|
+ var transformZ = _self.followedZ || 50; //距离运动点的高度(上方)
|
|
|
|
|
|
_self.viewer.camera.lookAtTransform(transform, new Cesium.Cartesian3(transformX, 0, transformZ))
|
|
|
}
|
|
@@ -422,37 +436,7 @@ export default class Roaming {
|
|
|
//监听时间变化 让cesium的时钟方法来监听该方法
|
|
|
this.viewer.clock.onTick.addEventListener(exection);
|
|
|
|
|
|
- // //视角变换
|
|
|
- // var matrix3Scratch = new Cesium.Matrix3();
|
|
|
-
|
|
|
- // function getModelMatrix(entity, time, result) {
|
|
|
- // var position = Cesium.Property.getValueOrUndefined(entity.position, time, new Cesium.Cartesian3());
|
|
|
- // if (!Cesium.defined(position)) {
|
|
|
- // return undefined;
|
|
|
- // }
|
|
|
- // var orientation = Cesium.Property.getValueOrUndefined(entity.orientation, time, new Cesium.Quaternion());
|
|
|
- // if (!Cesium.defined(orientation)) {
|
|
|
- // result = Cesium.Transforms.eastNorthUpToFixedFrame(position, undefined, result);
|
|
|
- // } else {
|
|
|
- // result = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromQuaternion(orientation, matrix3Scratch),
|
|
|
- // position, result);
|
|
|
- // }
|
|
|
- // return result;
|
|
|
- // }
|
|
|
-
|
|
|
- // var scratch = new Cesium.Matrix4();
|
|
|
- // let renderListener = function(e) {
|
|
|
- // var time = _self.viewer.clock.currentTime.secondsOfDay - _self.viewer.clock.startTime.secondsOfDay;
|
|
|
-
|
|
|
- // getModelMatrix(_self.entity, _self.viewer.clock.currentTime, scratch);
|
|
|
-
|
|
|
- // var transformX = _self.followedX || 50; //距离运动点的距离(后方)
|
|
|
- // var transformZ = _self.followedZ || 10; //距离运动点的高度(上方)
|
|
|
- // _self.viewer.scene.camera.lookAtTransform(scratch, new Cesium.Cartesian3(-transformX, 0, transformZ));
|
|
|
- // }
|
|
|
- // this.viewer.scene.preRender.addEventListener(renderListener);
|
|
|
-
|
|
|
- } else if (role == 3) {
|
|
|
+ } else if (role == 3) { //第三视角 上帝视角
|
|
|
|
|
|
this.viewer.trackedEntity = this.entity;
|
|
|
|
|
@@ -462,8 +446,19 @@ export default class Roaming {
|
|
|
let center = _self.entity.position.getValue(
|
|
|
_self.viewer.clock.currentTime
|
|
|
);
|
|
|
- // 更新相机位置(上帝视角)
|
|
|
- _self.viewer.camera.lookAt(center, new Cesium.Cartesian3(0, 0, 1000))
|
|
|
+ let orientation = _self.entity.orientation.getValue(
|
|
|
+ _self.viewer.clock.currentTime
|
|
|
+ )
|
|
|
+ let transform = Cesium.Transforms.eastNorthUpToFixedFrame(center);
|
|
|
+ transform = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromQuaternion(orientation), center);
|
|
|
+
|
|
|
+ // var transformX = -50; //距离运动点的距离(后方)
|
|
|
+ // var transformZ = 250; //距离运动点的高度(上方)
|
|
|
+
|
|
|
+ var transformX = _self.followedX || -50; //距离运动点的距离(后方)
|
|
|
+ var transformZ = _self.followedZ || 250; //距离运动点的高度(上方)
|
|
|
+
|
|
|
+ _self.viewer.camera.lookAtTransform(transform, new Cesium.Cartesian3(transformX, 0, transformZ))
|
|
|
}
|
|
|
};
|
|
|
//监听时间变化 让cesium的时钟方法来监听该方法
|
|
@@ -490,8 +485,8 @@ export default class Roaming {
|
|
|
// clockViewModel.multiplier = -multiplier;
|
|
|
// }
|
|
|
// clockViewModel.shouldAnimate = true;
|
|
|
-
|
|
|
- var multiplier=this.viewer.clock.multiplier;
|
|
|
+
|
|
|
+ var multiplier = this.viewer.clock.multiplier;
|
|
|
if (multiplier < 0) {
|
|
|
this.viewer.clock.multiplier = -multiplier;
|
|
|
}
|
|
@@ -508,8 +503,8 @@ export default class Roaming {
|
|
|
// clockViewModel.multiplier = -multiplier;
|
|
|
// }
|
|
|
// clockViewModel.shouldAnimate = true;
|
|
|
-
|
|
|
- var multiplier=this.viewer.clock.multiplier;
|
|
|
+
|
|
|
+ var multiplier = this.viewer.clock.multiplier;
|
|
|
if (multiplier > 0) {
|
|
|
this.viewer.clock.multiplier = -multiplier;
|
|
|
}
|