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;
}
}
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;
}
}
相关文章推荐
- arcgis server 9.3 ADF开发 CAD文件本地动态加载到graphicslayer中总结
- Android 开发中如何动态加载 so 库文件
- World Wind Java开发之八——加载本地缓存文件构建大范围三维场景(
- QTreeWidget实现动态加载本地文件系统
- Unity--动态加载网络图片和本地图片文件
- 检查远程服务器的js不可用时,动态加载本地服务器文件
- ArcGIS Server 9.3 ADF开发在IE 8下的问题
- World Wind Java开发之八——加载本地缓存文件构建大范围三维场景
- javascript开发随笔二 动态加载js和文件
- Android插件化开发之动态加载本地皮肤包进行换肤
- ArcGIS Runtime for .Net Quartz开发探秘(四):加载本地文件
- 案例4-静态加载文件 与 动态加载文件
- 原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
- 动态加载EXE文件到内存执行(测试可以编译成功)
- Silverlight 2.0 通过OpenFileDialog动态加载本地图像文件
- 【大话QT之一】QTreeWidget实现动态加载本地文件系统
- 【IOS 开发】UIWebView 加载本地文件,多层的网页目录结构失败分析和解决,以及demo
- ExtJS文件的动态加载 以及 本地文件测试时的跨域问题
- iOS开发:PDF文件的加载及显示(网络、本地)
- Android GIS开发系列-- 入门季(5) FeatureLayer加载本地shp文件与要素查询