基于SpringBoot和PostGIS的应急运输事件影响分析-以1.31侧翻事故为例

目录

前言

一、技术实现路径

1、需要使用的数据

2、空间分析方法

二、相关模块设计与实现

1、运输路线重现开发

2、事故点影响范围实现

3、WebGIS可视化实现

三、讨论

1、界面结果展示

2、影响范围分析

四、总结


前言

        在交通运输发达的当今社会,应急运输事件的发生对社会的稳定和人民的生命财产安全带来了诸多挑战。如何及时、准确地分析此类事件的影响,为应急决策提供有力支持,成为了亟待解决的问题。而 2025 年 1 月 31 日发生在湖南永州零陵区的罐车侧翻事故,更是为我们敲响了警钟,也为我们提供了一个典型案例来展开深入研究。

        此次事故中,车牌为陕 E·F5115(挂车牌为陕 E·265C 挂)的过境罐车在零陵区康济大道和朝阳大道交会处发生侧翻,致使车内装载的 33.5 吨粗苯部分泄漏。事故幸未造成人员伤亡,但粗苯作为一种有毒有害物质,其泄漏引发了严重的环境风险,可能对周边的水资源、土壤以及居民健康造成严重影响。

        在对此次事故的影响分析中,SpringBoot 和 PostGIS 的结合应用展现出了独特的优势。SpringBoot 作为一个开源的 Java 开发框架,具有开发简单、快速、高效等特点,能够为我们搭建稳定、可靠的后端服务。PostGIS 则是 PostgreSQL 的空间数据库扩展,可以高效地处理地理空间数据,实现空间查询、分析等功能。通过 SpringBoot 和 PostGIS 的协同工作,我们可以将事故现场的地理信息、车辆运输数据、环境监测数据等进行整合与分析,直观地呈现事故的影响范围和程度,为应急救援、环境污染治理以及后续的事故调查等工作提供科学依据。

        接下来,本文将详细介绍基于 SpringBoot 和 PostGIS 的应急运输事件影响分析的具体方法和实践过程,深入剖析 1.31 侧翻事故中的数据采集、处理、分析以及可视化展示等各个环节,探讨该技术方案在应急事件中的应用价值和局限性,并对未来的发展方向进行展望,以期为提升我国应急管理水平和应急处置能力贡献一份力量。

一、技术实现路径

        本节将重点介绍本次分析中所需要使用到的相关数据,比如天地图资源、路网数据、风景区点数据、居民点数据、机场数据等。其次介绍具体的空间分析方法。

1、需要使用的数据

序号数据内容说明
1运输路线规划使用天地图的路径规划服务
2路网信息使用天地图服务
3风景区数据PostGIS空间表,biz_scenic_spot
4机场数据PostGIS空间表,biz_global_airport_info
5居民点数据PostGIS空间表,biz_village

2、空间分析方法

        本文重点需要展示两部分的信息,第一个是对运输路线进行还原和回放。第二个重要部分就是需要分析事故点附近的居民点、风景区即机场空间分布范围,由此为相关部门的决策提供一些辅助和支撑。因此这里的空间分析方法也分为两步:第一步是使用SpringBoot调用天地图的路径规划接口,对事故的运输路线进行还原;第二个是通过获取事故侧翻点的经纬度坐标,来分析该点附近1公里、2公里、3公里范围的居民区、景点和飞机场信息。在空间分析中空间的函数使用st_dwithin,具体的实现SQL如下:

with bp as ( select ST_GeomFromText(format('point(%s %s)',111.620623,26.198523),4326) as geom) select ta.* from ( select t.id pk_id,t.name,'scenicspot' as type,st_x(t.geom) lon,st_y(t.geom) lat,
st_distance(t.geom :: geography, bp.geom :: geography) dist from biz_scenic_spot t,bp 
where st_dwithin(t.geom :: geography,bp.geom :: geography,3000 ) 
union 
select t.pk_id,t.name_zh as name,'airport' as type,t.lon_wgs84 lon,t.lat_wgs84 lat,
st_distance(t.geom :: geography, bp.geom :: geography) dist from biz_global_airport_info t,bp where st_dwithin(t.geom :: geography,bp.geom :: geography,3000 )
union 
select t.id pk_id,t.village_name as name,'village' as type,st_x(t.geom) lon,st_y(t.geom) lat,st_distance(t.geom :: geography, bp.geom :: geography) dist from biz_village t,bp 
where st_dwithin(t.geom :: geography,bp.geom :: geography,3000 ) ) ta order by ta.dist 

        在数据库中执行以上语句后得到以下结果:

