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 ),否则在重绘地图之前不会显示选择。