cesium-examples/map/3d/code/sceneTree.js

401 lines
12 KiB
JavaScript

/*
* @Descripttion:
* @version: 1.0
* @Author: zhangti
* @Date: 2019-09-19 09:10:57
* @LastEditors : sueRimn
* @LastEditTime : 2020-01-13 16:47:28
*/
/**
* @file sceneTree
* @version 1.0
* sceneTree 类
* 在3d地球上挂载场景
*
* */
import config from './config.js';
import Tools from './cvTool.js';
import Scene from './scene.js';
import Entitys from './entitys.js';
import Primitives from './primitives.js';
import Radar from './radar.js';
import ModelManager from './modelManager.js';
import dataManager from './dataManager.js';
import Errors from './errors.js';
export default class sceneTree{
constructor(core){
/**
* root 节点
*/
this.root = null;
/**
* imagery 影像图层
*/
this.imagery = core.scene.imageryLayers;
/**
* primitives
*/
this.primitives = core.scene.primitives;
/**
* viewer
*/
this.viewer = core;
/**
* tools工具
*/
this.Tools = new Tools();
/**
* 获取场景对象
*/
this.scene = new Scene(this.viewer);
/**
* 实体
*/
this.entitys = new Entitys(this.viewer);
/**
* primitives
*/
this.primitive = new Primitives(this.viewer);
/**
* ModelManager
*/
this.ModelManager = new ModelManager(this.viewer);
/**
* 解析场景
*/
this.formatData = {
format (scene){
},
imagery (){
this.imagery.add(imagery);
},
tileset (tileset){
this.primitives.add(tileset);
}
}
}
/**
* root节点
*/
root (opt){
//拓展接口
switch(scene.formatType){
case '' : break;
default : this.formatData.format(this.root); break;
}
}
/**
* 挂载场景
*/
mount (){
}
/**
* build 接口
*/
build(trees){
if(trees == undefined){
alert("没有获取到功能节点");
}
let _self = this;
//自转
if(trees.rotation != undefined){
if(trees.rotation){
this.scene.rotation({cmd:"No"});
}else{
this.scene.rotation({cmd:"Off"});
}
}
//雾天
if(trees.fog != undefined){
if(trees.fog){
this.scene.fog({cmd:"No"});
}else{
this.scene.fog({cmd:"Off"});
}
}
//昼夜
if(trees.lighting != undefined){
if(trees.lighting){
this.scene.lighting({cmd:"No"});
}else{
this.scene.lighting({cmd:"Off"});
}
}
//大气层
if(trees.groundAtmosphere != undefined){
if(trees.groundAtmosphere){
this.scene.groundAtmosphere({cmd:"No"});
}else{
this.scene.groundAtmosphere({cmd:"Off"});
}
}
//星空
if(trees.skyBox != undefined){
if(trees.skyBox){
this.scene.skyBox({cmd:"No"});
}else{
this.scene.skyBox({cmd:"Off"});
}
}
//太阳
if(trees.sun != undefined){
if(trees.sun){
this.scene.sun({cmd:"No"});
}else{
this.scene.sun({cmd:"Off"});
}
}
//雨天
if(trees.rain != undefined){
if(trees.rain){
setTimeout(function(){
_self.scene.rain({cmd:"No"});
},100)
}else{
this.scene.rain({cmd:"Off"});
}
}
//雪天
if(trees.snow != undefined){
if(trees.snow){
setTimeout(function(){
_self.scene.snow({cmd:"No"});
},100)
}else{
this.scene.snow({cmd:"Off"});
}
}
//经纬网
if(trees.grid != undefined){
if(1 == trees.grid.cmd){
if( trees.grid.flag){
this.scene.grid({cmd:"No"});
}else{
this.scene.grid({cmd:"Off"});
}
}
if(2 == trees.grid.cmd){
if( trees.grid.flag){
this.scene.tileGrid({cmd:"No"});
}else{
this.scene.tileGrid({cmd:"Off"});
}
}
if(3 == trees.grid.cmd){
if( trees.grid.flag){
this.scene.mgrsGrid({cmd:"No"});
}else{
this.scene.mgrsGrid({cmd:"Off"});
}
}
}
//十字
if(trees.sbstyle != undefined){
if(trees.sbstyle){
document.documentElement.style.cursor = 'crosshair';
}else{
document.documentElement.style.cursor = 'default';
}
}
//相机状态
if(trees.xjzt != undefined){
if(trees.xjzt){
$('.map-move-msg').show();
}else{
$('.map-move-msg').hide();
}
}
//cesiumTool
if(trees.cesiumTool != undefined){
if(trees.cesiumTool){
$('.cesium-viewer-toolbar').show();
}else{
$('.cesium-viewer-toolbar').hide();
}
}
//时间轴
if(trees.sjz != undefined){
if(trees.sjz){
this.showTime();
}else{
this.hideTime();
}
}
//信息框
if(trees.info != undefined){
if(trees.info){
$('.cesium-infoBox').show();
}else{
$('.cesium-infoBox').hide();
}
}
//导航
if(trees.navi != undefined){
if(trees.navi){
$('.cesium-widget-cesiumNavigationContainer').show();
}else{
$('.cesium-widget-cesiumNavigationContainer').hide();
}
}
//雷达
if(trees.radar != undefined){
if(trees.radar){
this.radar = new Radar({viewer:this.viewer});
this.radar.build(4)
}else{
if(!this.radar)return;
this.radar.dmRadar.remove();
}
}
//省份数据
if(trees.province != undefined){
if(trees.province){
this.createProvincesBorder();
}else{
this.closeProvincesBorder();
}
}
//3dtile
if(trees._3dtiles != undefined){
if(trees._3dtiles){
this.primitive.create3DTileset({url:config.DATADIR + '/3DTiles/building/tileset.json'});
}else{
this.primitive.remove3DTileset();
}
}
//地形
if(trees.terrain != undefined){
if(trees.terrain){
try {
//this.viewer.scene.terrainProvider = createArcGisElevation3DTerrainProvider(Cesium);
this.viewer.scene.terrainProvider = new Cesium.CesiumTerrainProvider({
url: "/chinadem/"
})
} catch (error) {
alert("默认地形图加载异常");
}
}else{
this.viewer.scene.terrainProvider = new Cesium.EllipsoidTerrainProvider({});
}
}
/***
* 上面的是场景控制
* api版
* 手动挂载场景
*
*/
//scene 生成场景
if(trees.scenes){
//创建场景
let _self = this;
let createScene = function(scene){
//3dtiles
if(scene.type == "3dtiles"){
//是否有url
if(_self.Tools.strBool(scene.url)){
//是否有cmd
if(!_self.Tools.strBool(scene.cmd)){
return new Errors("3dtiles 暂时没有封装数据 指令无效!");
}
}else{
_self.primitive.create3DTileset({url:config.DATADIR + scene.url});
}
}
//模型
if(scene.type == "model"){
let model = null;
//是否有url
if(_self.Tools.strBool(scene.url)){
//是否有cmd
if(!_self.Tools.strBool(scene.cmd)){
model = _self.modelManager[_self.modelManager.CMD[scene.cmd]]
(Cesium.Cartesian3.fromDegrees(scene.position[0] , scene.position[1].dimension , 0));
}
}else{
model = _self.modelManager.createDefault({id:trees._model.id,url:trees.scene.url,position:
Cesium.Cartesian3.fromDegrees(scene.position[0] , scene.position[1].dimension , 0)});
}
_self.models = _self.entitys.add(model);
//this.mapmap.core.trackedEntity = this.models;
}
//数据图层
if(scene.type == "geojson"){
_self.dataSource = new dataManager(_self.viewer);
//是否有url
if(_self.Tools.strBool(scene.url)){
//是否有cmd
if(!_self.Tools.strBool(scene.cmd)){
return new Errors("layers 暂时没有封装数据 指令无效!");
}
}else{
_self.dataSource.createGeoJsonData({url:scene.url});
}
}
}
//遍历场景
for(let key in trees.scenes){
let scene = trees.scenes[key]
if(scene != undefined)
createScene(scene);
}
}
//加载地形
if(trees.terrain){
/* let terrain = new Html().loadJS('../libs/ArcGisImageServerTerrainProvider.js');
terrain.onload = function(){
setTimeout(function(){
//地形全局会有黑屏 定位到相机指定位置
_self.mapmap.core.terrainProvider = createArcGisElevation3DTerrainProvider(Cesium);
_self.mapmap.core.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees( 87.4074, 27.9254, 5756.992959404834 ),
orientation: {
heading: Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north) //东西南北朝向
pitch: Cesium.Math.toRadians(-90), // default value (looking down) //俯视仰视视觉
roll: 0.0 // default value
}
});
},500);
}*/
}
}
//显示
showTime() {
if($('.map-move-msg').css('display') == 'none'){
$('.cesium-viewer-animationContainer').css('bottom', 0 + 'px');
$('.cesium-viewer-timelineContainer').css('bottom',0 + 'px');
}else{
$('.cesium-viewer-animationContainer').css('bottom', $('.map-move-msg').height() + 'px');
$('.cesium-viewer-timelineContainer').css('bottom', $('.map-move-msg').height() + 'px');
}
$('.cesium-viewer-animationContainer').show();
$('.cesium-viewer-timelineContainer').show();
}
//隐藏
hideTime(){
$('.cesium-viewer-animationContainer').hide();
$('.cesium-viewer-timelineContainer').hide();
}
//省份数据
createProvincesBorder(){
let _self = this;
var promise = _self.viewer.dataSources.add(Cesium.GeoJsonDataSource.load(config.DATADIR + '/china.json'));
promise.then(function (dataSource) {
_self.provinceData = dataSource;
}).otherwise(function (error) {
return new Errors(error);
});
}
closeProvincesBorder(){
this.viewer.dataSources.remove(this.provinceData);
}
}