ใช้ python เพื่อเพิ่มเลเยอร์ใน TOC


13

ฉันได้ต่อสู้กับการเพิ่มเลเยอร์ใน TOC มาระยะหนึ่งแล้ว ฉันจัดการเพื่อเพิ่มเลเยอร์เดียว แต่จำเป็นต้องวนซ้ำผ่านโฟลเดอร์และเพิ่มเลเยอร์ทั้งหมด Shapefiles ฉันไม่สามารถเพิ่มได้เลย ไฟล์เลเยอร์เท่านั้น ด้านล่างเป็นรหัสที่ฉันอยู่:

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 (ไม่มี Service Pack) ใครช่วยได้บ้าง

คำตอบ:


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 ฉันได้ดำเนินการเปลี่ยนแปลง อย่างไรก็ตามตอนนี้เป็นเพียงไฟล์สุดท้ายในรายการที่ยังคงอยู่ในสารบัญ คนอื่น ๆ ทั้งหมดปรากฏขึ้นจากนั้นก็หายไป flummoxed :)
Oliver Burdekin

1
มันทำงานได้! ทั้งหมดในการเยื้องใช่มั้ย ชื่อเลเยอร์ที่ออกมานั้นยังคงมี แต่ความสวยงาม ขอบคุณมากสำหรับความช่วยเหลือของคุณ peeps!
Oliver Burdekin

1
geogeek ทำอย่างไรกับ mxd หลายตัว?
newGIS

1
ฉันได้คำตอบในการแก้ไขของฉัน
geogeek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.