zoukankan      html  css  js  c++  java
  • C# ArcGIS Engine 线打断

    /// <summary>
            /// 打断线,用于在点击点处,打断该条线
            /// </summary>
            /// <param name="t_pLineFeatureClass">线图层</param>
            /// <param name="t_pPoint">点击的点</param>
            public static void SplitePolylineByHitPoint(IFeatureClass t_pLineFeatureClass, IPoint t_pPoint)
            {
    
                IFeatureClass pFeatureClass = t_pLineFeatureClass;
                IFeatureCursor pFeatureCursor;
                IFeature pFeature;
                pFeatureCursor = pFeatureClass.Search(null, false);
                pFeature = pFeatureCursor.NextFeature();
    
                IDataset dataset = (IDataset)pFeatureClass;
                IWorkspace workspace = dataset.Workspace;
                IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
    
                IRelationalOperator pRelationalOperator;
                //遍历featureClass找到点中的那条线
                while (pFeature != null)
                {
                    pRelationalOperator = (IRelationalOperator) pFeature.Shape;
                    bool bHasCrosses = pRelationalOperator.Contains(t_pPoint);
                    if (bHasCrosses)
                    {
                        //对那条线在点击点处,进行打断
                        IPolycurve pPolycurve = (IPolycurve) pFeature.Shape;
                        bool HasSplitHappened;
                        int newPartIndex;
                        int newSegmentIndex;
                        //打断
                        pPolycurve.SplitAtPoint(t_pPoint, false, true, out HasSplitHappened, out newPartIndex,
                            out newSegmentIndex);
                        if (HasSplitHappened)
                        {
                            //从GeometryCollection中分离出打断后的要素,并生成新的要素,并赋于属性
                            IFeature pNewFeature;
                            IGeometryCollection pGeometryCollection = (IGeometryCollection) pPolycurve;
    
                            for (int i = 0; i < pGeometryCollection.GeometryCount; i++)
                            {
                                //生成新的要素
                                workspaceEdit.StartEditing(false);
                                workspaceEdit.StartEditOperation();
                                pNewFeature = pFeatureClass.CreateFeature();
                                IGeometryCollection pline = new PolylineClass();
                                IGeometry pGeo = pGeometryCollection.get_Geometry(i);
                                pline.AddGeometries(1, ref pGeo);
                                pNewFeature.Shape = (IPolyline) pline;
                                pNewFeature.Store();
                                workspaceEdit.StopEditOperation();
                                workspaceEdit.StopEditing(true);
                                #region 属性复制(注释掉)
                                //IRow pRow = (IRow) pFeature;
                                //int intIndex = pRow.Fields.FindField("CRoadID");
                                //进行属性复制
                                //for (int k = 2; k < pRow.Fields.FieldCount - 3; k++) //前后几个属性字段不添加
                                //{
                                //    if (pRow.Fields.get_Field(k).Name == "Shape_Length")
                                //    {
                                //        continue;
                                //    }
                                //    if (k != intIndex)
                                //    {
                                //        if (!pRow.get_Value(k).ToString().Equals(""))
                                //        {
    
                                //            pNewFeature.set_Value(k, pRow.get_Value(k));
                                //        }
                                //    }
                                //    else
                                //    {
                                //        if (k == 0)
                                //        {
                                //            if (!pRow.get_Value(k).ToString().Equals(""))
                                //            {
                                //                pNewFeature.set_Value(k, pRow.get_Value(k));
                                //            }
                                //        }
                                //        else
                                //        {
    
                                //            if (!pRow.get_Value(k).ToString().Equals(""))
                                //            {
                                //                int intNO = System.Convert.ToInt32(pRow.get_Value(k).ToString()) + 1000*i;
                                //                pNewFeature.set_Value(k, intNO);
                                //            }
                                //        }
                                //    }
                                //}
                                //pNewFeature.Store();
                                #endregion
                            }
                            pFeature.Delete();
                        }
                    }
                    pFeature = pFeatureCursor.NextFeature();
                }
            }
  • 相关阅读:
    文件操作
    数据补充
    小数据池
    列表
    基础知识1
    我的Python之旅开始
    正则
    模块
    迭代器与生成器
    文件操作
  • 原文地址:https://www.cnblogs.com/joysky/p/4030279.html
Copyright © 2011-2022 走看看