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);
//报错截图
{
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);
//报错截图
1 个回复
朱新颖
赞同来自: why小飞
2,这里类型geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryAny;不能不设置
3,还有要素数据集的空间参考是UnKnown吗?需要一致才行啊
要回复问题请先登录或注册