ArcGIS Server 9.3 ADF开发 CAD文件本地动态加载到GraphicsLayer中未成功案例

这种方法调试很久没成功,记录下来看看有没有人已经突破了

      1。按钮click方法里:

        ReadCADShp clsCAD = new ReadCADShp();
            clsCAD.loadCAD(Map1, @"D:data需测量合图40坐标.dwg");
            //Map1.Extent = env;
            MapResourceManager1.Refresh();
            Toc1.Refresh();
            Map1.Refresh();

  2。clsCAD类里:

  

using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer;
using System.Data;

/// <summary>
///ReadCADShp 的摘要说明
/// </summary>
public class ReadCADShp
{
 public ReadCADShp()
 {
  //
  //TODO: 在此处添加构造函数逻辑
  //
 }

    public void loadCAD(ESRI.ArcGIS.ADF.Web.UI.WebControls.Map Map1, string strFile)
    {
        string strPath = System.IO.Path.GetDirectoryName(strFile);
        string strFileName = System.IO.Path.GetFileName(strFile);
        MapFunctionality mf = (MapFunctionality)Map1.GetFunctionality(1);
        MapResourceLocal mrl = mf.MapResource as MapResourceLocal;
        IWorkspaceFactory wp = (IWorkspaceFactory)mrl.ServerContextInfo.ServerContext.CreateObject("esriDataSourcesFile.CadWorkspaceFactory");
        IWorkspace wk = wp.OpenFromFile(strPath, 0);
        ICadDrawingWorkspace pCAD = (ICadDrawingWorkspace)wk;
        ICadDrawingDataset pCADDset = pCAD.OpenCadDrawingDataset(strFileName);
        ICadLayer cadlayer = (ICadLayer)mrl.ServerContextInfo.ServerContext.CreateObject("esriCarto.CadLayer");
        cadlayer.CadDrawingDataset = pCADDset;
        cadlayer.Name = "ImportToLayer";

        //ESRI.ArcGIS.Geodatabase.ITable iTable = cadlayer.CadDrawingDataset as ITable;
        //ESRI.ArcGIS.Geodatabase.ICursor iCursor = iTable.Search(null, true);
        //iTable = iCursor.NextRow();
        //if (iCursor != null)
        //{
        //    iDataStatistics.Field = "area";
        //    iDataStatistics.Cursor = iCursor;
        //    iStatisticsResults = iDataStatistics.Statistics;
        //    returnValue = iStatisticsResults.Sum;
        //}

        //ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement ge = cadlayer.CadDrawingDataset as ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement;
        //System.Collections.IEnumerable gfc = Map1.GetFunctionalities();
        //ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource resource = null;
        //foreach(ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality gfunc in gfc)
        //{
        //    if(gfunc.Resource.Name == "ImportToLayer")
        //    {
        //        resource = (ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource)gfunc.Resource;
        //    }
        //}
        //if(resource == null) return;
        //ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer glayer = null;
        //foreach (System.Data.DataTable dt in resource.Graphics.Tables)
        //{
        //    if (dt is ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)
        //    {
        //        glayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)dt;
        //        break;
        //    }
        //}

        //if (glayer == null)
        //{
        //    glayer = new ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer();
        //    resource.Graphics.Tables.Add(glayer);
        //}

        //glayer.Clear();//清除以后数据
        //glayer.Add(ge);
        //if (Map1.ImageBlendingMode == ESRI.ArcGIS.ADF.Web.UI.WebControls.ImageBlendingMode.WebTier)
        //    Map1.Refresh();
        //else if (Map1.ImageBlendingMode == ESRI.ArcGIS.ADF.Web.UI.WebControls.ImageBlendingMode.Browser)
        //    Map1.RefreshResource(resource.Name);

        //DataSet dataset = cadlayer.CadDrawingDataset as DataSet

        IMapServer ms = (IMapServer)mrl.ServerContextInfo.ServerContext.ServerObject;
        IMapServerObjects mo = (IMapServerObjects)ms;
        //mo.RefreshServerObjects();
        IMap pMap = mo.get_Map(ms.DefaultMapName);
        //pMap.AddLayer(cadlayer);

        IGraphicsLayer pGraphicsLayer = null;
        ICompositeGraphicsLayer pCompositeGraphicsLayer = pMap.BasicGraphicsLayer as ICompositeGraphicsLayer;
        pGraphicsLayer = pCompositeGraphicsLayer.FindLayer("ImportToLayer");
        pMap.ActiveGraphicsLayer = pGraphicsLayer as ILayer;
        IElement pElement = null;
        pElement = cadlayer as IElement;
        IGraphicsContainer pGraphicsContainer = pGraphicsLayer as IGraphicsContainer;//这里之所以可以QI,是因为GraphicsSubLayer同时实现了IGraphicsLayer和IGraphicsContainer 
        pGraphicsContainer.AddElement(pElement, 0);

        mrl.RefreshServerObjects();

        //ICompositeGraphicsLayer pCompositeGLayer = pMap.BasicGraphicsLayer as ICompositeGraphicsLayer;
        //IGraphicsLayer pGLayer = null;
        //try
        //{
        //    //查找是否已存在,如果不存在,跳转到catch内容.
        //    //如果查到不到,说明集合中并没有指定名称的graphicslayer
        //    pGLayer = pCompositeGLayer.FindLayer("ImportToLayer");
        //}
        //catch
        //{
        //    //若不存在,则添加一个指定名称的GraphicsLayer
        //    pGLayer = pCompositeGLayer.AddLayer("ImportToLayer", null);
        //}

        //IGraphicElement pGElement = null;
        //pGElement = cadlayer as IGraphicElement;

        //IGraphicsContainer gc = pGLayer as IGraphicsContainer;//这里之所以可以QI,是因为GraphicsSubLayer同时实现了IGraphicsLayer和IGraphicsContainer 
        //gc.AddElement(pGElement as IElement, 0);

        //ESRI.ArcGIS.ADF.Web.Geometry.Envelope aa = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope();
        //aa.XMax = cadlayer.AreaOfInterest.XMax;
        //aa.XMin = cadlayer.AreaOfInterest.XMin;
        //aa.YMax = cadlayer.AreaOfInterest.YMax;
        //aa.YMin = cadlayer.AreaOfInterest.YMin;
        //return aa;

    }

}

原文地址:https://www.cnblogs.com/thsgar/p/3160471.html