파이썬을 사용하여 TOC에 레이어 추가


13

나는 한동안 TOC에 레이어를 추가하는 것과 싸우고 있습니다. 단일 레이어를 추가했지만 폴더를 반복하고 모든 레이어를 추가해야합니다. 셰이프 파일 전혀 추가 할 수 없습니다. 레이어 파일 만. 아래는 내가있는 코드입니다.

for layer in shp_List:
mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

outlayer = lyr
layerfile = os.path.join(base_Folder, lyr + ".lyr")

arcpy.MakeFeatureLayer_management(layer, outlayer)
arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE")
addlayer = arcpy.mapping.Layer(layerfile)
arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM")



#addLayer = arcpy.mapping.Layer(layer)
#arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM")
#arcpy.RefreshTOC()
#arcpy.RefreshActiveView()
del addlayer, mxd

위의 코드는 각 레이어를 TOC에 추가 한 다음 불쾌하게 제거하고 다음 레이어를 추가합니다. 전체 스크립트가 끝나면 TOC에 아무것도 남지 않습니다. 이 스크립트를 모델에 추가하고 파생 된 출력 매개 변수를 작성하여 "표시에 추가"가 선택된 모델 매개 변수로 추가하려고했습니다. 또한 지리 처리 옵션을 확인하여 디스플레이에 추가 할 상자가 선택되어 있는지 확인했습니다. Arc 10 (서비스 팩 없음)을 실행하고 있습니다. 누구든지 도울 수 있습니까?

답변:


11

레이어를 통해 실행되는 루프 외부에서 MapDocument 및 DataFrame 객체를 만들어야합니다. 그렇지 않으면 매번 원래 맵으로 시작합니다.

그래서이 코드에서 수정합니다 :

mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

for layer in shp_List:

    outlayer = layer + "_lyr" 
    layerfile = os.path.join(base_Folder, layer + ".lyr")

    arcpy.MakeFeatureLayer_management(layer, outlayer)
    arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE")
    addlayer = arcpy.mapping.Layer(layerfile)
    arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM")



    #addLayer = arcpy.mapping.Layer(layer)
    #arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM")
arcpy.RefreshTOC()
arcpy.RefreshActiveView()
    #del addlayer, mxd

스크립트의 동일한 폴더에서 mxd 파일 목록을 반복하려면 다음과 같이하십시오.

for mxd_name in mxd_names:
    mxd = arcpy.mapping.MapDocument(os.path.dirname(os.path.realpath(__file__))+"\\"+mxd_name+".mxd")
   dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

2
@geogeek의 발언을 찾고 있었지만 결석 한 것으로 보입니다. 어쨌든 수정 된 코드에서 알 수 있듯이 레이어를 통해 실행되는 루프 외부에서 MapDocument 및 DataFrame 객체를 만들어야합니다. 그렇지 않으면 매번 원래 맵으로 시작합니다.
PolyGeo

1
PolyGeo를 명확히 해주셔서 감사합니다. 변경 사항을 구현했습니다. 그러나 이제 목록의 마지막 파일 만 TOC에 유지됩니다. 나머지는 모두 나타나고 사라집니다. Flummoxed. :)
Oliver Burdekin

1
작동했습니다! 들여 쓰기에 모두? 나오는 레이어 이름은 여전히 ​​미용이지만 미학입니다. 도와 주셔서 감사합니다!
Oliver Burdekin

1
geogeek, 여러 mxd에 대해 어떻게합니까?
newGIS

1
내 편집에 답을했습니다
geogeek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.