5.2 规则
在现实世界中,对象的存在或改变都必须遵循一定条件,可以用这些条件来限制几何网络中的元素,或者定义这些元素关联的对应基数。这些条件统称为规则。MapGIS 10中的规则分为4种类型:属性规则、关系规则、拓扑规则和连接规则。规则可以作用在类上,也可以作用在子类型上。
5.2.1 属性规则
属性规则用于约定某个字段的缺省值,限定取值范围,设置合并策略和拆分策略。属性规则是通过域类型来表达的,取值可分为连续型和离散型,相应地把域类型分为了范围域和编码域。
范围域适用于数值型、日期型、时间型等可连续取值类型的字段,编码域除了可以适用于连续取值类型的字段,还可用于字符串等类型的字段。
合并策略和拆分策略用于定义要素合并和拆分时属性字段的变化规则,合并策略包括缺省值、累加值、加权平均,拆分策略包括缺省值、复制、比例值。例如地块合并,合并后的要素属性“地价”可定义为累加值策略。
属性规则用来限制属性表中的记录,这些记录的值必须符合特定域的约束条件。要有效地使用属性规则,则需要经过以下流程:
(1)在创建属性规则之前,需要设置属性的约束条件,即设置属性域。
(2)有了属性域,就可以创建属性规则了。属性规则的创建是属性管理的前提。
(3)完成属性规则的创建后,再进行属性规则检查,这个完整的过程能够保证属性数据的正确性和完整性。
1.创建属性规则
(1)右键单击“属性规则”节点,在弹出的右键菜单中选择“创建”,如图5-8所示。
(2)在“属性规则创建向导”对话框的“选择数据”界面(见图5-9)中选择“对象类型”,用户可选的对象类型包括简单要素类、注记类、对象类;在界面的对象列表中,选定要创建规则的类,然后单击“下一步”按钮。
图5-8 属性规则创建
图5-9 “选择数据”界面
(3)在“设置信息”界面(见图5-10)上设置属性规则的相关信息,然后在“选择域”的下拉列表中选择域名,若域名不存在,则可单击“”按钮设置域。单击“”按钮可将选定的域添加到列表中,单击“”按钮可将从列表中删除域。添加好域后单击“下一步”按钮。要使一个字段匹配约束它的域,需要保证这个字段的数据类型和域的数据类型一致。例如,某个数据类型为短整型的域,也只能约束数据类型为短整型的字段,否则不能进行匹配。
图5-10 “设置信息”界面
子类型并非创建属性规则的必要条件,但是,当选择的简单要素类具有子类型时,在创建属性规则时可勾选“设置信息”界面上的“基于子类型设置属性规则”,然后创建基于子类型的属性规则,如图5-11所示。
图5-11 创建基于子类型的属性规则
(4)在“确认创建”界面(见图5-12)中仔细检查输入的属性规则创建信息是否正确,若有误,则可单击“上一步”按钮在“属性规则创建向导”对话框的相应位置进行修改;若正确无误,则可单击“完成”按钮完成属性规则的创建。
图5-12 “确认创建”界面
2.属性规则检查
为确保要素属性值集合或范围的合法性,MapGIS 10使用属性域对其进行约束。在创建属性域和属性规则之后,还需要使用属性规则检查对其进行验证。属性域和属性规则检查的配合使用,可以避免在属性赋值时出现操作失误。
以下是属性规则检查的操作示例。
(1)在地图视图中添加参与属性规则创建的图层。
(2)将图层设置为“当前编辑”状态。
(3)单击菜单栏中的“工具→规则检查→属性规则检查”,如图5-13所示。
图5-13 属性规则检查菜单
需要注意的是,只有创建了属性规则,并在地图文档中激活与该规则相关的图层之后,菜单中的“属性规则检查”项才会被激活。
(4)在弹出的“规则检查”对话框中,通过“检查图层”的下拉列表选择要进行检查的“道路”图层,并选中要进行检查的属性规则,单击“开始”进行属性规则检查,如图5-14所示。
(5)属性规则检查完成后,会弹出“规则检查视图”对话框并在其中列出违反属性规则的项。用户可以通过右键单击“规则检查视图”中的违反属性规则的项来删除它,如图5-15所示。
图5-14 “规则检查”对话框
图5-15 删除违反属性规则的项
在“规则检查视图”对话框中删除违反属性规则的项时,也会删除其对应的空间数据,因此在进行删除操作时需要谨慎处理。
5.2.2 关系规则
关系规则随着关系的产生而产生,用于限定对象之间关系映射的数目。例如,源类和目的类之间建立了N-M的关系,可通过关系规则限定关系的源对象数是1-3,目的对象数是0-5,即源类中的每个对象与目的类中至少1个、最多3个对象建立关系;而目的类中的对象可以和源类中的对象没关系,但最多只能与5个源类中的对象有关系。
通过关系规则可以明确规定源类中的对象和目的类中的对象的映射基数。对于1-1的关系,其源类中的对象和目的类中的对象的最小、最大映射基数都是1,如果用户输入的基数大于1,则这个规则无法创建。同理1-M的关系的源类中的对象的最小、最大映射基数只能是1,如果用户输入的基数大于1,则这个规则也无法创建。但是对于N-M关系的源类中的对象和目的类中的对象的最小、最大映射基数没有限制,只要源类中对象的最小映射基数小于源类中对象的最大映射基数,目的类中的对象的最小映射基数小于目的类中的对象的最大映射基数即可。
关系规则可以应用于两个类的对象之间、两个类的子类型的对象之间、一个类的对象和另一类的子类型的对象之间。
完整地应用一个关系规则,需要经过以下流程:
(1)关系类的创建,可以参考矢量数据管理中关系类的相关内容。
(2)在关系类已经存在的前提下,创建关系规则是关系规则检查的前提。
(3)为了保证关系类符合规定的映射关系,在创建完成关系规则后,需要进行关系规则检查。
1.创建关系规则
(1)右键单击“关系规则”节点,在弹出的右键菜单中选择“创建”,如图5-16所示。
(2)在“关系规则创建向导”对话框的“选择数据”界面(见图5-17)中选择要创建关系规则的关系类,然后单击“下一步”按钮。
图5-16 创建关系规则
图5-17 “选择数据”界面
(3)在“关系规则创建向导”对话框的“设置信息”界面(见图5-18)中设置“源最小值”“目的最小值”“源最大值”“目的最大值”,可通过“+”按钮或“-”按钮来添加或删除关系规则,设置完成后单击“下一步”按钮。
图5-18 “设置信息”界面
在“设置信息”界面添加要验证的关系规则时,如果在关系类中创建的是1-1的映射关系,那么在源最小值、源最大值和目的最小值、目的最大值中,默认(不可修改)的映射关系为“1-1”,表示源类的每个对象与目的类的每个对象必须建立1-1的映射关系,否则为不合法。
如果在关系类中创建的是1-M的映射关系,那么在创建关系规则时,系统默认的源最小值和源最大值为1,目的最小值和目的最大值可由用户进行设定。假设用户设定目的最小值和目的最大值为2-3,即源映射关系为1-1,目的映射为2-3,表示源类的每个对象与目的类的每个对象必须建立1-2或1-3的映射关系,否则为不合法。
同理,当关系类的映射关系是N-M时,用户可以设置源和目的最小/最大值。假设用户设定的源映射关系为1-2,目的映射关系为2-3,表示源类的每个对象与目的类的每个对象可以建立1-2、1-3、2-2、2-3的映射关系,否则为不合法。
(4)在“确认创建”界面中检查关系规则的设置是否正确。确认创建信息正确无误后单击“完成”按钮即可创建关系规则,如图5-19所示。
图5-19 “确认创建”界面
2.关系规则检查
(1)在“工作空间”的新地图中添加创建了关系规则的图层。
(2)将图层设置为“当前编辑”状态。
(3)单击菜单栏中的“工具→规则检查→关系规则检查”,如图5-20所示。
图5-20 关系规则检查菜单
(4)在“规则检查”对话框中选择要进行检查的图层(如“货车位置”),并选择要进行检查的关系规则,单击“开始”按钮即可开始关系规则检查,如图5-21所示。
(5)关系规则检查完毕后,会弹出“规则检查视图”对话框并在其中列出违反关系规则的项,以及对应的规则描述,如图5-22所示。
图5-21 “规则检查”对话框
图5-22 “规则检查视图”对话框
在“规则检查视图”对话框中,不仅可以查看到违反关系规则的项,还可以通过右键菜单来删除违反关系规则的项。但是,需要注意的是,删除违反关系规则的项会删除对应空间的图形信息,且不可恢复,因此进行删除操作需慎重。
5.2.3 拓扑规则
拓扑将GIS行为应用到空间数据上,使得GIS软件能够解决诸如邻接、连通、邻近和重叠之类的问题。拓扑为用户提供了一种灵活有力的方式来确定和维护空间数据的质量及完整性。拓扑的实现依赖于一组完整性规则,它定义了空间相关的地理要素和要素类的行为。
拓扑规则包括三种:点拓扑规则、线拓扑规则、多边形拓扑规则。
在采集和编辑空间数据的过程中,会不可避免地出现一些错误。例如,同一个点或同一条线被数字化了两次,相邻面对象在采集过程中出现裂缝或者相交、不封闭等,这些错误往往会产生假点、冗余点、悬线、重复线等拓扑错误,导致采集到的空间数据之间的拓扑关系和实际地物的拓扑关系不符合,会影响到后续的数据处理、分析工作,并影响到数据的质量和可用性。此外,这些拓扑错误通常量很大,也很隐蔽,不容易被识别出来,通过人工方法不易去除,因此,需要进行拓扑处理来修复这些冗余和错误。
完整地应用一个拓扑规则的流程如下:
(1)应用拓扑规则的第一步是创建拓扑规则。拓扑规则的创建与其他规则的创建相比,相对比较简单,只需要数据库中包含至少可用的线或者区要素即可。
(2)完成了拓扑规则的创建后,即可进行拓扑规则检查,检查不符合拓扑规则的几何要素。
1.创建拓扑规则
(1)右键单击“拓扑规则”节点,在弹出的右键菜单中选择“创建”,如图5-23所示。
(2)在“拓扑规则创建向导”对话框中的“选择数据”界面(见图5-24)中选择要创建规则的类。若要对两个不同的类进行拓扑规则的创建,则勾选“创建二元拓扑规则”,然后单击“下一步”按钮。
图5-23 创建拓扑规则
图5-24 “选择数据”界面
(3)在“拓扑规则创建向导”对话框的“设置信息”界面(见图5-25)上,勾选要创建的拓扑规则(可选择多个),完成拓扑规则选择后单击“下一步”按钮。
(4)在“拓扑规则创建向导”对话框的“确认创建”界面(见图5-26)上,查看设置拓扑规则的信息。若拓扑规则信息确认无误,则单击“完成”按钮完成拓扑规则的创建。
2.拓扑规则检查
拓扑规则检查是为了检查出点、线、区数据集本身及不同类型数据集相互之间不符合拓扑规则的对象,主要用于数据编辑和拓扑分析预处理。在进行区拓扑规则检查时,先对区要素进行抽稀再进行拓扑规则检查,可以提高检查效率。操作方法如下:
图5-25 “添加规则”界面
图5-26 “确认创建”界面
(1)在“工作空间”的新地图中添加创建了拓扑规则的图层。
(2)将图层设置为“当前编辑”状态。
(3)单击菜单栏中的“工具→规则检查→拓扑规则检查”,如图5-27所示,可弹出“规则检查”对话框。
(4)在“规则检查”对话框(见图5-28)中显示的是该图层创建的所有拓扑规则,选择需要检查的规则后单击“开始”按钮,即可开始拓扑规则检查。
图5-27 拓扑规则检查
(5)规则检查完成会弹出“规则检查视图”对话框(见图5-29),该对话框显示了检查结果。在“规则检查视图”对话框中,不仅可以查看到违反拓扑规则的项,还可以通过右键菜单来删除违反拓扑规则的项。需要注意的是,删除违反拓扑规则的项会删除对应空间的图形信息,且不可恢复,因此进行删除操作需慎重。
图5-28 “规则检查”对话框
图5-29 规则检查视图
MapGIS 10提供了一元拓扑规则和二元拓扑规则,分别如表5-1和表5-2所示。
表5-1 一元拓扑规则
表5-2 二元拓扑规则
用户可以参考表5-1和表5-2中不同要素之间可创建的拓扑规则来进行拓扑规则的创建。在处理拓扑规则时,需要对不同规则设置相应的容限,以达到最佳处理效果。
5.2.4 连接规则
连接规则主要应用在几何网络中,有两种连接规则:边-边连接规则、边-节点边连接规则。在创建几何网络时,可以在该几何网络中创建边-节点连接规则、边-边连接规则。几何网络是建立在要素数据集上的,但在大多数网络中,并非所有的边都可以连接到所有的节点上;同样,并非所有的边都可以通过特定的节点连接到所有其他的边上。例如,只有通过转换器才能将一个10 in(1 in≈2.54 cm)的传输干道连接到一个8 in的传输干道。面对类似的问题,我们可以通过建立网络连通性规则来解决。在几何网络中,连通性可以维护网络要素的完整性,连通性规则可以约束可能和其他要素相连的网络要素的类型,以及可能和其他任何特殊类型相连的要素的数量。连通性规则分为边-节点连接规则和边-边连接规则。
边-节点连接规则(GDB_JNCONNRULES):用于约束哪种类型的边可以和另一种类型的节点相连。
边-边连接规则(GDB_EDGECONNRULES):用于约束哪种类型的边通过一组节点可以与另一种类型的边相连。
完整应用一个连接规则的步骤如下:
(1)创建一个连接规则的前提条件是创建一个网络类。关于网络类的创建,可以参考第19章中的相关内容。
(2)连接规则分为两种,需要根据应用需求来选择。
(3)完成连接规则的创建后,即可进行连接规则检查,MapGIS 10能够根据用户的设置检查出不符合连接规则的项。
1.创建连接规则
1)创建边-边连接规则
(1)右键单击“边-边连接规则”节点,在弹出的菜单中选择“创建”,如图5-30所示,可弹出“边-边连接规则创建向导”对话框。
(2)在“边-边连接规则创建向导”对话框的“选择数据”界面(见图5-31)中,选择要创建连接规则的网络类对象,完成选择后单击“下一步”按钮。
图5-30 边-边连接规则
图5-31 “选择数据”界面
(3)在“边-边连接规则创建向导”对话框的“设置信息”界面(见图5-32)上,选择要创建连接规则的源边、目的边及连接点,完成选择后单击“下一步”按钮。该连接规则表示目的边要通过连接点来和源边相连,否则为不合法。
图5-32 “设置信息”界面
(4)在“边-边连接规则创建向导”对话框的“确认创建”界面(见图5-33)上,确认所创建连接规则的信息,确认无误后单击“完成”按钮。
图5-33 “确认创建”界面
2)创建边-节点规则
(1)右键单击“边-节点连接规则”节点,在弹出的右键菜单中选择“创建”,如图5-34所示,可弹出“边-节点连接规则创建向导”对话框。
(2)在“边-节点连接规则创建向导”对话框的“选择数据”界面(见图5-35)中,选择要创建规则的网络类对象,完成选择后单击“下一步”按钮。
图5-34 边-节点连接规则
图5-35 “选择数据”界面
(3)在“边-节点连接规则创建向导”对话框的“设置信息”界面(见图5-36)上,选择要创建规则的边类和点类,用户通过设置边或点的最小/最大基数,来确定各自的映射关系。
边或点的基数含义如下:
① 边和点的最大/最小基数为“-1 to-1”,表示不创建连接规则。
② 其中一个类为默认设置,另一类设置为有效的基数范围。例如,保持默认的边基数,设置点基数为“0 to 1”,表示在创建连接规则时(或进行连接规则检查时),要求每个点能够连接的边端点数最多为1个,最少为0个,否则为不合法。
③ 可以将两个类都设置为有效的基数。例如,设置边基数为“2to2”,点基数为“1to2”,表示在网络类中的每个端点必须连接两条线,每条线的端点上至少有1个点要素类,这两个连接规则是互不影响的。
由于线要素只有两个端点,所以点基数最大为2。只有设置的基数合法时,用于添加连接规则的“+”按钮才会被激活,此时单击该按钮可以将对应的类和连接规则添加到“边-节点连接规则”列表中。完成连接规则的添加后单击“下一步”按钮。
(4)在“边-节点连接规则创建向导”对话框的“确认创建”界面(见图5-37)上,查看连接规则的信息,确认无误后单击“完成”按钮即可创建边-节点连接规则,如图5-37所示。
2.连接规则检查
连接规则检查的操作方法如下:
(1)在“工作空间”的新地图中添加创建了连接规则的图层。
(2)将图层设置为“当前编辑”状态。
(3)单击菜单栏中的“工具→规则检查→连接规则检查”,如图5-38所示。
图5-36 “设置信息”界面
图5-37 “确认创建”界面
(4)在“规则检查”对话框中,勾选要检查的连接规则,然后单击“开始”按钮,即可对网络类对象(如“通路交通网”)进行连接规则检查,如图5-39所示。
图5-38 连接规则检查
图5-39 对网络类对象进行连接规则检查
(5)完成连接规则检查后会弹出“规则检查视图”对话框(见图5-40),在该对话框中显示了检查结果。用户不仅可以查看到违反连接规则的项,还可以通过右键菜单来删除违反连接规则的项。需要注意的是,删除违反连接规则的项会删除对应空间的图形信息,且不可恢复,因此进行删除操作需慎重。
图5-40 “规则检查视图”对话框