MapServer动态图层、瓦片图层ArcGIS、Cesium中加载区分

问题来源:有个网友问如何调用arcgis的api将图层组的子图层全部显示出来。
在这里插入图片描述
这里呢,他选择arcgis,所以MapImageLayer类可以满足他的需要。
MapServer 既可用动态图层方式,也可用瓦片方式加载

如何判断区分动态图层和瓦片图层

甩个链接做下区分:
动态图层
瓦片图层

首先,瓦片又区分矢量瓦片与栅格瓦片,常见的MapServer 。MapServer 既可用动态图层方式,也可用瓦片方式加载。

动态图层通常使用 Dynamic Map Service(动态地图服务)来发布。Dynamic Map Service 提供了一个动态地图图层,它会在客户端请求时动态生成地图图像。这种服务可以让用户对地图进行交互操作,如缩放、平移和查询。动态地图服务通常使用基于矢量数据的渲染方式,因此可以提供更高精度的地图显示效果。
瓦片图层通常使用 Tiled Map Service(切片地图服务)来发布。Tiled Map Service 提供了一个预先生成的地图图像集合,这些图像按照一定的规则进行分割并存储为瓦片,客户端在请求时直接获取预先生成好的瓦片图像进行拼接,以形成完整的地图。由于瓦片图层是基于预先生成的图像进行显示,因此它的渲染速度相对较快,适合于大规模地图的显示。

1.1 发布服务选择

在 ArcMap 中发布服务时,选择“根据数据动态”表示选择发布成动态图层,选择“使用缓存中的切片”表示瓦片图层。
在这里插入图片描述

1.2 从图层服务判断

通过查看 MapServer 的服务类型,可以区分动态图层和瓦片图层。如果服务类型为 Dynamic Map Service,则该服务提供的是动态地图图层,如果服务类型为 Tiled Map Service,则该服务提供的是瓦片地图图层。

1、动态图层(矢量)
Single Fused Map Cache: false
在这里插入图片描述

2、瓦片图层
Single Fused Map Cache: true

在这里插入图片描述
以上内容参考

ArcGIS和Cesium中不同图层加载所使用的API

ArcGIS

ArcGIS 的动态图层和瓦片图层使用了不同的服务类型,因此在加载时需要使用不同的对象来进行加载。

1、使用MapImageLayer API加载矢量图层

在 REST API 页面中,sublayers 参数指定了要显示的子图层 ID 号动态图层。

const layer = new MapImageLayer({
 url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/SampleWorldCities/MapServer",
  sublayers: [
    {
      id: 3,//对应自己发布的服务的图层id号
      visible: false//对可见性进行设置,非必要,可根据自己的目标效果选择
    },
    {
      id: 2,
      visible: true
    },
    {
      id: 1,
      visible: true
    },
    {
      id: 0,
      visible: true
    }
  ]
});
 map.add(layer);

MapImageLayer 类的强大,在于能够对sublayers属性进行设置
https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-MapImageLayer.html

2、使用WebTileLayerAPI加载瓦片图层

 var layer = new WebTileLayer({
    urlTemplate: "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"
  });

  map.add(layer);

Cesium

说明:Cesium原生接口仅支持,坐标系有3857、4326。但如 4490 或 4610 等经纬度图层也是可以显示的。注意瓦片不行,会报错。

1、加载矢量(动态)图层

如下图,在 Cesium 中发布的瓦片也当动态图层方式调用。需要有如下信息,Dynamic Layer
在这里插入图片描述

let imageryProvider =new Cesium.ArcGisMapServerImageryProvider({
  url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer',
  usePreCachedTilesIfAvailable: false,
   // layers: '0,2' // layer图层这里可以过滤图层的显示
  }),
  
var layer = viewer.scene.imageryLayers.addImageryProvider(layerProvider);

2、瓦片图层

// false 为动态图层
var layerProvider = new Cesium.ArcGisMapServerImageryProvider({
    usePreCachedTilesIfAvailable: true,
    url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer'
});

var layer = viewer.scene.imageryLayers.addImageryProvider(layerProvider);

或者可以通过使用 Cesium 的 WebMapTileServiceImageryProvider 对象来加载瓦片图层

var imageryProvider = new Cesium.WebMapTileServiceImageryProvider({
    url: 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/WMTS',
    layer: 'World_Imagery',
    style: 'default',
    format: 'image/jpeg',
    tileMatrixSetID: 'default028mm',
    maximumLevel: 19
});

viewer.imageryLayers.addImageryProvider(imageryProvider);

在 Cesium 中,发布的瓦片也当动态图层方式调用。需要有如下信息,Dynamic Layer

cesium调用MapServer图层

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArcGIS JavaScript API ,WMTSLayer 支持加载所有子图层的功能。可以使用 WMTSLayer 的 `layerInfos` 属性来指定要加载的子图层。 以下是一个加载 WMTSLayer 全部子图层的示例代码: ```javascript require([ "esri/layers/WMTSLayer", "esri/layers/WMTSLayerInfo", "esri/geometry/Extent", "esri/SpatialReference", "esri/Map", "esri/views/MapView", ], function(WMTSLayer, WMTSLayerInfo, Extent, SpatialReference, Map, MapView) { // 创建 WMTSLayerInfo 对象 var layerInfo = new WMTSLayerInfo({ identifier: "layer_id", tileMatrixSet: "tile_matrix_set_id", format: "image/png", style: "default", serviceMode: "KVP", tileInfo: { rows: 256, cols: 256, dpi: 96, origin: { x: -20037508.342787, y: 20037508.342787, }, spatialReference: { wkid: 102100, }, lods: [ // LOD 定义 ], }, }); // 创建 WMTSLayer 对象 var wmtsLayer = new WMTSLayer({ url: "http://your_wmts_service_url", layerInfos: [layerInfo], }); // 创建地图和视图 var map = new Map({ layers: [wmtsLayer], }); var view = new MapView({ container: "viewDiv", map: map, extent: new Extent({ xmin: -20037508.342787, ymin: -20037508.342787, xmax: 20037508.342787, ymax: 20037508.342787, spatialReference: new SpatialReference({ wkid: 102100 }), }), }); // 加载全部子图层 wmtsLayer.when(function() { var allSubLayers = []; for (var i = 0; i < wmtsLayer.allSubLayers.length; i++) { allSubLayers.push(wmtsLayer.allSubLayers.getItemAt(i)); } wmtsLayer.sublayers = allSubLayers; }); }); ``` 在上面的代码,`wmtsLayer.allSubLayers` 属性返回一个可迭代对象,包含 WMTSLayer 的所有子图层。我们可以遍历这个可迭代对象并将所有子图层添加到 `wmtsLayer.sublayers` 属性,从而加载全部子图层

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值