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

基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战

目录前言一、PostGIS空间求解1、相邻的求解二、后台程序实现1、数据查询的实现2、API接口实现三、WebGIS可视化实现1、空间面展示2、增加面标注3、图例展示4、与缅甸距离较近的区县信息四、总结前言云南这个位于中国西南边陲的省份以其独特的地理位置和丰富的民族文化而闻名。作为中国连接东南亚和南亚的重要门户云南拥有长达四千多公里的边境线与缅甸、老挝和越南三国接壤。这条边境线不仅是中国对外开放的前沿也是维护国家安全和地区稳定的关键地带。随着全球化的深入发展和区域合作的不断加强云南边境线的战略地位日益凸显。云南的边境线总长达到4060公里是中国边境线最长的省份之一。这条边境线没有天然物理屏障地势错综复杂、犬牙交错有的是山高林密、荆棘丛生沼泽密布、河水湍急。云南与缅甸、老挝和越南三国接壤边境线交错纵横展现出云南的边境线地域广阔。其中与缅甸接壤的边境线长达1960公里与老挝的边境线长约475公里与越南的边境线长约1180公里。云南的边境线上374个边境村寨如同一颗颗明珠闪耀着无尽的光芒呈现出“边民富、边关美、边境稳、边防固”的美丽新画卷。边境线上的茶叶、咖啡、草果等农产品依托边境口岸走出深山走向世界。在云南的边境线上有无数隐姓埋名的边防战士守卫着边境的安全。他们顶着湿热寒冷忍着蚊虫叮咬守卫在边境。这些守边人无论是边防战士、移民管理警察、民兵还是自发巡逻的村民都在默默地守护着国境线。边境线上的守边人生活条件艰苦他们住帐篷、睡木板、劈柴烧饭生烟驱蚊、居边而眠、沿边而巡。他们面对的不仅是自然环境的挑战还有蛇鼠毒虫的骚扰以及各种健康风险。相信前几年一个令人闻风丧胆的地方-缅北。让大家闻言就不仅害怕这里是犯罪的天堂电信诈骗无数人倾家荡产。而我们的祖国作为守卫我们安全的最强大后盾在我们的背后默默的守候。当缅国内出现动荡的时候许多的边民来到口岸要求进入我国庇护。为了人民的安全我们的工作人员与战士、警察构筑了一道坚固的防线。云南边防是我们的安全防线。在信息技术迅猛发展的今天地理信息系统GIS已经成为管理和决策的重要工具。WebGIS作为GIS技术与互联网技术结合的产物以其强大的空间数据管理和分析能力为用户提供了一个全新的视角来观察和理解地理空间信息。云南的千里边境线WebGIS项目正是在这样的背景下应运而生旨在通过先进的WebGIS技术为云南边境线的管理和开发提供科学、高效的解决方案。文章首先介绍如何进行空间距离求解然后结合PgAdmin来进行空间查询实践最后使用SpringBoot框架结合PostGIS来详细说明如何进行云南的边防线WebGIS可视化实战。如果您也有兴趣不妨来这里看看。一、PostGIS空间求解在进行云南边境线区县WebGIS求解时首选需要正确的计算边界信息。由于我们拿到的国家边界信息与云南省的曲线面数据准确性有一定的问题。因此这里的数据仅供参考文章重点讲解这种实现思路。如何通过空间函数来求解相邻问题。1、相邻的求解在进行相邻的空间计算求解时需要用到的数据有两份。首先是国家信息即缅甸的面数据。这里的数据采用从osm中采集的全球国家信息。然后与云南省的区县数据进行空间计算。区县信息来源于互联网。但是缅甸与云南区县的空间范围还是有一定的问题这与原始的数据有直接的关系。这里我们首先采用PgAdmin来看一下具体的展示效果。在PgAdmin中查询空间数据的sql如下select -1 dist,1 id, province_code,province_name, city_code, city_name, area_code,缅甸 area_name,国家 as type,st_asgeojson(geom) as geomJson from biz_world_country where short_chinese_name 缅甸 union SELECT ta.dist,ta.id,ta.province_code,ta.province_name,ta.city_code,ta.city_name, ta.area_code,ta.area_name,ta.type,st_asgeojson(geom) as geomJson FROM ( WITH ynarea AS ( SELECT * FROM biz_area WHERE province_name 云南省 ) SELECT st_distance ( cinfo.geom :: geography, ynarea.geom :: geography ) dist, ynarea.* FROM biz_world_country cinfo, ynarea WHERE short_chinese_name 缅甸 ORDER BY dist DESC ) ta WHERE dist 10000;将缅甸的国家边界同时查询出来也是为了在WebGIS中重点展示边界的情况。在SQL中增加了一个求解面的距离信息这里设置一个阈值即10公里。假设两个面距离10公里内的就算是相邻这只是一种模拟情况实际情况中还是需要标准的边界矢量地图来进行计算。执行完查询语句之后可以看到以下的查询结果。然后再点击空间数据预览按钮对空间数据进行预览整体效果如下咋一看没有什么问题。仔细将边界拉进后可以看到边界的接边情况比较毛躁。如下图标红的地方。在上图中也具体的展示了边界的情况下面我们会在Leaflet当中对上述空间信息进行空间展示。二、后台程序实现在了解了空间函数计算和空间数据的问题之后我们基于空间数据库的查询结果来进行后台应用程序的设计为前端提供可视化查询接口。本小节主要介绍Mapper数据库查询与API接口的实现。1、数据查询的实现在应用程序后台我们基于Mybatis-Plus来进行空间数据库的查询操作。根据上一节中的空间相邻计算规则将查询SQL写入到Mapper对象中。关键代码如下static final String COUNTRY_NEIGHBOR_BYPROVINCE_SQL select -1 dist,1 id, province_code,province_name, city_code, city_name, area_code,#{country_name} area_name,国家 as type,st_asgeojson(geom) as geomJson from biz_world_country where short_chinese_name #{country_name} union select ta.dist,ta.id,ta.province_code,ta.province_name,ta.city_code,ta.city_name, ta.area_code,ta.area_name,ta.type,st_asgeojson(geom) as geomJson from ( with ynarea as ( select * from biz_area where province_name #{province_name} ) select st_distance(cinfo.geom::geography, ynarea.geom ::geography) dist,ynarea.* from biz_world_country cinfo,ynarea where short_chinese_name #{country_name} order by dist desc ) ta where dist #{max_distance} ; Select(COUNTRY_NEIGHBOR_BYPROVINCE_SQL) ListAreaNeighborVo findNeihborByProvince(Param(province_name)String provinceName, Param(country_name)String countryName,Param(max_distance)Double maxDistance);这个查询相邻的方法有三个参数第一个参数是目标省份比如云南省第二个参数是国家中文简称第三个参数的距离参数。求解相应的国家和对应的省份的面距离最后根据距离值来进行识别。在求解面和面的距离时需要注意的是两个面的最短距离时计算最近的两个点的位置。2、API接口实现有了基础查询函数之后我们可以对外开放一个列表查询接口和页面跳转方法。关键的代码如下RequiresPermissions(eq:miandianyn:map) GetMapping(/miandianyn) public String miandianyn(){ return prefix /miandianyn; } RequiresPermissions(eq:miandianyn:list) GetMapping(/miandianyn/list) ResponseBody public AjaxResult miandianynList(){ ListAreaNeighborVo countries areaService.findNeihborByProvince(云南省, 缅甸, 10000D); return AjaxResult.success().put(data, countries); }到此基础数据库查询类与API查询类均已开发完成。下面我们可以使用Leaflet来进行WebGIS空间数据展示。三、WebGIS可视化实现有了空间查询函数以及后台的查询接口之后下面我们就可以使用Leaflet来开发WebGIS可视化效果。1、空间面展示在进入到页面中时首先先对空间面数据进行展示。这里使用Leaflet来展示GeoJSON数据。同时结合自定义面颜色。关键代码如下function getYunnanData(){ $.ajax({ type:get, url:prefix /miandianyn/list, 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(); var areaLayer L.geoJSON(JSON.parse(areaData.geomJson),{style: {color:ccolor,fillColor:ccolor,weight:3,opacity:0.65, fillOpacity: 0.65 }}).addTo(mymap); } }, error:function(){ $.modal.alertWarning(获取空间信息失败); } }这里先将所有的面数据进行集中展示这一步的效果如下所示2、增加面标注为了方便用户在地图上直观的看到各个块表示的区县或者国家信息。可以在地图上增加自定义的名字标绘。这里使用DivMarker的方式进行展示关键代码如下var myIcon L.divIcon({ iconSize: null, className: , popupAnchor:[5,5], shadowAnchor:[5,5], html: buildShowInfo(i,color,areaData) }); //中心点位 L.marker(areaLayer.getBounds().getCenter(), { icon: myIcon}).addTo(showLayerGroup); function buildShowInfo(index,color,data){ var result div classmarsBlackPanel stylebackground: color ; animation-spaceInDowndiv classmarsBlackPanel-text (index 1) 、 data.areaName 【 data.type 】span classtemperature/span/div; result div classmarsBlackPanel-textdata.cityNamespan classtemperature/span/div; result /div; return result; }增加了文字标注后的效果如下3、图例展示最后为了在地图上直接展示不同的颜色表示的地区信息即图例展示。还可以在系统中增加动态图例的功能。legendData.push({ label: ??areaData.areaName, type: rectangle, radius: 12, color: color, fillColor: color, fillOpacity: 0.8, weight: 2}); function initLegend(legendData){ const legend L.control.Legend({ position: bottomright, collapsed: false, symbolWidth: 35, opacity: 1, title:图例, column: 2, legends: legendData }).addTo(mymap); }加上了图例后的效果如下在这里我们可以在Leaflet当中查看缅甸与云南省各区县的相邻关系将地图放大后可以看到接面的信息如下图中红色框中的标识所示4、与缅甸距离较近的区县信息为了方便大家对距离缅甸较近的云南省区县信息有一个直观的展示这里将空间数据库中的查询结果直接贴出来方便大家进行查询。city_name area_name type 西双版纳傣族自治州 勐腊县 县 普洱市 孟连傣族拉祜族佤族自治县 自治县 保山市 龙陵县 县 德宏傣族景颇族自治州 芒市 县级市 怒江傈僳族自治州 福贡县 县 临沧市 沧源佤族自治县 自治县 西双版纳傣族自治州 勐海县 县 西双版纳傣族自治州 景洪市 县级市 德宏傣族景颇族自治州 瑞丽市 县级市 保山市 腾冲市 县级市 普洱市 西盟佤族自治县 自治县 临沧市 耿马傣族佤族自治县 自治县 怒江傈僳族自治州 泸水市 市辖区 普洱市 澜沧拉祜族自治县 自治县 德宏傣族景颇族自治州 陇川县 县 临沧市 镇康县 县 怒江傈僳族自治州 贡山独龙族怒族自治县 自治县 德宏傣族景颇族自治州 盈江县 县一共有这19个区县。四、总结以上就是本文的主要内容文章首先介绍如何进行空间距离求解然后结合PgAdmin来进行空间查询实践最后使用SpringBoot框架结合PostGIS来详细说明如何进行云南的边防线WebGIS可视化实战。千里边防线漫漫感谢为我们守护安全的那些人。行文仓促难免有许多不足之处如有不足还恳请各位专家朋友在评论区留言批评指正不胜感激。

相关文章:

基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战

目录 前言 一、PostGIS空间求解 1、相邻的求解 二、后台程序实现 1、数据查询的实现 2、API接口实现 三、WebGIS可视化实现 1、空间面展示 2、增加面标注 3、图例展示 4、与缅甸距离较近的区县信息 四、总结 前言 云南,这个位于中国西南边陲的省份&…...

基本复现-计及碳排放成本的电_气_热综合能源系统节点能价计算方法研究 真正做到了电热气潮流耦合

基本复现-计及碳排放成本的电_气_热综合能源系统节点能价计算方法研究 真正做到了电热气潮流耦合,很适合综合能源系统建模的初学者,配合复现论文。 运行程序HeatGasPowerCombination即可。 每个系统模型都有专门的文档讲解,程序注释齐全。 通…...

B2B 木材行业供需对接平台微信小程序开源

一、项目概览 项目名称:木材供需通 类型:微信小程序 B2B 木材行业供需对接平台 核心功能:货源发布 / 采购需求 / 报价对接 / 企业认证 / 线上撮合二、页面结构 底部导航(5个主页面) | 页面 | 路径 | 功能 | |------|--…...

2026年正点原子开发板移植(3)——设备树基础:从硬编码噩梦到硬件描述分离

2026年正点原子开发板移植(3)——设备树基础:从硬编码噩梦到硬件描述分离 为什么要谈设备树 老实说,设备树这个概念刚接触的时候真的让人头大。一堆花括号、各种莫名其妙的属性、那个compatible到底在匹配什么东西、引脚复用配置里…...

