Utilisez python pour ajouter des couches à la table des matières

13

Je lutte depuis longtemps avec l'ajout de couches à la table des matières. J'ai réussi à ajouter des calques simples, mais je dois parcourir un dossier et ajouter tous les calques. Fichiers de formes que je ne peux pas ajouter du tout. Seuls les fichiers de calques. Voici le code de l'endroit où je suis:

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

Le code ci-dessus ajoute chaque couche à la table des matières, puis la supprime de manière exaspérante et ajoute la suivante. Une fois le script terminé, il ne reste plus rien dans la table des matières. J'ai essayé d'ajouter ce script à un modèle et de créer un paramètre de sortie dérivé qui est ensuite ajouté en tant que paramètre de modèle avec "ajouter à l'affichage" coché. J'ai également vérifié les options de géotraitement pour m'assurer que la case à ajouter à l'affichage est cochée. J'utilise Arc 10 (pas de service packs). Quelqu'un peut-il aider?

Oliver Burdekin
la source

Réponses:

11

Vous devez créer les objets MapDocument et DataFrame en dehors de la boucle qui traverse vos couches. Sinon, vous commencez à chaque fois avec la carte d'origine.

donc je vais corriger dans ce code:

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

Pour boucler dans une liste de fichiers mxd dans le même dossier du script, vous pouvez le faire comme ceci:

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
la source
2
Je cherchais les remarques de @ geogeek mais elles semblent absentes. Dans tous les cas, comme le montre son code corrigé, vous devez créer les objets MapDocument et DataFrame en dehors de la boucle qui traverse vos couches. Sinon, vous commencez à chaque fois avec la carte d'origine.
PolyGeo
1
Merci pour la clarification PolyGeo. J'ai implémenté les changements. Cependant, seul le dernier fichier de la liste reste dans la table des matières. Tous les autres apparaissent puis disparaissent. Déconcerté. :)
Oliver Burdekin
1
Je l'ai fait fonctionner! Tout dans l'indentation, non? Les noms de couches qui sortent sont toujours un problème, mais ce n'est que de l'esthétique. Merci beaucoup pour votre aide!
Oliver Burdekin
1
geogeek, comment faire pour plusieurs mxd?
newGIS
1
j'ai fait une réponse dans mon montage
geogeek