components_ranksymboltheme_vue.html 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html lang="en-US">
  6. <head>
  7. <meta charset="UTF-8" />
  8. <title data-i18n="resources.title_componentsRankSymbolTheme_Vue"></title>
  9. <style>
  10. #main {
  11. margin: 0 auto;
  12. }
  13. #main,
  14. #map {
  15. position: absolute;
  16. width: 100%;
  17. height: 100%;
  18. }
  19. .legendItemHeader,
  20. .legendItemValue {
  21. width: 120px;
  22. height: 18px;
  23. font-size: 14px;
  24. }
  25. </style>
  26. </head>
  27. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  28. <div id="main">
  29. <sm-web-map :map-options="mapOptions" @load="mapIsLoaded">
  30. <sm-ranksymbol-theme-layer
  31. :options="themeOptions"
  32. layer-name="RankSymbolThemeLayer"
  33. :data="features"
  34. symbol-type="Circle"
  35. @load="layerLoaded"
  36. v-show="!!features.length"
  37. >
  38. </sm-ranksymbol-theme-layer>
  39. </sm-web-map>
  40. </div>
  41. <script type="text/javascript" include="vue,bootstrap" src="../js/include-web.js"></script>
  42. <script
  43. include="iclient-mapboxgl-vue,mapbox-gl-enhance"
  44. src="../../dist/mapboxgl/include-mapboxgl.js"
  45. ></script>
  46. <script type="text/javascript" src="../data/chinaConsumptionLevel.js"></script>
  47. <script>
  48. new Vue({
  49. el: '#main',
  50. data() {
  51. var host = window.isLocal ? window.server : 'https://iserver.supermap.io';
  52. var attribution =
  53. "<a href='https://www.mapbtyx.com/about/maps/' target='_blank'>© Mapbox </a>" +
  54. " with <span>© <a href='https://iclient.supermap.io' target='_blank'>SuperMap iClient</a> | </span>" +
  55. " Map Data <span>© <a href='http://support.supermap.com.cn/product/iServer.aspx' target='_blank'>SuperMap iServer</a></span> ";
  56. var features = [];
  57. for (var i = 0, len = chinaConsumptionLevel.length; i < len; i++) {
  58. // 省居民消费水平(单位:元)信息
  59. var provinceInfo = chinaConsumptionLevel[i];
  60. var geo = new mapboxgl.LngLat(provinceInfo[1], provinceInfo[2]);
  61. var attrs = {};
  62. attrs.NAME = provinceInfo[0];
  63. attrs.CON2009 = provinceInfo[3];
  64. var fea = new mapboxgl.supermap.ThemeFeature(geo, attrs);
  65. features.push(fea);
  66. }
  67. return {
  68. mapOptions: {
  69. container: 'map',
  70. style: {
  71. version: 8,
  72. sources: {
  73. 'raster-tiles': {
  74. attribution: attribution,
  75. type: 'raster',
  76. tiles: [
  77. host + '/iserver/services/map-china400/rest/maps/China_4326/zxyTileImage.png?z={z}&x={x}&y={y}'
  78. ],
  79. tileSize: 256
  80. }
  81. },
  82. layers: [
  83. {
  84. id: 'simple-tiles',
  85. type: 'raster',
  86. source: 'raster-tiles',
  87. minzoom: 0,
  88. maxzoom: 22
  89. }
  90. ]
  91. },
  92. center: [116.85, 39.79],
  93. zoom: 3
  94. },
  95. features,
  96. themeOptions: {
  97. //map: map,//该可选参数将在下个版本遗弃
  98. attributions: ' ',
  99. themeField: 'CON2009',
  100. // 配置图表参数
  101. symbolSetting: {
  102. //必设参数
  103. codomain: [0, 40000], // 允许图形展示的值域范围,此范围外的数据将不制作图图形
  104. //圆最大半径 默认100
  105. maxR: 100,
  106. //圆最小半径 默认0
  107. minR: 0,
  108. // 圆形样式
  109. circleStyle: { fillOpacity: 0.8 },
  110. // 符号专题图填充颜色
  111. fillColor: '#FFA500',
  112. // 专题图hover 样式
  113. circleHoverStyle: { fillOpacity: 1 }
  114. }
  115. }
  116. };
  117. },
  118. methods: {
  119. mapIsLoaded(e) {
  120. this.map = e.map;
  121. },
  122. layerLoaded(themeLayer) {
  123. themeLayer.on('mousemove', function(e) {
  124. return this.showInfoWin(themeLayer, e);
  125. }.bind(this));
  126. },
  127. showInfoWin(themeLayer, e) {
  128. // e.target 是图形对象,即数据的可视化对象。
  129. // 图形对象的 refDataID 属性是数据(feature)的 id 属性,它指明图形对象是由那个数据制作而来;
  130. // 图形对象的 dataInfo 属性是图形对象表示的具体数据,他有两个属性,field、R 和 value;
  131. var map = this.map;
  132. if (e.target && e.target.refDataID && e.target.dataInfo) {
  133. this.closeInfoWin();
  134. // 获取图形对应的数据 (feature)
  135. var fea = themeLayer.getFeatureById(e.target.refDataID);
  136. var info = e.target.dataInfo;
  137. // 弹窗内容
  138. var contentHTML = "<div style='color: #000; background-color: #fff'>";
  139. contentHTML += resources.text_Name + '<br><strong>' + fea.attributes.NAME + '</strong>';
  140. contentHTML += "<hr style='margin: 3px'>";
  141. switch (info.field) {
  142. case 'CON2009':
  143. contentHTML +=
  144. resources.text_consumptionLevel1 +
  145. '09' +
  146. resources.text_consumptionLevel2 +
  147. ' <br/><strong>' +
  148. info.value +
  149. '</strong>(' +
  150. resources.text_yuan +
  151. ')';
  152. break;
  153. default:
  154. contentHTML += 'No Data';
  155. }
  156. contentHTML += '</div>';
  157. var tempPoint = map.unproject(new window.mapboxgl.Point(e.event.x, e.event.y));
  158. this.popup = new mapboxgl.Popup({ closeOnClick: false })
  159. .setLngLat([tempPoint.lng, tempPoint.lat])
  160. .setHTML(contentHTML)
  161. .addTo(map);
  162. return;
  163. }
  164. this.closeInfoWin();
  165. },
  166. closeInfoWin() {
  167. if (this.popup) {
  168. this.popup.remove(this.map);
  169. }
  170. }
  171. }
  172. });
  173. </script>
  174. </body>
  175. </html>