有的时候,特别是在做分析时,需要经常添加新的图层到当前的地图中。在这个时候,我们一般采用非池化的Server Object,以保证当前用户的修改不会影响到其他用户。添加图层的代码如下:
首选,得到Resource和mapFunctionality和MapServerInfo,以备后面使用:
AGSLocalMapResource gisrec=(AGSLocalMapResource)webContext.getResources().get("ags1");
AGSMapFunctionalitymapfunction=(AGSMapFunctionality)gisrec.getFunctionalities().get("map");
MapServerPortmapServer=gisrec.getMapServer();
MapServerInfoserverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName());
得到MapServer的IMap接口
IMaptargetMap=gisrec.getLocalMapServer().getMap(gisrec.getLocalMapServer().getDefaultMapName());
IMap接口可以用来添加数据到ServerObject。下面的代码可以用来从文件数据库中读取数据并把它添加到IMap中:
IWorkspacewk=this.connectToFileDB("D:\\data\\sapdata.gdb",gisrec.getServerContext());
IFeatureClassfc=this.getFeatureclass(wk,"MSA_Intersect");
FeatureLayerflayer=(FeatureLayer)gisrec.getServerContext().createObject(FeatureLayer.getClsid());
flayer.setFeatureClassByRef(fc);
targetMap.addLayer(flayer);
里面用到的两个function的代码如下:
public IWorkspace connectToFileDB(StringfileGDB,IServerContext sc) throws java.net.UnknownHostException,java.io.IOException{
com.esri.arcgis.datasourcesGDB.FileGDBWorkspaceFactoryfactory = (FileGDBWorkspaceFactory)sc.createObject(FileGDBWorkspaceFactory.getClsid());
com.esri.arcgis.geodatabase.IWorkspaceworkspace = factory.openFromFile(fileGDB,0);
return workspace;
}
publicIFeatureClass getFeatureclass(IWorkspace workspace,String fName) throwsjava.net.UnknownHostException, java.io.IOException{
com.esri.arcgis.geodatabase.IEnumDatasetenumDataset =workspace.getDatasets(com.esri.arcgis.geodatabase.esriDatasetType.esriDTFeatureClass);
com.esri.arcgis.geodatabase.IDatasetds = null;
ds= enumDataset.next();
while(ds!= null){
if(ds.getName().endsWith(fName)){
return
new IFeatureClassProxy(ds);
}
ds= enumDataset.next();
}
retur nnull;
}
添加图层到ServerObject后,调用下面的代码,让修改生效。调用下面的代码后,将会使ServerObject的状态发生改变。
gisrec.getLocalMapServer().refreshServerObjects();
Server Object状态改变后,需要重新得到serverInfo,并且设置MapFunctionality里面的LayerDescription,把新的layer加入进去。这里我们就不手工添加,而是直接把整个MapDescription设置一遍,如下面的代码所示:
serverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName());
mapfunction.getMapServerInfo().setDefaultMapDescription(serverInfo.getDefaultMapDescription());
mapfunction.setMapDescription(serverInfo.getDefaultMapDescription());
最后,当然要加上一句refresh context的代码:
webContext.refresh();
把此代码放在一个tool或者command中运行即可。这应该是最简洁明了的添加一个图层的代码了。
分享到:
相关推荐
6、Server Java讲座-----扩展Tasks框架 13 7、Server Java 开发实战---自定义command 19 8、 ArcGIS Server Java 讲座--ADF 体系结构 第一部分 21 9、ArcGIS Server JAVA讲座--实现后台JSF Bean和前台Javascript的...
**ArcGIS Server Java讲座** ArcGIS Server是一款强大的地理信息系统(GIS)软件,它允许用户发布、管理和共享地理数据。在Java环境下使用ArcGIS Server,我们可以利用ArcGIS Server for Java ADF(ArcObjects for ...
综上所述,ArcGIS Server Java讲座系列是一个全面的学习资源,涵盖了从基础概念到高级开发技巧的各个方面,旨在帮助开发者充分利用Java和JSF在GIS领域的潜力。通过这个系列,开发者不仅可以学习到ArcGIS Server的...
【ArcGIS Server Java 讲座】是一系列关于使用Java技术进行ArcGIS Server开发的专业文档,主要探讨了在ArcGIS Server中使用Java Server Faces (JSF)框架的原因和实践。以下是讲座涉及的一些关键知识点: 1. **为...
它利用了一组标准化的JSF(JavaServer Faces)控件以及任务和Web程序模板,极大地简化了GIS Web应用程序的开发过程。 #### Web ADF 的主要组成部分 - **JSF 基础**:Web ADF 建立在 JSF 这个成熟的 Java Web 开发...
在本系列讲座中,我们将探讨如何使用 JSF(JavaServer Faces)技术来开发 ArcGIS Server 应用程序。首先,我们需要解释为什么选择了 JSF 而不是其他框架。 **1.1 为什么选择 JSF:** - **成熟度与稳定性:**JSF 是...
**JSP(Java Server Pages)**是Java平台上用于创建动态Web内容的一种技术。它结合了HTML和Java代码,使得开发者可以方便地构建交互式的网页应用。JSP的特点和优势包括: 1. **一次编译、到处执行**:JSP文件在...
标题中的“17security_pdf_”可能指的是一个关于网络安全或Java安全的专题讲座,而描述中提到的“Contain lectures of java”进一步确认了这个压缩包包含的是与Java编程相关的教学资料。标签“pdf”表明这些内容是以...
【标题】:“[西安电子科技大学JSP在线课程].7.” 暗示这是一段关于JSP(JavaServer Pages)的视频教程,可能来自于西安电子科技大学的在线课程,重点是第7部分的内容。JSP是一种动态网页技术,常用于创建交互式的...
在这个系统中,JSP(JavaServer Pages)起到了视图层的作用,它允许开发者在HTML页面中嵌入Java代码,实现动态网页的生成。JSP与Servlet协同工作,使得开发者可以方便地处理用户请求,展示数据。 接下来,提到的...