一共分两部分:

1.方法概述

2.示例

3.获取Feature的属性值-克服只能查询name的缺点 ,已解决

第一部分 

http://www.51csharp.net/a/GIS/2009/1104/143.html

1、Feature的概念  

   Feature是二次开发中最常用的对象,feature是featureclass中一个记录,从object中派生出来的,因此也具有属性和方法,object又是从row中派生的,所以featureclass其实一张表,featured就是表中的一条记录,feature可以保存空间数据对象,要素中的几何型体对象定义了要素的类型,它可以保存的几何型体对象有点、点集、多边形、多义线。这些都是些简单的要素对象,在有些情况下要素还可以参与拓扑、网络运算。

2、Feature相关接口

   Feature有派生出很多类,如:networkfeature、rastercatalogfeature、coverageannotationfeature、annotationfeature imensionfeature。feature的主要接口是Ifeature,其中的Extent用来返回要素对象的包络线,显示要素的空间范围;Featuretype返回要素的类型;Shape返回要素的几何型体对象;ShapeCopy得到几何型体对象的一个拷贝。

    IfeatureBuffer中的Shape得到缓冲要素的几何型体对象。

    IfeatureEdit中MoveSet、RotateSet、DeleteSet分别是移动、旋转、删除一个或者是多个要素组成的要素集上。Split主要是用来分割几何型体的,通过点分割线,通过多义线分割多边形,分割后旧的被删除,新的要素自动产生。因为每个要素都有对应的属性,要素改变了,其对应的属性也相应的要改变。
    Splitattributes就是用来分割要素属性字段中的值。该方法可以在Split方法执行后自动执行。

    IfeatureDraw中的InvalidArea属性得到一个绘画的区域。Draw在显示设备上绘制要素。

    IfeatureChanges中OriginalShape得到要素的最初几何类型,ShapeChanged指示要素的几何类型是否改变。

    IfeatureSimplify中的SimplifyGeometry按照该要素的拓扑规则进行拓扑一致。

3、Feature的编辑操作

     对Feature的编辑分为以下几个部分:

    1.新建,

    2.修改,

    3.删除。

    涉及到的接口有以下几个:IWorkspaceEdit、IFeatureClass、IFeatureCursor、IFeature。其中IWorkspaceEdit用于启动编辑以开始编辑操作,结束编辑操作以结束编辑。IFeatureClass 是数据的所在地,IFeatureCursor 是一个游标提供访问数据的接口和修改数据的接口,IFeature 是对象的代表我们要编辑的目标。 编辑的过程如下:
1.添加一个Feature
   //假设space是一个IWorkspaceEdit
   //参数表示是否需要使用Undo/Redo功能,该功能的粒度是EditOperator.
   spaceEdit.StartEditing(false);
   spaceEdit.StartEditOperator();
   //添加一个Feature
   IFeature newFea=feaClass.createFeature();
   //为Feature 添加属性设置图形
   newFea.Store();//保存属性和图形
   spaceEdit.StopEditOperator();//结束编辑操作
   //结束编辑过程
   //参数表示是否保存编辑
   spaceEdit.StopEditing(true);
2.添加多个Feature
  添加多个Feature也可以向上面一样使用多次就可以了, 当然也可以使用IFeatureCursor来添加数据。
 3.修改Feature
   添加Feature中的修改属性和图形部分,每次修改后一定要调用Store方法这样变化才可以保存下来。
 4.删除 
   IFeatureCuror的DeleteFeature方法可以用来删除当前的Feature 。  
  注意事项
  1.不能设置Feature的OID
  2.不能设置Feature的Area
  3.不能设置Feature的Lenght 

 

 第二部分 

http://hi.baidu.com/am_lijunli/blog/item/8cec9e2b3cc5629c023bf6df.html 

     //IWorkspaceEdit Example  

    //e.g., nameOfFeatureClass = "States"
    //on ArcSDE use ISqlSyntax::QualifyTableName for fully qualified table names.
    public void IWorkspaceEdit_Example(IWorkspace workspace, string nameOfFeatureClass)
    {
        IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;
        IFeatureClass featureClass =featureWorkspace.OpenFeatureClass(nameOfFeatureClass);
        IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
        //start editing with undo redo functionality
        workspaceEdit.StartEditing(true);
        workspaceEdit.StartEditOperation();
        IFeature feature = featureClass.GetFeature(1);
        feature.Delete();
        workspaceEdit.StopEditOperation();
        Console.WriteLine("Would you like to undo your operation? Y or N");
        string response = Console.ReadLine();
        if(response.ToUpper() == "Y")
        {
            workspaceEdit.UndoEditOperation();
        }
        bool hasEdits = false;
        workspaceEdit.HasEdits(ref hasEdits);
        if (hasEdits)
        {
            Console.WriteLine("Would you like to save your edits? Y or N");
            response = Console.ReadLine();
            if (response.ToUpper() == "Y")
            {
                workspaceEdit.StopEditing(true);
            }
            else
            {
                workspaceEdit.StopEditing(false);
            }
        }
    }

 

 第三部分 

http://bbs.esrichina-bj.cn/esri/archiver/tid-21681.html

适用于所有字段和属性:

  Feature.OID应该是可以的
  如果不行就这样:
  Dim pFields As IFields=pFeatureClass.Fields
  Dim fidIndex As Integer=pFields.FindField("FID")
  pFeature.Value(fidIndex)就是对应Feature的FID

 

 

 

 

分类:

技术点:

相关文章: