在地图上移动点,线,面的方法
/// <summary>
/// 开始编辑
/// </summary>
/// <param name="bWithUndoRedo">是否编辑</param>
/// <param name="m_SelectedLayer">图层名</param>
public void StartEditing(bool bWithUndoRedo, ILayer m_SelectedLayer)
{
if (m_SelectedLayer == null) return;
IFeatureLayer featureLayer = m_SelectedLayer as IFeatureLayer;
if (featureLayer == null) return;
IFeatureClass featureClass = featureLayer.FeatureClass;
if (featureClass == null) return;
IDataset dataset = featureClass as IDataset;
IWorkspaceEdit workspaceEdit = dataset.Workspace as IWorkspaceEdit;
try
{
workspaceEdit.StartEditing(bWithUndoRedo);
m_IsEdited = true;
}
catch
{
return;
}
}
/ // <summary>
/// 移动要素
/// </summary>
/// <param name="StartPoint">起始点</param>
/// <param name="EndPoint">结束点</param>
/// <param name="MoveGeometry">要移动的几何图形</param>
/// <param name="IMapctrl">控件接口</param>
/// <returns></returns>
public IGeometry FeatureMoveEdit(IPoint StartPoint,IPoint EndPoint,IGeometry MoveGeometry, IMapControl3 IMapctrl)
{
//移动后的IGeometry
IGeometry ToGeometry=null;
switch (MoveGeometry.GeometryType)
{
//点要素
case esriGeometryType.esriGeometryPoint:
{
IMovePointFeedback Point_Feedback=new MovePointFeedbackClass();
Point_Feedback.Display = IMapctrl.ActiveView.ScreenDisplay;
Point_Feedback.Start(MoveGeometry as IPoint, StartPoint);
double dx = EndPoint.X - StartPoint.X;
double dy = EndPoint.Y - StartPoint.Y;
IPoint NewPoint = new PointClass();
IPoint OldPoint = MoveGeometry as IPoint;
NewPoint.X = OldPoint.X + dx;
NewPoint.Y = OldPoint.Y + dy;
Point_Feedback.MoveTo(NewPoint);
ToGeometry = Point_Feedback.Stop() as IGeometry;
break;
}
//线要素
case esriGeometryType.esriGeometryPolyline:
{
IMoveLineFeedback Line_Feedback = new MoveLineFeedbackClass();
Line_Feedback.Display = IMapctrl.ActiveView.ScreenDisplay;
Line_Feedback.Start(MoveGeometry as IPolyline, StartPoint);
Line_Feedback.MoveTo(EndPoint);
ToGeometry = Line_Feedback.Stop() as IGeometry;
break;
}
//面要素
case esriGeometryType.esriGeometryPolygon:
{
IMovePolygonFeedback Polygon_Feedback = new MovePolygonFeedbackClass();
Polygon_Feedback.Display = IMapctrl.ActiveView.ScreenDisplay;
Polygon_Feedback.Start(MoveGeometry as IPolygon, StartPoint);
Polygon_Feedback.MoveTo(EndPoint);
ToGeometry = Polygon_Feedback.Stop() as IGeometry;
break;
}
}
return ToGeometry;
}
/// <summary>
/// 结束编辑
/// </summary>
/// <param name="bSave">是够保存编辑</param>
/// <param name="m_SelectedLayer">编辑图层</param>
public void StopEditing(bool bSave, ILayer m_SelectedLayer)
{
if (m_IsEdited)
{
m_IsEdited = false;
if (m_SelectedLayer == null)
{
return;
}
IFeatureLayer featureLayer = m_SelectedLayer as IFeatureLayer;
if (featureLayer == null)
{
return;
}
IFeatureClass featureClass = featureLayer.FeatureClass;
if (featureClass == null)
{
return;
}
IDataset dataset = featureClass as IDataset;
IWorkspaceEdit workspaceEdit = dataset.Workspace as IWorkspaceEdit;
//判断是否在编辑状态
if (workspaceEdit.IsBeingEdited())
{
try
{
workspaceEdit.StopEditing(bSave);
}
catch
{
workspaceEdit.AbortEditOperation();
return;
}
}
}
}
浙公网安备 33010602011771号