arcpy로 주석 레이어 처리


10

arcpy를 사용하여 주석 레이어에 액세스하고 싶습니다 (텍스트 주석에서 몇 가지 텍스트 문자열을 확인하는 것입니다). 주석으로 나는 동적 레이블이 아닌 도구 주석을 그립니다 . 이 주석 레이어는 'Default'라는 이름으로 그룹 레이어 아래에 있습니다.

하여 ESRI 문서 층 자체 인 것으로 무승부 주석의 이야기 :

맵 문서에는 피처 레이어, 그룹 레이어 및 래스터 레이어라는 세 가지 범주의 레이어가 있습니다. isFeatureLayer, isGroupLayer 및 isRasterLayer 속성을 사용하면 모든 레이어 유형이 아닌 대부분의 레이어 유형을 식별하거나 분리 할 수 ​​있습니다. 주석 서브 클래스, 차원 피처, 네트워크 데이터 세트, 지형 데이터 세트, 토폴로지 데이터 세트 등 세 가지 범주 중 하나에 속하지 않는 몇 가지 특수화 된 레이어와 데이터 세트가 있습니다. 이 경우, 관심있는 레이어를 분리하기 위해 다른 속성을 테스트해야 할 수도 있습니다.

한 가지 알아야 할 것은 ArcGIS가 그리기 주석을 처리하는 방법 이며, 두 가지 평균 구성이 가능합니다.

ArcGIS는 지오 데이터베이스 및 맵 문서의 두 가지 주석 유형을 완벽하게 지원합니다.

제 경우에는지도 문서입니다.


이 모든 문서에 비추어 그리기 주석은 단순한 레이어 인 것처럼 보이므로 다음과 같은 간단한 코드가 작동해야합니다.

mxd = arcpy.mapping.MapDocument("some\mxdpath\here")
df = arcpy.mapping.ListDataFrames(mxd,"Layers")
lyr = arcpy.mapping.ListLayers(mxd,"current_annotation_layer",df) 

그러나 문제는 데이터 프레임을 통해 주석을 얻을 수없는 것입니다 (각 주석 레이어가 피처 레이어와 관련되어 있다는 점에서 이상합니다).


주석에 액세스하기위한 특정 arcpy 클래스 ( ArcObject SDK의 IAnnotationFeature2 와 비슷한 클래스 )? 해결 방법이 있습니까?

감사 !


comptypes 및 ArcObjects를 통해 맵 문서 주석 그룹을 수정 했습니까? 추가 정보가 필요하십니까? 많은 감사합니다 !!
Hélène

답변:


3

ArcPy는 모든 ArcObject를 노출시키지 않습니다. 내가 알 수 있듯이, 이것은 ArcPy에 노출되지 않은 많은 인터페이스 중 하나입니다. 페이지 레이아웃 요소 만 arcpy : ListLayoutElements (arcpy.mapping)에 노출됩니다.

이 작업을 수행해야하는 경우 유일한 선택은 ArcObjects입니다. Python을 사용하려면 Python에서 ArcObject에 어떻게 액세스합니까?를 참조하십시오 .

그렇지 않으면 이것에 대해 ArcGIS 아이디어 를 찾거나 만들 수 있습니다 (내가 찾은 유일한 관련 아이디어는 이것입니다 ).


안녕하세요, 나는이 대답을 기대하고 있었지만 링크에 감사하고 +1하면 도움이 될 수 있습니다.
Akheloes

@Akheloes comptypes 및 ArcObjects를 통해지도 문서 주석 그룹을 수정 했습니까?
Hélène

0

다른 사람들이 이것에 걸려 넘어 질 경우에 대비하여 답변을 추가하고 있습니다. 주석은 arcpy를 통해 액세스 할 수 있으며 레이어로 처리 할 수 ​​있습니다. 주석에 액세스 할 수 없기 때문에 색인이 누락되어 코드가 작동하지 않았습니다. 이러한 함수는 매번 목록을 반환하므로 와일드 카드 (이 경우에는 " Layers "및 " current_annotation_layer ")를 사용하더라도 색인을 검색하여 객체에 할당 할 색인을 지정해야합니다 ( 각각 df & lyr ).

코드는 다음과 같아야합니다.

df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
lyr = arcpy.mapping.ListDataFrames(mxd, "current_annotation_layer", df)[0]

다음은 주석 레이어에 액세스하기 위해 arcpy를 사용한 예입니다. 내지도의 경우 관심 영역 외부에있는 경우 주석을 20 % 투명도로 마스크 아래로 이동하려고했습니다.

my_annotation_lyr = arcpy.mapping.Layer("Long_ProjectsAnno")
reference_lyr = arcpy.mapping.Layer("counties_mask")
arcpy.mapping.MoveLayer(df, reference_lyr, my_annotation_lyr, "AFTER")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.