Страница 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, потом попытался эту таблицу экспортировать в другой формат и закинуть в слои, но она так не отображается и так со всеми форматами. Я уже разобрался немного до вашего ответа, пробовал делать проверку:
И это ничего не дало, так же пробовал с другими форматами. Я так понимаю дело в том, что 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);
}
Спасибо за помощь)