切换子图层可见性
这个示例演示了如何使用 MapImageLayer 的子图层以及切换他们的可见性。
程序完整源代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<title>MapImageLayer - Toggle sublayer visibility - 4.5</title>
<link rel="stylesheet" href="https://js.arcgis.com/4.5/esri/css/main.css">
<script src="https://js.arcgis.com/4.5/"></script>
<script>
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/MapImageLayer",
"dojo/on",
"dojo/domReady!"
],
function(
Map, MapView, MapImageLayer, on
) {
/*****************************************************************
* 为动态数据图层创建渲染器
*****************************************************************/
var renderer = {
type: "simple",
symbol: {
type: "simple-line",
color: [255, 255, 255, 0.5],
width: 0.75,
style: "long-dash-dot-dot"
}
};
/*****************************************************************
* 创建一个 MapImageLayer 示例,该示例指向一个包含美国城市、县、州和高速路的地图。
*
* 为每个图层定义一个可见的子图层
*
*****************************************************************/
var layer = new MapImageLayer({
url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer",
sublayers: [
{
id: 2,
visible: true
}, {
id: 4,
visible: false,
title: "Railroads",
renderer: renderer,
source: {
// 指示子层的来源是动态数据图层
type: "data-layer",
dataSource: {//定义图层数据来源 在本示例中数据来自 一个文件地理数据库的 要素类表
type: "table",
// 工作空间名
workspaceId: "MyDatabaseWorkspaceIDSSR2",
// 表名
dataSourceName: "ss6.gdb.Railroads"
}
}
}, {
id: 1,
visible: true
}, {
id: 0,
visible: true
}]
});
/*****************************************************************
* 添加图层到地图
*****************************************************************/
var map = new Map({
basemap: "dark-gray",
layers: [layer]
});
var view = new MapView({
container: "viewDiv",
map: map,
zoom: 4,
center: [-99, 39]
});
/*****************************************************************
* 图层加载更新万册完成之后,指示出可见图层
*****************************************************************/
layer.then(function() {
layer.sublayers.map(function(sublayer) {
var id = sublayer.id;
var visible = sublayer.visible;
var node = document.querySelector(
".sublayers-item[data-id='" + id + "']");
if (visible) {
node.classList.add("visible-layer");
}
});
});
/*****************************************************************
* 监听按钮单击,打开/关闭图层
*****************************************************************/
var sublayersElement = document.querySelector(".sublayers");
on(sublayersElement, ".sublayers-item:click", function(e) {
var id = e.target.getAttribute("data-id");
if (id) {
var sublayer = layer.findSublayerById(parseInt(id));
var node = document.querySelector(".sublayers-item[data-id='" +
id + "']");
sublayer.visible = !sublayer.visible;
node.classList.toggle("visible-layer");
}
});
});
</script>
<style>
html,
body {
font-family: sans-serif;
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
#viewDiv {
position: absolute;
right: 0;
left: 0;
top: 0;
bottom: 60px;
}
.footer {
position: absolute;
bottom: 0;
height: 60px;
width: 100%;
}
.sublayers {
margin: 0 auto;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
overflow: auto;
}
.sublayers-item {
flex-grow: 4;
background-color: rgba(34, 111, 14, .5);
color: #FFF;
margin: 1px;
width: 50%;
padding: 20px;
overflow: auto;
text-align: center;
cursor: pointer;
font-size: 0.7em;
}
.visible-layer {
color: #fff;
background-color: #226F0E;
}
</style>
</head>
<body>
<div id="viewDiv"></div>
<div class="footer">
<div class="sublayers">
<div class="sublayers-item" data-id="0">Cities</div>
<div class="sublayers-item" data-id="1">Highways</div>
<div class="sublayers-item" data-id="4">Railroads</div>
<div class="sublayers-item" data-id="2">States</div>
</div>
</div>
</body>
</html>
程序运行效果:
(完)