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

基于SpringBoot和Leaflet的邻省GDP可视化实战

目录

前言

一、技术实现路径

1、空间数据检索

2、数据展示检索流程

二、SpringBoot后台实现

1、模型层实现

2、控制层实现

三、WebGIS前端实现

1、控制面展示

2、成果展示

四、总结


前言

        在数字化浪潮席卷全球的今天,数据已成为驱动社会经济发展、指导政策制定、促进科学研究的关键要素。如何高效收集、处理并直观展现这些数据,成为了各领域面临的重要课题。特别是在经济学领域,GDP(国内生产总值)作为衡量一个国家或地区经济规模和发展水平的核心指标,其数据的可视化不仅能够帮助我们迅速把握经济状况,还能为政策制定者提供有力的决策支持。在此背景下,结合SpringBoot这一轻量级Java开发框架与Leaflet这一开源JavaScript库,开展邻省GDP可视化实战项目,无疑是一次富有意义的技术探索与实践。  

        将SpringBoot与Leaflet结合,构建邻省GDP可视化系统,旨在通过后端强大的数据处理能力,结合前端直观的地图展示,实现数据的动态更新与交互分析。该系统首先利用SpringBoot搭建后端服务,负责数据的收集、清洗、存储及API接口的提供。考虑到数据的时效性和准确性,后端可能会定期从国家统计局等权威渠道获取最新的GDP数据,并通过RESTful API向前端提供服务。前端则利用Leaflet构建交互式地图界面,将邻省的GDP数据以地图标注、区域填充色等形式直观展现,用户可以通过点击、悬停等操作查看具体省份的GDP信息,甚至进行时间序列对比,从而更深入地理解经济发展趋势和区域差异。

        总之,基于SpringBoot和Leaflet的邻省GDP可视化实战项目,不仅是一次技术上的融合创新,更是对经济学数据可视化应用的一次深入探索。通过这一项目,我们不仅能够提升数据处理与分析的能力,还能在实践中加深对经济现象的理解,为推动区域经济的均衡发展贡献科技力量。

一、技术实现路径

        SpringBoot,作为Spring家族的一员,以其“约定优于配置”的理念简化了企业级应用的开发流程,使得开发者能够专注于业务逻辑的实现,而非繁琐的配置管理。它提供了丰富的内置功能,如嵌入式服务器、自动配置、健康检查等,极大地提高了开发效率和应用的可靠性。在构建后端服务时,SpringBoot能够轻松实现对数据库的操作、API接口的设计以及与其他服务的集成,为前端提供稳定且高效的数据支持。而Leaflet,作为一款轻量级的开源JavaScript地图库,以其简洁的API、良好的跨浏览器兼容性以及丰富的插件生态,成为了实现地理数据可视化的首选工具。Leaflet不仅支持基本的地图操作(如缩放、平移),还能轻松叠加各种地理数据图层,如图标标记、多边形、热力图等,使得地理信息的展示既直观又富有互动性。更重要的是,Leaflet能够与多种数据源无缝对接,包括GeoJSON、KML等格式,为开发者提供了极大的灵活性。

1、空间数据检索

        关于在PostGIS中进行相邻省份的检索实现,在之前的博客中有过介绍:基于PostGIS的省域空间相邻检索实践。对于空间数据表的设计与空间检索有详细的介绍。这里将关键的空间检索实现表示如下:

static final String NEIGHBOR_PROVINCE_BYID = "<script>"
+ " select id,code,name,type,st_asgeojson(geom) geomJson from biz_province where id = #{id} " 
+ " union "
+ " select t.id,t.code,t.name,t.type,st_asgeojson(t.geom) geomJson from biz_province s,biz_province t " 
+ " where s.id = #{id} and ST_Touches(s.geom,t.geom)"
+ "</script>";

2、数据展示检索流程

        首先根据前端传入的省域信息,根据省域ID使用St_touches函数查询相邻的省份,然后在后台的Service层方法中查找对应省份的GDP数据, 为了方便在Leaflet前台页面中进行集中展示,我们需要将省份的属性信息、GDP信息和Geometry空间信息进行融合,返回给前端带有GeoJSON的数据接口,最后调用Leaflet的Polygon绘制函数进行绘制。为了方便数据展示,GDP数据我们采用从互联网获取的公开信息,如下:

         以上表格就是我们的基础数据,通过查询得到的省份信息关联GDP可以得到联合的数据后在前端进行展示。

二、SpringBoot后台实现

        本节将重点介绍在SpringBoot中如何实现对PostGIS空间数据库的检索以及控制层API的实现。

1、模型层实现

        在数据库操作模型层中,需要实现前文提到过的相邻国家查询检索方法,在Mapper中的关键代码如下:

static final String NEIGHBOR_PROVINCE_BYID = "<script>"+ " select id,code,name,type,st_asgeojson(geom) geomJson from biz_province where id = #{id} " + " union "+ " select t.id,t.code,t.name,t.type,st_asgeojson(t.geom) geomJson from biz_province s,biz_province t " + " where s.id = #{id} and ST_Touches(s.geom,t.geom)"+ "</script>";
/**
* - 根据省份主键ID查询邻省列表 add by 夜郎king in 2025-02-02
* @param id 查询省份ID
* @return 该国对应的邻省列表
*/
@Select(NEIGHBOR_PROVINCE_BYID)
List<Province> findNeighborProvinceById(@Param("id")Long id);

        为了方便在前台将gdp数据与省份信息进行融合,同时可以实现对象的最大共享,我们基于省份Province对象扩展出一个子类,仅包含一个GDP的属性。

package com.yelang.project.extend.earthquake.domain;
import java.math.BigDecimal;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class ProvinceGdpVO extends Province{private static final long serialVersionUID = 4740578201189215164L;private BigDecimal gdp = new BigDecimal("0");
}

2、控制层实现

        控制层为了实现方便,这里没有将各个省份的GDP数据保存到数据库中,仅模拟使用一个Map数据进行保存。从PostGIS数据库中查询到对应的省份信息后,在根据key去hashMap中进行获取。这种计算方法比较快,实际业务中,我们可以将GDP数据缓存到服务器中,因为这种数据基本上都是不变的,这样可以极大的提升程序的性能。

@RequiresPermissions("eq:nearprovince:list")
@GetMapping("/nearprovince/list/{id}")
@ResponseBody
public AjaxResult nearProvinceList(@PathVariable("id") Long id){List<ProvinceGdpVO> provinceGdpList = new ArrayList<ProvinceGdpVO>();List<Province> provinces = provinceService.findNeighborProvinceById(id);Map<String,BigDecimal> gdpMap = provinceService.province2024GdpMap();if(StringUtils.isNotEmpty(provinces)) {for(Province p : provinces) {ProvinceGdpVO gdpVo = new ProvinceGdpVO();BeanUtils.copyBeanProp(gdpVo, p);if(gdpMap.containsKey(gdpVo.getCode())) {gdpVo.setGdp(gdpMap.get(gdpVo.getCode()));}provinceGdpList.add(gdpVo);}}return AjaxResult.success().put("data", provinceGdpList);}

        可以在前端来看一下返回的数据格式:

三、WebGIS前端实现

        本节将重点展示在Leafelt中如何实现对相邻省份的空间信息以及它的GDP等关键信息的综合展示,关于Leaflet中展示相关信息,在之前的系列博文中均有所提及,故不再赘述。

1、控制面展示

在Leaflet中将循环获取的各个省份的GeoJSON数据信息,然后将GeoJSON数据展示出来。关键代码如下:

