分享

arcgis api for js 实现图层的控制

 昵称QAb6ICvc 2019-09-20
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

1、首先了解,什么叫图层的控制如图:


上图中的复选框控制图层的显示与隐藏。

2、实现原理:

  通过加载ArcGISDynamicMapServiceLayer,给ArcGISDynamicMapServiceLayer绑定onLoad事件,然后获取ArcGISDynamicMapServiceLayer对象,通过layerInfos方法获取所有子图层,然后循环加载自定义复选框。

3、完整代码:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
  6. <title>LayerControl</title>
  7. <link rel="stylesheet" href="https://js./3.24/dijit/themes/claro/claro.css">
  8. <link rel="stylesheet" href="https://js./3.24/esri/css/esri.css">
  9. <script src="https://js./3.24/"></script>
  10. <script src="../Scripts/jsapi_vsdoc12_v38.js"></script>
  11. <style>
  12. html, body, #map {
  13. height: 100%;
  14. margin: 0;
  15. padding: 0;
  16. }
  17. body {
  18. background-color: #FFF;
  19. overflow: hidden;
  20. font-family: "Trebuchet MS";
  21. }
  22. </style>
  23. <script src="http://localhost/arcgis_js_api/library/3.9/3.9/init.js"></script>
  24. <script>
  25. var map, mapCenter;
  26. var visible = [], setLayerVisibility;;
  27. require([
  28. "esri/map",
  29. "esri/layers/FeatureLayer",
  30. "esri/layers/GraphicsLayer",
  31. "esri/geometry/Point",
  32. "esri/symbols/PictureMarkerSymbol",
  33. "esri/symbols/SimpleLineSymbol",
  34. "esri/renderers/SimpleRenderer",
  35. "dojo/_base/Color",
  36. "dojox/charting/Chart2D",
  37. "dojo/dom-construct",
  38. "dojo/domReady!"],
  39. function (Map,
  40. FeatureLayer,
  41. GraphicsLayer,
  42. Point,
  43. PictureMarkerSymbol,
  44. SimpleLineSymbol,
  45. SimpleRenderer,
  46. Color,
  47. Chart2D,
  48. domConstruct) {
  49. map = new Map("map", { logo: false, slider: true });
  50. var dynamicMapServiceLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/Test/Qingdao/MapServer");
  51. map.addLayer(dynamicMapServiceLayer, 1);
  52. var chartLayer = new GraphicsLayer({ "id": "chartLayer" });
  53. map.addLayer(chartLayer, 2);
  54. mapCenter = new Point(103.847, 36.0473, map.spatialReference);
  55. map.centerAndZoom(mapCenter, 4);
  56. dojo.connect(dynamicMapServiceLayer, "onLoad", loadLayerList);
  57. function loadLayerList(layers) {
  58. var html = ""
  59. var infos = layers.layerInfos;
  60. for (var i = 0, length = infos.length; i < length; i++) {
  61. var info = infos[i];
  62. //图层默认显示的话就把图层id添加到visible
  63. if (info.defaultVisibility) {
  64. visible.push(info.id);
  65. }
  66. //输出图层列表的html
  67. html = html + "<div><input id='" + info.id + "' name='layerList' class='listCss' type='checkbox' value='checkbox' οnclick='setLayerVisibility()' " + (info.defaultVisibility ? "checked" : "") + " />" + info.name + "</div>";
  68. }
  69. //设置可视图层
  70. dynamicMapServiceLayer.setVisibleLayers(visible);
  71. //在右边显示图层名列表
  72. dojo.byId("toc").innerHTML = html;
  73. }
  74. setLayerVisibility = function () {
  75. //用dojo.query获取css为listCss的元素数组
  76. var inputs = dojo.query(".listCss");
  77. visible = [];
  78. //对checkbox数组进行变量把选中的id添加到visible
  79. for (var i = 0; i < inputs.length; i++) {
  80. if (inputs[i].checked) {
  81. visible.push(inputs[i].id);
  82. }
  83. }
  84. //设置可视图层
  85. dynamicMapServiceLayer.setVisibleLayers(visible);
  86. }
  87. });
  88. </script>
  89. </head>
  90. <body>
  91. <div id="map">
  92. <div id="toc" style="position: absolute; left: 10px; bottom: 20px; border: 1px solid #9c9c9c; background: #fff; width: 100px; height: auto; z-index: 99;padding: 10px;"></div>
  93. </div>
  94. </body>
  95. </html>

4、效果图:



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多