Skip to content

Commit 5e1dce4

Browse files
author
潘卓然Y7000P
committed
【SDK】【新增】【Cesium设置6大模块分类】
1 parent 9e1a9b8 commit 5e1dce4

21 files changed

Lines changed: 2697 additions & 3434 deletions

src/cesiumjs/layer/BaseLayer.js

Lines changed: 72 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import { CesiumZondy } from '../core/Base';
44
* @author 基础平台研发中心·冯桂英
55
* @class BaseLayer
66
* @category BaseLayer
7-
* @classdesc BaseLayer
7+
* @classdesc BaseLayer 数据服务基类
88
* @description 图层管理基类,实现图层公共方法
9-
* @param option.viewer = viewer 场景视图
9+
* @param option.viewer 场景视图
1010
*/
1111
export default class BaseLayer {
1212
constructor(option) {
@@ -35,7 +35,7 @@ export default class BaseLayer {
3535
}
3636

3737
/**
38-
* 场景
38+
* 场景
3939
* @memberof BaseLayer.prototype
4040
* @type {Scene}
4141
* @readonly
@@ -49,58 +49,70 @@ export default class BaseLayer {
4949
* @param {Object} layer 图层对象
5050
*/
5151
zoomToM3dLayer(layer) {
52-
let boundingSphere = layer.boundingSphere;
53-
this.viewer.camera.viewBoundingSphere(
54-
boundingSphere,
55-
new Cesium.HeadingPitchRange(0.0, -0.5, boundingSphere.radius)
56-
);
52+
const { boundingSphere } = layer;
53+
this.viewer.camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(0.0, -0.5, boundingSphere.radius));
5754
this.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
5855
}
5956

60-
/***
57+
/**
6158
* 移除m3d 图层
6259
*/
6360
removeM3dLayer(layer) {
6461
this.viewer.scene.primitives.remove(layer);
6562
}
6663

6764
/**
68-
* 移除添加的所有m3d文档,layers为图层数组
65+
* 移除添加的文档
6966
*/
7067
removeDocs(layers) {
7168
if (!Cesium.defined(layers)) {
7269
return;
7370
}
74-
for (var i in layers) {
71+
for (let i = 0; i < layers.length; i += 1) {
7572
this.viewer.scene.primitives.remove(layers[i]);
7673
}
77-
return;
74+
}
75+
76+
/**
77+
* 通用添加影像图层
78+
* @param {Imagelayer} google等图层
79+
* @returns {Imagelayer} 返回瓦片层
80+
*/
81+
addImageLayer(imagelayer) {
82+
const imagelayers = this.viewer.imageryLayers;
83+
if (imagelayers !== null && imagelayers !== undefined) {
84+
if (!imagelayers.contains(imagelayer)) {
85+
return imagelayers.addImageryProvider(imagelayer);
86+
}
87+
}
88+
return undefined;
7889
}
7990

8091
/**
8192
* 添加全球网格信息
82-
* @returns 网格图层
93+
* @returns {ImageryLayer} 网格图层
8394
*/
8495
addGridInfo() {
8596
if (undefined === this._tileGridLayer) {
86-
let tileGridLayer = new Cesium.TileCoordinatesImageryProvider({
97+
const tileGridLayer = new Cesium.TileCoordinatesImageryProvider({
8798
showLonlats: true
8899
});
89-
let imagelayers = this.viewer.imageryLayers;
100+
const imagelayers = this.viewer.imageryLayers;
90101
if (imagelayers !== null && imagelayers !== undefined) {
91102
if (!imagelayers.contains(tileGridLayer)) {
92103
return imagelayers.addImageryProvider(tileGridLayer);
93104
}
94105
}
95106
}
107+
return undefined;
96108
}
97109

98110
/**
99111
* 移除全球网格信息
100-
* @param {Object} gridlayers 网格图层
112+
* @param {ImageryLayer} gridlayers 网格图层
101113
*/
102114
removeGridInfo(gridlayers) {
103-
let imagelayers = this.viewer.imageryLayers;
115+
const imagelayers = this.viewer.imageryLayers;
104116
if (imagelayers !== null && imagelayers !== undefined) {
105117
if (imagelayers.contains(gridlayers)) {
106118
imagelayers.remove(gridlayers, true);
@@ -110,14 +122,14 @@ export default class BaseLayer {
110122

111123
/**
112124
* 通用删除影像图层
113-
* @param {imagelayer} google等图层,其为addImageryProvider返回的值
114-
* @param {boolean} isdestroy,是否销毁图层 在图层需要频繁切换的情况下,isdestroy最好取false
125+
* @param {Imagelayer} google等图层其为addImageryProvider返回的值
126+
* @param {Boolean} isdestroy 是否销毁图层 在图层需要频繁切换的情况下,isdestroy最好取false
115127
* @example
116128
* let tilelayer = tile.appendGoogleMap({ptype:'m@207000000'});
117129
* tile.removeImageLayer(tilelayer, true);
118130
*/
119131
removeImageLayer(imagelayer, isdestroy) {
120-
let imagelayers = this.viewer.imageryLayers;
132+
const imagelayers = this.viewer.imageryLayers;
121133
if (imagelayers !== null && imagelayers !== undefined) {
122134
if (imagelayers.contains(imagelayer)) {
123135
imagelayers.remove(imagelayer, isdestroy);
@@ -127,14 +139,52 @@ export default class BaseLayer {
127139

128140
/**
129141
* 清空影像图层,包括地球表面
130-
* @param {boolean} isdestroy,是否销毁图层
142+
* @param {Boolean} isdestroy 是否销毁图层
131143
*/
132144
removeAllImageLayers(isdestroy) {
133-
var imagelayers = this.viewer.imageryLayers;
145+
const imagelayers = this.viewer.imageryLayers;
134146
if (imagelayers !== null && imagelayers !== undefined) {
135147
imagelayers.removeAll(isdestroy);
136148
}
137149
}
150+
151+
/**
152+
* 移除实体
153+
* @param {Entity} entity 实体对象
154+
*/
155+
removeEntity(entity) {
156+
this.viewer.entities.remove(entity);
157+
}
158+
159+
/**
160+
* 移除所有实体
161+
*/
162+
removeAllEntities() {
163+
this.viewer.entities.removeAll();
164+
}
165+
166+
/**
167+
* 移除primitive实体
168+
* @param {Primitive} 移除对象
169+
*/
170+
removePrimitive(primitive) {
171+
this.scene.primitives.remove(primitive);
172+
}
173+
174+
/**
175+
* 移除全部实体
176+
*/
177+
removeAllPrimitives() {
178+
this.scene.primitives.removeAll();
179+
}
180+
181+
/**
182+
* 移除地形图层
183+
*/
184+
removeTerrain() {
185+
const ElliProvider = new Cesium.EllipsoidTerrainProvider();
186+
this.viewer.terrainProvider = ElliProvider;
187+
}
138188
}
139189

140190
CesiumZondy.Layer.BaseLayer = BaseLayer;

src/cesiumjs/layer/LayerManager.js

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
import { CesiumZondy } from '../core/Base';
2+
3+
import LayerType from './LayerType';
4+
import M3DLayer from './M3DLayer';
5+
import TerrainLayer from './TerrainLayer';
6+
import TilesLayer from './TilesLayer';
7+
import BaseLayer from './BaseLayer';
8+
9+
/**
10+
* @author 三维基础平台研发中心·冯桂英
11+
* @class module:客户端数据服务.LayerManager
12+
* @category LayerManager
13+
* @classdesc LayerManager 图层管理类
14+
* @description 图层管理类,处理场景相关操作
15+
* @param options.viewer 场景视图
16+
*/
17+
export default class LayerManager extends BaseLayer {
18+
constructor(optionsParam) {
19+
const options = Cesium.defaultValue(optionsParam, {});
20+
super(options);
21+
}
22+
23+
/**
24+
* 添加三维场景文档服务
25+
* @function module:客户端数据服务.LayerManager.prototype.append
26+
* @param {String} url 文档地址
27+
* @param {Object} optionsParam 参数
28+
* @param {Boolean} [optionsParam.autoReset = true] 是否自动定位
29+
* @param {Boolean} [optionsParam.synchronous = true] 是否异步请求
30+
* @param {Function} [optionsParam.loaded = function] 回调函数
31+
* @param {DefaultProxy} [optionsParam.proxy = defaultProxy] 代理
32+
* @example
33+
* let layerManager = new LayerManager(view);
34+
* function callBackfunction(layer){
35+
* console.log(layer)
36+
* }
37+
* layerManager.append('http://192.168.90.102:6163/igs/rest/g3d/1218示例', {
38+
* autoReset:false,
39+
* synchronous:true,
40+
* loaded:callBackfunction
41+
* });
42+
* //添加地形
43+
* let terrainProivder = layerManager.append('http://develop.smaryun.com:6163/igs/rest/g3d/terrain');
44+
*/
45+
append(url, optionsParam) {
46+
if (!Cesium.defined(url)) {
47+
return new Cesium.DeveloperError('必须指定url');
48+
}
49+
const options = Cesium.defaultValue(optionsParam, {});
50+
let synchronous = true;
51+
const baseUrl = url;
52+
let resource;
53+
let proxy;
54+
const docLayers = [];
55+
56+
if (Cesium.defined(options)) {
57+
if (Cesium.defined(options.proxy)) {
58+
// 不放在defaultValue中 new 会影响性能
59+
proxy = new Cesium.DefaultProxy(options.proxy);
60+
}
61+
Cesium.defaultValue(options.proxy, undefined);
62+
synchronous = Cesium.defaultValue(options.synchronous, true);
63+
}
64+
65+
const _callBack = (params) => {
66+
const _params = params;
67+
if (Cesium.defined(options.loaded) && typeof options.loaded === 'function') {
68+
options.loaded(_params);
69+
}
70+
};
71+
72+
let tileset = null;
73+
const parseDocInfo = (info) => {
74+
if (info !== undefined && info.sceneInfos.length > 0) {
75+
const { layers } = info.sceneInfos[0];
76+
layers.forEach((layer) => {
77+
const { layerRenderIndex, layerIndex, gdbpUrl, layerType, isVisible } = layer;
78+
const type = parseInt(layerType, 10);
79+
switch (type) {
80+
case LayerType.TERRAINLAYER: {
81+
const terrainLayer = new TerrainLayer({
82+
viewer: this.viewer
83+
});
84+
const opt = {
85+
range: layer.range,
86+
scale: layer.terrainLayer.elevationScale
87+
};
88+
Object.extend(options, opt);
89+
const layerRes = terrainLayer.appendTerrainLayer(baseUrl, 0, layerRenderIndex, proxy, options);
90+
docLayers.push(layerRes);
91+
break;
92+
}
93+
case LayerType.TILEIMAGELAYER: {
94+
const tileLayer = new TilesLayer({
95+
viewer: this.viewer
96+
});
97+
const doc = tileLayer.append3DDocTileLayer(baseUrl, 0, layerRenderIndex, proxy);
98+
docLayers.push(doc);
99+
break;
100+
}
101+
case LayerType.MODELLAYER:
102+
case LayerType.M3DLAYER: {
103+
const m3d = new M3DLayer({ viewer: this.viewer });
104+
tileset = m3d.appendM3DLayer(baseUrl, layerRenderIndex, layerIndex, gdbpUrl, isVisible, true, options);
105+
docLayers.push(tileset);
106+
tileset.readyPromise.then(_callBack);
107+
break;
108+
}
109+
default:
110+
break;
111+
}
112+
});
113+
}
114+
};
115+
116+
if (synchronous) {
117+
resource = new Cesium.Resource({
118+
url: `${baseUrl}/GetDocInfo`,
119+
proxy
120+
});
121+
resource.fetchJson().then((json) => parseDocInfo(json));
122+
} else {
123+
const request = new Cesium.XMLHttpRequest();
124+
request.open('GET', `${baseUrl}/GetDocInfo`, false);
125+
request.send(null);
126+
if (request.status === 200) {
127+
const info = Cesium.JSON.parse(request.responseText);
128+
if (info) {
129+
parseDocInfo(info);
130+
}
131+
}
132+
}
133+
return docLayers;
134+
}
135+
}
136+
137+
CesiumZondy.Layer.LayerManager = LayerManager;

src/cesiumjs/layer/LayerType.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {CesiumZondy} from "../core/Base";
1+
import { CesiumZondy } from '../core/Base';
22

33
/**
44
* 描述图层类型.
@@ -8,7 +8,7 @@ import {CesiumZondy} from "../core/Base";
88
*
99
* @see Layer#type
1010
*/
11-
let LayerType = {
11+
const LayerType = {
1212
/**
1313
* 未知类型.
1414
*
@@ -55,7 +55,7 @@ let LayerType = {
5555
* @type {Number}
5656
* @constant
5757
*/
58-
M3DLAYER: 10,
58+
M3DLAYER: 10
5959
};
6060

6161
export default Object.freeze(LayerType);

0 commit comments

Comments
 (0)