【写在创作纪念日】基于SpringBoot和PostGIS的各省东西南北四至极点区县可视化

目录

前言

一、空间检索简介

1、空间表结构

2、四至空间检索

二、前后端实现

1、后端实现

2、前端集成

三、成果展示

1、东部省份

2、西部省份

3、南部省份

4、北部省份

5、中部省份

四、总结


前言

        在当今数字化时代,地理信息数据的分析与可视化对于众多领域都有着至关重要的意义。从城市规划到资源管理,从环境监测到交通物流,精准、直观地呈现地理空间数据能够为决策提供有力支持。在中国这样一个地域辽阔、行政区划复杂的国家,各省的地理四至极点信息在一定程度上反映了该省的地理位置特征和空间分布情况。通过确定各省的东西南北四至极点所在的区县,并将其可视化展示,可以为众多领域提供有价值的参考。

        在城市规划方面,了解周边省份的四至极点区县有助于明确自身的区域优势和潜在发展方向,合理布局城市功能区,规划交通线路和基础设施建设,促进区域间的协调发展。对于资源管理,直观的可视化界面可以帮助管理者快速了解资源的地理分布范围,以便更好地制定资源开发与保护策略,优化资源分配,提高资源利用效率。 在环境监测领域,通过观察四至极点区县及其周边环境数据的可视化呈现,可以及时发现环境问题的空间关联性,为跨区域的环境治理提供依据,实现区域性环境协同监测与管理。此外,交通物流行业也可以借助该可视化系统,优化运输路线规划,提高物流配送效率,降低运输成本,更好地应对复杂的地理环境和运输需求。

        本次研究聚焦于基于 SpringBoot 和 PostGIS 的各省东西南北四至极点区县可视化项目。本项目旨在整合 SpringBoot 的高效开发能力和 PostGIS 的强大空间数据处理功能,构建一个精准、实时且交互性强的各省东西南北四至极点区县可视化平台,为相关领域的研究与决策提供一种创新、直观且便捷的地理信息可视化解决方案,助力探索和挖掘地理空间数据蕴含的巨大价值,推动各行业在地理维度上的科学决策与可持续发展。接下来,本文将深入探讨该可视化项目的空间查询设计、关键技术实现以及实际应用场景与效果评估等内容,详细阐述如何利用 SpringBoot 和 PostGIS 实现地理数据的有效处理与可视化展示,以满足不同用户的需求,为地理信息相关领域的研究和实践提供有价值的参考与借鉴。通过本文可以实现一个查找对应省份的四至区县和对应经纬度点坐标信息。

一、空间检索简介

        本节将重点对空间检索的知识进行综合介绍,分别从以下两点开展,首先是空间表结构展示,对县域这张空间表进行简单介绍。其次介绍如何基于PostGIS来进行省域范围的区县四至空间检索实践。

1、空间表结构

        本实例涉及的空间表结构有以下这张表,这张便是区域信息,是省份对象的区县信息。表结构如下:

        具体的表结构SQL如下所示:

 

