原文链接及内容

效果如下图所示:

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<style>
@import url(../templates/bucket.css);

#slider {
position: absolute;
left: 50%;
top: 0px;
background-color: #d3d3d3;
width: 2px;
height: 100%;
z-index: 9999;
}

#slider:hover {
cursor: ew-resize;
}
</style>

<div id="cesiumContainer" class="fullSize">
<div id="slider"></div>
</div>
<div id="loadingOverlay"><h1>加载中...</h1></div>
<div id="toolbar"></div>
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
const viewer = new Cesium.Viewer("cesiumContainer", {
geocoder: false,
homeButton: false,
sceneModePicker: false,
baseLayerPicker: false,
navigationHelpButton: false,
navigationInstructionsInitiallyVisible: false,
animation: false,
timeline: false,
fullscreenButton: false,
selectionIndicator: false,
skyBox: false,
shouldAnimate: true,
infoBox: false,
});
viewer.cesiumWidget.creditContainer.style.display = "none";

viewer.camera.flyTo({
destination: new Cesium.Rectangle.fromDegrees(-84, 43, -80, 47),
});

//移除所有图层
const layers = viewer.imageryLayers;
layers.removeAll();

//加载两个相同的图层,分别设置为不同的纹理过滤,以便对比效果。
//加载API内置的NaturalEarthII影像图层
const layerLinear = Cesium.ImageryLayer.fromProviderAsync(
Cesium.TileMapServiceImageryProvider.fromUrl(
Cesium.buildModuleUrl("Assets/Textures/NaturalEarthII"),
),
);
layers.add(layerLinear);

const layerNearest = Cesium.ImageryLayer.fromProviderAsync(
Cesium.TileMapServiceImageryProvider.fromUrl(
Cesium.buildModuleUrl("Assets/Textures/NaturalEarthII"),
),
);
layers.add(layerNearest);

// 为图层的纹理设置缩小和放大的过滤方式,默认值为LINEAR。
/**
* minificationFilter属性:应用于此图层的 TextureMinificationFilter 。
* 可能的值为 TextureMinificationFilter.LINEAR (默认值)和 TextureMinificationFilter.NEAREST 。
* 要(使该属性)生效,此属性必须在添加图层后立即设置。一旦加载了纹理,就无法更改所使用的纹理过滤器。
*
* minification本身是缩小,缩小倍数的意思。
*
* TextureMinificationFilter.NEAREST:通过返回最近的像素来采样纹理。
*/
layerNearest.minificationFilter = Cesium.TextureMinificationFilter.NEAREST;
/**
* magnificationFilter属性:应用于此图层的 TextureMagnificationFilter 。
* 可能的值为 TextureMagnificationFilter.LINEAR (默认值)和 TextureMagnificationFilter.NEAREST 。
* 要在图层添加后立即设置此属性,才能生效。一旦加载了纹理,就无法更改所使用的纹理过滤器。
*
* magnification本身是放大倍率(数),望远镜放大倍数的意思。
*
* TextureMagnificationFilter.NEAREST:通过返回最近的像素来采样纹理。
*/
layerNearest.magnificationFilter = Cesium.TextureMagnificationFilter.NEAREST;

/**
* 下面的代码为图层添加了一个分割器,使得纹理过滤的效果变得明显。
* SplitDirection:可以理解为应用于该图层的一个分割器。
* SplitDirection.RIGHT:仅在分割器的右侧显示。
*/
layerNearest.splitDirection = Cesium.SplitDirection.RIGHT;

const slider = document.getElementById("slider");
viewer.scene.splitPosition = slider.offsetLeft / slider.parentElement.offsetWidth;

let dragStartX = 0;

document.getElementById("slider").addEventListener("mousedown", mouseDown, false);
window.addEventListener("mouseup", mouseUp, false);

function mouseUp() {
window.removeEventListener("mousemove", sliderMove, true);
}

function mouseDown(e) {
const slider = document.getElementById("slider");
dragStartX = e.clientX - slider.offsetLeft;
window.addEventListener("mousemove", sliderMove, true);
}

function sliderMove(e) {
const slider = document.getElementById("slider");
const splitPosition =
(e.clientX - dragStartX) / slider.parentElement.offsetWidth;
slider.style.left = `${100.0 * splitPosition}%`;
viewer.scene.splitPosition = splitPosition;
}