ArcGis featureLayer中添加字段

featureLayer中添加字段

这是我2010年11月份写的东东,现在拿出来给大家分享一下,这几个方法都是抽象出来的,可以拿过来直接使用。

说明一下:这些都是.net平台,VS2008+ArcGis9.3调试通过的

//检查fields是否有效


public IFields ValidateFieldsForWorkspace(IFields fields, IWorkspace workspace)
{
    // Create a new field checker.
    IFieldChecker fieldChecker = new FieldCheckerClass();
    fieldChecker.ValidateWorkspace = workspace;

    // Validate the fields.
    IEnumFieldError enumFieldError = null;
    IFields validatedFields = null;
    fieldChecker.Validate(fields, out enumFieldError, out validatedFields);

    // Display the field errors.
    IFieldError fieldError = null;
    enumFieldError.Reset();
    while ((fieldError = enumFieldError.Next()) != null)
    {
        IField errorField = fields.get_Field(fieldError.FieldIndex);
        Console.WriteLine("Field '{0}': Error '{1}'", errorField.Name,
            fieldError.FieldError);
    }

    // Return the validated fields.
    return validatedFields;
}





//为要素类创建fields



public IFields CreateFieldsCollectionForFeatureClass(ISpatialReference
    spatialReference)
{
    // Use the feature class description to return the required fields in a fields collection.
    IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
    IObjectClassDescription cDesc = (IObjectClassDescription)fcDesc;

    // Create the fields using the required fields method.
    IFields fields = ocDesc.RequiredFields;

    // Locate the shape field with the name from the feature class description.
    int shapeFieldIndex = fields.FindField(fcDesc.ShapeFieldName);
    IField shapeField = fields.get_Field(shapeFieldIndex);

    // Modify the GeometryDef object before using the fields collection to create a new feature class.
    IGeometryDef geometryDef = shapeField.GeometryDef;
    IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;

    // Alter the feature class geometry type to lines (default is polygons).
    geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
    geometryDefEdit.HasM_2 = true;
    geometryDefEdit.GridCount_2 = 1;

    // Set the first grid size to zero and allow ArcGIS to determine a valid grid size.
    geometryDefEdit.set_GridSize(0, 0);
    geometryDefEdit.SpatialReference_2 = spatialReference;

    // Because the fields collection already exists, the AddField method on the IFieldsEdit interface
    // will be used to add a field that is not required to the fields collection.
    IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
    IField incomeField = new FieldClass();
    IFieldEdit incomeFieldEdit = (IFieldEdit)incomeField;

    // Create a user-defined double field.
    incomeFieldEdit.AliasName_2 = "Average income for 1999-2000";
    incomeFieldEdit.Editable_2 = true;
    incomeFieldEdit.IsNullable_2 = false;
    incomeFieldEdit.Name_2 = "average_income";
    incomeFieldEdit.Precision_2 = 2;
    incomeFieldEdit.Scale_2 = 5;
    incomeFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
    fieldsEdit.AddField(incomeField);

    return fields;
}





//为table创建fields



public IFields CreateFieldsCollectionForTable()
{
    // Create a new fields collection.
    IFields fields = new FieldsClass();

    // Cast to IFieldsEdit to modify the properties of the fields collection.
    IFieldsEdit fieldsEdit = (IFieldsEdit)fields;

    // Set the number of fields the collection will contain.
    fieldsEdit.FieldCount_2 = 2;

    // Create the ObjectID field.
    IField idField = new FieldClass();

    // Cast to IFieldEdit to modify the properties of the new field.
    IFieldEdit idFieldEdit = (IFieldEdit)oidField;
    oidFieldEdit.Name_2 = "ObjectID";
    oidFieldEdit.AliasName_2 = "FID";
    oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;

    // Add the new field to the fields collection.
    fieldsEdit.set_Field(0, oidField);

    // Create the text field.
    IField textField = new FieldClass();
    IFieldEdit textFieldEdit = (IFieldEdit)textField;
    textFieldEdit.Length_2 = 30;
        // Only string fields require that you set the length.
    textFieldEdit.Name_2 = "Owner";
    textFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;

    // Add the new field to the fields collection.
    fieldsEdit.set_Field(1, textField);

    return fields;
}






//向要素类添加fields字段


public void AddFieldToFeatureClass(IFeatureClass featureClass, IField field)
{
    ISchemaLock schemaLock = (ISchemaLock)featureClass;

    try
    {
        // A try block is necessary, as an exclusive lock may not be available.
        schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);

        // Add the field.
        featureClass.AddField(field);
    }
    catch (Exception exc)
    {
        // Handle this in a way appropriate to your application.
        Console.WriteLine(exc.Message);
    }
    finally
    {
        // Set the lock to shared, whether or not an error occurred.
        schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值