Leaflet结合Echarts实现迁徙图

news2024/9/21 4:32:49

效果图如下:

<!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>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机系统的存储原理

文章目录 高速缓存存储设备的层次结构操作系统的两个基本功能参考 高速缓存 高速缓存至关重要。 helloworld 程序揭示了一个重要的问题&#xff1a;系统花费了大量的时间把信息从一个地方挪到另一个地方。 程序的机器指令最初是存放在磁盘上&#xff0c;当程序加载时&#xf…

c语言打印金字塔

输入行数n,打印n行的金字塔。如图&#xff1a; 先分析其规律。 打印n行&#xff0c;即外层循环n次。再分析每一层的规律&#xff0c;先具体化举例&#xff0c;举一个行数为5的金字塔。可以发现每一行前面的空格呈递减趋势&#xff0c;且与行数有关系&#xff1a;空格数行数-层…

STM32_3(GPIO)

GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口8种输入输出模式输出模式可控制端口输出高电平&#xff0c;驱动LED、蜂鸣器、模拟通信协议输出时许等输入模式可读取端口的高低电平或电压&#xff0c;用于读取按键输入、外接模块电平信号输…

AD7021C 触摸感应加灯光调节芯片IC 可用于触摸台灯、触摸玩具灯等

AD7021C触摸感应 IC 是为实现人体触摸界面而设计的集成电路。可替代机械式轻触按键&#xff0c;实现防水防尘、密封隔离、坚固美观的操作界面。使用该芯片可以实现 LED 灯光亮度调节&#xff0c;方案所需的外围电路简单&#xff0c;操作方便。确定好灵敏度选择电容&#xff…

【MybatisPlus】简介与使用

MyBatisPlus 1.简介 MyBatisPlus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生 官网&#xff1a;https://baomidou.com/ MyBatis-Plus特性&#xff1a; 无侵入&#xff1a;只…

主机dbeaver访问gitlab容器中的pg

映射5432端口- 5431:5432或者从docker客户端查看 version: 3.6 services:web:image: gitlab/gitlab-ce:latestrestart: alwayshostname: localhostenvironment:GITLAB_OMNIBUS_CONFIG: |external_url http://localhost:8929gitlab_rails[gitlab_shell_ssh_port] 2224ports:- …

【漏洞复现】DPTech VPN存在任意文件读取漏洞

漏洞描述 DPtech是在网络、安全及应用交付领域集研发、生产、销售于一体的高科技企业。DPtech VPN智能安全网关是迪普科技面向广域互联应用场景推出的专业安全网关产品&#xff0c;集成了IPSec、SSL、L2TP、GRE等多种VPN技术&#xff0c;支持国密算法&#xff0c;实现分支机构…

详解Java的static关键字

文章目录 &#x1f384;静态方法&#x1f33a;静态方法和非静态方法对比&#x1f6f8;静态方法实例&#x1f6f8;非静态方法实例 &#x1f339;static关键字⭐static变量⭐static代码块 &#x1f384;静态方法 不依赖于对象实例&#xff1a;静态方法不需要依赖于任何对象实例&…

【JavaEE】操作系统与进程

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

我们对凌鲨的一次重构

在10月我们对凌鲨进行了一次重构&#xff0c;把所有鸡肋的功能都删除了。 新版本界面 老版本界面 我们干掉的功能 移除沟通频道功能 沟通频道类似slack功能&#xff0c;用于团队沟通。由于国内有大量的沟通软件&#xff0c;比如企业微信&#xff0c;飞书&#xff0c;钉钉等。…

振弦传感器土压力计的安装及埋设方法

振弦传感器土压力计的安装及埋设方法 土压力计是一种测量土体内侧压力的仪器&#xff0c;常用于土体工程的安全监测和评估。以下是土压力计的安装及埋设方法&#xff1a; 1. 选择合适的位置&#xff1a;土压力计的安装位置应该在土体内的高应力区域&#xff0c;以便能够准确测…

深眸科技以自研算法+先进硬件,创新打造AI视觉一体化解决方案

工业视觉软硬件一体化解决方案&#xff1a;是以工业AI视觉技术为核心&#xff0c;通过集成工业相机等视觉硬件、电控系统和机械系统等自动化设备以及算法平台等软件应用&#xff0c;为工业自动化降本增效提质。 深眸科技为进一步巩固和加强技术领先优势&#xff0c;创新打造的…

Elasticsearch:将最大内积引入 Lucene

作者&#xff1a;Benjamin Trent 目前&#xff0c;Lucene 限制 dot_product (点积) 只能在标准化向量上使用。 归一化迫使所有向量幅度等于一。 虽然在许多情况下这是可以接受的&#xff0c;但它可能会导致某些数据集的相关性问题。 一个典型的例子是 Cohere 构建的嵌入&#x…

java的继承特性和方法重写

java的继承特性和方法重写 Java的继承特性是一种面向对象编程的重要概念&#xff0c;它允许我们基于已有的类创建新的类&#xff0c;并且保留了已有的类的一些特性。这是通过使用"继承"这个关键词来实现的&#xff0c;新创建的类称为子类&#xff08;subclass&#…

c语言:十进制转任意进制

思路&#xff1a;如十进制转二进制 就是不断除二求余在除二求余&#xff0c;然后将余数从下到写出来&#xff0c;这样&#xff0c;10011100就是156的二进制 这里举例一个六进制的代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int main() {int …

uniapp实现表单弹窗

uni.showModal({title: 删除账户,confirmColor:#3A3A3A,cancelColor:#999999,confirmText:确定,editable:true,//显示content:请输入“delete”删除账户,success: function (res) {console.log(res)if(res.confirm){if(res.contentdelete){console.log(123123123213)uni.setSto…

pmp敏捷十二个考点!考前必背!

自从PMP更换了新的考纲&#xff0c;考试中对于敏捷项目管理的知识比重越来越大。因此&#xff0c;掌握敏捷知识成为备考的重点。为了帮助大家更好地掌握敏捷知识点&#xff0c;我整理了12个敏捷考点&#xff0c;希望能对大家有所帮助&#xff01; 一、敏捷宣言十二原则改写如下…

低代码:数字化转型趋势下的快速开发方式

目录 一、前言 二、低代码是什么&#xff1f; 三、低代码如何提高生产力 开发工具JNPF介绍 产品分析 1可视化应用开发 2流程管理 3整个平台源码合作 四、小结 一、前言 通常&#xff0c;开发一个大型的企业级系统&#xff0c;公司往往需要大量的人力做支持后盾&#xff0c;如需…

音频采集的相关基础知识

本文引注: https://zhuanlan.zhihu.com/p/652629744 1.麦克风的种类 (1)模拟麦克风 ECM麦克风&#xff1a;驻极体电容麦克风(ECM)&#xff0c;典型的汽车ECM麦克风是一种将ECM单元与小型放大器电路整合在单个外壳中的装置。放大器提供一个模拟信号&#xff0c;其电压电平允许…

亚马逊买家号注册用手机好还是邮箱好

在亚马逊上注册买家号可以用邮箱也可以用手机号&#xff0c;但是具体哪种好&#xff0c;我们可以根据以下因素来进行选择&#xff1a; 1、手机号 短信验证&#xff1a;亚马逊可以通过短信向你发送验证码&#xff0c;以确保你的身份。使用手机号可能更方便接收这些验证码。 安…