judsondjq
路人甲
路人甲
  • 注册日期2008-01-31
  • 发帖数4
  • QQ
  • 铜币119枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1236回复:0

[求助]有关dwg转shp格式的问题!!!

楼主#
更多 发布于:2008-06-27 10:48
<P>一下代码是我写的cad转化为shp格式的相关代码。但是运行到红色那行是就报错。不知道是什么地方错了。或者说是我的代码本身有问题。请各位高手能给予指点啊!!谢谢了!!<BR>        private void button1_Click(object sender, EventArgs e)<BR>        {<BR>            OpenFileDialog openFileDialog1 = new OpenFileDialog();<BR>            openFileDialog1.Filter = "CAD file(*.DWG)|*.DWG|CAD DGN file(*.DGN)|*.DGN|CAD DXF file(*.DXF)|*.DXF";<BR>            string FilePath;<BR>            string FileName = string.Empty;<BR>            if (openFileDialog1.ShowDialog() == DialogResult.OK)<BR>            {<BR>                FileName = openFileDialog1.FileName;<BR>            }<BR>            if (FileName.Length == 0)<BR>            {<BR>                this.Close();<BR>            }<BR>            else<BR>            {<BR>                string strfile = FileName.Substring(FileName.LastIndexOf("\\") + 1);<BR>                <BR>                FilePath = FileName.Substring(0, FileName.Length - strfile.Length - 1);<BR>                //IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();<BR>                IWorkspaceFactory pWorkspaceFactory = new CadWorkspaceFactoryClass();<BR>                IFeatureWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(FilePath, 0) as IFeatureWorkspace;<BR>                IFeatureDataset pFeatureDataset = pWorkspace.OpenFeatureDataset(strfile);<BR>                IFeatureClassContainer pFeatureClassContainer = pFeatureDataset as IFeatureClassContainer;<BR>                IFeatureClass pFeatureClass;<BR>                IFeatureLayer pFeatureLayer;</P>
<P>                //IDataset pDataset;<BR>                for (int i = 0; i < pFeatureClassContainer.ClassCount; i++)<BR>                {<BR>                    pFeatureClass = pFeatureClassContainer.get_Class(i);<BR>                    if (pFeatureClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation)<BR>                    {<BR>                        pFeatureLayer = new CadAnnotationLayerClass();<BR>                    }<BR>                    else<BR>                    {<BR>                        pFeatureLayer = new FeatureLayerClass();<BR>                    }</P>
<P>                    pFeatureLayer.Name = pFeatureClass.AliasName;<BR>                    pFeatureLayer.FeatureClass = pFeatureClass;<BR>                    string filepath = @"D:\shape";</P>
<P>                    IQueryFilter pFilter = new QueryFilterClass();<BR>                    IDataset pDataset = (IDataset)pWorkspace;<BR>                    IWorkspaceName sourceWorkspaceName = (IWorkspaceName)pDataset.FullName;<BR>                    IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();<BR>                    IDatasetName pDatasetName = (IDatasetName)sourceFeatureClassName;<BR>                    pDatasetName.Name = pFeatureClass.AliasName;                    <BR>                    pDatasetName.WorkspaceName = sourceWorkspaceName;<BR>                    IWorkspaceFactory pShapefileFactory = new ShapefileWorkspaceFactoryClass();<BR>                   <FONT color=#ff3300> IWorkspace targetWorkspace = pShapefileFactory.OpenFromFile(filepath, 0);<BR></FONT>                    IDataset targetWorkspaceDataset = (IDataset)targetWorkspace;<BR>                    IWorkspaceName targetWorlspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName;<BR>                    IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();<BR>                    IDatasetName targetDatasetName = (IDatasetName)targetWorlspaceName;<BR>                    targetDatasetName.WorkspaceName = targetWorlspaceName;<BR>                    targetDatasetName.Name = pFeatureClass.AliasName;<BR>                    ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName;<BR>                    IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open();<BR>                    IFieldChecker pFieldChecker = new FieldCheckerClass();<BR>                    IFields targetFeatureClassFields;<BR>                    IFields sourceFeatureClassFields = pFeatureClass.Fields;<BR>                    IEnumFieldError pEnumFieldError;<BR>                    pFieldChecker.InputWorkspace = (IWorkspace)pWorkspace;<BR>                    pFieldChecker.ValidateWorkspace = targetWorkspace;<BR>                    pFieldChecker.Validate(sourceFeatureClassFields, out pEnumFieldError, out targetFeatureClassFields);<BR>                    IField geometryField;<BR>                    for (int j = 0; j < targetFeatureClassFields.FieldCount; j++)<BR>                    {<BR>                        if (targetFeatureClassFields.get_Field(j).Type == esriFieldType.esriFieldTypeGeometry)<BR>                        {<BR>                            geometryField = targetFeatureClassFields.get_Field(j);<BR>                            IGeometryDef geometryDef = geometryField.GeometryDef;<BR>                            IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef;<BR>                            targetFCGeoDefEdit.GridCount_2 = 1;<BR>                            targetFCGeoDefEdit.set_GridSize(0, 0);<BR>                            targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference;<BR>                            IQueryFilter queryFilter = new QueryFilterClass();<BR>                            queryFilter.WhereClause = "";<BR>                            IFeatureDataConverter fctofc = new FeatureDataConverterClass();<BR>                            IEnumInvalidObject enumerrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 100, 0);<BR>                            break;<BR>                        }<BR>                    }<BR>                }<BR>            }<BR>        }</P>
喜欢0 评分0
游客

返回顶部