基于PostGIS的各地级市路网长度统计及Echarts图表可视化实践-以湖南省为例
目录
前言
一、路网长度计算
1、地级市列表查询
2、地级市路网长度查询
二、Echarts可视化实现
1、Echarts后端生成
2、引入Colormap配色
3、前端微调
三、总结
前言
在当今快速发展的社会中,交通路网的建设与布局对于一个地区的经济发展、居民生活以及城市规划都具有至关重要的作用。湖南省作为我国中部地区的重要省份,其内部各地级市的路网发展程度参差不齐,准确掌握各地级市路网的长度信息,不仅有助于交通部门进行合理的规划和优化,还为城市管理者提供了决策依据,同时也为社会各界了解湖南省的交通现状提供了重要的参考。
通过将湖南省各地级市的路网数据存储于 PostGIS 数据库中,可以利用其丰富的空间函数和工具,实现对路网长度的精确统计,从而摆脱传统人工测量和统计的繁琐与不准确。然而,仅仅得到路网长度的数值数据还不足以直观地呈现其分布和差异情况。此时,数据可视化技术就显得尤为重要。Echarts 作为一款基于 JavaScript 的开源数据可视化工具,以其丰富的图表类型、精美的视觉效果和良好的交互性而被广泛应用于各个领域。通过 Echarts,可以将各地级市路网长度数据以直观易懂的图表形式展示出来,如柱状图、折线图、地图等,使决策者和普通用户能够迅速抓住数据的关键信息,深入了解湖南省各地级市路网发展的整体态势和个体差异。
本研究以湖南省为例,旨在结合 PostGIS 和 Echarts 这两大技术工具,开展基于 PostGIS 的各地级市路网长度统计及 Echarts 图表可视化实践。通过对湖南省各地级市路网数据的收集、整理和存储,利用 PostGIS 进行路网长度的精确统计分析,并借助 Echarts 的可视化功能,将统计结果以生动、形象的方式呈现出来,为进一步推动湖南省交通事业的发展,优化路网布局,提升城市规划和管理水平提供科学、直观的依据,同时也为类似基于空间数据的统计与可视化研究提供一个具有参考价值的实践案例,探索 GIS 技术与数据可视化技术在实际应用中的深度融合与创新应用模式。
一、路网长度计算
随着地理信息系统(GIS)技术的不断发展,PostGIS 作为一款强大的开源空间数据库扩展,为处理地理空间数据提供了极大的便利。PostGIS 能够高效地存储、查询和分析地理空间数据,为路网长度统计等空间分析任务提供了坚实的技术支撑。本节将重点讲解如何查询省份对应的地级市列表以及如何查询地级市的路网长度,这里均采用基于PostGIS空间数据库来实现,省域以湖南省为例。
1、地级市列表查询
想实现指定省份下属地级市查询,这里需要使用到之前提到过的地级市信息表。对应的表结构在此不再赘述,查询的SQL如下:
select * from biz_city t1 where t1.province_code = '430000';
在客户端软件执行以上SQL,以上sql中430000表示湖南省的省份代码,执行结果如下:
2、地级市路网长度查询
在查询出湖南省对应的地级市列表之后,接下来需要使用表关联的方式,关联我们之前使用过的路网数据库表,求解该地级市对应的路网长度,这里给出查询SQL的实例,关键代码如下:
select sum(st_length(r.geom :: geography)) / 1000.0 rlength,t1.city_code,
max(t1.city_name) city_name
from biz_road_network r ,biz_city t1
where st_contains(t1.geom, r.geom)
and t1.province_code = '430000'
group by t1.city_code
order by rlength desc;
这里对上述SQL语句简单解释一下,这里使用了两张空间表进行关联查询即路网数据表和地市数据表,关联查询条件为对应地市区域包含的路网数据,即空间包含函数:st_contains();接着使用st_length();来求解路网的总长度。为了保证对查询结果的的单位是米制,因此需要将geometry数据转为geography后再进行计算,同时为了在展示路网数据长度时,单位显示公里或者千米,在返回的米制结果时除以1000表示千米。在客户端软件执行以上SQL之后,可以在响应窗口中看到以下结果:
以上就是在PostGIS中使用空间表关联查询的实现过程。 下面我们基于这个查询结合Echarts来做可视化。
二、Echarts可视化实现
俗话说,一图胜千言。这句话说的就是图表的魅力,使用图表不仅可以让结果展现得更加直观,同时增加了结果的趣味性,如果大家有看论文的习惯,在很多的科研论文,尤其是SCI等国外期刊对于图表的要求,表达、配色等有更高的要求。这里简单的介绍一下如何在后端使用Echarts来进行省域地级市的报表可视化。本章将分厂三个小节进行,首先讲解如何使用java在后台生成Echarts,然后结合如何在图表组件中使用ColorMap来优化Echarts的颜色配置,最后简单介绍如何对输出的成果进行简单的微调,比如坐标轴标签的展示等。
1、Echarts后端生成
Echarts不仅可以使用前端的方式进行构建,也可以基于后端工程来实现快速可视化。这里以org.icepear.echarts.echarts-java为例,使用Java语言来介绍如何在后端来生成。在后端生成前,需要引入Maven依赖,Pom.xml的引用如下:
<dependency><groupId>org.icepear.echarts</groupId><artifactId>echarts-java</artifactId><version>1.0.3</version>
</dependency>
这里引入了echarts-java之后,后台数据查询暂且忽略不计,这里仅演示如何将PostGIS查询出来的数据使用Echarts来进行图表展示,后台生成Echarts页面的关键代码如下:
package com.yelang.test;
import org.icepear.echarts.Bar;
import org.icepear.echarts.render.Engine;
public class HnRoadCalculate {public static void main(String[] args) {Bar bar = new Bar().setLegend().setTooltip("item").addXAxis(new String[] { "长沙市", "衡阳市", "岳阳市", "益阳市" ,"常德市","永州市","郴州市","怀化市","邵阳市","株洲市","湘西土家族苗族自治州","娄底市","湘潭市","张家界市"}).addYAxis().addSeries("路网长度", new Number[] { 17753.22156551351,14434.666394707818,14222.249927994444,13073.7041462314,11931.665375579692,10818.152494340602,10666.092158735342,10115.713304567329,9892.10719298748,7374.936096146714,6795.835819083372,5727.464899432551,4861.742381742725,3836.270296502996 });Engine engine = new Engine();engine.render("D:/java-echarts/hnroadlength-02.html", bar);System.out.println("完成...");}
}
运行以上代码之后就会在本地的机器磁盘中生成目标文件,如下图所示:
如果在磁盘中出现上述的文件,说明echarts报表生成成功。 默认情况下,生成的效果如下图所示:
2、引入Colormap配色
如果不要求更多的配色,对X轴的各个地市展示页没有更多的要求,其实以上的需求确实已经基本得到了满足。但是为了让各地市有更明显的区别,这里可以结合之前讲过的colormap的相关知识,根据我们的需要来创建相应的色带,并且可以根据具体的值来生成指定对应的颜色,这样效果就变成渐变,更加符合我们的需求,这里改造如下。首先需要在前端引入ColorMap的js资源,然后自定义色带信息,关键代码如下:
var colorScheme = new MultiColorScheme('', 1000, 18000,new Color(0, 0, 255),new Color(0, 255, 255),new Color(0, 255, 0),new Color(255,255,0),new Color(255,0,0)]);
然后在Echarts中定义具体值对应的颜色值,代码如下:
itemStyle:{color:function(params){console.log(params.value); return makeColor(params.value, colorScheme.minValue, colorScheme.maxValue,colorScheme);}}
这时再运行前面的代码,可以发现颜色的值已经发生了改变,不是之前一成不变的样子了。具体效果如下:
3、前端微调
从色彩上来说基本已经满足了项目的需求,但是很明显的一个问题是,在生成的报表中,在坐标轴的Y轴上,只有有限的五个地市,如长沙市、益阳市、郴州市、株洲市、湘潭市。如何将这些所有的地级市都展示完整呢?从Echarts的官方文档上可以看到,可以设置y轴的偏转角度,关键代码如下:
axisLabel: {interval: 0,rotate: 30, formatter: function(value) { return value;}}
再来看一下设置了坐标偏转的实际效果:
到这里,完整的湖南省地级市路网长度空间分析查询以及Echarts图表可视化基本就已经实现了。希望对大家有所帮助。
三、总结
以上就是本文的主要内容。本研究以湖南省为例,旨在结合 PostGIS 和 Echarts 这两大技术工具,开展基于 PostGIS 的各地级市路网长度统计及 Echarts 图表可视化实践。通过对湖南省各地级市路网数据的收集、整理和存储,利用 PostGIS 进行路网长度的精确统计分析,并借助 Echarts 的可视化功能,将统计结果以生动、形象的方式呈现出来,为进一步推动湖南省交通事业的发展,优化路网布局,提升城市规划和管理水平提供科学、直观的依据,同时也为类似基于空间数据的统计与可视化研究提供一个具有参考价值的实践案例,探索 GIS 技术与数据可视化技术在实际应用中的深度融合与创新应用模式。行文仓促,难免有许多不足之处,如有不足,还恳请各位专家博主在评论区批评指出,不胜感激。
相关文章:

