如何更改 CesiumJS 查看器的底层 url

how to change a CesiumJS viewer's baselayer url

我正在使用 CesiumJS 实例显示地球底图,使用源 A 中的 imageryProvider。

var viewer = new Cesium.Viewer('cesiumContainer', imageryProvider:providerA);

现在,在使用查看器时,我希望能够更改此地图以在特定事件中从 providerB 获取图像。

我试过:

viewer.scene.imageryLayers.get(0).imageryProvider.url = providerB.url

然而,这似乎不起作用,而且感觉也很像 hack。 我在 Cesium 的文档中找不到任何内容。 如果不重新启动/重新创建查看器实例,这是否完全可行? 我知道有一个 Cesium.BaseLayerPicker (https://cesium.com/docs/cesiumjs-ref-doc/BaseLayerPicker.html) 但是我看不到这个选择器在 "select" 上调用了什么方法)

非常感谢。

当用户选择新层时,BaseLayerPicker 小部件calls this code

该代码块中有很多样板小部件管理,但为了您的利益,只有几行是关键的。首先,搜索并删除旧的现有活动图像图层:

    imageryLayers.remove(layer);

然后,构建一个新的图像提供者并将其添加到索引 0,即第一个位置,即基础图像层:

    imageryLayers.addImageryProvider(newProviders, 0);

您可以直接更改提供者的 URL,但您还应该更改适当的参数(如果是 WMS,则为“layers”、“layer”、“style”、“format”、“tileMatrixSetID”。 .. 在 WMTS 的情况下)取决于提供商的类型(WMS 或 WMTS)。