CREATE TABLE "public"."biz_area" ("id" int8 NOT NULL,"province_code" varchar(16) COLLATE "pg_catalog"."default" NOT NULL,"province_name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,"city_code" varchar(16) COLLATE "pg_catalog"."default" NOT NULL,"city_name" varchar(512) COLLATE "pg_catalog"."default" NOT NULL,"area_code" varchar(16) COLLATE "pg_catalog"."default" NOT NULL,"area_name" varchar(512) COLLATE "pg_catalog"."default" NOT NULL,"type" varchar(32) COLLATE "pg_catalog"."default","geom" "public"."geometry",CONSTRAINT "pk_biz_area" PRIMARY KEY ("id")
);
CREATE INDEX "idx_biz_area_areacode" ON "public"."biz_area" USING btree ("area_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
CREATE INDEX "idx_biz_area_city_code" ON "public"."biz_area" USING btree ("city_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
CREATE INDEX "idx_biz_area_geom" ON "public"."biz_area" USING gist ("geom" "public"."gist_geometry_ops_2d"
);
CREATE INDEX "idx_biz_area_geom_gp" ON "public"."biz_area" USING gist ((geom::geography) "public"."gist_geography_ops"
);
CREATE INDEX "idx_biz_area_provincec_code" ON "public"."biz_area" USING btree ("province_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
COMMENT ON COLUMN "public"."biz_area"."id" IS '主键ID';
COMMENT ON COLUMN "public"."biz_area"."province_code" IS '省份编码';
COMMENT ON COLUMN "public"."biz_area"."province_name" IS '省份名称';
COMMENT ON COLUMN "public"."biz_area"."city_code" IS '市级编码';
COMMENT ON COLUMN "public"."biz_area"."city_name" IS '市级名称';
COMMENT ON COLUMN "public"."biz_area"."area_code" IS '区县编码';
COMMENT ON COLUMN "public"."biz_area"."area_name" IS '区县名称';
COMMENT ON COLUMN "public"."biz_area"."type" IS '类型';
COMMENT ON COLUMN "public"."biz_area"."geom" IS 'geom';

        区县表的查询数据结果如下所示:

        以上就是空间表模型和表结构的简单介绍。 这张表是基础数据表格,是后续进行四至空间分析的基础。

2、四至空间检索

        要想实现空间四至的求解,其实可以转换成寻找当前面数据的四至范围极值的问题。因此我们只需要找到能包围当前面数据的做大点的坐标即可。为了方便实现按照某省份来查询其对应的四至范围,因此在Postgresql中使用子查询来进行数据的过滤,首先定义with 子句。查询的SQL如下:

WITH temp_area AS (SELECT *  FROM biz_area T WHERE T.province_code = '510000'),bounds_info AS ((SELECT '最东' AS direction, T.*, ST_X(dp.geom) AS x, ST_Y(dp.geom) AS yFROM temp_area T, LATERAL ST_DumpPoints(T.geom) AS dpORDER BY x DESC LIMIT 1)UNION (SELECT '最西' AS direction, T.*, ST_X(dp.geom) AS x, ST_Y(dp.geom) AS yFROM temp_area T, LATERAL ST_DumpPoints(T.geom) AS dpORDER BY x ASC LIMIT 1)UNION (SELECT '最北' AS direction, T.*, ST_X(dp.geom) AS x, ST_Y(dp.geom) AS yFROM temp_area T, LATERAL ST_DumpPoints(T.geom) AS dpORDER BY y ASC LIMIT 1)UNION (SELECT '最南' AS direction, T.*, ST_X(dp.geom) AS x, ST_Y(dp.geom) AS yFROM temp_area T, LATERAL ST_DumpPoints(T.geom) AS dpORDER BY y DESC LIMIT 1)) SELECT  direction,id, province_code, province_name, city_code,city_name,area_code,area_name,type,st_asgeojson(geom) AS geomJson,x AS lon,y AS lat FROM bounds_info;

        这里我们以四川省为例,查询四川省的四至县域结果:

        可以直观的看到,四川省最东边是达州市的宣汉县,最西边是甘孜藏族自治州的石渠县,最南边是凉山彝族自治州的会理县,最北边是阿坝藏族羌族自治州的若尔盖县。 

二、前后端实现

        介绍完空间表以及四至的空间检索实现后,接下来我们来介绍一下如何在前后端实现接口的接入和WebGIS界面的可视化。

1、后端实现

        后端比较简单,这里我们将前面的四至查询函数包装成一个公共的方法,供后续的分析方法调用。在Mapper中定义查询请求的方法体,具体如下图所示:

static final String FIND_ESWNAREA_BYPROVINCE_SQL = "<script>"+ " WITH temp_area AS ( SELECT * FROM biz_area T WHERE T.province_code = #{province_code} ), "+ " bounds_info AS ("+ " ( SELECT '最东' AS direction,T.*,ST_X ( dp.geom ) AS x,ST_Y ( dp.geom ) AS y "+ " FROM temp_area T,LATERAL ST_DumpPoints ( T.geom ) AS dp ORDER BY x DESC LIMIT 1 "+ " ) UNION  "+ " ( SELECT '最西' AS direction,T.*,ST_X ( dp.geom ) AS x,ST_Y ( dp.geom ) AS y "+ " FROM temp_area T,LATERAL ST_DumpPoints ( T.geom ) AS dp ORDER BY x ASC LIMIT 1 "+ " ) UNION "+ " ( SELECT '最南' AS direction,T.*,ST_X ( dp.geom ) AS x,ST_Y ( dp.geom ) AS y "+ " FROM temp_area T, LATERAL ST_DumpPoints ( T.geom ) AS dp ORDER BY y ASC LIMIT 1 "+ " ) UNION  "+ " (SELECT '最北' AS direction,T.*,ST_X ( dp.geom ) AS x,ST_Y ( dp.geom ) AS y "+ " FROM temp_area T, LATERAL ST_DumpPoints( T.geom ) AS dp ORDER BY y DESC LIMIT 1 "+ ") SELECT direction,id,province_code,province_name,city_code,city_name,area_code, "+ " area_name,type, st_asgeojson(geom) geomJson, x lon,y lat FROM bounds_info "+ "</script>";
/**
* - 根据省份code查询对应省份的四至区县信息
* @param provinceCode 需要查询的目标省份code
* @return
*/
@Select(FIND_ESWNAREA_BYPROVINCE_SQL)
List<EwsnAreaVo> findEswnAreaByProvinceCode(@Param("province_code")String provinceCode);

        这里仅介绍Mapper的实现,具体的业务层和控制层代码比较简单,在此不在赘述。 

2、前端集成

        介绍完后端的方法实现后,再来介绍一下前端如何使用Leaflet来进行具体的展示。关于地图页面的展示分为两个部分,第一部分展示省份信息,第二部分是展示四至极值的所在区县信息。首先是展示省份信息的方法,关键代码如下:

 function previewProvince(gid,name){var myStyle = {color:"red",weight:3,"opacity":0.65};$.ajax({  type:"get",  url:prefix + "/geojson/" + gid,  data:{},  dataType:"json",  cache:false,processData:false,success:function(result){if(result.code == web_status.SUCCESS){var geojson = JSON.parse(result.data);var areaLayer = L.geoJSON(geojson,{style:myStyle}).addTo(mymap);var myIcon = L.divIcon({className: 'my-div-icon',iconSize: 100});showLayerGroup.clearLayers();showLayerGroup.addLayer(areaLayer);}},error:function(){$.modal.alertWarning("获取空间信息失败");}});
}

 展示东南西北四至点和所在区县的核心方法如下:

function previewEwsn(pid,provinceCode,name){previewProvince(pid,name);$.ajax({  type:"get",  url:prefix + "/ewsnprovince/list/" + provinceCode,  data:{},  dataType:"json",  cache:false,processData:false,success:function(result){if(result.code == web_status.SUCCESS){var legendData = new Array();for(var i = 0;i< result.data.length;i++){var areaData = result.data[i];var color = ccolor = getRandomColor();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([areaData.lat,areaData.lon], { icon: myIcon}).addTo(showLayerGroup);legendData.push({label: "\xa0\xa0"+areaData.cityName + areaData.areaName,type: "rectangle",radius: 12,color: color,fillColor: color,fillOpacity: 0.8,weight: 2});}mymap.fitBounds(showLayerGroup.getBounds());initLegend(legendData);}},error:function(){$.modal.alertWarning("获取空间信息失败");}});}

三、成果展示

        篇幅有限不能将所有省份一一展示,从东西南北中四个方向各选取一些省份及其对应的四至区县来进行展示和讲解。各个省份排名不分先后,区县信息位置是准确的,文中展示不全的,如有兴趣,欢迎在评论区留言。

1、东部省份

        上海市四至: 

序号四至所在区县
1最北边上海崇明区
2最东边上海崇明区
3最西边上海青浦区
4最南边上海金山区

         江苏省四至:  

序号四至所在区县
1最北边连云港市赣榆区
2最东边南通市启东市
3最西边徐州市丰县
4最南边苏州市吴江区

2、西部省份

        西藏自治区四至:  

序号四至所在区县
1最北边那曲市双湖县
2最东边昌都市芒康县
3最西边阿里地区札达县
4最南边山南市错那县

3、南部省份

         广西壮族自治区四至:  

序号四至所在区县
1最北边桂林市全州县
2最东边贺州市八步区
3最西边百色市西林县
4最南边北海市海城区

4、北部省份

         河北省四至:  

序号四至所在区县
1最北边承德市围场满族蒙古族自治县
2最东边秦皇岛市山海关区
3最西边邯郸市涉县
4最南边邯郸市魏县

5、中部省份

         湖北省四至:  

序号四至所在区县
1最北边十堰市郧西县
2最东边黄冈市黄梅县
3最西边恩施土家族苗族自治州利川市
4最南边咸宁市通城县

四、总结

        以上就是本文的主要内容,本次研究聚焦于基于 SpringBoot 和 PostGIS 的各省东西南北四至极点区县可视化项目。本项目旨在整合 SpringBoot 的高效开发能力和 PostGIS 的强大空间数据处理功能,构建一个精准、实时且交互性强的各省东西南北四至极点区县可视化平台,为相关领域的研究与决策提供一种创新、直观且便捷的地理信息可视化解决方案,助力探索和挖掘地理空间数据蕴含的巨大价值,推动各行业在地理维度上的科学决策与可持续发展。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。

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

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

相关文章

智能守护校园“舌尖安全“:AI视频分析赋能名厨亮灶新时代

引言&#xff1a; 在校园食品安全备受关注的今天&#xff0c;一套融合视频监控管理平台与AI视频分析盒子的智能解决方案正在全国多地学校食堂悄然落地&#xff0c;为传统的"名厨亮灶"工程注入科技新动能。这套系统不仅实现了后厨操作的"透明化"&#xff0…

【软件设计师】计算机网络考点整理

以下是软件设计师考试中 ​​计算机网络​​ 的核心考点总结&#xff0c;帮助您高效备考&#xff1a; ​​一、网络体系结构与协议​​ ​​OSI七层模型 & TCP/IP四层模型​​ 各层功能&#xff08;物理层-数据链路层-网络层-传输层-会话层-表示层-应用层&#xff09;对应协…

Starrocks的CBO基石--统计信息的来源 StatisticAutoCollector

背景 本文来从底层代码的实现来分析一下Starrocks怎么获取统计信息&#xff0c;这些统计信息在后续基于CBO的代价计算的时候有着重要的作用 本文基于Starrrocks 3.3.5 结论 Starrocks的统计信息的收集是通过周期性的运行一系列的SQL&#xff08;以分区为维度&#xff0c;如果…

深度学习模型部署(四)——RKNN

一、RKNN部署及工具包安装 参考1&#xff1a;https://blog.csdn.net/qq_40280673/article/details/136211086#/ 参考2&#xff1a;瑞芯微官方教程 RKNN部署针对瑞芯微芯片优化&#xff0c;支持NPU硬件加速&#xff0c;需要安装rknn-toolkit&#xff0c;用于将pytorch模型转换为…

重构研发效能:项目管理引领软件工厂迈向智能化

1.项目管理智能化&#xff0c;激活软件工厂新引擎 在高速发展的软件开发时代&#xff0c;企业如何高效管理多个项目、协调团队合作、优化资源配置&#xff0c;已成为推动技术进步的关键。尤其是在多任务、多项目并行的复杂环境下&#xff0c;智能项目组合管理工具正成为软件工…

小米汽车二期工厂下月将竣工,产能提升助力市场拓展

在新能源汽车市场竞争日益激烈的当下&#xff0c;小米汽车传来重要进展消息。据多方信息显示&#xff0c;小米汽车二期工厂下月即将竣工&#xff0c;这一关键节点的到来&#xff0c;有望为小米汽车的产能提升与市场布局带来重大突破。​ 小米汽车二期工厂位于北京亦庄&#xff…

Python 爬虫实战:电竞比赛直播数据实时抓取与可视化分析

一、引言 在电竞行业快速发展的今天,电竞比赛直播数据成为了电竞爱好者、分析师和商业机构关注的焦点。实时抓取电竞比赛直播数据并进行分析,不仅可以帮助观众更好地理解比赛,还能为战队战术优化、选手表现评估以及赛事运营提供重要参考。 本文将详细介绍如何使用Python爬…

零基础设计模式——创建型模式 - 生成器模式

第二部分&#xff1a;创建型模式 - 生成器模式 (Builder Pattern) 前面我们学习了单例、工厂方法和抽象工厂模式&#xff0c;它们都关注如何创建对象。生成器模式&#xff08;也常被称为建造者模式&#xff09;是另一种创建型模式&#xff0c;它专注于将一个复杂对象的构建过程…

Debezium快照事件监听器系统设计

Debezium快照事件监听器系统设计 1. 系统概述 1.1 设计目标 为 Debezium 的快照过程提供可扩展的事件监听机制允许外部系统在快照过程中执行自定义逻辑提供线程安全的事件分发机制确保监听器的异常不会影响主快照流程1.2 核心功能 表快照开始事件监听表快照完成事件监听行数据…

手术机器人行业新趋势:Kinova多机械臂协同系统如何突破复杂场景适应性瓶颈?

机器人手术历经多阶段技术演进&#xff0c;已成为现代医疗重要方向。其需求增长源于医疗机构对高精度低风险手术方案的需求、微创手术普及及技术进步带来的复杂场景适应性提升。Kinova 轻型机械臂凭借模块化设计与即插即用功能&#xff0c;可快速适配不同手术环境&#xff0c;为…

力扣面试150题-- 二叉树展开为链表

Day 46 题目描述 思路 初次做法&#xff1a;由于我直接考虑O&#xff08;1&#xff09;级别的空间复杂度&#xff0c;于是采取了以下做法&#xff1a; 接下来的内容就是递归函数如果该节点为空&#xff0c;就返回null将此时的current作为头节点&#xff0c;left和right作为孩…

【Python】开发工具uv

文章目录 1. uv install1.1 下载安装脚本来安装1.2 使用pipx安装uv1.3 补充 2. 考虑在离线系统上安装uv2.1 下载并上传安装包2.2 用户级安装uv&#xff08;~/.local/bin/&#xff09;2.3 补充 3. uv 管理Python解释器4. uv 管理依赖5. uv运行代码5.1 uv不在项目下执行脚本5.2 u…

zabbix批量主机维护脚本兼容性更新

最近做新老版本zabbix监控主机迁移发现zabbix6.0后api安全有了效大升级&#xff0c;批量主机维护脚本出现认证兼容性问题&#xff0c;以下为脚本更新token支持&#xff1a;在这里插入代码片&#xff1a; # /usr/bin/env python3 # -*- coding:utf-8 -*- import requests impor…

Java中static关键字深度解析:从入门到高阶实战

Java中static关键字深度解析&#xff1a;从入门到高阶实战 目录 static的本质与核心特性静态变量 vs 实例变量&#xff1a;底层对比静态方法的设计哲学与应用场景高级用法&#xff1a;突破常规的static技巧 4.1 静态代码块&#xff1a;类加载的“初始化引擎”4.2 静态内部类&…

基于RT-Thread的STM32F4开发第五讲——软件模拟I2C

文章目录 前言一、RT-Thread工程创建二、AT24C02三、函数编写1.I2C_soft.c2.I2C_soft.h3.main.h 四、效果展示五、资源分享总结 前言 本章是基于RT-Thread studio实现软件模拟I2C&#xff0c;开发板是正点原子的STM32F4探索者&#xff0c;使用的RT-Thread驱动是5.1.0&#xff0…

49、c# 能⽤foreach 遍历访问的对象需满足什么条件?

在 C# 中&#xff0c;要使用 foreach 循环遍历一个对象&#xff0c;该对象必须满足以下条件之一&#xff1a; 1. 实现 IEnumerable 或 IEnumerable 接口 非泛型版本&#xff1a;System.Collections.IEnumerable public class MyCollection : IEnumerable {private int[] _da…

推客小程序系统开发:全栈式技术解决方案与行业赋能实践​

​ 在数字化营销深度渗透各行业的当下&#xff0c;传统推广模式已难以满足企业精细化运营与高效获客的需求。专业的推客小程序系统凭借其强大的裂变传播能力与灵活的推广机制&#xff0c;成为企业构建私域流量池、提升推广效能的核心工具。我们基于多年技术沉淀与行业洞察&…

WPF布局系统详解:掌握界面设计的核心艺术

掌握界面设计的核心艺术 1. WPF布局系统概述2. Grid布局详解2.1 基本行列定义2.2 单元格定位与跨行跨列 3. StackPanel布局4. DockPanel布局5. WrapPanel与Canvas5.1 WrapPanel自动换行布局 5. Canvas绝对定位6. 布局嵌套与综合应用7. 布局性能优化8. 响应式布局技巧9. 实战&am…

labview实现LED流水灯的第一种方法

目的&#xff1a;写一个跑马灯程序&#xff0c;7个灯从左到右不停的轮流点亮&#xff0c;闪烁间隔由滑动条调节。 一、方法1&#xff1a;使用顺序结构 使用顺序结构&#xff0c;平铺式顺序结构与创建局部变量实现LED流水灯 具体步骤如下&#xff1a; 第一步&#xff0c;选择…

uniapp如何设置uni.request可变请求ip地址

文章目录 简介方法一&#xff1a;直接在请求URL中嵌入变量方法二&#xff1a;使用全局变量方法三&#xff1a;使用环境变量方法四&#xff1a;服务端配置方法五&#xff1a;使用配置文件&#xff08;如config.js&#xff09;:总结 简介 在uni-app中&#xff0c;uni.request 用…