虽然 ArcGIS MapServer 地址不区分动态图层和瓦片,但还是有差异的,详见《ArcGIS MapServer 区分动态图层(矢量) 和 瓦片》
1. 添加
1.1. 动态图层
全部显示
// 默认显示全部
var layerProvider = new Cesium.ArcGisMapServerImageryProvider({
url: 'http://localhost:6080/arcgis/rest/services/SampleWorldCities/MapServer'
});
// 添加
var layer = viewer.scene.imageryLayers.addImageryProvider(layerProvider);
可过滤显示
// 方式一:显示过滤图层,通过 url 设置。多个图层用英文逗号隔开
var layerProvider = new Cesium.ArcGisMapServerImageryProvider({
url: 'http://localhost:6080/arcgis/rest/services/SampleWorldCities/MapServer/export?layers=show:0,2',
});
// 方式二:显示过滤图层,使用属性 layers 设置。多个图层用英文逗号隔开
var layerProvider = new Cesium.ArcGisMapServerImageryProvider({
url: 'http://localhost:6080/arcgis/rest/services/SampleWorldCities/MapServer',
layers: '0,2'
});
// 添加
var layer = viewer.scene.imageryLayers.addImageryProvider(layerProvider);
下图为请求的 url 说明:Cesium原生接口仅支持,坐标系有3857、4326。但如 4490 或 4610 等经纬度图层也是可以显示的。注意瓦片不行,会报错。
1.2. 瓦片
其实可以看出这里的 url 和上面的动态图层显示全部是一样的。因为 MapServer 不区分动态图层和瓦片的 url。且属性 layers 过滤图层对瓦片无效,瓦片是已裁剪好的缓存图。
// 瓦片 url
var layerProvider = new Cesium.ArcGisMapServerImageryProvider({
url: 'http://localhost:6080/arcgis/rest/services/SampleWorldCities/MapServer'
});
// 添加
var layer = viewer.scene.imageryLayers.addImageryProvider(layerProvider);
但请求还是有差异的
投影说明:对非 3857或4326是不可用,会报如下错误。虽然网上已有支持自定义图层,但未验证。
1.3 混合
也就是 MapServer 即可用动态图层方式,也可用瓦片方式。需要设置,详见 API
动态图层
// false 为动态图层
var layerProvider = new Cesium.ArcGisMapServerImageryProvider({
usePreCachedTilesIfAvailable: false,
url: 'http://localhost:6080/arcgis/rest/services/SampleWorldCities/MapServer'
});
瓦片
// true 为瓦片
var layerProvider = new Cesium.ArcGisMapServerImageryProvider({
usePreCachedTilesIfAvailable: true,
url: 'http://localhost:6080/arcgis/rest/services/SampleWorldCities/MapServer'
});
如何判断 MapServer 即可当动态图层有可当瓦片使用呢?详见《ArcGIS MapServer 区分动态图层(矢量) 和 瓦片》
2. 删除
// 不区分动态图层和瓦片
viewer.imageryLayers.remove(layer);
3. 图层透明度
// 不区分动态图层和瓦片。0 - 1 之间, 0 为全透明、1 为不透明
layer.alpha = 0.5;
4. 隐藏与显示
// 不区分动态图层和瓦片显示
layer.show = true;
// 隐藏
layer.show = false;