echarts_scatter.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <html>
  5. <head>
  6. <meta charset='utf-8'/>
  7. <title data-i18n="resources.title_Scatter"></title>
  8. <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no'/>
  9. <style>
  10. body {
  11. margin: 0;
  12. padding: 0;
  13. }
  14. #map {
  15. position: absolute;
  16. top: 0;
  17. bottom: 0;
  18. width: 100%;
  19. }
  20. #map .mapboxgl-popup-content {
  21. padding: 10px 16px 15px;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <div id='map'></div>
  27. <script type="text/javascript" include="bootstrap" src="../js/include-web.js"></script>
  28. <script type="text/javascript" include="echarts" src="../../dist/mapboxgl/include-mapboxgl.js"></script>
  29. <script type="text/javascript">
  30. var attribution = "<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox </a>" +
  31. " with <span>© <a href='https://iclient.supermap.io' target='_blank'>SuperMap iClient</a> | </span>" +
  32. " Image <span>© <a href='http://support.supermap.com.cn/product/iServer.aspx' target='_blank'>SuperMap iServer</a> | </span>" +
  33. " <a href='https://echarts.baidu.com' target='_blank'>© 2018 " + resources.title_3baidu + " ECharts</a>";
  34. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  35. var tileURL = host + '/iserver/services/map-world/rest/maps/世界地图_Gray/zxyTileImage.png?prjCoordSys='+encodeURIComponent('{"epsgCode":3857}')+'&z={z}&x={x}&y={y}';
  36. var url = host + "/iserver/services/map-china400/rest/maps/China_4326";
  37. var chart, div, popup = '', features = [];
  38. var map = new mapboxgl.Map({
  39. container: 'map',
  40. style: {
  41. "version": 8,
  42. "sources": {
  43. "raster-tiles": {
  44. "attribution": attribution,
  45. "type": "raster",
  46. "tiles": [tileURL],
  47. "tileSize": 256,
  48. },
  49. },
  50. "layers": [{
  51. "id": "simple-tiles",
  52. "type": "raster",
  53. "source": "raster-tiles",
  54. "minzoom": 0,
  55. "maxzoom": 18
  56. }]
  57. },
  58. center: [116.402, 39.905],
  59. zoom: 3.5
  60. });
  61. map.addControl(new mapboxgl.NavigationControl(), 'top-left');
  62. map.loadImage('../img/marker-icon.png', function (error, image) {
  63. if (error) throw error;
  64. map.addImage('positionPoint', image);
  65. });
  66. var dataBJ = [
  67. [1, 55, 9, 56, 0.46, 18, 6, resources.text_good],
  68. [2, 25, 11, 21, 0.65, 34, 9, resources.text_great],
  69. [3, 56, 7, 63, 0.3, 14, 5, resources.text_good],
  70. [4, 33, 7, 29, 0.33, 16, 6, resources.text_great],
  71. [5, 42, 24, 44, 0.76, 40, 16, resources.text_great],
  72. [6, 82, 58, 90, 1.77, 68, 33, resources.text_good],
  73. [7, 74, 49, 77, 1.46, 48, 27, resources.text_good],
  74. [8, 78, 55, 80, 1.29, 59, 29, resources.text_good],
  75. [9, 267, 216, 280, 4.8, 108, 64, resources.text_heavyPollution],
  76. [10, 185, 127, 216, 2.52, 61, 27, resources.text_moderatePollution],
  77. [11, 39, 19, 38, 0.57, 31, 15, resources.text_great],
  78. [12, 41, 11, 40, 0.43, 21, 7, resources.text_great],
  79. [13, 64, 38, 74, 1.04, 46, 22, resources.text_good],
  80. [14, 108, 79, 120, 1.7, 75, 41, resources.text_mildPollution],
  81. [15, 108, 63, 116, 1.48, 44, 26, resources.text_mildPollution],
  82. [16, 33, 6, 29, 0.34, 13, 5, resources.text_great],
  83. [17, 94, 66, 110, 1.54, 62, 31, resources.text_good],
  84. [18, 186, 142, 192, 3.88, 93, 79, resources.text_moderatePollution],
  85. [19, 57, 31, 54, 0.96, 32, 14, resources.text_good],
  86. [20, 22, 8, 17, 0.48, 23, 10, resources.text_great],
  87. [21, 39, 15, 36, 0.61, 29, 13, resources.text_great],
  88. [22, 94, 69, 114, 2.08, 73, 39, resources.text_good],
  89. [23, 99, 73, 110, 2.43, 76, 48, resources.text_good],
  90. [24, 31, 12, 30, 0.5, 32, 16, resources.text_great],
  91. [25, 42, 27, 43, 1, 53, 22, resources.text_great],
  92. [26, 154, 117, 157, 3.05, 92, 58, resources.text_moderatePollution],
  93. [27, 234, 185, 230, 4.09, 123, 69, resources.text_heavyPollution],
  94. [28, 160, 120, 186, 2.77, 91, 50, resources.text_moderatePollution],
  95. [29, 134, 96, 165, 2.76, 83, 41, resources.text_mildPollution],
  96. [30, 52, 24, 60, 1.03, 50, 21, resources.text_good],
  97. [31, 46, 5, 49, 0.28, 10, 6, resources.text_great]
  98. ];
  99. var dataGZ = [
  100. [1, 26, 37, 27, 1.163, 27, 13, resources.text_great],
  101. [2, 85, 62, 71, 1.195, 60, 8, resources.text_good],
  102. [3, 78, 38, 74, 1.363, 37, 7, resources.text_good],
  103. [4, 21, 21, 36, 0.634, 40, 9, resources.text_great],
  104. [5, 41, 42, 46, 0.915, 81, 13, resources.text_great],
  105. [6, 56, 52, 69, 1.067, 92, 16, resources.text_good],
  106. [7, 64, 30, 28, 0.924, 51, 2, resources.text_good],
  107. [8, 55, 48, 74, 1.236, 75, 26, resources.text_good],
  108. [9, 76, 85, 113, 1.237, 114, 27, resources.text_good],
  109. [10, 91, 81, 104, 1.041, 56, 40, resources.text_good],
  110. [11, 84, 39, 60, 0.964, 25, 11, resources.text_good],
  111. [12, 64, 51, 101, 0.862, 58, 23, resources.text_good],
  112. [13, 70, 69, 120, 1.198, 65, 36, resources.text_good],
  113. [14, 77, 105, 178, 2.549, 64, 16, resources.text_good],
  114. [15, 109, 68, 87, 0.996, 74, 29, resources.text_mildPollution],
  115. [16, 73, 68, 97, 0.905, 51, 34, resources.text_good],
  116. [17, 54, 27, 47, 0.592, 53, 12, resources.text_good],
  117. [18, 51, 61, 97, 0.811, 65, 19, resources.text_good],
  118. [19, 91, 71, 121, 1.374, 43, 18, resources.text_good],
  119. [20, 73, 102, 182, 2.787, 44, 19, resources.text_good],
  120. [21, 73, 50, 76, 0.717, 31, 20, resources.text_good],
  121. [22, 84, 94, 140, 2.238, 68, 18, resources.text_good],
  122. [23, 93, 77, 104, 1.165, 53, 7, resources.text_good],
  123. [24, 99, 130, 227, 3.97, 55, 15, resources.text_good],
  124. [25, 146, 84, 139, 1.094, 40, 17, resources.text_mildPollution],
  125. [26, 113, 108, 137, 1.481, 48, 15, resources.text_mildPollution],
  126. [27, 81, 48, 62, 1.619, 26, 3, resources.text_good],
  127. [28, 56, 48, 68, 1.336, 37, 9, resources.text_good],
  128. [29, 82, 92, 174, 3.29, 0, 13, resources.text_good],
  129. [30, 106, 116, 188, 3.628, 101, 16, resources.text_mildPollution],
  130. [31, 118, 50, 0, 1.383, 76, 11, resources.text_mildPollution]
  131. ];
  132. var dataSH = [
  133. [1, 91, 45, 125, 0.82, 34, 23, resources.text_good],
  134. [2, 65, 27, 78, 0.86, 45, 29, resources.text_good],
  135. [3, 83, 60, 84, 1.09, 73, 27, resources.text_good],
  136. [4, 109, 81, 121, 1.28, 68, 51, resources.text_mildPollution],
  137. [5, 106, 77, 114, 1.07, 55, 51, resources.text_mildPollution],
  138. [6, 109, 81, 121, 1.28, 68, 51, resources.text_mildPollution],
  139. [7, 106, 77, 114, 1.07, 55, 51, resources.text_mildPollution],
  140. [8, 89, 65, 78, 0.86, 51, 26, resources.text_good],
  141. [9, 53, 33, 47, 0.64, 50, 17, resources.text_good],
  142. [10, 80, 55, 80, 1.01, 75, 24, resources.text_good],
  143. [11, 117, 81, 124, 1.03, 45, 24, resources.text_mildPollution],
  144. [12, 99, 71, 142, 1.1, 62, 42, resources.text_good],
  145. [13, 95, 69, 130, 1.28, 74, 50, resources.text_good],
  146. [14, 116, 87, 131, 1.47, 84, 40, resources.text_mildPollution],
  147. [15, 108, 80, 121, 1.3, 85, 37, resources.text_mildPollution],
  148. [16, 134, 83, 167, 1.16, 57, 43, resources.text_mildPollution],
  149. [17, 79, 43, 107, 1.05, 59, 37, resources.text_good],
  150. [18, 71, 46, 89, 0.86, 64, 25, resources.text_good],
  151. [19, 97, 71, 113, 1.17, 88, 31, resources.text_good],
  152. [20, 84, 57, 91, 0.85, 55, 31, resources.text_good],
  153. [21, 87, 63, 101, 0.9, 56, 41, resources.text_good],
  154. [22, 104, 77, 119, 1.09, 73, 48, resources.text_mildPollution],
  155. [23, 87, 62, 100, 1, 72, 28, resources.text_good],
  156. [24, 168, 128, 172, 1.49, 97, 56, resources.text_moderatePollution],
  157. [25, 65, 45, 51, 0.74, 39, 17, resources.text_good],
  158. [26, 39, 24, 38, 0.61, 47, 17, resources.text_great],
  159. [27, 39, 24, 39, 0.59, 50, 19, resources.text_great],
  160. [28, 93, 68, 96, 1.05, 79, 29, resources.text_good],
  161. [29, 188, 143, 197, 1.66, 99, 51, resources.text_moderatePollution],
  162. [30, 174, 131, 174, 1.55, 108, 50, resources.text_moderatePollution],
  163. [31, 187, 143, 201, 1.39, 89, 53, resources.text_moderatePollution]
  164. ];
  165. var schema = [
  166. {name: 'date', index: 0, text: "日"},
  167. {name: 'AQIindex', index: 1, text: resources.text_AQIindex},
  168. {name: 'PM25', index: 2, text: 'PM2.5'},
  169. {name: 'PM10', index: 3, text: 'PM10'},
  170. {name: 'CO', index: 4, text: resources.text_CO},
  171. {name: 'NO2', index: 5, text: resources.text_NO2},
  172. {name: 'SO2', index: 6, text: resources.text_SO2}
  173. ];
  174. var dataMap = {"北京市": dataBJ, "广州市": dataGZ, "上海市": dataSH};
  175. var colorMap = {"北京市": '#dd4444', "广州市": '#fec42c', "上海市": '#80F1BE'};
  176. var itemStyle = {
  177. normal: {
  178. opacity: 0.8,
  179. shadowBlur: 10,
  180. shadowOffsetX: 0,
  181. shadowOffsetY: 0,
  182. shadowColor: 'rgba(0, 0, 0, 0.5)'
  183. }
  184. };
  185. option = {
  186. backgroundColor: '#404a59',
  187. color: [
  188. '#dd4444'
  189. ],
  190. legend: {
  191. y: 'top',
  192. data: ['北京市'],
  193. textStyle: {
  194. color: '#fff',
  195. fontSize: 16
  196. },
  197. selectedMode: 'single'
  198. },
  199. grid: {
  200. x: '10%',
  201. x2: 150,
  202. y: '18%',
  203. y2: '10%'
  204. },
  205. tooltip: {
  206. padding: 10,
  207. backgroundColor: '#222',
  208. borderColor: '#777',
  209. borderWidth: 1,
  210. formatter: function (obj) {
  211. var value = obj.value;
  212. return '<div style="border-bottom: 1px solid rgba(255,255,255,.3); font-size: 18px;padding-bottom: 7px;margin-bottom: 7px">'
  213. + obj.seriesName + ' ' + resources.text_day1 + value[0] + resources.text_day2
  214. + value[7]
  215. + '</div>'
  216. + schema[1].text + ':' + value[1] + '<br>'
  217. + schema[2].text + ':' + value[2] + '<br>'
  218. + schema[3].text + ':' + value[3] + '<br>'
  219. + schema[4].text + ':' + value[4] + '<br>'
  220. + schema[5].text + ':' + value[5] + '<br>'
  221. + schema[6].text + ':' + value[6] + '<br>';
  222. }
  223. },
  224. xAxis: {
  225. type: 'value',
  226. name: resources.text_data,
  227. nameGap: 16,
  228. nameTextStyle: {
  229. color: '#fff',
  230. fontSize: 14
  231. },
  232. max: 31,
  233. splitLine: {
  234. show: false
  235. },
  236. axisLine: {
  237. lineStyle: {
  238. color: '#eee'
  239. }
  240. }
  241. },
  242. yAxis: {
  243. type: 'value',
  244. name: resources.text_AQIindex,
  245. nameLocation: 'end',
  246. nameGap: 20,
  247. nameTextStyle: {
  248. color: '#fff',
  249. fontSize: 16
  250. },
  251. axisLine: {
  252. lineStyle: {
  253. color: '#eee'
  254. }
  255. },
  256. splitLine: {
  257. show: false
  258. }
  259. },
  260. visualMap: [
  261. {
  262. left: 'right',
  263. top: '5%',
  264. dimension: 2,
  265. min: 0,
  266. max: 250,
  267. itemWidth: 20,
  268. itemHeight: 80,
  269. calculable: true,
  270. precision: 0.1,
  271. text: [resources.text_roundSize],
  272. textGap: 20,
  273. textStyle: {
  274. color: '#fff'
  275. },
  276. inRange: {
  277. symbolSize: [10, 70]
  278. },
  279. outOfRange: {
  280. symbolSize: [10, 70],
  281. color: ['rgba(255,255,255,.2)']
  282. },
  283. controller: {
  284. inRange: {
  285. color: ['#c23531']
  286. },
  287. outOfRange: {
  288. color: ['#444']
  289. }
  290. }
  291. },
  292. {
  293. left: 'right',
  294. bottom: '5%',
  295. dimension: 6,
  296. min: 0,
  297. max: 50,
  298. itemHeight: 80,
  299. itemWidth: 20,
  300. calculable: true,
  301. precision: 0.1,
  302. text: [resources.text_SO2text],
  303. textGap: 20,
  304. textStyle: {
  305. color: '#fff'
  306. },
  307. inRange: {
  308. colorLightness: [1, 0.5]
  309. },
  310. outOfRange: {
  311. color: ['rgba(255,255,255,.2)']
  312. },
  313. controller: {
  314. inRange: {
  315. color: ['#c23531']
  316. },
  317. outOfRange: {
  318. color: ['#444']
  319. }
  320. }
  321. }
  322. ],
  323. series: [
  324. {
  325. name: '北京市',
  326. type: 'scatter',
  327. itemStyle: itemStyle,
  328. data: dataBJ
  329. }
  330. ]
  331. };
  332. div = document.createElement('div');
  333. chart = echarts.init(div, '', {
  334. width: 450,
  335. height: 350
  336. });
  337. chart.setOption(option);
  338. query();
  339. function query() {
  340. var sqlParam = new SuperMap.QueryBySQLParameters({
  341. queryParams: [{
  342. name: "China_ProCenCity_pt@China",
  343. attributeFilter: "NAME = '广州市' or NAME = '上海市'"
  344. }, {
  345. name: "China_Capital_pt@China",
  346. attributeFilter: "NAME = '北京市'"
  347. }]
  348. });
  349. queryService = new mapboxgl.supermap.QueryService(url).queryBySQL(sqlParam, function (serviceResult) {
  350. var recordsets = serviceResult && serviceResult.result && serviceResult.result.recordsets;
  351. features = recordsets && recordsets[0] && recordsets[0].features;
  352. var featureCollection = features.features;
  353. var feature = recordsets[1].features.features;
  354. featureCollection.push(feature[0]);
  355. var fs = {
  356. features: featureCollection,
  357. type: "FeatureCollection"
  358. };
  359. map.addLayer({
  360. "id": "points",
  361. "type": "symbol",
  362. "layout": {
  363. "icon-image": "positionPoint",
  364. "icon-size": 0.8,
  365. "icon-offset": [0, -15] //设置偏移量
  366. },
  367. "source": {
  368. "type": "geojson",
  369. "data": fs
  370. }
  371. });
  372. map.on('click', 'points', function (e) {
  373. popup = new mapboxgl.Popup({maxWidth: 'none'});
  374. popup.setLngLat(e.lngLat.toArray())
  375. .setDOMContent(div) // sets a popup on this marker
  376. .addTo(map);
  377. var city = e.features[0].properties.NAME;
  378. chart.setOption({
  379. color: [
  380. colorMap[city]
  381. ],
  382. legend: {
  383. data: [city]
  384. },
  385. series: [
  386. {
  387. name: city,
  388. type: 'scatter',
  389. itemStyle: itemStyle,
  390. data: dataMap[city]
  391. }
  392. ]
  393. });
  394. });
  395. });
  396. }
  397. </script>
  398. </body>
  399. </html>