WebGIS城市停水及影响范围可视化实践
目录
前言
一、相关信息介绍
1、停水信息的来源
2、停水包含的相关信息
二、功能简介
1、基础小区的整理
2、停水计划的管理
三、WebGIS空间可视化
1、使用到的组件
2、停水计划的展示
3、影响小区的展示
4、实际效果
四、总结
前言
城市停水,一个看似简单的问题,却可能引发一系列连锁反应,给市民的生活带来诸多不便。从家庭用水的中断到商业活动的停滞,再到公共设施的关闭,停水的影响范围广泛而深远。然而,信息的不对称和不透明往往加剧了停水带来的困扰。居民可能在停水发生后才得知情况,缺乏足够的时间做出应对措施,而城市管理者也难以准确评估停水的影响范围和程度。在这样的背景下,GIS(地理信息系统)技术的引入,为解决信息差问题提供了新的希望。
首先,城市停水的困扰主要体现在以下几个方面:
-
生活不便:停水直接影响居民的日常用水,包括烹饪、清洁和个人卫生等基本需求。
-
经济影响:商业活动和工业生产依赖稳定的水资源,停水导致经济损失,甚至影响供应链。
-
健康风险:长期或频繁的停水可能导致水质下降,增加疾病传播的风险。
-
社会秩序:停水可能引发公众的不满和恐慌,影响社会稳定。
-
信息不对称:居民和企业往往在停水发生后才得知消息,缺乏准备时间,而管理者也难以及时准确地传达信息。
GIS技术的应用,为解决上述问题提供了新的途径:
-
实时监控与预警:GIS可以集成传感器数据,实时监控城市供水管网的状态,一旦发现异常,可以立即向相关部门和居民发出预警。
-
影响范围评估:通过GIS的空间分析功能,可以预测停水事件的影响范围,帮助管理者评估影响程度,制定应对措施。
-
资源优化分配:GIS可以帮助管理者了解水资源的分布和需求,优化水资源的分配,减少停水对特定区域的影响。
-
信息透明化:GIS可以将停水信息和影响评估结果直观地展示给公众,提高信息的透明度,减少恐慌和不满。
-
应急响应:GIS可以辅助制定应急供水计划,如确定临时供水点的位置,指导居民获取紧急用水。
-
长期规划:GIS可以辅助城市规划者分析供水系统的脆弱性,制定长期改进计划,提高系统的抗风险能力。
通过GIS技术,我们不仅能够减少城市停水带来的即时困扰,还能够提高城市供水系统的韧性和可持续性。GIS的应用,使得信息传递更加迅速和准确,帮助居民和管理者更好地应对停水事件。此外,GIS还能够促进公众参与,提高公众对水资源管理的认识和参与度,共同构建更加和谐的城市水环境。
总之,GIS技术为解决城市停水带来的信息差问题提供了强有力的工具。通过GIS,我们可以看到,尽管城市停水是一个复杂且具有挑战性的问题,但通过科技的力量,我们有希望将其带来的困扰降到最低,同时也为城市的可持续发展提供了新的思路和方法。
本文即在此背景下产生,文章重点讲解如何将城市计划性停水信息和GIS空间知识进行融合。首先讲解城市计划性停水主要包含哪些知识,然后如何介绍管理一些基础知识,包括居民区的范围等。最后将以一个实例的方式介绍如何基于Leaflet来进行WebGIS的可视化展示。如果您也对本文涉及的领域感兴趣,不妨来这里看看。
一、相关信息介绍
水是日常生活的基础资源,它是我们日常的物质生活中的重要组成部门。生活做饭需要水,洗衣服要用水,做饭需要用水,洗脸等需要水。试想一下,如果我们生活的小区停水后,是不是发生了许多的不便,我们需要去取水点统一打水。针对有时候的爆管或者是常规的维护,可能也会对用水安全产生一定的影响。虽然一些市政平台上会发出一些广告措施,但很多人还是由于信息的不对称,没有及时的掌握相关信息。这里我们首先来看一下一般的停水信息包含什么。
1、停水信息的来源
为了避免停水给老百姓带来的生活困扰,可以让可能停水的区域进行提前存储水,将对生活的影响降到最低。通常生活所在地的水司,比如自来水公司等供水企业都会提前发布信息。这类信息通常称之为“计划性停水”。比如线路改造、官网冲洗等等。这里可以来看看,一般本地的供水企业如何来进行消息的发布。这里以长沙市为例,我们可以收到有计划性停水的信息来源可有以下几个地方。
红网:是的,大家没有没有,大家可以在红网来看到转发的当地水司的停水信息。在某度或者某条的新闻媒体中查询到。
这其中就包括了停水的相关重要信息,比如相关的小区、停水的起止时间(一般精确到小时)、重点影响的范围等等。
水司官网:通常在供水的水司官网都可以看到公布的信息,因此大家可以在其网站上找到权威的信息。如下图所示:
这里的计划性停水以“星城”长沙为例,在水司的官方网站上有明确的停水信息,这里摘录如下:
为配合市政管网配套设施建设,我司将于2024年12月15日22:00至12月16日8:00进行山月路给水工程停水接驳工作,届时福元路(东二环-万家丽路)北侧将停水(重点影响单位及用户:富兴旺角、美丽新世界、学府华庭、保利和光尘樾、悦湖山等);邻近地区水压将减小。在恢复供水后,部分高远程区域以及二次供水泵房的楼栋,有可能延迟来水时间,请用户做好储水准备。提前通水,将不另行通知。供水客服热线96533为您提供全天候贴心服务!
2、停水包含的相关信息
在介绍了相关的停水信息源之后,下面我们来分析一下在上面的计划性停水中都包含着于我们老百姓息息相关的信息。这里结合思维导图来进行详细的说明。
可以在前面分享的停水信息中很直观的看到,供水企业发布的停水信息中包含的主要信息如上图的思维导图所示。包含的主要信息有: 停水原因、停水时间、停水大致范围、重点小区、公共附属信息。停水时间是一个很重要的时间维度的信息,而重点小区则是空间维度的信息。其它的信息都属于附加的信息。而作为一名空间技术的应用者,我们不难发现,这个空间维度信息其实可以用AOI或者POI的方式进行解决。因此如何基于AOI或者POI来解决上述的信息提示的困难问题,如何帮助我们的企业用户快速的进行信息的发布,而用水的使用者则可以快速的知道停水信息,从而更加合理的规划用水时间和是否需要储存水的评估。
二、功能简介
为了实现上述的供水企业停水范围的可视化,首先我们汇总管理两个重要的数据,第一个我们的停水信息,主要包括停水原因及停水的计划起止时间。第二个数据是涉及的小区信息,对于小区信息可以是AOI数据,也可以是POI数据,根据需求是否需要满足精准查询,如果是AOI可以最好。当然,这些AOI数据需要进行动态管理,比如城市更新后,新建了小区,我们需要及时在系统中进行登记小区信息。这里对涉及的相关数据进行统一管理。
1、基础小区的整理
对于供水企业,如果能拿到用水城市的的小区的范围数据就比较好,如果实在获取不到,也可以从互联网上下载POI数据,当前在高德或者百度地图也是有对应的AOI数据获取,为了简单,大家可以从官方获取相关的数据。
大家可以将这些数据进行保存到空间数据库中,当然这是一件比较费时的工作,在刚开始的时候,由于缺乏基础数据从而导致数据效果不是很好。当我们把这些小区的AOI数据采集到空间数据库后,就形成整个城市的小区数据基础。而且这个库需要在后续定期更新也是一项重点的工作,只有跟城市的发展同步,才能在运用数据时得心应手,不会出现数据不准确的情况。在实际的工作过程当中,主要有以下三种情况需要考虑。第一种就是随着城市的发展,新建了一些小区,这种处理比较简单,只需要将数据及时采集入库即可。第二种是城市发展过程中,小区的名字变更或者小区范围的变更,这种数据也需要关注,此时需要把小区的名称或者空间范围进行及时更新才行。空间数据的更新可以重新导入数据或者将小区删掉后重新加入。第三种就是由于拆迁等情况,原来的小区在后续的供水中会进行删除,针对这种情况,为了保留原来的信息完整,我们可以设置一个使用的标记状态,这样就可以既能关联到原来的历史信息,又能不影响未来的业务开展。
2、停水计划的管理
之前的内容中讲过,针对水司而言,我们可以在做停水计划的时候,就把相关联的小区信息进行关联,而如果是第三方信息,我们可以基于自然语言来进行信息的提取,然后将匹配的小区与空间库中的空间数据进行匹配,进而可以满足我们的影响小区的查询。通常停水都是一定时间段的,也不能是长时间的,因此我们的停水时间一定是较短的时间。有了这两方面的数据管理之后,我们就可以进行WebGIS应用的设计与实现了。
三、WebGIS空间可视化
这里假设已经有了停水计划的信息梳理,也包含了停水影响范围内的小区信息。这里以Leaflet为例,重点讲述如何把停水计划和小区AOI信息在地图上展示出来。展望未来,我们可以基于用户的位置来自动判断当前是否有停水计划,同时也可以查询距离当前位置最近的停水小区。持续的停水时间等等,通过公众号、小程序、手机短信等电子通信手段来进行通知,通过一些可控的信息来减少信息差,提高用水用户的满意度。本节重点介绍如何在Leaflet中展示这些信息。
1、使用到的组件
在正式介绍系统功能之前,我们来介绍一下这个功能需要用到的前端组件。
序号 | 组件名称 | 作用 |
1 | leaflet | 地图渲染组件 |
2 | leaflet-sidebar | 侧边栏展示组件 |
3 | jquery.js | DOM操作组件 |
2、停水计划的展示
首先需要对停水计划的主要信息进行信息,这里我们采用居右展示的侧边栏来展示,实际项目中需要替换成实际的内容,这里以静态内容为示例。
<div class="center-flex">城市停水及影响范围可视化
</div>
<div id="sidebar" class="sidebar collapsed"><!-- Nav tabs --><div class="sidebar-tabs"><ul role="tablist"><li><a href="#home" role="tab" id="xz_info"><i class="fa fa-bars"></i></a></li></ul></div><!-- Tab panes --><div class="sidebar-content"><div class="sidebar-pane" id="home"><h1 class="sidebar-header">停水计划列表<span class="sidebar-close"><i class="fa fa-caret-right"></i></span></h1><p style="font-size:16px;color:#ff5200;">一、计划停水信息 </p><p style="font-size:16px;color:#ff5200;">停水原因:【幸福区】大型施工停水 </p><p style="font-size:16px;color:#ff5200;">开始时间:2024年12月15日22:00 </button></p><p style="font-size:16px;color:#ff5200;">结束时间:2024年12月16日08:00 </p><hr/><p style="font-size:16px;color:#002bff;">二、重点影响单位及用户 : </p><p id = "lineDetails" style="padding-left: 5px;"></p></div></div>
</div>
3、影响小区的展示
受影响小区我们采用边界展示以及DivIcon的方式进行展示,边界擦用Polygon的形式展示。关键的代码如下所示:
function loadRange(){showLayerGroup.clearLayers();var line1 = new Array();$("#lineDetails").html("");var detailsInfo = "";for(var i = 0;i < effectData.length;i++){var tempData = convertStr2DataArrayTrans(effectData[i].geo_shape);var name = effectData[i].name;L.marker([tempData[0][0], tempData[0][1]], {icon: L.divIcon({iconSize: null,className: '',popupAnchor:[5,5],shadowAnchor:[5,5],html: "<div class='marsBlackPanel' animation-spaceInDown style='background:"+effectData[i].color+"'>"+"<div class='marsBlackPanel-text' style=''>【"+ name + "】/"+effectData[i].title+"</div>"+"<div class='marsBlackPanel-text' style=''>电话:"+effectData[i].tel+"</div>"+"</div>"})}).addTo(showLayerGroup);detailsInfo += "<span style='font-size:16px;color:#002bff;'>"+ (i + 1) + "、【"+name + "】/"+ effectData[i].title + "<br/></span>";$("#lineDetails").html(detailsInfo);L.polygon([tempData],style).addTo(showLayerGroup).bindPopup(name);}mymap.addLayer(showLayerGroup);mymap.setView(showLayerGroup.getBounds().getCenter(),16);// 设置地图的中心位置
}
4、实际效果
下面来看一下实际的展示效果:
在上图中,首先在侧边栏中展示了停水的主要信息,以及重点影响单位及用户信息。这里的信息还只是文字的。 主体的地图界面中,我们展示了具体的4个受影响的小区信息。
将受影响小区边界信息在地图上展示之后,可以发现其外围基本是按照道路来展示合围信息的。地图的底图是采用天地图来进行展示的,数据与地图贴合良好。基本满足我们的项目需要。
四、总结
以上就是本文的主要内容,文章重点讲解如何将城市计划性停水信息和GIS空间知识进行融合。首先讲解城市计划性停水主要包含哪些知识,然后如何介绍管理一些基础知识,包括居民区的范围等。最后将以一个实例的方式介绍如何基于Leaflet来进行WebGIS的可视化展示。行文仓促,难免有许多不足之处,如有不足在此恳请各位专家和朋友在评论区留言指正,不胜感激。
相关文章:

WebGIS城市停水及影响范围可视化实践
目录 前言 一、相关信息介绍 1、停水信息的来源 2、停水包含的相关信息 二、功能简介 1、基础小区的整理 2、停水计划的管理 三、WebGIS空间可视化 1、使用到的组件 2、停水计划的展示 3、影响小区的展示 4、实际效果 四、总结 前言 城市停水,一个看似…...

无管理员权限 LCU auth-token、port 获取(全网首发 go)
一: 提要: 参考项目: https://github.com/Zzaphkiel/Seraphine 想做一个 lol 查战绩的软件,并且满足自己的需求(把混子和大爹都表示出来),做的第一步就是获取 lcu token ,网上清一色…...

【数字花园】数字花园(个人网站、博客)搭建经历教程
目录 写在最最前面数字花园的定义第一章:netlify免费搭建数字花园相关教程使用的平台步骤信息管理 第二章:本地部署数字花园数字花园网站本地手动部署方案1. 获取网站源码2.2 安装 Node.js 3. 项目部署3.1 安装项目依赖3.2 构建项目3.3 启动http服务器 4…...
python模拟练习第一期
问题一 如果一个数 p 是个质数,同时又是整数 a的约数,则 p 称为 a的一个质因数。 请问 2024 有多少个质因数? 步骤 1: 分解 2024 首先,2024 是偶数,说明可以被 2 整除。我们从 2 开始进行除法分解: 202…...

