在ArcGIS api for Siverlight|WPF 中有个编辑工具EditorWidget,如下图所示:
它有选择、添加、编辑、删除选择等功能,事实上,这些是由两个对象一起组合起来的,对要素的编辑功能由EditGeometry提供,而Editor则负责了要素的选择、删除选择等功能,在“地图编辑”一文中已介绍了EditGeometry,这里只对Editor进行简单介绍。Editor的选择、删除选择等功能,是以ICommad命令加命令参数的形式提供的,它包含添加、选择、删除选中、切割、连接等命令,这里只简单介绍选择、删除选中要素功能,步骤如下:
1、构造Editor对象
Editor edit=new Editor();
edit.GeometryServiceUrl = "http://localhost/arcgis/rest/services/Geometry/GeometryServer";//设置几何服务位置
List<String> lyrIds = new List<string>();
lyrIds.Add("People"); //添加工作图层(FeatureLayer)名称
lyrIds.Add("Matter");
lyrIds.Add("Organization");
lyrIds.Add("Place");
edit.LayerIDs = lyrIds.AsEnumerable<string>();//设置Edit的工作图层几何
edit.Map = map1;//绑定地图控件
edit.EditCompleted += new EventHandler<Editor.EditEventArgs>(edit_EditCompleted);//注册命令完成事件
2、执行命令
edit.Select.Execute("New");//新建选择,有Add, Remove, New, Keyboard (default)四个参数,还有Add、Cut、Union、DelecteSelected、EditVertices等命令,具体的参数可以到官网查看官网,有些不确定参数的,则用""字符串即可
//选中的要素在FeatureLayer.SelectedGraphics中可以查看
3、命令完成事件
private void edit_EditCompleted(Object sender, Editor.EditEventArgs e)
{
//e.Action属性可以用来判断,触发事件的命令
if (edit.DeleteSelected.CanExecute("") == false)
{ //判断是否可以执行删除命令,其他命令的CanExecute("")方法同样也可以用来判断该命令是否能被执行,避免出错
MessageBox.Show("请选择后再删除");
}
else
{
try
{
edit.DeleteSelected.Execute("");//执行删除选中要素命令,参数直接是"",要想保存删除,则需要执行edit.Save命令
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "删除失败");
}
}
edit.Select.Execute("New"); //要想使删除操作具有逻辑连贯性,则在删除后又需要重新执行选择命令,因为这些命令都是一次性的,所以只能以这种方式实现
}