Engine中如何实现多点切割线?
engine中如何实现多点切割线?
发起人
-
-
刘峥
ArcGIS多面手
相关问题
- 在Visual studio 2015 中使用 Arcgis API for JavaScript v3.16 如何实现代码智能提示?
- arcgis中如何求多点之间的相互距离?
- Engine许可使用注意事项
- arcgis api for javascript 4.0版本中找不到draw工具,如何实现拉框查询、几何查询?
- 在模型构建器中实现计算几何
- ArcGIS Server制作的缓存地图服务中,能否实现大比例尺下楼房阴影类似的3d效果?
- Engine中如何判断两个要素类的空间参考是否是同一个?
- 弧段画面为什么会出现很多点,这是个什么问题,这么解决呢?
- Engine中如何实现要素图层的反选?
- Engine调用GP工具的两种方式的用法
- ARCGIS如何实现,按某字段属性值 批量分类导出成shp
问题状态
- 最新活动: 2016-08-04 00:00
- 浏览: 2137
- 关注: 1 人
1 个回复
刘峥 - ArcGIS多面手
赞同来自:
先将切割的点要素添加到IPointCollection,然后用IPolyCurve2.SplitAtPoints方法进行分割,然后再将分割后的geometry添加到新的polyline中。
private void pointsCutLineToolStripMenuItem_Click(object sender, EventArgs e)
{
IWorkspaceFactory pwsf = new FileGDBWorkspaceFactoryClass();
IWorkspace pws = pwsf.OpenFromFile(testgdb.gdb, 0);
IWorkspaceEdit pwsEdit = (IWorkspaceEdit)pws;
IFeatureWorkspace pfeatWs = pws as IFeatureWorkspace;
IFeatureClass pLinear = pfeatWs.OpenFeatureClass(lines);
IFeature line = pLinear.GetFeature(1);
IGeometry pGeomLine = line.Shape;
IPolycurve2 pPolyCurve = pGeomLine as IPolycurve2;
IFeatureClass pPtfc = pfeatWs.OpenFeatureClass(points);
object miss = System.Reflection.Missing.Value;
IPointCollection pPolintColl = new MultipointClass();
IFeatureCursor pFeatCur = pPtfc.Search(null, false);
IFeature pt = pFeatCur.NextFeature();
while (pt != null)
{
IPoint newpt = pt.ShapeCopy as IPoint;
pPolintColl.AddPoint(newpt, ref miss, ref miss);
pt = pFeatCur.NextFeature();
}
int cntPoint = pPolintColl.PointCount;
IEnumVertex pEnumVertex = pPolintColl.EnumVertices;
IEnumSplitPoint pEnum = pPolyCurve.SplitAtPoints(pEnumVertex, true, true, -1);
//For Checking pPolyCurve split or not
Boolean chk = pEnum.SplitHappened;
pEnum.Reset();
IPoint p1 = null;
int outPartIdx = 0;
int verIdx = 0;
pEnum.Next(out p1, out outPartIdx, out verIdx);
while (p1 != null)
{
pEnum.Next(out p1, out outPartIdx, out verIdx);
}
//Check Geometry Collection
IGeometryCollection pGeoColl = (IGeometryCollection)pPolyCurve; ;
int geoCount = pGeoColl.GeometryCount;
IGeometryCollection pGeoColl1 = new PolylineClass();
for (int i = 0; i < pGeoColl.GeometryCount; i++)
{
IGeometryCollection pgoeco = new PolylineClass();
IGeometry pg = pGeoColl.get_Geometry(i);
pgoeco.AddGeometry(pg, ref miss, ref miss);
IFeature pFeat = pLinear.CreateFeature();
IPolyline pl = (IPolyline)pgoeco;
double len = pl.Length;
pFeat.Shape = (IGeometry)pgoeco;
pFeat.Store();
}
IPolyline pPolyline = (IPolyline)line.Shape;
pwsEdit.StopEditing(true);
pwsEdit.StopEditOperation();
line = pFeatCur.NextFeature();
}
要回复问题请先登录或注册