在GDB及文件夹下建立FeatureClass的区别及遇到的问题总结

1)打开工作空间:

   文件夹下:

 

            IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();

           IFeatureWorkspace pFWS = (IFeatureWorkspace)pWSF.OpenFromFile(folder, 0);

 

  GDB:

            IWorkspaceFactory pWSF = new AccessWorkspaceFactoryClass();

            IWorkspace workspace = pWSF.OpenFromFile(outfileNamePath, 0);

2) 建立字段

     文件夹下独立的shapefile文件:

 

         IFields pFields = new FieldsClass();

            IFieldsEdit pFieldsEdit;

           pFieldsEdit = (IFieldsEdit)pFields;

            IField pField = new FieldClass();

            IFieldEdit pFieldEdit = (IFieldEdit)pField;

            pFieldEdit.Name_2 = "Shape";

         pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

 

            IGeometryDef pGeometryDef = new GeometryDefClass();

            IGeometryDefEdit pGDefEdit = (IGeometryDefEdit)pGeometryDef;

           pGDefEdit.HasZ_2 = true;

          pGDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;

           pGDefEdit.SpatialReference_2 =SpatialReference;

           pFieldEdit.GeometryDef_2 = pGeometryDef;

            pFieldsEdit.AddField(pField);

          无需单独建立oid字段,它会自动生成FID字段。

在GDB下:

 

            IFields fields = new FieldsClass(); 

            IFieldsEdit fieldsEdit = (IFieldsEdit)fields;

            // Add an object ID field to the fields collection. This is mandatory for feature classes. 这是在GDB中是必须,否则会出现“这个集合中找不到此项目”的错误,还有另一种自动生成的方法,可以参考 IFeatureWorkspace.CreateFeatureClass Example 

如下图所示:

 

         

 

            IField oidField = new FieldClass();  

            IFieldEdit oidFieldEdit = (IFieldEdit)oidField;  

            oidFieldEdit.Name_2 = "OID"; 

            oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;  

            fieldsEdit.AddField(oidField);

            // Create a geometry definition (and spatial reference) for the feature class.  

            IGeometryDef geometryDef = new GeometryDefClass();  

            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef; 

            geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;

            geometryDefEdit.HasZ_2 = true;//使得Z值生效,这个字段设为true时,在shapefile文件中没有什么问题,但是,在GDB中会导致

           //出现这个集合中找不到此项目和The Z domain on the spatial reference is not set or invalid两个错误,解决办法加上红色语句

            geometryDefEdit.HasM_2 = false;

            geometryDefEdit.SpatialReference_2 = SpatialReference; ;

           geometryDefEdit.SpatialReference.SetZDomain(-1000, 60000);//(设定 Z domain)

 

            // Add a geometry field to the fields collection. This is where the geometry definition is applied.

            IField geometryField = new FieldClass(); 

            IFieldEdit geometryFieldEdit = (IFieldEdit)geometryField; 

            geometryFieldEdit.Name_2 = "Shape";  

            geometryFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; 

            geometryFieldEdit.GeometryDef_2 = geometryDef; 

            fieldsEdit.AddField(geometryField);

            // Create a text field called "Name" for the fields collection.

            IField nameField = new FieldClass(); 

            IFieldEdit nameFieldEdit = (IFieldEdit)nameField; 

            nameFieldEdit.Name_2 = "Name";  

            nameFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;

            nameFieldEdit.Length_2 = 20; 

            fieldsEdit.AddField(nameField);

其他如基本一致。

posted @ 2012-04-06 09:41  LinHugh  阅读(1080)  评论(0编辑  收藏  举报