在2023idea中如何创建SpringBoot

目录 一.下载和安装 Maven 1.前往 https://maven.apache.org/download.cgi 下载最新版的 Maven 程序 2.将文件解压到D:Program FilesApachemaven目录 3.新建环境变量MAVEN_HOME,赋值D:Program FilesApachemaven 4.编辑环境变量Path,追加%MAVEN_HOME…...

【超全】基于微信小程序的校园跑腿系统【包括源码+文档+调试】

💕💕发布人: 码上青云 💕💕各类成品Java毕设 。javaweb,ssm,springboot等项目,欢迎咨询。 💕💕程序开发、技术解答、代码讲解、文档, &#x1f31…...

【超全】基于微信小程序的在线诊疗系统【包括源码+文档+调试】

发布人: 码上青云 💕💕各类成品Java毕设 。javaweb,ssm,springboot等项目,欢迎咨询。 💕💕程序开发、技术解答、代码讲解、文档, 🌟🌟非开源&…...

书匠策AI:期刊论文的“智能导航仪”,引领学术写作新风尚!

在学术的征途中,每一位研究者都渴望自己的论文能够像璀璨星辰般闪耀在学术的天空。然而,从构思到成文,再到成功发表在心仪的期刊上,这一过程往往充满了挑战与艰辛。幸运的是,随着人工智能技术的飞速发展,我…...

