当前位置: 首页 > article >正文

【教程】数据可视化处理之2024年各省GDP排名预测!

过去的一年里,我国的综合实力显著提升,在新能源汽车、新一代战机、两栖攻击舰、航空航天、芯片电子、装备制造等领域位居全球前列。虽然全国各省市全年的经济数据公布还需要一段时间,但各地的工业发展数据财政收入数据已大概揭晓,从统计学来看各地全年的经济数据也基本稳定。

由于预测版本众多,本文仅选取一份,并借助Mapmost SDK for WebGL这款Web端三维地图开发引擎进行数据可视化处理操作演示。

数据参考: https://www.163.com/dy/article/JKP7LIRR05563WUS.html

注:数据仅供参考(不含港澳台)

一、静态图标展示

基于Mapmost SDK for WebGL 实现

该图通过静态图标直观展示了2024年全国各省GDP预测排名情况,并将31个省份划分为三个梯队,每个梯队采用不同的图标进行区分。

步骤如下:

  • 地图初始化:首先,我们设置了地图的基本样式,其中仅包含一个纯色背景图层,以确保地图的简洁性。
let map = new mapmost.Map({
  container: 'map',
  style: {
    version: 8,
    sources: {},
    glyphs: "https://delivery.mapmost.com/font/{fontstack}/{range}.pbf",
    layers: [  // 设置背景图层
      {
        id: "land",
        type: "background",
        layout: {},
        paint: { 'background-color': "#ccc" }
      }
    ]
  },
  center: [106.57423432175028, 32.01709169307357],
  zoom: 4.175765971417573,
  userId: '***',  // 授权码
});
  • 绘制省界图层:通过调用map.addLayer接口,我们添加了一个类型为fill的图层,用以展示各省的边界。利用match表达式,我们为不同省份赋予了不同的颜色,颜色越深表示GDP值越高。
map.on('load',function(){
  // 添加数据源
  map.addSource('zg', {
    "type": "geojson",
    "data": "./zg.geojson" // 替换为你的数据路径
  })

  // 按照GDP值将省份分成5个梯队
  const colorGroups = {
    first: ["广东省", "江苏省", "山东省", "浙江省", "四川省", "河南省"],
    second: ["湖北省", "福建省", "湖南省", "安徽省", "上海市", "北京市"],
    third: ["河北省", "陕西省", "江西省", "重庆市", "辽宁省", "云南省"],
    fourth: ["广西壮族自治区", "内蒙古自治区", "山西省", "贵州省", "新疆维吾尔自治区", "天津市"],
    fifth: ["黑龙江省", "吉林省", "甘肃省", "海南省", "宁夏回族自治区", "青海省", "西藏自治区"]
  };

  // 为每个梯队的省份设置颜色
  function getColorForProvince(provinceName) {
    if (colorGroups.first.includes(provinceName)) return "#ef6548";
    if (colorGroups.second.includes(provinceName)) return "#fc8d59";
    if (colorGroups.third.includes(provinceName)) return "#fdbb84";
    if (colorGroups.fourth.includes(provinceName)) return "#fdd49e";
    if (colorGroups.fifth.includes(provinceName)) return "#fef0d9";
    return "#fff"; 
  }

  // 定义颜色匹配数组
  let colorData = ["match", ["get", "name"],]
  Object.values(colorGroups).flat().map(province => { colorData.push(province, getColorForProvince(province)) })
  colorData.push("#fff")

  // 添加省界图层
  map.addLayer({
    "id": "zg",     // 图层id
    "type": 'fill', // 图层类型
    "source": "zg", // 图层数据源
    "paint": {      // 绘制属性
      "fill-color": colorData,       // 填充颜色
      "fill-outline-color": "#fff",  // 填充轮廓颜色
      "fill-opacity": 1,             // 填充不透明度
    }
  });
})
  • 标注省份名称:接着,我们使用map.addLayer接口添加了一个类型为symbol的图层,用于显示省份名称。通过在layout参数中设置text-field为数据中的name属性,实现了省份名称的文字标注。
// 添加数据源
map.addSource('labels', {
  "type": "geojson",
  "data": "./labels.geojson"
})

