others_layerGroup.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  8. <title data-i18n="resources.title_layerGroup"></title>
  9. <style type="text/css">
  10. .winTitle {
  11. background: #4192c9;
  12. height: 20px;
  13. line-height: 20px
  14. }
  15. .winTitle .title_left {
  16. font-weight: bold;
  17. color: #FFF;
  18. padding-left: 5px;
  19. float: left
  20. }
  21. .winTitle .title_right {
  22. float: right;
  23. padding-right: 3px;
  24. }
  25. .winTitle .title_right a {
  26. color: #FFF;
  27. text-decoration: none;
  28. padding-right: 3px;
  29. }
  30. .winTitle .title_right a:hover {
  31. text-decoration: underline;
  32. color: #FF0000;
  33. padding-right: 3px;
  34. }
  35. .winContent {
  36. padding: 5px;
  37. overflow-y: auto;
  38. height: 550px;
  39. }
  40. .popupWindow {
  41. right: 20px;
  42. top: 170px;
  43. position: absolute;
  44. border: 2px solid #D6E3F1;
  45. background: #FFF;
  46. z-index: 9999;
  47. }
  48. .editPane {
  49. position: absolute;
  50. right: 60px;
  51. top: 50px;
  52. text-align: center;
  53. background: #FFF;
  54. z-index: 1000;
  55. }
  56. </style>
  57. </head>
  58. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  59. <div id='result' class='container'></div>
  60. <div class='panel panel-primary editPane' id='editPane' style="z-index: 99999">
  61. <div class='panel-heading'>
  62. <h5 class='panel-title text-center' data-i18n="resources.text_layerGroup"></h5>
  63. </div>
  64. <div class='panel-body' id='params'>
  65. <p></p>
  66. <div align='center' class='button-group'>
  67. <input type='button' id='btn1' class='btn btn-primary' data-i18n="[value]resources.btn_layerGroup"
  68. onclick="show()"/>
  69. </div>
  70. </div>
  71. </div>
  72. <div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
  73. <script type="text/javascript" include="bootstrap,zTree,widgets.alert" src="../js/include-web.js"></script>
  74. <script type="text/javascript" exclude="iclient-classic" src="../../dist/classic/include-classic.js"></script>
  75. <script type="text/javascript">
  76. var map = null;
  77. var layer = null;
  78. var tempLayerID = null,
  79. host = window.isLocal ? window.server : "https://iserver.supermap.io",
  80. url = host + "/iserver/services/map-jingjin/rest/maps/京津地区地图";
  81. // 获取子图层状态信息
  82. function getLayersInfo() {
  83. var getLayersInfoService = new SuperMap.REST.GetLayersInfoService(url);
  84. getLayersInfoService.events.on({"processCompleted": getLayersInfoCompleted});
  85. getLayersInfoService.processAsync();
  86. }
  87. getLayersInfo();
  88. //与服务器交互成功,得到子图层信息
  89. function getLayersInfoCompleted(getLayersInfoEventArgs) {
  90. if (getLayersInfoEventArgs.result) {
  91. {
  92. handleTreeData(getLayersInfoEventArgs.result.subLayers.layers, 1);
  93. showWindow();
  94. $.fn.zTree.init($("#tree"), setting, treeNodes);
  95. }
  96. }
  97. createTempLayer();
  98. }
  99. //图层组控制菜单的配置
  100. var setting = {
  101. view: {
  102. dblClickExpand: false,
  103. showLine: false,
  104. showIcon: false,
  105. selectedMulti: false
  106. },
  107. check: {
  108. enable: true
  109. },
  110. data: {
  111. simpleData: {
  112. enable: true,
  113. idKey: "id",
  114. pIdKey: "pId",
  115. rootPId: "0"
  116. }
  117. },
  118. callback: {
  119. beforeClick: function (treeId, treeNode) {
  120. var zTree = $.fn.zTree.getZTreeObj("tree");
  121. if (treeNode.isParent) {
  122. zTree.expandNode(treeNode);
  123. return false;
  124. }
  125. },
  126. onCheck: setLayerStatus
  127. }
  128. };
  129. var treeNodes = [];
  130. var layerID = 0;
  131. //处理layers中的子图层信息为 ztree所需的数据格式
  132. function handleTreeData(layers) {
  133. var length = layers.length;
  134. for (var i = 0; i < length; i++) {
  135. var node = {};
  136. node.id = i + 1;
  137. node.pId = 0;
  138. node.name = layers[i].name;
  139. node.open = true;
  140. node.isChild = false;
  141. if (layers[i].visible) {
  142. node.checked = true;
  143. }
  144. treeNodes.push(node);
  145. if (layers[i].subLayers.layers && layers[i].subLayers.layers.length > 0) {
  146. for (var j = 0; j < layers[i].subLayers.layers.length; j++) {
  147. var node = {};
  148. node.id = (i + 1) * 10 + j;
  149. node.pId = i + 1;
  150. node.name = layers[i].subLayers.layers[j].name;
  151. node.isChild = true;
  152. node.layerID = j;
  153. layerID++;
  154. if (layers[i].subLayers.layers[j].visible) {
  155. node.checked = true;
  156. }
  157. treeNodes.push(node);
  158. }
  159. }
  160. }
  161. }
  162. //创建临时图层来初始化当前地图显示
  163. function createTempLayer() {
  164. //子图层控制参数必设:url、mapName、SetLayerStatusParameters
  165. var layerStatusParameters = new SuperMap.REST.SetLayerStatusParameters();
  166. layerStatusParameters = getLayerStatusList(layerStatusParameters);
  167. var setLayerStatusService = new SuperMap.REST.SetLayerStatusService(url);
  168. setLayerStatusService.events.on({"processCompleted": createTempLayerCompleted});
  169. setLayerStatusService.events.on({"processFailed": createTempLayerFailed});
  170. setLayerStatusService.processAsync(layerStatusParameters);
  171. }
  172. //获取当前地图子图层状态信息
  173. function getLayerStatusList(parameters) {
  174. for (var i = 0; i < treeNodes.length; i++) {
  175. if (treeNodes[i].isChild) {
  176. var layerStatus = new SuperMap.REST.LayerStatus();
  177. layerStatus.layerName = treeNodes[i].name;
  178. layerStatus.isVisible = false;
  179. parameters.layerStatusList.push(layerStatus);
  180. }
  181. }
  182. //设置资源在服务端保存的时间,单位为分钟,默认为10
  183. parameters.holdTime = 30;
  184. return parameters;
  185. }
  186. //与服务器交互成功,创建临时图层
  187. function createTempLayerCompleted(createTempLayerEventArgs) {
  188. tempLayerID = createTempLayerEventArgs.result.newResourceID;
  189. //创建地图控件
  190. map = new SuperMap.Map("map", {
  191. controls: [
  192. new SuperMap.Control.ScaleLine(),
  193. new SuperMap.Control.Zoom(),
  194. new SuperMap.Control.Navigation({
  195. dragPanOptions: {
  196. enableKinetic: true
  197. }
  198. })]
  199. });
  200. //创建 TiledDynamicRESTLayer
  201. layer = new SuperMap.Layer.TiledDynamicRESTLayer("World", url, {
  202. transparent: true,
  203. cacheEnabled: false,
  204. redirect: true,
  205. layersID: tempLayerID
  206. }, {maxResolution: "auto", bufferImgCount: 0});
  207. layer.bufferImgCount = 0;
  208. layer.events.on({"layerInitialized": addLayer});
  209. }
  210. //显示错误信息
  211. function createTempLayerFailed(result) {
  212. widgets.alert.showAlert(result.error.errorMsg, false);
  213. }
  214. function addLayer() {
  215. var center = new SuperMap.LonLat(117, 40);
  216. map.addLayers([layer]);
  217. map.setCenter(center, 0);
  218. }
  219. //通过子图层layersID可见性控制
  220. function setLayerStatus() {
  221. var zTree = $.fn.zTree.getZTreeObj("tree"),
  222. checkCount = zTree.getCheckedNodes(true);
  223. var checkLength = checkCount.length;
  224. //通过layersID 控制图层的显示和隐藏 目前iserver还有问题
  225. var str = "[0:";
  226. for (var i = 0; i < checkLength; i++) {
  227. if (checkCount[i].isChild) {
  228. if (i < checkLength) {
  229. str += (checkCount[i].pId - 1).toString() + "." + checkCount[i].layerID.toString();
  230. }
  231. if (i < (checkLength - 1)) {
  232. str += ",";
  233. }
  234. }
  235. }
  236. str += "]";
  237. //当所有图层都不可见时
  238. if (str.length < 5) {
  239. str = "[]";
  240. }
  241. layer.params.layersID = str;
  242. layer.redraw();
  243. }
  244. function showWindow() {
  245. if (document.getElementById("popupWin")) {
  246. $("#popupWin").css("display", "block");
  247. } else {
  248. $("<div id='popupWin'></div>").addClass("popupWindow").appendTo($("#result"));
  249. }
  250. $("#popupWin").css("display", "none");
  251. var str = "";
  252. str += '<div class="winTitle" onMouseDown="startMove(this,event)" onMouseUp="stopMove(this,event)"><span class="title_left">' + resources.text_JingjinMap + '</span><span class="title_right"><a href="javascript:closeWindow()" data-i18n="[title]resources.text_closeWindow">' + resources.text_close + '</a></span><br style="clear:right"/></div>'; //标题栏
  253. str += '<div class="winContent" style="overflow-y:auto;height:440px;">';
  254. str += '<ul id="tree" class="ztree"></ul>';
  255. str += '</div>';
  256. $("#popupWin").html(str);
  257. document.getElementById("popupWin").style.width = "260px";
  258. document.getElementById("popupWin").style.height = "472px";
  259. }
  260. window.closeWindow = function () {
  261. $("#popupWin").css("display", "none");
  262. };
  263. window.startMove = function (o, e) {
  264. var wb;
  265. if (SuperMap.Browser.name === "msie" && e.button === 1) wb = true;
  266. else if (e.button === 0) wb = true;
  267. if (wb) {
  268. var x_pos = parseInt(e.clientX - o.parentNode.offsetLeft);
  269. var y_pos = parseInt(e.clientY - o.parentNode.offsetTop);
  270. if (y_pos <= o.offsetHeight) {
  271. document.documentElement.onmousemove = function (mEvent) {
  272. var eEvent = (SuperMap.Browser.name === "msie") ? event : mEvent;
  273. o.parentNode.style.left = eEvent.clientX - x_pos + "px";
  274. o.parentNode.style.top = eEvent.clientY - y_pos + "px";
  275. }
  276. }
  277. }
  278. };
  279. window.stopMove = function (o, e) {
  280. document.documentElement.onmousemove = null;
  281. };
  282. function show() {
  283. $("#popupWin").css("display", "block");
  284. }
  285. </script>
  286. </body>
  287. </html>