query_fieldStatistic.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="utf-8">
  8. <title data-i18n="resources.title_fieldStatistic"></title>
  9. <style type="text/css">
  10. body {
  11. margin: 0;
  12. overflow: hidden;
  13. background: #fff;
  14. width: 100%;
  15. height: 100%
  16. }
  17. #map {
  18. position: absolute;
  19. width: 100%;
  20. height: 100%;
  21. }
  22. #toolbar {
  23. position: absolute;
  24. top: 50px;
  25. right: 10px;
  26. width: 300px;
  27. text-align: center;
  28. z-index: 100;
  29. border-radius: 4px;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <div id="toolbar" class="panel panel-primary">
  35. <div class='panel-heading'>
  36. <h5 class='panel-title text-center' data-i18n="resources.title_fieldStatistic"></h5></div>
  37. <div class='panel-body content'>
  38. <div class='panel'>
  39. <div class='input-group'>
  40. <span class='input-group-addon' data-i18n="resources.text_layer"></span>
  41. <select id='layerSelect' class='form-control'></select>
  42. </div>
  43. </div>
  44. <div class='panel'>
  45. <div class='input-group'>
  46. <span class='input-group-addon' data-i18n="resources.text_field"></span>
  47. <select id='fieldSelect' class='form-control'></select>
  48. </div>
  49. </div>
  50. <input type="button" class="btn btn-default" data-i18n="[value]resources.btn_statistic"
  51. onclick="fieldStatistic()"/>
  52. </div>
  53. </div>
  54. <div id="map"></div>
  55. <script type="text/javascript" include="bootstrap,widgets.alert" src="../js/include-web.js"></script>
  56. <script type="text/javascript" exclude="iclient-classic" src="../../dist/classic/include-classic.js"></script>
  57. <script>
  58. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  59. var map, layer, layersName = [], currentData, currentStatisticResult,
  60. url1 = host + "/iserver/services/map-world/rest/maps/World",
  61. url2 = host + "/iserver/services/data-world/rest/data";
  62. init();
  63. function init() {
  64. document.getElementById("layerSelect").onchange = function () {
  65. getFields();
  66. };
  67. map = new SuperMap.Map("map", {
  68. controls: [
  69. new SuperMap.Control.Zoom(),
  70. new SuperMap.Control.Navigation({
  71. dragPanOptions: {
  72. enableKinetic: true
  73. }
  74. })]
  75. });
  76. layer = new SuperMap.Layer.TiledDynamicRESTLayer("World", url1, {
  77. transparent: true, cacheEnabled: true
  78. }, {maxResolution: "auto"});
  79. layer.events.on({"layerInitialized": addLayer});
  80. }
  81. function addLayer() {
  82. map.addLayers([layer]);
  83. map.setCenter(new SuperMap.LonLat(0, 0), 0);
  84. queryLayersInfo();
  85. }
  86. //查询图层信息
  87. function queryLayersInfo() {
  88. var getLayersInfoService = new SuperMap.REST.GetLayersInfoService(url1, {
  89. eventListeners: {"processCompleted": queryLayersInfoCompleted, "processFailed": processFailed}
  90. });
  91. getLayersInfoService.processAsync();
  92. }
  93. //显示子图层信息
  94. function queryLayersInfoCompleted(queryEventArgs) {
  95. var i, len, sublayer, layersInfo, layerName,
  96. result = queryEventArgs.result;
  97. if (result && result.subLayers && result.subLayers.layers) {
  98. layersInfo = result.subLayers.layers;
  99. layersName = [];
  100. for (i = 0, len = layersInfo.length; i < len; i++) {
  101. subLayer = layersInfo[i];
  102. if ("UGC" == subLayer.type) {
  103. //记录数据源,数据集信息供字段查询统计使用
  104. if (subLayer.datasetInfo.name && subLayer.datasetInfo.dataSourceName) {
  105. layersName[i] = {
  106. name: subLayer.datasetInfo.name,
  107. dataSourceName: subLayer.datasetInfo.dataSourceName,
  108. layerName: subLayer.name
  109. };
  110. }
  111. }
  112. }
  113. }
  114. //添加图层信息到选择列表
  115. var layerSelect = document.getElementById("layerSelect");
  116. layerSelect.innerHTML = "";
  117. var innerHTML = "";
  118. // var layerSelect = $("#layerSelect")[0];//document.getElementById("layerSelect");
  119. if (!layerSelect) {
  120. return;
  121. }
  122. var option;
  123. for (i = 0; i < layersName.length; i++) {
  124. layerSelect.options[i] = new Option(layersName[i].layerName);
  125. }
  126. getFields();
  127. }
  128. function getFields() {
  129. var layerSelect = document.getElementById("layerSelect");
  130. var name = layerSelect.options[layerSelect.selectedIndex].innerHTML;//:selected").text();
  131. var i, len, dataInfo, getFieldsService, layerName;
  132. for (i = 0, len = layersName.length; i < len; i++) {
  133. dataInfo = layersName[i];
  134. if (dataInfo.layerName == name) {
  135. //设置数据集,数据源,查询fields信息
  136. currentData = dataInfo;
  137. getFieldsService = new SuperMap.REST.GetFieldsService(url2, {
  138. eventListeners: {"processCompleted": getFieldsCompleted, "processFailed": processFailed},
  139. datasource: dataInfo.dataSourceName,
  140. dataset: dataInfo.name
  141. });
  142. getFieldsService.processAsync();
  143. break;
  144. }
  145. }
  146. }
  147. function getFieldsCompleted(getFieldsEventArgs) {
  148. var i, len, result = getFieldsEventArgs.result
  149. fieldNames = result.fieldNames,
  150. innerHTML = "";
  151. //注,因为iE8下动态更新option无效,所以这里先移除再整体添加
  152. // var fieldSelect = document.getElementById("fieldSelect");
  153. // if(fieldSelect){
  154. // var parentDIV = fieldSelect.parentNode;
  155. // parentDIV.removeChild(fieldSelect)
  156. // }
  157. // for(i = 0, len = fieldNames.length; i < len; i++){
  158. // innerHTML += "<option>" + fieldNames[i] + "</option>";
  159. // }
  160. // var fieldSelect = document.createElement("select");
  161. // fieldSelect.id="fieldSelect";
  162. // fieldSelect.style.width="100px";
  163. // fieldSelect.innerHTML = innerHTML;
  164. // parentDIV.appendChild(fieldSelect);
  165. var fieldSelect = document.getElementById("fieldSelect");
  166. fieldSelect.innerHTML = "";
  167. var innerHTML = "";
  168. // var layerSelect = $("#layerSelect")[0];//document.getElementById("layerSelect");
  169. if (!fieldSelect) {
  170. return;
  171. }
  172. var option;
  173. for (i = 0; i < fieldNames.length; i++) {
  174. fieldSelect.options[i] = new Option(fieldNames[i], fieldNames[i]);
  175. }
  176. }
  177. function fieldStatistic(fieldname) {
  178. widgets.alert.clearAlert();
  179. var fieldSelect = document.getElementById("fieldSelect");
  180. var fieldname = fieldSelect.options[fieldSelect.selectedIndex].innerHTML;
  181. //var fieldname = $("#fieldSelect :selected").text();
  182. currentStatisticResult = {fieldName: fieldname};
  183. if (currentData) {
  184. var keys = SuperMap.REST.StatisticMode;
  185. //针对六种统计方式分别进行请求
  186. for (var key in keys) {
  187. currentStatisticResult[keys[key]] = null;
  188. var statisticService = new SuperMap.REST.FieldStatisticService(url2, {
  189. eventListeners: {"processCompleted": statisticComplete, "processFailed": processFailed},
  190. datasource: currentData.dataSourceName,
  191. dataset: currentData.name,
  192. field: fieldname,
  193. statisticMode: keys[key]
  194. })
  195. statisticService.processAsync();
  196. }
  197. }
  198. }
  199. function statisticComplete(fieldStatisticEventArgs) {
  200. var getAll = true,
  201. result = fieldStatisticEventArgs.result;
  202. if (currentStatisticResult) {
  203. if (null == currentStatisticResult[result.mode]) {
  204. currentStatisticResult[result.mode] = result.result;
  205. }
  206. }
  207. for (var key in currentStatisticResult) {
  208. if (null == currentStatisticResult[key]) {
  209. getAll = false;
  210. break;
  211. }
  212. }
  213. if (getAll) {
  214. showResult(currentStatisticResult);
  215. }
  216. }
  217. function showResult() {
  218. //如果有,删除之前的结果
  219. //$("#fieldResult").remove();
  220. var fieldResult = document.getElementById("fieldResult");
  221. if (fieldResult) {
  222. var fieldResultParent = fieldResult.parentNode;
  223. fieldResultParent.removeChild(fieldResult);
  224. }
  225. fieldResult = document.createElement("div");
  226. fieldResult.id = "fieldResult";
  227. fieldResult.className = "alert alert-success fade in";
  228. fieldResult.style.position = "absolute";
  229. fieldResult.style.bottom = "1px";
  230. fieldResult.style.left = "20px";
  231. fieldResult.style.zIndex = 2000;
  232. fieldResult.style.textAlign = "center";
  233. var innerHTMLStr = '<div style="line-height: 35px;"><button id="closeTableBtn" class="close" data-dismiss="alert" style="float:right;right:10px;">&times;</button>'
  234. + '<strong>' + resources.text_field + '(' + currentStatisticResult.fieldName + ')' + resources.text_statisticResult + '</strong><div>';
  235. // var fieldRestulHTML = '<div id="fieldResult" class="alert alert-success fade in" style="position:absolute; top: 350px; left: 50px; z-index: 2000; text-align: center;">'
  236. // + '<button class="close" data-dismiss="alert">&times;</button>'
  237. // + '<strong>字段(' + currentStatisticResult.fieldName + ')统计结果:</strong>'
  238. // + '</div>';
  239. //var fieldResult = $(fieldRestulHTML);
  240. //这里因为想借用中文显示,所以使用定义的内部数组而不是SuperMap.REST.StatisticMode..
  241. var keys = ["AVERAGE", "MAX", "MIN", "STDDEVIATION", "SUM", "VARIANCE"];
  242. var tableStr = "<table id='trafficRes' class='table table-bordered'><tr><td>" + resources.text_averageValue + "</td><td>" + resources.text_maxValue + "</td><td>" + resources.text_minValue + "</td>"
  243. + "<td>" + resources.text_standardDeviation + "</td><td>" + resources.text_sum + "</td><td>" + resources.text_variance + "</td></tr>";
  244. var resultTR = "<tr>";
  245. for (var i = 0; i < keys.length; i++) {
  246. //$("<td>" + currentStatisticResult[keys[i]] + "</td>").appendTo(resultTR);
  247. resultTR += "<td>" + currentStatisticResult[keys[i]] + "</td>";
  248. }
  249. resultTR += "</tr>";
  250. //table.append(resultTR);
  251. tableStr += resultTR + "</table>";
  252. innerHTMLStr += tableStr;
  253. //fieldResult.append(table);
  254. fieldResult.innerHTML = innerHTMLStr;
  255. //$('#map').append(fieldResult);
  256. document.getElementById("map").appendChild(fieldResult);
  257. document.getElementById("closeTableBtn").onclick = function () {
  258. if (fieldResult) {
  259. var fieldResultParent = fieldResult.parentNode;
  260. fieldResultParent.removeChild(fieldResult);
  261. }
  262. }
  263. }
  264. function processFailed(e) {
  265. widgets.alert.showAlert(e.error.errorMsg, false);
  266. }
  267. function clearFeatures() {
  268. //先清除上次的显示结果
  269. vectorLayer.removeAllFeatures();
  270. vectorLayer.refresh();
  271. }
  272. </script>
  273. </body>
  274. </html>