在我们查询数据的过程中,一直遇到选择集的问题。我们知道,要得到符合某种准则的数据,一般而言有两种不同的手段,一是使用select方法,它返回的是一个指向数据的Cursor对象;另一种是构造选择集(SelectionSet),然后在选择集中再得到Cursor,后者虽然走了弯路,但是在显示的效果上却比前者好,即得到的要素选择集在Map上会呈高亮显示。
我们通过IMap::SelectByShape方法得到过选择集,使用要素图层的IFeatureSelection接口也可以得到选择集,但是这些都仅仅是在“表面”探讨,那么,要素选择集在地理数据库中到底表现为什么东西呢?
SelectionSet对象是程序获得的被选择的行对象集合,这些行只能来自单个表或要素类,但是一个表或者要素类可以产生多个选择集对象。选择集有两种形式,它要么是基于与被选择的行对象的OID集合,要么就是一个实实在在的行对象本身,在后面这种情况下,选择集会提供方法让程序员与在选择集中的行对象进行交互。至于使用何种方式来得到选择集,我们可以使用SelectionType属性来设置。
选择集的类型如果是esriSelectionIDSet,那代表选择集使用的是一个OID集合,这些OID值可能保存在一个物理表中,也可能保存在内存中,这取决于数据源的类型;当它为esriSelectionTypeSnapShot时,它表明选择集使用的是保存在内存中的实际的行对象;如果是esriSelectionTypeHybird,那情况就比较灵活,当选择数量少的时候选择集使用在内存中的行对象,当数量多时则使用OID集合。
使用标识集合(如OID集合)可以表示数目巨大的选择集,它也是程序最常使用的一种方式,当数据源每一次被选择的对象还需要进行查询的时候,这种方式可以保证选择集是动态的,而且在数据源改变的时候自动变化。Snapshot类型选择集数度最快,而且一但选择集构造完成后就不再要求与数据源发生查询,但是它对少量数据是有效的,如果选择的数据多,占用内存大时,它的优势就发挥不出来了;Hybird类型选择集包含了前两者的有点,它可以依据选择数据的大小而自动选用不同的选择方式,但是这个选择数据的大小并不能由程序来控制。
我们通过IMap::SelectByShape方法得到过选择集,使用要素图层的IFeatureSelection接口也可以得到选择集,但是这些都仅仅是在“表面”探讨,那么,要素选择集在地理数据库中到底表现为什么东西呢?
SelectionSet对象是程序获得的被选择的行对象集合,这些行只能来自单个表或要素类,但是一个表或者要素类可以产生多个选择集对象。选择集有两种形式,它要么是基于与被选择的行对象的OID集合,要么就是一个实实在在的行对象本身,在后面这种情况下,选择集会提供方法让程序员与在选择集中的行对象进行交互。至于使用何种方式来得到选择集,我们可以使用SelectionType属性来设置。
选择集的类型如果是esriSelectionIDSet,那代表选择集使用的是一个OID集合,这些OID值可能保存在一个物理表中,也可能保存在内存中,这取决于数据源的类型;当它为esriSelectionTypeSnapShot时,它表明选择集使用的是保存在内存中的实际的行对象;如果是esriSelectionTypeHybird,那情况就比较灵活,当选择数量少的时候选择集使用在内存中的行对象,当数量多时则使用OID集合。
使用标识集合(如OID集合)可以表示数目巨大的选择集,它也是程序最常使用的一种方式,当数据源每一次被选择的对象还需要进行查询的时候,这种方式可以保证选择集是动态的,而且在数据源改变的时候自动变化。Snapshot类型选择集数度最快,而且一但选择集构造完成后就不再要求与数据源发生查询,但是它对少量数据是有效的,如果选择的数据多,占用内存大时,它的优势就发挥不出来了;Hybird类型选择集包含了前两者的有点,它可以依据选择数据的大小而自动选用不同的选择方式,但是这个选择数据的大小并不能由程序来控制。
Tags: GIS
幻の小屋
|
软件&技术
|