1 .导航树模块的实现
导航树的各节点是通过Ajax 技术异步加载的,系统初始化时导航树只会加载初始的城市节点,用户根据自身需要选择相应的父节点加载其逻辑关系下的子节点。各节点的数据信息是导航树模块通过JavaScript 与业务逻辑服务通信获得的。导航树的交互操作是定义各个组织节点和实例节点的右键菜单,根据节点的定义不同,构建菜单的功能也不相同,主要是设备的查询、增加、修改及删除功能以及地图定位等与GIS 模块的交互功能。导航树功能的实现效果如图
public class treeService { private String fatherid; private String fatherLevel; private String fatherName; private String fatherType; private TreeCatalogtreeDao; private Static finalString wrongMsg =”ERROR ” J public void initVar (String id, String n, String lev) { if(id !=null){ String 门缸ray = id. split (”-”); this. father Id = array[ 1]; this.fatherType =缸ray[O]; this. fatherLevel = lev; this. fatherName = n; ) else { this.father!d = this.fatherType = null; null; /骨 this. fatherLevel = null; this. fatherName = null; private intgetType() { if (father Level. 呵旧ls (” none ”)){ return O; } else { return l; //获取最终目录数据 public String getd ata() { return getJsonF(). toString (); //获取返回JSON 数据 //( { idname :’TONGXIANG ’, isParent:true, iconSkin :’city'}) public JSONArray getJsonF() { JSONArray jsa = newJSONArray (); intt = this. getType () ; List< TreeCatalogRecord >aim ; I I = treeDao. getTreeCatalog(); switch(t){ caseO : aim = treeDao. getTreeCatalog() ;break; easel aim = treeDao. getTreeCatalog(Long. parseLong(fatherld), Integer. parselnt (fatherType));break; default : aim = treeDao . getTreeCatalog(Long. parseLong( fatherld), Integer. parselnt (fatherType)); for( inti= 0; i <aim. size(); ++ i) { JSONObject jso = newJSONObject (); jso.accumulate (飞d”, aim. get( i). get'fypeld () +”-”+ aim. get( i). gets国tic Id()); jso.accumulate(”name ”, aim.get(i).getName()); jso.accumulate(” isParent”, aim.get(i).getParent()); jso.accumulate (” iconSkin”, aim.get(i).getlconSki叫)); jsa. add( jso); return jsa;
2. 查询定位功能的实现
系统需要通过导航树和搜索功能实现电力管线设备的查询和定位,实现的界面效果如图。
导航树实例节点的右键交互菜单提供设备的定位功能,通过导航树的逻辑关系查询到对应设备后可以将其定位到地图的中间突出显示。系统的搜索功能是通过G I S 服务实现的,可以通过设备名字进行模糊查询和通过设备经纬度精确查询。本系统的查询功能支持模糊查询和经纬度查询两种方式。模糊查询实现后的界面效果如图
/糊查询功能函数/ Global. locus.method. vague_search = function (text, layerlndex) { Global. constant . searchlndex = layerlndex; var layer; if{layerlndex == 0) { layer =’electrical ’, }else{ layer =’civil_ engineering’ , var filter = new OpenLayers. Filter. Comparison( { type: OpenLayers.Filter.Comparison.LIKE, pr operty : ” name ”,//查询的字段,需要根据阁层设置 value · ” *”+ text +”*” }) var filter_l_O = new Openl.ayers. Format. Filter. vl_O_O(); var temp}(}任, = new Openl.ayers. Format. 泊任』(), var xmlPara = tempXML. write ( filter_ 1_0. write ( filter) ) ; var dataXML = Global. locus. constant. originXML + ’ < wfs: QuerytypeName = ” OpenGIS : geo_’+ layer +’”〉冒 + ” /口”//查询的阁层, 需要设置 +’< wfs: Property name> OpenGIS: name </wfs : Property name >’ + '/n '//查询的属性字段,需要设置 +’< wfs: Property name> OpenGIS: object_ type </wfs: Property name >’ +’/ n ’//查询的属性字段,需要设置 +’< wfs: Property name> OpenGIS: Static _id </wfs : Property name > ’ +’/ n ’//查询的属性字段,需要设置 +’< wfs: Property name> OpenGIS: geometry_ data </wfs: Property n四e >’ +’/口’//查询的几何字段,需要设置 + xmlPara +’</wfs: Query >『+ ” /n ” +’</wfs: GetFeature >’ J var request = Openl.ayers. Request . POST ( { url :”http ://”+ Global. option . ip + ” : 8081/geoserver/wfs” , data : data泊忆, callback : Global. locus. meth od. vague_search_handler , ) }
除了模糊查询,系统还需要实现经纬度查询功能,在查询框中输入经度和纬度值,可实
现经纬度查询功能,实现效果如图所示,经纬度查询的关键代码如
/ 幡按经纬度查询功能铃/ Global.locus . method.cr_ search =function (text}{ var values = text. split(”,”); if (values . length!== 2) { Plugins. dialog. show( { ’ title ’ : ’错误信息’, ’ text , : ’请按照x,y 的形式输入’ },{ ’ s 由mit ’ : function ( e) { Plugins. dialog . remove(); ., ) } values = null; } else { values[ 0] = parseFloat( values[ 0]); values[ 1] = parseFloat( values[ 1]); if ( isNaN( values[ 0]) 1 1 isNaN( values[ 1])) { Plugins . dialog. show( { ’ title ,:’错误信息’, ’ text': '输入的x,y 必须是数字’ },{ ’ submit' function (e){ Plugins.dialog.remove(); ., ) } values = null; } else { var foundPosition = new OpenLayers. LonLat( values[ 0], values[ 1]) . transform( new OpenLayers. Projection(”EPSG:4326 ”), Global. locus. map. getProjectionObject() Global. locus. map . setCenter( foundPosition, Global. constant . zoomLevel); 3.
3. 资源管理功能的实现
资源管理模块需要管理电气设备、土建设备、业务图图形等所有资源的属性和空间数据,其中资源管理模块的空间数据管理在表现层通过OpenLayers 接口利用Geo Server 服务实现,资源管理属性数据的管理通过调用服务器端的各种Action 接口实现。资源管理模块主要包括设备的查询、增加、修改以及删除操作,可以在导航树模块上选择相应的节点进行
资源管理的操作,也可以在地图进行交互操作时进行资源管理。下面以电缆段的查询操作
为例,介绍资源管理模块的详细实现流程。当资源管理模块的查询接口被调用时,系统与业
务逻辑服务通信获得设备的信息,然后在前台以对话框的形式显示,资源管理模块与业务逻
辑服务的时序图如图
4. 电缆段入沟功能实现
电缆段入沟操作是电力管线管理的必要流程之一,系统通过电缆段人沟可以建立电缆
段和管沟段之间的逻辑关系。实现人沟功能的界面如图所示,
系统通过导航树右键交互菜单请求电缆段人沟,在GIS 地图中可视化选择人沟的管沟段。入沟完成后, GIS 服务可以重新渲染电缆段在地图上的走向和位置。