/// <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. 网络通信-ping命令

  2. spring mvc给参数起别名

    需求: 将http报文请求(保护body和url)中的参数传递给Controller时支持使用别名. 举例: 下面两条请求报文的结果是一致的. http://example.com/foo?jobTy ...

  3. Android框架-Volley(二)

    1. ImageRequest的用法 前面我们已经学习过了StringRequest和JsonRequest的用法,并且总结出了它们的用法都是非常类似的,基本就是进行以下三步操作即可: 1. 创建一个 ...

  4. 51Nod 1010 只包含因子2 3 5的数(打表+二分)

    K的因子中只包含2 3 5.满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15. 所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数. 例如:n = ...

  5. GoldenGate V11.1数据复制限制

    以下对goldengate数据复制的限制情况进行说明. 不支持文件等非结构化数据复制 GoldenGate依赖对于数据库日志的解析获取数据变化,因此只能支持数据库中的数据变化复制,无法支持文件等非结构 ...

  6. [JSOI2008]火星人 hash+splay

    题目描述: 现在,火星人定义了一个函数 LCQ(x, y)LCQ(x,y),表示:该字符串中第 xx 个字符开始的字串,与该字符串中第 yy 个字符开始的字串,两个字串的公共前缀的长度.比方说,LCQ ...

  7. 测试cnblog文章内部JS

    添加几个按钮 行内js 写法: <button onclick="javascript:alert('行内js')">行内js</button> 注意:al ...

  8. Linux 中常用的基础命令一

    1.目录相关命令的使用  pwd(printing working directory) 显示当前工作目录    pwd命令相关的环境变量:     PWD  保存了当前工作目录路径     OLDP ...

  9. uwsgi erro

    Installing collected packages: uwsgi Running setup.py install for uwsgi: started Running setup.py in ...

  10. win下通过pip安装TensorFlow

    官方介绍(超详细):https://www.tensorflow.org/install/pip 按照官方介绍,不同的TensorFlow版本只支持特定的python版本所以你要是下载.whl包安装的 ...