在ARCGIS SERVER 9.2中动态增加图层(附代码)

来源:互联网 发布:程序员电影 编辑:程序博客网 时间:2024/06/05 14:38
前天被这个问题弄得糊里糊涂,看这里还有人跟我一样痛苦,所以把代码贴出来。

        ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceLocal gisresource = (ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceLocal)MapResourceManager1.GetResource(0);
        IServerContext mapContext = gisresource.ServerContextInfo.ServerContext;

        #region 创建图层,什么样类型的地图用什么样的WorkspaceFactory
        string TableName = "xzqy";
        IWorkspaceFactory factory = (IWorkspaceFactory)mapContext.CreateObject("esriDataSourcesGDB.AccessWorkspaceFactory");
        IFeatureWorkspace fws = factory.OpenFromFile(@"g:/a.mdb", 0) as IFeatureWorkspace;
        IFeatureLayer layer = (IFeatureLayer)mapContext.CreateObject("esriCarto.FeatureLayer");
        layer.FeatureClass = fws.OpenFeatureClass(TableName);
        layer.Name = TableName;
        layer.Visible = true;
        #endregion

        IGeoFeatureLayer iglayer = (IGeoFeatureLayer)layer;
        IFeatureRenderer renderer = iglayer.Renderer;
        ISimpleRenderer isr = (ISimpleRenderer)renderer;
        IRgbColor irgbc = (IRgbColor)mapContext.CreateObject("esriDisplay.RgbColor");
        irgbc.Red = 255;
        irgbc.Green = 0;
        irgbc.Blue = 100;
        ESRI.ArcGIS.Geometry.esriGeometryType featype = layer.FeatureClass.ShapeType;
        if (featype == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint)
        {
            ISimpleMarkerSymbol ifs = (ISimpleMarkerSymbol)isr.Symbol;
            ifs.Color = (IColor)irgbc;
        }
        else if (featype == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline)
        {
            ISimpleLineSymbol ifs = (ISimpleLineSymbol)isr.Symbol;
            ifs.Color = (IColor)irgbc;
        }
        else if (featype == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon)
        {
            ISimpleFillSymbol ifs = (ISimpleFillSymbol)isr.Symbol;
            ifs.Color = (IColor)irgbc;
        }
        else
        {
            throw new Exception("No renderer or symbol selected.  Shape type undetermined.");
        }


        #region 加入地图
        IMapServerObjects mso = (IMapServerObjects)gisresource.MapServer;
        IMap map = mso.get_Map(gisresource.DataFrame);
        map.ClearLayers();
        map.AddLayer(layer);
        #endregion

        #region 刷新,有谁了解刷新机制的可以给个说明
        gisresource.RefreshServerObjects();
        if (Map1.ImageBlendingMode == ImageBlendingMode.WebTier)
        { Map1.Refresh(); }
        else if (Map1.ImageBlendingMode == ImageBlendingMode.Browser)
        { Map1.RefreshResource(gisresource.Name); }
        Toc1.Refresh();
        #endregion
备注:本文引用自http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=7388&highlight=ArcGIS%2BServer%2B9.2(需是ESRI论坛注册用户才能访问网页)