• 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();
                }
            }
  • 相关阅读:
    Python:字母图形(蓝桥杯)
    Python:list列表中元素输出的几种情况
    Python:实现杨辉三角(蓝桥杯)
    Python:DataFrame转dict字典
    RedHat 5 Enterprise DHCP服务器的安装与配置(Windows验证)
    Python时间模块。
    django项目中form表单和ajax的文件上传功能。
    django项目后台权限管理功能。
    django项目中cxselect三级联动
    django项目用higcharts统计最近七天文章点击量。
  • 原文地址:https://www.cnblogs.com/joysky/p/4030279.html
Copyright © 2020-2023  润新知