ArcObjects C#, как получить тип слоя

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
HomBro
Интересующийся
Сообщения: 31
Зарегистрирован: 25 ноя 2017, 20:31
Репутация: 1
Откуда: Уфа

ArcObjects C#, как получить тип слоя

Сообщение HomBro » 29 апр 2019, 16:22

Делаю проект на ArcObjects, в comboBox'е нужно чтобы выводилось имя стоя и его тип, к примеру у меня на карте есть растровый слой, векторный и таблица, в выпадающем списке comboBox'а должно бить что то типа: raster_layer: type raster; lines: shape polylines; table: type table(тут всё примерно, не знаю в каком виде будет возвращаться тип), пробовал привести слой к типу IFeatureLayer, но, как я понял, он подходит только для векторных слоев, а привести к типу ILayer тип слоя получить нельзя, нагуглить не получилось, так что спрашиваю тут

HomBro
Интересующийся
Сообщения: 31
Зарегистрирован: 25 ноя 2017, 20:31
Репутация: 1
Откуда: Уфа

Re: ArcObjects C#, как получить тип слоя

Сообщение HomBro » 29 апр 2019, 22:02

Заметил ещё вот что, у меня в слоях есть таблица, но в выпадающем списке её нет, но есть все остальные, как будто он просто не видит её, потому что она не отображается во фрейме, как с этим быть?

Код: Выделить всё

	    var pForm = new Form();
            pForm.Show();
            IMap amap;
            IMxDocument pMxDoc = m_application.Document as IMxDocument;
            amap = pMxDoc.FocusMap;
            int layerscount = amap.LayerCount;
            for (int i = 0; i < layerscount; i++)
            {
                pForm.layers.Items.Add(amap.Layer[i].Name);
            }

wladfm
Участник
Сообщения: 67
Зарегистрирован: 04 июл 2016, 16:02
Репутация: 8

Re: ArcObjects C#, как получить тип слоя

Сообщение wladfm » 30 апр 2019, 08:37

Похожий вопрос: https://gis.stackexchange.com/questions ... ayers-name

Определить таблица или нет можно по ресурсу

HomBro
Интересующийся
Сообщения: 31
Зарегистрирован: 25 ноя 2017, 20:31
Репутация: 1
Откуда: Уфа

Re: ArcObjects C#, как получить тип слоя

Сообщение HomBro » 03 май 2019, 18:05

wladfm писал(а):
30 апр 2019, 08:37
Определить таблица или нет можно по ресурсу
Не совсем понял о чем вы. Я выше приложил код, там просто выводится имя слоя, но среди них нет таблиц. Я пробовал добавить сначала просто в формате csv, потом попытался эту таблицу экспортировать в другой формат и закинуть в слои, но она так не отображается и так со всеми форматами. Я уже разобрался немного до вашего ответа, пробовал делать проверку:

Код: Выделить всё

if (pLayer is IStandaloneTable)
И это ничего не дало, так же пробовал с другими форматами. Я так понимаю дело в том, что ILayer нельзя привести к типу таблиц?

wladfm
Участник
Сообщения: 67
Зарегистрирован: 04 июл 2016, 16:02
Репутация: 8

Re: ArcObjects C#, как получить тип слоя

Сообщение wladfm » 04 май 2019, 09:07

За каждым ILayer стоит IFeatureClass. За каждым IFeatureClass стоит IDataset. У IDataset есть esriDatasetType. Пример получения IDataset из ILayer (для c#):
IFeatureClass FClass = FLayer.FeatureClass;
IDataset ids = (IDataset)FClass;

Возможные значения esriDatasetType: http://resources.esri.com/help/9.3/arcg ... etType.htm

HomBro
Интересующийся
Сообщения: 31
Зарегистрирован: 25 ноя 2017, 20:31
Репутация: 1
Откуда: Уфа

Re: ArcObjects C#, как получить тип слоя

Сообщение HomBro » 04 май 2019, 11:48

Вот результат работы того кода, который я писал выше, таблицы там нет, то что вы предложили тоже не помогло, может скрины помогут лучше понять проблему.
Вложения
Безымянный.jpg
Безымянный.jpg (44.93 КБ) 2073 просмотра
Безымянный1.jpg
Безымянный1.jpg (21.71 КБ) 2073 просмотра

wladfm
Участник
Сообщения: 67
Зарегистрирован: 04 июл 2016, 16:02
Репутация: 8

Re: ArcObjects C#, как получить тип слоя

Сообщение wladfm » 04 май 2019, 15:23

Это не слой, это источник.
https://desktop.arcgis.com/en/arcobject ... ection.htm

Можно попробовать здесь посмотреть

HomBro
Интересующийся
Сообщения: 31
Зарегистрирован: 25 ноя 2017, 20:31
Репутация: 1
Откуда: Уфа

Re: ArcObjects C#, как получить тип слоя

Сообщение HomBro » 04 май 2019, 18:06

wladfm писал(а):
04 май 2019, 15:23
Можно попробовать здесь посмотреть
Спасибо, помогло, привел текущий датафрейм к типу ITableCollection, из него уже можно получить таблицы, вот только из ITable не получается получить имя источника, только имя полей, не знаете, как из этого выкрутиться?

HomBro
Интересующийся
Сообщения: 31
Зарегистрирован: 25 ноя 2017, 20:31
Репутация: 1
Откуда: Уфа

Re: ArcObjects C#, как получить тип слоя

Сообщение HomBro » 04 май 2019, 21:13

wladfm, всё, разобрался:

Код: Выделить всё

IStandaloneTableCollection standaloneTableCollection = pMxDoc.FocusMap as IStandaloneTableCollection;
int tablecount = standaloneTableCollection.StandaloneTableCount;
for (int i = 0; i < tablecount; i++)
            {
                pLab3.tableList.Items.Add(standaloneTableCollection.StandaloneTable[i].Name);
            }
Спасибо за помощь)

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость