qq.maps.visualization.Migration 类

Migration 是用于创建迁徙图的类,继承自 qq.map.Overlay。

构造函数

语法:new qq.maps.visualization.Migration(options);

参数:options: { MigrationOptions }(必填)迁徙图参数。其属性如下表

MigrationOptions 说明:

名称 类型 说明
map Map (必填)显示迁徙图的地图
animated Boolean 是否开启动画效果(数据量在200以上时建议关闭动画)
stylePicker Function 样式映射函数,参数为MigrationData,要求返回值符合MigrationStyle对象格式
zIndex Number 图层的层叠顺序,数字从小到大对应层叠顺序从下至上,默认为0

方法

方法名 返回值 说明
show() None 显示迁徙图
hide() None 隐藏迁徙图
destroy() None 删除迁徙图
setData(data: Array.< MigrationData >) None 设置迁徙图的数据(建议数据量不超过1万)
setStylePicker(style: Function) None 设置迁徙图的样式映射函数
setZIndex(zIndex: Number) None 设置图层的层叠顺序
getZIndex() Number 获取图层的层叠顺序

MigrationData 说明:

名称 类型 说明
from Object 迁徙起点,格式为{lat:Number, lng:Number, label:String}
lat Number 纬度
lng Number 经度
label String (可选)标注文字
to Object 迁徙终点,格式为{lat:Number, lng:Number, label:String}
lat Number 纬度
lng Number 经度
label String (可选)标注文字

MigrationStyle 说明:

名称 类型 说明
color Color 线颜色,支持CSS颜色格式
width Number 线宽度,以像素为单位

实例

本示例中,介绍如何创建迁徙图,并进行数据及参数的设置和修改。

JavaScript+HTML
<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title>迁徙图示例</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
	<style type="text/css">
	html, body {
		width: 100%;
		height: 100%;
	}
	* {
		margin: 0px;
		padding: 0px;
	}
	button {
		width: 100px;
		border: 1px solid #555;
	}
	#container {
		height: 90%;
	}
	</style>
	<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&libraries=visualization&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"></script>
	<script>
	window.onload = function(){
        // 创建地图
		var map = new qq.maps.Map(document.getElementById("container"), {
			center: new qq.maps.LatLng(35.200697639, 112.04628804),
            zoom: 5
		});

    	// 创建迁徙图
    	var migration = new qq.maps.visualization.Migration({
			map: map,
			// animated: false,
			stylePicker: function(data) {
				return {
					color: "rgba(255, 0, 0, .5)",
					width: 2
				}
			}
		});

		// 设置数据
		var cq = {lat: 29.5, lng: 106.5, label: "重庆"};
		var bj = {lat: 39.9, lng: 116.4, label: "北京"};
		var cs = {lat: 28.2, lng: 112.9};
		var sh = {lat: 31.14, lng: 121.29};
		var km = {lat: 25.04, lng: 102.42};
		var xs = {lat: 22.01, lng: 100.48};
		var xn = {lat: 36.38, lng: 101.48};
		migration.setData([
			{from:cq, to:bj},
			{from:cq, to:cs},
			{from:cs, to:bj},
			{from:bj, to:xn},
			{from:bj, to:sh},
			{from:cq, to:km},
			{from:km, to:xs}
		]);

		// 监听button事件,更改迁徙图配置参数
		document.getElementById("setOptions").addEventListener("click", function(e) {
			var target = e.target;
			switch (target.id) {
				case "show":
					if (migration.visible) {
						migration.hide();
					} else {
						migration.show();
					}
					break;
				case "data":
					migration.setData(getRandomData(10));
					break;
				case "style":
					migration.setStylePicker(function(data){
						return {
							color: data.from.label === "重庆" ? "rgba(0, 0, 255, .5)" : "rgba(0, 200, 255, .5)",
							width: 1
						};
					});
					break;
				case "destroy":
					migration.destroy();
			}
		});

		function getRandomData(cnt) {
			let dataArray = [];
			let center = cq;
			for (let index = 0; index < cnt; index++) {
				let r = Math.random() * 30;
				let angle = Math.random() * Math.PI * 2;
				dataArray.push({
					from: center,
					to: {
						lat: center.lat + r * Math.sin(angle),
						lng: center.lng + 2 * r * Math.cos(angle),
					}
				});
			}
			return dataArray;
		}
	}
	</script>
</head>
<body>
	<div id="container"></div>
	<div id="setOptions">
		<button id="show">显示/隐藏</button>
		<button id="data">更新数据</button>
		<button id="style">改变样式</button>
		<button id="destroy">删除对象</button>
	</div>
</body>
</html>