基于PostGIS的各地级市路网长度统计及Echarts图表可视化实践-以湖南省为例
目录 前言 一、路网长度计算 1、地级市列表查询 2、地级市路网长度查询 二、Echarts可视化实现 1、Echarts后端生成 2、引入Colormap配色 3、前端微调 三、总结 前言 在当今快速发展的社会中,交通路网的建设与布局对于一个地区的经济发展、居民生活以及城市…...

mac版excel如何制作时长版环形图
设置辅助列 创建簇状柱形图 将辅助列绘制在次坐标轴 工作时长在主坐标轴,右键分别更改图表类型为圆环。 辅助列圆环全部为灰色,边框为白色 辅助列设置透明度100% 设置辅助列和工作时长列同样的圆环大小 可得 核心:只要辅助列边框不透明…...
PCB设计教程【大师篇】——STM32开发板原理图设计(电源部分)
前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理 目录 前言 1. 工程创建与前期…...
k8s4部署
configMap configmap概述:数据会存储在etcd数据库,其应用场景主要在应用程序的配置 configmap支持的类型(1)键值对(2)多行数据 pod使用configmap资源有两种常见的方式(1)变量注入&a…...
贝叶斯医学分析中“先验”的如何进行选择(文献解读)
贝叶斯医学分析中“先验”的如何进行选择(文献解读) 作者:Callum Taylor, Kathryn Puxty, Tara Quasim, Martin Shaw 文章标题:Understanding Bayesian analysis of clinical trials: an overview for clinicians 期刊名称&#x…...
【汇编逆向系列】七、函数调用包含多个参数之浮点型- XMM0-3寄存器
目录 1. 汇编代码 1.1 debug编译 1.2 release编译 2. 汇编分析 2.1 浮点参数传递规则 2.2 栈帧rsp的变化时序 2.3 参数的访问逻辑 2.4 返回值XMM0寄存器 3. 汇编转化 3.1 Debug编译 3.2 Release 编译 3.3 C语言转化 1. 汇编代码 上一节介绍了整型的函数传参&#x…...

