Engine中如何实现多点切割线?

engine中如何实现多点切割线?
已邀请:

刘峥 - 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(); 
}

要回复问题请先登录注册