2010-05-17 2 views
1

Ошибка при преобразовании Ilayer в IPolygon.Как преобразовать ILayer в IPolygon В ArcObjects

Я разрабатываю панель инструментов для ArcMap, и я захватываю слой с помощью кода из боковой таблицы содержимого. Слой - многоугольник, но код не преобразует его в IPolygon.

Может ли кто-нибудь помочь мне? Это код, я использую, чтобы попытаться преобразовать его в IPolygon ...

IPolygon poly = m_document.Maps.get_Item(0).get_Layer(0) as IPolygon; 

Я могу это сделать:

ILayer layer = m_document.Maps.get_Item(0).get_Layer(0) as ILayer; 

И это работает, просто не превращая его в IPloygon ..

ответ

5

Если вы хотите получить доступ к геометриям, содержащимся в слое шейп-файла, вам необходимо получить класс объектов слоя. Это свойство интерфейса IFeatureLayer, так что вы должны будете отдать свой слой (который является ILAYER) первым:

IFeatureLayer FLayer = layer as IFeatureLayer; 
IFeatureClass FClass = FLayer.FeatureClass; 

Если у вас есть класс функций, вы можете получить функции по индексу (медленно) или определяя курсор в классе объектов (это быстрый и предпочтительный способ, когда вы хотите обрабатывать множество функций. Поиск IFeatureCursor; документы ESRI обычно имеют хорошие фрагменты кода).

Если класс объектов содержит только одну функцию, или если вы хотите только одну функцию, Вы можете использовать метод GetFeature:

IFeature MyFeature = FClass.GetFeature(0); 

Теперь вы уже почти там. Геометрия Особенностью является спрятанный в свойстве Shape:

IPolygon MyPoly = MyFeature.Shape as IPolygon; 

Дополнительный бросок необходим, поскольку свойство Shape является IPolygon, который является более конкретным IGeometry.

+0

Вот и все! Спасибо, много! –

1

ILayer будет состоять из нескольких полигонов. Подумайте о слое в виде таблицы sql и функции в виде строки в этой таблице. IPolygon будет ссылаться на геометрию, которая составляет отдельную функцию. Возможно, вам придется отобрать этот ILayer как нечто вроде IFeatureLayer, чтобы получить доступ к правильным свойствам/методам для доступа к отдельным функциям вашего уровня.

+0

Смысл ... Но как вывести IPolygon из IFeatureClass или Layer? Самое близкое, что я могу получить, это AreaOfInterest и преобразуется в IEnvelope ... Пробовал создать новый класс IPolygon, но функция IEnvelope читается только ... –

+1

Да, вы не можете напрямую создавать интерфейсы. В принципе, из IFeatureLayer вы можете получить доступ к свойству FeatureClass. Из FeatureClass вы можете вызвать метод GetFeatures(), который возвращает курсор, который позволяет выполнять итерацию по всем функциям FeatureClass. Вы должны иметь доступ к геометрии, связанной с каждой функцией. Пример (в VB) можно найти здесь: http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esriGeoDatabase/IFeatureClass_GetFeatures.htm – smencer

Смежные вопросы