rangeThemeLayer.html 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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_popDensityRange"></title>
  9. <script type="text/javascript" include="jquery,bootstrap-css" src="../js/include-web.js"></script>
  10. <style type="text/css">
  11. .legendItemHeader,
  12. .legendItemValue {
  13. width: 120px;
  14. height: 18px;
  15. font-size: 14px;
  16. }
  17. </style>
  18. </head>
  19. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  20. <div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
  21. <script type="text/javascript" src="../../dist/leaflet/include-leaflet.js"></script>
  22. <script type="text/javascript">
  23. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  24. var map, themeLayer, infoView,
  25. baseUrl = host + "/iserver/services/map-jingjin/rest/maps/京津地区地图",
  26. dataUrl = host + "/iserver/services/data-jingjin/rest/data";
  27. init();
  28. function init() {
  29. // 检测是否支持 Canvas
  30. if (!document.createElement('canvas').getContext) {
  31. alert(resources.msg_supportCanvas);
  32. return;
  33. }
  34. map = L.map("map", {
  35. crs: L.CRS.EPSG4326,
  36. center: [40, 117],
  37. maxZoom: 18,
  38. zoom: 7
  39. });
  40. L.supermap.tiledMapLayer(baseUrl).addTo(map);
  41. initThemeLayer();
  42. }
  43. function initThemeLayer() {
  44. themeLayer = L.supermap.rangeThemeLayer("ThemeLayer", {
  45. // 开启 hover 高亮效果
  46. isHoverAble: true,
  47. opacity: 0.8,
  48. alwaysMapCRS: true
  49. }).addTo(map);
  50. themeLayer.style = new SuperMap.ThemeStyle({
  51. shadowBlur: 16,
  52. shadowColor: "#000000",
  53. fillColor: "#FFFFFF"
  54. });
  55. // hover 高亮样式
  56. themeLayer.highlightStyle = new SuperMap.ThemeStyle({
  57. stroke: true,
  58. strokeWidth: 4,
  59. strokeColor: 'blue',
  60. fillColor: "#00EEEE",
  61. fillOpacity: 0.8
  62. });
  63. // 用于单值专题图的属性字段名称
  64. themeLayer.themeField = "POP_DENSITY99";
  65. // 风格数组,设定值对应的样式
  66. themeLayer.styleGroups = [{
  67. start: 0,
  68. end: 0.02,
  69. style: {
  70. color: '#FDE2CA'
  71. }
  72. }, {
  73. start: 0.02,
  74. end: 0.04,
  75. style: {
  76. color: '#FACE9C'
  77. }
  78. }, {
  79. start: 0.04,
  80. end: 0.06,
  81. style: {
  82. color: '#F09C42'
  83. }
  84. }, {
  85. start: 0.06,
  86. end: 0.1,
  87. style: {
  88. color: '#D0770B'
  89. }
  90. }, {
  91. start: 0.1,
  92. end: 0.2,
  93. style: {
  94. color: '#945305'
  95. }
  96. }];
  97. themeLayer.on('mousemove', highLightLayer);
  98. addThemeFeatures();
  99. }
  100. function addThemeFeatures() {
  101. var getFeatureBySQLParams = new SuperMap.GetFeaturesBySQLParameters({
  102. queryParameter: new SuperMap.FilterParameter({
  103. name: "Jingjin",
  104. attributeFilter: "SMID > -1"
  105. }),
  106. toIndex: 500,
  107. datasetNames: ["Jingjin:BaseMap_R"]
  108. });
  109. L.supermap.featureService(dataUrl)
  110. .getFeaturesBySQL(getFeatureBySQLParams, processComplete, SuperMap.DataFormat.ISERVER);
  111. }
  112. function processComplete(serviceResult) {
  113. var result = serviceResult.result;
  114. if (result && result.features) {
  115. themeLayer.addFeatures(result.features);
  116. }
  117. initLegendView();
  118. initInfoView();
  119. }
  120. //高亮时显示图层信息框的控件
  121. function initInfoView() {
  122. infoView = L.control({position: 'bottomright'});
  123. infoView.onAdd = function () {
  124. this._div = L.DomUtil.create('div', 'panel panel-primary infoPane');
  125. $(this._div).css("width", "272px");
  126. $("<div class='panel-heading'><h5 class='panel-title text-center'>" + resources.text_attributeTable + "</h5></div>").appendTo(this._div);
  127. var content = $("<div class='panel-body content'></div>").appendTo(this._div);
  128. content.css('fontSize', '14px');
  129. handleMapEvent(this._div, this._map);
  130. return this._div;
  131. };
  132. infoView.update = function (fea) {
  133. var content = $(".content");
  134. content.text("");
  135. if (!fea) {
  136. return;
  137. }
  138. var innerHtml = "ID: " + fea.attributes.SMID + "<br/>";
  139. innerHtml += resources.text_districtName + fea.attributes.NAME + "<br/>";
  140. innerHtml += resources.text_densityOfPopulation + ":" + parseFloat(fea.attributes.POP_DENSITY99).toFixed(5) + "<br/>";
  141. content.html(innerHtml);
  142. }
  143. }
  144. //图例控件
  145. function initLegendView() {
  146. var legendView = L.control({position: 'bottomright'});
  147. legendView.onAdd = function () {
  148. this._div = L.DomUtil.create('div', 'panel panel-primary legend ');
  149. var title = "<div class='panel-heading'><h5 class='panel-title text-center'>" + resources.text_legend + "</h5></div>";
  150. $(title + "<div class='panel-body text-center' ><table>" +
  151. "<tr><td class='legendItemHeader'>" + resources.text_populationDensity + "</td><td class='legendItemValue'>" + resources.text_color + "</td></tr>" +
  152. "<tr> <td class='legendItemHeader'>0 - 0.02</td> <td class='legendItemValue' style='background: #FDE2CA'></td></tr>" +
  153. "<tr> <td class='legendItemHeader'>0.02 - 0.04</td> <td class='legendItemValue' style='background: #FACE9C'></td> </tr>" +
  154. "<tr> <td class='legendItemHeader'>0.04 - 0.06</td> <td class='legendItemValue' style='background: #F09C42'></td> </tr>" +
  155. "<tr> <td class='legendItemHeader'>0.06 - 0.1</td> <td class='legendItemValue' style='background: #D0770B'></td> </tr>" +
  156. "<tr> <td class='legendItemHeader'>0.1 - 0.2</td> <td class='legendItemValue' style='background: #945305'></td> </tr>" +
  157. "</table></div>"
  158. ).appendTo(this._div);
  159. handleMapEvent(this._div, this._map);
  160. return this._div;
  161. };
  162. legendView.addTo(map);
  163. }
  164. function highLightLayer(e) {
  165. if (e.target && e.target.refDataID) {
  166. var fea = themeLayer.getFeatureById(e.target.refDataID);
  167. if (fea) {
  168. infoView.addTo(map);
  169. infoView.update(fea);
  170. }
  171. } else if (infoView) {
  172. infoView.remove();
  173. }
  174. }
  175. function handleMapEvent(div, map) {
  176. if (!div || !map) {
  177. return;
  178. }
  179. div.addEventListener('mouseover', function () {
  180. map.dragging.disable();
  181. map.scrollWheelZoom.disable();
  182. map.doubleClickZoom.disable();
  183. });
  184. div.addEventListener('mouseout', function () {
  185. map.dragging.enable();
  186. map.scrollWheelZoom.enable();
  187. map.doubleClickZoom.enable();
  188. });
  189. }
  190. </script>
  191. </body>
  192. </html>