您的位置:首页 > 编程语言 > Java开发

ArcGIS Server Java -- 动态添加图层

2010-01-18 11:28 441 查看
     如果使用的资源类型是com.esri.adf.web.ags.data.AGSLocalMapResource,就可以在该资源上动态添加新的图层,图层数据可以来自不同的地方,比如本地的shapefile、file geodatabase或者SDE,也可以来自WMS等web服务。本文以本地的file geodatabase为例,为AGSLocalMapResource动态添加一个新的图层。

 

     首先,要得到地图的IMap接口才能对地图的图层进行操作。

[code] // 得到本地MapResource


AGSLocalMapResource res = (AGSLocalMapResource)context.getResources().get("agsws1");


 


//得到targetMap


MapServer mapServer = res.getLocalMapServer();


IMap map = mapServer.getMap(mapServer.getDefaultMapName());


 


//TODO:得到fLayer


 


//添加图层至map


map.addLayer(fLayer);

[/code]

 

     动态添加图层的代码为map.addLayer(fLayer);它接收的参数是实现了ILayer接口的对象。因此,接下来我们需要把file geodatabase里的feature class组装成一个ILayer对象。

[code] //Server中的AO对象,必须在一个IServerContext上下文中使用


IServerContext sc = res.getServerContext();


 


//得到FeatureWorkspace


IWorkspaceFactory wsf = (IWorkspaceFactory) sc.createObject(FileGDBWorkspaceFactory.getClsid());


IFeatureWorkspace fws=(IFeatureWorkspace)wsf.openFromFile("E:\\temp\\data\\test.gdb",0);


 


//得到待添加图层


IFeatureClass fc=fws.openFeatureClass("world30");


IFeatureLayer fLayer=(IFeatureLayer)sc.createObject(FeatureLayer.getClsid());


fLayer.setFeatureClassByRef(fc);

[/code]

[code] //给图层设置渲染


IMapDocument doc = (IMapDocument)sc.createObject(MapDocument.getClsid());


doc.open("E:\\temp\\data\\world30_1.lyr", null);


ILayer lyr = doc.getLayer(0, 0);//get the first map's first layer


IFeatureRenderer renderer = null;


if(lyr instanceof IGeoFeatureLayer){


IGeoFeatureLayer geoLyr = (IGeoFeatureLayer)lyr;


renderer = geoLyr.getRenderer();


}


if (renderer != null) {


IGeoFeatureLayer geoFeatureLyr = (IGeoFeatureLayer) fLayer;


geoFeatureLyr.setRendererByRef(renderer);


}


fLayer.setVisible(true);

[/code]
     

[code] //刷新服务器对象


mapServer.refreshServerObjects();


 


//从地图资源中得到MapServerPort


MapServerPort mapServerPort = res.getMapServer();


MapServerInfo serverInfo = mapServerPort.getServerInfo(mapServerPort.getDefaultMapName());


 


//从地图资源中得到AGSMapFunctionality


AGSMapFunctionality mapfunction = (AGSMapFunctionality) res.getFunctionalities().get("map");


mapfunction.getMapServerInfo().setDefaultMapDescription(serverInfo.getDefaultMapDescription());


mapfunction.setMapDescription(serverInfo.getDefaultMapDescription());


context.refresh();

[/code]

     Server Object状态改变后,需要重新得到serverInfo,并且设置MapFunctionality里面的LayerDescription,把新的layer加入进去。这里我们就不手工添加,而是直接把整个MapDescription设置一遍,如上代码所示。

     把此代码放在一个tool或者command中运行即可。

 

参考:ArcGIS Server如何动态添加图层并进行查询

       Server Java讲座--动态添加图层数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: