示例#1
0
        /// <summary>
        /// Sets a join based on the specified relationship class and join type.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="foreignClass">The join.</param>
        /// <param name="layerKeyField">Name of the layer field.</param>
        /// <param name="foreignKeyField">Name of the join field.</param>
        /// <param name="cardinality">The cardinality.</param>
        /// <param name="joinType">Type of the join.</param>
        /// <returns>
        /// Returns a <see cref="IRelQueryTable" /> represents the table and feature join.
        /// </returns>
        public static IRelQueryTable Add(this IFeatureLayer source, IObjectClass foreignClass, string layerKeyField, string foreignKeyField, esriRelCardinality cardinality, esriJoinType joinType)
        {
            IRelQueryTable     result;
            IRelationshipClass relClass;
            var table = ((IDisplayTable)source).DisplayTable as IRelQueryTable;

            if (table != null)
            {
                result   = source.Add(table, foreignClass, string.Format("{0}.{1}", ((IDataset)source.FeatureClass).Name, layerKeyField), foreignKeyField, cardinality, joinType);
                relClass = result.RelationshipClass;
            }
            else
            {
                var layer = (IFeatureClass)((IDisplayTable)source).DisplayTable;
                relClass = layer.Join(foreignClass, layerKeyField, foreignKeyField, cardinality, null);

                var factory = new RelQueryTableFactoryClass();
                result = factory.Open(relClass, true, null, null, "", true, joinType == esriJoinType.esriLeftInnerJoin);
            }

            IDisplayRelationshipClass display = (IDisplayRelationshipClass)source;

            display.DisplayRelationshipClass(relClass, joinType);

            return(result);
        }
示例#2
0
        /// <summary>
        /// Join Urban-rural Devide Table
        /// </summary>
        /// <param name="layer"></param>
        /// <param name="year"></param>
        /// <author>Shen Yongyuan</author>
        /// <date>20091111</date>
        public static void JoinDevideTable(ILayer layer, int year, string city)
        {
            //Add Fields
            IFieldsEdit allFields = new FieldsClass();
            IFieldEdit  field1    = new FieldClass();

            field1.Name_2 = "ID";
            field1.Type_2 = esriFieldType.esriFieldTypeString;
            allFields.AddField(field1);
            IFieldEdit field2 = new FieldClass();

            field2.Name_2 = Town.Constant.Constant.TmpFieldName;
            field2.Type_2 = esriFieldType.esriFieldTypeString;
            allFields.AddField(field2);

            //Create Table
            IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass();
            IWorkspaceName    workspaceName    = workspaceFactory.Create("", "Temporary WorkSpace In Memory", null, 0);
            IFeatureWorkspace workspace        = ((IName)workspaceName).Open() as IFeatureWorkspace;
            ITable            table            = workspace.CreateTable(Town.Constant.Constant.TmpTableDevide, allFields, null, null, "");

            //Import Data
            IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;

            workspaceEdit.StartEditing(false);
            workspaceEdit.StartEditOperation();
            ICursor cursor    = table.Insert(true);
            int     fldField1 = cursor.Fields.FindField("ID");
            int     fldField2 = cursor.Fields.FindField(Town.Constant.Constant.TmpFieldName);


            //Query and Import
            Dictionary <int, string> devideResult = DataLib.DA_Devide.GetDevideResult(year, city);

            foreach (KeyValuePair <int, string> d in devideResult)
            {
                IRowBuffer buffer = table.CreateRowBuffer();
                buffer.set_Value(fldField1, d.Key.ToString());
                buffer.set_Value(fldField2, d.Value);
                cursor.InsertRow(buffer);
            }

            cursor.Flush();
            workspaceEdit.StartEditOperation();
            workspaceEdit.StopEditing(true);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(cursor);

            //Join
            IMemoryRelationshipClassFactory pMemRelFact = new MemoryRelationshipClassFactory();
            IFeatureLayer      feaLayer    = layer as IFeatureLayer;
            ITable             originTable = feaLayer.FeatureClass as ITable;
            IRelationshipClass pRelClass   = pMemRelFact.Open("Join", originTable as IObjectClass, "ID",
                                                              table as IObjectClass, "ID", "forward", "backward",
                                                              esriRelCardinality.esriRelCardinalityOneToOne);
            IDisplayRelationshipClass pDispRC = feaLayer as IDisplayRelationshipClass;

            pDispRC.DisplayRelationshipClass(null, esriJoinType.esriLeftOuterJoin);
            pDispRC.DisplayRelationshipClass(pRelClass, esriJoinType.esriLeftOuterJoin);
        }
