GIS 功能模块实现

news/2024/12/30 2:56:24/

文章目录

    • 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.ppmy.cn/news/566922.html

相关文章

electron+vue3全家桶+vite项目搭建【20】窗口事件广播,通用事件封装

引入 electron中的渲染进程与主进程之间的数据交互需要利用ipc通信&#xff0c;互相订阅/通知来实现&#xff0c;我们不妨封装一个通用事件广播&#xff0c;利用自定义的事件名称来让主进程遍历窗口挨个推送对应内容&#xff0c;来实现事件的广播。 demo项目地址 实现思路 …

安卓app里播放youtube视频

从去年开始找方法&#xff0c;这是目前遇到最便捷的&#xff0c;给大家传播一下。只是不清楚国内的朋友能不能看youtube和github. 参考&#xff1a; https://www.youtube.com/watch?vqzcGfN9S_QY&t365s https://github.com/PierfrancescoSoffritti/android-youtube-playe…

youtube视频剪切

1.进入youtube视频管理器。 2.选择需要编辑的视频&#xff0c;从下拉列表中选择“增强功能”: 3.点击“剪辑”小剪刀&#xff0c;就可以剪切了&#xff1a;

如何与朋友同步观看YouTube视频

Watching funny YouTube videos is simply better with friends, but if your YouTube-loving comrades live halfway across the country, there’s still a way to enjoy those cat videos together. 与朋友一起观看有趣的YouTube视频会更好,但是,如果您喜欢YouTube的同志生…

YouTube音乐排行榜:全球总榜周榜(2022年7月16日)

本周排名排名变化歌手&歌名在榜周数 最高排名持续周数总播放量1 Kate Bush - Running Up That Hill (A Deal With God) 71(x3)315,701,8532 Harry Styles - As It Was 151(x11)885,973,7893新 Bizarrap - Quevedo: Bzrp Music Sessions, Vol. 52 13(x1)38,443,9424 Bad Bun…

结合论文看Youtube推荐系统中召回和排序的演进之路(上)篇

本文涉及的论文如下&#xff1a; 【2008 年】Video Suggestion and Discovery for YouTube: Taking Random Walks Through the View Graph【RecSys 2010】The YouTube Video Recommendation System【ICML 2013】Label Partitioning For Sublinear Ranking 内容主要介绍Youtub…

结合论文看Youtube推荐系统中召回和排序的演进之路(中)篇

上一篇&#xff08;结合论文看Youtube推荐系统中召回和排序的演进之路&#xff08;上&#xff09;篇&#xff09;主要介绍的是Youtube发表的三篇论文&#xff0c;但主要集中在机器学习方向&#xff0c;接下来会用几篇论文说明一下Youtube在深度学习推荐系统方向做的工作。 在介…

直流微电网中电流共享的挑战

直流微电网的好处包括价格实惠&#xff0c;管理方便&#xff0c;系统效率高&#xff0c;而且是值得信赖的电力来源。典型的垂流控制具有较低的电流分担精度&#xff0c;尽管这是分布式发电系统的复杂性造成的。粒子群优化编程、概率算法和电压修正系数方案只是已经更新和分析的…