/// <summary> /// 加载CAD文件 /// </summary> /// <param name="axMapControl">地图控件引用</param> /// <param name="strFilePath">文件路径</param> /// <returns>正常:“”,异常:异常字符;</returns> private SystemErrorType LoadCADFile(ref AxMapControl axMapControl, string strFilePath) { if (strFilePath == "") { return(SystemErrorType.enumFilePathIsNull); } try { //workspace声明 IWorkspaceFactory pCadWorkspaceFactory = null; IWorkspace pWorkspace = null; ICadDrawingWorkspace pCadDrawingWorkspace = null; ICadDrawingDataset pCadDataset = null; ICadLayer pCadLayer = null; //地图数据操作 pCadWorkspaceFactory = new CadWorkspaceFactoryClass(); pWorkspace = pCadWorkspaceFactory.OpenFromFile(strFilePath, 0); pCadDrawingWorkspace = pWorkspace as ICadDrawingWorkspace; pCadDataset = pCadDrawingWorkspace.OpenCadDrawingDataset(strFilePath); pCadLayer = new CadLayerClass(); pCadLayer.CadDrawingDataset = pCadDataset; //控件操作 axMapControl.ClearLayers(); axMapControl.AddLayer(pCadLayer, 0); axMapControl.Refresh(); } catch (Exception) { return(SystemErrorType.enumArcObjectHandleError); } return(SystemErrorType.enumOK); }
//添加cad文件 public void addcadfile(string filePath, string filename, AxMapControl mapControl) { if (filename + filePath == "") { return; } IWorkspaceFactory pWorkspaceFactory = new CadWorkspaceFactoryClass(); //打开CAD数据集 IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0); //打开一个要素集 IFeatureLayer pFeatureLayer; IFeatureDataset pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(filename); //IFeaturClassContainer可以管理IFeatureDataset中的每个要素类 IFeatureClassContainer pFeatClassContainer = (IFeatureClassContainer)pFeatureDataset; //对CAD文件中的要素进行遍历处理 for (int i = 0; i < pFeatClassContainer.ClassCount - 1; i++) { IFeatureClass pFeatClass = pFeatClassContainer.get_Class(i); if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation) { //如果是注记,则添加注记层 pFeatureLayer = new CadAnnotationLayerClass(); } else { //如果是点、线、面,则添加要素层 pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.Name = pFeatClass.AliasName; pFeatureLayer.FeatureClass = pFeatClass; mapControl.Map.AddLayer(pFeatureLayer); mapControl.ActiveView.Refresh(); } } }
/// <summary> /// 创建工作空间工厂 /// </summary> /// <returns></returns> private static IWorkspaceFactory CreateWksFactory(enumWorkspaceType fileWksType) { IWorkspaceFactory wksFactory = null; switch (fileWksType) { case enumWorkspaceType.Shapefile: wksFactory = new ShapefileWorkspaceFactoryClass(); break; case enumWorkspaceType.Gdb: wksFactory = new FileGDBWorkspaceFactoryClass(); break; case enumWorkspaceType.Mdb: wksFactory = new AccessWorkspaceFactoryClass(); break; case enumWorkspaceType.Cad: wksFactory = new CadWorkspaceFactoryClass(); break; case enumWorkspaceType.RasterFile: wksFactory = new RasterWorkspaceFactoryClass(); break; default: break; } return(wksFactory); }
/// <summary> /// 打开CAD工作空间 /// </summary> /// <param name="folderPath"></param> /// <returns></returns> public static IWorkspace openCadWorkspace(string folderPath) { //Create a WorkspaceName object CadWorkspaceFactoryClass factory = new CadWorkspaceFactoryClass(); IWorkspace ws = factory.OpenFromFile(folderPath, 0); return(ws); }
/// <summary> /// 获取Workspace /// </summary> /// <param name="dataPath"></param> /// <param name="dataType"></param> /// <returns></returns> public IWorkspace GetWorkspace(string dataPath, string dataType) { IWorkspaceFactory pWorkspaceFactory = null; IWorkspace pWorkspace = null; IPropertySet pPropertySet = new PropertySetClass(); int index; string filePath = ""; string dataTypeName = dataType.ToLower(); //根据不同的数据类型获取不同的WorkspaceFactory,设置不同的IPropertySet参数 switch (dataTypeName) { //mdb类型的dataPath为mdb本身的全路径 case "mdb": pPropertySet.SetProperty("DATABASE", dataPath); pWorkspaceFactory = new AccessWorkspaceFactoryClass(); break; //shp类型的dataPath为其父文件夹的全路径 case "shp": index = dataPath.LastIndexOf("\\"); filePath = dataPath.Substring(0, index); pPropertySet.SetProperty("DATABASE", filePath); pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); break; //dwg类型的dataPath为其父文件夹的全路径 case "dwg": index = dataPath.LastIndexOf("\\"); filePath = dataPath.Substring(0, index); pPropertySet.SetProperty("DATABASE", filePath); pWorkspaceFactory = new CadWorkspaceFactoryClass(); break; //gdb类型的dataPath为gdb文件夹的全路径 case "gdb": pPropertySet.SetProperty("DATABASE", dataPath); pWorkspaceFactory = new FileGDBWorkspaceFactoryClass(); break; case "jpg": case "bmp": case "tif": index = dataPath.LastIndexOf("\\"); filePath = dataPath.Substring(0, index); pPropertySet.SetProperty("DATABASE", filePath); pWorkspaceFactory = new RasterWorkspaceFactoryClass(); break; default: break; } pPropertySet.SetProperty("DATABASE", dataPath); pWorkspace = pWorkspaceFactory.Open(pPropertySet, 0); return(pWorkspace); }
private void btnCollectCAD_Click(object sender, EventArgs e) { if (this.textboxCAD.Text == "") { return; } try { //获取文件名和文件路径 int pIndex = this.textboxCAD.Text.LastIndexOf("\\"); string pFilePath = this.textboxCAD.Text.Substring(0, pIndex); string pFileName = this.textboxCAD.Text.Substring(pIndex + 1); //打开CAD数据集 IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeatureLayer pFeatureLayer; IFeatureDataset pFeatureDataset; pWorkspaceFactory = new CadWorkspaceFactoryClass(); //using ESRI.ArcGIS.DataSourcesFile; pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(pFilePath, 0); //打开一个要素集 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(pFileName); //IFeatureClassContainer可以管理IFeatureDataset中的每个要素类 IFeatureClassContainer pFeatClassContainer = (IFeatureClassContainer)pFeatureDataset; IGroupLayer pGroupLayer = new GroupLayerClass(); pGroupLayer.Name = pFileName; //对CAD文件中的要素进行遍历处理 for (int i = 0; i < pFeatClassContainer.ClassCount; i++) { IFeatureClass pFeatClass = pFeatClassContainer.get_Class(i); //如果是注记,则添加注记层 if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation) { pFeatureLayer = new CadAnnotationLayerClass(); pFeatureLayer.Name = pFeatClass.AliasName; pFeatureLayer.FeatureClass = pFeatClass; pGroupLayer.Add(pFeatureLayer); //this.pMapControl.Map.AddLayer(pFeatureLayer); } else //如果是点、线、面则添加要素层 { pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.Name = pFeatClass.AliasName; pFeatureLayer.FeatureClass = pFeatClass; pGroupLayer.Add(pFeatureLayer); //this.pMapControl.Map.AddLayer(pFeatureLayer); } } this.pMapControl.Map.AddLayer(pGroupLayer); this.pMapControl.ActiveView.Refresh(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// 打开CAD工作空间 /// PS:打开cad要素时候,需要注意格式:cad文件名:要素类名称。cad文件名需要包含扩展名 /// 如:"buildings.dxf:polygon" /// </summary> /// <param name="cadFolderPath">cad所在的文件夹路径</param> /// <returns></returns> public static IWorkspace OpenCadWorkspace(string cadFolderPath) { IWorkspaceFactory pCADWorkSpaceFc = null; IWorkspace pWorkspace = null; try { pCADWorkSpaceFc = new CadWorkspaceFactoryClass(); pWorkspace = pCADWorkSpaceFc.OpenFromFile(cadFolderPath, 0); } catch (Exception ex) { LOG.Error("cad文件打开错误,详情:" + ex.Message); // Console.WriteLine("空间数据库打开错误"); return(null); } return(pWorkspace); }
public void ShpToCAD(IFeatureClass fteclss, string lsshp, string cadpath, string FormatType) { //先转为shp文件 try { FclssToShp(fteclss, lsshp); //shp转为要素 Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; ExportCAD export = new ExportCAD(); export.in_features = lsshp; export.Output_Type = FormatType; export.Output_File = cadpath; export.Ignore_FileNames = "1"; export.Append_To_Existing = "1"; IGeoProcessorResult result = gp.Execute(export, null) as IGeoProcessorResult; //转换成功是否将CAD文件添加进图层 if (result.Status == esriJobStatus.esriJobSucceeded) { if (MessageBox.Show("转换成功,是否添加至图层", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK) { string filepath = System.IO.Path.GetDirectoryName(cadpath); string filename = System.IO.Path.GetFileName(cadpath); CadWorkspaceFactory cadwspFcy = new CadWorkspaceFactoryClass(); IFeatureWorkspace fteWsp = cadwspFcy.OpenFromFile(filepath, 0) as IFeatureWorkspace; //转换为CAD工作空间 ICadDrawingWorkspace CadWsp = fteWsp as ICadDrawingWorkspace; ICadDrawingDataset CadDataset = CadWsp.OpenCadDrawingDataset(filename); ICadLayer cadLyr = new CadLayerClass(); cadLyr.CadDrawingDataset = CadDataset; cadLyr.Name = filename; this.Mapcontrol.AddLayer(cadLyr, 0); this.Mapcontrol.Refresh(); } } shpDel(lsshp); } catch (Exception ex) { MessageBox.Show("转换失败" + ex.Message); } }
public override void OnClick() { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Title = "打开CAD文件"; openFileDialog1.Filter = "CAD图形文件(*.dwg)|*.DWG"; if (openFileDialog1.ShowDialog() == DialogResult.OK && m_hookHelper.Hook is IMapControlDefault) { FileInfo fileinfo = new FileInfo(openFileDialog1.FileName); string path = fileinfo.DirectoryName; string name = fileinfo.Name; IWorkspaceFactory cadWorkSpaceFactory = new CadWorkspaceFactoryClass(); ICadDrawingWorkspace cadworkspace = cadWorkSpaceFactory.OpenFromFile(path, 0) as ICadDrawingWorkspace; ICadDrawingDataset cadDataset = cadworkspace.OpenCadDrawingDataset(name); ICadLayer cadLayer = new CadLayerClass(); cadLayer.CadDrawingDataset = cadDataset; ((IMapControlDefault)m_hookHelper.Hook).AddLayer(cadLayer,0); } }
//2.加载Lyr //3.加载Shp //4.打开CAD数据 4.1-ArcEngine接口,4.2-netDXF.dll--使用开源插件,主要用于导出为dxf文件 #region 加载CAD数据 /***4.1-ArcEngine接口***/ /// <summary> /// 通过指定的本地路径打开CAD所有图层数据 /// </summary> /// <param name="mapControlDefault">默认的mapcontrol最新接口</param> /// <param name="strPath">cad文件的路径-包括文件名及后缀名</param> public static void GetAllCADbyPath(IMapControlDefault mapControlDefault, string strPath) { IWorkspaceFactory pWorkspaceFactory = new CadWorkspaceFactoryClass(); string strPathWithoutFileName = Path.GetDirectoryName(strPath); string strFileName = Path.GetFileName(strPath); string strFileNameWithoutExtention = Path.GetFileNameWithoutExtension(strPath); IWorkspace pCADWorkspace = pWorkspaceFactory.OpenFromFile(strPathWithoutFileName, 0);//hWnd的参数是父窗口或应用程序的窗口 if (!(pCADWorkspace.Type == esriWorkspaceType.esriFileSystemWorkspace)) return; //1-pFeatureWorkspace.OpenFeatureDataset方法--推荐:可以判断注记层 GetALLCADbyWorkspace(mapControlDefault, pCADWorkspace, strFileName); //2-通过IName获取到CadDrawingDataset在cadLayer //GetAllCADbyCADLayer(mapControlDefault,strPathWithoutFileName,strFileName); //3-通过ICadDrawingWorkspace获取到CadDrawingDataset //GetALLCADLayer(mapControlDefault, pCADWorkspace, strFileName); mapControlDefault.ActiveView.Refresh(); }
public override void OnClick() { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Title = "打开CAD文件"; openFileDialog1.Filter = "CAD图形文件(*.dwg)|*.DWG"; if (openFileDialog1.ShowDialog() == DialogResult.OK && m_hookHelper.Hook is IMapControlDefault) { FileInfo fileinfo = new FileInfo(openFileDialog1.FileName); string path = fileinfo.DirectoryName; string name = fileinfo.Name; IWorkspaceFactory cadWorkSpaceFactory = new CadWorkspaceFactoryClass(); ICadDrawingWorkspace cadworkspace = cadWorkSpaceFactory.OpenFromFile(path, 0) as ICadDrawingWorkspace; ICadDrawingDataset cadDataset = cadworkspace.OpenCadDrawingDataset(name); ICadLayer cadLayer = new CadLayerClass(); cadLayer.CadDrawingDataset = cadDataset; ((IMapControlDefault)m_hookHelper.Hook).AddLayer(cadLayer, 0); } }
public static void AddData_CAD(AxMapControl axMapControl1) { IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeatureLayer pFeatureLayer; IFeatureDataset pFeatureDataset; //获取当前路径和文件名 OpenFileDialog dlg = new OpenFileDialog(); if (dlg.ShowDialog() == DialogResult.OK) { string strFullPath = dlg.FileName; if (strFullPath == "") return; int Index = strFullPath.LastIndexOf("//"); string filePath = strFullPath.Substring(0, Index); string fileName = strFullPath.Substring(Index + 1); //打开CAD数据集 pWorkspaceFactory = new CadWorkspaceFactoryClass(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0); //打开一个要素集 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(fileName); //IFeaturClassContainer可以管理IFeatureDataset中的每个要素类 IFeatureClassContainer pFeatClassContainer = (IFeatureClassContainer)pFeatureDataset; //对CAD文件中的要素进行遍历处理 for (int i = 0; i < pFeatClassContainer.ClassCount - 1; i++) { IFeatureClass pFeatClass = pFeatClassContainer.get_Class(i); if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation) //如果是注记,则添加注记层 pFeatureLayer = new CadAnnotationLayerClass(); else //如果是点、线、面,则添加要素层 pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.Name = pFeatClass.AliasName; pFeatureLayer.FeatureClass = pFeatClass; axMapControl1.Map.AddLayer(pFeatureLayer); axMapControl1.ActiveView.Refresh(); } ILayer layer = axMapControl1.get_Layer(0); axMapControl1.Extent = layer.AreaOfInterest; } }
/// <summary> /// DWG转换SHP /// </summary> /// <param name="DWGPath">CAD文件路径</param> /// <returns>返回转化好的*.shp文件路径</returns> public void ConvertToShp(string DWGPath) { if (string.IsNullOrEmpty(DWGPath)) { return; } if (File.Exists(DWGPath)) { //try //{ //string temshp = ""; IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; //IFeatureLayer pFeatureLayer; IFeatureDataset pFeatureDataset; //打开CAD数据集 pWorkspaceFactory = new CadWorkspaceFactoryClass(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(DWGPath), 0); //打开一个要素集 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(System.IO.Path.GetFileName(DWGPath)); //IFeaturClassContainer可以管理IFeatureDataset中的每个要素类 IFeatureClassContainer pFeatureClassContainer = (IFeatureClassContainer)pFeatureDataset; //当前过滤只保留面 for (int i = 0; i < pFeatureClassContainer.ClassCount; i++) { IFeatureClass pFeatureClass = pFeatureClassContainer.get_Class(i); if (pFeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon) { ExportFeatureClassToConTempShp(pFeatureClass); break; } } //return temshp; //} //catch (Exception) //{ // return ""; //} } /*****20130227杨漾(添加文件有效性判断,去掉trycatch,上层trycatch(MainForm)处理,无返回值)*****/ }
/// <summary> /// 获取CAD数据工作空间 /// </summary> /// <param name="cadPath"></param> /// <returns></returns> public static ZWorkspace GetCADWorkspcae(string cadPath) { if (string.IsNullOrWhiteSpace(cadPath) || !File.Exists(cadPath)) { throw new Exception(string.Format("CAD文件不存在,文件路径:“{0}”", cadPath)); } else { try { IWorkspaceFactory pWorkspaceFac = new CadWorkspaceFactoryClass(); IWorkspace workspace = pWorkspaceFac.OpenFromFile(cadPath, 0); return(new ZWorkspace(workspace)); } catch (Exception ex) { throw new Exception(string.Format("读取CAD文件失败,文件路径:“{0}”", cadPath), ex); } } }
//2.加载Lyr //3.加载Shp //4.打开CAD数据 4.1-ArcEngine接口,4.2-netDXF.dll--使用开源插件,主要用于导出为dxf文件 #region 加载CAD数据 /***4.1-ArcEngine接口***/ /// <summary> /// 通过指定的本地路径打开CAD所有图层数据 /// </summary> /// <param name="mapControlDefault">默认的mapcontrol最新接口</param> /// <param name="strPath">cad文件的路径-包括文件名及后缀名</param> public static void GetAllCADbyPath(IMapControlDefault mapControlDefault, string strPath) { IWorkspaceFactory pWorkspaceFactory = new CadWorkspaceFactoryClass(); string strPathWithoutFileName = Path.GetDirectoryName(strPath); string strFileName = Path.GetFileName(strPath); string strFileNameWithoutExtention = Path.GetFileNameWithoutExtension(strPath); IWorkspace pCADWorkspace = pWorkspaceFactory.OpenFromFile(strPathWithoutFileName, 0);//hWnd的参数是父窗口或应用程序的窗口 if (!(pCADWorkspace.Type == esriWorkspaceType.esriFileSystemWorkspace)) { return; } //1-pFeatureWorkspace.OpenFeatureDataset方法--推荐:可以判断注记层 GetALLCADbyWorkspace(mapControlDefault, pCADWorkspace, strFileName); //2-通过IName获取到CadDrawingDataset在cadLayer //GetAllCADbyCADLayer(mapControlDefault,strPathWithoutFileName,strFileName); //3-通过ICadDrawingWorkspace获取到CadDrawingDataset //GetALLCADLayer(mapControlDefault, pCADWorkspace, strFileName); mapControlDefault.ActiveView.Refresh(); }
public override void OnClick() { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Title = "打开CAD文件"; openFileDialog1.Filter = "CAD图形文件(*.dwg)|*.DWG"; if (openFileDialog1.ShowDialog() == DialogResult.OK && m_hookHelper.Hook is IMapControlDefault) { FileInfo fileinfo = new FileInfo(openFileDialog1.FileName); string path = fileinfo.DirectoryName; string name = fileinfo.Name; IWorkspaceFactory cadWorkSpaceFactory = new CadWorkspaceFactoryClass(); IFeatureWorkspace workspace = cadWorkSpaceFactory.OpenFromFile(path, 0) as IFeatureWorkspace; IFeatureDataset featDataset = workspace.OpenFeatureDataset(name); IFeatureClassContainer featClassContainer = featDataset as IFeatureClassContainer; IFeatureClass featClass; IFeatureLayer featLayer; for (int i = 0; i < featClassContainer.ClassCount; i++) { featClass = featClassContainer.get_Class(i); if (featClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation) { //标注类型,必须设置为单位的标注图层 featLayer = new CadAnnotationLayerClass(); } else { //点线面类型 featLayer = new FeatureLayerClass(); } featLayer.Name = featClass.AliasName; featLayer.FeatureClass = featClass; ((IMapControlDefault)m_hookHelper.Hook).Map.AddLayer((ILayer)featLayer); } } }
public List <ILayer> ReadCADLayer(List <string> filePathList) { List <ILayer> layerList = new List <ILayer>(); if (filePathList.Count == 0) { return(null); } else { foreach (string path in filePathList) { IWorkspaceFactory pWorkspaceFactory = new CadWorkspaceFactoryClass(); IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(path), 0) as IFeatureWorkspace; IFeatureDataset pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(System.IO.Path.GetFileName(path)); IFeatureClassContainer pFeatClassContainer = pFeatureDataset as IFeatureClassContainer; for (int i = 0; i < pFeatClassContainer.ClassCount - 1; i++) { IFeatureLayer pFeatureLayer; IFeatureClass pFeatClass = pFeatClassContainer.get_Class(i); if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation) { pFeatureLayer = new CadAnnotationLayerClass(); } else { pFeatureLayer = new FeatureLayerClass(); } pFeatureLayer.Name = pFeatClass.AliasName; pFeatureLayer.FeatureClass = pFeatClass; layerList.Add(pFeatureLayer as ILayer); } } return(layerList); } }
public override void OnClick() { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Title = "打开CAD文件"; openFileDialog1.Filter = "CAD图形文件(*.dwg)|*.DWG"; if (openFileDialog1.ShowDialog() == DialogResult.OK && m_hookHelper.Hook is IMapControlDefault) { FileInfo fileinfo = new FileInfo(openFileDialog1.FileName); string path = fileinfo.DirectoryName; string name = fileinfo.Name; IWorkspaceFactory cadWorkSpaceFactory = new CadWorkspaceFactoryClass(); IFeatureWorkspace workspace = cadWorkSpaceFactory.OpenFromFile(path, 0) as IFeatureWorkspace; IFeatureDataset featDataset = workspace.OpenFeatureDataset(name); IFeatureClassContainer featClassContainer = featDataset as IFeatureClassContainer; IFeatureClass featClass; IFeatureLayer featLayer; for (int i = 0; i < featClassContainer.ClassCount; i++) { featClass = featClassContainer.get_Class(i); if (featClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation) { //标注类型,必须设置为单位的标注图层 featLayer = new CadAnnotationLayerClass(); } else { //点线面类型 featLayer = new FeatureLayerClass(); } featLayer.Name = featClass.AliasName; featLayer.FeatureClass = featClass; ((IMapControlDefault)m_hookHelper.Hook).Map.AddLayer((ILayer)featLayer); } } }
private void 加载CAD数据ToolStripMenuItem_Click(object sender, EventArgs e) { IWorkspaceFactory pCadWorkspaceFactory; IWorkspace pWorkspace; ICadDrawingWorkspace pCadDrawingWorkspace; ICadDrawingDataset pCadDrawingDataset; ICadLayer pCadLayer; OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.Filter = "CAD(*.dwg)|*.dwg"; pOpenFileDialog.Title = "打开CAD数据文件"; pOpenFileDialog.ShowDialog(); string pFullPath = pOpenFileDialog.FileName; if (pFullPath == "") { return; } //获取文件名和文件路径 int pIndex = pFullPath.LastIndexOf("\\"); string pFilePath = pFullPath.Substring(0, pIndex); string pFileName = pFullPath.Substring(pIndex + 1); pCadWorkspaceFactory = new CadWorkspaceFactoryClass(); pWorkspace = pCadWorkspaceFactory.OpenFromFile(pFilePath, 0); pCadDrawingWorkspace = (ICadDrawingWorkspace)pWorkspace; //获得CAD文件的数据集 pCadDrawingDataset = pCadDrawingWorkspace.OpenCadDrawingDataset(pFileName); pCadLayer = new CadLayerClass(); pCadLayer.CadDrawingDataset = pCadDrawingDataset; axMapControl1.Map.AddLayer(pCadLayer); }
/// <summary> ///导入dxf,shp等文件 /// 日期2013-12-13 /// lntu_GISer1 /// </summary> public void ImportFile(string path, AxMapControl mapControl) { string fileName = ""; IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeatureLayer pFeatureLayer; IFeatureDataset pFeatureDataset; OpenFileDialog ofd = new OpenFileDialog(); //new一个方法 ofd.Title = "导入地图数据"; ofd.InitialDirectory = path; //定义打开的默认文件夹位置 ofd.Filter = "shp文件(*.shp)|*.shp|CAD文件(*.dwg)|*.dwg"; if (ofd.ShowDialog() == DialogResult.OK) //显示打开文件的窗口 { fileName = ofd.FileName; //获得选择的文件路径 if (fileName.Substring(fileName.Length - 4, 4).ToLower() == ".shp") { try { pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(path, 0); pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass((System.IO.Path.GetFileName(ofd.FileName)).Replace(".shp", "")); pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; mapControl.Map.AddLayer(pFeatureLayer); mapControl.ActiveView.Refresh(); } catch (Exception e) { MessageBox.Show(e.Message); } } else { if (fileName.Substring(fileName.Length - 4, 4).ToLower() == ".dwg") { try { //打开CAD数据集 pWorkspaceFactory = new CadWorkspaceFactoryClass(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(path, 0); //打开一个要素集 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset((System.IO.Path.GetFileName(ofd.FileName)).Replace(".dwg", "")); //IFeaturClassContainer可以管理IFeatureDataset中的每个要素类 IFeatureClassContainer pFeatClassContainer = (IFeatureClassContainer)pFeatureDataset; //对CAD文件中的要素进行遍历处理 for (int i = 0; i < pFeatClassContainer.ClassCount - 1; i++) { IFeatureClass pFeatClass = pFeatClassContainer.get_Class(i); if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation) { //如果是注记,则添加注记层 pFeatureLayer = new CadAnnotationLayerClass(); } else//如果是点、线、面,则添加要素层 { pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.Name = pFeatClass.AliasName; pFeatureLayer.FeatureClass = pFeatClass; mapControl.Map.AddLayer(pFeatureLayer); mapControl.ActiveView.Refresh(); } } } catch (Exception e) { MessageBox.Show(e.Message); } } } } }
/// <summary> /// 获取初始化后的各种工作空间 /// </summary> /// <param name="sSourceFile"></param> /// <param name="pSourceType"></param> /// <returns></returns> public IFeatureWorkspace GetFeatureWorkspace(string sSourceFile, WorkspaceSource pSourceType) { try { if ((string.IsNullOrEmpty(sSourceFile) | !File.Exists(sSourceFile)) & (string.IsNullOrEmpty(sSourceFile) | !Directory.Exists(sSourceFile))) { MessageBox.Show("数据文件 " + sSourceFile + " 丢失。", "打开工作空间错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(null); } IWorkspaceFactory factory = null; WorkspaceSource source = pSourceType; if (source <= WorkspaceSource.esriWSStreetMapWorkspaceFactory) { if (source < WorkspaceSource.esriWSAccessWorkspaceFactory) { goto Label_010D;//当source<1.返回空 } switch (((int)(source - 1L))) { case 0: factory = new AccessWorkspaceFactoryClass(); goto Label_0111; case 1: case 4: case 5: case 7: case 8: case 10: goto Label_010D; case 2: factory = new ArcInfoWorkspaceFactoryClass(); goto Label_0111; case 3: factory = new CadWorkspaceFactoryClass(); goto Label_0111; case 6: factory = new PCCoverageWorkspaceFactoryClass(); goto Label_0111; case 9: factory = new SDCWorkspaceFactoryClass(); goto Label_0111; case 11: factory = new ShapefileWorkspaceFactoryClass(); goto Label_0111; case 12: factory = new StreetMapWorkspaceFactoryClass() as IWorkspaceFactory; goto Label_0111; } } if ((source <= WorkspaceSource.esriWSFileGDBWorkspaceFactory) && (source >= WorkspaceSource.esriWSVpfWorkspaceFactory)) { switch (((int)(source - 0x11L))) { case 0: factory = new VpfWorkspaceFactoryClass(); goto Label_0111; case 1: factory = new FileGDBWorkspaceFactoryClass(); goto Label_0111; } } Label_010D: return(null);//返回空 Label_0111: if (!factory.IsWorkspace(sSourceFile)) { return(null); } return(factory.OpenFromFile(sSourceFile, 0) as IFeatureWorkspace); } catch (Exception exception) { this.mErrOpt.ErrorOperate(this.mSubSysName, "FunFactory.WorkspaceFun", "GetFeatureWorkspace", exception.GetHashCode().ToString(), exception.Source, exception.Message, "", "", ""); return(null); } }
/// <summary> ///导入dxf,shp等文件 /// 日期2013-12-13 /// lntu_GISer1 /// </summary> public void ImportFile(string path,AxMapControl mapControl) { string fileName = ""; IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeatureLayer pFeatureLayer; IFeatureDataset pFeatureDataset; OpenFileDialog ofd = new OpenFileDialog(); //new一个方法 ofd.Title = "导入地图数据"; ofd.InitialDirectory = path; //定义打开的默认文件夹位置 ofd.Filter = "shp文件(*.shp)|*.shp|CAD文件(*.dwg)|*.dwg"; if (ofd.ShowDialog() == DialogResult.OK) //显示打开文件的窗口 { fileName = ofd.FileName; //获得选择的文件路径 if (fileName.Substring(fileName.Length - 4, 4).ToLower() == ".shp") { try { pWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(path, 0); pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass((System.IO.Path.GetFileName(ofd.FileName)).Replace(".shp", "")); pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; mapControl.Map.AddLayer(pFeatureLayer); mapControl.ActiveView.Refresh(); } catch (Exception e) { MessageBox.Show(e.Message); } } else { if (fileName.Substring(fileName.Length -4, 4).ToLower() == ".dwg") { try { //打开CAD数据集 pWorkspaceFactory = new CadWorkspaceFactoryClass(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(path, 0); //打开一个要素集 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset((System.IO.Path.GetFileName(ofd.FileName)).Replace(".dwg", "")); //IFeaturClassContainer可以管理IFeatureDataset中的每个要素类 IFeatureClassContainer pFeatClassContainer = (IFeatureClassContainer)pFeatureDataset; //对CAD文件中的要素进行遍历处理 for (int i = 0; i < pFeatClassContainer.ClassCount - 1; i++) { IFeatureClass pFeatClass = pFeatClassContainer.get_Class(i); if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation) { //如果是注记,则添加注记层 pFeatureLayer = new CadAnnotationLayerClass(); } else//如果是点、线、面,则添加要素层 { pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.Name = pFeatClass.AliasName; pFeatureLayer.FeatureClass = pFeatClass; mapControl.Map.AddLayer(pFeatureLayer); mapControl.ActiveView.Refresh(); } } } catch(Exception e) { MessageBox.Show(e.Message); } } } } }
/// <summary> /// Opens the workspace. /// </summary> /// <param name="sFilePath">The s file path.</param> /// <param name="type">The type.</param> /// <returns>IWorkspace.</returns> public static IWorkspace OpenWorkspace(string sFilePath, DataType type) { IWorkspace result; try { sFilePath = sFilePath.TrimEnd(new char[] { '\\' }); IWorkspaceFactory workspaceFactory = null; if (type <= DataType.sde) { switch (type) { case DataType.shp: workspaceFactory = new ShapefileWorkspaceFactoryClass(); //关闭资源锁定 IWorkspaceFactoryLockControl ipWsFactoryLock = (IWorkspaceFactoryLockControl)workspaceFactory; if (ipWsFactoryLock.SchemaLockingEnabled) { ipWsFactoryLock.DisableSchemaLocking(); } break; case DataType.mdb: workspaceFactory = new AccessWorkspaceFactoryClass(); break; case (DataType)3: break; case DataType.gdb: workspaceFactory = new FileGDBWorkspaceFactoryClass(); break; default: if (type == DataType.sde) { workspaceFactory = new SdeWorkspaceFactoryClass(); } break; } } else if (type != DataType.cad) { if (type != DataType.raster) { if (type == DataType.coverage) { workspaceFactory = new ArcInfoWorkspaceFactoryClass(); } } else { workspaceFactory = new RasterWorkspaceFactoryClass(); } } else { workspaceFactory = new CadWorkspaceFactoryClass(); } result = workspaceFactory.OpenFromFile(sFilePath, 0); } catch { result = null; } return(result); }
private void btnAddCadAsFeat_Click(object sender, EventArgs e) { this.openFileDialog.Filter = "CAD文件(*.dwg)|*.dwg"; this.openFileDialog.Title = "请选择CAD文件"; if (this.openFileDialog.ShowDialog() == DialogResult.OK) { Application.DoEvents(); try { IWorkspaceFactory pCADWorksapceFactory; pCADWorksapceFactory = new CadWorkspaceFactoryClass(); IFeatureWorkspace pFeatureWorkspace; pFeatureWorkspace = pCADWorksapceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(this.openFileDialog.FileName), 0) as IFeatureWorkspace; IFeatureDataset pFeatureDataset; pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(System.IO.Path.GetFileName(this.openFileDialog.FileName)); IFeatureClassContainer pFeatureClassContainer; pFeatureClassContainer = pFeatureDataset as IFeatureClassContainer; IFeatureClass pFeatureClass; IFeatureLayer pFeatureLayer; int i; for (i = 0; i <= pFeatureClassContainer.ClassCount - 1; i++) { pFeatureClass = pFeatureClassContainer.get_Class(i); if (pFeatureClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation) { pFeatureLayer = new CadAnnotationLayerClass(); } else { pFeatureLayer = new FeatureLayerClass(); } pFeatureLayer.Name = pFeatureClass.AliasName; pFeatureLayer.FeatureClass = pFeatureClass; this.mainMapControl.AddLayer(pFeatureLayer); this.EagleaxMapControl.AddLayer(pFeatureLayer); } this.EagleaxMapControl.Extent = this.mainMapControl.FullExtent; } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
private void btnAddCadAsDraw_Click(object sender, EventArgs e) { this.openFileDialog.Filter = "CAD文件(*.dwg)|*.dwg"; this.openFileDialog.Title = "请选择CAD文件"; if (this.openFileDialog.ShowDialog() == DialogResult.OK) { Application.DoEvents(); try { IWorkspaceFactory pCADWorksapceFactory; pCADWorksapceFactory = new CadWorkspaceFactoryClass(); ICadDrawingWorkspace pCadDrawingWorkspace; pCadDrawingWorkspace = pCADWorksapceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(this.openFileDialog.FileName), 0) as ICadDrawingWorkspace; ICadDrawingDataset pCadDrawingDataset; pCadDrawingDataset = pCadDrawingWorkspace.OpenCadDrawingDataset(System.IO.Path.GetFileName(this.openFileDialog.FileName)); ICadLayer pCadLayer; pCadLayer = new CadLayerClass(); pCadLayer.CadDrawingDataset = pCadDrawingDataset; pCadLayer.Name = System.IO.Path.GetFileName(this.openFileDialog.FileName); this.mainMapControl.AddLayer(pCadLayer); this.EagleaxMapControl.AddLayer(pCadLayer); this.EagleaxMapControl.Extent = this.mainMapControl.FullExtent; } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
/// <summary> /// DWG转换SHP /// </summary> /// <param name="DWGPath">CAD文件路径</param> /// <returns>返回转化好的*.shp文件路径</returns> public void ConvertToShp(string DWGPath) { if (string.IsNullOrEmpty(DWGPath)) { return; } if (File.Exists(DWGPath)) { //try //{ //string temshp = ""; IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; //IFeatureLayer pFeatureLayer; IFeatureDataset pFeatureDataset; //打开CAD数据集 pWorkspaceFactory = new CadWorkspaceFactoryClass(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(DWGPath), 0); //打开一个要素集 pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(System.IO.Path.GetFileName(DWGPath)); //IFeaturClassContainer可以管理IFeatureDataset中的每个要素类 IFeatureClassContainer pFeatureClassContainer = (IFeatureClassContainer)pFeatureDataset; //当前过滤只保留面 for (int i = 0; i < pFeatureClassContainer.ClassCount; i++) { IFeatureClass pFeatureClass = pFeatureClassContainer.get_Class(i); if (pFeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon) { ExportFeatureClassToConTempShp(pFeatureClass); break; } } //return temshp; //} //catch (Exception) //{ // return ""; //} } /*****20130227杨漾(添加文件有效性判断,去掉trycatch,上层trycatch(MainForm)处理,无返回值)*****/ }
private void bubbleBtnAddCAD_Click(object sender, DevComponents.DotNetBar.ClickEventArgs e) { this.openFileDialog.Filter = "DWG文件|*.dwg"; this.openFileDialog.Title = "请选择CAD文件"; if (this.openFileDialog.ShowDialog() == DialogResult.OK) { string dirction = System.IO.Path.GetDirectoryName(this.openFileDialog.FileName); //MessageBox.Show(System.IO.Path.GetDirectoryName(this.openFileDialog.FileName) + "\n" + // System.IO.Path.GetFileName(this.openFileDialog.FileName) + "\n" + // System.IO.Path.GetFullPath(this.openFileDialog.FileName)); string file = System.IO.Path.GetFileName(this.openFileDialog.FileName); IWorkspaceFactory pWorkspaceFatory = new CadWorkspaceFactoryClass(); IWorkspace pWorkspace = pWorkspaceFatory.OpenFromFile(dirction, 0); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; IFeatureDataset pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(file); IFeatureClassContainer pFeatureClassContainer = pFeatureDataset as IFeatureClassContainer; IFeatureClass pFeatureClass; IFeatureLayer pFeatureLayer; //for (int i = 0; i < pFeatureClassContainer.ClassCount; i++) //{ // pFeatureClass = pFeatureClassContainer.get_ClassByID(i); // if (pFeatureClass.FeatureType == esriFeatureType.esriFTAnnotation) // { // pFeatureLayer = new CadAnnotationLayerClass(); // } // else // { // pFeatureLayer = new FeatureLayerClass(); // } // pFeatureLayer.Name = pFeatureClass.AliasName; // pFeatureLayer.FeatureClass = pFeatureClass; // this.mainMapControl.AddLayer(pFeatureLayer as ILayer); // this.EagleaxMapControl.AddLayer(pFeatureLayer as ILayer); //} IEnumFeatureClass pEnumFeatureClass = pFeatureClassContainer.Classes; pEnumFeatureClass.Reset(); for (pFeatureClass = pEnumFeatureClass.Next(); pFeatureClass != null; pFeatureClass = pEnumFeatureClass.Next()) { if (pFeatureClass.FeatureType == esriFeatureType.esriFTAnnotation) { pFeatureLayer = new CadAnnotationLayerClass(); } else { pFeatureLayer = new FeatureLayerClass(); } pFeatureLayer.Name = pFeatureClass.AliasName; pFeatureLayer.FeatureClass = pFeatureClass; this.mainMapControl.AddLayer(pFeatureLayer as ILayer); this.EagleaxMapControl.AddLayer(pFeatureLayer as ILayer); } this.m_controlsSynchronizer.ReplaceMap(this.mainMapControl.Map); this.EagleaxMapControl.Extent = this.EagleaxMapControl.FullExtent; this.EagleaxMapControl.Refresh(); } }