在“点查询点”一文中,提到了点无法查询点,只能将查询点转化为面这样间接通过点查询点,这种方式是利用QueryTask对象,对DynamicLayer和FeatureLayer图层数据都有效果,但是它需要根据不同的比例尺级别调整查询精度,事实上如果查询的图层是FeatureLayer,那么这种交互查询的方式有更简单的方式,可以以通过FeatureLayer_MouseLeftButtonDown(object sender, GraphicMouseButtonEventArgs e)参数e.Graphics获取地图上鼠标所在的位置的要素,我觉得,因为要素已经加载到了内存中,所以可能查询速度更快,具体如下:
1、注册事件
<esri:FeatureLayer ID="People" DisableClientCaching="True" AutoSave="False" Url="http://localhost/arcgis/rest/services/Map/FeatureServer/0" OutFields="*" Mode="OnDemand" Initialized="FeatureLayer_Initialized" MouseLeftButtonDown="FeatureLayer_MouseLeftButtonDown" />
2、通过事件参数获取查询要素
IDictionary<string, object> info = new Dictionary<string, object>();
private void FeatureLayer_MouseLeftButtonDown(object sender, GraphicMouseButtonEventArgs e)
{
e.Handled = true; //使地图控件默认的漫游事件失效
Graphic g = e.Graphic;//获取要素对象,该对象要素不要可供查询,还可被编辑,删除
g.Selected = true;//使要素处于选中状态
info.add("Name",g.Attributtes["Name"]);//获取属性
}