zoukankan      html  css  js  c++  java
  • 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;

        }

    }

  • 相关阅读:
    软考之操作系统
    牛腩javascript(二)之正则表达式
    牛腩javascript(一)
    软考之算法
    软考之数据结构
    软考之路之刷屏开始
    XML中的几种比较
    北大青鸟ASP.NET之总结篇
    Webassembly 学习2 -- Js 与C 数据交互
    nginx-proxy_redirect
  • 原文地址:https://www.cnblogs.com/thsgar/p/3160471.html
Copyright © 2011-2022 走看看