function previewGdp(gid,name){$.ajax({  type:"get",  url:prefix + "/nearprovince/list/" + gid,  data:{},  dataType:"json",  cache:false,processData:false,success:function(result){if(result.code == web_status.SUCCESS){showLayerGroup.clearLayers();var legendData = new Array();for(var i = 0;i< result.data.length;i++){var areaData = result.data[i];var color = ccolor = getRandomColor();if(gid == areaData.id){color = "red";}var areaLayer = L.geoJSON(JSON.parse(areaData.geomJson),{style: {color:color,fillColor:color,weight:3,"opacity":0.65, fillOpacity: 0.65 }}).addTo(mymap);var myIcon = L.divIcon({iconSize: null,className: '',popupAnchor:[5,5],shadowAnchor:[5,5],html: buildShowInfo(i,color,areaData)});showLayerGroup.addLayer(areaLayer);//中心点位L.marker(areaLayer.getBounds().getCenter(), { icon: myIcon}).addTo(showLayerGroup);legendData.push({label: "\xa0\xa0"+areaData.name,type: "rectangle",radius: 12,color: color,fillColor: color,fillOpacity: 0.8,weight: 2});}mymap.fitBounds(showLayerGroup.getBounds());//legend.remove();initLegend(legendData);}},error:function(){$.modal.alertWarning("获取空间信息失败");}});}

         下面就来看一下2024年全国各个省份及其邻省的GDP信息展示成果。

2、成果展示

        首先来看下傲视群雄的广东省,如下图所示:

         广东省2024年GDP是141633.81亿元,它的相邻省份分别是:广西壮族自治区、湖南省、江西省、福建省、香港特别行政区和澳门特别行政区。由于香港和澳门的相关数据暂未发布,因此暂时未列入其中。可以看到广西的GDP是28649.40亿元,湖南是53230.99亿元,江西GDP为34202.5亿元,福建GDP为57761.02亿元。广东一个省几乎是人家三个省的和。看了第一名的省份,接下来看一下排名靠中的湖南省,如下图所示:

        与湖南省相邻的省份中, 除了前面介绍过的省份外,还有湖北省、重庆市、贵州省。这三个省份中,湖北省的GDP比湖南省的要稍微多一点,为60012.97亿元,重庆市为32193.15亿元,贵州GDP为22667.12亿元。湖南省的GDP相当于重庆市和贵州省GDP之和。最后来看一下青海省的GDP,如下图所示:

        青海省2024年的GDP是3950.8亿元,而其相邻省份西藏自治区的GDP为2764.94亿元,新疆维吾尔自治区20534.08亿元,甘肃GDP为13002.9亿元,四川GDP为64697.0亿元 。 从数值上可以看到,青海省的GDP还是比较少的,同比发现四川的GDP是比较高的,在全国的排名中也是可以排到前5的,这非常了不起。四川与前面几个省份(广东、江苏、山东、浙江)不一样的是,四川是位于内陆的省份。

四、总结

        以上就是本文的主要内容,本文将SpringBoot与Leaflet结合,构建邻省GDP可视化系统,旨在通过后端强大的数据处理能力,结合前端直观的地图展示,实现数据的动态更新与交互分析。基于SpringBoot和Leaflet的邻省GDP可视化实战项目,不仅是一次技术上的融合创新,更是对经济学数据可视化应用的一次深入探索。通过这一项目,我们不仅能够提升数据处理与分析的能力,还能在实践中加深对经济现象的理解,为推动区域经济的均衡发展贡献科技力量。行文仓促,难免有许多不足之处,如有不足,在此恳请各位专家博主在评论区不吝留言指出,不胜感激。

相关文章:

基于SpringBoot和Leaflet的邻省GDP可视化实战

目录 前言 一、技术实现路径 1、空间数据检索 2、数据展示检索流程 二、SpringBoot后台实现 1、模型层实现 2、控制层实现 三、WebGIS前端实现 1、控制面展示 2、成果展示 四、总结 前言 在数字化浪潮席卷全球的今天&#xff0c;数据已成为驱动社会经济发展、指导政策…...

esp工程报错:something went wrong when trying to build the project esp-idf 一种解决办法

最近上手了正点原子esp32s3板子&#xff0c;环境采用的是vscodeesp-idf插件。导入了正点原子的demo测试&#xff0c;每次都报这个错误无法建造。也不是网上说的ninja error&#xff0c;不是中文路径的问题。 在终端中查看&#xff0c;发现是缺少了git。&#xff08;我这里没有…...

Grouped-Query Attention(GQA)详解: Pytorch实现

Grouped-Query Attention&#xff08;GQA&#xff09;详解 Grouped-Query Attention&#xff08;GQA&#xff09; 是 Multi-Query Attention&#xff08;MQA&#xff09; 的改进版&#xff0c;它通过在 多个查询头&#xff08;Query Heads&#xff09;之间共享 Key 和 Value&am…...

DeepSeek AI人工智能该如何学习?

人工智能&#xff08;Artificial Intelligence, AI&#xff09;是当今科技领域的热门话题&#xff0c;它涵盖了机器学习、深度学习、自然语言处理、计算机视觉等多个子领域。 作为中国科技发展的核心方向之一&#xff0c;AI在国家战略规划中占据了重要地位&#xff0c;特别是在…...

【数据库】【MySQL】索引

MySQL中索引的概念 索引&#xff08;MySQL中也叫做"键&#xff08;key&#xff09;"&#xff09;是一种数据结构&#xff0c;用于存储引擎快速定找到记录。 简单来说&#xff0c;它类似于书籍的目录&#xff0c;通过索引可以快速找到对应的数据行&#xff0c;而无需…...

SprinBoot整合HTTP API:从零开始的实战指南

在现代 Web 开发中,HTTP API 是前后端交互的核心。Spring Boot 作为 Java 生态中备受欢迎的框架,提供了简洁而强大的方式来构建和整合 HTTP API。本文将带你从零开始,通过具体代码示例,展示如何在 Spring Boot 中整合 HTTP API,实现高效、稳定的前后端通信。 一、为什么选…...

可狱可囚的爬虫系列课程 13:Requests使用代理IP

一、什么是代理 IP 代理 IP&#xff08;Proxy IP&#xff09;是一个充当“中间人”的服务器IP地址&#xff0c;用于代替用户设备&#xff08;如电脑、手机等&#xff09;直接与目标网站或服务通信。用户通过代理IP访问互联网时&#xff0c;目标网站看到的是代理服务器的IP地址&…...

DBeaver下载安装及数据库连接(MySQL)

1. DBeaver下载 官网下载地址:Download | DBeaver Community 2. 安装 1. 双击下载的安装包&#xff0c;选择简体中文。 2. 点击下一步。 3. 点击我接受。 4. 如下勾选为所有用户安装&#xff0c;点击下一步。 5. 需重复做1~3 的步骤。 6. 选择组件&#xff0c;默认即可&…...

国产开源PDF解析工具MinerU

前言 PDF的数据解析是一件较困难的事情&#xff0c;几乎所有商家都把PDF转WORD功能做成付费产品。 PDF是基于PostScript子集渲染的&#xff0c;PostScript是一门图灵完备的语言。而WORD需要的渲染&#xff0c;本质上是PDF能力的子集。大模型领域&#xff0c;我们的目标文件格…...

消息中间件的开源实现

根据你的需求&#xff0c;以下是一些可以实现类似阿里巴巴 MetaQ 功能的消息中间件和相关项目&#xff0c;这些项目可以帮助你实现消息的动态配置和管理&#xff1a; 1. RocketMQ RocketMQ 是一个分布式消息中间件&#xff0c;支持高吞吐量、低延迟的消息传递&#xff0c;适合…...

AcWing 299 裁剪序列

这道题算是我做过所有的单调队列优化 d p dp dp 题目中最难想的一道题&#xff0c;所以写篇题解再捋捋思路。 暴力 首先很容易想到设 d p i dp_i dpi​ 表示将前 i i i 个数划分成若干序列&#xff0c;【每个序列的最大值之和】的最小值。 那么就会有&#xff1a; d p i …...

P2889 [USACO07NOV] Milking Time S

题目大意 有 N N N 个小时可以挤奶。其中有 m m m 个时间段可以给 Bessis 奶牛挤奶。第 i i i 个时间段为 s i s_i si​ ~ t i t_i ti​&#xff0c;可以获得 E f f i Eff_i Effi​ 滴奶。每次挤完奶后&#xff0c;人都要休息 R R R 小时。最后问&#xff0c;一共能挤出…...

基于Spring Boot的健康医院门诊在线挂号系统设与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

PyTorch-基础(CUDA、Dataset、transforms、卷积神经网络、VGG16)

PyTorch-基础 环境准备 CUDA Toolkit安装&#xff08;核显跳过此步骤&#xff09; CUDA Toolkit是NVIDIA的开发工具&#xff0c;里面提供了各种工具、如编译器、调试器和库 首先通过NVIDIA控制面板查看本机显卡驱动对应的CUDA版本&#xff0c;如何去下载对应版本的Toolkit工…...

复现论文:DPStyler: Dynamic PromptStyler for Source-Free Domain Generalization

论文&#xff1a;[2403.16697] DPStyler: Dynamic PromptStyler for Source-Free Domain Generalization github: TYLfromSEU/DPStyler: DPStyler: Dynamic PromptStyler for Source-Free Domain Generalization 论文: 这篇论文还是在PromptStyler:Prompt-driven Style Gener…...

6.将cr打包成网络服务|使用postman进行测试|编写oj_server的服务路由功能(C++)

将cr打包成网络服务 compile_server.cc #include "compile_run.hpp" #include "../comm/httplib.h"using namespace ns_compile_and_run; using namespace httplib;//编译服务随时可能被多个人请求&#xff0c;必须保证传递上来的code&#xff0c;形成源…...

基于SpringBoot + Vue的共享汽车(单车)管理系统设计与实现+毕业论文+开题报告+指导搭建视频

本系统包含管理员、用户两个角色。 管理员角色&#xff1a;个人中心管理、用户管理、投放地区管理、汽车信息管理、汽车投放管理、汽车入库管理、使用订单管理、汽车归还管理。 用户角色&#xff1a;注册登录、汽车使用下单、汽车归还。 本共享汽车管理系统有管理员和用户。管…...

Day54(补)【AI思考】-SOA,Web服务以及无状态分步解析与示例说明

文章目录 **SOA&#xff0c;Web服务以及无状态**分步解析与示例说明**分步解析与示例说明****1. 核心概念解析****2. 为什么说SOA与Web服务是“正交的”&#xff1f;****3. 架构风格 vs. 实现技术****4. 接口&#xff08;Interface&#xff09;的核心作用****5. Web服务的“被认…...

回溯算法之组合和排列问题

文章目录 1.什么是回溯算法2.回溯算法解题步骤3.回溯算法解决组合问题4.回溯算法解决排列问题 1.什么是回溯算法 回溯算法是一种通过尝试所有可能的解决方案来解决问题的算法策略&#xff0c;它通常用于求解组合优化、排列组合、路径搜索等类型的问题,是一种暴力求解的算法。 2…...

gihub上适合练手的Python项目

GitHub 上有许多适合练手的 Python 项目&#xff0c;涵盖了从初学者到中级开发者的不同难度级别。以下是一些推荐的项目类型和具体示例&#xff0c;帮助你提升 Python 编程技能&#xff1a; 1. 基础项目 适合初学者&#xff0c;帮助掌握 Python 基础语法和常用库。 示例项目&…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...