二、相关模块设计与实现

        本节将重点介绍相关的模块的设计与实现。分为前端和后端两个方面,重点是介绍运输路线的重现和事故点影响范围分析两点。通过本节的介绍,大家将掌握如何来进行相关空间分析的设计与实现。

1、运输路线重现开发

        运输路线的还原实现,主要是在后台使用Uniapi来调用天地图提供的官方服务。虽然在之前的系列文章中曾经介绍了天地图的uniapi调用,但是在之前的博文中。关于路径规划的调用只涉及到了两个参数,即起始点。而在本次博客的事故场景中,我们不仅要实现按照起始点的规划,同时还需要关联中间的转折点,比如本文的事故点,湖南省永州市零陵区康济大道和朝阳大道交汇处。需要在调用路径规划是传入中间的坐标点信息,关键代码如下:

@Override
public TdtResult benzeneTransportation(String lon,String lat) throws Exception {String origInfo = "111.277771,23.469545";//广西梧州String destInfo = "115.029602,35.753199";//河南濮阳 //String mid = "111.620623,26.198523";//湖南省永州市零陵区康济大道和朝阳大道交汇处String mid = lon + "," + lat;// 地图自助选点  26.196898, 111.6203// style 默认0 (0:最快路线,1:最短路线,2:避开高速,3:步行)// 这里选择避开高速String postStr = "%7B'orig':'" + origInfo + "','dest':'" + destInfo + "','mid':'" + mid  + "','style':'2'%7D" ;HttpResponse<String> resp = tdtOptionService.drivePlan(postStr,"search",TDT_SERVER_KEY);JAXBContext context = JAXBContext.newInstance(TdtResult.class);Unmarshaller unmarshaller = context.createUnmarshaller();TdtResult result = (TdtResult) unmarshaller.unmarshal(new StringReader(resp.getBodyResult()));return result;
}

在SpringBoot中实现的天地图uniapi接入示例代码如下:

package com.yelang.project.thridinterface;
import com.burukeyou.uniapi.http.annotation.HttpApi;
import com.burukeyou.uniapi.http.annotation.param.QueryPar;
import com.burukeyou.uniapi.http.annotation.request.GetHttpInterface;
import com.burukeyou.uniapi.http.core.response.HttpResponse;
@HttpApi(url = "http://api.tianditu.gov.cn/")
public interface TdtOptionService {@GetHttpInterface("geocoder")public HttpResponse<String> getGeocoder(@QueryPar("ds") String ds,@QueryPar("tk") String tk);@GetHttpInterface("drive")public HttpResponse<String> drivePlan(@QueryPar("postStr") String postStr,@QueryPar("type") String type,@QueryPar("tk") String tk);@GetHttpInterface("v2/search")public HttpResponse<String> searchV2(@QueryPar("postStr") String postStr,@QueryPar("type") String type,@QueryPar("tk") String tk);
}

        通过Controller的API返回给前端的接口数据如下所示:

        可以很明显的看到,运输路线的重现基本已经实现,在前端的控制台中已经实现对路线的调用。 下面就可以来对空间影响范围进行实现。

2、事故点影响范围实现

        对于事故点的影响范围实现主要是利用了空间数据库的空间查询函数,postgis空间函数的查询sql在前面的实现已经讲过,这里将sql加载到MybatisPlus中进行执行,其对应的Mapper类方法如下:

static final String FIND_EFFECT_LIST_SQL = "<script>"
+ " with bp as ( select ST_GeomFromText(format('point(%s %s)',#{lon},#{lat}),4326) as geom) "
+ " select ta.* from ( select t.id pk_id,t.name,'scenicspot' as type,st_x(t.geom) lon,st_y(t.geom) lat," 
+ " st_distance(t.geom :: geography, bp.geom :: geography) dist from biz_scenic_spot t,bp "
+ " where st_dwithin(t.geom :: geography,bp.geom :: geography,#{scenicspotDist} ) "
+ " union "
+ " select t.pk_id,t.name_zh as name,'airport' as type,t.lon_wgs84 lon,t.lat_wgs84 lat,"
+ " st_distance(t.geom :: geography, bp.geom :: geography) dist from biz_global_airport_info t,bp "
+ " where st_dwithin(t.geom :: geography,bp.geom :: geography,#{airportDist} )"
+ " union "
+ " select t.id pk_id,t.village_name as name,'village' as type,st_x(t.geom) lon,st_y(t.geom) lat,"
+ " st_distance(t.geom :: geography, bp.geom :: geography) dist from biz_village t,bp "
+ " where st_dwithin(t.geom :: geography,bp.geom :: geography,#{villageDist} ) "
+ " ) ta order by ta.dist "
+ "</script>";
/**
* - 查询指定坐标附近指定距离内的风景区、机场、居民点信息
* @param lon 经度
* @param lat 纬度
* @param scenicspotDist 风景区信息
* @param airportDist 机场信息
* @param villageDist 居民点信息
* @return
*/
@Select(FIND_EFFECT_LIST_SQL)
List<EarthQuakeEffectVo> findEffectList(@Param("lon") BigDecimal lon,@Param("lat") BigDecimal lat,@Param("scenicspotDist") Integer scenicspotDist,@Param("airportDist") Integer airportDist,@Param("villageDist") Integer villageDist);

        距离可以通过前端传给后台,也可以在Controller中直接指定。这里为了演示方便就在Controller中指定,在很多的业务实现场景中,完全是可以从前端传入,不过需要结合坐标参考类型来控制生成的空间对象范围不要太大。 Controller的示例方法如下:

@RequiresPermissions("edu:tdt:routing:phhmap")
@GetMapping("/phhmap")
public String phhmap(){return prefix + "/phhmap";
}/**
*	- 苯运输路线重现
* @return
*/
@PostMapping("/phhtrans")
@ResponseBody
public AjaxResult phhtrans() throws Exception{AjaxResult ar = AjaxResult.success();String lon = "111.620623";String lat = "26.198523";TdtResult result = tdtRoutingService.benzeneTransportation(lon, lat);ar.put("data", result);return ar;
}/**
*- 获取泄漏点影响信息列表,用post
* @return
*/
@PostMapping("/phheffect")
@ResponseBody
public AjaxResult effect(){AjaxResult ar = AjaxResult.success();String lon = "111.620623";String lat = "26.198523";List<EarthQuakeEffectVo> dataList = tdtRoutingService.findEffectList(new BigDecimal(lon),new BigDecimal(lat),3000,3000,3000);ar.put("data", dataList);return ar;
}

3、WebGIS可视化实现

        这里使用的WebGIS展示插件采用Leaflet,为了让展示的效果更加符合实际的需要。我们在进行事故点的标绘时,加入了闪烁的功能和影响范围的中文标绘信息。这些知识点在之前的系列博客都曾经介绍过,这里不再赘述。这里介绍主要使用的对象,首先是需要定义一个闪烁点、第二是按照1、2、3公里生成影响评估面,第三是路径规划的路线信息,第四是在影响范围内的风景区、居民区、机场的点位信息。这里有一个地方需要注意的是,在展示闪烁点的时候,不要将闪烁点跟受影响居民点等信息放到一个方法中,否则会影响正常的展示,下面是写在一个方法的代码中的效果:

        可以很明显的看到事故点有一个黑色的外环,这样的效果不好,需要改进。 将代码复制到影响范围后效果就很明显:

        初步怀疑是都生成marker时,对具体的对象样式产生了一定的影响。所谓距离产生美,分开就没有这种问题了。

三、讨论

        下面对功能进行一个简单的展示,也对本次事故的受影响范围进行一个分析和讨论。

1、界面结果展示

        上图是本次运输过程的重现,从广西梧州到河南濮阳的全称路线规划,出现闪烁点的位置是在湖南永州市。这是一张路线的展示。 

        上图是该事故点3公里、2公里、1公里范围内的居民点、风景区、机场分布信息。 

2、影响范围分析

        从本次影响范围来看,在事发点三公里范围的相关点位总共有15处,其中距离事发地最近的是沙沟湾社区,只有170米,其次是诸葛庙村,距离396米。距离1000到2000的有两个地点,一个是居委会,另外是一个旅游景点。其中南津渡社区居委会距离1137米,而永州零陵永州之野-异蛇世界距离1441.96061182。

        这些距离事故点越近的居民点,在进行应急风险评估是,其受的伤害一定是最直接和最重的,因此非常有必要按照距离来进行风险等级评估。 