【MySQL系列】MySQL 执行 SQL 文件
博客目录 一、MySQL 执行 SQL 文件的常见场景二、MySQL 执行 SQL 文件的主要方法1. 使用 MySQL 命令行客户端2. 在 MySQL 交互界面中使用 source 命令3. 使用 MySQL Workbench 等图形化工具4. 使用编程语言接口 三、执行 SQL 文件时的注意事项1. 字符集问题2. 事务处理3. 错误处…...

论文MR-SVD
每个像素 7 个 FLOPs意思: FLOPs(浮点运算次数):衡量算法计算复杂度的指标,数值越小表示运算越高效。含义:对图像中每个像素进行处理时,仅需执行7 次浮点运算(如加减乘除等…...

Java 日期时间类全面解析
Java 日期时间类全面解析:从传统到现代的演进 一、发展历程概览 二、传统日期类(Java 8前) 1. java.util.Date - 日期表示类 Date now new Date(); // 当前日期时间 System.out.println(now); // Wed May 15 09:30:45 CST 2023// 特定时间…...

【工具-Wireshark 抓包工具】
工具-Wireshark 抓包工具 ■ Wireshark 抓包工具■ 通过IP指定查看■■ ■ Wireshark 抓包工具 抓包工具】win 10 / win 11:WireShark 下载、安装、使用 Wireshark下载 阿里云镜像 ■ 通过IP指定查看 ■ ■...
Linux安全机制:从SELinux到Intel SGX的堡垒
Linux安全机制:从SELinux到Intel SGX的堡垒 数字世界的钢铁长城 引言:操作系统的"防御工事" 当服务器每天承受数百万次攻击尝试时,Linux内核的安全机制如同精密的防御系统,在纳秒级时间内做出响应。现代Linux安全架构已…...

设备驱动与文件系统:06 目录与文件
磁盘使用的最后一层抽象:文件系统 今天我们讲第31讲,这一讲将完成磁盘对磁盘使用的最后一层抽象。对此板使用最后一层抽象,抽象出来的是什么呢? 实际上我们使用过磁盘,大家应该有这样的认识,最后不管这个磁…...
C++11 Token Bucket (令牌桶)算法的锁无实现及应用
Token Bucket(令牌桶)算法是一种在流量控制和资源分配领域被广泛应用的技术。它通过约束数据传输速率或任务执行频率,确保系统在资源有限的情况下,能够稳定、高效地运行,避免因突发流量或任务积压而导致的性能下降甚至…...
详细介绍uni-app中Composition API和Options API的使用方法
uni-app 中 Composition API 和 Options API 的使用方法详解 一、Options API(Vue 2.x 传统方式) 1. 基本结构 Options API 通过配置对象的不同选项(如 data、methods、computed 等)组织代码: <template><…...
delphi7 链表 使用方法
在 Delphi 中,链表是一种常见的数据结构,用于存储一系列的元素,其中每个元素都包含一个指向列表中下一个元素的引用。在 Delphi 7 中,你可以手动实现链表,或者使用一些现有的集合类,例如 TList 或者 TLinke…...

Linux 系统中的算法技巧与性能优化
引言 Linux 系统以其开源、稳定和高度可定制的特性,在服务器端、嵌入式设备以及开发环境中得到了极为广泛的应用。对于开发者而言,不仅要掌握在 Linux 环境下实现各类算法的方法,更要知晓如何利用系统特性对算法进行优化,以提升…...

【C++系列】模板类型特例化
1. C模板类型特例化介绍 定义:模板类型特例化(Template Specialization)是C中为模板的特定类型提供定制实现的机制,允许开发者对通用模板无法处理的特殊类型进行优化或特殊处理。 产生标准: C98/03…...

K8S认证|CKS题库+答案| 7. Dockerfile 检测
目录 7. Dockerfile 检测 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、修改 Dockerfile 3)、 修改 deployment.yaml 7. Dockerfile 检测 免费获取并激活 CKA_v1.31_模拟系统 题目 您必须在以…...
JAVA 对象 详解
对象 对象结构: 对象头(元数据和指向class的指针)、实例数据、对齐填充 数组对象: 对象头(元数据和指向class的指针)、数组长度、数组数据、对齐填充 对象创建: 一、当Java虚拟机遇到一条…...
MATLAB实战:四旋翼姿态控制仿真方案
以下是一个基于MATLAB/Simulink的四旋翼姿态控制仿真方案。本方案使用简化姿态动力学模型,并设计PID控制器进行稳定控制。 1. 四旋翼姿态动力学模型 核心方程:I * ω̇ ω (I * ω) τ 其中: I diag([Ixx, Iyy, Izz]) 为转动惯量矩阵 …...

