Gunakan python untuk menambahkan layer ke TOC

13

Saya telah berjuang dengan menambahkan lapisan ke TOC untuk beberapa waktu sekarang. Saya telah berhasil menambahkan satu lapisan tetapi perlu mengulang melalui folder dan menambahkan semua lapisan. Shapefile saya tidak bisa menambahkan sama sekali. Hanya file layer. Di bawah ini adalah kode tempat saya berada:

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

Kode di atas akan menambahkan setiap layer ke TOC, lalu menghapusnya dan menambahkan yang berikutnya. Ketika seluruh skrip selesai, tidak ada yang tersisa di TOC. Saya sudah mencoba menambahkan skrip ini ke model dan membuat parameter output turunan yang kemudian ditambahkan sebagai parameter model dengan tanda centang "tambahkan ke tampilan". Saya juga telah memeriksa opsi geoprocessing untuk memastikan kotak untuk menambahkan ke tampilan dicentang. Saya menjalankan Arc 10 (tidak ada paket layanan). Adakah yang bisa membantu?

Oliver Burdekin
sumber

Jawaban:

11

Anda perlu membuat objek MapDocument dan DataFrame di luar loop yang berjalan melalui lapisan Anda. Kalau tidak, Anda mulai dengan peta asli setiap kali.

jadi saya akan memperbaiki kode ini:

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

Untuk mengulang daftar file mxd di folder yang sama dari skrip, Anda dapat melakukannya seperti ini:

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]
geogeek
sumber
2
Saya mencari komentar @ geogeek tetapi tampaknya tidak ada. Dalam hal apa pun, seperti yang ditunjukkan oleh kode yang diperbaiki, Anda perlu membuat objek MapDocument dan DataFrame di luar loop yang berjalan melalui lapisan Anda. Kalau tidak, Anda mulai dengan peta asli setiap kali.
PolyGeo
1
Terima kasih atas klarifikasi PolyGeo. Saya sudah mengimplementasikan perubahan. Namun, sekarang hanya file terakhir dalam daftar tetap di TOC. Semua yang lain muncul kemudian menghilang. Cemas. :)
Oliver Burdekin
1
Berhasil! Semua ada di lekukan kan? Nama-nama layer yang keluar masih merupakan sesuatu tetapi itu hanya estetika. Terima kasih banyak atas bantuan Anda mengintip!
Oliver Burdekin
1
geogeek, bagaimana melakukannya untuk beberapa mxd?
newGIS
1
saya telah membuat jawaban dalam edit saya
geogeek