# 规则

现实世界中的对象存在或改变都是必须遵循一定条件。例如,可以用这样的条件来限制几何网络中元素的制约,或者定义这些元素的关联的对应基数。所有这些限制条件统称为规则。MapGIS 10中,规则分为4种类型:属性规则,拓扑规则,连接规则,关系规则。规则可以作用在类上,也可以作用在子类型上。

属性规则

属性规则用于约定某个字段的缺省值,限定取值范围,设置合并和拆分策略。属性规则通过“定义域”来表达,取值范围分连续型和离散型,相应地把定义域分为范围域和编码域。

范围域适用于数值型、日期型、时间型等可连续取值的字段类型,编码域除了可以适用于连续取值类型外,还可用于字符串等类型的字段。

合并和拆分策略定义要素合并和拆分时属性字段的变化规则,合并策略包括:缺省、累加、加权平均,拆分策略包括:缺省、复制、按比例。如地块合并,合并后的要素属性“地价”可定义为“累加”策略。

关系规则

关系规则随着关系的产生而产生,用于限定对象之间关系映射的数目。例如:原始类和目的类之间建立了N-M的关系,则通过关系规则可以限定关系的原始对象数是1-3,目的对象数是0-5,即原始类中的每个对象与目的类中至少1个、最多3个对象建立关系;而目的类中的对象可以和原始对象没关系,但最多只能与5个原始对象有关系。

拓扑规则

各类型要素之间具有精确的空间位置关系就叫做拓扑。

在日常生活中,常见的空间规则如:

  • 要素类中每条弧段只能作为两个多边形的边界;
  • 要素类中多边形之间不能重叠;
  • 要素类中多边形之间不能有缝隙;
  • “城镇”要素必须落在“行政区”要素内部;
  • 不能有悬挂线;
  • 线不能自相交;
  • “阀门”必须与“水管”的端点重合。

连接规则

几何网络中的线和应用设施必须是不间断连接的,并且这种连接关系必须明确定义。这样的一维关系图可称为几何网络。

连接规则主要使用在几何网络中,用以约束可能和其它要素相连的网络要素的类型,以及可能和其它任何特殊类型相连的要素的数量。有两种类型的连接规则:边对边连接规则、点对边连接规则。

边对边规则约束了哪一种类型的边通过一组结点可以与另一种类型的边相连。

点对边规则约束了哪一种边类型可以和哪一种结点类型相连。

规则检查

在进行规则检查前,必须先创建规则,才可以进行规则检查。

有效性规则(validate rule )是所有规则的总称,在MapGIS中,包括4种类型:属性规则、连接规则、关系规则、拓扑规则。

属性规则(attribute rule):在创建了要素的子类型和域集之后,随之也产生了属性规则的概念。可以简单的理解为“域”就是限制属性表的某一个字段的取值;而属性规则就是验证,经过各种属性操作之后,实际的属性值是否满足“域”的限制。属性规则一般作用在一个要素类或是一个要素类的子类型上。

关系规则(relationship rule):关系规则随着关系的产生而产生。关系规则检查用于验证对象是否在限定的映射关系内。

拓扑规则(topology rule):拓扑规则约束了地理要素空间位置关系,包括邻接,连通,邻近和重叠等。拓扑规则检查验证对象间,是否保证了约定的空间位置。

连接规则(connectivity rule):连接规则用于网络中的要素,这些规则用以检验某一类型要素是否与另一类型要素正确相连通。MapGIS中提供了两种连接规则:边对边连接规则、点对边连接规则。在创建几何网络时,可在该几何网络中,创建点和边,边和边之间的连接规则。

接下来是每种规则创建和检查的详细说明。

# 属性规则

属性规则是用来限制属性表中的记录,这些记录的值必须要符合特定域的约束条件。

要有效的使用一个属性规则,需要经过以下流程:

①在创建属性规则之前,需要设置属性的约束条件,即设置属性域。您可以在“设置子类型”时设置属性的域。也可以在“域集”节点下新建和管理域。

②有了属性域,您就可以创建属性规则了。属性规则的创建是属性管理的前提。

③完成属性规则的创建,再进行属性规则检查,这个完整的过程能够保证属性数据的正确、完整性。

在已经创建了属性域的前提下,您可以参考以下操作说明,进行属性规则的创建和检查。

一、创建属性规则

# 操作说明

1. 右键点击“属性规则”结点,在其右键菜单中单击“创建”,弹出“属性规则创建向导”。