示例#3
0
        private static IUniqueValueRenderer GenerateUniqueValueRenderer(IFeatureLayer featureLayer)
        {
            IFeatureWorkspace featureWorkspace = ((IDataset)featureLayer.FeatureClass).Workspace as IFeatureWorkspace;
            ITable            table            = featureWorkspace.OpenTable(TableName);

            string             relClassName = string.Format("{0}_{1}", ((IDataset)featureLayer.FeatureClass).Name, ((IDataset)table).Name);
            IRelationshipClass relClass     = featureWorkspace.OpenRelationshipClass(relClassName);

            IDisplayRelationshipClass displayRelClass = featureLayer as IDisplayRelationshipClass;

            if (displayRelClass == null)
            {
                return(null);
            }
            displayRelClass.DisplayRelationshipClass(relClass, esriJoinType.esriLeftOuterJoin);

            IUniqueValueRenderer uvRenderer = new UniqueValueRendererClass {
                FieldCount = 1
            };

            uvRenderer.Field[0] = string.Format("{0}.{1}", ((IDataset)table).Name, JoinField);

            IFeatureCursor      cursor         = ((IGeoFeatureLayer)featureLayer).SearchDisplayFeatures(null, true);
            DataStatisticsClass dataStatistics = new DataStatisticsClass
            {
                Field  = uvRenderer.Field[0],
                Cursor = cursor as ICursor
            };

            IEnumerator pEnumerator = dataStatistics.UniqueValues;

            pEnumerator.Reset();

            Random random = new Random();

            while (pEnumerator.MoveNext())
            {
                string value = Convert.ToString(pEnumerator.Current);

                RgbColorClass fillColor = new RgbColorClass
                {
                    Red   = random.Next(0, 255),
                    Green = random.Next(0, 255),
                    Blue  = random.Next(0, 255)
                };

                SimpleFillSymbolClass fillSymbol = new SimpleFillSymbolClass {
                    Color = fillColor
                };

                uvRenderer.AddValue(value, "ZONE", fillSymbol);
            }

            Marshal.ReleaseComObject(cursor);
            return(uvRenderer);
        }
示例#4
0
        private void btnRemoveJoining_Click(object sender, EventArgs e)
        {
            IDisplayTable table        = this.itable_0 as IDisplayTable;
            ITable        displayTable = table.DisplayTable;

            if (displayTable is IRelQueryTable)
            {
                string str = this.JoiningDataList.SelectedItem.ToString();
                while (displayTable is IRelQueryTable)
                {
                    IRelQueryTable table3 = displayTable as IRelQueryTable;
                    if ((table3.DestinationTable as IDataset).Name == str)
                    {
                        break;
                    }
                    displayTable = table3.SourceTable;
                }
                if (displayTable is IRelQueryTable)
                {
                    IRelQueryTable table5 = displayTable as IRelQueryTable;
                    displayTable = table5.SourceTable;
                    IDisplayRelationshipClass class2 = this.itable_0 as IDisplayRelationshipClass;
                    if (displayTable is IRelQueryTable)
                    {
                        table5 = displayTable as IRelQueryTable;
                        IRelQueryTableInfo info = table5 as IRelQueryTableInfo;
                        class2.DisplayRelationshipClass(table5.RelationshipClass, info.JoinType);
                    }
                    else
                    {
                        class2.DisplayRelationshipClass(null, esriJoinType.esriLeftInnerJoin);
                    }
                    this.JoiningDataList.Items.Clear();
                    if (this.OnJoinAndRelationChange != null)
                    {
                        this.OnJoinAndRelationChange();
                    }
                    this.method_1(this.itable_0);
                    if (this.JoiningDataList.Items.Count > 0)
                    {
                        this.btnRemoveAllJoining.Enabled = true;
                    }
                    else
                    {
                        this.btnRemoveAllJoining.Enabled = false;
                    }
                }
            }
        }
示例#5
0
        private void btnRemoveAllJoining_Click(object sender, EventArgs e)
        {
            IDisplayRelationshipClass class2 = this.itable_0 as IDisplayRelationshipClass;

            if (class2 != null)
            {
                class2.DisplayRelationshipClass(null, esriJoinType.esriLeftInnerJoin);
                this.JoiningDataList.Items.Clear();
                if (this.OnJoinAndRelationChange != null)
                {
                    this.OnJoinAndRelationChange();
                }
                this.btnRemoveAllJoining.Enabled = false;
            }
        }
