自arcgis server 10.1 之后就支持动态图层了, 这种特性大家可以去官网看一下: https://resources.arcgis.com/zh-cn/help/main/10.1/index.html#//00sq000000n1000000
其应用场景即为后台会生成大量的图层、如果把这些图层全部发布为服务在进行展示会大量的小号服务器资源、所以自arcgis server 10.1 就引进了动态图层的概念,下面介绍 如何加载动态矢量数据、动态加载栅格数据。
添加动态工作空间:
打开 arcgis server 管理器找到已发布的图层服务
添加完毕之后注意“保存并重新启动”。否则不会生效、之后点击 URL下面的REST URL、如出现下面表示成功
这里我创建了两个动态工作空间、一个Shapefile “labWorldShpWS”、一个 Raster “labWorldRasterWS”
添加动态矢量图层:
直接上代码
$(function() {
require(["esri/map",
"dojo/dom",
"dojo/on",
"esri/layers/DynamicLayerInfo",
"esri/layers/ArcGISDynamicMapServiceLayer",
"esri/layers/FeatureLayer",
"esri/layers/RasterLayer",
"esri/layers/TableDataSource",
"esri/layers/LayerDataSource",
"esri/layers/RasterDataSource",
"dojo/domReady!"
], function (
Map, dom, on, DynamicLayerInfo, ArcGISDynamicMapServiceLayer, FeatureLayer, RasterLayer, TableDataSource, LayerDataSource, RasterDataSource) {
var map = new Map("mapDiv");
var dynamicLayer = new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/labWorldFolder/labWorldService/MapServer"); // http://localhost:6080/arcgis/rest/services/{站点}/{服务名字}/MapServer
var baseMapLayer = new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/labWorldFolder/labWorldService/MapServer");
map.addLayer(baseMapLayer); // 添加动态底图服务
map.addLayer(dynamicLayer); // 这个图层是用来设置动态栅格图层的、因为栅格图层没有找到什么好办法去动态加载
// 添加 矢量文件
$("#btnAddShpLayer").click(function(e) {
var dataSource = new TableDataSource(); // 定义一个数据源
dataSource.workspaceId = "labWorldShpWS"; // 此处为我们设置的命名空间
dataSource.dataSourceName = "./ChinaCountyBoundary.shp"; //命名空间下面的shp
var layerSource = new LayerDataSource(); // 定义一个图层数据源
layerSource.dataSource = dataSource; // 给图层数据源赋值
//定义一个要素图层:注意链接为动态图层的地址 url: // http://localhost:6080/arcgis/rest/services/{站点}/{服务名字}/MapServer/dynamicLayer
var shpLayer = new FeatureLayer("http://localhost:6080/arcgis/rest/services/labWorldFolder/labWorldService/MapServer/dynamicLayer", {
mode: FeatureLayer.MODE_ONDEMAND,
outFields: ["*"], // 暴露所有字段
source: layerSource
});
shpLayer.refresh();
map.addLayer(shpLayer);
});
});
});
添加了一个中国县界的矢量shp文件、效果为:
添加栅格图层
添加栅格图层官方提供的API与矢量图层不一样:RasterLayer接口是对于服务而言的、并不是动态栅格图层,所以这里换了一种思路、代码如下:
// 添加 raster 数据
$("#btnAddRasterLayer").click(function() {
var dynamicLayerInfos = [];
var dynamicLayerInfo = new DynamicLayerInfo(); // 设置dynamicLayerInfo
dynamicLayerInfo.id = 1;
var dataSource = new RasterDataSource(); // 新定义栅格数据源
dataSource.workspaceId = "labWorldRasterWS";
dataSource.dataSourceName = "./test_d.img";
var layerSource = new LayerDataSource(); // 定义一个图层数据源
layerSource.dataSource = dataSource;
dynamicLayerInfo.source = layerSource; // 将这个图层数据源赋予 dynamicLayerInfo
dynamicLayerInfos.push(dynamicLayerInfo);
dynamicLayer.setDynamicLayerInfos(dynamicLayerInfos, false); // 参数 [DynamicLayerInfo], 是否不刷新
});
前面创了两个图层、一个作为底图服务图层、还有一个作为动态添加栅格的图层、这里用到的 dynamicLayerInfos 是一个数组、存放的是图层信息、如果要添加多个图层、那个把这个作为一个全局变量即可实现、添加完毕的效果如下:
完毕、大家可以多看看官方文档、我现在用的是 arcgis10.2 + arcgis server for javascript 3.26版本的、
api 地址:https://developers.arcgis.com/javascript/3/jsapi/dynamiclayerinfo-amd.html
代码地址:https://download.csdn.net/download/qq_37188778/10829069