原文链接及内容

效果如下图所示:

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/**
* 关于wsenDegrees属性,
* 请参考:https://github.com/AnalyticalGraphicsInc/czml-writer/wiki/RectangleCoordinates中的定义
*
*/

//显然为两个紧挨着的红色矩形和蓝色矩形
const czml1 = [
{
id: "document",
name: "CZML Geometries: Rectangle",
version: "1.0",
},
{
rectangle: {
coordinates: {
wsenDegrees: [-120, 40, -110, 50],
},
fill: true,
material: {
solidColor: {
color: {
rgba: [255, 0, 0, 255],
},
},
},
},
},
{
rectangle: {
coordinates: {
wsenDegrees: [-110, 40, -100, 50],
},
fill: true,
material: {
solidColor: {
color: {
rgba: [0, 0, 255, 255],
},
},
},
},
},
];

//显然为两个紧挨着的黄色矩形和水蓝色矩形。
const czml2 = [
{
id: "document",
name: "CZML Geometries: Rectangle",
version: "1.0",
},
{
rectangle: {
coordinates: {
wsenDegrees: [-120, 45, -110, 55],
},
fill: true,
material: {
solidColor: {
color: {
rgba: [255, 255, 0, 255],
},
},
},
},
},
{
rectangle: {
coordinates: {
wsenDegrees: [-110, 45, -100, 55],
},
fill: true,
material: {
solidColor: {
color: {
rgba: [0, 255, 255, 255],
},
},
},
},
},
];

const viewer = new Cesium.Viewer("cesiumContainer", {
geocoder: false,
sceneModePicker: false,
homeButton: false,
navigationHelpButton: false,
baseLayerPicker: false,
navigationInstructionsInitiallyVisible: false,
fullscreenButton: false,
selectionIndicator: false,
skyBox: false,
timeline: false,
animation: false,
shouldAnimate: true,
});
viewer.cesiumWidget.creditContainer.style.display = "none";
const promise1 = Cesium.CzmlDataSource.load(czml1);
viewer.dataSources.add(promise1);
const promise2 = Cesium.CzmlDataSource.load(czml2);
viewer.dataSources.add(promise2);

/**
* raise方法表示将数据源在集合中向上移动一个位置。
* lower方法表示将数据源在集合中的位置向下移动一位。
*/
Sandcastle.addToolbarButton("Swap(交换)", function () {
Promise.all([promise1, promise2]).then(function (results) {
const ds1 = results[0];
const ds2 = results[1];
if (viewer.dataSources.indexOf(ds1) === 0) {
viewer.dataSources.raise(ds1);
} else {
viewer.dataSources.lower(ds1);
}
});
});