vue2.x vue3.x ECharts中国地图散点图,含China.js文件以及中国地图JSON文件

19 篇文章 1 订阅
1 篇文章 0 订阅

echart实现中国地图数据散点分布,如下图
在这里插入图片描述
按照ECharts官方文档给出的示例,并没有单独的中国地图,需要自己去找配置文档修改配置,达到自己想要的结果
实现这一模块需要有china.js这个关键的文件进行处理,否则会报错
在这里插入图片描述
意思是 [地图中国不存在。必须提供地图的GeoJSON。]
因此还需要有中国地图的JSON文件(这文件可不好找,ECharts官方不提供下载)
文件获取方式放在文章末尾
以下是china.js文件的代码

(function (root, factory) {
	if (typeof define === 'function' && define.amd) {
		define([ 'exports', 'echarts' ], factory)
	} else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
		factory(exports, require('echarts'))
	} else {
		factory({}, root.echarts)
	}
}(this, function (exports, echarts) {
	var log = function (msg) {
		if (typeof console !== 'undefined') {
			console && console.error && console.error(msg)
		}
	}
	if (!echarts) {
		log('ECharts is not Loaded')
		return
	}
	if (!echarts.registerMap) {
		log('ECharts Map is not loaded')
		return
	}
	echarts.registerMap('china', {/* 这里是GeoJSON数据放置位置 */})
}))

china.js在需要的组件里直接引用即可
在这里插入图片描述
最后结合ECharts图表,实现散点图

// html
<div id="chineChart" style="width: 100%;height:100%;"></div>

