要编码实现合并线状要素,在网上找了好多资料,大概都类似下面的代码,但是执行了之后都没什么效果,并没有合并,不知道为什么哦,请大神们给点意见吧!
//             Polyline pPolyline = null;
            ITopologicalOperator pTopologicalOperator;
            IFeature pFeatureTemp = pTypeArray[0] as IFeature;
            IGeometry pGeometry = pFeatureTemp.Shape;
            int jj = 1;
            while (jj < nFeatureCount)
            {
                pTopologicalOperator = pGeometry as ITopologicalOperator;
                pGeometry = ((IFeature)pTypeArray[jj]).Shape;
                pGeometry = pTopologicalOperator.Union(pGeometry as IGeometry);
                jj++;
            }
//             pPolyline = pGeometry as IPolyline;ArcEngine线状要素合并错误UnionArcEngine编辑

解决方案 »

  1.   

    以前做的项目,整个合并的函数如下
         
    private void MergeFeatures(List<int> OneFeatureArr
    {
                IFeatureLayer tFeatureLayer = tSelectLayer as IFeatureLayer;
                IFeatureClass pFeatureClass = tFeatureLayer.FeatureClass;
                var pDataset = pFeatureClass as IDataset;
                IWorkspace pWorkspace = pDataset.Workspace;       
                IFeatureWorkspace pFWs = pWorkspace as IFeatureWorkspace;
                pCommonFeaureWorkspace = pFWs;            IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pCommonFeaureWorkspace;
                pWorkspaceEdit.StartEditing(true);
                pWorkspaceEdit.StartEditOperation();            IFeatureLayer pFeatureLayer = tSelectLayer as IFeatureLayer;
                IFeatureCursor pEF = pFeatureLayer.Search(null, false);
                IFeature pFeatureFirst = pEF.NextFeature();
                while (pFeatureFirst != null)
                {//找到在数组里的第一个要素
                    if (pFeatureFirst.OID == OneFeatureArr[0])
                    {
                        //OneFeatureArr.RemoveAt(0);//除掉第一个要素
                        break;
                    }
                    else
                        pFeatureFirst = pEF.NextFeature();
                }
                pEF = pFeatureLayer.Search(null, false);            IGeometry pGeometryFirst = pFeatureFirst.Shape;
                ITopologicalOperator2 pTopOperatorFirst = (ITopologicalOperator2)pGeometryFirst;
                IRelationalOperator pRelOperatorFirst = (IRelationalOperator)pGeometryFirst;
                pTopOperatorFirst.IsKnownSimple_2 = false;
                pTopOperatorFirst.Simplify();
                pGeometryFirst.SnapToSpatialReference();            IGeometry pGeometrySecond=null;
                IFeature pFeatureSecond = pEF.NextFeature();            IGeometryCollection Geometrybag = new GeometryBagClass();//装geometry的袋子
                object oMissing = Type.Missing;
                while (pFeatureSecond != null)
                {
                    if (OneFeatureArr.IndexOf(pFeatureSecond.OID) == -1)
                    {
                        pFeatureSecond = pEF.NextFeature();
                        continue;
                    }
                    pGeometrySecond = pFeatureSecond.ShapeCopy;
                    Geometrybag.AddGeometry(pGeometrySecond, ref oMissing, ref oMissing);//将geometry装进袋子
                    pFeatureSecond = pEF.NextFeature();
                }
                IEnumGeometry tEnumGeometry =(IEnumGeometry) Geometrybag;
                pTopOperatorFirst.ConstructUnion(tEnumGeometry);            pTopOperatorFirst.IsKnownSimple_2 = false;
                pTopOperatorFirst.Simplify();
                pFeatureFirst.Shape = pGeometryFirst;
                pFeatureFirst.Store();            pWorkspaceEdit.StopEditOperation();
                pWorkspaceEdit.StopEditing(true);
    }