Mapbox + ECharts 实现简单迁徙图

概述

ECharts是开源的可视化图表库,其中有丰富的图表。本文使用Mapbox结合ECharts插件实现了简单的迁徙地图。

预览效果

在这里插入图片描述

实现代码

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>mapbox + echarts (简单迁徙图)</title>
  <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
  <script src="https://api.mapbox.com/mapbox-gl-js/v2.0.0/mapbox-gl.js"></script>
  <link href="https://api.mapbox.com/mapbox-gl-js/v2.0.0/mapbox-gl.css" rel="stylesheet" />
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script>
  <script src="./EchartsLayer.js"></script>
  <style>
    body {
      margin: 0;
      padding: 0;
    }

    #map {
      position: absolute;
      top: 0;
      bottom: 0;
      width: 100%;
    }
</style>
</head>

<body>
  <div id="map"></div>
  <script>
    mapboxgl.accessToken = 'your accessToken';
    var map = new mapboxgl.Map({
      container: 'map',
      style: 'mapbox://styles/mapbox/streets-v10',
      center: [119.2070396626, 26.0471838188],
      minZoom: 12,
      zoom: 14
    });

    var geoCoordMap = {
      "1": [119.2070396626, 26.0471838188],
      "2": [119.2147498638, 26.0481609598],
      "3": [119.209339, 26.038355],
      "4": [119.2163806469, 26.0442086921],
    };
    var oneData = [
      [{
        name: "1"
      },
      {
        name: "2",
        value: 20
      }
      ],
      [{
        name: "1"
      },
      {
        name: "3",
        value: 20
      }
      ],
      [{
        name: "1"
      },
      {
        name: "4",
        value: 20
      }
      ]
    ];

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

    var series = [];
    [
      ["1", oneData],
    ].forEach(function (
      item,
      i
) {
      series.push({
        name: 'geolines',
        type: "lines",
        coordinateSystem: "GLMap",
        zlevel: 1,
        effect: {
          show: true,
          period: 4,
          trailLength: 0.8,
          color: '#f00',
          symbolSize: 4
        },
        lineStyle: {
          normal: {
            color: 'rgba(34, 181, 230, 0.15)',
            width: 0.5,
            opacity: 0.4,
            curveness: 0.2
          }
        },
        data: convertData(item[1])
      });
    });

    var option = {
      GLMap: {
        roam: true
      },
      coordinateSystem: 'GLMap',
      //series是在地图上的线条等效果的配置文件,具体可以查阅文档。
      series: series
    };

    map.on('load', () => {
      var echartslayer = new EchartsLayer(map);
      echartslayer.chart.setOption(option);
    })
</script>

</body>

</html>

说明

  1. 代码中引入的EChartsLayer.js文件,源于超图的共享,稍后会把链接放在文末。
  2. 本文只是实现了简单的迁徙图,复杂的样式可以参考ECharts Gallery或者超图的Demo。

相关链接

超图官方GitHub EChartsLayer.js文件
超图官方Mapbox GL 迁徙图示例
ECharts Gallery 线图示例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你想了解关于 Mapbox GL 和 Echarts 迁徙的相关内容吗?Mapbox GL 是一个开源的地绘制库,可以用来创建交互式的地应用程序。Echarts 是一个基于 JavaScript 的数据可视化库,可以用来展示各种类型的表,包括迁徙。 要使用 Mapbox GL 和 Echarts 创建迁徙,你可以按照以下步骤进行操作: 1. 首先,引入 Mapbox GL 和 Echarts 的相关库文件到你的项目中。你可以从官方网站或使用包管理工具如npm或yarn来安装它们。 2. 创建一个包含地容器的 HTML 元素,在这个容器中将显示迁徙。你可以使用 Mapbox GL 提供的 API 来初始化地和设置样式。 3. 准备迁徙数据。迁徙数据通常包含起始地点、目标地点和迁徙人数等信息。你可以将这些数据存储在一个 JSON 文件中,或者通过网络请求从后端获取。 4. 在 JavaScript 代码中,使用 EchartsAPI 创建一个迁徙实例。通过配置项,你可以设置迁徙的样式、数据源和交互行为等。 5. 将迁徙实例绑定到地容器中,这样迁徙就会在地上进行渲染。 以下是一个简单的示例代码,演示了如何使用 Mapbox GL 和 Echarts 创建迁徙: ```html <!DOCTYPE html> <html> <head> <title>Mapbox GL + Echarts 迁徙</title> <meta charset="utf-8" /> <style> #map { width: 800px; height: 600px; } </style> </head> <body> <div id="map"></div> <script src="path/to/mapbox-gl.js"></script> <script src="path/to/echarts.js"></script> <script> // 初始化地 mapboxgl.accessToken = 'your-access-token'; var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [lon, lat], zoom: 10 }); // 准备迁徙数据 var migrationData = [ { from: [fromLon1, fromLat1], to: [toLon1, toLat1], count: 100 }, { from: [fromLon2, fromLat2], to: [toLon2, toLat2], count: 200 }, // ... ]; // 创建迁徙实例 var chartDom = document.getElementById('map'); var myChart = echarts.init(chartDom); var option = { series: [{ type: 'lines', data: migrationData.map(function (item) { return { coords: [item.from, item.to], value: item.count }; }), // 其他配置项... }] }; myChart.setOption(option); // 将迁徙绑定到地容器中 map.on('load', function () { var canvas = myChart.getCanvas(); var container = map.getCanvasContainer(); container.appendChild(canvas); }); </script> </body> </html> ``` 请注意,上述代码中的一些参数如 access token、经纬度等需要根据你的实际情况进行设置。 希望这个回答能够帮到你!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值