9 openclaw插件机制揭秘:如何扩展框架功能

背景/痛点在OpenClaw框架的实际应用中,开发者常常面临功能扩展的挑战。随着业务需求的复杂化,核心框架难以覆盖所有场景,而重复开发相似功能又会降低开发效率。传统的继承方式会导致代码膨胀,且缺乏灵活性。OpenClaw的插件机制通过…...

8 openclaw配置管理最佳实践:避免常见配置陷阱

背景/痛点在OpenClaw项目中,配置管理往往是最容易被忽视却又至关重要的环节。许多开发者习惯于将配置项硬编码在代码中,或者使用简单的.properties/.yaml文件,导致在大型项目中出现配置混乱、环境隔离困难、敏感信息泄露等问题。我曾在一个项…...

7 OpenClaw工作流程详解:从请求到响应的完整生命周期

背景/痛点 在分布式系统中,高并发、低延迟的服务架构一直是开发者追求的目标。传统HTTP协议在处理大量连接时存在性能瓶颈,而自定义协议如openclaw应运而生。openclaw是一种基于TCP的二进制协议,专为高性能通信场景设计,但在实际…...

AI是杠杆,不是拐杖

同样是用 AI 写代码,一年后,有人变得更强,有人变得更废。 区别不在工具,在用法。杠杆和拐杖,表面像,本质反 杠杆和拐杖看起来很像:都是借助外力完成自己单独做不到的事。但有一个根本区别&#…...

“钱学森之问“研究

"钱学森之问"研究摘要"钱学森之问"是21世纪以来中国教育界最受关注的"现象级"命题,源自2005年钱学森对温家宝总理的一次谈话。这一追问不仅触及中国高等教育的深层困境,更关乎国家创新体系建设和民族复兴的战略全局。本报…...

为什么你花钱回收的问卷,全是“机器人”填的?

花了几万块投放问卷,回收了3000份答案,满心欢喜打开后台——结果傻眼了:IP地址全是同一个、开放题回答全是“哈哈哈”、逻辑前后矛盾得一塌糊涂。这样的场景,是不是似曾相识?在问卷调研越来越普及的今天,假…...

OpenClaw面向国产 IM 平台插件免费开源,支持微信,飞书,钉钉,QQ,企业微信

大家好,我是小悟。 在当今数字化转型浪潮中,人工智能技术正逐步渗透到企业运营的各个环节,成为提升效率、优化决策的重要工具。 然而,对于许多企业和开发者而言,如何让AI助手真正融入中国特有的职场沟通环境&#xff0…...

【java】System类详解

Java 基础核心类:System 类详解(常见用法 使用场景 面试高频)在 Java 开发中,System 类几乎每天都会使用,例如: System.out.println("Hello World");但很多人只知道 println,却忽略…...

创建型设计模式(工厂、builder、原型、单例)

工厂模式 a. 是一种创建型设计模式,它提供了在父类中创建对象的接口,但允许子类改变将要创建的对象的类型。工厂方法的核心目标是:解耦对象创建与使用。把构建对象new对象的过程放在子类中进行,可以返回不同类型的对象,所有的对象都使用同一个接口 b. 不使用工厂的缺点:修…...

