Страница 1 из 1

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

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

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

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

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

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

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

Добавлено: 30 апр 2019, 08:37
wladfm
Похожий вопрос: https://gis.stackexchange.com/questions ... ayers-name

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

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

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

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

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

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

Добавлено: 04 май 2019, 09:07
wladfm
За каждым 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

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

Добавлено: 04 май 2019, 11:48
HomBro
Вот результат работы того кода, который я писал выше, таблицы там нет, то что вы предложили тоже не помогло, может скрины помогут лучше понять проблему.

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

Добавлено: 04 май 2019, 15:23
wladfm
Это не слой, это источник.
https://desktop.arcgis.com/en/arcobject ... ection.htm

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

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

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

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

Добавлено: 04 май 2019, 21:13
HomBro
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);
            }
Спасибо за помощь)