banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 11 July 2022 11:00

PauloLrx
Participant occasionnel
Date d'inscription: 11 Feb 2021
Messages: 22

ArcPy arcgis 10.8: ajout de couches dans mxd avec symbologie

Bonjour,

Je dois mettre à jour 200 plans. Cette mise à jour consiste à rajouter 3 couches avec leur symbologie sur ces plans.
Je voudrais tenter de créer un script Arcpy pour automatiser le processus. Je n'ai pas de compétences en python.
J'ai trouver ce script :

import arcpy, os
import arcpy.mapping as mapping
layer = mapping.Layer(r"CHEMIN VERS LE DOSSIER CONTENANT LES TROIS COUCHES")
for root, dirs, files in os.walk(r"CHEMIN VERS LE DOSSIER CONTENANT sous dossier avec les MXD"):
    for f in files:
        if f.endswith(".mxd"):
            mxd = root + '\\' + f
            mxd_doc = mapping.MapDocument(mxd)
            df = mapping.ListDataFrames(mxd_doc)[0]
            mapping.AddLayer(df, layer, "TOP")
            mxd_doc.save()
Je voudrais l'adapter pour ajouter la symbologie à chacune des mes trois couches dans les mxd car je ne suis pas sûre que les couches vont être ajoutées dans les sous-dossiers et les sous-sous-dossiers contenant les mxd.


Merci par avance,

Paulo

Hors ligne

 

#2 Tue 12 July 2022 13:13

Cornet Jérémie
Participant assidu
Lieu: Nouméa
Date d'inscription: 6 Apr 2008
Messages: 229

Re: ArcPy arcgis 10.8: ajout de couches dans mxd avec symbologie

Bonjour,
Plutôt que les couches SIG, vous pouvez pointer sur des lyr.
Ainsi, vous aurez pu configurer symbologie, étiquettes...

os.walk est bien récursif donc fouillera bien tous vos dossiers et sous-dossiers.

Jérémie

Hors ligne

 

#3 Wed 13 July 2022 09:02

PauloLrx
Participant occasionnel
Date d'inscription: 11 Feb 2021
Messages: 22

Re: ArcPy arcgis 10.8: ajout de couches dans mxd avec symbologie

Bonjour Jérémy,
On m'a aidé a modifier le code mais pas sur que ce soit pour une version plus récente de arcpy
Pourriez-vous y jetter un oeuil s'il vous plait?
Voici :

Code:

import arcpy
import arcpy.mapping as m
import os

root_folder = r"path\to\root\folder"

add_lyr_1 = r"path\to\file1.lyr"
add_lyr_2 = r"path\to\file2.lyr"
add_lyr_3 = r"path\to\file3.lyr"

## create list of lyr files
add_lyrs = [add_lyr_1, add_lyr_2, add_lyr_3]

mxd_paths = []

## add all mxd paths to a list
for root, dirs, files in os.walk (root_folder):
    for f in files:
        if f.endswith(".mxd"):
            mxd_paths.append("{0}\\{1}".format(root, f))

## print to test
#print(mxd_paths)

for mxd_doc in mxd_paths:
    mxd_name = mxd_doc.rsplit("\\")[-1]
    arcpy.AddMessage(mxd_name)

    ## access the mxd
    mxd = m.MapDocument(mxd_doc)

    ## only access the desired dataframe
    ## you might want to use a dataframe name / wildcard to
    ## add layers to correct dataframe if you have multiple
    df = m.ListDataFrames(mxd)[0]

    ## add each layer file, one on top of the other.
    for lyr_file in add_lyrs:
        add_lyr = m.Layer(lyr_file)
        m.AddLayer(df, add_lyr ,"TOP")

    mxd.save()

Hors ligne

 

Pied de page des forums

Powered by FluxBB