Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top