AE中在要素集里(FeatureDataset)生成要素类(FeatureClass)时报错,许可已经授权了,请问是什么原因呢?

//生成要素类public IFeatureClass CreateFeatureClass(IFeatureDataset featureDataset, String featureClassName, IFields fields)
        {
            IFeatureClass featureClass = null;
            // assign the class id value if not assigned
            ESRI.ArcGIS.esriSystem.UID CLSID = null;
            ESRI.ArcGIS.esriSystem.UID CLSEXT = null;
            string strConfigKeyword = "";
            if (CLSID == null)
            {
                CLSID = new ESRI.ArcGIS.esriSystem.UIDClass();
                CLSID.Value = "esriGeoDatabase.Feature";
            }

            System.String strShapeField = "";

            // locate the shape field
            for (Int32 j = 0; j < fields.FieldCount; j++)
            {
                esriFieldType dd = fields.get_Field(j).Type;
                if (dd == esriFieldType.esriFieldTypeGeometry)
                {
                    strShapeField = fields.get_Field(j).Name;
                }
            }

            // finally create and return the feature class
            if (featureDataset != null)
            {
                featureClass = featureDataset.CreateFeatureClass(featureClassName, fields, CLSID, CLSEXT, esriFeatureType.esriFTSimple, strShapeField, strConfigKeyword);
            }

            return featureClass;
        }
//获取属性字段
public IFields CreateFields()
        {
            IField oField = new FieldClass();
            IFieldEdit oFieldEdit = oField as IFieldEdit;
            IFields oFields = new FieldsClass();
            IFieldsEdit oFieldsEdit = oFields as IFieldsEdit;
            oFieldEdit.Name_2 = "ObjectID";
            oFieldEdit.AliasName_2 = "FID";
            oFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
            oFieldsEdit.AddField(oField);

            oField = new FieldClass();
            oFieldEdit = oField as IFieldEdit;
            oFieldEdit.Name_2 = "Gis编号";
            oFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            oFieldsEdit.AddField(oField);

            oField = new FieldClass();
            oFieldEdit = oField as IFieldEdit;
            oFieldEdit.Name_2 = "Label";
            oFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            oFieldsEdit.AddField(oField);

            oField = new FieldClass();
            oFieldEdit = oField as IFieldEdit;
            oFieldEdit.Name_2 = "ElementId";
            oFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
            oFieldsEdit.AddField(oField);

            oField = new FieldClass();
            oFieldEdit = oField as IFieldEdit;
            oFieldEdit.Name_2 = "Shape";
            oFieldEdit.IsNullable_2 = true;
            oFieldEdit.Required_2 = true;
            IGeometryDef geometryDef = new GeometryDefClass();
            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
            geometryDef = new GeometryDefClass();
            geometryDefEdit = (IGeometryDefEdit)geometryDef;
            geometryDefEdit.AvgNumPoints_2 = 1;
            geometryDefEdit.GridCount_2 = 0;
            geometryDefEdit.HasM_2 = true;
            geometryDefEdit.HasZ_2 = false;
            oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
            geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryAny;
            //Generate a default Spatial Reference
            ISpatialReference pSR = new UnknownCoordinateSystemClass() as ISpatialReference;
            pSR.SetDomain(0, 999999999999, 0, 999999999999);
            geometryDefEdit.SpatialReference_2 = pSR;
            oFieldEdit.GeometryDef_2 = (GeometryDef)geometryDefEdit;
            oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
            oFieldsEdit.AddField(oField);

            return oFields;
        }
//下面是调用以上两个方法的方法
IFields pFields = bf.CreateFields();
                IFeatureDataset pFeatDs = bf.getDataset("sde.DBO." + SQLDataAccess.Database) as IFeatureDataset;//获取SDE空间要素集
                pFeatCls = bf.CreateFeatureClass(pFeatDs, str_Drawing, pFields);
//报错截图
11.png
已邀请:

朱新颖

赞同来自: why小飞

1,是使用的EngineGeoDB许可吗?
2,这里类型geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryAny;不能不设置
3,还有要素数据集的空间参考是UnKnown吗?需要一致才行啊

要回复问题请先登录注册