function newSite(x, y, z, h, p, time, ids) {
|
if (x != null && y != null && z != null && h != null && p != null && time != null && ids != null) {
|
this.position_x = x;
|
this.position_y = y;
|
this.position_z = z;
|
this.pitch = p;
|
this.heading = h;
|
this.time = time;
|
this.ids = ids;
|
} else {
|
return false;
|
}
|
}
|
|
function Fly_NZC(viewer) {
|
this.viewer = viewer;
|
this.scene = viewer.scene;
|
this.entities = viewer.entities;
|
//全部飞行站点数组
|
this.allSites = [];
|
var that = this;
|
this.checkIds = function (ids) {
|
console.log(ids, 'cids')
|
console.log(that.allSites, 'that.allSites')
|
for (var i = 0; i < that.allSites.length + 1; i++) {
|
if (i == that.allSites.length) {
|
console.log(i, 'endcids')
|
return false;
|
break;
|
}
|
if (that.allSites[i].ids == ids) {
|
console.log(i, 'havecids')
|
return i;
|
break;
|
}
|
}
|
|
// img_path
|
};
|
this.RouteCollection = {
|
//线颜色
|
//LineColor:Cesium.Color.WHITE,
|
//站点和路线显隐是否开启
|
point_show: true,
|
line_show: true,
|
//站点图片路径
|
img_path: "widgets/FlyRoute/images/location4.png",
|
//飞行路线颜色
|
/* setLineColor:function(){
|
Cesium.Color.WHITE,
|
},*/
|
AddRoute: function (Route) {
|
this.deleteEntities();
|
that.allSites = [];
|
for (var i = 0; i < Route.length; i++) {
|
let cartesian3 = Cesium.Cartesian3.fromDegrees(Route[i].lgtd, Route[i].lttd, Route[i].height);
|
let site = {
|
"ids": Route[i].id,
|
"position_x": cartesian3.x,
|
"position_y": cartesian3.y,
|
"position_z": cartesian3.z,
|
"pitch": Cesium.Math.toRadians(Route[i].pitch),
|
"heading": Cesium.Math.toRadians(Route[i].heading),
|
"roll": Cesium.Math.toRadians(Route[i].roll),
|
"time": Route[i].time
|
};
|
that.allSites[i] = site;
|
}
|
this.controlEntities();
|
|
},
|
//设置点图片
|
setPointImg: function (path) {
|
|
this.img_path = path;
|
this.controlEntities();
|
|
},
|
//mod=0为设置点的可见,1为设置线的可见,2为控制点和线的可见
|
setVisible: function (mod, bool) {
|
if (mod === 0) {
|
this.point_show = bool;
|
}
|
if (mod === 1) {
|
this.line_show = bool;
|
}
|
if (mod === 2) {
|
this.point_show = bool;
|
this.line_show = bool;
|
}
|
this.controlEntities();
|
|
},
|
//通过传入站点类添加站点
|
AddSite: function (newSite) {
|
//判断id是否重复
|
console.log(newSite.ids)
|
var bool = that.checkIds(newSite.ids);
|
if (bool) {
|
return false;
|
} else {
|
var Site = {};
|
Site.position_x = newSite.position_x;
|
Site.position_y = newSite.position_y;
|
Site.position_z = newSite.position_z;
|
Site.heading = newSite.heading;
|
Site.pitch = newSite.pitch;
|
//Site.roll=camera.roll;
|
Site.time = newSite.time;
|
Site.ids = newSite.ids;
|
that.allSites.push(Site);
|
this.controlEntities();
|
console.log(that.allSites, '444f')
|
return true;
|
}
|
},
|
//添加当前视角为站点需要传入id
|
AddSiteByView: function (ids) {
|
//判断id是否重复
|
console.log(ids, 'ids')
|
var bool = that.checkIds(ids);
|
if (bool) {
|
return false;
|
} else {
|
try {
|
var position = that.scene.camera.position;
|
//获取当前相机位置参数(飞行用)
|
var Site = {};
|
Site.position_x = position.x;
|
Site.position_y = position.y;
|
Site.position_z = position.z;
|
Site.heading = that.scene.camera.heading;
|
Site.pitch = that.scene.camera.pitch;
|
Site.roll = that.scene.camera.roll;
|
Site.time = 3;
|
Site.ids = ids;
|
//添加到站点数组
|
// that.allSites.push(Site);
|
this.controlEntities();
|
return true;
|
} catch (e) {
|
return false;
|
}
|
|
}
|
},
|
//根据索引获取站点信息
|
getSiteByIndex: function (index) {
|
console.log(that.allSites[index], 'site.index');
|
return that.allSites[index];
|
},
|
deleteEntities: function () {
|
//50000+为线id
|
for (var i = 0; i < that.allSites.length; i++) {
|
that.entities.removeById(that.allSites[i].ids);
|
}
|
for (var i = 1; i < 500000; i++) {
|
var ids = parseInt(50000 + i);
|
var entities_del = that.entities.getById(ids);
|
if (entities_del) {
|
that.entities.remove(entities_del);
|
} else {
|
break;
|
}
|
|
}
|
},
|
controlEntities: function () {
|
var position_1, position_2, x1, x2, y1, y2, z1, z2, point_1_cartographic, point_2_cartographic;
|
//添加和删除站点,更改颜色或图片后,先清空entities,然后重新添加。
|
this.deleteEntities();
|
//添加显示的站点
|
var length = that.allSites.length;
|
if (this.point_show == true) {
|
for (var j = 0; j < length; j++) {
|
that.entities.add({
|
position: new Cesium.Cartesian3(that.allSites[j].position_x, that.allSites[j].position_y, that.allSites[j].position_z),
|
billboard: {
|
image: this.img_path,
|
width: 30,
|
height: 40,
|
},
|
//name : 10000+j,
|
id: that.allSites[j].ids
|
});
|
}
|
}
|
//添加显示的线
|
if (this.line_show == true) {
|
for (var j = 1; j < length; j++) {
|
//将笛卡尔坐标转为经纬度坐标,用于绘制线
|
position_1 = new Cesium.Cartesian3(that.allSites[j].position_x, that.allSites[j].position_y, that.allSites[j].position_z)
|
point_1_cartographic = Cesium.Cartographic.fromCartesian(position_1);
|
console.log(position_1, '555f')
|
x1 = Cesium.Math.toDegrees(point_1_cartographic.longitude);
|
y1 = Cesium.Math.toDegrees(point_1_cartographic.latitude);
|
z1 = point_1_cartographic.height;
|
|
position_2 = new Cesium.Cartesian3(that.allSites[j - 1].position_x, that.allSites[j - 1].position_y, that.allSites[j - 1].position_z)
|
point_2_cartographic = Cesium.Cartographic.fromCartesian(position_2);
|
x2 = Cesium.Math.toDegrees(point_2_cartographic.longitude);
|
y2 = Cesium.Math.toDegrees(point_2_cartographic.latitude);
|
z2 = point_2_cartographic.height;
|
that.entities.add({
|
id: 50000 + j,
|
// name : drowallStops.length,
|
polyline: {
|
positions: Cesium.Cartesian3.fromDegreesArrayHeights([x1, y1, z1, x2, y2, z2]),
|
width: 5,
|
material: Cesium.Color.WHITE
|
}
|
});
|
|
}
|
}
|
//如果关闭显示了站点和飞行路线,添加的新站点和飞行路线将先不显示
|
if (this.line_show == false) {
|
for (var j = 1; j < length; j++) {
|
//将笛卡尔坐标转为经纬度坐标,用于绘制线
|
position_1 = new Cesium.Cartesian3(that.allSites[j].position_x, that.allSites[j].position_y, that.allSites[j].position_z)
|
point_1_cartographic = Cesium.Cartographic.fromCartesian(position_1);
|
x1 = Cesium.Math.toDegrees(point_1_cartographic.longitude);
|
y1 = Cesium.Math.toDegrees(point_1_cartographic.latitude);
|
z1 = point_1_cartographic.height;
|
|
position_2 = new Cesium.Cartesian3(that.allSites[j - 1].position_x, that.allSites[j - 1].position_y, that.allSites[j - 1].position_z)
|
point_2_cartographic = Cesium.Cartographic.fromCartesian(position_2);
|
x2 = Cesium.Math.toDegrees(point_2_cartographic.longitude);
|
y2 = Cesium.Math.toDegrees(point_2_cartographic.latitude);
|
z2 = point_2_cartographic.height;
|
that.entities.add({
|
id: 50000 + j,
|
show: false,
|
// name : drowallStops.length,
|
polyline: {
|
positions: Cesium.Cartesian3.fromDegreesArrayHeights([x1, y1, z1, x2, y2, z2]),
|
width: 5,
|
material: Cesium.Color.WHITE
|
}
|
});
|
|
}
|
|
}
|
if (this.point_show == false) {
|
for (var j = 0; j < length; j++) {
|
that.entities.add({
|
position: new Cesium.Cartesian3(that.allSites[j].position_x, that.allSites[j].position_y, that.allSites[j].position_z),
|
billboard: {
|
image: this.img_path,
|
width: 30,
|
height: 40,
|
},
|
show: false,
|
//name : 10000+j,
|
id: that.allSites[j].ids
|
});
|
}
|
}
|
},
|
removeAllSites: function () {
|
this.deleteEntities();
|
that.allSites = [];
|
|
},
|
removeSiteById: function (ids) {
|
var id = that.checkIds(ids)
|
if (id) {
|
this.deleteEntities();
|
that.allSites.splice(id, 1);
|
this.controlEntities();
|
|
} else {
|
return false
|
}
|
|
}
|
|
};
|
this.l = 0;
|
this.b = 0;
|
//用于判断执行的时暂停还是停止
|
this.play_bool = true;
|
var x, y, z, p, h;
|
this.setInterval_fly = null;
|
this.setcamera = function () {
|
//设置俯仰角
|
var set = that.allSites[that.l].time * 50
|
that.viewer.camera.setView({
|
orientation: {
|
heading: viewer.scene.camera.heading + h / set,
|
pitch: viewer.scene.camera.pitch + p / set,
|
roll: 0.0
|
}
|
});
|
//move移动相机
|
that.viewer.camera.move(new Cesium.Cartesian3(x, y, z), 1 / set);
|
that.b--;
|
if (that.b <= 0) {
|
that.l++;
|
clearInterval(that.setInterval_fly);
|
that.setInterval_fly = null;
|
that.Interval();
|
// that.b=0;
|
}
|
};
|
this.Interval = function () {
|
var l = that.l;
|
if (that.play_bool) {
|
that.b = that.allSites[l].time * 50
|
} else {
|
that.play_bool = true;
|
}
|
if (that.allSites[l + 1]) {
|
x = that.allSites[l + 1].position_x - that.allSites[l].position_x;
|
y = that.allSites[l + 1].position_y - that.allSites[l].position_y;
|
z = that.allSites[l + 1].position_z - that.allSites[l].position_z;
|
p = that.allSites[l + 1].pitch - that.allSites[l].pitch;
|
h = that.allSites[l + 1].heading - that.allSites[l].heading;
|
|
var tem = Cesium.Math.toDegrees(that.allSites[l + 1].heading) - Cesium.Math.toDegrees(that.allSites[l].heading);
|
if (Math.abs(tem) > 180) {
|
if (tem >= 0) {
|
tem = 360 - tem;
|
} else {
|
tem = 360 + tem;
|
}
|
h = Cesium.Math.toRadians(tem);
|
}
|
//that.b=that.allSites[l].time*20
|
that.setInterval_fly = setInterval(that.setcamera, 12);
|
} else {
|
that.play_bool = true;
|
that.l = 0;
|
that.scene.screenSpaceCameraController.enableRotate = true;
|
that.scene.screenSpaceCameraController.enableTranslate = true;
|
that.scene.screenSpaceCameraController.enableZoom = true;
|
that.scene.screenSpaceCameraController.enableTilt = true;
|
that.scene.screenSpaceCameraController.enableLook = true;
|
}
|
|
};
|
|
this.flyManager = {
|
img_path: "widgets/FlyRoute/images/location4.png",
|
//用于储存暂停时的位置
|
Site_pause: {},
|
actives: false,
|
isguding: false,
|
openView: function () {
|
if (this.actives == true) {
|
console.log('视角改变');
|
that.scene.screenSpaceCameraController.enableRotate = false;
|
that.scene.screenSpaceCameraController.enableTranslate = false;
|
that.scene.screenSpaceCameraController.enableZoom = false;
|
that.scene.screenSpaceCameraController.enableTilt = false;
|
that.scene.screenSpaceCameraController.enableLook = false;
|
|
// that.scene.screenSpaceCameraController.enableRotate = true;
|
// that.scene.screenSpaceCameraController.enableTranslate = true;
|
// that.scene.screenSpaceCameraController.enableZoom = true;
|
that.scene.screenSpaceCameraController.enableTilt = true;
|
// that.scene.screenSpaceCameraController.enableLook = true;
|
if (this.isguding == true) {
|
that.scene.screenSpaceCameraController.enableRotate = false;
|
that.scene.screenSpaceCameraController.enableTranslate = false;
|
that.scene.screenSpaceCameraController.enableZoom = false;
|
that.scene.screenSpaceCameraController.enableTilt = false;
|
that.scene.screenSpaceCameraController.enableLook = false;
|
}
|
this.isguding = !this.isguding;
|
} else {
|
console.log('未开始飞行');
|
}
|
},
|
play: function () {
|
this.actives = true;
|
for (var i = 0; i < that.allSites.length; i++) {
|
that.entities.removeById(that.allSites[i].ids);
|
}
|
|
//如果之前点的时停止重新开始飞行
|
if (that.allSites.length > 1) {
|
that.scene.screenSpaceCameraController.enableRotate = false;
|
that.scene.screenSpaceCameraController.enableTranslate = false;
|
that.scene.screenSpaceCameraController.enableZoom = false;
|
that.scene.screenSpaceCameraController.enableTilt = false;
|
that.scene.screenSpaceCameraController.enableLook = false;
|
|
|
if (that.play_bool) {
|
//设置初始点
|
that.scene.camera.setView({
|
destination: new Cesium.Cartesian3(that.allSites[that.l].position_x, that.allSites[that.l].position_y, that.allSites[that.l].position_z),
|
orientation: {
|
heading: that.allSites[that.l].heading,
|
pitch: that.allSites[that.l].pitch,
|
roll: that.allSites[that.l].roll
|
}
|
});
|
if (that.setInterval_fly) {
|
clearInterval(that.setInterval_fly);
|
}
|
that.Interval();
|
|
} else {
|
//如果之前是暂停,继续飞行
|
that.scene.camera.setView({
|
//将经度、纬度、高度的坐标转换为笛卡尔坐标
|
destination: new Cesium.Cartesian3(this.Site_pause.position_x, this.Site_pause.position_y, this.Site_pause.position_z),
|
orientation: {
|
heading: this.Site_pause.heading,
|
pitch: this.Site_pause.pitch,
|
roll: this.Site_pause.roll
|
}
|
});
|
|
that.Interval();
|
}
|
}
|
|
},
|
stop: function () {
|
//添加显示的站点
|
this.actives = false;
|
var length = that.allSites.length;
|
for (var j = 0; j < length; j++) {
|
var flag = false;
|
for (var i = 0; i < that.entities.values.length; i++) {
|
if (that.allSites[j].ids == that.entities.values[i].id) {
|
flag = true
|
}
|
}
|
if (flag == false) {
|
that.entities.add({
|
position: new Cesium.Cartesian3(that.allSites[j].position_x, that.allSites[j].position_y, that.allSites[j].position_z),
|
billboard: {
|
image: this.img_path,
|
width: 30,
|
height: 40,
|
},
|
//name : 10000+j,
|
id: that.allSites[j].ids
|
});
|
}
|
}
|
if (that.setInterval_fly != null) {
|
clearInterval(that.setInterval_fly);
|
that.setInterval_fly = null;
|
}
|
that.l = 0;
|
that.play_bool = true;
|
that.scene.screenSpaceCameraController.enableRotate = true;
|
that.scene.screenSpaceCameraController.enableTranslate = true;
|
that.scene.screenSpaceCameraController.enableZoom = true;
|
that.scene.screenSpaceCameraController.enableTilt = true;
|
that.scene.screenSpaceCameraController.enableLook = true;
|
},
|
pause: function () {
|
actives = false;
|
//添加显示的站点
|
var length = that.allSites.length;
|
for (var j = 0; j < length; j++) {
|
var flag = false;
|
for (var i = 0; i < that.entities.values.length; i++) {
|
if (that.allSites[j].ids == that.entities.values[i].id) {
|
flag = true
|
}
|
}
|
if (flag == false) {
|
that.entities.add({
|
position: new Cesium.Cartesian3(that.allSites[j].position_x, that.allSites[j].position_y, that.allSites[j].position_z),
|
billboard: {
|
image: this.img_path,
|
width: 30,
|
height: 40,
|
},
|
//name : 10000+j,
|
id: that.allSites[j].ids
|
});
|
}
|
}
|
if (that.setInterval_fly != null) {
|
clearInterval(that.setInterval_fly);
|
that.setInterval_fly = null;
|
that.play_bool = false;
|
}
|
//获取暂停时的camera数据
|
var position = that.scene.camera.position;
|
this.Site_pause.position_x = position.x;
|
this.Site_pause.position_y = position.y;
|
this.Site_pause.position_z = position.z;
|
this.Site_pause.heading = that.scene.camera.heading;
|
this.Site_pause.pitch = that.scene.camera.pitch;
|
this.Site_pause.roll = that.scene.camera.roll;
|
|
|
that.scene.screenSpaceCameraController.enableRotate = true;
|
that.scene.screenSpaceCameraController.enableTranslate = true;
|
that.scene.screenSpaceCameraController.enableZoom = true;
|
that.scene.screenSpaceCameraController.enableTilt = true;
|
that.scene.screenSpaceCameraController.enableLook = true;
|
|
},
|
SetStartSite: function (ids) {
|
var bool = that.checkIds(ids);
|
if (bool) {
|
that.l = bool;
|
return true;
|
} else {
|
return false;
|
}
|
|
},
|
viewToSite: function (site) {
|
console.log(site, 'viewto')
|
that.scene.camera.setView({
|
destination: new Cesium.Cartesian3(site.position_x - 1000, site.position_y + 2000, site.position_z),
|
orientation: {
|
heading: site.heading,
|
pitch: site.pitch,
|
roll: site.roll
|
}
|
});
|
|
}
|
|
};
|
}
|