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//自定义扩展
});

效果如下:

### 关于ArcGIS License Server无法启动的解决方案 当遇到ArcGIS License Server无法启动的情况时,可以从以下几个方面排查并解决问题: #### 1. **检查网络配置** 确保License Server所在的计算机能够被其他客户端正常访问。如果是在局域网环境中部署了ArcGIS Server Local,则需要确认该环境下的网络设置是否允许远程连接AO组件[^1]。 #### 2. **验证服务状态** 检查ArcGIS Server Object Manager (SOM) 的运行情况。通常情况下,在Host SOM机器上需将此服务更改为由本地系统账户登录,并重启相关服务来恢复其正常工作流程[^2]。 #### 3. **审查日志文件** 查看ArcGIS License Manager的日志记录,寻找任何可能指示错误原因的信息。这些日志可以帮助识别具体是什么阻止了许可证服务器的成功初始化。 #### 4. **权限问题** 确认用于启动ArcGIS License Server的服务账号具有足够的权限执行所需操作。这包括但不限于读取/写入特定目录的权利以及与其他必要进程通信的能力。 #### 5. **软件版本兼容性** 保证所使用的ArcGIS产品及其依赖项之间存在良好的版本匹配度。不一致可能会导致意外行为或完全失败激活license server的功能。 #### 示例代码片段:修改服务登录身份 以下是更改Windows服务登录凭据的一个简单PowerShell脚本例子: ```powershell $serviceName = "ArcGISServerObjectManager" $newUsername = ".\LocalSystemUser" # 替换为实际用户名 $newPassword = ConvertTo-SecureString "" -AsPlainText -Force Set-Service -Name $serviceName -StartupType Automatic New-ServiceCredential -ServiceName $serviceName -Account $newUsername -Password $newPassword Restart-Service -Name $serviceName ``` 上述脚本仅作为示范用途,请依据实际情况调整参数值后再实施。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WorkLee

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

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

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

打赏作者

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

抵扣说明:

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

余额充值