示例#6
0
 private void method_2(IDisplayRelationshipClass idisplayRelationshipClass_0, IRelQueryTable irelQueryTable_0)
 {
     try
     {
         IRelationshipClass relationshipClass = irelQueryTable_0.RelationshipClass;
         if (relationshipClass != null)
         {
             idisplayRelationshipClass_0.DisplayRelationshipClass(relationshipClass,
                                                                  idisplayRelationshipClass_0.JoinType);
         }
     }
     catch
     {
     }
 }
示例#7
0
        /// <summary>
        ///     Sets a join based on the specified relationship class and join type.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="table">The table.</param>
        /// <param name="foreignClass">The join.</param>
        /// <param name="layerKeyField">Name of the layer field.</param>
        /// <param name="foreignKeyField">Name of the join field.</param>
        /// <param name="cardinality">The cardinality.</param>
        /// <param name="joinType">Type of the join.</param>
        /// <returns>
        /// Returns a <see cref="IRelQueryTable" /> represents the table and feature join.
        /// </returns>
        public static IRelQueryTable Add(this IFeatureLayer source, IRelQueryTable table, IObjectClass foreignClass, string layerKeyField, string foreignKeyField, esriRelCardinality cardinality, esriJoinType joinType)
        {
            if (source != null)
            {
                var factory = new RelQueryTableFactoryClass();
                var origin  = factory.Open(table.RelationshipClass, true, null, null, "", true, ((IRelQueryTableInfo)table).JoinType == esriJoinType.esriLeftInnerJoin);

                var join   = ((IObjectClass)origin).Join(foreignClass, string.Format("{0}.{1}", ((IDataset)table.SourceTable).Name, layerKeyField), foreignKeyField, cardinality, null);
                var result = factory.Open(join, true, null, null, "", true, joinType == esriJoinType.esriLeftInnerJoin);

                IDisplayRelationshipClass display = (IDisplayRelationshipClass)source;
                display.DisplayRelationshipClass(result.RelationshipClass, joinType);

                return(result);
            }

            return(null);
        }
示例#8
0
        /// <summary>
        ///     Removes all of the joins on the feature layer.
        /// </summary>
        /// <param name="source">The source.</param>
        public static void RemoveAll(this IFeatureLayer source)
        {
            IDisplayRelationshipClass display = (IDisplayRelationshipClass)source;

            display.DisplayRelationshipClass(null, esriJoinType.esriLeftInnerJoin);
        }
示例#9
0
        private void frmSetLabel_Load(object sender, EventArgs e)
        {
            //获取字段
            IFields pFields   = null;
            string  FieldName = "";

            if (pGeoFeatLayer != null)
            {
                IDisplayRelationshipClass pDisResCls = pGeoFeatLayer as IDisplayRelationshipClass;
                if (pDisResCls.RelationshipClass != null)
                {
                    //如果进行了联表查询,则图层的字段名称发生了变化,通过将“层名”和“原字段名称”组合起来形成新的字段名称
                    //加载到CmbFields中
                    string pLayerName = pGeoFeatLayer.Name;//获得图层名
                    pFields = pGeoFeatLayer.FeatureClass.Fields;
                    for (int i = 0; i < pFields.FieldCount; i++)
                    {
                        //遍历图层的字段,将“图层名”和“字段名”组合起来
                        FieldName = pFields.get_Field(i).Name;
                        if (FieldName.ToLower() == "shape")
                        {
                            continue;                                //如果是几何字段,则过滤掉
                        }
                        if (FieldName.ToLower() == "objectid")
                        {
                            continue;                                   //如果是ID过滤
                        }
                        FieldName = pLayerName + "." + FieldName;
                        CmbFields.Items.Add(FieldName);
                    }
                }
                else
                {
                    //没有进行联表查询,则直接将字段的名称加载到CmbFields中
                    pFields = pGeoFeatLayer.FeatureClass.Fields;
                    for (int i = 0; i < pFields.FieldCount; i++)
                    {
                        FieldName = pFields.get_Field(i).Name;
                        if (FieldName.ToLower() == "shape")
                        {
                            continue;
                        }
                        if (FieldName.ToLower() == "objectid")
                        {
                            continue;//如果是ID过滤
                        }
                        CmbFields.Items.Add(FieldName);
                    }
                }
                CmbFields.SelectedIndex = 0;
            }
            //获取字体名称
            System.Drawing.Text.InstalledFontCollection FontsCol = new System.Drawing.Text.InstalledFontCollection();
            foreach (System.Drawing.FontFamily family in FontsCol.Families)
            {
                CmbFontName.Items.Add(family.Name);
            }
            //获取字体大小
            for (int i = 1; i < 30; i++)
            {
                CmbFontSize.Items.Add(i);
            }
        }
示例#10
0
        /// <summary>
        /// Join Complex Index Table
        /// </summary>
        /// <param name="layer"></param>
        /// <param name="year"></param>
        /// <author>Shen Yongyuan</author>
        /// <date>20091111</date>
        public static void JoinComplexTable(ILayer layer, int year, string city, bool normal)
        {
            //Add Fields
            IFieldsEdit allFields = new FieldsClass();
            IFieldEdit  field1    = new FieldClass();

            field1.Name_2 = "ID";
            field1.Type_2 = esriFieldType.esriFieldTypeString;
            allFields.AddField(field1);
            IFieldEdit field2 = new FieldClass();

            field2.Name_2 = "Ecology";
            field2.Type_2 = esriFieldType.esriFieldTypeDouble;
            allFields.AddField(field2);
            IFieldEdit field3 = new FieldClass();

            field3.Name_2 = "Social";
            field3.Type_2 = esriFieldType.esriFieldTypeDouble;
            allFields.AddField(field3);
            IFieldEdit field4 = new FieldClass();

            field4.Name_2 = "Economic";
            field4.Type_2 = esriFieldType.esriFieldTypeDouble;
            allFields.AddField(field4);

            //Create Table
            IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass();
            IWorkspaceName    workspaceName    = workspaceFactory.Create("", "Temporary WorkSpace In Memory", null, 0);
            IFeatureWorkspace workspace        = ((IName)workspaceName).Open() as IFeatureWorkspace;
            ITable            table            = workspace.CreateTable(Town.Constant.Constant.TmpTableIndex, allFields, null, null, "");


            //Import Data
            IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;

            workspaceEdit.StartEditing(false);
            workspaceEdit.StartEditOperation();
            ICursor cursor    = table.Insert(true);
            int     fldField1 = cursor.Fields.FindField("ID");
            int     fldField2 = cursor.Fields.FindField("Ecology");
            int     fldField3 = cursor.Fields.FindField("Social");
            int     fldField4 = cursor.Fields.FindField("Economic");

            IQueryable <DataLib.I_INDEX> indexCollect = DataLib.DA_Index.QueryIndex(year, city);
            List <int> OIDList = new List <int>();

            foreach (DataLib.I_INDEX i in indexCollect)
            {
                if (OIDList.Contains(i.I_ZONE.OID) == false)
                {
                    double EcologyValue  = indexCollect.Where(c => c.Name.Equals("生态子系统综合指标") && c.Zone == i.Zone).Single().Value;
                    double SocialValue   = indexCollect.Where(c => c.Name.Equals("社会子系统综合指标") && c.Zone == i.Zone).Single().Value;
                    double EconomicValue = indexCollect.Where(c => c.Name.Equals("经济子系统综合指标") && c.Zone == i.Zone).Single().Value;

                    //if (normal == true)
                    //{
                    //    EcologyValue += Math.Abs(DataLib.DA_Index.QueryIndex("生态子系统综合指标", city).Min(c => c.Value)) + 1;
                    //    SocialValue += Math.Abs(DataLib.DA_Index.QueryIndex("社会子系统综合指标", city).Min(c => c.Value)) + 1;
                    //    EconomicValue += Math.Abs(DataLib.DA_Index.QueryIndex("经济子系统综合指标", city).Min(c => c.Value)) + 1;
                    //}

                    EcologyValue  = Math.Abs(EcologyValue);
                    SocialValue   = Math.Abs(SocialValue);
                    EconomicValue = Math.Abs(EconomicValue);
                    IRowBuffer buffer = table.CreateRowBuffer();
                    buffer.set_Value(fldField1, i.I_ZONE.OID);
                    buffer.set_Value(fldField2, EcologyValue);
                    buffer.set_Value(fldField3, SocialValue);
                    buffer.set_Value(fldField4, EconomicValue);
                    cursor.InsertRow(buffer);

                    OIDList.Add(i.I_ZONE.OID);
                }
            }

            cursor.Flush();
            workspaceEdit.StartEditOperation();
            workspaceEdit.StopEditing(true);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(cursor);


            //Join
            IMemoryRelationshipClassFactory pMemRelFact = new MemoryRelationshipClassFactory();
            IFeatureLayer      feaLayer    = layer as IFeatureLayer;
            ITable             originTable = feaLayer.FeatureClass as ITable;
            IRelationshipClass pRelClass   = pMemRelFact.Open("Join", originTable as IObjectClass, "ID",
                                                              table as IObjectClass, "ID", "forward", "backward",
                                                              esriRelCardinality.esriRelCardinalityOneToOne);
            IDisplayRelationshipClass pDispRC = feaLayer as IDisplayRelationshipClass;

            pDispRC.DisplayRelationshipClass(null, esriJoinType.esriLeftOuterJoin);
            pDispRC.DisplayRelationshipClass(pRelClass, esriJoinType.esriLeftOuterJoin);
        }
示例#11
0
        /// <summary>
        /// Join Index
        /// </summary>
        /// <param name="layer"></param>
        /// <param name="year"></param>
        /// <author>Shen Yongyuan</author>
        /// <date>20091111</date>
        public static void JoinIndexTable(ILayer layer, string indexName, int year, string city, bool normal)
        {
            //Add Fields
            IFieldsEdit allFields = new FieldsClass();
            IFieldEdit  field1    = new FieldClass();

            field1.Name_2 = "ID";
            field1.Type_2 = esriFieldType.esriFieldTypeString;
            allFields.AddField(field1);
            IFieldEdit field2 = new FieldClass();

            field2.Name_2 = Town.Constant.Constant.TmpFieldName;
            field2.Type_2 = esriFieldType.esriFieldTypeDouble;
            allFields.AddField(field2);

            //Create Table
            IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass();
            IWorkspaceName    workspaceName    = workspaceFactory.Create("", "Temporary WorkSpace In Memory", null, 0);
            IFeatureWorkspace workspace        = ((IName)workspaceName).Open() as IFeatureWorkspace;
            ITable            table            = workspace.CreateTable(Town.Constant.Constant.TmpTableIndex, allFields, null, null, "");

            //Import Data
            IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;

            workspaceEdit.StartEditing(false);
            workspaceEdit.StartEditOperation();
            ICursor cursor    = table.Insert(true);
            int     fldField1 = cursor.Fields.FindField("ID");
            int     fldField2 = cursor.Fields.FindField(Town.Constant.Constant.TmpFieldName);

            IQueryable <DataLib.I_INDEX> indexCollect = DataLib.DA_Index.QueryIndex(indexName, city).Where(c => c.FromDate.Year == year);

            foreach (DataLib.I_INDEX index in indexCollect)
            {
                IRowBuffer buffer = table.CreateRowBuffer();
                buffer.set_Value(fldField1, index.I_ZONE.OID);
                if (normal == false)
                {
                    buffer.set_Value(fldField2, index.Value);
                }
                else if (normal == true && DataLib.DA_Index.QueryIndex(indexName, city).Min(c => c.Value) > 0)
                {
                    buffer.set_Value(fldField2, index.Value);
                }
                else
                {
                    buffer.set_Value(fldField2, index.Value + Math.Abs(DataLib.DA_Index.QueryIndex(indexName, city).Min(c => c.Value)) + 1);
                }
                cursor.InsertRow(buffer);
            }

            cursor.Flush();
            workspaceEdit.StartEditOperation();
            workspaceEdit.StopEditing(true);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(cursor);

            //Join
            IMemoryRelationshipClassFactory pMemRelFact = new MemoryRelationshipClassFactory();
            IFeatureLayer      feaLayer    = layer as IFeatureLayer;
            ITable             originTable = feaLayer.FeatureClass as ITable;
            IRelationshipClass pRelClass   = pMemRelFact.Open("Join", originTable as IObjectClass, "ID",
                                                              table as IObjectClass, "ID", "forward", "backward",
                                                              esriRelCardinality.esriRelCardinalityOneToOne);
            IDisplayRelationshipClass pDispRC = feaLayer as IDisplayRelationshipClass;

            pDispRC.DisplayRelationshipClass(null, esriJoinType.esriLeftOuterJoin);
            pDispRC.DisplayRelationshipClass(pRelClass, esriJoinType.esriLeftOuterJoin);
        }
