Как конвертировать ILayer в IPolygon в ArcObjects - PullRequest
1 голос
/ 17 мая 2010

Возникли проблемы с преобразованием 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 ]

5 голосов
/ 17 мая 2010

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

1 голос
/ 17 мая 2010

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

...