`
Fangrn
  • 浏览: 818377 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Server Java讲座--动态添加图层数据

阅读更多

有的时候,特别是在做分析时,需要经常添加新的图层到当前的地图中。在这个时候,我们一般采用非池化的Server Object,以保证当前用户的修改不会影响到其他用户。添加图层的代码如下:
首选,得到Resource和mapFunctionality和MapServerInfo,以备后面使用:

Java代码 复制代码
  1. AGSLocalMapResource gisrec=(AGSLocalMapResource)webContext.getResources().get( "ags1" );   
  2. AGSMapFunctionalitymapfunction=(AGSMapFunctionality)gisrec.getFunctionalities().get( "map" );   
  3. MapServerPortmapServer=gisrec.getMapServer();   
  4. MapServerInfoserverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName());  
AGSLocalMapResource gisrec=(AGSLocalMapResource)webContext.getResources().get("ags1");
AGSMapFunctionalitymapfunction=(AGSMapFunctionality)gisrec.getFunctionalities().get("map");
MapServerPortmapServer=gisrec.getMapServer();
MapServerInfoserverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName());


得到MapServer的IMap接口

Java代码 复制代码
  1. IMaptargetMap=gisrec.getLocalMapServer().getMap(gisrec.getLocalMapServer().getDefaultMapName());  
IMaptargetMap=gisrec.getLocalMapServer().getMap(gisrec.getLocalMapServer().getDefaultMapName());


IMap接口可以用来添加数据到ServerObject。下面的代码可以用来从文件数据库中读取数据并把它添加到IMap中:

Java代码 复制代码
  1. IWorkspacewk= this .connectToFileDB( "D:\\data\\sapdata.gdb" ,gisrec.getServerContext());   
  2. IFeatureClassfc= this .getFeatureclass(wk, "MSA_Intersect" );   
  3. FeatureLayerflayer=(FeatureLayer)gisrec.getServerContext().createObject(FeatureLayer.getClsid());   
  4. flayer.setFeatureClassByRef(fc);   
  5. targetMap.addLayer(flayer);  
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的代码如下:

Java代码 复制代码
  1. public  IWorkspace connectToFileDB(StringfileGDB,IServerContext sc)  throws  java.net.UnknownHostException,java.io.IOException{   
  2. com.esri.arcgis.datasourcesGDB.FileGDBWorkspaceFactoryfactory = (FileGDBWorkspaceFactory)sc.createObject(FileGDBWorkspaceFactory.getClsid());   
  3. com.esri.arcgis.geodatabase.IWorkspaceworkspace = factory.openFromFile(fileGDB, 0 );   
  4. return  workspace;   
  5.   
  6. }   
  7.   
  8. publicIFeatureClass getFeatureclass(IWorkspace workspace,String fName) throwsjava.net.UnknownHostException, java.io.IOException{   
  9. com.esri.arcgis.geodatabase.IEnumDatasetenumDataset =workspace.getDatasets(com.esri.arcgis.geodatabase.esriDatasetType.esriDTFeatureClass);   
  10. com.esri.arcgis.geodatabase.IDatasetds =  null ;   
  11. ds= enumDataset.next();   
  12. while (ds!=  null ){   
  13. if (ds.getName().endsWith(fName)){   
  14. return   
  15. new  IFeatureClassProxy(ds);   
  16. }   
  17. ds= enumDataset.next();   
  18.   
  19. }   
  20.   
  21. retur nnull;   
  22.   
  23. }  
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设置一遍,如下面的代码所示:

Java代码 复制代码
  1. serverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName());   
  2. mapfunction.getMapServerInfo().setDefaultMapDescription(serverInfo.getDefaultMapDescription());   
  3. mapfunction.setMapDescription(serverInfo.getDefaultMapDescription());  
serverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName());
mapfunction.getMapServerInfo().setDefaultMapDescription(serverInfo.getDefaultMapDescription());
mapfunction.setMapDescription(serverInfo.getDefaultMapDescription());


最后,当然要加上一句refresh context的代码:

Java代码 复制代码
  1. webContext.refresh();  
webContext.refresh();


把此代码放在一个tool或者command中运行即可。这应该是最简洁明了的添加一个图层的代码了。

分享到:
评论

相关推荐

    ArcGIS+Server+Java讲座

    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 Java讲座** ArcGIS Server是一款强大的地理信息系统(GIS)软件,它允许用户发布、管理和共享地理数据。在Java环境下使用ArcGIS Server,我们可以利用ArcGIS Server for Java ADF(ArcObjects for ...

    arcgis server java讲座

    【ArcGIS Server Java 开发】是一项复杂而深入的技术...总的来说,这个ArcGIS Server Java讲座涵盖了从基础的JSF框架到高级的自定义开发和SOA集成,为开发者提供了全面的指导,帮助他们构建高效、可扩展的GIS应用程序。

    ArcGIS Server Java讲座.doc

    综上所述,ArcGIS Server Java讲座系列是一个全面的学习资源,涵盖了从基础概念到高级开发技巧的各个方面,旨在帮助开发者充分利用Java和JSF在GIS领域的潜力。通过这个系列,开发者不仅可以学习到ArcGIS Server的...

    [feiq]ArcGIS Server Java讲座.doc

    【ArcGIS Server Java 讲座】是一系列关于使用Java技术进行ArcGIS Server开发的专业文档,主要探讨了在ArcGIS Server中使用Java Server Faces (JSF)框架的原因和实践。以下是讲座涉及的一些关键知识点: 1. **为...

    arcgisserver精典讲座系列之二--Web ADF

    它利用了一组标准化的JSF(JavaServer Faces)控件以及任务和Web程序模板,极大地简化了GIS Web应用程序的开发过程。 #### Web ADF 的主要组成部分 - **JSF 基础**:Web ADF 建立在 JSF 这个成熟的 Java Web 开发...

    二次开发arcgis_server_for_java

    在本系列讲座中,我们将探讨如何使用 JSF(JavaServer Faces)技术来开发 ArcGIS Server 应用程序。首先,我们需要解释为什么选择了 JSF 而不是其他框架。 **1.1 为什么选择 JSF:** - **成熟度与稳定性:**JSF 是...

    JSP讲座.ppt

    **JSP(Java Server Pages)**是Java平台上用于创建动态Web内容的一种技术。它结合了HTML和Java代码,使得开发者可以方便地构建交互式的网页应用。JSP的特点和优势包括: 1. **一次编译、到处执行**:JSP文件在...

    17security_pdf_

    标题中的“17security_pdf_”可能指的是一个关于网络安全或Java安全的专题讲座,而描述中提到的“Contain lectures of java”进一步确认了这个压缩包包含的是与Java编程相关的教学资料。标签“pdf”表明这些内容是以...

    [西安电子科技大学JSP在线课程].7.

    【标题】:“[西安电子科技大学JSP在线课程].7.” 暗示这是一段关于JSP(JavaServer Pages)的视频教程,可能来自于西安电子科技大学的在线课程,重点是第7部分的内容。JSP是一种动态网页技术,常用于创建交互式的...

    基于ssm+jsp社区老年人关怀服务系统.zip

    在这个系统中,JSP(JavaServer Pages)起到了视图层的作用,它允许开发者在HTML页面中嵌入Java代码,实现动态网页的生成。JSP与Servlet协同工作,使得开发者可以方便地处理用户请求,展示数据。 接下来,提到的...

Global site tag (gtag.js) - Google Analytics