123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- const geoCoordMap = {
- '甘肃': [103.73, 36.03],
- '青海': [101.74, 36.56],
- '四川': [104.06, 30.67],
- '河北': [114.48, 38.03],
- '云南': [102.73, 25.04],
- '贵州': [106.71, 26.57],
- '湖北': [114.31, 30.52],
- '河南': [113.65, 34.76],
- '山东': [117, 36.65],
- '江苏': [118.78, 32.04],
- '安徽': [117.27, 31.86],
- '浙江': [120.19, 30.26],
- '江西': [115.89, 28.68],
- '福建': [119.3, 26.08],
- '广东': [113.23, 23.16],
- '湖南': [113, 28.21],
- '海南': [110.35, 20.02],
- '辽宁': [123.38, 41.8],
- '吉林': [125.35, 43.88],
- '黑龙江': [126.63, 45.75],
- '山西': [112.53, 37.87],
- '陕西': [108.95, 34.27],
- '台湾': [121.30, 25.03],
- '北京': [116.46, 39.92],
- '上海': [121.48, 31.22],
- '重庆': [106.54, 29.59],
- '天津': [117.2, 39.13],
- '内蒙古': [111.65, 40.82],
- '广西': [108.33, 22.84],
- '西藏': [91.11, 29.97],
- '宁夏': [106.27, 38.47],
- '新疆': [87.68, 43.77],
- '香港': [114.17, 22.28],
- '澳门': [113.54, 22.19]
- }
- function convertData(data) {
- const res = []
- for (let i = 0; i < data.length; i++) {
- const geoCoord = geoCoordMap[data[i].name]
- if (geoCoord) {
- res.push({
- name: data[i].name,
- value: geoCoord.concat(data[i].value)
- })
- }
- }
- return res
- }
- let convert = (data) => {
- let res = [];
- for (var i = 0; i < data.length; i++) {
- var dataItem = data[i];
- var from = geoCoordMap[dataItem[0].name];
- var to = geoCoordMap[dataItem[1].name];
- if (from && to) {
- res.push({
- fromName: dataItem[0].name,
- toName: dataItem[1].name,
- coords: [from, to]
- });
- }
- }
- return res;
- }
- const randomData = () => {
- return Math.round(Math.random() * 1000)
- }
- const getItemStyle = (opacity) => {
- return {
- normal: {
- areaColor: '#96CFC6',
- borderColor: '#fff',
- borderWidth: 1,
- show: false,
- opacity,
- },
- emphasis: {
- areaColor: '#96CFC6',
- opacity: 1,
- }
- }
- }
- const areas = [
- { name: '北京', value: randomData(), itemStyle: getItemStyle(.5) },
- { name: '天津', value: randomData(), itemStyle: getItemStyle(.8) },
- { name: '上海', value: randomData(), itemStyle: getItemStyle(.4) },
- { name: '重庆', value: randomData(), itemStyle: getItemStyle(.3) },
- { name: '河北', value: randomData(), itemStyle: getItemStyle(.3) },
- { name: '河南', value: randomData(), itemStyle: getItemStyle(.2) },
- { name: '云南', value: randomData(), itemStyle: getItemStyle(.37) },
- { name: '辽宁', value: randomData(), itemStyle: getItemStyle(.85) },
- { name: '黑龙江', value: randomData(), itemStyle: getItemStyle(.8) },
- { name: '湖南', value: randomData(), itemStyle: getItemStyle(.71) },
- { name: '安徽', value: randomData(), itemStyle: getItemStyle(.21) },
- { name: '山东', value: randomData(), itemStyle: getItemStyle(.4) },
- { name: '新疆', value: randomData(), itemStyle: getItemStyle(.37) },
- { name: '江苏', value: randomData(), itemStyle: getItemStyle(.6) },
- { name: '浙江', value: randomData(), itemStyle: getItemStyle(.8) },
- { name: '江西', value: randomData(), itemStyle: getItemStyle(.5) },
- { name: '湖北', value: randomData(), itemStyle: getItemStyle(.47) },
- { name: '广西', value: randomData(), itemStyle: getItemStyle(.8) },
- { name: '甘肃', value: randomData(), itemStyle: getItemStyle(.73) },
- { name: '山西', value: randomData(), itemStyle: getItemStyle(.3) },
- { name: '内蒙古', value: randomData(), itemStyle: getItemStyle(.56) },
- { name: '陕西', value: randomData(), itemStyle: getItemStyle(.4) },
- { name: '吉林', value: randomData(), itemStyle: getItemStyle(.54) },
- { name: '福建', value: randomData(), itemStyle: getItemStyle(.7) },
- { name: '贵州', value: randomData(), itemStyle: getItemStyle(.56) },
- { name: '广东', value: randomData, itemStyle: getItemStyle(.3) },
- { name: '青海', value: randomData, itemStyle: getItemStyle(.37) },
- { name: '西藏', value: randomData, itemStyle: getItemStyle(.57) },
- { name: '四川', value: randomData, itemStyle: getItemStyle(.58) },
- { name: '宁夏', value: randomData, itemStyle: getItemStyle(.5) },
- { name: '海南', value: randomData, itemStyle: getItemStyle(.5) },
- { name: '台湾', value: randomData, itemStyle: getItemStyle(.4) },
- { name: '香港', value: randomData, itemStyle: getItemStyle(.2) },
- { name: '澳门', value: randomData, itemStyle: getItemStyle(.6) },
- { name: '南海诸岛', value: randomData, itemStyle: getItemStyle(1) },
- ]
- const formatLines = (name = '北京') => {
- return areas.map(item => ([{ name }, { name: item.name, value: 100 }]))
- }
- export default activeName => ({
- tooltip: {
- show: false,
- },
- geo: {
- map: 'china',
- label: {
- normal: {
- show: false
- },
- emphasis: {
- show: false
- }
- },
- itemStyle: {
- normal: {
- areaColor: '#96CFC6',
- borderColor: '#fff',
- opacity: 0,
- },
- emphasis: {
- areaColor: '#96CFC6',
- opacity: 0,
- }
- },
- regions: [{
- value: 0,
- itemStyle: {
- normal: {
- opacity: 0,
- }
- },
- emphasis: {
- itemStyle: {
- areaColor: '#96CFC6',
- opacity: 0,
- }
- }
- }],
- },
- series: [
- {
- type: 'lines',
- zlevel: 1,
- symbol: ['none'],
- symbolSize: 10,
- animationDuration: 2500,
- animationDurationUpdate: 1000,
- lineStyle: {
- normal: {
- color: '#93C8BE',
- width: 2,
- opacity: 1,
- curveness: 0.05
- }
- },
- data: convert(formatLines(activeName))
- },
- {
- type: 'map',
- coordinateSystem: 'geo',
- geoIndex: 1,
- mapType: 'china',
- showLegendSymbol: false,
- showEffectOn: 'render',
- rippleEffect: {
- brushType: 'stroke'
- },
- roam: false,
- label: {
- normal: {
- show: false,
- areaColor: '#96CFC6',
- color: '#808080',
- },
- emphasis: {
- areaColor: '#96CFC6',
- opacity: 1,
- show: false
- }
- },
- regions: [{
- value: 0,
- itemStyle: {
- normal: {
- opacity: 0,
- }
- },
- }],
- data: areas.map(item => {
- item.selected = item.name === activeName
- return item
- }),
- },
- {
- type: 'effectScatter',
- coordinateSystem: 'geo',
- data: convertData(areas),
- symbolSize: 5,
- showEffectOn: 'render',
- rippleEffect: {
- brushType: 'stroke',
- scale: 6,
- period: 6,
- },
- hoverAnimation: true,
- label: {
- show: true,
- normal: {
- formatter: '{b}',
- position: 'left',
- show: true,
- color: '#808080',
- opacity: 1,
- }
- },
- itemStyle: {
- show: true,
- normal: {
- color: '#52C88D',
- }
- },
- zlevel: 9
- }
- ]
- })
|