2011-02-28 37 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