02_fieldStatistics.html 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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_fieldStatistics"></title>
  9. <script type="text/javascript" include="bootstrap-css" src="../js/include-web.js"></script>
  10. <style>
  11. .resultInfo {
  12. padding: 6px 8px;
  13. font: 14px/16px Arial, Helvetica, sans-serif;
  14. background: white;
  15. background: rgba(255, 255, 255, 0.8);
  16. box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);
  17. border-radius: 5px;
  18. }
  19. </style>
  20. </head>
  21. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  22. <div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
  23. <script type="text/javascript" src="../../dist/leaflet/include-leaflet.js"></script>
  24. <script type="text/javascript">
  25. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  26. var map, currentData, layersName = [], info, fieldService,
  27. mapURL = host + "/iserver/services/map-world/rest/maps/World",
  28. dataURL = host + "/iserver/services/data-world/rest/data";
  29. map = L.map('map', {
  30. preferCanvas: true,
  31. crs: L.CRS.EPSG4326,
  32. center: {lon: 0, lat: 0},
  33. maxZoom: 18,
  34. zoom: 2
  35. });
  36. L.supermap.tiledMapLayer(mapURL).addTo(map);
  37. initResultInfoWin();
  38. showLayersInfo();
  39. function initResultInfoWin() {
  40. info = L.control({position: 'bottomleft'});
  41. info.onAdd = function () {
  42. this._div = L.DomUtil.create('div', 'resultInfo');
  43. info.update();
  44. handleMapEvent(this._div, this._map);
  45. return this._div;
  46. };
  47. info.update = function (currentStatisticResult) {
  48. if (!currentStatisticResult) {
  49. return;
  50. }
  51. var innerHTMLStr = '<div style="line-height: 35px;">'
  52. + '<strong>' + resources.text_layer + '</strong>(continent_T@World)&nbsp;&nbsp;&nbsp;<strong>' + resources.text_field + '</strong>(' + currentStatisticResult.fieldName + ')<div>';
  53. innerHTMLStr += '<div style="line-height: 35px;">'
  54. + '<strong>' + resources.text_statisticResult + '</strong><div>';
  55. var keys = ["AVERAGE", "MAX", "MIN", "STDDEVIATION", "SUM", "VARIANCE"];
  56. 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>"
  57. + "<td>" + resources.text_standardDeviation + "</td><td>" + resources.text_sum + "</td><td>" + resources.text_variance + "</td></tr>";
  58. var resultTR = "<tr>";
  59. for (var i = 0; i < keys.length; i++) {
  60. resultTR += "<td>" + currentStatisticResult[keys[i]] + "</td>";
  61. }
  62. resultTR += "</tr>";
  63. tableStr += resultTR + "</table>";
  64. innerHTMLStr += tableStr;
  65. this._div.innerHTML = innerHTMLStr;
  66. };
  67. info.addTo(map);
  68. }
  69. //获取子图层信息
  70. function showLayersInfo() {
  71. var subLayer;
  72. L.supermap
  73. .layerInfoService(mapURL)
  74. .getLayersInfo(function (serviceResult) {
  75. var result = serviceResult.result;
  76. var layers = result.subLayers.layers;
  77. if (!layers) return;
  78. for (var i = 0, len = layers.length; i < len; i++) {
  79. subLayer = layers[i];
  80. if ("UGC" == subLayer.type) {
  81. //记录数据源,数据集信息供字段查询统计使用
  82. if (subLayer.datasetInfo.name && subLayer.datasetInfo.dataSourceName) {
  83. layersName[i] = {
  84. dataSetName: subLayer.datasetInfo.name,
  85. dataSourceName: subLayer.datasetInfo.dataSourceName,
  86. layerName: subLayer.name
  87. };
  88. }
  89. }
  90. }
  91. getFields();
  92. });
  93. }
  94. //获取字段
  95. function getFields() {
  96. var name = 'continent_T@World';
  97. var dataInfo;
  98. for (var i = 0; i < layersName.length; i++) {
  99. dataInfo = layersName[i];
  100. if (dataInfo.layerName == name) {
  101. //设置数据集,数据源,查询fields信息
  102. currentData = dataInfo;
  103. var param = new SuperMap.FieldParameters({
  104. datasource: currentData.dataSourceName,
  105. dataset: currentData.dataSetName,
  106. });
  107. L.supermap.fieldService(dataURL).getFields(param, function (serviceResult) {
  108. if (serviceResult.result && serviceResult.result.fieldNames) {
  109. fieldStatistic(serviceResult.result.fieldNames[0]);
  110. }
  111. });
  112. }
  113. }
  114. }
  115. //统计结果
  116. function fieldStatistic(fieldName) {
  117. if (currentData) {
  118. var param = new SuperMap.FieldStatisticsParameters({
  119. datasource: currentData.dataSourceName,
  120. dataset: currentData.dataSetName,
  121. fieldName: fieldName,
  122. statisticMode: [
  123. SuperMap.StatisticMode.MAX,
  124. SuperMap.StatisticMode.MIN,
  125. SuperMap.StatisticMode.SUM,
  126. SuperMap.StatisticMode.AVERAGE,
  127. SuperMap.StatisticMode.STDDEVIATION,
  128. SuperMap.StatisticMode.VARIANCE
  129. ]
  130. });
  131. L.supermap.fieldService(dataURL).getFieldStatisticsInfo(param, function (serviceResult) {
  132. info.update(serviceResult.result);
  133. });
  134. }
  135. }
  136. function handleMapEvent(div, map) {
  137. if (!div || !map) {
  138. return;
  139. }
  140. div.addEventListener('mouseover', function () {
  141. map.dragging.disable();
  142. map.scrollWheelZoom.disable();
  143. map.doubleClickZoom.disable();
  144. });
  145. div.addEventListener('mouseout', function () {
  146. map.dragging.enable();
  147. map.scrollWheelZoom.enable();
  148. map.doubleClickZoom.enable();
  149. });
  150. }
  151. </script>
  152. </body>
  153. </html>