// 添加省份标注图层
map.addLayer({
  "id": "name",       // 图层id
  "type": "symbol",   // 图层类型
  "source": "labels", // 图层数据源
  "layout": {         // 布局属性
    "text-field": ["get", "name"],   // 文本字段,从GeoJSON数据中获取'name'属性作为文本
    "text-variable-anchor": ["top"], // 文本锚点位置,始终在顶部
    "text-allow-overlap": true, // 允许文本重叠
    "text-size": 12, // 文本大小
  },
  "paint": { // 绘制属性
      "text-color": "#5c2223", // 文本颜色
  }
})
  • 自定义图标:在添加图标之前,我们使用map.loadImagemap.addImage方法加载自定义图标。随后,再次通过map.addLayer接口添加一个类型为symbol的图层,并利用match表达式为每个省份指定相应的图标,从而清晰地展示了各省份的GDP预测排名情况。
// 图标路径数组
const iconPaths = ['./icons/icon1.png', './icons/icon2.png', ..., './icons/icon31.png'];

// 遍历图标路径数据并加载图标
iconPaths.forEach((path, index) => {
  map.loadImage(path, (error, image) => {
     if (error) throw error;
     map.addImage(`icon${index + 1}`, image);
  });
});

// 设置数据源
map.addSource('icons', {
  "type": "geojson",
  "data": "./icons.geojson"
})

// 添加自定义图标图层
map.addLayer({
  "id": "icons",     // 图层id
  "type": "symbol",  // 图层类型
  "source": "icons", // 图层数据源
  "layout": {        // 布局属性
    "icon-image": [  // 图标图片,使用'match'表达式根据'name'属性匹配不同的图标
      'match',
      ['get', 'name'],
      "广东省", "icon1",
      "江苏省", "icon2",
      // ...省略其余图标匹配规则
      "icon" 
    ],
    "icon-size": 0.25,          // 图标大小
    "icon-allow-overlap": true  // 允许图标重叠
  }
})

二、图层展示

基于Mapmost SDK for WebGL 实现

该图根据各省GDP的数值将31个省份划分为五个梯队,每个梯队采用不同大小和颜色的点进行区分。步骤如下:

  • 添加底图:首先,我们通过map.addRasterLayer2接口引入了天地图作为底图。
let option = {
  'id': 'tdt',
  'project': '4490',
  'source': {
    'tiles': ['<your TDT url>'],  // 替换成你的天地图地址
  }
}
map.addRasterLayer2(option)
  • 标注省份名称:虽然可以使用天地图的标注,但为了控制文字位置,我们选择了使用map.addLayer接口添加一个symbol类型的图层。在这个图层中,我们通过layout参数的text-field设置,从数据中提取name属性,以实现省份名称标注。代码参考静态图标展示第三步。
  • 点状图层绘制:接着,我们通过调用map.addLayer接口,添加了一个circle类型的图层。利用step表达式,我们根据GDP数值范围设定了不同的点样式,从而为每个梯队分配了独特的大小和颜色,以区分各省份的经济表现。
// 添加数据源
map.addSource("points", {
  type: "geojson",
  data: "./points.geojson",
});

// 添加点图层
map.addLayer({
  id: "points",     // 图层id
  type: "circle",   // 图层类型
  source: "points", // 图层数据源
  paint: { // 绘制属性
    "circle-color": [  // 圆的颜色,使用'step'表达式根据数值分段
      "step",
      ["get", "num"], // 获取GeoJSON数据中的"num"属性,即GDP值
      "rgb(76,175,80)", 13000,  // 如果num小于13000,颜色为"rgb(76,175,80)"
      "rgb(33,150,243)", 27000, // 如果num在13000到27000之间,颜色为"rgb(33,150,243)"
      "rgb(255,152,0)", 47000,
      "rgb(244,67,54)", 60000,
      "rgb(156,39,176)" // 如果num大于60000,颜色为"rgb(156,39,176)"
     ],
    "circle-stroke-width": 7, // 圆形边框的宽度
    "circle-stroke-color": [  // 圆形边框的颜色,使用'step'表达式根据数值分段
      "step",
      ["get", "num"],
      "rgba(76,175,80,0.4)", 13000, // 如果num小于13000,颜色为"rgba(76,175,80,0.4)"
      "rgba(33,150,243,0.4)", 27000, // 如果num在13000到27000之间,颜色为"rgba(33,150,243,0.4)"
      "rgba(255,152,0,0.4)", 47000,
      "rgba(244,67,54,0.4)", 60000,
      "rgba(156,39,176,0.4)" // 如果num大于60000,颜色为"rgba(156,39,176,0.4)"
     ],
     "circle-radius": [ // 圆形的半径,使用'step'表达式根据数值分段
       "step",
       ["get", "num"],
       10, 13000, // 如果num小于13000,半径为10
       14, 27000, // 如果num在13000到27000之间,半径为14
       18, 47000,
       22, 60000,
       26 // 如果num大于60000,半径为26
     ],
  }
});

基于Mapmost SDK for WebGL 实现

  • 此外,我们可以在该图层上实现点击交互功能,当我们点击某个省份时,将以弹框的形式展示该省的排名及其GDP数据等详细信息,从而增强互动性和信息呈现效果。
// 当点击图层id为'points'的图层时,执行以下函数
map.on('click', 'points', function (e) {
  // 添加弹框
  new mapmost.Popup()
    .setLngLat(e.lngLat) // 设置弹框位置
    .setHTML(e.features[0].properties.no + "<br>" + e.features[0].properties.name + ":" + e.features[0].properties.num) // 设置弹框内容
    .addTo(map);
});

三、动态图标展示

动图封面

基于Mapmost SDK for WebGL 实现

该图以动态图标的形式展示了预测排名前十名的省份。步骤如下:

  • 创建Canvas图标:首先,根据设计需求自定义绘制Canvas图标,确保图标样式符合预期的视觉效果。
  • 添加标注图层:接着,通过调用用map.addLayer接口,添加一个symbol类型的图层,并将自定义的Canvas图标应用到该图层上,从而完成标注图层的设置。

此部分代码较长,可参考示例:https://www.mapmost.com/mapmost_docs/webgl/latest/docs/demo/2D_Vector_AddCanvasIcon/

上述数据为预测数据,仅供参考。根据2025年国家统计局主要统计信息发布日程安排,2025年1月17日10:00将发布2024年国民经济运行情况,届时将会公布2024年国内生产总值(GDP)初步核算结果等数据。

本篇教程为大家展示了Mapmost SDK for WebGL的数据可视化能力,作为面向开发者的Web端三维地图开发引擎,平台还提供包含点、线、面、蜂窝、热力等几十种数据可视化类型,支持百万量级数据渲染。

基于Mapmost SDK for WebGL 实现

基于专业知识构建,Mapmost SDK for WebGL 通用且易用,助力挖掘数据价值,如有相关需求也可私信咨询~


http://www.kler.cn/a/488044.html

相关文章:

  • Vue.js组件开发-实现滚动加载下一页
  • uml活动图和用例图之间有一致性要求吗
  • 数据挖掘实训:天气数据分析与机器学习模型构建
  • GPU算力平台|在GPU算力平台部署Qwen-2通义千问大模型的教程
  • 设计模式学习[15]---适配器模式
  • LeetCode -Hot100 - 53. 最大子数组和
  • 理解Unity脚本编译过程:程序集
  • Markdown中甘特图的使用
  • 需求:h5和小程序预览图片需要有当前第几张标识
  • 人工智能知识分享第九天-机器学习_集成学习
  • Center Loss 和 ArcFace Loss 笔记
  • socket网络编程-TC/IP方式
  • 《解锁数据科学的魔法盒子:JupyterLab 全面解析》
  • 什么是VLAN?
  • eslint.config.js和.eslintrc.js有什么区别
  • flutter 开启了服务并隐藏后如何关闭
  • Jmeter_后置处理beanshell
  • 监控异地组网有哪些方法,含神卓S700设置教程
  • 移远BC28_opencpu方案_pin脚分配
  • 【深度学习基础】线性神经网络 | softmax回归
  • QTcpSocket 如何统计在线时长
  • 数据结构——栈的实现
  • 在idea中配置多个版本的jdk
  • 【机器学习:十二、TensorFlow简介及实现】
  • 【前端知识】手搓微信小程序
  • 【运维】如何检查电脑正常异常和关机日志? 1074正常关机或重启 6006正常关机 41非正常关机 6008异常关机