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.