zoukankan      html  css  js  c++  java
  • 7深入FDOFDO概念

    深入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日

  • 相关阅读:
    jsonp与promise封装
    屏幕自适应问题与tab状态更新数据问题
    插槽问题
    如何封装一个组件
    在url中带参数
    vuex中mapGetters,mapActions
    eventBus 与 this.$emit
    4.24上交作业
    4.23作业
    4.17作业
  • 原文地址:https://www.cnblogs.com/xingchen/p/2812855.html
Copyright © 2011-2022 走看看