bmh_cesium/public/widgets/roamFly/widget.js

203 lines
6.0 KiB
JavaScript
Raw Normal View History

2025-03-09 23:23:50 +00:00
//模块:
xjsdk.widget.bindClass(xjsdk.widget.BaseWidget.extend({
options: {
//弹窗
view: {
type: "window",
url: "view.html",
windowOptions: {
width: 230,
height: 520,
//maxmin: true,
}
},
},
//初始化[仅执行1次]
create: function () {
},
viewWindow: null,
//每个窗口创建完成后调用
winCreateOK: function (opt, result) {
//layer.min(opt._layerIdx); //最小化窗口
this.viewWindow = result;
},
//打开激活
activate: function () {
var lonlats = this.config.data.points;
if (!lonlats || lonlats.length < 2) {
toastr.error('路线无坐标数据,无法漫游!');
return;
}
var flyLine = new xjsdk.FlyLine(this.viewer, this.config.data);
this.flyLine = flyLine;
this.createTimeLine();
if (this.config.data.clampToGround) {
var that = this;
flyLine.clampToGround(function () {//异步计算完成贴地后再启动
that.startFly();
});
}
else {
this.startFly();
}
},
startFly: function () {
var flyLine = this.flyLine;
//显示基本信息,名称、总长、总时间
this.viewWindow.showAllInfo({
name: flyLine.name,
alllen: flyLine.alllen,
alltime: flyLine.alltimes
});
if (this.viewer.timeline)
this.viewer.timeline.zoomTo(flyLine.startTime, flyLine.stopTime);
else if (this.timeline)
this.timeline.zoomTo(flyLine.startTime, flyLine.stopTime);
flyLine.start();
var that = this;
this.timetik = setInterval(function () {
if (!that.flyLine.timeinfo) return;
that.viewWindow.showRealTimeInfo(that.flyLine.timeinfo);
that.updateCharsWidgeFlyOk(that.flyLine.timeinfo.len);//更新剖面图
}, 200);
},
//关闭释放
disable: function () {
this.viewWindow = null;
clearInterval(this.timetik);
this.flyLine.destroy();
delete this.flyLine;
this.removeTimeLine();
},
//界面更新参数
getAttr: function () {
return this.flyLine.options;
},
updateStyle: function (params) {
this.flyLine.updateStyle(params);
},
//返回列表widget
toRoamLine: function () {
this.flyLine.stop();
xjsdk.widget.activate({
uri: 'widgets/roamLine/widget.js',
});
},
//显示剖面
charsWidgetUri: 'widgets/roamChars/widget.js',
showHeightChars: function () {
var that = this;
this.flyLine.getTerrainHeight(function (data) {
that.updateCharsWidge(data);
}, { splitNum: 100 });
},
updateCharsWidge: function (data) {
xjsdk.widget.activate({
uri: this.charsWidgetUri,
data: data
});
// var roamingJK = xjsdk.widget.getClass(this.charsWidgetUri);
// if (roamingJK && roamingJK.isActivate) { //如果在激活状态直接更新
// roamingJK.update(data);
// }
// else{
// xjsdk.widget.activate({
// uri: this.charsWidgetUri,
// data: data
// });
// }
},
updateCharsWidgeFlyOk: function (alllen) {
var roamingJK = xjsdk.widget.getClass(this.charsWidgetUri);
if (roamingJK && roamingJK.isActivate) {
roamingJK.changeFlyOk(alllen);
}
},
//创建时间控制
createTimeLine: function () {
var viewerContainer = this.viewer._element;
if (!this.viewer.animation) { // Animation
var animationContainer = document.createElement('div');
animationContainer.className = 'cesium-viewer-animationContainer';
viewerContainer.appendChild(animationContainer);
var animation = new Cesium.Animation(animationContainer, new Cesium.AnimationViewModel(this.viewer.clockViewModel));
this.animation = animation;
}
if (!this.viewer.timeline) { // Timeline
var timelineContainer = document.createElement('div');
timelineContainer.className = 'cesium-viewer-timelineContainer';
timelineContainer.style.right = '0px';
viewerContainer.appendChild(timelineContainer);
var timeline = new Cesium.Timeline(timelineContainer, this.viewer.clock);
timeline.addEventListener('settime', this.onTimelineScrubfunction, false);
timeline.zoomTo(this.viewer.clock.startTime, this.viewer.clock.stopTime);
this.timeline = timeline;
}
this.locationOldCss = this.viewer.xjsdk.location._dom.css(['left', 'bottom']);
this.viewer.xjsdk.location._dom.css({ left: '170px', bottom: '25px' });
this.legendOldCss = $(".distance-legend").css(['left', 'bottom']);
$(".distance-legend").css({ "left": "150px", "bottom": "25px", });
},
onTimelineScrubfunction: function (e) {
var clock = e.clock;
clock.currentTime = e.timeJulian;
clock.shouldAnimate = false;
},
removeTimeLine: function () {
if (this.timeline)
this.timeline.removeEventListener('settime', this.onTimelineScrubfunction, false);
try {
var viewerContainer = this.viewer._element;
if (this.animation) {
viewerContainer.removeChild(this.animation.container);
this.animation.destroy();
this.animation = null;
}
if (this.timeline) {
viewerContainer.removeChild(this.timeline.container);
this.timeline.destroy();
this.timeline = null;
}
this.viewer.xjsdk.location._dom.css(this.locationOldCss);
$(".distance-legend").css(this.legendOldCss);
}
catch (e) {
console.log(e);
}
},
}));