有的时候,特别是在做分析时,需要经常添加新的图层到当前的地图中。在这个时候,我们一般采用非池化的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());
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());
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);
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;
-
-
}
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());
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的...
AddDataLayer--arcgis server 9.2 添加图层的应用
Arcgis Server 动态加载图层 Arcgis Server 9.3 C#
【数据分享】丝绸之路-天地图专题数据图层shp文件
GeoJsonify - 轻松地将GeoJson图层添加到您的地图
计算机软件-商业源码-实例七---photoshop图层效果.zip
arcmap-模型构造器要素图层批量重命名
arcgis server java 开发,自定义command,使用图片和TrueType字体进行标注,自定义Functionality,控制图层.....
ios 利用runtime机制,为导航栏动态添加图层,实现当滑动表的时候,y偏移量大于某个值,导航栏颜色变化。
cocos2d-x 2.x 图层特效Effect
python add-in-wizard arcgis通过选择源图层与分析图层进行数据分析,适用于图斑分析所占地类面积,房地一体、不动产、报批等。方便快捷,附上源代码及打包完成的exe程序。
176512行 -- 将服务切片数据赋值到 tilingScheme._tileInfo = = data.tileInfo 17364行 、17383行 -- 根据切片数据,计算不同比例尺,瓦片行列总数 176917行 -- 增加判断,根据orgin -400 与 cesium默认的-180 进行...
python add-in-wizard arcgis图层shp要素转txt,根据选中的图层要素转成txt,选择多少个就转多少个,不选则全部转出,使用简单方便,直接在arcgis添加一个工具按钮,适用于自然资源行业的系统txt转换,报批、设施农用...
ARCGIS应用-第5章-图层管理(ppt文档).ppt
AE 2020中文版从入门到精通视频教程1-1-09AE界面-图层面板03.mp4
AE 2020中文版从入门到精通视频教程1-1-08AE界面-图层面板02.mp4
AE 2020中文版从入门到精通视频教程1-1-07AE界面-图层面板01.mp4
行业文档-设计装置-一种彩喷纸图层涂料
在做网络分析时,常常需要在跟踪图层上添加一些几何对象来增强分析效果,例如公交分析中添加的站点名称。本范例程序演示了如何向跟踪图层中添加具有指定大小、位置、和颜色的线对象、面对象、文本对象。其它的几何...
matlab开发-使用轮廓图按图层进行表面着色。创建曲面并逐层应用颜色。不同的海拔高度都有明确的标识。