Список всех классов объектов в MXD

У меня есть файл mxd, который я загрузил в ArcMap. После завершения загрузки есть несколько слоев; некоторые из которых имеют несколько классов объектов. Конечным результатом является список всех путей к файлам/местоположениям/источникам каждого класса объектов, но сейчас мне просто нужно знать, как составить список всех загруженных классов объектов. И когда я говорю «список», их действительно можно просто вывести на экран через окна сообщений. Я знаю, что мне нужно будет просмотреть каждый слой, но использование правильного интерфейса и доступ к свойствам ArcMaps — вот где я теряюсь.

Любая помощь по этому вопросу будет принята с благодарностью. Я все еще изучаю ArcObjects и то, как все это работает, и отчаянно нуждаюсь в помощи. Заранее спасибо.


person user1898629    schedule 14.03.2016    source источник
comment
Один слой извлекает данные только из одного класса пространственных объектов; группа слоев может иметь несколько слоев (и несколько классов пространственных объектов). Прошу прощения, если это может показаться придирчивым, но терминология важна :)   -  person Erica    schedule 30.03.2016


Ответы (1)


Это был бы пример в С# для циклического прохождения всех слоев, и если это слой объектов, доберитесь до рабочей области, чтобы получить путь или что-то еще из него:

/* Make a list of all feature classes. */
List<ILayer> layers_list = new List<ILayer>();
IMap map = get_map();
IEnumLayer enumLayer = map.get_Layers(null, true);
ILayer layer = null;
while (layer = enumLayer.Next() != null) {
    // we're looking for a feature class only
    if (layer is IFeatureLayer) {
        try {
            IFeatureClass fclass = ((IFeatureLayer)layer).FeatureClass;
            IFeatureLayer featureLayer = (IFeatureLayer)layer;
            // Get the dataset and workspace of the feature class
            IDataset ds = (IDataset)fclass;
            IWorkspace ws = (IWorkspace)ds.Workspace;
            // Do something with the workspace, like getting the path or
            // whatever...
        } catch (Exception e) {
            MessageBox.Show("Layer ' " + layer.Name + "': \n\n" + e.Message);
        }
    }
}
person andzep    schedule 27.04.2016