使用CopyFeatures工具将要素类按属性条件分层

有些时候一个要素类包含了很多信息,例如城市的POI点信息,包含了医院、学校、商场、企事业单位、银行等等;而我们实际的使用需求是对这些POI信息分层,然后再做各自的处理。对于数据分层,通过ArcGIS CopyFeatures工具就可以轻松实现。下面所示为ArcGISEngine程序实现的数据分层代码:

     ///<summary>
        ///
要素类按条件分层
        /// </summary>
        /// <param name=
sFeatureClass>要分层的要素类</param>
        /// <param name=
sFilter>分层提取条件(如:Type= 002″)</param>
        /// <param name=
sNewFeatureClass>生成的新要素类名称(保存分层提取后的要素类)</param>
        private voidSplitFeatureClassByFilter(string sFeatureClass,string sFilter,stringsNewFeatureClass)
        {
            try
            {
               ESRI.ArcGIS.Geodatabase.IWorkspaceFactory pWorkspacefactory = newESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactory();
               ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace =pWorkspacefactory.OpenFromFile(@
C: emp2680-498.mdb, 0);
               IFeatureClass pFeatureClass = GetFeatureClass(pWorkspace, sFeatureClass,sFilter);
               IVariantArray parameters = new VarArrayClass();
               parameters.Add(pFeatureClass);
               parameters.Add(@
C:emp2680-498.mdb +\ + sNewFeatureClass);
               ESRI.ArcGIS.Geoprocessor.Geoprocessor pGeoPro = newESRI.ArcGIS.Geoprocessor.Geoprocessor();
               ESRI.ArcGIS.ConversionTools.FeatureClassToFeatureClass feaTofea = newESRI.ArcGIS.ConversionTools.FeatureClassToFeatureClass();
               pGeoPro.Execute(
CopyFeatures, parameters, null);
            }
            catch(Exception ex)
            {
               
            }
        }
        /// <summary>
        ///
根据条件提取要素
        /// </summary>
        /// <param name=
pWS>工作空间</param>
        /// <param name=
sTabName>要素类名称</param>
        /// <param name=
sAttrFilter>提取条件</param>
        /// <returns>
提取要素类(仅包含要提取的要素)</returns>
        private IFeatureClassGetFeatureClass(IWorkspace pWS, string sTabName, string sAttrFilter)
        {
            try
            {
               if (pWS == null || sTabName == null) return null;
               IFeatureWorkspace pFWS = pWS as IFeatureWorkspace;
               IFeatureClass pFC = null;
               pFC = pFWS.OpenFeatureClass(sTabName);
               IQueryDef pQueryDef = pFWS.CreateQueryDef();
               pQueryDef.Tables = sTabName;
               pQueryDef.WhereClause = sAttrFilter;
               IQueryName2 pQueryName = new FeatureQueryNameClass();
               pQueryName.PrimaryKey = pFC.OIDFieldName;
               pQueryName.QueryDef = pQueryDef;
               IDataset pDS = (IDataset)pFWS;
               IWorkspaceName pWSName = (IWorkspaceName)pDS.FullName;
               IDatasetName pDSName = (IDatasetName)pQueryName;
               pDSName.WorkspaceName = pWSName;
               IName pName = (IName)pQueryName;
               pFC = pName.Open() as IFeatureClass;
               return pFC;
            }
            catch
            {
               return null;
            }
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
属性基加密(Attribute-Based Encryption,ABE)是一种新兴的加密技术,它允许数据拥有者根据预定义的属性对数据进行加密,并授权给具有相应属性的用户。在这种情况下,分层可撤销ABE(Hierarchical Revocable ABE,HRA-ABE)被广泛研究和应用,它可以实现灵活的访问控制,同时支持撤销已经发布的密钥。 下面是一个示例代码实现: ``` from charm.toolbox.abenc import abenc_waters09 # 定义属性列表 attributes = ['doctor', 'nurse', 'staff'] # 初始化ABE加密器 abe = abenc_waters09.ABEncWaters09() # 生成主密钥对 pk, msk = abe.setup() # 生成策略(属性列表) policy = ','.join(attributes) # 生成密钥对 sk = abe.keygen(pk, msk, policy) # 加密数据 plaintext = b'This is a secret message.' ciphertext = abe.encrypt(pk, plaintext, policy) # 解密数据 decrypted_text = abe.decrypt(pk, sk, ciphertext) print('Plaintext:', plaintext) print('Decrypted text:', decrypted_text) ``` 在这个示例中,我们使用了Charm-crypto库中的ABE实现。首先,我们定义了属性列表,然后初始化ABE加密器并生成主密钥对。接下来,我们生成策略,即属性列表,并使用主密钥对和策略生成密钥对。然后,我们使用生成的公钥和策略加密数据,并使用生成的私钥解密数据。 在实现分层可撤销ABE时,我们可以使用属性树来组织属性,并使用策略树来表示访问控制策略。我们可以使用属性树中的节点来表示策略树中的属性和访问控制条件,并使用属性树中的边来表示属性之间的层次关系。我们可以使用撤销密钥来撤销已经发布的密钥,从而实现灵活的访问控制。 总之,属性基加密提供了一种灵活的访问控制方式,可以根据预定义的属性对数据进行加密,并授权给具有相应属性的用户。分层可撤销ABE则进一步扩展了这种访问控制方式,支持撤销已经发布的密钥,从而实现更加灵活和安全的数据访问控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值