Как преобразовать ILayer в IPolygon В ArcObjects
-
27-09-2019 - |
Вопрос
Возникли проблемы с преобразованием 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, чтобы получить доступ к нужным свойствам / методам для доступа к отдельным функциям в вашем слое.