1、首先使用ArcToolBox中的near提取所有多段线的端点,保存成点文件
2、新建一个线文件,遍历上一步的点文件并生成“线段”插入到线文件中
3、代码如下(ArcEngine):
// 定义变量
ILine pLine = null;
ISegmentCollection pSegColl = null;
IPoint pStartPt = null ;
IPoint pEndPt = null;
ITransform2D pTransform;
double dLength;
double dAngle;
double PI = Math.PI;
long ptCount; // 点图层要素总数
// 获取点层
IFeatureLayer ptLyr = axMapControl1.Map.get_Layer(1) as IFeatureLayer;
IFeatureClass ptFeatClass = ptLyr.FeatureClass;
ptCount = ptFeatClass.FeatureCount(null);
// 编辑线层
IFeatureLayer l = axMapControl1.Map.get_Layer(0) as IFeatureLayer;
IFeatureClass fc = l.FeatureClass;
IWorkspaceEdit w = (fc as IDataset).Workspace as IWorkspaceEdit;
w.StartEditing(true);
w.StartEditOperation();
IPoint p;
IFeatureBuffer featBuffer = fc.CreateFeatureBuffer();
IFeatureCursor cur = fc.Insert(true);
// 遍历点层
IFeatureCursor ptFeatClassCursor = ptFeatClass.Search(null,false);
IFeature ptFeature = ptFeatClassCursor.NextFeature();
object ep = System.Reflection.Missing.Value;
while(ptFeature != null)
{
// 获取相应字段值
dLength = Convert.ToDouble(ptFeature.get_Value(6).ToString());
dAngle = Convert.ToDouble(ptFeature.get_Value(7).ToString());
pStartPt = (IPoint)ptFeature.ShapeCopy;
pEndPt = new PointClass();
pEndPt.PutCoords(pStartPt.X + dLength,pStartPt.Y);
pLine = new LineClass();
pLine.PutCoords(pStartPt,pEndPt);
ISegment pSegment = pLine as ISegment;
dAngle = 1.0 * dAngle * PI / 180;
pSegColl = new PolylineClass();
pSegColl.AddSegment(pSegment,ref ep,ref ep);
pTransform = pSegColl as ITransform2D;
pTransform.Rotate(pStartPt,dAngle);
featBuffer.Shape = pSegColl as IGeometry;
cur.InsertFeature(featBuffer);
ptFeature = ptFeatClassCursor.NextFeature();
}
ptFeatClassCursor = null;
w.StopEditOperation();
w.StopEditing(true);
}