ArcGis Engine,如何选择对象?
我正在尝试创建一个独立的应用程序,它可以加载ArcGis地图,在一个图层中选择一些对象并缩放到它们。
加载和显示地图确实有效,使用以下内容:
AxMapControl _mapControl; // in constructor: _mapControl = new AxMapControl(); // in loading _mapControl.LoadMxFile(@"C:\Users\me\Documents\TestProject.mxd");
这确实很好用,并且显示完整范围的地图(当然AxMapControl嵌入到WindowsFormsHost中,但这应该不是问题)。
但现在我需要选择一个或多个对象并缩放它们。 我试图在一个层中选择进行测试,但这根本不起作用:
IFeatureSelection features = _mapControl.Map.Layer[0] as IFeatureSelection; if (features != null) { QueryFilter qf = new QueryFilterClass(); qf.WhereClause = "[Name]='FS4711000'"; features.SelectFeatures(qf, esriSelectionResultEnum.esriSelectionResultNew, false); }
在SelectFeatures调用中,我在ESRI.ArcGIS.Carto中得到一个COM错误80004005(E_Fail),没有太多解释。 可能我做错了。
也许有人有一个示例如何选择图层中的对象?
我认为您的问题与查询字符串中字段名称周围的[square brackets]
一样简单。
这有效:
IFeatureSelection features = _currentLayer as IFeatureSelection; if (features != null) { QueryFilter qf = new QueryFilter(); qf.WhereClause = "Type='1'"; features.SelectFeatures(qf, esriSelectionResultEnum.esriSelectionResultNew, false); } _axMapControl.Refresh();
这失败了COM错误E_FAIL:
IFeatureSelection features = _currentLayer as IFeatureSelection; if (features != null) { QueryFilter qf = new QueryFilter(); qf.WhereClause = "[Type]='1'"; features.SelectFeatures(qf, esriSelectionResultEnum.esriSelectionResultNew, false); } _axMapControl.Refresh();
另请注意,需要手动刷新地图(或至少AxMapControl.ActiveView
返回的AxMapControl.ActiveView
),否则在重绘地图之前不会显示选择。