GIS 功能模块实现

news2024/11/9 6:12:27

文章目录

    • 1. GIS 模块流程图
    • 2. 网页端地图缓存的实现
    • 3. GIS 图形操作功能实现
    • 1 )地图漫游
    • 2 )对象删除
    • 3 )选择复制
    • 属性查看

GIS 基本功能模块主要是在表现层开发的,是在OpenLayers 开发框架提供的接口上,通过Geo Server 提供的GIS 服务在Web 服务器端使用HTML 和J avaScript 语言开发实现的。

1. GIS 模块流程图

GIS 基本模块的主要实现流程图如图所示。
在这里插入图片描述

2. 网页端地图缓存的实现

地图数据是网页端与服务器交互过程中数据量最大的数据,所以地图数据的缓存尤为
重要,可以大大提高系统的性能。

瓦片地图的缓存是通过GeoServer 的瓦片缓存服务器实现的,地图的瓦片以文件的形
式缓存在网页端,当地图范围发生改变需要加载新的地图瓦片时先查询缓存,如果缓存中没
有该瓦片, GeoServer 会向服务器端请求该瓦片,并将其加载在地图上。整个过程的流程图
在这里插入图片描述

3. GIS 图形操作功能实现

OpenLayers 提供了导航条、比例尺、鹰眼、图层控制控件等,表现层通过配置这些控件
的接口就可以将其加载在GIS 功能中。除了通过操作导航条,还可以使用鼠标拖曳和滚轮
来平移和缩放地图。并且,随着地图等级的放大,不同的设备图层将加载出来,以便实现电
力管线设备的分级显示,而且可以通过图层控制控件单独显示特定的设备图层。利用
Open Layers 框架实现系统的各个地图图层和操作控件加载的关键代码如下:

/ 骨地图初始化铃/
Global. locus. method. init = function() {
var options = {
resolutions [ ... ],
projection: new OpenLayers. Projection(’ EPSG:4326),
rnaxExtent: new OpenLayers. Bounds ( ... )
nurnZoornLevels:S
/铸定义地图铃/
Global. locus. map = new OpenLayers. Map (’ map ’, options);
Global. locus. layers. baseLayer = new OpenLayers. Layer.S (”桐乡地图”,... );
/椅背景图层铃/
/铃电气设备图层祷/
Global. locus. layer. electricalLayer = new OpenLayers. Layer. Vector (”电气设备”,…);
/铃土建设备图层提/
Global. locus. layer. buildingLayer = new OpenLayers. Layer. Vector (”土建设备”,... );
//地阁加载背景图层和各个设备图层
Global. locus. map. addLayers( [
Global. locus. layers. baseLayer,
Global. locus. layer. buildingLayer
Global. locus. layer. electricalLayer,
)) ;
var navigation = new OpenLayers. Control. Navigation();
navigation. zoomBoxKeyMask = OpenLayers. Ha卫dler.MOD_ALT;
Global. locus. map. addControl (navigation); /祷平移控件祷/
Global. locus. map. addControl(new OpenLayers. Control. ScaleLine()); /赞比例尺控件秘/
Global. locus. map. addControl(new 句四Layers.ntrol. LayerSwitcher()); /铃图层选择控件祷/
Global. locus. map. addControl(new OpenLayers. Control. OverviewMap()); /铃鹰眼控f牛祷/
//定义鼠标坐标显示控件
Global. locus. mousePositionCtl. control = new Openlyers. Control. MousePosition( {
prefix :< a target =”_blank”’+
’ href z ” http:/ /spatialreference .org /ref/epsg/4326/吵’+
’ EPSG: 4326 </a> coordinates :,
separator :|,
numDigits: 10,
emptyString :Mouse is not over map. ’
/铸加载鼠标坐标显示控件铃/
Global. locus. map. addControl( Global. locus. mousePositionCtl. control);
Global. locus. mousePositionCtl. control. activate();

1 )地图漫游

地图漫游包括地图放大、缩小、图层控制、鹰眼导航、全图显示、经纬度显示,关键代码
如下:

Global. locus. map. addControl(new OpenLayers. Control. PanZoomBar( {
position: new OpenLayers.Pixel(2, 15)
V缸navigation = new OpenI.ayers. Control. Navigation();
navigation. zoomBoxKeyMask = Openl.ayers. Handler. MOD_ ALT;
Global. locus. map. addControl(navigation);
Global. locus. map. addControl (new Openl.ayers. Control. ScaleLine ( ) ) ;
Global. locus. map. addControl( new OpenI.ayers. Control. LayerSwitcher());
Global. locus. map. addControl(new Openl.ayers. Control. OverviewMap());
Global. locus. map. addControl( Global. locus. select. control);
Global. locus. select. control. activate();
Global. locus. map. zoomln();
Global. locus. map. zoomOut();
Global. locus. map. zoomToExtent(Global. locus. constant. fullExtent);

2 )对象删除

对象删除用于删除选中的对象,关键代码如下:

public class DeleteObject {
private Static Sessions =且ull;
private Static Transactiontx =null;
public intd eleteObjectG(LongStatic Id) {
try(
s = HibernateSessionFactory. currentSession( ) ;
tx = s. beginTransaction();
intd eleteResult =
s.createQuery(”deletefrom GeoObjectBase whereStatic Id= : Static Id)
setParameter(Static Id, Static Id) . executeUpdate();
tx. commit();
return 1;
)catch(Exceptione){
e. printStackTrace( ) ;
tx. rollback();
return O;
)finally{
HibernateSessionFactory. closeSession();

3 )选择复制

选择复制功能对需要复制的对象进行复制,关键代码如下:
/铃定义要素拖动按钮怜/

Global. locus. copy. dragControl = new Openl.ayers. Control. DragFeature(
Global.locus . layers.electricalLayer,
Global. locus. layers. buildingLayer,
Global. locus. layers. elevationI.ayer. surveyLayer
{ , ]
onStart: Global. locus. meth od. startd rag,
onDrag : Global. locus . meth od. doDrag,
onComplete: Global. locus . meth od. endDrag,

Global. locus . map . addControl (Global. locus . copy. dragControl) ;
/ 祷Featurestartingtomove 铃/
Global. locus . meth ad. startd rag = function (feature, pixel) {
lastPixel = pixel;
/ 铃Featuremoving 铸/
Global. loc us. meth od. doDrag = function (feature, pixel) {
var l ayers = this. layers 11 [this . layer];
var l a yer;
for {varl = O; !<layers . length; ++l) {
layer = layers [ l] ;
Global. locus . copy. features [ l] = [ ];
for (iinlayer . selectedFeatures) {
if{layer . selectedFeatures[i]){
if{Global. locus . flag. copy) {
Global. locus . copy. features [ l] . push
{layer . selectedFeatures[i].clone());
var res = this . map . getResolution();
layer. selectedFeatures[i].geometry. move{
res 铃( pixel. x - lastPixel. x),
res 铃( lastPixel. y - pixel. y )
layer.drawFeature(layer . selectedFeatures[i]);
if(Global. locus . flag . copy) {
layer . addFeatures( Global. locus. copy. features[ l]);
for (var j = O; j < Global. locus . copy. features[ l] . length ; j++ ) {
Global . locus.copy. f回tures[ l][ j] . state =句四』yers.State . INS町J
Global. locus . copy . features[ l] = [] ;
lastPixe l = pixel;
if(Gl obal. locus . flag . copy) {
Plugi ns. m四u refresh{);
Plugins.FLAG . MAP( 'Ml] =true;

属性查看

属性查看是一个常用的功能,用于查看选中的设备或者线路的相关属性,在这里以变压
器属性查看为例,实现后的界面效果如图

package org. ldw . action;
import com.opensymphony.xwork2.ActionSupport;
import org. ldw. service. propertyService;
import net. sf. json. JSONObject ;
/铃
铸获取设备属性表单
铸/
public class getPropertyAction extends ActionSupport {
private inttype;
private Longisbn;
private LongwellSid;
private String name;
private propertyServ iceproServ ice;
private JSONObject result;
private booleanifByName = false;
private String clName;
private String startint;
private Str;i.ng end!nt;
private String startObj;
private String endObj;
private String road;
private String well;
private String well2;
private String ppSeg;
private String startBuilding;
private String endBuilding;
private String building;
private String wirecable;
private String pipeline;
// 工井的静态ID,查询剖面属性时使用
//所属线路
//起点间隔:标准段
//终点间隔:标准段
//起点设备:标准段
//终点设备:标准段
//所属道路
//所属工井:剖面
//所属管沟段: ffi.JOO
//起始土建.管沟线
//终点土建:管沟线
//土建·中间接头
//中间接头
//管沟线:管沟段

在这里插入图片描述

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

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

相关文章

【计算机网络复习之路】应用层(谢希仁第八版)

专栏&#xff1a;计算机网络复习之路 目录 一、域名系统DNS 1.1 本地域名服务器采用迭代查询 1.2 本地域名服务器采用递归查询 二、文件传送协议FTP 三、远程终端协议TELNET 四、万维网WWW (World Wide Web) 4.1 万维网需要解决的问题 【1】怎样标志分布在整个互联网…

在 Swift 中使用 async let 并发运行后台任务

文章目录 前言长期运行的任务阻塞了UI使用 async/await 在后台执行任务在后台执行多个任务使用 "async let " 下载多个文件结论 前言 Async/await 语法是在 Swift 5.5 引入的&#xff0c;在 WWDC 2021中的 Meet async/await in Swift 对齐进行了介绍。它是编写异步代…

实时日志管理分析解决方案

什么是日志管理 组织网络可能很复杂&#xff0c;由大量互连的系统、应用程序和设备组成。这些组件中的每一个都会生成大量日志数据&#xff0c;捕获有关系统事件、用户活动和网络流量的详细信息。生成的日志数据量庞大&#xff0c;因此难以有效管理和分析。 日志管理是收集、…

使用 DFS 解决排列数字问题并使用 pythontutor 可视化

使用 DFS 解决排列数字问题并使用 pythontutor 可视化 问题描述 给定一个整数 n n n&#xff0c;将数字 1 ∼ n 1∼n 1∼n 排成一排&#xff0c;将会有很多种排列方法。 现在&#xff0c;请你按照字典序将所有的排列方法输出。 输入格式 共一行&#xff0c;包含一个整数…

盘点内核中常见的CPU性能卡点

我们的应用程序都是运行在各种语言的运行时、操作系统内核、以及 CPU 等硬件之上的。大家平时一般都是使用Go、Java等语言进行开发。但这些语言的下面是由运行时、内核、硬件等多层支撑起来的。 我们的程序在运行的时候&#xff0c;很多时候性能卡点可能并不一定是自己的应用代…

Win系统下同时访问公司内网及公网设置

一、修改系统配置 修改系统配置&#xff0c;使公网默认不走VPN路由&#xff1b; 连接VPN&#xff0c;并查看路由表&#xff1b; route print可以看到&#xff0c;多了些路由信息&#xff0c;此时测试公网能否正常访问&#xff0c;如能正常访问&#xff0c;则继续往下。 二、…

入职字节两个月,实在卷不动,还是离职了

对自己收入不满意&#xff0c;就看下自己每天做了什么&#xff0c;把每天记录下来&#xff0c;看下自己的时间都用在哪里了。 对自己的时间分配搞清楚了&#xff0c;就可以着手去改进&#xff0c;如果一直糊涂的过&#xff0c;时间到了报复就来了。 时间管理很简单&#xff0c…

零代码、一键生成、低成本,深兰科技硅基大脑SaaS平台国内首发

在6月20日举行的2023中国(苏州)独角兽企业大会上&#xff0c;深兰科技创始人、董事长陈海波在主旨演讲中宣布&#xff0c;深兰科技推出“深兰科技硅基大脑SaaS平台”&#xff0c;旨在为个人和企业提供更便捷、更全面的大语言模型智能化应用。 AI大模型驱动“智慧涌现”&#xf…

Redis实战篇(一)

Redis实战篇基于哔哩哔哩中黑马程序员的黑马点评项目 一.缓存 1.1 缓存概述 1.什么是缓存 缓存&#xff0c;就是数据交换的缓冲区&#xff0c;俗称的缓存就是缓冲区内的数据&#xff0c;一般从数据库中获取&#xff0c;存储于本地代码 2.为什么要使用缓存 缓存数据存储于…

性能测试-压测问题分析,生产环境性能压测优化(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 项目背景&#xf…

从0到1精通自动化测试,pytest自动化测试框架,allure2生成html报告(史上最详细)(九)

一、前言 allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架&#xff0c;也可以集成到Jenkins上展示高大上的报告界面。 环境准备&#xff1a; python3.6windows环境pycharmpytest-allure-adaptorallure2.7.0java1.8 二、pytest-allu…

在 Blender 和 3DCoat 中创建风格化的幻想屋

今天云渲染小编给大家带来的是CG艺术家Brian Nguyen 最近的项目“一个风格化的幻想屋”幕后制作&#xff0c;讨论了 Blender 中的建模过程和 3DCoat 中的纹理过程&#xff0c;并详细介绍了如何设置灯光和K动画。 介绍 我是 Brian Nguyen&#xff0c;程式化的 3D 艺术家&#…

阿里云EMAS超级App助力Agmo电动车超级应用程序发布

近日&#xff0c;阿里云宣布与马来西亚本土数字方案专家Agmo控股&#xff08;Agmo Holdings Berhad&#xff0c;简称Agmo&#xff09;展开合作&#xff0c;签署谅解备忘录&#xff0c;联手推出马来西亚首个Agmo电动车超级应用程序。此次合作也标志着阿里云在中国以外的市场首次…

电商营销小程序优势有哪些?电商营销小程序功能推荐

随着流量成本越来越高、流量逐渐被平台所垄断&#xff0c;因此转化公域流量至私域成为越来越多企业的选择&#xff0c;对于电商营销而言&#xff0c;电商营销小程序也是一种较为轻便的私域沉淀工具。与传统的电商模式相比&#xff0c;电商营销小程序具有以下几大优势&#xff1…

【嵌入式】MIMXRT685SFVKB 32位微控制器、5CGXFC4C7F27C8N FPGA现场可编程门阵列

MIMXRT685SFVKB i.MX RT600交叉MCU是双核微控制器&#xff0c;设有32位Cortex-M33和Xtensa HiFi4音频DSP CPU。i.MX RT600 MCU是NXP EdgeVerse™边缘计算平台的一部分。Cortex-M33 CPU配有两个硬件协处理器&#xff0c;为一系列复杂算法提供增强性能。 核心处理器&#xff1a;A…

【博客671】prometheus如何选择数据点以及处理counter跳变

prometheus如何选择数据点以及处理counter跳变 1、prometheus如何选择数据点 时间是怎么进来的&#xff1f;范围和即时查询&#xff01; 您可能已经注意到&#xff0c;PromQL 查询中对时间的唯一引用是相对引用&#xff08;例如[5m]&#xff0c;回顾 5 分钟&#xff09;。那…

嵌入式界面神器 littleVGL

​1、littleVGL 介绍 littleVGL 是近几年开始流行的一个小型开源嵌入式 GUI 库,具有界面精美,消耗资源小,可移植度高,响应式布局等特点,全库采用纯 c 语言开发,而且 littleVGL 库的更新速度非常快,随着 littleVGL 的认知度越来越大,官方资料也逐渐丰富起来。 相比 emWin&…

kali安装Nessus并更新插件包的详细步骤

1. 下载 https://www.tenable.com/downloads/nessus 2. 安装 dpkg -i Nessus-10.5.2-debian10_amd64.deb3. 开启nessus服务 sudo systemctl start nessusd.service4. 浏览器访问Nessus服务 访问 https://$ip:8834选择Managed Scanner,点击Continue选择Tenable.sc,点击Con…

Linux Perf

文章目录 一、简介二、使用方法1、子命令2、Tips 三、perf-list1、事件类型2、事件修饰符 四、perf-top1、输出结果2、选项3、交互命令4、示例 五、perf-stat1、选项2、示例 六、perf-record1、选项2、示例 七、perf-report1、选项2、示例 八、perf-script1、选项2、示例3、火焰…

SpringBoot(一)使用itelliJ社区版创建SpringBoot项目

工欲善其事&#xff0c;必先利其器。目前市面上有很多优秀的开发工具&#xff0c;例如 IntelliJ IDEA、Visual Studio Code 和 Eclipse 等&#xff0c;那么我们该如何选择呢&#xff1f;最好的选择是使用IntelliJ IDEA的Ultimate版本&#xff0c;但Ultimate版本试用期只有30天&…