/// <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 = ; i < pGeometryCollection.GeometryCount; i++)
{
//生成新的要素
workspaceEdit.StartEditing(false);
workspaceEdit.StartEditOperation();
pNewFeature = pFeatureClass.CreateFeature();
IGeometryCollection pline = new PolylineClass();
IGeometry pGeo = pGeometryCollection.get_Geometry(i);
pline.AddGeometries(, 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();
}
}

C# ArcGIS Engine 线打断的更多相关文章

  1. ArcGIS Engine中添加点、线、面元素

    转自原文 ArcGIS Engine中添加点.线.面元素 此种方式为IElement的方式在axMapControl的GraphicsContainer中好绘制图形. //画点 IPoint pt = ...

  2. ArcGIS Engine开发之图形查询

    图形查询是以用户通过鼠标操作生成的图形几何体为输入条件进行查询的查询,其查询结果为该几何体空间范围内的所有要素.常用的查询方式包括点选.线选.多边形选择.圆形选择和矩形选择等. 相关类与接口 图像查询 ...

  3. ArcGIS Engine开发之地图基本操作(3)

    地图数据的加载 一.加载Shapefile数据 Shapefile文件是目前主流的一种空间数据的文件存储方式,也是不同GIS软件进行数据格式转换常用的中间格式.加载Shapefile数据的方式有两种: ...

  4. 【转载】Python与ArcGIS Engine的集成

    本文转载自Fransico<Python与ArcGIS Engine的集成>   1 在Python中调用AO类库 1.1  准备工作 本文所使用环境:ArcGIS 10.0.Python ...

  5. ArcGIS Engine环境下创建自定义的ArcToolbox Geoprocessing工具

    在上一篇日志中介绍了自己通过几何的方法合并断开的线要素的ArcGIS插件式的应用程序.但是后来考虑到插件式的程序的配置和使用比较繁琐,也没有比较好的错误处理机制,于是我就把之前的程序封装成一个类似于A ...

  6. ArcGIS Engine开发之旅05---空间数据库

    原文:ArcGIS Engine开发之旅05---空间数据库 1  Geodatabase概念 Geodatabase是ArcInfo8引入的一种全新的面向对象的空间数据模型,是建立在DBMS之上的统 ...

  7. ArcGIS Engine开发之旅04---ARCGIS接口详细说明

    原文:ArcGIS Engine开发之旅04---ARCGIS接口详细说明 ArcGIS接口详细说明... 1 1.      IField接口(esriGeoDatabase)... 2 2.    ...

  8. ArcGIS Engine开发之旅02--ArcGIS Engine中的类库

    原文:ArcGIS Engine开发之旅02--ArcGIS Engine中的类库 System类库 System类库是ArcGIS体系结构中最底层的类库.System类库包含给构成ArcGIS的其他 ...

  9. [转载]ArcGIS Engine 中的多线程使用

    ArcGIS Engine 中的多线程使用 原文链接 http://anshien.blog.163.com/blog/static/169966308201082441114173/   一直都想写 ...

随机推荐

  1. 覆盖率測试工具gcov的前端工具_LCOV_简单介绍

    1.Gcov是进行代码运行的覆盖率统计的工具.它随着gcc的公布一起公布的,它的使用也非常easy,须要在编译和链接的时候加上-fprofile-arcs -ftest-coverage生成二进制文件 ...

  2. zzulioj--1787--生活危机(vector+dfs 好题)

    1787: 生化危机 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 97  Solved: 29 SubmitStatusWeb Board Desc ...

  3. NOIP2017 小凯的疑惑 解题报告(赛瓦维斯特定理)

    题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...

  4. TabHost的自定义

    使用自定义的TabHost可以不用继承TabActicity,但是要注意的是如果使用Activity作为Content的话,有两处代码是一定要加的.不然就会出现RuntimeError,还有在XML布 ...

  5. 关于概率算法的问题,不知道逻辑错在哪里,求debug

    做个骰子成功几率的分析,投n颗骰子,第一次投成功的几率是a,然后投成功的骰子,需要再投1次,这次成功的几率是b.第二次成功的骰子才算最终成功. 要分析出n颗骰子,最终成功0到n颗的概率. 我写了个算法 ...

  6. EasyUI--Alert()

    1.$.messager.alert(title, msg, icon, fn) 2 <script type="text/javascript"> $(functio ...

  7. python中修改函数内部的变量会发生什么

    最近写python遇到个函数内部变量使用外部变量的问题,现在总结下吧 #!/usr/bin/env python a = 100def su(): a = a + 1 print(a) s = su( ...

  8. Javascript中继承

    Javascript中继承 构造函数继承 原型继承 call和apply继承 组合继承

  9. git diff的文字说明

    -U<n>--unified=<n> Generate diffs with <n> lines of context instead of the usual t ...

  10. js001 ---- async

    Node.js异步流,详细见https://caolan.github.io/async/docs.html#parallel 1, async 用的比较多的是 waterfall, 瀑布流, 就是每 ...