切换子图层可见性

这个示例演示了如何使用 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>

程序运行效果:

沙箱地址:https://developers.arcgis.com/javascript/latest/sample-code/sandbox/index.html?sample=layers-mapimagelayer-sublayers

(完)

results matching ""

    No results matching ""