要素、要素类
要素(feature):就是能代表物理实体的,具有几何形状的地图元素。地图中主要包括点,线,面三要素。是空间数据中最基本,不可分割的单位。每个要素和属性表中记录(行)存在一一对应关系。主要用来查询,分析。
要素类(feature class):具有相同几何特征(形状)的同类要素的集合(即点图层中的点,线图层中的线,面图层中的面)。一个要素类一般和一个属性表相对应。事实上,某一要素或者是某类要素是通过TOC中的图层来表现的。
1、使用AE创建要素过程
打开编辑空间(IWorkspaceEdit) 创建Feature(FeatureClass.CreateFeature()) 设置Feature的属性 保存Feature(Feature.Store()) 关闭编辑空间
2、对要素(Feature)的任何编辑操作都必须在“编辑空间打开的阶段”完成
3、如果打开了编辑状态,就一定要调用feature.store,或则调用discard。不然会有时抛出异常。
3、FeatureClass实际上都相当于一个容器,真正的实体分别是Feature(一些形状,比如点,线或者面等),它就是这个容器中的一个记录,就如同二维表中的某一行一样,代表了具体的实体;使用IFeatureClass的CreateFeature方法和ITable的CreateRow方法效果一样,只不过CreateFeature方法返回的是CreateRow方法创建的Feature的引用。
4、Shapefile文件是描述空间数据的几何和属性特征的非拓扑实体矢量数据结构的一种格式。一个Shapefile文件包括一个主文件(.shp),一个索引文件(.shx)和一个dBASE表文件(*.dbf),要注意的是Shapefile只能存储一种要素(点状或线状或面状)。而gdb里边可以存放很多要素集(feature dataset),每个要素集里边又能存放很多要素类。
5、Featureclass是个模型上的称呼,而shapefile做为一种文件格式,是Featureclass这种模型的表现形式。
6、图层(layer) 是依附于地图(Map)而存在的一个概念,FeatureClass是一系列Feature(形状)的集合,是一个存储数据的容器,当我们将FeatureClass放到Map中就成图层了,但如果要将数据存储到硬盘上怎么办呢??不能存储为Layer吧??这时我们是将它存在Shapefile文件中,像上面说的Shapefile是外在表现形式,是具体的,而像Featureclass、Layer之类的是抽象的概念。
数据容器
图层(layer):每一图层是由同一类型的要素组成,其数据来自某个要素类。因此图层可以看成是要素类在TOC中的表现形式。其对应的表存放了该图层中所有要素对应的记录。
表(table/attribute table):由若干行和列组成。列表示属性或者字段,行代表记录。当然也有和图层或要素不直接对应,相对独立的属性表,在需要的时候和其他的表建立连接,实现表的扩展。其中的记录对应了 数据框(data frame):将多个图层,属性表聚集在一起。框架有图层的名称,图例,说明,当前显示状态和独立的属性表等等。 数据源(data source):不经转换而被arcmap直接使用的空间数据,属性数据。各种要素类和表,是最常用的数据源。 图形元素(element):使用drawing工具条画出的图形元素。其存放在地图文档中,不能被别的文档使用,与属性表无关联。要注意与feature是不同的概念。Feature与表有关联,可以被别的文档使用。该元素仅用来辅助表达,注记。 地理数据库(geodatabase):包括要素类和要素集,是Arcgis应用程序用来管理地理信息的。它实现了一个面向对象的Gis数据模型,地理数据库将每一个要素以行的形式存储在表中,要素的段中,属性数据存储在其他字段中,每个表存储一个要素。除了存储矢量数据外,地理数据库还可以存储栅格数据,数据表,以及其他数据表的参考。可以将所有的空间数据存储在一个地方。地理数据库的优点是其中的要素含有内建行外,要素完全存储在单一的数据库中,数据量大的地理数据库可以实现不分块,无缝存储。
数据模型:ArcGis可以用多种格式来管理和存储地理数据。ArcGis采用的三种基本数据格式有:vector矢量,raster栅格,不规则三角网 tin。此外也可以将表格数据导入到ArcGis中。可以用三种不同的矢量模型表示地理数据要素,分别是 shapefile, coverage和地理数据库(geodatabase)。栅格数据包括影像和格网。其中矢量模型适合于表达离散要素,栅格模型适合表达连续要素。 Coverages:是一种传统的格式,可以用于进行复杂的地理处理、建立高质量的地理数据集和进行复杂的空间分析。Coverages包括三种要素类型:基本(primary)要素、复合(composite)要素和辅助(secondary)要素。Coverages的基本要素有标注点(label point)、弧(arc)和多边形(polygon)。复合要素有路径(route)、段(section)和区域(region),它们是建立在基本要素之上的。 Coverages也可能包括辅助要素:控制点(tics)、链接(links)和注记(annotation)。控制点和链接不代表具体的地理实体,而是用于管理Coverage。注记用来为地图上的地理要素提供文本。拓扑相关
拓扑(topoloyg):地理要素的相互连接和扩展。是明确定义和使用要素几何中内在空间关系的过程。Coverage有上中拓扑关系:连通性(conectivity),区域定义(area defination),邻接性(contiguity).coverage通过记录一列构成每个多边形边界的相连接的弧来定义区域(area),成为多边形-弧拓扑。Coverage通过记录一列弧的左边多边形和右边多边形来存储邻接信息,成为左-右拓扑。
悬结点(Dangle Node):在拓扑结构中,仅和一个线要素相连,孤立的结点。 伪结点(Pseudo Node):在拓扑结构中,两个线要素相连,共享一个结点。 普通结点(Node):在拓扑结构中,三个或者三个以上的线要素交汇,共享的一个结点。 脏区(Dirty Area):建立拓扑关系后,又被编辑过的空间范围,该范围很可能存在不符合拓扑规则的要素。IMap、ILayer、IFeatureLayer和IFeatureClass关系
IMap :这相对来说比较好理解,Map就是许多图层的集合,就像 ArcMap 中的 MXD文档一样,可以包括许多图层 Layer.
ILayer :Layer 是图层对象,是数据的外壳,必须建立在数据的基础上才有意义。在 ArcMap 中,它可以表示任何图层,例如要素图层( IFeatureLayer ),栅格图层( IRasterLayer ),图形图层集合( ICompositeGraphicsLayer ) IFeatureLayer :继承自ILayer,提供了访问基于矢量数据图层的属性和方法,图层的数据可以是Geodatabase、Shapefile或Coverage数据:如果使用FeatureLayer组件类,还可以通过IGeoFeatureLayer接口获得更多的属性和方法。提供了控制要素图层的属性和方法,例如标记属性( AnnotationProperties )、注记显示设置( DisplayAnnotation ) IFeatureClass :获取和设置要素类属性的主要接口。如获取要素类的类型,得到满足某个查询条件的要素个数,或在要素类中创建一个新的功能。 其中IMap是由多个ILayer构成的,而IFeatureLayer是ILayer的一个子类,IFeatureClass是IFeatureLayer的一个属性。这里再增加一个 IFeature 接口,IFeature是 FeatureClass 的一部分,他们之间的关系就相当于 IRow 和 ITable之间的关系一样。
IFeatureLayer
概念
- 用于管理要素图层的数据源,即要素类(FeatureClass)。
- 继承自ILayer,提供了访问基于矢量数据图层的属性和方法,图层的数据可以是Geodatabase、Shapefile或Coverage数据。如果使用FeatureLayer组件类,还可以通过IGeoFeatureLayer 接口获得更多的属性和方法。提供了控制要素图层的属性和方法,例如标记属性( AnnotationProperties )、注记显示设置( DisplayAnnotation )
理解
IFeatureLayer是 要素类(IFeatureClass)的在 MapControl 中图形表现的载体。即 要素类(IFeatureClass)的数据要通过 IFeatureLayer 才能可视化图形。
IFeatureDataset
IFeatureClass
概念:( 要素类)是用来存储空间数据的对象类,是ObjectClass 的扩展。 在一个要素类中的所有的要素都使用同样的字段结构,要素类与表,对象类最大的区别是它有一个几何字段,即Shape 字段,用于存储要素的几何信息,这样使得用户可以在地图上看到一个要素的形状和位置。 在地图上,要素类是离散对象,” 小” 对象(small objects) 表示为点要素,” 长” 对象表示为线要素,” 大” 对象表示为多边形要素.( 不要老往Shapefile 上面想) ,不包含Raster 。
理解:其实 FeatureClass 也是一张表,但是它比表(ITable)的功能强大,就是能操作图形空间。当只操作属性数据的时候,使用 ITable 操作;当操作图形的时候,使用 IFeatureClass
IFeature
概念
IFeature是二次开发中最常用的对象,IFeature 是 IFeatureclass 中一个记录,从object中派生出来的,因此也具有属性和方法,object又是从row中派生的,所以featureclass其实一张表,feature就是表中的一条记录,feature可以保存空间数据对象,要素中的几何型体对象定义了要素的类型,它可以保存的几何型体对象有点、点集、多边形、多义线。这些都是些简单的要素对象,在有些情况下要素还可以参与拓扑、网络运算。
IFeatureClass 和IFeatureDataSet的区别
- IFeatureclass 存储了简单的要素,它可以在IFeatureDataset内也可以在IDataSet外,在外面的IFeatureclass被称作独立的IFeatureclass。存储了拓扑关系的 IFeatureclass 必须包 含在IDataset中以确保他们是统一的空间索引(spatial reference)。
- 一个 IFeatureDataset是一个仅存在于geodatabase工作空间的dataset。他的所有 IDataset 都是geodatabase的一部分.当编程时记得featureclass可能是或不是一个 featuredataset的一部分。
- 一个geodatabase的每一个IDataset 都必须有独一无二的名字 。特别是在一个geodatabase中,每个 IFeatureclass 也必须有一个独一无二的名字,无论它存在于那个 IDataset。这不同于文件系统,两个文件夹可以有同一个名字的文件。一个IWorkspace的 IFeatureWorkspace 接口的 OpenFeatureClass() 方法 能够打开这个 workspace 所有的featureclass。包括独立的featureclass和存储在featuredataset中featureclass。
- 另外一个 IFeatureDataset 存储的 IFeatureclass 都是同一个空间索引.
FeatureClass 与DataSet的区别,与Layer的关系
- FeatureClass 可以看做是一张表,有相同空间参考的FeatureClass 放在一个DataSet里,特别是做拓扑分析和几何网络。
- layer只是对库里的featureclass的引用,在ArcMap里运用下join功能,再看库里的数据,就会比较清晰了。layer 是显示时候的对象 储存了渲染 别名 显示的一些相关属性信息。它与一个featureclass绑定,但是不是特定的 它是脱离数据的一个显示属性相关的对象可以与任何的featureclass绑定。
- dataset 是数据库角度的 featureclass 它保存了 一些相对的关系 如子集(一个dataset集合 中包含的若干矢量) 。featureclass 空间数据对象,就是真正的数据对象 包含了Itable 这个表对象
- 据集-数据表-数据链接及表达: featureDataset - featureClass - layer
IFeatureLayer和IFeatureClassD的关系
- IFeaturLayer是加载在地图文档中的数据层,只是要素类的表现形式;IFeatureClass是一组空间实体的集合,在数据表中存储了统一的属性和行为,每一个 IFeatureClass都有一个 IGeometry类型,如shp文件;
- IFeatureLayer继承自ILayer,IFeatureClass继承自IClass;
- FeatureLayer可以创建自己的对象,而FeatureClass不行:IFeatureClass=IFeatureLayer.FeatureClass 或者 IFeatureClass=IFeatureWorkspace.openFeatureClass("xx")