zoukankan      html  css  js  c++  java
  • ArcGIS中对Feature的操作

     一共分两部分:

    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

     

     

     

     

  • 相关阅读:
    Quartz中时间表达式的设置-----corn表达式
    怎样使用SetTimer MFC 够具体
    MySQL server version for the right syntax to use near 'type=InnoDB' at line 1
    Oracle 11g client的安装和配置。
    VC++ CopyFile函数使用方法
    怎样将程序猿写出来的程序打包成安装包(最简单的)
    一分钟制作U盘版BT3
    xml文件格式例如以下
    关于概率性事件的产品性能和客户体验讨论
    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
  • 原文地址:https://www.cnblogs.com/hl3292/p/1838367.html
Copyright © 2011-2022 走看看