Engine中如何截取线上指定两点间的线段?

输入Polyline对象和线上任意的两个点,如何截取两个点之间的线段?
已邀请:

刘峥 - ArcGIS多面手

赞同来自:

【解决办法】:

//调用 
IPolyline newLine = GetSubCurve(polyline, p1, p2); 

ESRI.ArcGIS.Display.IScreenDisplay screenDisplay = axMapControl1.ActiveView.ScreenDisplay; 
screenDisplay.StartDrawing(screenDisplay.hDC, System.Convert.ToInt16(ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache)); 
IRgbColor rgbColor = new RgbColorClass(); 
rgbColor.Red = 255; 
ESRI.ArcGIS.Display.IColor color = rgbColor; // Implicit Cast 
ESRI.ArcGIS.Display.ISimpleLineSymbol simpleLineSymbol = new ESRI.ArcGIS.Display.SimpleLineSymbolClass(); 
simpleLineSymbol.Color = color; 
ESRI.ArcGIS.Display.ISymbol symbol = (ESRI.ArcGIS.Display.ISymbol)simpleLineSymbol; // Explicit Cast 
screenDisplay.SetSymbol(symbol); 
screenDisplay.DrawPolyline(newLine); 
screenDisplay.FinishDrawing(); 


private IPolyline GetSubCurve(IPolyline inpolyLine, IPoint pnt1, IPoint pnt2) 

double d1 = GetDistAlong(inpolyLine, pnt1); 
double d2 = GetDistAlong(inpolyLine, pnt2); 

var c = inpolyLine as ICurve; 
ICurve outCurve; 
c.GetSubcurve(d1, d2, false, out outCurve); 
if (c == null || c.IsEmpty) 
throw new Exception(fail); 
var outPolyline = outCurve as IPolyline; 
if (outPolyline == null) 

outPolyline = new PolylineClass() as IPolyline; 
var sc = outPolyline as ISegmentCollection; 
sc.AddSegment((ISegment)outCurve); 
((IGeometry)sc).SpatialReference = outCurve.SpatialReference; 

return outPolyline; 


private double GetDistAlong(IPolyline polyLine, IPoint pnt) 

var outPnt = new PointClass() as IPoint; 
double distAlong = double.NaN; 
double distFrom = double.NaN; 
bool bRight = false; 
polyLine.QueryPointAndDistance(esriSegmentExtension.esriNoExtension, pnt, false, outPnt, 
ref distAlong, ref distFrom, ref bRight); 
return distAlong; 

要回复问题请先登录注册