深入FDO----FDO概念
连接地址:http://blog.csdn.net/mapguide_inside/article/details/4804417
在介绍FDO API的用法之前,我们需要了解一些FDO的基本概念,这些概念无论对FDO的理解,还是后续章节的理解都非常重要。
数据相关的概念
1) 要素(Feature)
要素是对自然界中对象的一种抽象,它直接或间接关联于某个地理位置,例如道路、地块等。一个空间要素具有一个或多个几何属性,例如一个道路要素可以被表示为一条线,一个消防龙头可以被表示为一个点。一个非空间要素没有几何属性,但是关联与一个空间要素,例如一个道路要素包含了一个人行道要素,而人行道要素被定义为一个非空间要素。
2) 模式(Schema)
模式是对真实世界中的对象建模时所使用的数据类型的逻辑描述,它是一种元数据,是数据源中数据的类型模型,例如一个用于对城市道路建模的模式包含了一个“道路”的要素类,这个类具有一个“名称”的属性,要素类“道路”的定义和它的关联类组成了一个模式。
3) 模式覆盖(Schema Override)
模式覆盖包含了覆盖默认的模式映射的规则,例如默认情况下关系数据库类型的FDO Provider会将一个要素类映射到一个相同名称的表,模式覆盖可以将要素类映射到一个不同名称的表,例如映射要素类“pole”到“telco_pol”。
4) 模式映射(Schema Mapping)
模式映射描述了模式元素和数据源物理对象之间的对应关系,例如OSGeo FDO Provider for MySQL将每个要素类映射为MySQL数据库中的一个表。每种FDO Provider的数据物理结构不尽相同,所以模式映射的方式也不尽相同,但是每一种FDO Provider都定义了默认的模式映射方式,通过制定模式覆盖(Schema Override)可以覆盖默认的模式映射方式。
5) 模式元素(Schema Element)
一个模式是由一个模式元素的集合所组成的,一个模式要素定义了一种特定类型的数据,例如一个要素类、一个属性或一个关联(Association)。模式元素之间通过继承和聚合关联起来。
6) 类类型(Class Type)
一个类型是FDO类定义类FdoClassDefinition的一个实例,用于代表空间要素或非空间要素的属性。由于FDO中的类和面向对象编程语言中的类具有相同的名称,非常容易造成误解,所以在本书中我们尽量使用要素类这个概念,但是大家要明白类和要素类并不是同一个概念。
7) 要素类(Feature Class)
要素类是一种用于描述真实世界中对象的模式要素,它包含了一个类名和零个或多个几何属性定义,描述了对象实例的数据类型。
8) 属性(Property)
一个属性是一个类的一个特性,一个类包含了一个或多个属性,例如要素类“道路”有属性“名称”、“车道数目”、“位置”等。一个属性具有某种特定的数据类型,它可以是一个简单数据类型,例如字符串或数值,也可以是由类所定义的复杂数据类型,例如类型“地址”,它由属性“街道名称”、“门牌号”和“街道类型”所定义。FDO支持五种类型的属性:关联(Association)属性、数据(Data)类型、几何(Geometric)属性、对象(Object)属性和光栅(Raster)属性。
9) 关联属性(Association Property)
FDO API中,类FdoAssociationPropertyDefinition用于对两个类之间的对等关系进行建模,它类似于数据库中两个表之间通过主键和外键所建立的关联关系,支持基数(Cardinality)设置(一对一或一对多)、级联锁定(Cascading Locks)、删除规则(Delete Rules)等。FDO的过滤器(Filter)可以基于关联属性,通过FdoIFeatureReader::GetObject(…)方法可以读取关联属性。
10) 数据属性(Data Property)
数据属性是一种非空间类型的属性,数据属性的实例可以包含一个类型为boolean、byte、date/time、decimal、single、double、Int16、Int32、Int64、BLOB(二进制大堆型)或CLOB(字符大对象)的值。
11) 维度(Dimensionality)
FDO中包含两种类型的维度,即形状维度和坐标维度。形状(Shape)维度由枚举类型FdoGeometricType所定义,FDO支持点(Point)、线(Line)、面(Surface)、实体(Solid)四种类型的形状,它们的形状维度分别为0、1、2、3。坐标维度由枚举类型FdoDimensionality所定义,它定义了XY、XYZ、XYM、XYZM四种类型的坐标维度。
12) 几何属性(Geometric Property)
一个几何属性的实例包含了代表一个几何对象,几何属性的定义指定了几何对象的形状和坐标维度。一个几何属性定义允许同时支持多种形状,例如一个几何属性对象可以是一个点,另外一个可以是一条线,默认情况下几何属性定义允许四种形状的任意结合。不过有些数据源并不具备能力,例如每个SHP文件只支持一种类型的几何对象,如果一个SHP文件中存放了点数据,就不可以存放线、面或实体数据。所有几何属性的实例必须具有相同的坐标维度,默认的坐标维度为XY。
13) 几何对象(Geometry)
几何对象有一个系列坐标值所组成,枚举FdoGeometryType定义了几何对象的类型。目前,FDO并不支持实体(Solid)类型的几何对象。
l Point
l LineString:由一个或多个相连的线段所组成的集合。
l CurveString:由相连的线段或圆弧所组成的集合。
l Polygon:由一个外环和零个或多个内环所组成的面,每个环都是闭合的,并且由一些相连的线段所组成。
l CurvePolygon:由一个外环和零个或多个内环所组成的面,每个环都是闭合的,并且由一些相连的线段或圆弧所组成。
l MultiPoint:多个点。
l MultiLineString:多个LineString。
l MultiCurveString:多个CurveString。
l MultiPolygon:多个Polygon。
l MultiCurvePolygon:多个CurvePolygon。
l MultiGeometry:一个异构的几何对象集合,这个集合中可以包含以上任何类型的几何对象。
上述许多类型的几何对象都是使用到了线段和圆弧,线段由两个坐标值所定义,代表一段直线段,圆弧由三个坐标值所定义,第一个点和第三个点代表圆弧的起点和终点,第二个点代表圆弧段的中间点。FDO将线段和圆弧统称为弧线段(Curve Segment)。
调用方法FdoIConnection::GetGeometryCapabilities()可以得到某个FDO Provider所支持的几何对象类型和坐标维度。
14) 对象属性(Object Property)
对象属性是一种复杂类型的属性,由一个类定义所定义,它可以用作一个类的属性,也可以用于定义另一个对象属性,例如在介绍属性时我们提到类型“地址”就是一个对象属性,它由三个属性“街道名称”、“门牌号”和“街道类型”所组成。一个对象属性的值既可以是一个对象,也可以是一个对象集合,例如“地块”要素类中“地址”属性的值是单个对象,“电子设备”要素类中“检查记录”属性的值是一个集合,包含多个对象。
15) 光栅属性(Raster Property)
光栅属性定义了处理一张光栅图像所需的信息,例如每个像素多少个比特,图像的像素高度和宽度等。
16) 空间上下文(Spatial Context)
空间上下文描述了坐标系、单位、空间范围等要素的元数据(Metadata),任何几何对象必须关联与一个空间向下文。
操作相关的概念
1) 命令(Command)
一个FDO命令代表了一种针对数据源的操作,例如Select命令用于查询要素,Update或Delete命令用于更新要素。FDO预定义了一系列命令用于执行一些通用的、常见的操作,每种FDO Provider也可以自定义一些新的命令以执行和Provider相关的操作。
2) 表达式(Expression)
表达式用于创建一个过滤器,它是过滤器或一个更大的表达式的子句,例如过滤器“Lanes>=4 and PavementType= 'Asphalt'”由两个表达式组成。
3) 过滤器(Filter)
过滤器用于选择数据源中的数据的一个子集,例如我们可以定义一个过滤器,选择要素类“道路”中在某个位置200米范围内两个车道的所有道路要素。许多FDO命令需要指定一个过滤器,例如Select命令使用过滤器查询符合过滤条件的所有要素,Delete命令使用过滤器删除符合过滤条件的所有要素。
4) 锁(Lock)
在更新数据源中的数据时,用户可以锁定这些数据,获得修改它们的控制权,避免其他用户修改这些数据。FDO支持两种类型的锁:事务锁和持久化锁。事务锁是一种临时锁,它只有在事务提交和回滚之前发挥作用;持久化锁会一直发挥作用直到用户对这些数据解锁。
5) 事务(Transaction)
一个事务是指由一系列数据操作组成的一个完整的逻辑过程,它具有如下特性:
原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据的完整性限制没有被破坏。
隔离性:两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。
持久性:在事务完成以后,该事务对数据所作的更改便持久地保存在数据库之中,并不会被回复。
THE END!
2012年12月11日