Leaflet结合Echarts实现迁徙图

效果图如下:

<!DOCTYPE html>
<html>

	<head>
		<title>Leaflet结合Echarts4实现迁徙图</title>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<style>
			html,
			body,
			#map {
				height: 100%;
				padding: 0;
				margin: 0;
			}
		</style>
		<script src="../../js/prjconfig.js" maptype="leaflet"></script>
	</head>

	<body>
		<div id="map"></div>
		<script>
			var map = L.map('map', {
				crs: L.CRS.EPSG4326, //L.CRS.EPSG3857
				center: [MAPINIT.Location.lat, MAPINIT.Location.lon], //[40.76339, 106.9477844],
				zoom: MAPINIT.Location.zoom,
				minZoom: MAPINIT.zoomsExtent[0],
				maxZoom: MAPINIT.zoomsExtent[1],
				zoomControl: true
			});
			//使用WMTS Key-Value加载地图服务
			let _getc = "http://192.168.1.212:8095/server/default/getTile/wmts?request=GetCapabilities&service=wmts&layer=yx";
			MAPCONFIG.MAPWMTS_IMG = "http://192.168.1.212:8095/server/vtile/getTile/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=yx&STYLE=default&TILEMATRIXSET=w&FORMAT=image/png&TILEMATRIX={z}&TILECOL={x}&TILEROW={y}&tk=''";
			L.tileLayer(MAPCONFIG.MAPWMTS_IMG, {
				zoomOffset: 1
			}).addTo(map);
			
			map.setView(L.latLng(37.550339, 104.114129), 4); //设置缩放级别及中心点
			//Echarts相关options配置
			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 BJData = [
				[{
					name: '北京'
				}, {
					name: '上海',
					value: 95
				}],
				[{
					name: '北京'
				}, {
					name: '广州',
					value: 90
				}],
				[{
					name: '北京'
				}, {
					name: '大连',
					value: 80
				}],
				[{
					name: '北京'
				}, {
					name: '南宁',
					value: 70
				}],
				[{
					name: '北京'
				}, {
					name: '南昌',
					value: 60
				}],
				[{
					name: '北京'
				}, {
					name: '拉萨',
					value: 50
				}],
				[{
					name: '北京'
				}, {
					name: '长春',
					value: 40
				}],
				[{
					name: '北京'
				}, {
					name: '包头',
					value: 30
				}],
				[{
					name: '北京'
				}, {
					name: '重庆',
					value: 20
				}],
				[{
					name: '北京'
				}, {
					name: '常州',
					value: 10
				}]
			];

			var SHData = [
				[{
					name: '上海'
				}, {
					name: '包头',
					value: 95
				}],
				[{
					name: '上海'
				}, {
					name: '昆明',
					value: 90
				}],
				[{
					name: '上海'
				}, {
					name: '广州',
					value: 80
				}],
				[{
					name: '上海'
				}, {
					name: '郑州',
					value: 70
				}],
				[{
					name: '上海'
				}, {
					name: '长春',
					value: 60
				}],
				[{
					name: '上海'
				}, {
					name: '重庆',
					value: 50
				}],
				[{
					name: '上海'
				}, {
					name: '长沙',
					value: 40
				}],
				[{
					name: '上海'
				}, {
					name: '北京',
					value: 30
				}],
				[{
					name: '上海'
				}, {
					name: '丹东',
					value: 20
				}],
				[{
					name: '上海'
				}, {
					name: '大连',
					value: 10
				}]
			];

			var GZData = [
				[{
					name: '广州'
				}, {
					name: '福州',
					value: 95
				}],
				[{
					name: '广州'
				}, {
					name: '太原',
					value: 90
				}],
				[{
					name: '广州'
				}, {
					name: '长春',
					value: 80
				}],
				[{
					name: '广州'
				}, {
					name: '重庆',
					value: 70
				}],
				[{
					name: '广州'
				}, {
					name: '西安',
					value: 60
				}],
				[{
					name: '广州'
				}, {
					name: '成都',
					value: 50
				}],
				[{
					name: '广州'
				}, {
					name: '常州',
					value: 40
				}],
				[{
					name: '广州'
				}, {
					name: '北京',
					value: 30
				}],
				[{
					name: '广州'
				}, {
					name: '北海',
					value: 20
				}],
				[{
					name: '广州'
				}, {
					name: '海口',
					value: 10
				}]
			];

			var planePath = 'path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z';

			var convertData = function(data) {
				var res = [];
				for(var i = 0; i < data.length; i++) {
					var dataItem = data[i];
					var fromCoord = geoCoordMap[dataItem[0].name];
					var toCoord = geoCoordMap[dataItem[1].name];
					if(fromCoord && toCoord) {
						res.push({
							fromName: dataItem[0].name,
							toName: dataItem[1].name,
							coords: [fromCoord, toCoord],
							value: dataItem[1].value
						});
					}
				}
				return res;
			};

			var color = ['#a6c84c', '#ffa022', '#46bee9'];
			var series = [];
			[
				['北京', BJData],
				['上海', SHData],
				['广州', GZData]
			].forEach(function(item, i) {
				series.push({
					name: item[0] + ' Top10',
					type: 'lines',
					coordinateSystem: 'geo',
					zlevel: 1,
					effect: {
						show: true,
						period: 6,
						trailLength: 0.7,
						color: '#fff',
						symbolSize: 3
					},
					lineStyle: {
						normal: {
							color: color[i],
							width: 0,
							curveness: 0.2
						}
					},
					data: convertData(item[1])
				}, {
					name: item[0] + ' Top10',
					type: 'lines',
					coordinateSystem: 'geo',
					zlevel: 2,
					symbol: ['none', 'arrow'],
					symbolSize: 10,
					effect: {
						show: true,
						period: 6,
						trailLength: 0,
						symbol: planePath,
						symbolSize: 15
					},
					lineStyle: {
						normal: {
							color: color[i],
							width: 1,
							opacity: 0.6,
							curveness: 0.2
						}
					},
					data: convertData(item[1])
				}, {
					name: item[0] + ' Top10',
					type: 'effectScatter',
					coordinateSystem: 'geo',
					zlevel: 2,
					rippleEffect: {
						brushType: 'stroke'
					},
					label: {
						normal: {
							show: true,
							position: 'right',
							formatter: '{b}'
						}
					},
					symbolSize: function(val) {
						return val[2] / 8;
					},
					itemStyle: {
						normal: {
							color: color[i]
						}
					},
					data: item[1].map(function(dataItem) {
						return {
							name: dataItem[1].name,
							value: geoCoordMap[dataItem[1].name].concat([dataItem[1].value])
						};
					})
				});
			});

			var option = {
				title: {
					text: '模拟迁徙图',
					subtext: '',
					left: 'center',
					textStyle: {
						color: '#fff'
					}
				},
				tooltip: {
					trigger: 'item',
					formatter: '{b}'
				},
				geo: {
					//map: 'china',
					label: {
						emphasis: {
							show: false
						}
					},
					itemStyle: {
						normal: {
							areaColor: '#323c48',
							borderColor: '#111'
						},
						emphasis: {
							areaColor: '#2a333d'
						}
					}
				},
				series: series
			};
			//将Echarts加到地图上
			var layerWork = L.overlayEcharts(option).addTo(map);
		</script>

	</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/178202.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++:利用哈希表对unordered系列容器模拟实现