Xcode
info.plist Appearance Light 关闭黑暗模式 Bundle display name 设置app名称,默认为工程名 Location When In Use Usage Description 定位权限一共有3个key 1.Privacy - Location When In Use Usage Description 2.Privacy - Location Always and When In U…...

RabbitMQ安装延迟消息插件(mq报错)
之前启动一个springboot的单体项目,一直mq的错误,即便我更新了最新版本的mq,还是报错。 后来才发现,项目使用了延时队列,是需要单独下载延时插件的。 1如果判断mq有没有延时队列插件【没有x-delayed-message】 2下载…...
es 3期 第15节-词项查询与跨度查询实战运用
#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性ÿ…...
iOS Delegate模式
文章目录 一、 Delegate 模式的概念二、Delegate 的实现步骤步骤 1: 定义一个协议(Protocol)步骤 2: 在主类中添加一个 delegate 属性步骤 3: 实现协议的类遵守协议并实现方法步骤 4: 设置 delegate 三、Delegate 模式的特点四、Delegate 模式的常见场景…...
java-使用druid sqlparser将SQL DDL脚本转化为自定义的java对象
java-使用druid sqlparser将SQL DDL脚本转化为自定义的java对象 一、引言二、环境三、待解析的DDL四、解析后的对象结构五、完整的UT类六、控制台输出总结 一、引言 在日常开发中,有些需要对SQL进行解析的场景,比如读取表结构信息,生成文档、…...
React状态管理常见面试题目(一)
1. Redux 如何实现多个组件之间的通信?多个组件使用相同状态时如何进行管理? Redux 实现组件通信 Redux 是一个集中式的状态管理工具,通过共享一个全局 store 来实现多个组件之间的通信。 通信机制: 所有状态保存在 Redux 的全局 store 中。使用 ma…...

jenkins 出现 Jenkins: 403 No valid crumb was included in the request
文章目录 前言解决方式:1.跨站请求为找保护勾选"代理兼容"2.全局变量或者节点上添加环境变量3.(可选)下载插件 the strict Crumb Issuer plugin4.重启 前言 jenkins运行时间长了,经常出现点了好几次才能构建,然后报了Je…...
【前端面试】list转树、拍平, 指标,
这个题目涉及的是将一组具有父子关系的扁平数据转换为树形结构,通常称为“树形结构的构建”问题。类似的题目包括: 1. 组织架构转换 给定一个公司的员工列表,每个员工有 id 和 managerId,其中 managerId 表示该员工的上级。任务…...

游戏引擎学习第43天
仓库 https://gitee.com/mrxiao_com/2d_game 介绍运动方程 今天我们将更进一步,探索运动方程,了解真实世界中的物理,并调整它们,以创建一种让玩家感觉愉悦的控制体验。这并不是在做一个完美的物理模拟,而是找到最有趣…...

NVM:安装配置使用(详细教程)
文章目录 一、简介二、安装 nvm三、配置 nvm 镜像四、配置环境变量五、使用教程5.1 常用命令5.2 具体案例 六、结语 一、简介 在实际的开发和学习中可能会遇到不同项目的 node 版本不同,而出现的兼容性问题。 而 nvm 就可以很好的解决这个问题,它可以在…...