// js
chinaMap() {
	let myEchart = echarts.init(document.getElementById('chineChart'))
	// 散点数据
	var sanData = [
		{ name: '海门', value: 9 },
		{ name: '鄂尔多斯', value: 12 },
		{ name: '招远', value: 12 },
		{ name: '舟山', value: 12 },
		{ name: '齐齐哈尔', value: 14 },
		{ name: '盐城', value: 15 },
		{ name: '赤峰', value: 16 },
		{ name: '青岛', value: 18 },
		{ name: '乳山', value: 18 },
		{ name: '金昌', value: 19 },
		{ name: '泉州', value: 21 },
		{ name: '莱西', value: 21 },
		{ name: '日照', value: 21 },
		{ name: '胶南', value: 22 },
		{ name: '南通', value: 23 },
		{ name: '拉萨', value: 24 },
		{ name: '云浮', value: 24 },
		{ name: '梅州', value: 25 },
		{ name: '文登', value: 25 },
		{ name: '上海', value: 25 },
		{ name: '攀枝花', value: 25 },
		{ name: '威海', value: 25 },
		{ name: '承德', value: 25 },
		{ name: '厦门', value: 26 },
		{ name: '汕尾', value: 26 },
		{ name: '潮州', value: 26 },
		{ name: '丹东', value: 27 },
		{ name: '太仓', value: 27 },
		{ name: '曲靖', value: 27 },
		{ name: '烟台', value: 28 },
		{ name: '福州', value: 29 },
		{ name: '瓦房店', value: 30 },
		{ name: '即墨', value: 30 },
		{ name: '抚顺', value: 31 },
		{ name: '玉溪', value: 31 },
		{ name: '张家口', value: 31 },
		{ name: '阳泉', value: 31 },
		{ name: '莱州', value: 32 },
		{ name: '湖州', value: 32 },
		{ name: '汕头', value: 32 },
		{ name: '昆山', value: 33 },
		{ name: '宁波', value: 33 },
		{ name: '湛江', value: 33 },
		{ name: '揭阳', value: 34 },
		{ name: '荣成', value: 34 },
		{ name: '连云港', value: 35 },
		{ name: '葫芦岛', value: 35 },
		{ name: '常熟', value: 36 },
		{ name: '东莞', value: 36 },
		{ name: '河源', value: 36 },
		{ name: '淮安', value: 36 },
		{ name: '泰州', value: 36 },
		{ name: '南宁', value: 37 },
		{ name: '营口', value: 37 },
		{ name: '惠州', value: 37 },
		{ name: '江阴', value: 37 },
		{ name: '蓬莱', value: 37 },
		{ name: '韶关', value: 38 },
		{ name: '嘉峪关', value: 38 },
		{ name: '广州', value: 38 },
		{ name: '延安', value: 38 },
		{ name: '太原', value: 39 },
		{ name: '清远', value: 39 },
		{ name: '中山', value: 39 },
		{ name: '昆明', value: 39 },
		{ name: '寿光', value: 40 },
		{ name: '盘锦', value: 40 },
		{ name: '长治', value: 41 },
		{ name: '深圳', value: 41 },
		{ name: '珠海', value: 42 },
		{ name: '宿迁', value: 43 },
		{ name: '咸阳', value: 43 },
		{ name: '铜川', value: 44 },
		{ name: '平度', value: 44 },
		{ name: '佛山', value: 44 },
		{ name: '海口', value: 44 },
		{ name: '江门', value: 45 },
		{ name: '章丘', value: 45 },
		{ name: '肇庆', value: 46 },
		{ name: '大连', value: 47 },
		{ name: '临汾', value: 47 },
		{ name: '吴江', value: 47 },
		{ name: '石嘴山', value: 49 },
		{ name: '沈阳', value: 50 },
		{ name: '苏州', value: 50 },
		{ name: '茂名', value: 50 },
		{ name: '嘉兴', value: 51 },
		{ name: '长春', value: 51 },
		{ name: '胶州', value: 52 },
		{ name: '银川', value: 52 },
		{ name: '张家港', value: 52 },
		{ name: '三门峡', value: 53 },
		{ name: '锦州', value: 54 },
		{ name: '南昌', value: 54 },
		{ name: '柳州', value: 54 },
		{ name: '三亚', value: 54 },
		{ name: '自贡', value: 56 },
		{ name: '吉林', value: 56 },
		{ name: '阳江', value: 57 },
		{ name: '泸州', value: 57 },
		{ name: '西宁', value: 57 },
		{ name: '宜宾', value: 58 },
		{ name: '呼和浩特', value: 58 },
		{ name: '成都', value: 58 },
		{ name: '大同', value: 58 },
		{ name: '镇江', value: 59 },
		{ name: '桂林', value: 59 },
		{ name: '张家界', value: 59 },
		{ name: '宜兴', value: 59 },
		{ name: '北海', value: 60 },
		{ name: '西安', value: 61 },
		{ name: '金坛', value: 62 },
		{ name: '东营', value: 62 },
		{ name: '牡丹江', value: 63 },
		{ name: '遵义', value: 63 },
		{ name: '绍兴', value: 63 },
		{ name: '扬州', value: 64 },
		{ name: '常州', value: 64 },
		{ name: '潍坊', value: 65 },
		{ name: '重庆', value: 66 },
		{ name: '台州', value: 67 },
		{ name: '南京', value: 67 },
		{ name: '滨州', value: 70 },
		{ name: '贵阳', value: 71 },
		{ name: '无锡', value: 71 },
		{ name: '本溪', value: 71 },
		{ name: '克拉玛依', value: 72 },
		{ name: '渭南', value: 72 },
		{ name: '马鞍山', value: 72 },
		{ name: '宝鸡', value: 72 },
		{ name: '焦作', value: 75 },
		{ name: '句容', value: 75 },
		{ name: '北京', value: 79 },
		{ name: '徐州', value: 79 },
		{ name: '衡水', value: 80 },
		{ name: '包头', value: 80 },
		{ name: '绵阳', value: 80 },
		{ name: '乌鲁木齐', value: 84 },
		{ name: '枣庄', value: 84 },
		{ name: '杭州', value: 84 },
		{ name: '淄博', value: 85 },
		{ name: '鞍山', value: 86 },
		{ name: '溧阳', value: 86 },
		{ name: '库尔勒', value: 86 },
		{ name: '安阳', value: 90 },
		{ name: '开封', value: 90 },
		{ name: '济南', value: 92 },
		{ name: '德阳', value: 93 },
		{ name: '温州', value: 95 },
		{ name: '九江', value: 96 },
		{ name: '邯郸', value: 98 },
		{ name: '临安', value: 99 },
		{ name: '兰州', value: 99 },
		{ name: '沧州', value: 100 },
		{ name: '临沂', value: 103 },
		{ name: '南充', value: 104 },
		{ name: '天津', value: 105 },
		{ name: '富阳', value: 106 },
		{ name: '泰安', value: 112 },
		{ name: '诸暨', value: 112 },
		{ name: '郑州', value: 113 },
		{ name: '哈尔滨', value: 114 },
		{ name: '聊城', value: 116 },
		{ name: '芜湖', value: 117 },
		{ name: '唐山', value: 119 },
		{ name: '平顶山', value: 119 },
		{ name: '邢台', value: 119 },
		{ name: '德州', value: 120 },
		{ name: '济宁', value: 120 },
		{ name: '荆州', value: 127 },
		{ name: '宜昌', value: 130 },
		{ name: '义乌', value: 132 },
		{ name: '丽水', value: 133 },
		{ name: '洛阳', value: 134 },
		{ name: '秦皇岛', value: 136 },
		{ name: '株洲', value: 143 },
		{ name: '石家庄', value: 147 },
		{ name: '莱芜', value: 148 },
		{ name: '常德', value: 152 },
		{ name: '保定', value: 153 },
		{ name: '湘潭', value: 154 },
		{ name: '金华', value: 157 },
		{ name: '岳阳', value: 169 },
		{ name: '长沙', value: 175 },
		{ name: '衢州', value: 177 },
		{ name: '廊坊', value: 193 },
		{ name: '菏泽', value: 194 },
		{ name: '合肥', value: 229 },
		{ name: '武汉', value: 273 },
		{ name: '大庆', value: 279 }
	]
	// 散点坐标
	var geoCoordMap = {
		'海门': [ 121.15, 31.89 ],
		'鄂尔多斯': [ 109.781327, 39.608266 ],
		'招远': [ 120.38, 37.35 ],
		'舟山': [ 122.207216, 29.985295 ],
		'齐齐哈尔': [ 123.97, 47.33 ],
		'盐城': [ 120.13, 33.38 ],
		'赤峰': [ 118.87, 42.28 ],
		'青岛': [ 120.33, 36.07 ],
		'乳山': [ 121.52, 36.89 ],
		'金昌': [ 102.188043, 38.520089 ],
		'泉州': [ 118.58, 24.93 ],
		'莱西': [ 120.53, 36.86 ],
		'日照': [ 119.46, 35.42 ],
		'胶南': [ 119.97, 35.88 ],
		'南通': [ 121.05, 32.08 ],
		'拉萨': [ 91.11, 29.97 ],
		'云浮': [ 112.02, 22.93 ],
		'梅州': [ 116.1, 24.55 ],
		'文登': [ 122.05, 37.2 ],
		'上海': [ 121.48, 31.22 ],
		'攀枝花': [ 101.718637, 26.582347 ],
		'威海': [ 122.1, 37.5 ],
		'承德': [ 117.93, 40.97 ],
		'厦门': [ 118.1, 24.46 ],
		'汕尾': [ 115.375279, 22.786211 ],
		'潮州': [ 116.63, 23.68 ],
		'丹东': [ 124.37, 40.13 ],
		'太仓': [ 121.1, 31.45 ],
		'曲靖': [ 103.79, 25.51 ],
		'烟台': [ 121.39, 37.52 ],
		'福州': [ 119.3, 26.08 ],
		'瓦房店': [ 121.979603, 39.627114 ],
		'即墨': [ 120.45, 36.38 ],
		'抚顺': [ 123.97, 41.97 ],
		'玉溪': [ 102.52, 24.35 ],
		'张家口': [ 114.87, 40.82 ],
		'阳泉': [ 113.57, 37.85 ],
		'莱州': [ 119.942327, 37.177017 ],
		'湖州': [ 120.1, 30.86 ],
		'汕头': [ 116.69, 23.39 ],
		'昆山': [ 120.95, 31.39 ],
		'宁波': [ 121.56, 29.86 ],
		'湛江': [ 110.359377, 21.270708 ],
		'揭阳': [ 116.35, 23.55 ],
		'荣成': [ 122.41, 37.16 ],
		'连云港': [ 119.16, 34.59 ],
		'葫芦岛': [ 120.836932, 40.711052 ],
		'常熟': [ 120.74, 31.64 ],
		'东莞': [ 113.75, 23.04 ],
		'河源': [ 114.68, 23.73 ],
		'淮安': [ 119.15, 33.5 ],
		'泰州': [ 119.9, 32.49 ],
		'南宁': [ 108.33, 22.84 ],
		'营口': [ 122.18, 40.65 ],
		'惠州': [ 114.4, 23.09 ],
		'江阴': [ 120.26, 31.91 ],
		'蓬莱': [ 120.75, 37.8 ],
		'韶关': [ 113.62, 24.84 ],
		'嘉峪关': [ 98.289152, 39.77313 ],
		'广州': [ 113.23, 23.16 ],
		'延安': [ 109.47, 36.6 ],
		'太原': [ 112.53, 37.87 ],
		'清远': [ 113.01, 23.7 ],
		'中山': [ 113.38, 22.52 ],
		'昆明': [ 102.73, 25.04 ],
		'寿光': [ 118.73, 36.86 ],
		'盘锦': [ 122.070714, 41.119997 ],
		'长治': [ 113.08, 36.18 ],
		'深圳': [ 114.07, 22.62 ],
		'珠海': [ 113.52, 22.3 ],
		'宿迁': [ 118.3, 33.96 ],
		'咸阳': [ 108.72, 34.36 ],
		'铜川': [ 109.11, 35.09 ],
		'平度': [ 119.97, 36.77 ],
		'佛山': [ 113.11, 23.05 ],
		'海口': [ 110.35, 20.02 ],
		'江门': [ 113.06, 22.61 ],
		'章丘': [ 117.53, 36.72 ],
		'肇庆': [ 112.44, 23.05 ],
		'大连': [ 121.62, 38.92 ],
		'临汾': [ 111.5, 36.08 ],
		'吴江': [ 120.63, 31.16 ],
		'石嘴山': [ 106.39, 39.04 ],
		'沈阳': [ 123.38, 41.8 ],
		'苏州': [ 120.62, 31.32 ],
		'茂名': [ 110.88, 21.68 ],
		'嘉兴': [ 120.76, 30.77 ],
		'长春': [ 125.35, 43.88 ],
		'胶州': [ 120.03336, 36.264622 ],
		'银川': [ 106.27, 38.47 ],
		'张家港': [ 120.555821, 31.875428 ],
		'三门峡': [ 111.19, 34.76 ],
		'锦州': [ 121.15, 41.13 ],
		'南昌': [ 115.89, 28.68 ],
		'柳州': [ 109.4, 24.33 ],
		'三亚': [ 109.511909, 18.252847 ],
		'自贡': [ 104.778442, 29.33903 ],
		'吉林': [ 126.57, 43.87 ],
		'阳江': [ 111.95, 21.85 ],
		'泸州': [ 105.39, 28.91 ],
		'西宁': [ 101.74, 36.56 ],
		'宜宾': [ 104.56, 29.77 ],
		'呼和浩特': [ 111.65, 40.82 ],
		'成都': [ 104.06, 30.67 ],
		'大同': [ 113.3, 40.12 ],
		'镇江': [ 119.44, 32.2 ],
		'桂林': [ 110.28, 25.29 ],
		'张家界': [ 110.479191, 29.117096 ],
		'宜兴': [ 119.82, 31.36 ],
		'北海': [ 109.12, 21.49 ],
		'西安': [ 108.95, 34.27 ],
		'金坛': [ 119.56, 31.74 ],
		'东营': [ 118.49, 37.46 ],
		'牡丹江': [ 129.58, 44.6 ],
		'遵义': [ 106.9, 27.7 ],
		'绍兴': [ 120.58, 30.01 ],
		'扬州': [ 119.42, 32.39 ],
		'常州': [ 119.95, 31.79 ],
		'潍坊': [ 119.1, 36.62 ],
		'重庆': [ 106.54, 29.59 ],
		'台州': [ 121.420757, 28.656386 ],
		'南京': [ 118.78, 32.04 ],
		'滨州': [ 118.03, 37.36 ],
		'贵阳': [ 106.71, 26.57 ],
		'无锡': [ 120.29, 31.59 ],
		'本溪': [ 123.73, 41.3 ],
		'克拉玛依': [ 84.77, 45.59 ],
		'渭南': [ 109.5, 34.52 ],
		'马鞍山': [ 118.48, 31.56 ],
		'宝鸡': [ 107.15, 34.38 ],
		'焦作': [ 113.21, 35.24 ],
		'句容': [ 119.16, 31.95 ],
		'北京': [ 116.46, 39.92 ],
		'徐州': [ 117.2, 34.26 ],
		'衡水': [ 115.72, 37.72 ],
		'包头': [ 110, 40.58 ],
		'绵阳': [ 104.73, 31.48 ],
		'乌鲁木齐': [ 87.68, 43.77 ],
		'枣庄': [ 117.57, 34.86 ],
		'杭州': [ 120.19, 30.26 ],
		'淄博': [ 118.05, 36.78 ],
		'鞍山': [ 122.85, 41.12 ],
		'溧阳': [ 119.48, 31.43 ],
		'库尔勒': [ 86.06, 41.68 ],
		'安阳': [ 114.35, 36.1 ],
		'开封': [ 114.35, 34.79 ],
		'济南': [ 117, 36.65 ],
		'德阳': [ 104.37, 31.13 ],
		'温州': [ 120.65, 28.01 ],
		'九江': [ 115.97, 29.71 ],
		'邯郸': [ 114.47, 36.6 ],
		'临安': [ 119.72, 30.23 ],
		'兰州': [ 103.73, 36.03 ],
		'沧州': [ 116.83, 38.33 ],
		'临沂': [ 118.35, 35.05 ],
		'南充': [ 106.110698, 30.837793 ],
		'天津': [ 117.2, 39.13 ],
		'富阳': [ 119.95, 30.07 ],
		'泰安': [ 117.13, 36.18 ],
		'诸暨': [ 120.23, 29.71 ],
		'郑州': [ 113.65, 34.76 ],
		'哈尔滨': [ 126.63, 45.75 ],
		'聊城': [ 115.97, 36.45 ],
		'芜湖': [ 118.38, 31.33 ],
		'唐山': [ 118.02, 39.63 ],
		'平顶山': [ 113.29, 33.75 ],
		'邢台': [ 114.48, 37.05 ],
		'德州': [ 116.29, 37.45 ],
		'济宁': [ 116.59, 35.38 ],
		'荆州': [ 112.239741, 30.335165 ],
		'宜昌': [ 111.3, 30.7 ],
		'义乌': [ 120.06, 29.32 ],
		'丽水': [ 119.92, 28.45 ],
		'洛阳': [ 112.44, 34.7 ],
		'秦皇岛': [ 119.57, 39.95 ],
		'株洲': [ 113.16, 27.83 ],
		'石家庄': [ 114.48, 38.03 ],
		'莱芜': [ 117.67, 36.19 ],
		'常德': [ 111.69, 29.05 ],
		'保定': [ 115.48, 38.85 ],
		'湘潭': [ 112.91, 27.87 ],
		'金华': [ 119.64, 29.12 ],
		'岳阳': [ 113.09, 29.37 ],
		'长沙': [ 113, 28.21 ],
		'衢州': [ 118.88, 28.97 ],
		'廊坊': [ 116.7, 39.53 ],
		'菏泽': [ 115.480656, 35.23375 ],
		'合肥': [ 117.27, 31.86 ],
		'武汉': [ 114.31, 30.52 ],
		'大庆': [ 125.03, 46.58 ]
	}

	var convertData = function (data) {
		var res = []
		for (var i = 0; i < data.length; i++) {
			var geoCoord = geoCoordMap[data[i].name]
			if (geoCoord) {
				res.push({
					name: data[i].name,
					value: geoCoord.concat(data[i].value)
				})
			}
		}
		return res
	}

	let option = {
		title: false,
		tooltip: {
			trigger: 'item',
			formatter: '{a} <br/>{b}'
		},
		geo: {
			map: "china",
			roam: false, // 关闭拖拽
			zoom: 1.5,
			center: [ 105, 36 ], // 调整地图位置
			label: {
				normal: {
					show: false //关闭省份名展示
				},
				emphasis: {
					show: false
				}
			},
			itemStyle: {
				normal: {
					areaColor: "#eeeeee",
					borderWidth: 1, //设置外层边框
					borderColor: '#f6f7f8',
					shadowOffsetY: 0,
					shadowOffsetX: 0
				},
				emphasis: {
					areaColor: "#eeeeee",
					shadowOffsetX: 0,
					shadowOffsetY: 0,
					borderWidth: 1,
					borderColor: 'rgba(255, 255, 255, 1)'
				}
			}
		},
		visualMap: [ // 右边柱状
			{
				right: '6%',
				bottom: '5%',
				dimension: 6,
				// min: 0,
				// max: 50,
				itemHeight: 120,

				precision: 0.1,
				text: [ '人员分布' ],
				textGap: 30,
				textStyle: {
					color: '#333'
				},
				inRange: {
					// colorLightness: [ 1, 1 ]
				},
				outOfRange: {
					color: [ '#95b2ea' ]
				},
				controller: {
					inRange: {
						color: [ '#95b2ea' ]
					},
					outOfRange: {
						color: [ '#95b2ea' ]
					}
				}
			}
		],
		series: [
			{
				name: '人才分布',
				type: 'scatter',
				coordinateSystem: 'geo',
				data: convertData(sanData),
				symbolSize: function (val) {
					return val[2] / 10
				},
				encode: {
					value: 2
				},
				label: {
					formatter: '{b}',
					position: 'right',
					show: false
				},
				itemStyle: {
					color: '#95b2ea' // 圆点颜色
				},
				emphasis: {
					label: {
						show: true
					}
				}
			},
			{
				name: '人才分布',
				type: 'effectScatter',
				coordinateSystem: 'geo',
				data: convertData(sanData.sort(function (a, b) {
					return b.value - a.value
				}).slice(0, 5)), // 数量最多的5条数据,有bling bling 的效果
				symbolSize: function (val) {
					return val[2] / 10
				},
				encode: {
					value: 2
				},
				showEffectOn: 'render',
				rippleEffect: {
					brushType: 'stroke'
				},
				hoverAnimation: true,
				label: {
					formatter: '{b}',
					position: 'right',
					show: false
				},
				itemStyle: {
					color: '#95b2ea', // 圆点颜色
					shadowBlur: 10,
					shadowColor: '#5cb1ff'
				},
				zlevel: 1
			}
		]
	}
	myEchart.setOption(option)
}

如果此文章对你有帮助,请点个赞吧~ 谢谢
关注我,不定时分享技术干货

中国地图GeoJSON文件请关注下方公众号回复【中国地图】获取
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z.week

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值