12 Cesium—影像服务-BaseLayerPicker

文章中所有操作均是在 Cesium 1.91 版本下进行的,其它版本差异请自行适配

BaseLayerPicker组件

在 Cesium 中图层操作是最基本的操作,那就需要学习一下 BaseLayerPicker 组件。这里主要介绍内置的 BaseLayerPicker 的使用和如何自定义实现 BaseLayerPicker。

内置的BaseLayerPicker

在初始化 Viewer 时,将 baseLayerPicker 设置为 true 即可显示 BaseLayerPicker 控件。然后可以通过将 viewer.baseLayerPicker.viewModel.selectedImagery 设置为 viewer.baseLayerPicker.viewModel.imageryProviderViewModels[?] 来设置 BaseLayerPicker 的默认数据源,这里的 ? 号代表数字,就是选择初始化为 [?] 号图层,这里指的是下标。

代码片段:

const viewer = new Cesium.Viewer("cesiumContainer", {
    //隐藏图层选择
    baseLayerPicker: true // 这里设置为true,默认就是true
});

//设置默认图层数据,比如设置了下标8的图层数据
viewer.baseLayerPicker.viewModel.selectedImagery = viewer.baseLayerPicker.viewModel.imageryProviderViewModels[8];

//设置初始位置
viewer.camera.setView({
    destination: Cesium.Cartesian3.fromDegrees(116.75199, 36.55358, 20000000)
});

效果如下:

自定义BaseLayerPicker

自定义 BaseLayerPicker,其实粗浅的解释就是将所有定义的影像服务都追到加一个容器中,然后将这个容器定义到 Viewer 中即可。

我这里没有太好的影像服务,所以就拿了两个天地图的影像服务为例子(感谢天地图),一个是矢量底图,一个是矢量标记。最关键的地方,在定义 Viewer 的时候,注意两点:baseLayerPicker 设置为 true 和 增加 imageryProviderViewModels 属性,将设置好的容器数组配置上去。

代码片段:

//天地图
var td_ken = "天地图授权的key";

//WebMapTileServiceImageryProvider 天地图 矢量底图
var td_vec_w = "http://{s}.tianditu.gov.cn/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0" +
    "&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
    "&style=default&format=tiles&tk=" + td_ken;

//vecProvider后面用到
var vecProvider = new window.Cesium.WebMapTileServiceImageryProvider({
    url: td_vec_w,
    layer: "vec_w",
    style: "default",
    format: "tiles",
    tileMatrixSetID: "image/jpeg",
    subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"],
    minimumLevel: 0,
    maximumLevel: 18
});

//WebMapTileServiceImageryProvider 天地图 矢量注记
var td_cva_w = "http://{s}.tianditu.gov.cn/cva_w/wmts?service=wmts&request=GetTile&version=1.0.0" +
    "&LAYER=cva&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
    "&style=default&format=tiles&tk=" + td_ken;

//cvaProvider后面用到
var cvaProvider = new window.Cesium.WebMapTileServiceImageryProvider({
    url: td_cva_w,
    layer: "cva_w",
    style: "default",
    format: "tiles",
    tileMatrixSetID: "image/jpeg",
    subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"],
    minimumLevel: 0,
    maximumLevel: 18
});

//-------设置ProviderViewModel-----------------------
var providerViewModels = []; //用来装各种影像服务

//将自定义的影像追加到providerViewModels中
var tiandiveaProviderModel = new Cesium.ProviderViewModel({
    name: "天地图矢量影像",
    iconUrl: "images/tiandi.png", //自定义了一个天地图小图标
    tooltip: "天地图影像 矢量底图",
    creationFunction: function(){
        return vecProvider; //对应之前定义的变量名
    }
});
providerViewModels.push(tiandiveaProviderModel); //追加影像服务

var tiandicvaProviderModel = new Cesium.ProviderViewModel({
    name: "天地图标记影像",
    iconUrl: "images/tiandi.png", //自定义了一个天地图小图标
    tooltip: "天地图影像 矢量标记",
    creationFunction: function(){
        return cvaProvider; //对应之前定义的变量名
    }
});
providerViewModels.push(tiandicvaProviderModel); //追加影像服务

//定义Viewer
const viewer = new Cesium.Viewer('cesiumContainer', {
    baseLayerPicker: true,
    imageryProviderViewModels: providerViewModels//自定义扩展
});

效果如下:

### 配置Cesium使用离线本地影像瓦片 为了在Cesium中配置并使用离线本地存储的影像瓦片,可以按照以下方式设置`UrlTemplateImageryProvider`来指定本地瓦片路径。这使得能够通过定义模板字符串中的参数{x}、{y}和{z}访问不同缩放级别的图像切片。 ```javascript var viewer = new Cesium.Viewer('cesiumContainer', { animation: false, baseLayerPicker: true, geocoder: true, timeline: false, sceneModePicker: true, navigationHelpButton: false, infoBox: true, imageryProvider: new Cesium.UrlTemplateImageryProvider({ url: './tiles/{z}/{x}/{y}.png', fileExtension: 'png' }) }); ``` 上述代码片段展示了如何创建一个新的`Viewer`实例,并指定了一个基于URL模板的影像提供者用于加载来自本地磁盘上的瓦片资源[^3]。这里的`./tiles/`应当替换为实际存放瓦片文件的位置;而`{z}`代表缩放级别,`{x}`和`{y}`则分别表示经度方向上横向排列的列数与纬度方向纵向排列的行号。 对于更复杂的场景,如果需要支持多种类型的瓦片源或是自定义瓦片方案,则可能还需要调整其他选项或采用不同的类如`WebMapServiceImageryProvider`等来进行适配。当涉及到具体地理信息系统(GIS)服务器集成时(例如GeoServer),可以通过修改WMS请求地址和服务端配置实现离线数据的支持[^1]。 此外,考虑到性能优化方面的需求,在构建离线应用之前应该预先准备好所需的全部瓦片集,并合理规划缓存策略以减少不必要的网络请求开销。同时也要注意确保所使用的坐标系匹配目标地区的标准投影方法以便获得准确的地图展示效果[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WorkLee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值