components_ranksymboltheme_react.html 5.3 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_componentsRankSymbolTheme_React"></title>
  9. <script type="text/javascript" include="react" src="../js/include-web.js"></script>
  10. <script include="antd,iclient-mapboxgl-react,mapbox-gl-enhance" src="../../dist/mapboxgl/include-mapboxgl.js"></script>
  11. <script type="text/javascript" src="../data/chinaConsumptionLevel.js"></script>
  12. <style>
  13. html,
  14. body {
  15. height: 100%;
  16. margin: 0;
  17. padding: 0;
  18. }
  19. #main {
  20. margin: 0 auto;
  21. }
  22. #main,
  23. #map {
  24. position: absolute;
  25. width: 100%;
  26. height: 100%;
  27. }
  28. .legendItemHeader,
  29. .legendItemValue {
  30. width: 120px;
  31. height: 18px;
  32. font-size: 14px;
  33. }
  34. </style>
  35. </head>
  36. <body>
  37. <div id="main"></div>
  38. <script type="text/babel">
  39. var host = window.isLocal ? window.server : 'https://iserver.supermap.io';
  40. var SmWebMap = SuperMap.Components.SmWebMap;
  41. var SmRanksymbolThemeLayer = SuperMap.Components.SmRanksymbolThemeLayer;
  42. var features = [], popup, map;
  43. for (var i = 0, len = chinaConsumptionLevel.length; i < len; i++) {
  44. // 省居民消费水平(单位:元)信息
  45. var provinceInfo = chinaConsumptionLevel[i];
  46. var geo = new mapboxgl.LngLat(provinceInfo[1], provinceInfo[2]);
  47. var attrs = {};
  48. attrs.NAME = provinceInfo[0];
  49. attrs.CON2009 = provinceInfo[3];
  50. var fea = new mapboxgl.supermap.ThemeFeature(geo, attrs);
  51. features.push(fea);
  52. }
  53. var mapOptions = {
  54. container: 'map',
  55. style: {
  56. version: 8,
  57. sources: {
  58. 'raster-tiles': {
  59. type: 'raster',
  60. tiles: [host + '/iserver/services/map-china400/rest/maps/China_4326/zxyTileImage.png?z={z}&x={x}&y={y}'],
  61. tileSize: 256
  62. }
  63. },
  64. layers: [
  65. {
  66. id: 'simple-tiles',
  67. type: 'raster',
  68. source: 'raster-tiles',
  69. minzoom: 0,
  70. maxzoom: 22
  71. }
  72. ]
  73. },
  74. center: [116.85, 39.79],
  75. zoom: 3
  76. };
  77. var themeOptions = {
  78. //map: map,//该可选参数将在下个版本遗弃
  79. themeField: 'CON2009',
  80. // 配置图表参数
  81. symbolSetting: {
  82. //必设参数
  83. codomain: [0, 40000], // 允许图形展示的值域范围,此范围外的数据将不制作图图形
  84. //圆最大半径 默认100
  85. maxR: 100,
  86. //圆最小半径 默认0
  87. minR: 0,
  88. // 圆形样式
  89. circleStyle: { fillOpacity: 0.8 },
  90. // 符号专题图填充颜色
  91. fillColor: '#FFA500',
  92. // 专题图hover 样式
  93. circleHoverStyle: { fillOpacity: 1 }
  94. }
  95. };
  96. function showInfoWin(params) {
  97. var e = params.mapboxEvent;
  98. map = params.map;
  99. var themeLayer = map.getLayer(params.layerId);
  100. // e.target 是图形对象,即数据的可视化对象。
  101. // 图形对象的 refDataID 属性是数据(feature)的 id 属性,它指明图形对象是由那个数据制作而来;
  102. // 图形对象的 dataInfo 属性是图形对象表示的具体数据,他有两个属性,field、R 和 value;
  103. if (e.target && e.target.refDataID && e.target.dataInfo) {
  104. closeInfoWin();
  105. // 获取图形对应的数据 (feature)
  106. var fea = themeLayer.getFeatureById(e.target.refDataID);
  107. var info = e.target.dataInfo;
  108. // 弹窗内容
  109. var contentHTML = "<div style='color: #000; background-color: #fff'>";
  110. contentHTML += resources.text_Name + '<br><strong>' + fea.attributes.NAME + '</strong>';
  111. contentHTML += "<hr style='margin: 3px'>";
  112. switch (info.field) {
  113. case 'CON2009':
  114. contentHTML +=
  115. resources.text_consumptionLevel1 +
  116. '09' +
  117. resources.text_consumptionLevel2 +
  118. ' <br/><strong>' +
  119. info.value +
  120. '</strong>(' +
  121. resources.text_yuan +
  122. ')';
  123. break;
  124. default:
  125. contentHTML += 'No Data';
  126. }
  127. contentHTML += '</div>';
  128. var tempPoint = map.unproject(new window.mapboxgl.Point(e.event.x, e.event.y));
  129. popup = new mapboxgl.Popup({ closeOnClick: false })
  130. .setLngLat([tempPoint.lng, tempPoint.lat])
  131. .setHTML(contentHTML)
  132. .addTo(map);
  133. return;
  134. }
  135. closeInfoWin();
  136. }
  137. function closeInfoWin() {
  138. if (popup) {
  139. popup.remove(map);
  140. }
  141. }
  142. ReactDOM.render(
  143. <SmWebMap mapOptions={mapOptions}>
  144. <SmRanksymbolThemeLayer
  145. options={themeOptions}
  146. layerName={'RankSymbolThemeLayer'}
  147. data={features}
  148. chartsType={'Circle'}
  149. onMousemove={showInfoWin}
  150. />
  151. </SmWebMap>,
  152. document.getElementById('main')
  153. );
  154. </script>
  155. </body>
  156. </html>