matlab测试ADC动态性能的原理
目录 摘要: 简介: 动态规范和定义 动态规格: 双面到单边的功率谱转换 摘要: 模数转换器(adc)代表了接收器、测试设备和其他电子设备中的模拟世界和数字世界之间的联系。正如本文系列的第1部分中所概述…...
PostgreSQL JSON/JSONB 查询与操作指南
PostgreSQL 提供了强大的 JSON 和 JSONB 数据类型及相关操作,适用于存储和查询半结构化数据。本文将详细介绍其常用操作。 1. 基础操作 1.1 JSON 属性访问 ->: 返回 JSON 对象中的值,结果为 JSON 格式。 SELECT {"a": {"b": 1…...

【Isaac Lab】Ubuntu22.04安装英伟达驱动
目录 1.1 禁用nouveau驱动 1.2 安装必要的依赖项 1.3 下载安装 1.4 查看是否安装成功 1.5 安装CUDA 1.5.1 下载 1.5.2 按照提示进行下载安装 1.5.3 添加环境变量 1.5.4 测试CUDA是否安装成功 1.1 禁用nouveau驱动 输入以下命令打开blacklist.conf文件 sudo vim /etc…...

JS,递归,处理树形数据组件,模糊查询树形结构数据字段
JS递归如何模糊查询树形结构数据,根据数据中的某一个字段值,模糊匹配 直接拿去使用就行 function filterTreeLabel(arr, label) {let result []arr.forEach((item) > {// if (String(item.POBJECT_NAME).toLowerCase().indexOf(label)!-1) {if (String(item.P…...
神州数码DCME-320 online_list.php 任意文件读取漏洞复现
0x01 产品描述: 神州数码DCME-320是一款高性能多业务路由器,专为多用户、多流量和多业务种类需求设计。它采用了...
nginx的内置变量以及nginx的代理
nginx的内置变量 客户端 命令含义$uri可以获取客户端请求的地址,包含主机和查询的参数$request_uri:获取客户端的请求地址,包含主机和查询参数。$host:请求的主机名,客户端—发送请求的url地址$http_user_agent获取客户端请求的浏览器和操作…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...