示例#12
0
        //========================================================================================
        //陈胜鹏  2009-08-19  添加
        /// <summary>
        /// 融合选择集中的要素
        /// </summary>
        /// <param name="pSelectionSet">选择集对象,从中取出需要融合的要素</param>
        /// <param name="pMergeLayer">发生融合的要素所在图层</param>
        /// <param name="OID">被保留的要素OID</param>
        private void MergeSelectedFeature(ISelectionSet pSelectionSet, IFeatureLayer pMergeLayer, int OID)
        {
            //判断是否满足融合条件
            bool CanMerge = JudgeCondition();

            //OID = 0;
            //如果满足融合的判定条件才能开始进行融合(这里主要分几何条件和属性条件)
            if (CanMerge)
            {
                IEnumIDs pEnumIDs;                                                         //枚举要素变量
                Dictionary <int, IFeature> pDicFeature = new Dictionary <int, IFeature>(); //存储多个需要融合的要素的字典
                int                  FtID     = 0;                                         //要素OID
                IGeometry            pGeoTemp = null;                                      //存储融合后的要素图形
                ITopologicalOperator pTopoOperator;
                IFeature             pFt         = null;
                int                  pTempFeatID = 0;

                IFeatureClass pFeatCls = pMergeLayer.FeatureClass;

                pEnumIDs = pSelectionSet.IDs;
                FtID     = pEnumIDs.Next();

                //初始化临时要素图形
                pTempFeatID = FtID;
                pGeoTemp    = pFeatCls.GetFeature(pTempFeatID).Shape;
                pDicFeature.Add(FtID, pFeatCls.GetFeature(pTempFeatID));  //记录遍历到的要素ID

                FtID = pEnumIDs.Next();
                while (FtID != -1)
                {
                    //获得需要融合的第二个要素
                    pFt = pFeatCls.GetFeature(FtID);
                    pDicFeature.Add(FtID, pFt);  //记录遍历到的要素ID

                    //融合要素的图形
                    pTopoOperator = pGeoTemp as ITopologicalOperator;
                    pGeoTemp      = pTopoOperator.Union(pFt.ShapeCopy);

                    //临时图形进行简单化
                    pTopoOperator = pGeoTemp as ITopologicalOperator;
                    pTopoOperator.Simplify();

                    //下一个要素
                    FtID = pEnumIDs.Next();
                }

                //获取第一个保留的要素,赋给它融合后的图形,并保存
                pFt       = pFeatCls.GetFeature(OID);
                pFt.Shape = pGeoTemp;

                //处理设置FID、state不一致问题 wjj 20090903
                IDisplayRelationshipClass pDisResCls = pMergeLayer as IDisplayRelationshipClass;
                if (pDisResCls.RelationshipClass != null)     //是否与日志记录表做了联表查询
                {
                    //获取图幅结合表
                    IFeatureLayer pFeatLay = ModPublic.GetLayerOfGroupLayer(myHook.MapControl, "范围", "图幅范围") as IFeatureLayer;
                    if (pFeatLay != null)
                    {
                        ChangeFeatureState(pDisResCls.RelationshipClass, pFt, pDicFeature, pFeatLay.FeatureClass);
                    }
                }

                pFt.Store();

                //删除被融合的要素
                foreach (KeyValuePair <int, IFeature> var in pDicFeature)
                {
                    if (var.Key != OID)
                    {
                        pFt = pFeatCls.GetFeature(var.Key);
                        pFt.Delete();
                    }
                }

                pDicFeature = null;
            }
        }
示例#13
0
文件: GJoin.cs 项目: truonghinh/TnX
        void IJoin.Perform()
        {
            _relClassEdit = (IRelationshipClassCollectionEdit)_featureLayer;
            _relClassEdit.RemoveAllRelationshipClasses();

            _geoFeatureLayer = (IGeoFeatureLayer)_featureLayer;

            _dspRel = (IDisplayRelationshipClass)_geoFeatureLayer;

            _memRelFact = new MemoryRelationshipClassFactoryClass();

            IObjectClass tblObj = (IObjectClass)_table;
            _relClass = _memRelFact.Open("test", _geoFeatureLayer.FeatureClass, _joinFieldOnLayer, tblObj, _joinFieldOnTable,
                "Forwards", "Backwards", _cardinality);
            _dspRel.DisplayRelationshipClass(_relClass, _type);
        }