【教程】数据可视化处理之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 + "
    " + 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 通用且易用,助力挖掘数据价值,**如有相关需求也可私信咨询~

相关推荐
拓端研究室TRL4 小时前
R语言Stan贝叶斯空间条件自回归CAR模型分析死亡率多维度数据可视化
开发语言·信息可视化·数据挖掘·回归·r语言
码界筑梦坊12 小时前
基于Flask的京东商品信息可视化分析系统的设计与实现
大数据·python·信息可视化·flask·毕业设计
pianmian112 小时前
python绘图之箱型图
python·信息可视化·数据分析
白水先森21 小时前
ArcGIS Pro中等高线的生成与应用详解
经验分享·arcgis·信息可视化
码界筑梦坊1 天前
基于Flask框架的食谱数据可视化分析系统的设计与实现
python·信息可视化·flask·毕业设计
TtCoffee_20251 天前
《Python在数据可视化中的应用与实践》
信息可视化
码界筑梦坊1 天前
基于机器学习的水文数据采集预测与可视化分析系统
人工智能·python·机器学习·信息可视化·flask·毕业设计
码界筑梦坊2 天前
基于Flask的第七次人口普查数据分析系统的设计与实现
后端·python·信息可视化·flask·毕业设计
Guheyunyi2 天前
接入DeepSeek后,智慧园区安全调度系统的全面提升
人工智能·python·安全·信息可视化·数据分析·智慧城市
AxureMost2 天前
【Axure 模版素材】数据可视化驾驶舱+图表素材 - AxureMost
信息可视化·产品经理·axure