0

ArcGis マップを読み込み、1 つのレイヤーでいくつかのオブジェクトを選択してズームするスタンドアロン アプリケーションを作成しようとしています。

次のようなものを使用して、マップの読み込みと表示が機能します。

AxMapControl _mapControl;

// in constructor:
_mapControl = new AxMapControl();

// in loading
_mapControl.LoadMxFile(@"C:\Users\me\Documents\TestProject.mxd");

これはうまく機能し、マップを完全に表示します (もちろん、AxMapControl は WindowsFormsHost に埋め込まれていますが、これは問題になりません)。

しかし、今度は 1 つまたは複数のオブジェクトを選択してズームする必要があります。テストのために1つのレイヤーを選択しようとしましたが、これはまったく機能しません:

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) が発生しますが、これ以上の説明はありません。おそらく私はそれをすべて間違っています。

多分誰かがレイヤー内のオブジェクトを選択する方法のサンプルを持っていますか?

4

1 に答える 1

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();

また、マップ(または少なくともによってIActiveView返されたAxMapControl.ActiveView)を手動で更新する必要があることに注意してください。そうしないと、マップが再描画される前に選択範囲が表示されません。

于 2011-02-28T12:02:50.310 に答える