Страница 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);
            }
Спасибо за помощь)