基于Scala实现Flink的三种基本时间窗口操作
目录 代码结构 代码解析 (1) 主程序入口 (2) 窗口联结(Window Join) (3) 间隔联结(Interval Join) (4) 窗口同组联结(CoGroup) (5) 执行任务 代码优化 (1) 时间戳分配 (2) 窗口大小 (3) 输出格式…...

c++对halcon的动态链接库dll封装及调用(细细讲)
七个部分(是个大工程) 一,halcon封装函数导出cpp的内容介绍 二,c++中对halcon环境的配置 三,在配置环境下验证halcon代码 四,dll项目创建+环境配置 五,编辑dll及导出 六,调用打包好的动态链接库的配置 七,进行测试 一,halcon的封装及导出cpp的介绍 1,我这里…...

【优选算法】分治
一:颜色分类 class Solution { public:void sortColors(vector<int>& nums) {// 三指针法int n nums.size();int left -1, right n, i 0;while(i < right){if(nums[i] 0) swap(nums[left], nums[i]);else if(nums[i] 2) swap(nums[--right], num…...
QGraphicsView中鼠标点击与移动事件传递给MainWindow
在Qt图形应用程序开发中,QGraphicsView和QGraphicsScene框架提供了强大的2D图形显示功能。然而,当我们需要在主窗口(MainWindow)中处理这些视图中的鼠标事件。 问题背景 在典型的Qt图形应用程序架构中: MainWindow └── QGraphicsView└── QGraphicsScene└── QGra…...

【图片识别改名】如何批量将图片按图片上文字重命名?自动批量识别图片文字并命名,基于图片文字内容改名,WPF和京东ocr识别的解决方案
应用场景 在日常工作和生活中,我们经常会遇到需要对大量图片进行重命名的情况。例如,设计师可能需要根据图片内容为设计素材命名,文档管理人员可能需要根据扫描文档中的文字对图片进行分类命名。传统的手动重命名方式效率低下且容易出错&…...

RabbitMQ 的高可用性
RabbitMQ 是比较有代表性的,因为是基于主从(非分布式)做高可用的RabbitMQ 有三种模式:单机模式、普通集群模式、镜像集群模式。 单机模式 单机模式,生产几乎不用。 普通集群模式(无高可用性) 普通集群模…...
DAY 48 随机函数与广播机制
知识点回顾: 随机张量的生成:torch.randn函数卷积和池化的计算公式(可以不掌握,会自动计算的)pytorch的广播机制:加法和乘法的广播机制 ps:numpy运算也有类似的广播机制,基本一致 作…...
计算机基础知识(第五篇)
计算机基础知识(第五篇) 架构演化与维护 软件架构的演化和定义 软件架构的演化和维护就是对架构进行修改和完善的过程,目的就是为了使软件能够适应环境的变化而进行的纠错性修改和完善性修改等,是一个不断迭代的过程࿰…...
从零开始制作小程序简单概述
以下是结合案例的“从零制作小红书风格小程序”的全流程指南,采用小红书爆款笔记的结构呈现,并附CSDN参考资源👇: 一、核心开发步骤(附工具推荐) 账号与定位 ✅ 注册类型选择:个人店(…...

AI架构师修炼之道
1 AI时代的架构革命 与传统软件开发和软件架构师相比,AI架构师面临着三重范式转换: 1.1 技术维度,需处理异构算力调度与模型生命周期管理的复杂性; 1.2 系统维度,需平衡实时性与资源约束的矛盾; 1.3 价…...