您的位置:首页 > 其它

adf for dotnet中动态给ArcGis Server服务添加图层

2011-07-22 17:08 471 查看
ArcGisServer发布的地图服务,一般在发布的时候就指定了有哪些图层

如果想在服务发布后再添加一些图层,这时候可以直接修改数据源(如服务对应的mxd文件),添加一个图层,再重启服务就可以了

还有一种方法是,直接对发布的服务添加图层,思路是IMapServerObjects可以获取到IMap对象,可以对这个IMap添加图层

添加完图层执行IMapServerObjects.RefreshServerObjects方法

但是这时候刷新adf的地图却看不到新添加的图层,因为adf还不知道添加了一个图层,需要手动刷新adf的地图信息

MapResouceLocal.MapServer.GetServerInfo方法可以获取服务器上的IMapServerInfo对象,需要将MapDescription更新到adf中

使用ESRI.ArcGIS.ADF.ArcGISServer.Converter将Com对象转换为adf可以用的ESRI.ArcGIS.ADF.ArcGISServer.MapDescription对象

再更新MapResouceLocal.MapServerInfo.DefaultMapDescription属性,这样地图就可以显示新的图层了

但toc控件却没有列出新的图层,那是因为没有更新MapResouceLocal.MapServerInfo.MapLayerInfos,更新一下就可以了

1 IMapServerInfo msi= MapResouceLocal.MapServer.GetServerInfo(MapResouceLocal.MapServer.DefaultMapName);
2 IMapLayerInfos mlis = msi.MapLayerInfos;
3 ESRI.ArcGIS.ADF.ArcGISServer.MapDescription newDes = ESRI.ArcGIS.ADF.ArcGISServer.Converter.ComObjectToValueObject(msi.DefaultMapDescription, ServerContext, typeof(ESRI.ArcGIS.ADF.ArcGISServer.MapDescription)) as ESRI.ArcGIS.ADF.ArcGISServer.MapDescription;
4 ESRI.ArcGIS.ADF.ArcGISServer.MapLayerInfo[] newLayerInfos = ESRI.ArcGIS.ADF.ArcGISServer.Converter.ComObjectToValueObject(msi.MapLayerInfos, ServerContext, typeof(ESRI.ArcGIS.ADF.ArcGISServer.MapLayerInfo[])) as ESRI.ArcGIS.ADF.ArcGISServer.MapLayerInfo[];
5 MapResouceLocal.MapServerInfo.DefaultMapDescription = newDes;
6 MapResouceLocal.MapServerInfo.MapLayerInfos = newLayerInfos;
/article/5202288.html这个是java中的实现,思路差不多

需要注意的是:新添加的图层如果不保存到mxd中,重启服务器就消失了,应该有方法把新添加的图层更新到mxd中

一种思路就是像操作一般mxd一样,用服务中的imap更新mxd中的imap,见:http://blog.163.com/dingtao-wgs/blog/static/50260714201011172223482/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: