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();
                }
            }
  • 相关阅读:
    web.py利用模板的详细步骤
    Arduino入门笔记(9):蓝牙模块及第一辆蓝牙遥控小车
    Python常用模块之sys
    使用Supervisor管理Linux进程
    Python socket聊天室程序
    Ubuntu 文件文件夹查看权限和设置权限
    python遍历目录
    linux tail命令的使用方法详解
    Python使用openpyxl读写excel文件
    python中enumerate()的用法
  • 原文地址:https://www.cnblogs.com/joysky/p/4030279.html
Copyright © 2011-2022 走看看