ArcGis Engine, как выбрать объекты? - PullRequest
0 голосов
/ 28 февраля 2011

Я пытаюсь создать отдельное приложение, которое загружает карту 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 я получаю ошибку COM 80004005 (E_Fail) в ESRI.ArcGIS.Carto, без более подробного объяснения. Вероятно, я все делаю неправильно.

Может быть, у кого-то есть пример, как выбирать объекты в слое?

1 Ответ

2 голосов
/ 28 февраля 2011

Я думаю, что ваша проблема так же проста, как [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) необходимо обновить вручную, или выбор не отображается до перерисовки карты.

...