文章目录 unordered容器使用[在长度 2N 的数组中找出重复 N 次的元素](https://leetcode.cn/problems/n-repeated-element-in-size-2n-array/description/) 底层结构初步改造哈希表基本逻辑的实现 最终实现 本篇主要总结unordered系列容器和其底层结构 unordered容器使用 从使…

MYSQL索引使用注意事项

索引使用注意事项&#xff1a; 1.索引列运算 不要在索引列上进行运算操作&#xff0c;否则索引将失效&#xff1b; 2.字符串不加引号 字符串类型使用时&#xff0c;不加引号&#xff0c;否则索引将失效&#xff1b; 3.模糊查询 如果仅仅是尾部模糊匹配&#xff0c;索引将不会失…

使用EasyPlayer播放H.265视频流

使用EasyPlayer播放H.265视频流 EasyPlayer流媒体视频播放器 EasyPlayer流媒体视频播放器 EasyPlayer流媒体视频播放器可支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff0c;能支持RTSP、RTMP、HLS、FLV、WebRTC等格式的视频流播放&#xff0c;并且已实现网页…

NEJM一篇新文为例,聊聊孟德尔随机化研究mr 连锁不平衡(linkage disequilibrium)

2019年3月14日&#xff0c;新英格兰医学杂志发表了一篇论著&#xff0c;Mendelian Randomization Study of ACLY and Cardiovascular disease, 即《ACLY和心血管疾病的孟德尔随机化研究》。与小咖在2017年1月9日报道的一篇发表在新英格兰医学的孟德尔随机化研究——精读NEJM&am…

【Python】重磅!这本30w人都在看的Python数据分析畅销书更新了!

Python 语言极具吸引力。自从 1991 年诞生以来&#xff0c;Python 如今已经成为最受欢迎的解释型编程语言。 【文末送书】今天推荐一本Python领域优质数据分析书籍&#xff0c;这本30w人都在看的书&#xff0c;值得入手。 目录 作译者简介主要变动导读视频购书链接文末送书 pan…

【GUI】-- 13 贪吃蛇小游戏之食物及成绩判断

GUI编程 04 贪吃蛇小游戏 4.4 第四步&#xff1a;食物及成绩判断 首先&#xff0c;添加食物与分数的数据定义&#xff1a; //食物的坐标int foodX;int foodY;Random random new Random();//积分面板数据结构int score;在初始化方法中&#xff0c;添加(画出)食物与分数&…

编译 CUDA加速的 OpenCV-4.8.0 版本

文章目录 前言一、编译环境二、前期准备三、CMake编译四、VS编译OpenCV.sln五、问题 前言 由于项目需要用上CUDA加速的OpenCV&#xff0c;编译时也踩了不少坑&#xff0c;所以这里记录一下。 一、编译环境 我的编译环境是&#xff1a; Win10 RTX4050 CUDA-12.0 CUDNN 8.9.…

Windows、VMware问题集合

Windows、VMware问题集合 一. Windows11安装VMware17提升虚拟机性能1. 桌面右击图标点击属性——>兼容性&#xff0c;找到“以管理员身份运行此程序”勾选&#xff0c;最后点击确定即可。2. 关闭win11的内核隔离功能。 二. VMware虚拟机报错&#xff08;虚拟化性能计数器需要…

【人工智能入门学习资料福利】

总目录如下&#xff08;部分截取&#xff09;&#xff1a; 百度网盘链接&#xff1a;https://pan.baidu.com/s/1bfDVG-xcPR3f3nfBJXxqQQ?pwdifu6 提取码&#xff1a; ifu6

【电子通识】USB3.0和USB2.0有什么区别?

版本 USB2.0是2000年4月27日由USB-IF组织提出了USB2.0总线协议规范。 USB3.0是2008年11月17日由USB-IF组织提出了超高速USB3.0规范。 图标对比 USB2.0的标志就是和USB1.1的标志基本上没啥区别&#xff0c;还是以前的那个样子&#xff0c;使用黑色颜色用标识 USB3.0它有一个S…

变态跳台阶,剑指offer

目录 题目&#xff1a; 我们直接看题解吧&#xff1a; 相似题目&#xff1a; 解题方法&#xff1a; 审题目事例提示&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 题目地址&#xff1a; 【剑指Offer】9、变态跳台阶 难度&#xff1a;简单 今天刷变态跳台阶&#xf…

不停的挖掘硬盘的最大潜能

从 NAS 上退休的硬盘被用在了监控的存储上了。 随着硬盘使用寿命的接近尾声&#xff0c;感觉就是从高附加值数据到低附加值数据上。监控数据只会保留那么几个月的时间&#xff0c;很多时候都会被覆盖重新写入。 有人问为什么监控数据不保留几年的&#xff0c;那是因为监控数据…

Golang 中的良好代码与糟糕代码

最近&#xff0c;有人要求我详细解释在 Golang 中什么是好的代码和坏的代码。我觉得这个练习非常有趣。实际上&#xff0c;足够有趣以至于我写了一篇关于这个话题的文章。为了说明我的回答&#xff0c;我选择了我在空中交通管理&#xff08;ATM&#xff09;领域遇到的一个具体用…

Apache POI简介

三十二、Apache POI 32.1 介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用POI在Java程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下&#xff0c;POI都是用于操作Excel文件。 Apache POI 的应用场…

【开源】基于JAVA的开放实验室管理系统

项目编号&#xff1a; S 013 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S013&#xff0c;文末获取源码。} 项目编号&#xff1a;S013&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…

LeetCode 2304. 网格中的最小路径代价:DP

【LetMeFly】2304.网格中的最小路径代价&#xff1a;DP 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-path-cost-in-a-grid/ 给你一个下标从 0 开始的整数矩阵 grid &#xff0c;矩阵大小为 m x n &#xff0c;由从 0 到 m * n - 1 的不同整数组成。你可以…

#gStore-weekly | ​gAnswer源码分析:基于通用数据集的NE、RE服务开发

PART1 简 介 目前基于知识图谱的问答模式有两种&#xff0c;一种是基于信息检索的方式&#xff0c;一种是基于语义分析的方式。前者较之于后者&#xff0c;没有真正关心语义&#xff0c;主要是ranker算法&#xff0c;擅于处理简单问题&#xff0c;后者则是从语义的角度将用户…

数环通入选中国信通院《高质量数字化转型技术方案集(2023)》,积极推动企业数字化转型

近日&#xff0c;中国信息通信研究院“铸基计划”发布《高质量数字化转型技术方案集&#xff08;2023&#xff09;》&#xff0c;数环通《数字化协同管理解决方案》成功入选。 随着科技的快速发展和市场竞争的日益激烈&#xff0c;数字化转型已成为企业持续发展和提升竞争力的关…

JetLinks设备接入的认识与理解【woodwhales.cn】

为了更好的阅读体验&#xff0c;建议移步至笔者的博客阅读&#xff1a;JetLinks设备接入的认识与理解 1、认识 JetLinks 1.1、官网文档 官网&#xff1a;https://www.jetlinks.cn/ JetLinks 有两个产品&#xff1a;JetLinks-lot和JetLinks-view 官方文档&#xff1a; JetLi…

WPF树形控件TreeView使用介绍

WPF 中的 TreeView 控件用于显示层次结构数据。它是由可展开和可折叠的 TreeViewItem 节点组成的&#xff0c;这些节点可以无限嵌套以表示数据的层次。 TreeView 基本用法 例如实现下图的效果&#xff1a; xaml代码如下&#xff1a; <Window x:Class"TreeView01.Mai…