您的位置:首页 > 其它

arcgis server 9.3 ADF开发 CAD文件本地动态加载到graphicslayer中未成功案例

2013-06-28 11:07 239 查看
这种方法调试很久没成功,记录下来看看有没有人已经突破了

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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: