Python / ArcPy를 사용하여 모양 파일 또는 피쳐 클래스를 ArcGIS Desktop에서 레이어로 추가 하시겠습니까?


20

Python으로 ArcGIS Desktop의 다양한 작업 (일반적으로 ArcMap 사용)을 자동화하려고하는데 현재 맵에 모양 파일을 추가하는 방법이 필요합니다. (그리고 그 일을하지만 다른 이야기입니다).

지금까지 할 수있는 최선의 방법은 다음을 사용하여 현재 맵에 레이어 파일 을 추가하는 것입니다 ( "addLayer"는 레이어 파일 객체 임).

def AddLayerFromLayerFile(addLayer):
 import arcpy
 mxd = arcpy.mapping.MapDocument("CURRENT")
 df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
 arcpy.mapping.AddLayer(df, addLayer, "AUTO_ARRANGE")
 arcpy.RefreshActiveView()
 arcpy.RefreshTOC()
 del mxd, df, addLayer

그러나 원시 데이터는 항상 shapefile이되므로 열 수 있어야합니다. (동일하게 : shapefile을 열지 않고 shapefile을 레이어 파일로 변환하지만, 그렇게하지 않는 것이 좋습니다).

답변:


30

내가 찾은 것은 다음과 같습니다.

import arcpy
from arcpy import env

# get the map document
mxd = arcpy.mapping.MapDocument("CURRENT")

# get the data frame
df = arcpy.mapping.ListDataFrames(mxd,"*")[0]

# create a new layer
newlayer = arcpy.mapping.Layer(path_to_shapefile_or_feature_class)

# add the layer to the map at the bottom of the TOC in data frame 0
arcpy.mapping.AddLayer(df, newlayer,"BOTTOM")

이 코드가 새 레이어를 넣을 데이터 프레임 (변수 df)은 맵 문서의 첫 번째 데이터 프레임입니다. 또한이 코드는 TOC의 맨 아래에 데이터를 새 레이어로 추가합니다. 다른 배열 옵션 인 "AUTO_ARRANGE"및 "TOP"을 사용할 수도 있습니다.


2
데이터 프레임을 지정하는 또 다른 옵션은 활성 데이터 프레임을 사용하는 것입니다. df = arcpy.mapping.ListDataFrames (mxd) [0] 대신 df = mxd.activeDataFrame-또한 listdataframe 호출에 "*"가 필요하지 않습니다. .
— jbalk

10

피처 레이어 생성 (데이터 관리) http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000006p000000.htm

방금 ArcMap의 Python 창에서 시도하고 내지도에 직접 추가합니다 (데이터 프레임을 가져 와서 AddLayer를 호출 할 필요가 없습니다).

arcpy.MakeFeatureLayer_management('r:/temp/a.shp','test') 대체 텍스트


그것은 바로 창에서 훌륭하게 작동합니다 ...하지만 스크립트 파일에서 동일한 코드를 시도하고 실행할 때 아무 일도 일어나지 않습니다! (코드는 오류 메시지없이 실행되지만 ToC에는 아무 것도 나타나지 않습니다.) 또한 ToC에서 레이어를 제거한 다음 즉시 창에서 코드를 다시 실행하려고하면 "파일이 이미 있습니다"유형 오류가 발생합니다. "테스트"레이어 파일은 어디에 저장됩니까?
— Tom W

SP1을 설치 했습니까?
— Jason Scheirer

1
@Tom W : 저는 파이썬과 아크 피를 가진 멍청한 놈입니다. 그러나 레이어 파일이 실제로 생성 된 것 같지는 않습니다. 레이어 파일을 원할 경우 레이어 파일을 만들어 레이어 이름을 매개 변수로 전달해야합니다. 레이어 arcpy.SaveToLayerFile_management('test', 'r:/temp/evilmonkey.lyr', 'ABSOLUTE') 를 저장하지 않고 그대로두고 싶다면 arcpy.Delete_management('test').
— Jay Cummins

@Tom W : 댓글을 다시 읽으십시오. 별도의 파이썬 쉘 (즉시 창이 아님)에서 ArcMap에 레이어를 추가하려고합니까? 나는 당신이 그렇게 할 수 있다고 생각하지 않았습니다 (그러나 나는 이것에 대한 권위가 없습니다 ... 아마도 당신은 할 수 있습니다).
— Jay Cummins

1
@Tom W : 해당 계층 버그에 대해 알고 있으므로 SP1이 설치되어 있는지 확인했습니다. 설명 할 때 레이어를 TOC에 추가하려면 파생 된 출력 피처 레이어가 있고 값을 레이어 이름으로 설정하는 스크립트가 필요합니다. ArcMap의 GP 도구는 GP 도구의 스퓨리어스 레이어 (임시 FC 등)로부터 TOC를 보호하려고 시도하므로 스크립트 도구의 매개 변수에서 새 피처 레이어가 완료 될 때 TOC에 유지 될 매개 변수를 정의해야합니다. 레이어가 디스크에있는 곳은 FC의 데이터 소스 일 가능성이 높으므로 작업 공간의 레이어와 이름이 같은 피쳐 클래스입니다.
— Jason Scheirer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.