Как конвертировать ILayer в IPolygon в ArcObjects

Возникли проблемы при конвертации Ilayer в IPolygon.

Я разрабатываю панель инструментов для 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..

2 ответа

Решение

Если вы хотите получить доступ к геометриям, содержащимся в слое шейп-файла, вы должны получить класс пространственных объектов слоя. Это свойство интерфейса 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.

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

Другие вопросы по тегам