• 选择集的秘密(ZZ)


    选择集的秘密

    Posted by 蒋波涛 29 May,2005 Views 1093 (4)Comment
    map对象在ARCMAP里面是一个核心的组成部分,我们需要认识到MAP对象具有两面性,一方面是数据的容器,一方面是数据的显示器,做容器的时候,实现的是imap接口;做显示器的时候,实行的是iactiveview接口。要素选择集不是特殊的对象,仅仅是要素的特殊状态。
    在ARCMAP里面能够显示出来的图形分为两部分,一是放在数据库里面的要素feature,一个是放在MXD文件里面的元素element。而在要素和元素中,有一种特殊的“状态”——选择集。当我们在map中选择了一些要素后,这些要素的边界会显亮,这些要素就处于选择集selection的状态了。
    要素Selection是一个ifeaturelayer对象的要素选择集,它是与某个图层联系起来的,也是包含在某个图层中的,实际上,featureselection并不是特殊的对象,它也是一个要素,但是这个要素仅仅是被标识为“被选择的状态”而没有放到一个特殊的地方。
    尽管要素选择集是与某个图层相关的,虽然map对象并没有直接持有这些选择集,但是它毕竟是这些选择集的二级容器,map提供了一个方法featureselection属性,这个属性将返回map中所有含有的selection;提供了selectByShape,这个方法可以选择map内所有图层的要素选择集;提供了selectFeature,这个方法可以把选择的要素放入某个图层的选择集中去。
    要素选择集里面放的都是要素对象,看下面的代码:
    Dim pEnumFeat as iEnumFeature
    pEnumFeat=pMap.featureselection
    Arcmap里面的selections有两种,feature selections和element selections,这两种都实现了iselectionset接口。在返回值的时候,前者都使用ienumfeature,后者常常使用ienumElement。当使用imap::featureselection获取的selection,我们还可以在这个里面做二次查询,这种做法是经常的。
    如果是通过IActiveView::Selection获得selection,那么获得的Selection不是feature selection就是element selection,每次只能是一种,它取决于iactiveview的类型。
    IenumFeature中包含的selection是来自map对象所有的featurelayer的。尽管每个featurelayer都有iselectionset和ienumfeature接口,但是它们只能查询本身的selection。由于ienumfeature是负责全部的图层,因此不能去查看某个feature属于哪个featurelayer。
    我们下面来总结一下:
     Imap::featureselection 获取map内全部的selection,返回为ienumfeature
     Imap::selectByShape 通过一个形状生成map内所有图层中符合范围的要素选择集
     Imap:: SelectFeature (Layer, Feature ) 将选择的pfeat放如layer作为layer的选择集
     IfeatureSelection 是一个featurelayer的接口,管理具体某个图层的选择集
    因此,当我们把一个要素设置为选择集后并且显示出来,其实是使用了MAP对象的两种身份,当我们清楚选择集的时候,也必须对这两部分做操作,一个是imap::clearselection,一个是iactiveview.refresh.
  • 相关阅读:
    职业规划书
    阿里云mysql安装配置(CentOS 7.3 64)
    在mvc中弹出提示框
    俺的博客开通啦
    sql中计算列小解
    ext的grid 获取页面内容方式
    2条路 代码生成 or 配置 2.1
    ext做列表页面关于查询多行的办法
    .net下开发windows服务的经验
    微软.net下 charting 要注意的事情
  • 原文地址:https://www.cnblogs.com/zhangjun1130/p/1854652.html
Copyright © 2020-2023  润新知