ArcGIS server使用动态工作空间的服务发布及利用ArcGIS API for Javascript添加动态图层
本篇介绍下 利用arcgis server如何发布使用动态工作空间的服务以及在前端利用ArcGIS API for Javascript添加动态图层。
所谓动态图层它是需要依附于一个开启动态图层的地图服务,然后把数据资源所在位置注册为这个地图服务的动态工作空间(shape、raster、filegdb、database等),也就是将动态工作空间寄宿到该服务里,在Web前端调用的时候指定图层关联的数据源进行符号化、查询等操作。
具体过程:
1、启用动态工作空间
添加动态工作空间有两种方式:
方法一: 在发布地图服务的时候点击Mapping选项卡里的Manage注册一个工作空间
(1)共享地图服务
(2)动态工作空间的添加,切换到地图Mapping选项卡,点击manage,点击添加。
(3)工作空间类型可以是四种类型:文件地理数据库、企业级数据库、shapefile文件夹、栅格文件夹,本篇示例选择file geodatabase类型。
填写工作空间ID 及连接字符串
(4)发布的时候如果这时候点击分析会看到有一个报错:Dynamic workspace with workspace ID [FileGDBWorkspaceID] is not registered with the server,这个说明工作空间中的数据没有注册,此时可以双击错误进行注册,或者打开server properties窗口进行注册,如下图所示:
(5)发布服务
方法二:
也可以对之前已经发布的地图服务,在ArcGIS Server Manager对应服务的功能选项卡里启用添加动态工作空间,如下图所示
点击保存并重新启动才能生效
(6)可以在服务的rest地址去验证下动态工作空间是否成功发布,进入服务的地址,点击下方的 Dynamic Layer,进入测试页面:
输入动态图层json字符串:
点击 get dynamic Layer ,可以看到已经验证成功,
web前端利用arcgis api for javascript进行调用,
示例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no"/>
<title>test</title>
<link rel="stylesheet" href="https://js.arcgis.com/4.14/esri/themes/light/main.css"/>
<script src="https://js.arcgis.com/4.14/init.js"></script>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<script>
require([
"esri/Map",
"esri/views/MapView",
"esri/views/SceneView",
"esri/layers/FeatureLayer",
"esri/layers/MapImageLayer",
"esri/widgets/Legend"
], function (Map, MapView, SceneView, FeatureLayer, MapImageLayer, Legend) {
var map = new Map({
basemap:"osm"
});
var view = new MapView({
container: "viewDiv",
map: map,
zoom: 3
});
var layer= new MapImageLayer({
url:"https://wl.arcgisonline.cn/server/rest/services/wl/dttc/MapServer",
sublayers: [
{
title: 'datatable',
id: 0,
refreshInterval: 0.1,
renderer: renderer,
opacity: 0.75,
source: {
type: "data-layer",
dataSource: {
type: "join-table",
leftTableSource: {
type: "map-layer",
mapLayerId: 0
},
rightTableSource: {
type: "data-layer",
dataSource: {
type: "table",
workspaceId: "FileGDBWorkspaceID",
dataSourceName: "datatable"
}
},
leftTableKey: "id",
rightTableKey: "id",
joinType: "left-outer-join"
}
}
}
]
});
map.add(layer);
var renderer = {
type: "class-breaks", // autocasts as new ClassBreaksRenderer()
field: "datatable.PM10",
classBreakInfos: [
{
minValue: 0,
maxValue: 10,
symbol: symbolf("#f8e3c2"),
label: "0 - 1.26%"
},
{
minValue: 10,
maxValue: 20,
symbol: symbolf("#e5998c"),
label: "1.26 - 2.6%"
},
{
minValue: 20,
maxValue: 50,
symbol: symbolf("#d86868"),
label: "2.6 - 15%"
},
{
minValue: 50,
maxValue: 100,
symbol: symbolf("#9b3557"),
label: "15 - 50%"
}
]
};
function symbolf(color) {
return {
type: "simple-fill",
color: color,
outline: {
width: 0.5,
color: [255, 255, 255, 0.4]
},
style: "solid"
};
}
view.when(function () {
var legend = new Legend({
view: view
});
view.ui.add(legend, "bottom-left");
});
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>