2. 在属性规则创建向导“选择数据”页中选择对象类型,用户可选的对象类型包括:简单要素类、注记类、对象类;在页面的对象列表中,选定要创建规则的类,然后单击“下一步”。

3. 设置属性规则创建信息。在创建向导的“设置信息”页面上,选择属性规则作用字段,然后在选择域下拉列表中选择域名,若不存在,则点击按钮设置域(设置属性域的操作请参考“域集”中的相关内容)。最后点击将选定域添加到列表中。点击将从列表中删除域。

要为一个字段匹配约束它的域,需要保证这个字段的数据类型和域的数据类型一致。举例来说一个数据类型为短整型的域,也只能约束数据类型为短整型的字段。否则不能进行匹配。

另外,子类型并非创建属性规则的必要条件。但是,当选择的要素具有子类型时,在属性规则创建的“设置信息”页上的“基于子类型设置属性规则”项被激活,您可以勾选该项,然后创建基于子类型的规则。

4. 在创建向导“确认创建”页面上,仔细确认输入的属性规则创建信息是否正确:若有误,单击“上一步”在创建向导的相应位置进行修改;若正确无误,单击"完成",创建成功。

二、属性规则检查

为确保要素属性值集合或范围的合法性,我们使用了属性域对其进行约束。在创建了属性域、属性规则后,我们需要使用属性规则检查对其进行验证。属性域和属性规则检查的配合使用,可以避免在属性赋值时出现操作失误。

以下是属性规则检查的操作示例:

1. 在地图视图中添加参与属性规则创建的图层;

2. 激活图层到“当前编辑”状态;

3. 在菜单上选择"工具"——“规则检查”——“属性规则检查”,弹出规则检查选择窗口,如下图所示:

需要注意的是,只有创建了属性规则,并在地图文档中激活与该规则相关的图层之后,菜单中的“属性规则检查”项才会被激活。

4. 在“选择规则检查”窗口上,勾选需要进行属性检查的项,单击“开始”,进行属性规则检查。

5. 检查完成后,弹出规则检查视图,并列出违反属性规则的项。另外,用户可以通过右键“规则检查视图”,删除违反规则的项。

提示:

在规则检查视图中删除违反规则的项时,也会删除对应的空间数据。因此,在执行“删除”操作时需要谨慎处理。

# 关系规则

通过关系规则可以明确规定原始对象类和目的对象类的映射基数。对于1-1的关系,其原始对象类和目的对象类的最小、最大映射基数都是1,如果用户输入的基数大于1,则这个规则无法创建。同理1-M关系的原始对象类的最小、最大映射基数只能是1,如果用户输入的基数大于1,则这个规则也无法创建。但是对于N-M关系的原始对象类和目的对象类的最小、最大映射基数没有限制,只要originmincard小于originmaxcard,destmincard小于destmaxcard即可。

关系规则可以应用到两个对象类之间、两个对象类的子类型之间、一个对象类和另一对象类的子类型之间。

完整的应用一个关系规则,您需要使用以下流程:

①关系类的创建可以参考矢量数据管理中,关系类的相关内容。详见“创建关系类”。

②在关系类已经存在的前提下,创建关系规则,为关系规则检查做准备。

③为了保证关系类符合规定的映射关系,在创建完成关系规则后,您需要进行关系规则的检查。

在关系类已经创建的前提下,您可以参考以下操作说明,进行关系规则的创建和检查。

一、创建关系规则

# 操作说明

1. 右键MapGIS GDBCatalog目录“关系规则”节点,在其右键菜单中点击“创建”,弹出“创建关系规则”向导。

2. 在“创建关系规则”向导的“选择数据”页面上选择要创建规则的关系类,完成选择,点击"下一步"。

3. 在创建向导的“设置信息”中,设置源类和目的类的最大最小值。通过“+”添加或“-”删除关系规则,设置完毕后,点击"下一步"。

在“设置信息”页添加要验证的关系规则时,如果在关系类中,创建的1—1的映射关系,那么在源最小/最大值和目的最小/最大值中,默认(不可修改)源和目的映射关系都为“1to1”,表示源类的每个元素与目的类的每个元素必须建立1—1对应关系,否则为不合法;

如果在关系类中,创建的是1—M的映射关系,那么在创建关系规则时,系统默认源最小/最大值为1,目的最小/最大值可由用户进行设定。在此,假设用户设定目的最小/最大值为2—3,即源映射关系为“1to1”,目的映射为“2to3”,表示源类的每个元素与目的类的每个元素必须建立1—2或1—3的对应关系,否则为不合法;

