diff --git a/src/views/dataV/pageFive/tracemap copy.vue b/src/views/dataV/pageFive/tracemap copy.vue new file mode 100644 index 0000000..635dfb9 --- /dev/null +++ b/src/views/dataV/pageFive/tracemap copy.vue @@ -0,0 +1,200 @@ + + + diff --git a/src/views/dataV/pageFive/tracemap.vue b/src/views/dataV/pageFive/tracemap.vue index 026ae98..91a8396 100644 --- a/src/views/dataV/pageFive/tracemap.vue +++ b/src/views/dataV/pageFive/tracemap.vue @@ -9,7 +9,74 @@ import chinaMap from './china.json'; import gdMap from './gd.json'; export default { data() { - return {}; + return { + chinaGeoCoordMap: { + 黑龙江: [127.9688, 45.368], + 内蒙古: [110.3467, 41.4899], + 吉林: [125.8154, 44.2584], + 北京市: [116.4551, 40.2539], + 辽宁: [123.1238, 42.1216], + 河北: [114.4995, 38.1006], + 天津: [117.4219, 39.4189], + 山西: [112.3352, 37.9413], + 陕西: [109.1162, 34.2004], + 甘肃: [103.5901, 36.3043], + 宁夏: [106.3586, 38.1775], + 青海: [101.4038, 36.8207], + 新疆: [87.9236, 43.5883], + 西藏: [91.11, 29.97], + 四川: [103.9526, 30.7617], + 重庆: [108.384366, 30.439702], + 山东: [117.1582, 36.8701], + 河南: [113.4668, 34.6234], + 江苏: [118.8062, 31.9208], + 安徽: [117.29, 32.0581], + 湖北: [114.3896, 30.6628], + 浙江: [119.5313, 29.8773], + 福建: [119.4543, 25.9222], + 江西: [116.0046, 28.6633], + 湖南: [113.0823, 28.2568], + 贵州: [106.6992, 26.7682], + 云南: [102.9199, 25.4663], + 广东: [113.12244, 23.009505], + 广西: [108.479, 23.1152], + 海南: [110.3893, 19.8516], + 上海: [121.4648, 31.2891], + }, + chinaDatas: [ + [{ name: '黑龙江', value: 500 }], + [{ name: '内蒙古', value: 300 }], + [{ name: '北京市', value: 200 }], + [{ name: '吉林', value: 300 }], + [{ name: '辽宁', value: 500 }], + [{ name: '河北', value: 600 }], + [{ name: '天津', value: 500 }], + [{ name: '山西', value: 700 }], + [{ name: '陕西', value: 600 }], + [{ name: '甘肃', value: 500 }], + [{ name: '宁夏', value: 500 }], + [{ name: '青海', value: 700 }], + [{ name: '新疆', value: 300 }], + [{ name: '西藏', value: 300 }], + [{ name: '四川', value: 1000 }], + [{ name: '重庆', value: 900 }], + [{ name: '广东', value: 300 }], + [{ name: '山东', value: 600 }], + [{ name: '河南', value: 1800 }], + [{ name: '江苏', value: 1000 }], + [{ name: '安徽', value: 900 }], + [{ name: '湖北', value: 3200 }], + [{ name: '浙江', value: 1600 }], + [{ name: '福建', value: 900 }], + [{ name: '湖南', value: 2400 }], + [{ name: '贵州', value: 800 }], + [{ name: '广西', value: 700 }], + [{ name: '海南', value: 700 }], + [{ name: '上海', value: 170 }], + [{ name: '江西', value: 170 }], + [{ name: '云南', value: 500 }], + ], + }; }, props: { baseId: Number, @@ -26,7 +93,135 @@ export default { }, }, methods: { + convertData(data) { + console.info('convertData',data) + var res = []; + for (var i = 0; i < data.length; i++) { + var dataItem = data[i]; + var fromCoord = [114.3896, 30.6628]; + var toCoord = this.chinaGeoCoordMap[dataItem[0].name]; + if (fromCoord && toCoord) { + res.push([ + { + coord: fromCoord, + value: dataItem[0].value, + }, + { + coord: toCoord, + }, + ]); + } + } + return res; + }, + getSeries() { + let list = []; + let _this=this; + [['湖北', _this.chinaDatas]].forEach(function (item, i) { + console.log('getSeries',_this); + list.push( + { + type: 'lines', + zlevel: 1, + effect: { + show: true, + period: 4, //箭头指向速度,值越小速度越快 + trailLength: 0.02, //特效尾迹长度[0,1]值越大,尾迹越长重 + symbol: 'arrow', //箭头图标 + symbolSize: 5, //图标大小 + }, + lineStyle: { + normal: { + width: 1, //尾迹线条宽度 + opacity: 1, //尾迹线条透明度 + curveness: 0.3, //尾迹线条曲直度 + }, + }, + data: _this.convertData(item[1]), + }, + { + type: 'effectScatter', + coordinateSystem: 'geo', + zlevel: 2, + rippleEffect: { + //涟漪特效 + period: 4, //动画时间,值越小速度越快 + brushType: 'stroke', //波纹绘制方式 stroke, fill + scale: 4, //波纹圆环最大限制,值越大波纹越大 + }, + label: { + normal: { + show: true, + position: 'right', //显示位置 + offset: [5, 0], //偏移设置 + formatter: function (params) { + //圆环显示文字 + return params.data.name; + }, + fontSize: 10, + }, + emphasis: { + show: true, + }, + }, + symbol: 'circle', + symbolSize: function (val) { + return 3 + (val[2] / 100) * 1; //圆环大小 + }, + itemStyle: { + normal: { + show: false, + color: '#FFA54F', + }, + }, + data: item[1].map(function (dataItem) { + return { + name: dataItem[0].name, + value: _this.chinaGeoCoordMap[dataItem[0].name].concat([dataItem[0].value]), + }; + }), + }, + //被攻击点 + { + type: 'scatter', + coordinateSystem: 'geo', + zlevel: 2, + rippleEffect: { + period: 4, + brushType: 'stroke', + scale: 4, + }, + label: { + normal: { + show: true, + position: 'right', + //offset:[5, 0], + color: '#0f0', + formatter: '{b}', + textStyle: { + color: '#0f0', + }, + }, + emphasis: { + show: true, + color: '#FFA54F', + }, + }, + symbol: 'pin', + symbolSize: 50, + data: [ + { + name: item[0], + value: _this.chinaGeoCoordMap[item[0]].concat([10]), + }, + ], + } + ); + }); + return list; + }, async loadMapChart() { + let _this=this; var option = { title: { text: '地图统计图表', @@ -45,70 +240,58 @@ export default { lineHeight: '40', }, }, - toolbox: {}, + tooltip: { + trigger: 'item', + backgroundColor: 'rgba(166, 200, 76, 0.82)', + borderColor: '#FFFFCC', + showDelay: 0, + hideDelay: 0, + enterable: true, + transitionDuration: 0, + extraCssText: 'z-index:100', + formatter: function (params, ticket, callback) { + //根据业务自己拓展要显示的内容 + var res = ''; + var name = params.name; + var value = params.value[params.seriesIndex + 1]; + res = "" + name + '
数据:' + value; + return res; + }, + }, + backgroundColor: 'transparent', visualMap: { - min: 0, - max: 1000, - show: false, - type: 'piecewise', - pieces: [ - { gt: 1500 }, // (1500, Infinity] - { gt: 900, lte: 1500 }, // (900, 1500] - { gt: 310, lte: 1000 }, // (310, 1000] - { gt: 200, lte: 300 }, // (200, 300] - { gt: 0, lte: 200, color: '#2b7' }, - ], + //图例值控制 + min: 1, + max: 4000, + calculable: true, + show: true, + color: ['#f44336', '#fc9700', '#ffde00', '#ffde00', '#00eaff'], textStyle: { - color: '#ffffff', + color: '#fff', }, }, geo: { - map: 'guangdong', - roam: true, - show: true, - zoom: 1, - top: 100, - select: { - disabled: false, - }, - itemStyle: { - borderColor: '#fff', - borderWidth: 2, - areaColor: '#243c48', - }, - label:{ - show:true, - fontSize: 10, // 字号 - color: '#fff', // 名称颜色 - }, - regions: [ - { - name: '深圳市', // 必须与地图数据中的名称完全一致 - itemStyle: { - areaColor: '#41c0c7', // 区域填充色 - }, - }, - ], - }, - tooltip: { - show: true, - formatter: function (param) { - return `在${param.data.name}查询了${param.data.value[2]}次`; - }, - }, - series: [ - { - type: 'scatter', - symbol: - 'image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAACkRJREFUeF7tnU2a0zgQhmVOMsNFgEWuBLOD3sFcqRf0XAQ4SWceJZhO0klkybLq7+0dWHakr+r1VyXnZ0r8oQAK3FRgQhsUQIHbCgAI2YECdxQAENIDBQCEHECBNgVwkDbdOCuIAgASJNAss00BAGnTjbOCKAAgQQLNMtsUAJA23TgriAIAEiTQLLNNAQBp042zgigAIAKB/uvxn/enL/smPZ/9Ox97Tm+erk3t1+7r1f8XWEaIlwSQjcKcIThN/H2a3k0pvQKh5eX3KR0gmdL+vxkkwGlRsnwOgJQ1WjTi7ePHL3lgTxAWvfDJoBmcfZoeAKZWvevjAaRRx9khJIEoTT0DM7sMwJTUApA2hU7Oeimbps+rLzb4ArhLm+A4yALdcvmk2SkWLOFsSIYll2H5P3GW++oByA195p4iJXtuUQPMDAugUGItypsoYFyKASgAcheQqGAACiUWYCzyzvNBOMpRj9A9yNE1fPcYDWy8auh/7r59WHsdq+eHBAQwWtJ1//Bj9+/hYWikv1CAWH6OoSEpI5ZdYQDBNXoiFsdNQgACHD3hOF4ru0mE3sQ1IMeSav+9f3pwxRkS72+MdAsIrjESYr8ll0tAgGMkHPNr+YTEHSDAIQGH377EFSB/P3763utTe3JpZvuVvTXvLgDJzfiU9p+BQwdcnp6XmAeEnSodUFybxXOaPlh/G71pQIBDLxzzzKxDYhoQeg79gFjvScwCAhz64fizAWz4qbtJQIDDDhzWITEHCM857MHxMmN7DxNNAQIcluGw+cTdDCDsWHmAwx4kZgB5+/hp7ylFoq/lx+6bidwzMUmaco842ehH1ANC3+ERDjullmpA6Ds8w2EDEtWAUFr5B0T7k3a1gFBa+YfDwvMRlYBQWkWC47hWrbtaKgGhtIoHSEo6d7XUAYJ7RIRDb8OuDpBY7rE//IhN/rv2q7b5R0DzD/fk41E+Lamt1FIFiHf3WPubgTE+Wqyr1FIFiF/36B90z7t8mlxEDSA+3WP/kEunLT+X7fOm0v+G0trZqQHEX6DHBdlf6TVOuxI4KgDx5B6ST4Z9lV06IFEBiB/3kA+qH0jktfy9e1gymW2P+3EPHQHN0fICiYZmXdxBfLiHHjjm25kPSOR1BZCVBinZc5Sm7gESaRcRBcRDeaX9mwOtO7S0vqKAELySB/Q5bvvz/LJlligglgOnubS6xMp6qSVZZokBYr28krb+Wm+xfDOSfCu8GCCWyytL7uFjV0uuzAKQ2lvx4a3pNn/3wqqLSN6QRACxXF5JBquB5bNTLPciUn0IgFRmnVX3yMu0fGOS6kNEALHcf1gG5Pg2FKtf4SrTh4gAYjVIlssrD826RJk1HBDLNg8glfVo5+EA0lnQ/peTsfme67B8g5Iob4c7iOWdFKlGsScg9CF1ag4HhAa9LkBbjLbaA0rcoACkIgMlLL5ieouHWgVEogccDojV4OTsA5DFDG4yEEA2kbXfRQGkn5atVxq9kzXUQSzvoBwDan8Xy3aTPv5b4AGk6lZmHxDrN6nRLg4gAFKlgPRg14DYfgaSkkST2DshrccAQHpnROfrjW4SO08/WX4OJbGTOLTEsn738tCoW95ml9AfQKpv0XYbdesNuntArNv7zJLVMsuH/mNvUDhItYPYfB7iwz3Gaw8gTYCMf2DVOM0/p/lwDwBZmwcDzx9r9WsW5sc9xr8fDgdZkXmj9+Rbp+rHPQCkNQeEztPvIj621l/CO/qmhIOsRksvJJ5KqzlMrgHxGDCJvfklTHvVGkCWRF/lGF1O4qnvOA23a0DyQu2/1eE2naODd20m/n4S+nyVox/SDu1BvAMiXW55a8gvbwAS76YeDohX6z8NZg7kPk0Pv3Zfn0ZVg97hODwiTOnp5+7bh1Ga5tcBkA3VHlFyZTD2aXo3pfR+w6UoufT4Pm84IBHudKPcJJqWI244l3cCABl6b9w/PKc3T2tKr1iOcR6cEIB43Z+v5WzuU/J5t4A5avV8KJ3ilFG3lRy9gyXSg8TYyarFhfElBSQadDFAIuxklQLO8ToFQgESrbmsSwVGX1NAov8QcxD6ECCoVUCi/xADhD6kNj1ij5cqr0QBoQ+JnfQ1qw8JCH1ITYrEHivVf4g6CGVW7KSvWb1U/6EAkI9fUpo+14jF2FgKSJZXABIr10yuVrK8EgeEMstkzg6btLR7KAGEMmtYxhl7IWn3ABBjCRNtugDyO+KeP6ceLal7rVdDeaXCQY59CGVWr8Tych0N7qEGEJp1L2ndZx1a3EMZILhIn/SyfxUt7qEKEFzEfmL3WIEm91AICC7SI8ksX0OTe6gDBBexnNrr567NPZQCgousTzWbV9DmHioBwUVsJvfaWWt0D8WA4CJrE87a+ZJvab+n1fAvjlsaOB4eLlXKw7jxXym6VDW1gFBqLQ2h7XFaS6tZVeWAUGrZTv/y7DU25qezVg3I0UWApJxmVkfoLa1MOMg8Sd7taxWA2/PWXloZAwQX8YaI1l2rS53Vl1gvLgIkXiDR3neY6kFOJ8uXzXlARH/fYRYQtn6tA2ILjqy2mRJrTg2++NomJFaacrM9yOnEgcQWJFbhMOkgNO224MiztbJjdU1ZcyXW6SJ4iKgfFks7Vu4A4Um7bkCsw2G6xMJJgGOEAqZLLCAZkSL1r+HBOeZVuwGEcqs+kbc4wxMcbkosnGSLVK+/pjc4XAKCk9Qndo8zPMLhFhAg6ZHyy6/hFQ7XgADJ8gRfM9IzHO4BAZI1qV8+1zscIQABknKit4yIAEcYQICkBYHb50SBIxQgQNIHkkhwhAMESNZBEg2OkIAASRskEeEICwiQ1EESFY7QgADJMkgiwxEeECC5D0l0OADkd37wycTXoADHURNXb3dfVjRcHwUkL7oAx4sWAHLCC5CkBBznN1AAuTCUyJAAx+vqAkCuVFwRIQGO66U3gNxoXCJBAhy3u1cAudPZR4AEOO5v7QBIYevL89ecAkd53xNAyholj5AAx4LA8xxkmUh5lCdIgGN53HGQ5Vq5gAQ4KgKOg9SJZd1JgKM+3jhIvWYmnQQ4GgKNg7SJZs1JgKM9zjhIu3YmnAQ4VgQYB1knnnYnAY718cVB1muo0kmAo0NgcZA+ImpzEuDoF1ccpJ+WKpwEODoGFAfpK6a0kwBH/3jiIP01FXES4NggkDjINqKOdhLg2C6OOMh22g5xEuDYMIA4yLbibu0kwLF9/HCQ7TXexEmAY0DgcJAxIvd2EuAYFzccZJzWXZwEOAYGDAcZK/ZaJwGO8fHCQcZr3uQkwCEQKBxERvRaJwEOuTjhIHLaL3IS4BAMEA4iK37JSYBDPj44iHwMrjoJcCgIDA6iIwiXTgIceuKCg+iJxcFJ8nR+7b4+KZpW6KkASOjws/iSAgBSUojjoRUAkNDhZ/ElBQCkpBDHQysAIKHDz+JLCgBISSGOh1YAQEKHn8WXFACQkkIcD60AgIQOP4svKQAgJYU4HloBAAkdfhZfUgBASgpxPLQC/wNsHpgUb6Y8qQAAAABJRU5ErkJggg==', - symbolSize: '28', - coordinateSystem: 'geo', - data: null, - label: { + map: 'china', + zoom: 1.2, + top:250, + label: { + emphasis: { show: false, }, }, - ], + roam: true, //是否允许缩放 + itemStyle: { + normal: { + color: '#243c48', //地图背景色 + borderColor: '#005A5C', //省市边界线00fcff 516a89 + borderWidth: 1, + }, + emphasis: { + color: 'rgba(37, 43, 61, .5)', //悬浮背景 + }, + }, + }, + series: _this.getSeries(), }; const { rows } = await selectRecord(this.baseId); //数据 @@ -123,7 +306,7 @@ export default { }); option.title.subtext = `我们的产品走过了${rows.length}个城市,被客户查询了${i}次`; let myChart = this.$echarts.init(this.$refs.chart); - this.$echarts.registerMap('guangdong', { geoJSON: gdMap }); + this.$echarts.registerMap('china', { geoJSON: chinaMap }); myChart.setOption(option); window.onresize = function () { myChart.resize();