|
@@ -0,0 +1,249 @@
|
|
|
+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: 0.5,
|
|
|
+ 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(.6) },
|
|
|
+ { name: '辽宁', value: randomData(), itemStyle: getItemStyle(.5) },
|
|
|
+ { name: '黑龙江', value: randomData(), itemStyle: getItemStyle(.8) },
|
|
|
+ { name: '湖南', value: randomData(), itemStyle: getItemStyle(.6) },
|
|
|
+ { name: '安徽', value: randomData(), itemStyle: getItemStyle(.7) },
|
|
|
+ { name: '山东', value: randomData(), itemStyle: getItemStyle(.4) },
|
|
|
+ { name: '新疆', value: randomData(), itemStyle: getItemStyle(4) },
|
|
|
+ { name: '江苏', value: randomData(), itemStyle: getItemStyle(.6) },
|
|
|
+ { name: '浙江', value: randomData(), itemStyle: getItemStyle(.8) },
|
|
|
+ { name: '江西', value: randomData(), itemStyle: getItemStyle(.5) },
|
|
|
+ { name: '湖北', value: randomData(), itemStyle: getItemStyle(.9) },
|
|
|
+ { name: '广西', value: randomData(), itemStyle: getItemStyle(.3) },
|
|
|
+ { name: '甘肃', value: randomData(), itemStyle: getItemStyle(.5) },
|
|
|
+ { name: '山西', value: randomData(), itemStyle: getItemStyle(.3) },
|
|
|
+ { name: '内蒙古', value: randomData(), itemStyle: getItemStyle(.6) },
|
|
|
+ { name: '陕西', value: randomData(), itemStyle: getItemStyle(.4) },
|
|
|
+ { name: '吉林', value: randomData(), itemStyle: getItemStyle(.6) },
|
|
|
+ { name: '福建', value: randomData(), itemStyle: getItemStyle(.7) },
|
|
|
+ { name: '贵州', value: randomData(), itemStyle: getItemStyle(.8) },
|
|
|
+ { name: '广东', value: randomData, itemStyle: getItemStyle(.3) },
|
|
|
+ { name: '青海', value: randomData, itemStyle: getItemStyle(.6) },
|
|
|
+ { name: '西藏', value: randomData, itemStyle: getItemStyle(.4) },
|
|
|
+ { name: '四川', value: randomData, itemStyle: getItemStyle(.7) },
|
|
|
+ { 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: '#96CFC6',
|
|
|
+ width: 2,
|
|
|
+ opacity: 0.6,
|
|
|
+ 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,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'effectScatter',
|
|
|
+ coordinateSystem: 'geo',
|
|
|
+ data: convertData(areas),
|
|
|
+ symbolSize: 5,
|
|
|
+ showEffectOn: 'render',
|
|
|
+ rippleEffect: {
|
|
|
+ brushType: 'stroke'
|
|
|
+ },
|
|
|
+ hoverAnimation: true,
|
|
|
+ label: {
|
|
|
+ normal: {
|
|
|
+ formatter: '{b}',
|
|
|
+ position: 'left',
|
|
|
+ show: true,
|
|
|
+ color: '#808080',
|
|
|
+ }
|
|
|
+ },
|
|
|
+ itemStyle: {
|
|
|
+ normal: {
|
|
|
+ color: '#52C88D',
|
|
|
+ }
|
|
|
+ },
|
|
|
+ zlevel: 9
|
|
|
+ }
|
|
|
+ ]
|
|
|
+})
|