|
阅读:1236回复:0
[求助]有关dwg转shp格式的问题!!!
<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> |
|