<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>迁徙图</title>
<style>
html, body, #map {
padding:0;
margin:0;
height:100%;
width:100%;
}
.mytitle{
z-index:1000;
color:#fff;
font-size:16px;
text-align:center;
position:absolute;
top:10px;
left:40%;
width:20%
}
</style>
<!--<link rel="stylesheet" href="http://localhost/arcgis_js_api/library/4.10/esri/css/main.css">-->
<link rel="stylesheet" href="https://js.arcgis.com/4.11/esri/themes/light/main.css"/>
<script src="echarts.min.js"></script>
<script src="echarts-gl.js"></script>
<script>
var dojoConfig = {
parseOnLoad: true,
packages: [{
name: "src",
location: location.pathname.replace(/\/[^/]+$/, "")+"/src"
}]
};
</script>
<!--<script src="http://localhost/arcgis_js_api/library/4.10/init.js"></script>-->
<script src="https://js.arcgis.com/4.11/"></script>
<script>
var map;
require([
"esri/Map",
"esri/Basemap",
"esri/layers/TileLayer",
"src/echartsLayer",
"esri/views/SceneView",
"esri/views/MapView",
"dojo/domReady!"
], function (
Map,Basemap,TileLayer,echartsLayer,SceneView,MapView
) {
var layer = new TileLayer({
url: "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer"
});
var customBasemap = new Basemap({
baseLayers: [layer],
title: "Custom Basemap",
id: "myBasemap"
});
var map = new Map({
basemap: customBasemap
});
var view = new SceneView({
//var view = new MapView({
center: [110.62, 36.32], // long, lat
container: 'map',
map: map,
zoom: 4
});
var geoCoordMap = {
'中国': [116.46, 39.92],
'澳大利亚': [133.7695, 24.5271],
'巴西': [-55.8984, -7.5368],
'哥伦比亚': [-73.8501, 4.2149],
'墨西哥': [-103.0518, 22.1874],
'日本': [138.9771, 36.6508],
'智利': [-69.5435, -26.6671]
};
var GZData = [
[{name:'中国'},{name:'中国',value:200}],
[{name:'中国'},{name:'澳大利亚',value:150}],
[{name:'中国'},{name:'巴西',value:150}],
[{name:'中国'},{name:'哥伦比亚',value:150}],
[{name:'中国'},{name:'墨西哥',value:150}],
[{name:'中国'},{name:'日本',value:150}],
[{name:'中国'},{name:'智利',value:150}]
];
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 = [];
[['广州', GZData]].forEach(function (item, i) {
series.push({
//name: item[0] + ' Top10',
name: '',
type: 'lines',
coordinateSystem: 'arcgis',
zlevel: 1,
effect: {
show: true,
period: 6,
//trailLength: 0.7,
trailLength: 0.1,
color: '#fff',
symbolSize: 2
},
lineStyle: {
normal: {
color: color[i],
width: 0,
curveness: 0.2
}
},
data: convertData(item[1])
},
{
//name: item[0] + ' Top10',
name: '',
type: 'lines',
coordinateSystem: 'arcgis',
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',
name: '',
type: 'effectScatter',
coordinateSystem: 'arcgis',
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])
};
})
});
});
view.on('layerview-create',function(){
var chart = new echartsLayer(view,echarts);
var option = {
tooltip : {
trigger: 'item'
},
series: series
};
chart.setChartOption(option);
});
});
</script>
</head>
<body class="tundra">
<div id="map"></div>
<span class="mytitle"></span>
</body>
</html>