rankSymbolThemeLayer.html 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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.text_graduatedSymbol"></title>
  9. <script type="text/javascript" src="../js/include-web.js"></script>
  10. </head>
  11. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  12. <div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
  13. <script type="text/javascript" src="../../dist/leaflet/include-leaflet.js"></script>
  14. <script type="text/javascript" src="../data/chinaConsumptionLevel.js"></script>
  15. <script type="text/javascript">
  16. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  17. var map, themeLayer,
  18. infowin, infowinPosition,
  19. baseUrl = host + "/iserver/services/map-china400/rest/maps/China_4326";
  20. init();
  21. function init() {
  22. // 统计图模块要求浏览器支持 Canvas 渲染
  23. if (!document.createElement('canvas').getContext) {
  24. alert(resources.msg_supportCanvas);
  25. return;
  26. }
  27. map = L.map("map", {
  28. crs: L.CRS.EPSG4326,
  29. center: [34, 104],
  30. maxZoom: 18,
  31. zoom: 3
  32. });
  33. map.on("mousemove", function (e) {
  34. infowinPosition = e.layerPoint;
  35. });
  36. L.supermap.tiledMapLayer(baseUrl).addTo(map);
  37. initThemeLayer();
  38. }
  39. function initThemeLayer() {
  40. // 创建一个圆形符号专题图层
  41. themeLayer = L.supermap.rankSymbolThemeLayer("themeLayer", SuperMap.ChartType.CIRCLE);
  42. // 指定用于专题图制作的属性字段 详看下面 addThemeLayer()中的feature.attrs.CON2009
  43. themeLayer.themeField = "CON2009";
  44. // 配置图表参数
  45. themeLayer.symbolSetting = {
  46. //允许图形展示的值域范围,此范围外的数据将不制作图图形,必设参数
  47. codomain: [0, 40000],
  48. //圆最大半径 默认100
  49. maxR: 100,
  50. //圆最小半径 默认0
  51. minR: 0,
  52. // 圆形样式
  53. circleStyle: {fillOpacity: 0.8},
  54. // 符号专题图填充颜色
  55. fillColor: "#FFA500",
  56. // 专题图hover 样式
  57. circleHoverStyle: {fillOpacity: 1}
  58. };
  59. themeLayer.addTo(map);
  60. // 注册专题图 mousemove, mouseout事件(注意:专题图图层对象自带 on 函数,没有 events 对象)
  61. themeLayer.on("mousemove", showInfoWin);
  62. themeLayer.on("mouseout", closeInfoWin);
  63. addThemeFeatures();
  64. }
  65. //构建 feature 数据
  66. function addThemeFeatures() {
  67. clearThemeLayer();
  68. var features = [];
  69. for (var i = 0, len = chinaConsumptionLevel.length; i < len; i++) {
  70. // 省居民消费水平(单位:元)信息
  71. var provinceInfo = chinaConsumptionLevel[i];
  72. var geo = L.point(provinceInfo[1], provinceInfo[2]);
  73. var attrs = {NAME: provinceInfo[0], CON2009: provinceInfo[3]};
  74. var feature = L.supermap.themeFeature(geo, attrs);
  75. features.push(feature);
  76. }
  77. themeLayer.addFeatures(features);
  78. }
  79. // 清除专题图层中的内容
  80. function clearThemeLayer() {
  81. themeLayer.clear();
  82. closeInfoWin();
  83. }
  84. // 显示地图弹窗
  85. function showInfoWin(e) {
  86. // e.target 是图形对象,即数据的可视化对象。
  87. // 图形对象的 refDataID 属性是数据(feature)的 id 属性,它指明图形对象是由那个数据制作而来;
  88. // 图形对象的 dataInfo 属性是图形对象表示的具体数据,他有两个属性,field、R 和 value;
  89. if (e.target && e.target.refDataID && e.target.dataInfo) {
  90. closeInfoWin();
  91. // 获取图形对应的数据 (feature)
  92. var fea = themeLayer.getFeatureById(e.target.refDataID);
  93. if (!fea) {
  94. return;
  95. }
  96. var info = e.target.dataInfo;
  97. // 弹窗内容
  98. var contentHTML = "<div style='color: #000; background-color: #fff'>";
  99. contentHTML += resources.text_Name + "<br><strong>" + fea.attributes.NAME + "</strong>";
  100. contentHTML += "<hr style='margin: 3px'>";
  101. switch (info.field) {
  102. case "CON2009":
  103. contentHTML += resources.text_consumptionLevel1 + "09" + resources.text_consumptionLevel2 + " <br/><strong>" + info.value + "</strong>(" + resources.text_yuan + ")";
  104. break;
  105. default:
  106. contentHTML += "No Data";
  107. }
  108. contentHTML += "</div>";
  109. var latLng = map.layerPointToLatLng(infowinPosition);
  110. if (!infowin) {
  111. infowin = L.popup();
  112. }
  113. infowin.setLatLng(latLng);
  114. infowin.setContent(contentHTML);
  115. infowin.openOn(map);
  116. }
  117. }
  118. // 移除和销毁地图弹窗
  119. function closeInfoWin() {
  120. if (infowin) {
  121. try {
  122. infowin.remove();
  123. } catch (e) {
  124. alert(e.message);
  125. }
  126. }
  127. }
  128. </script>
  129. </body>
  130. </html>