同理,当关系类的映射关系是N—M时,用户可以设置源和目的最小/最大值。假设用户设定的源映射关系为“1to2”,目的映射关系为“2to3”,表示源类的每个元素与目的类的每个元素可以建立1—2、1—3、2—2、2—3的映射关系,否则为不合法。

4. 在“确认创建”对话框中,检查规则设置是否正确。确认创建信息正确无误,单击"完成"执行关系规则的创建。

二、关系规则检查

# 操作说明

1. 在文档视图中添加创建了关系规则的图层。

2. 激活图层到“当前编辑”状态。

3. 在菜单上选择"工具"——“规则检查”——“关系规则检查”,弹出“规则检查”对话框。

4. 在“规则检查”对话框上,勾选要进行检查的关系规则,单击“开始”,开始关系规则的检查。

5. 检查完毕,弹出的规则检查视图会列出违反规则的对象ID,以及对应的规则描述。如下图所示。

在规则检查视图上,您不仅可以查看到违反规则对象的ID号,还可以通过右键菜单,选择删除违反规则的对象。但是,需要注意的是,删除违反规则的项会删除要素的对应空间图形信息,且不可恢复。因此,执行删除操作需慎重。

# 拓扑规则

拓扑将GIS行为应用到空间数据上。拓扑使得GIS软件能够回答这样的问题,比如邻接、连通、邻近和重叠。拓扑为用户提供了一个有力,灵活的方式来确定和维护空间数据的质量和完整性。拓扑的实现依赖于一组完整性规则,它定义了空间相关的地理要素和要素类的行为。

拓扑规则包括三种:点拓扑规则,线拓扑规则,多边形拓扑规则。

空间数据在采集和编辑过程中,会不可避免地出现一些错误。例如,同一个节点或同一条线被数字化了两次、相邻面对象在采集过程中出现裂缝或者相交、不封闭等,这些错误往往会产生假结点、冗余结点、悬线、重复线等拓扑错误,导致采集的空间数据之间的拓扑关系和实际地物的拓扑关系不符合,会影响到后续的数据处理、分析工作,并影响到数据的质量和可用性。此外,这些拓扑错误通常量很大,也很隐蔽,不容易被识别出来,通过手工方法不易去除,因此,需要进行拓扑处理来修复这些冗余和错误。

完整的应用一个拓扑规则的流程包括:

①应用拓扑规则的第一步是创建拓扑规则。拓扑规则的创建条件与其他类型的规则创建相比,相对比较简单,只需要数据库中包含至少可用的线或者区要素即可。

②完成了拓扑规则的创建后,即可执行拓扑规则的检查,检查出不符合拓扑规则的几何要素。

一、创建拓扑规则

创建一个拓扑规则,旨在修复拓扑错误或避免拓扑错误的产生。您可以参考以下步骤实现拓扑规则的创建。

# 操作说明

1. 右键点击拓扑规则的图标,并选择“创建”项,弹出拓扑规则创建向导。

2. 在创建向导的“选择数据”页面上,选择要创建规则的类。若要对两个不同的类进行拓扑规则创建,则勾选“创建二元拓扑规则”,选择两个要素类进行拓扑规则的创建,完成选择,单击“下一步”。

3. 在创建向导的“添加规则”上,勾选要创建的拓扑规则(可选择多个),设置完成后,单击“下一步”;

4. 在“确认创建”页面上,查看创建拓扑规则的信息。若创建信息确认无误,单击"完成",执行相应规则的创建。

二、拓扑规则检查

拓扑检查是为了检查出点、线、区数据集本身及不同类型数据集相互之间不符合拓扑规则的对象。主要用于数据编辑和拓扑分析预处理。

# 操作说明

1. 在文档视图中添加创建了拓扑规则的图层。

2. 激活拓扑规则图层到“当前编辑”状态。

3. 在菜单上选择"工具"——“规则检查”——“拓扑规则检查”,弹出“规则检查”对话框。

4. 在“规则检查”对话框中,显示的是该类创建的所有拓扑规则。选择需要检查的规则,然后点击“开始”,开始对指定拓扑规则的检查。

5. 弹出规则检查视图,显示检查结果。

同样的,在规则检查视图上,您不仅可以查看到违反规则对象的ID号,还可以通过右键菜单,选择删除违反规则的对象。但是,需要注意的是,删除违反规则的项会删除要素的对应空间图形信息,且不可恢复。因此,执行删除操作需慎重。

进行区拓扑规则检查时,可以先对区要素进行抽稀,再进行拓扑规则检查,可以提高检查效率。

# 连接规则

