theme_ctl_GraphRing.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  8. <title data-i18n="resources.title_GraphRing"></title>
  9. <style type="text/css">
  10. .editPane {
  11. position: absolute;
  12. right: 60px;
  13. top: 50px;
  14. text-align: center;
  15. background: #FFF;
  16. z-index: 1000;
  17. }
  18. </style>
  19. </head>
  20. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  21. <div class='panel panel-primary editPane' id='editPane' style="z-index: 99999">
  22. <div class='panel-heading'>
  23. <h5 class='panel-title text-center' data-i18n="resources.title_GraphRing"></h5>
  24. </div>
  25. <div class='panel-body' id='params'>
  26. <p></p>
  27. <div align='right' class='button-group'>
  28. <input type='button' id='btn1' class='btn btn-primary' data-i18n="[value]resources.btn_addThemeLayer" onclick="addThemeLayer()"/>
  29. <input type='button' id='btn2' class='btn btn-primary' data-i18n="[value]resources.btn_highlightFill" onclick="resetStyleB()"/>
  30. <input type='button' id='btn3' class='btn btn-primary' data-i18n="[value]resources.btn_highlightStroke" onclick="resetStyleC()"/>
  31. <input type='button' id='btn4' class='btn btn-primary' data-i18n="[value]resources.btn_initialStyle" onclick="resetStyleA()"/>
  32. <input type='button' id='btn5' class='btn btn-primary' data-i18n="[value]resources.text_input_value_clear" onclick="clearThemeLayer()"/>
  33. </div>
  34. </div>
  35. </div>
  36. <div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
  37. <script type="text/javascript" exclude="iclient-classic" include="Ring" src="../../dist/classic/include-classic.js"></script>
  38. <script type="text/javascript" include="bootstrap,widgets.alert" src="../js/include-web.js"></script>
  39. <script src='../data/chinaConsumptionLevel.js'></script>
  40. <script type="text/javascript">
  41. var map, layer, themeLayer, infowin, infowinPosition;
  42. var host = window.isLocal ? window.server : "https://iserver.supermap.io",
  43. url = host + "/iserver/services/map-china400/rest/maps/China_4326";
  44. // 统计图模块要求浏览器支持 Canvas 渲染
  45. if (!document.createElement('canvas').getContext) {
  46. widgets.alert.showAlert(resources.msg_supportCanvas, false);
  47. }
  48. map = new SuperMap.Map("map", {
  49. controls: [
  50. new SuperMap.Control.LayerSwitcher(),
  51. new SuperMap.Control.ScaleLine(),
  52. new SuperMap.Control.Zoom(),
  53. new SuperMap.Control.Navigation({
  54. dragPanOptions: {
  55. enableKinetic: true
  56. }
  57. })]
  58. });
  59. layer = new SuperMap.Layer.TiledDynamicRESTLayer("Jingjin", url, {
  60. transparent: true,
  61. cacheEnabled: true
  62. }, {maxResolution: "auto"});
  63. layer.events.on({"layerInitialized": addLayer});
  64. // 创建一个统计专题图图层-环状图图层(Ring)
  65. themeLayer = new SuperMap.Layer.Graph("ThemeLayer", "Ring");
  66. // 指定用于专题图制作的属性字段
  67. themeLayer.themeFields = ["CON2009", "CON2010", "CON2011", "CON2012", "CON2013"];
  68. // 配置图表参数
  69. themeLayer.chartsSetting = {
  70. // width,height,codomain 分别表示图表宽、高、数据值域;此三项参数为必设参数
  71. width: 100,
  72. height: 100,
  73. codomain: [0, 40000], // 允许图表展示的值域范围,此范围外的数据将不制作图表
  74. innerRingRadius: 20, // 环状图内环半径,默认值:0,innerRingRadius 为 0 时,可视效果同饼图
  75. // 环状图扇形(表示字段值的图形)样式
  76. sectorStyle: {fillOpacity: 0.8},
  77. // 按字段设置环状图扇形 (样式与 themeLayer.themeFields 数组中的字段名称一一对应)
  78. sectorStyleByFields: [{fillColor: "#FFB980"}, {fillColor: "#5AB1EF"}, {fillColor: "#B6A2DE"}, {fillColor: "#2EC7C9"}, {fillColor: "#D87A80"}],
  79. // 环状图扇形 hover 样式
  80. sectorHoverStyle: {fillOpacity: 1}
  81. };
  82. // 注册专题图 mousemove, mouseout事件(注意:专题图图层对象自带 on 函数,没有 events 对象)
  83. themeLayer.on("mousemove", showInfoWin);
  84. themeLayer.on("mouseout", closeInfoWin);
  85. // 注册地图 mousemove,用于获取当前鼠标在地图中的像素位置
  86. map.events.on({
  87. "mousemove": function (e) {
  88. infowinPosition = e.xy.clone();
  89. // 偏移
  90. infowinPosition.x += 40;
  91. infowinPosition.y -= 25;
  92. }
  93. });
  94. function addLayer() {
  95. map.addLayers([layer, themeLayer]);
  96. map.setCenter(new SuperMap.LonLat(104.067923, 34.679943), 2);
  97. }
  98. //构建 feature 数据, 专题图的数据必须是 SuperMap.Feature.Vector
  99. function addThemeLayer() {
  100. clearThemeLayer();
  101. var features = [];
  102. for (var i = 0, len = chinaConsumptionLevel.length; i < len; i++) {
  103. // 省居民消费水平(单位:元)信息
  104. var provinceInfo = chinaConsumptionLevel[i];
  105. var geo = new SuperMap.Geometry.Point(provinceInfo[1], provinceInfo[2]);
  106. var attrs = {};
  107. attrs.NAME = provinceInfo[0];
  108. attrs.CON2009 = provinceInfo[3];
  109. attrs.CON2010 = provinceInfo[4];
  110. attrs.CON2011 = provinceInfo[5];
  111. attrs.CON2012 = provinceInfo[6];
  112. attrs.CON2013 = provinceInfo[7];
  113. var fea = new SuperMap.Feature.Vector(geo, attrs);
  114. features.push(fea);
  115. }
  116. themeLayer.addFeatures(features);
  117. }
  118. // 清除专题图层中的内容
  119. function clearThemeLayer() {
  120. themeLayer.clear();
  121. closeInfoWin();
  122. }
  123. // 显示地图弹窗
  124. function showInfoWin(e) {
  125. // e.target 是图形对象,即数据的可视化对象;
  126. // 图形对象的 refDataID 属性是数据(feature)的 id 属性,它指明图形对象是由那个数据制作而来;
  127. // 图形对象的 dataInfo 属性是图形对象表示的具体数据,他有两个属性,field 和 value;
  128. if (e.target && e.target.refDataID && e.target.dataInfo) {
  129. closeInfoWin();
  130. // 获取图形对应的数据 (feature)
  131. var fea = themeLayer.getFeatureById(e.target.refDataID);
  132. var info = e.target.dataInfo;
  133. // 弹窗内容
  134. var contentHTML = "<div style='color: #000; background-color: #fff'>";
  135. contentHTML += "省级行政区名称:<br><strong>" + fea.attributes.NAME + "</strong>";
  136. contentHTML += "<hr style='margin: 3px'>";
  137. switch (info.field) {
  138. case "CON2009":
  139. contentHTML += "09年居民消费水平 <br/><strong>" + info.value + "</strong>(元)";
  140. break;
  141. case "CON2010":
  142. contentHTML += "10年居民消费水平 <br/><strong>" + info.value + "</strong>(元)";
  143. break;
  144. case "CON2011":
  145. contentHTML += "11年居民消费水平 <br/><strong>" + info.value + "</strong>(元)";
  146. break;
  147. case "CON2012":
  148. contentHTML += "12年居民消费水平 <br/><strong>" + info.value + "</strong>(元)";
  149. break;
  150. case "CON2013":
  151. contentHTML += "13年居民消费水平 <br/><strong>" + info.value + "</strong>(元)";
  152. break;
  153. default:
  154. contentHTML += "No Data";
  155. }
  156. contentHTML += "</div>";
  157. // 弹出框大小
  158. var infowinSize = (SuperMap.Browser.name == "firefox") ? new SuperMap.Size(150, 105) : new SuperMap.Size(140, 90);
  159. // 弹出窗地理位置
  160. var lonLat = map.getLonLatFromPixel(infowinPosition);
  161. infowin = new SuperMap.Popup(
  162. "infowin",
  163. lonLat,
  164. infowinSize,
  165. contentHTML,
  166. false,
  167. false,
  168. null);
  169. infowin.setBackgroundColor("#fff");
  170. infowin.setOpacity(0.8);
  171. if (infowin) map.removePopup(infowin);
  172. map.addPopup(infowin);
  173. }
  174. }
  175. // 高亮纯色样式
  176. function resetStyleB() {
  177. themeLayer.chartsSetting.sectorStyleByFields = [{fillColor: "#86B379"}, {fillColor: "#68A54A"}, {fillColor: "#408829"}, {fillColor: "#7CCD7C"}, {fillColor: "#228B22"}];
  178. themeLayer.chartsSetting.sectorHoverStyle = {
  179. fillColor: "#397B29",
  180. fillOpacity: 1
  181. };
  182. themeLayer.redraw();
  183. }
  184. // 高亮描边样式
  185. function resetStyleC() {
  186. themeLayer.chartsSetting.sectorStyleByFields = [{fillColor: "#C8E49C"}, {fillColor: "#ED9678"}, {fillColor: "#E7DAC9"}, {fillColor: "#CB8E85"}, {fillColor: "#F3F39D"}];
  187. themeLayer.chartsSetting.sectorHoverStyle = {
  188. stroke: true,
  189. strokeColor: "#D8361B",
  190. strokeWidth: 2,
  191. fillOpacity: 1
  192. };
  193. themeLayer.redraw();
  194. }
  195. // 初始样式
  196. function resetStyleA() {
  197. themeLayer.chartsSetting.sectorStyleByFields = [{fillColor: "#FFB980"}, {fillColor: "#5AB1EF"}, {fillColor: "#B6A2DE"}, {fillColor: "#2EC7C9"}, {fillColor: "#D87A80"}];
  198. themeLayer.chartsSetting.sectorHoverStyle = {fillOpacity: 1};
  199. themeLayer.redraw();
  200. }
  201. // 移除和销毁地图弹窗
  202. function closeInfoWin() {
  203. if (infowin) {
  204. try {
  205. map.removePopup(infowin);
  206. }
  207. catch (e) {
  208. widgets.alert.showAlert(e.message,false);
  209. }
  210. }
  211. }
  212. </script>
  213. </body>
  214. </html>