2010-05-17 1 views
1

Ilayer를 IPolygon으로 변환하는 데 문제가 있습니다.ArcObjects에서 ILayer를 IPolygon으로 변환하는 방법

ArcMap 용 도구 모음을 개발 중이며 사이드 목차의 코드를 통해 레이어를 가져옵니다. 레이어는 다각형이지만 코드는이를 IPolygon으로 변환하지 않습니다.

아무도 도와 줄 수 있습니까?

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

그리고 그냥 IPloygon로 변환하지, 작동 ... : 이것은 내가이 작업을 수행 할 수 있습니다

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

... 나는 시도하고 IPolygon로 변환하기 위해 사용하고있는 코드입니다

답변

5

shapefile 레이어에 포함 된 지오메트리에 액세스하려면 레이어의 피쳐 클래스를 가져와야합니다. 이것은 IFeatureLayer 인터페이스의 속성입니다, 그래서 당신은 첫번째 (AN i 레이어 인) 당신의 레이어를 캐스팅해야합니다 : 당신이 기능 클래스가있는 경우 인덱스 (저속),이 기능을 얻을 수

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

또는 피쳐 클래스에 커서를 정의하여 (많은 기능을 처리하고자 할 때 빠르고 선호되는 방법입니다 .IFeatureCursor 검색, ESRI 문서는 보통 좋은 코드 스 니펫과 함께 제공됩니다).

IFeature MyFeature = FClass.GetFeature(0); 

는 이제 거의 다 : 당신의 기능 클래스는 하나 개의 기능이 포함되어있는 경우는 하나 개의 기능을 원하는 경우

하거나, 당신은 GetFeature 방법을 사용할 수 있습니다. 특징의 형상은 그 모양 속성에 자리 잡고있다 : Shape의 속성은 더 구체적인 IGeometry 인 IPolygon이기 때문에

IPolygon MyPoly = MyFeature.Shape as IPolygon; 

여분의 캐스트가 필요합니다.

+0

그게 전부입니다! 정말 감사합니다! –

1

ILayer는 여러 개의 다각형으로 구성됩니다. 레이어를 SQL 테이블 및 기능을 해당 테이블의 행으로 생각하십시오. IPolygon은 개별 피쳐를 구성하는 지오메트리를 나타냅니다. 레이어 내 개별 기능에 액세스하기위한 올바른 속성/메서드에 액세스하려면 IFayerLayer와 같은 ILayer를 캐스팅해야 할 수도 있습니다.

+0

IFenseClass 또는 Layer에서 IPolygon을 가져 오는 방법은 무엇입니까? 내가 얻을 수있는 가장 가까운 것은 AreaOfInterest이고 IEnvelope로 변환됩니다 ... 새 IPolygon 클래스를 만들려고했지만 IEnvelope 기능은 읽기 전용입니다 ... –

+1

예, 인터페이스를 직접 인스턴스화 할 수 없습니다. 기본적으로 IFeatureLayer에서 FeatureClass 속성에 액세스 할 수 있습니다. FeatureClass에서 FeatureClass의 모든 피쳐를 반복 할 수있는 커서를 반환하는 GetFeatures() 메서드를 호출 할 수 있습니다. 각 지형지 물과 연관된 지오메트리에 액세스 할 수 있어야합니다. 예제 (VB에서)는 다음에서 찾을 수 있습니다. http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esriGeoDatabase/IFeatureClass_GetFeatures.htm – smencer

관련 문제