四、总结

        以上就是本文的主要内容,在对此次事故的影响分析中,SpringBoot 和 PostGIS 的结合应用展现出了独特的优势。SpringBoot 作为一个开源的 Java 开发框架,具有开发简单、快速、高效等特点,能够为我们搭建稳定、可靠的后端服务。PostGIS 则是 PostgreSQL 的空间数据库扩展,可以高效地处理地理空间数据,实现空间查询、分析等功能。通过 SpringBoot 和 PostGIS 的协同工作,我们可以将事故现场的地理信息、车辆运输数据、环境监测数据等进行整合与分析,直观地呈现事故的影响范围和程度,为应急救援、环境污染治理以及后续的事故调查等工作提供科学依据。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80025.shtml

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

相关文章

NetBox:运维利器,网络与数据中心管理平台

NetBox 详细介绍&#xff1a;开源 IPAM 和 DCIM 工具的全面解析 1. 引言 在现代网络和数据中心管理中&#xff0c;基础设施的复杂性不断增加&#xff0c;传统的电子表格或手动记录方式已无法满足高效、准确和可扩展的管理需求。NetBox 作为一个开源的 IP 地址管理&#xff08…

澳鹏干货 | 动态判断:如何用“群体智慧“优化AI数据标注流程?

20世纪初&#xff0c;800人集体猜测一头公牛的重量&#xff0c;结果与真实数值误差不足1%——这就是著名的"群体智慧"效应。如今&#xff0c;这一古老智慧正以全新形态赋能AI训练&#xff1a;通过动态优化标注流程&#xff0c;让AI训练结果像人群一样达成精准共识。 …

go.mod没有自动缓存问题

今天在安装Gin框架的时候遇到了一个问题 在Terminal运行下面命令安装时&#xff0c;包已经被下载安装到了GoPath中的bkg/mod go get -u github.com/gin-gonic/gin但是由于使用的是Go Modules&#xff0c;GPT以及大多数人给的说法是 运行完这个依赖包会被自动同步更新到go.mod…

数据结构——排序(万字解说)初阶数据结构完

目录 1.排序 2.实现常见的排序算法 2.1 直接插入排序 ​编辑 2.2 希尔排序 2.3 直接选择排序 2.4 堆排序 2.5 冒泡排序 2.6 快速排序 2.6.1 递归版本 2.6.1.1 hoare版本 2.6.1.2 挖坑法 2.6.1.3 lomuto前后指针 2.6.1.4 时间复杂度 2.6.2 非递归版本 2.7 归并排序…

AWS上构建基于自然语言和LINDO API的线性规划与非线性规划的优化计算系统

我想要实现一个通过使用C#、Semantic Kernel库、OpenAI GPT 4的API和附件文档里提到的LINDO API 15.0实现通过中文自然语言提示词中包含LATEX代码输入到系统,通过LINDO API 15.0线性规划与非线性规划的优化计算程序输出计算结果和必要步骤的应用,结果用中文描述出来,这样的L…

海外短剧H5系统开发:技术架构、SEO优化与全球市场突围策略 [2025版]

随着全球数字娱乐消费的升级&#xff0c;海外短剧市场正以年均300%的增速爆发式增长。数据显示&#xff0c;2025年海外短剧市场规模预计突破450亿美元&#xff0c;用户付费意愿&#xff08;ARPPU达25-50美元&#xff09;远超国内67。H5系统凭借其轻量化、跨平台兼容性和低成本开…

7D-AI系列:模型微调之mlx-lm

大模型的出现&#xff0c;导致信息量太大&#xff0c;只有静心动手操作&#xff0c;才能得到真理。 文章目录 环境要求安装示例mlx-lm微调工具参数准备数据集下载模型微调模型合并模型验证结果验证微调前的模型验证微调后的模型 环境要求 macbook pro m系列芯片mlx环境已安装 …

Docker —— 隔离的基本操作(1)

Docker —— 隔离的基本操作&#xff08;1&#xff09; 1. 用户和权限隔离2. 进程隔离3. 文件系统隔离4. 资源隔离&#xff08;Cgroups&#xff09;5. 网络隔离6. 安全增强&#xff08;SELinux/AppArmor&#xff09;7. 容器技术&#xff08;Docker/LXC&#xff09;总结 dd基本语…

PWN基础-ROP技术-ret2syscall突破NX保护

ROP&#xff08;Return-Oriented Programming&#xff0c;返回导向编程&#xff09;是一种利用程序已有代码片段来执行任意指令的攻击技术&#xff0c;常用于绕过现代系统的安全机制&#xff0c;尤其是不可执行栈&#xff08;NX&#xff09;。 常规检查一下&#xff1a; 32 位…

关于 js:2. 对象与原型链

一、对象 对象是&#xff1a; 键值对集合 所有非原始类型&#xff08;number、string、boolean、null、undefined、symbol、bigint&#xff09;都是对象 支持动态增删属性 每个对象都继承自 Object.prototype&#xff0c;具备原型链结构 1. 对象的创建方式 字面量方式&a…

AtCoder 第404场初级竞赛 A~E题解

A Not Found 【题目链接】 原题链接:A - Not Found 【考点】 枚举,数组计数法 【题目大意】 找到在26个字母中,未输出的一个字母,如果有多个,输出其中一个即可。 【解析】 遍历字符串,使用数组的记录对应字母的出现次数,最后遍历数组为0的下标,输出对应的字母即…

检测内存条好坏有工具,推荐几款内存检测工具

检测内存条的好坏其实很重要&#xff0c;这直接就关系到计算机是不是能够稳定的运行&#xff0c;也有一部分人就会关注内存检测的工具。你应该如何来选择的&#xff0c;不如看一下以下的这几个。 MemTest86是一个比较受到大家喜欢的内存检测工具&#xff0c;会支持各种类型&…

01Introduction

文本主题 关于协作式多智能体强化学习的简介 文章目录 文本主题一、MARL主要框架集中式训练与执行 (CTE)集中式训练分布式执行&#xff08;CTDE&#xff09;分布式训练与执行&#xff08;DTE&#xff09; 二、Dec-POMDPjoint policy V and Q 一、MARL主要框架 MARL当前主流的…

小程序问题(记录版)

1、样式不生效 在h5上生效 但是 小程序上没反应 解决办法&#xff1a;解除组件样式隔离 1、isolated 表示启用样式隔离&#xff0c;在自定义组件内外&#xff0c;使用 class 指定的样式将不会相互影响&#xff08;一般情况下的默认值&#xff09; 2、apply-shared 表示页面 wxs…

排列组合算法:解锁数据世界的魔法钥匙

在 C 算法的奇幻世界里&#xff0c;排列和组合算法就像是两把神奇的魔法钥匙&#xff0c;能够帮我们解锁数据世界中各种复杂问题的大门。今天&#xff0c;作为 C 算法小白的我&#xff0c;就带大家一起走进排列和组合算法的奇妙天地。 排列算法&#xff1a;创造所有可能的顺序…

深入探讨 UDP 协议与多线程 HTTP 服务器

深入探讨 UDP 协议与多线程 HTTP 服务器 一、UDP 协议&#xff1a;高效但“不羁”的传输使者 UDP 协议以其独特的特性在网络传输中占据一席之地&#xff0c;适用于对实时性要求高、能容忍少量数据丢失的场景。 1. UDP 的特点解析 无连接&#xff1a;无需提前建立连接&…

引用第三方自定义组件——微信小程序学习笔记

1. 使用 npm 安装第三方包 1.1 下载安装Node.js 工具 下载地址&#xff1a;Node.js — Download Node.js 1.2 安装 npm 包 在项目空白处右键弹出菜单&#xff0c;选择“在外部终端窗口打开”&#xff0c;打开命令行工具&#xff0c;输入以下指令&#xff1a; 1> 初始化:…

数字化转型是往哪转?怎么转?

写在前面 当下数字化转型的风还在吹&#xff0c;企业数字化转型过程中以数字化项目满足业务化需求&#xff0c;已有相关数字化平台的话&#xff0c;就搞大平台、大系统&#xff0c;解决数据孤岛。政府数字化转型亦是如此&#xff0c;某些省市发了系统优化整合的文&#xff0c;旨…

嵌入式学习--江协51单片机day2

今天学的不多&#xff0c;内容为&#xff1a;静态、动态数码管的控制&#xff0c;模块化编程和lcd1602调试工具 数码管的控制 由于内部电路的设计&#xff0c;数码管每次只能显示一个位置的一个数字&#xff0c;动态的实现是基于不同位置的闪烁频率高。 P2_4,P2_3,P2_2控制位…

《数据结构:二叉搜索树(Binary Search Tree)》

文章目录 :red_circle:一、二叉搜索树的概念:red_circle:二、二叉搜索树的性能分析:red_circle:三、二叉搜索树的操作&#xff08;一&#xff09;插入&#xff08;二&#xff09;查找&#xff08;三&#xff09;删除 :red_circle:四、二叉搜索树的实现代码&#xff08;一&#…