在 Windows 上,如果忘记了 MySQL 密码 重置密码

在 Windows 上,如果忘记了 MySQL 密码,可以通过以下方法重置密码: 方法 1:以跳过权限验证模式启动 MySQL 并重置密码停止 MySQL 服务:打开 命令提示符 或 PowerShell,输入以下命令停止 MySQL 服务&#xff…...

基于微信小程序的移动医院挂号预约系统

目录需求分析与功能设计数据库设计接口开发小程序页面开发测试与部署注意事项项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与功能设计 核心功能模块: 用户端:挂号预…...

基于微信小程序的班级学生作业管理助手

目录需求分析技术选型原型设计开发实施测试部署运营维护注意事项项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析 明确系统核心功能需求,包括作业发布、提交、批改、统计等模块。需…...

基于微信小程序的校园店铺商城电子商务系统

目录需求分析与规划技术选型系统架构设计开发与测试部署与上线运营与迭代注意事项项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与规划 明确校园店铺商城的核心功能需求,包括用户…...

SpringAI MCP Server:让你的 AI 服务像 Spring Boot 一样简单

大家好,我是 31 岁爱折腾技术的小米。 前几天,一个朋友找我吐槽:“我想做个 AI 服务,让模型能接收请求、处理上下文、返回结果,但搭服务器、写接口、搞协议……感觉像开一家店,从盖楼到装修都要自己干。” 我听完笑了笑,说:“你这是没遇到 Spring AI 的 MCP 服务器启…...

AI时代新赛道:一文看懂GEO优化服务商

因生成式AI呈爆发式增长态势,GPT、、文心一言等AI工具成了用户获取信息的主要入口,这一变革催生出新的数字营销领域——GEO( ,生成引擎优化),此 GEO与传统SEO以提升网页在搜索引擎的排名目的不一样&#xf…...

小白救星!降AIGC工具 千笔·专业降AI率智能体 VS 文途AI 本科生专属

在AI技术迅速发展的今天,越来越多的本科生开始借助AI工具辅助论文写作,以提高效率、拓展思路。然而,随着各大查重系统对AI生成内容的识别能力不断提升,AI率超标的问题逐渐成为学术写作中的“隐形炸弹”。一旦论文被判定为AI痕迹过…...

论文写作“黑科技”:书匠策AI,期刊论文的智能魔法棒

在学术的奇妙世界里,论文写作就像是一场充满挑战的魔法冒险。每一位研究者都怀揣着将知识转化为智慧结晶的梦想,可面对期刊论文这座“魔法城堡”,常常感到无从下手。不过别担心,如今有一根神奇的“魔法棒”——书匠策AI&#xff0…...

书匠策AI:期刊论文写作的“魔法棒”大揭秘

在学术的神秘花园里,期刊论文宛如娇艳的花朵,是研究者智慧与心血的结晶,也是学术交流的重要信物。然而,撰写一篇出色的期刊论文,就像精心雕琢一件艺术品,需要耗费大量的时间和精力,还常常会遇到…...

书匠策AI:期刊论文写作的“魔法棒”,解锁学术新境界

在学术的广袤天地里,期刊论文宛如一座座闪耀的灯塔,指引着知识的航向,彰显着研究者的智慧与成果。然而,对于许多人而言,撰写一篇高质量的期刊论文却像是一场艰难的跋涉,充满了挑战与迷茫。别担心&#xff0…...

直接上结论:更贴合本科生的降AI率软件,千笔 VS 万方智搜AI

在AI技术迅速发展的今天,越来越多的本科生开始借助AI工具辅助论文写作,以提高效率、优化内容。然而,随着学术查重系统对AI生成内容的识别能力不断提升,论文中的“AI痕迹”逐渐成为影响成绩的关键因素。许多学生在使用各类降AI率和…...

大数据时代数据资产管理解决方案(PPT文件)

什么是数据资产管理?数据资产管理是指对企业所拥有的数据进行系统化、规范化的管理,以提升数据的质量、安全性和利用价值,从而支持企业决策、优化运营并创造新的业务价值。在大数据时代,数据被视为企业的核心资产之一,…...

238.除自身以外数组的乘积 技术解析与实现

一、问题分析 1.1 问题核心需求 给定一个整数数组 nums,返回一个数组 answer,其中 answer[i] 等于 nums 中除 nums[i] 之外所有元素的乘积。核心约束的关键点的如下:禁止使用除法:避免出现除数为0的异常,同时满足题目明…...