2011-02-28 47 views
0

我正在尝试创建一个独立的应用程序,该应用程序加载ArcGis地图,在一个图层中选择几个对象并将它们放大。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),没有太多的更多的解释。也许我做的都是错的。

也许有人有一个示例如何选择图层中的对象?

回答

2

我认为你的问题与查询字符串中字段名称周围的[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返回IActiveView)需要手动将刷新,或者在地图重绘之前不显示选择。

+0

嗯,老实说,我尝试过和没有括号,并有双方的错误。现在我再次尝试确认,而且它没有使用括号?!?无论你如何神奇地让我的代码工作,谢谢! :) – Sam 2011-02-28 13:09:33

+6

针对记录不完善的ESRI API进行编程需要更多愚蠢的运气,创造性的猜测和**纯粹的黑巫术**而不是技巧。欢迎来到你最可怕的噩梦:) – jevakallio 2011-02-28 13:14:58

+0

哦当然,我认为编写旧大道脚本是我最糟糕的噩梦 - 但ESRI成功创造了恶梦?可怜的我! :) – Sam 2011-02-28 13:36:13