连接规则主要使用在几何网络中。有两种连接规则:边对边连接规则、点对边连接规则。在创建几何网络的时候,可以创建该几何网络中,点和边,边和边之间的连接规则。几何网络是建立在要素数据集上的。在大多数网络中,并不是所有的边可以连接到所有的结点上。同样,并不是所有的边可以通过特定的结点连接到所有其它的边上。例如,供水网络中的一个消防栓一侧可以连接到另一个消防栓,但不能连接到服务消防栓。类似的,通过转换器一个十英寸的传输干道只能连接到一个八英寸的传输干道。面对这些问题,在这里我们可以通过建立网络连通性规则来解决。在几何网络中,连通性可以维护网络要素的完整性,规则则可以约束可能和其它要素相连的网络要素的类型,以及可能和其它任何特殊类型相连的要素的数量。连通性规则分为边-结点规则和边-边规则。

1. 边-结点规则(GDB_JNCONNRULES)

用于约束哪种边类型可以和另一种结点类型相连。

2. 边-边规则(GDB_EDGECONNRULES)

用于约束哪种类型的边通过一组结点可以与另一种类型的边相连。

完整的应用一个连接规则,需要经历以下步骤:

①创建一个连接规则的前提条件就是创建一个网络类。关于网络类的创建,可以参考“网络类”中的相关内容。

②连接规则分为两种,您需要根据应用需求进行创建。

③完成连接规则的创建后,即可执行连接规则的检查。系统能够根据您的设置,检查出不符合规则的项。

以下是创建、检查连接规则的具体使用步骤。

一、创建连接规则

连接规则主要有两种:边对边连接规则、点对边连接规则。在创建几何网络时,可在该几何网络中,创建点和边,边和边之间的连接规则。

(1)边—结点连接规则

创建一个用于约束网络类中一种边类型与另一种边类型结点的可连接性。

# 操作说明

1. 右键点击“边—结点连接”规则的图标,并选择“创建”项,弹出边—结点连接规则创建向导。

2. 在创建向导的“选择数据”页面上,选择要创建规则的网络类数据,完成选择,单击“下一步”;

3. 在创建向导的“设置信息”页面上,选择要创建规则的边类、点类;

4. 在“设置信息”页上,添加边类和点类的映射关系。用户通过设置边或点的最小/最大基数,来确定各自的映射关系。类基数含义为:

①在默认条件下,边类和点类的最大/最小基数为“-1to-1”,表示不对该类创建连接规则;

②当保持其中一个类为默认设置,为另一类设置有效的基数范围,例如:保持默认的边类基数,设置点类基数为“0to1”,表示在创建连接规则时(或进行连接规则检查时),要求每个点能够连接的边端点数最多为1个,最少为0个,否则为不合法;

③您可以为两个类都设置有效的类基数,例如,设置边类基数为“2to2”,点类的基数范围为“1to2”,即表示在网络类中,约定每个端点上,必须连接两条线;另外,每条线的端点上,至少有1个点要素类。这两个规则条件是互不影响的。

由于线要素只有两个端点,所以点类的基数最大为2。另外,只有设置的类基数合法时,添加规则的按钮“”才会被激活,点击按钮,可以将对应的类和规则添加到“边-点连接规则”列表中。完成规则的添加,点击"下一步"。

5. 在“确认创建”页面上,查看规则的创建信息。若确认创建信息正确无误,可单击"完成"执行边-结点规则的创建。

(2)边—边连接规则

建立一种连接类型的边通过连接类型的几何连接到另一个边。

# 操作说明

1. 右键点击边—边连接规则的图标,并选择“创建”项,弹出“创建边—边连接规则”向导。

2. 在创建向导的“选择数据”页面上,选择要创建规则的网络类,完成选择,单击“下一步”。

3. 在创建向导的“设置信息”页面上,选择要创建规则的源边、目的边以及连接点,完成设置,单击“下一步”。

选择目的边和源边以及连接点的选择,创建规则后,表示目的边要通过连接点和源边相连,否则为不合法。

4. 完成规则设置,显示所创建规则的信息,确认后单击"完成"。

二、连接规则检查

检查网络类的边、点要素是否符合连接规则的约束。

# 操作说明

1. 在文档视图中添加创建了连接规则的图层。

2. 激活图层。

3. 在菜单上选择"工具"—“规则检查”—“连接规则检查”,弹出“规则检查”对话框。

4. 在“规则检查”对话框中,勾选要检查的连接规则,然后单击“开始”开始对网络类进行相应规则的检查。

5. 检查完毕,弹出规则检查视图。若是数据全部符合要求,则弹出对话框提示: