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

news2025/1/11 6:48:47

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

由于预测版本众多,本文仅选取一份,并借助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.coloradmin.cn/o/2274768.html

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

相关文章

Mysql快速列出来所有列信息

文章目录 需求描述实现思路1、如何查表信息2、如何取字段描述信息3、如何将列信息一行展示4、拼接最终结果 需求描述 如何将MySQL数据库中指定表【tb_order】的所有字段都展示出来&#xff0c;以备注中的中文名为列名。 实现思路 最终展示效果&#xff0c;即拼接出可执行执行…

数据结构(Java版)第七期:LinkedList与链表(二)

专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 一、链表的实现&#xff08;补&#xff09; 接上一期&#xff0c;下面我们要实现删除所有值为key的元素&#xff0c;这时候有的老铁就会想用我们上一期中讲到的remove方法&#xff0c;循环使用remove方法&#…

初学stm32 --- ADC单通道采集

目录 ADC寄存器介绍&#xff08;F1&#xff09; ADC控制寄存器 1(ADC_CR1) ADC控制寄存器 2(ADC_CR2) ADC采样时间寄存器1(ADC_SMPR1) ADC采样时间寄存器2(ADC_SMPR2) ADC规则序列寄存器 1(ADC_SQR1) ADC规则序列寄存器 2(ADC_SQR2) ADC规则序列寄存器 3(ADC_SQR3) AD…

Eclipse配置Tomcat服务器(最全图文详解)

前言&#xff1a; 本章使用图文讲解如何在Eclipse开发工具中配置Tomcat服务器、如何创建和启动JavaWeb工程&#xff0c;欢迎童鞋们互相交流。觉得不错可以三连订阅喔。 目标&#xff1a; 一、配置Tomcat服务器 1. 切换Eclipse视图 2. 打开菜单 3. 找到服务选项 4. 选择…

Apache Hudi vs Delta Lake vs Apache Iceberg

[一]功能对比 Hudi Delta Lake Iceberg 读写功能对比 ACID Transactions 我可以对列式文件进行版本控制和重写吗&#xff1f; Copy-On-Write 我可以在不重写整个文件的情况下高效地摊销更新吗&#xff1f; Merge-On-Read 我可以高效地将初始加载布局到表中吗&…

鸿蒙UI开发——日历选择器

1、概 述 在项目开发中&#xff0c;我们时常会用到日历选择器&#xff0c;效果如下&#xff1a; ArkUI已经为我们提供了组件&#xff0c;我们可以直接使用&#xff0c;下面针对日历组件做简单介绍。 2、CalendarPickerDialog 接口定义如下&#xff1a; // 定义日历选择器弹…

磁盘满造成业务异常问题排查

最近遇到一个因为磁盘满导致的问题&#xff0c;分享一下&#xff0c;希望能够帮助到以后遇到同样问题的朋友。 早上突然收到业务老师反馈说&#xff1a;上传文件不能正常上传了。 想想之前都好好的&#xff0c;最近又没有更新&#xff0c;为什么突然不能使用了呢&#xff1f;…

Java SPI机制介绍及原理分析

概念介绍 SPI 即 Service Provider Interface &#xff0c;字面意思就是&#xff1a;“服务提供者的接口”&#xff0c;我的理解是专门给服务提供者使用的接口&#xff0c;也就是定义接口的人&#xff0c;和实现接口的人并不是同一个人 SPI 将服务接口和具体的服务实现分离开来…

数据分析-55-时间序列分析之获取时间序列的自然周期时间区间

文章目录 1 获取某年的总天数1.1 get_year_days()1.2 应用函数2 获取某年的总周数2.1 get_year_weeks()2.2 应用函数3 获取某日期属于某年的周数3.1 get_time_yearweek()3.2 应用函数4 获取某年某周的开始时间和结束时间4.1 get_week_start_end()4.2 应用函数5 获取往前num周期…

基于Spring Boot的房屋租赁系统源码(java+vue+mysql+文档)

项目简介 房屋租赁系统实现了以下功能&#xff1a; 基于Spring Boot的房屋租赁系统的主要使用者管理员可登录系统后台&#xff0c;登录后可对系统进行全面管理&#xff0c;包括个人中心、公告信息管理、租客管理、户主管理、房屋信息管理、看房申请管理、租赁合同管理、收租信…

MySQL--2.1MySQL的六种日志文件

大家好&#xff0c;我们来说一下MySQL的6中日志文件。 1.查询日志 查询日志主要记录mysql的select查询的&#xff0c;改配置是默认关闭的。不推荐开启&#xff0c;因为会导致大量查询日志文件储存占用你的空间。 举例查询一下 select * from class&#xff1b; 开启查询日志的命…

汽车供应链关键节点:物流采购成本管理全解析

在汽车行业&#xff0c;供应链管理是一项至关重要的任务。汽车制造从零部件的生产到整车的交付&#xff0c;涉及多个环节&#xff0c;其中物流、采购与成本管理是核心节点。本文将深入分析这些关键环节&#xff0c;探讨如何通过供应商管理系统及相关工具优化供应链管理。 一、…

Phidata源码分析

https://www.phidata.app/是一家agent saas公司&#xff0c;他们开源了phidata框架&#xff0c;从github介绍上看(https://github.com/phidatahq/phidata)&#xff0c;功能很齐全&#xff0c;我们来学习一下。 首先&#xff0c;明确目的&#xff0c;我想了解下面的实现方式&…

TypeScript Jest 单元测试 搭建

NPM TypeScript 项目搭建 创建目录 mkdir mockprojectcd mockproject初始化NPM项目 npm init -y安装TypeScript npm i -D typescript使用VSCode 打开项目 创建TS配置文件tsconfig.json {"compilerOptions": {"target": "es5","module&…

FPGA技术的深度理解

目录 引言 FPGA的基本原理 结构组成 工作原理 FPGA的设计流程 设计阶段 编程阶段 实现阶段 FPGA的应用领域 FPGA编程技巧和示例代码 编程技巧 示例代码 结论 引言 FPGA&#xff08;现场可编程门阵列&#xff09;是一种可编程的集成电路&#xff0c;它允许用户根据…

Mysql进阶篇

一&#xff1a;存储引擎 二&#xff1a;索引 2.1 索引概述 索引&#xff08;index&#xff09;帮助mysql高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&…

《Spring Framework实战》15:4.1.4.6.方法注入

欢迎观看《Spring Framework实战》视频教程 方法注入 在大多数应用场景中&#xff0c;容器中的大多数bean都是单例&#xff08;singletons&#xff09;的。当单例bean需要与另一个单例bean协作或非单例bean需与另一非单例bean协作时&#xff0c;通常通过将一个bean定义为另一个…

Flutter:使用FVM安装多个Flutter SDK 版本和使用教程

一、FVM简介 FVM全称&#xff1a;Flutter Version Management FVM通过引用每个项目使用的Flutter SDK版本来帮助实现一致的应用程序构建。它还允许您安装多个Flutter版本&#xff0c;以快速验证和测试您的应用程序即将发布的Flutter版本&#xff0c;而无需每次等待Flutter安装。…

目标客户营销(ABM)结合开源AI智能名片2+1链动模式S2B2C商城小程序的策略与实践

摘要&#xff1a;在数字化营销日益盛行的今天&#xff0c;目标客户营销&#xff08;Account Based Marketing, ABM&#xff09;作为一种高度定制化的营销策略&#xff0c;正逐步成为企业获取高质量客户、提升市场竞争力的重要手段。与此同时&#xff0c;开源AI智能名片21链动模…

docker(目录挂载、卷映射)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、目录挂载1.命令2.案例3.补充 二、卷映射1.命令2.案例 总结 前言 在使用docker部署时&#xff0c;我们如果要改变一些配置项目&#xff0c;不可能每次都进入…