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 Tue 21 March 2017 15:57

jeremiedelefosse
Participant occasionnel
Lieu: Yvelines
Date d'inscription: 18 Nov 2012
Messages: 38

Modifier nom couche par nom de la classe d'entité - ds plusieurs Mxd

Bonjour à tous,

Je travaille actuellement sur la ré-organisation de nos GBD et MXD.

Je souhaite :
- renommer plusieurs noms de classe d'entité => OK
- re-pointer leur chemin dans plusieurs MXD => OK (https://georezo.net/forum/viewtopic.php?id=92939)

Pb: le nom de la couche dans la table des matières des mxd reste inchangé (c’est l'ancien nom de la classe d'entité qui est affiché par défaut et qui du coup ne correspond plus avec le nouveau nom de ma classe d’entité. (Ps: la couche est visible/utilisable et son chemin est exacte)

Je cherche donc un outil/script qui permettrai de réattribuer le nom d’une couche dans un MXD par le nom de la classe d’entité qui lui correspond.


En espérant, que la question n'est pas déjà été traiter dans une autre discussion

D'avance Merci
CDt

Hors ligne

 

#2 Wed 22 March 2017 10:27

jeremiedelefosse
Participant occasionnel
Lieu: Yvelines
Date d'inscription: 18 Nov 2012
Messages: 38

Re: Modifier nom couche par nom de la classe d'entité - ds plusieurs Mxd

Re bonjour, je me lance en pythin, j'en suis à la:

Code:

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Users\Desktop\XXXX.mxd")
df = arcpy.mapping.ListDataFrames(mxd,"")[0]
listlayer= arcpy.mapping.ListLayers(mxd, "", df)
for layer in listlayer:
        print layer.name
        print layer.datasetName
del mxd

Mais je n'arrive pas a remplacer layer.name par layer.datasetName

Merci d'avance

Hors ligne

 

#3 Wed 22 March 2017 18:09

maxou.lebourg
Participant occasionnel
Lieu: Paris
Date d'inscription: 15 Mar 2017
Messages: 17

Re: Modifier nom couche par nom de la classe d'entité - ds plusieurs Mxd

Salut,
test quelque chose dans ce style:

Code:

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:UsersDesktopXXXX.mxd")
df = arcpy.mapping.ListDataFrames(mxd,"")[0]
listlayer= arcpy.mapping.ListLayers(mxd, "", df)
listlayer_b = [] #j'initialise cette liste car on va ajouter des éléments via une bouche et la fonction .append 

for layer in listlayer:
        #print layer.name
        #print layer.datasetName
        #!!!! la fonction ListLayers est dangereuse car elle liste aussi les groupes de couches, il faut donc les enlever
        if layer.isFeatureLayer: #si l'élement de la list est une couche shp
                listlayer_b.append(layer) #listlayer_b contient donc que les couches sig
        else:
               pass      

#on s'occupe maintenant de changer le nom de la couche dans ArcMap si elle est différente du nom dans ta gbd

for layer in listlayer_b:
        if layer.name != layer.datasetName:
                layer.name = layer.datasetName
        else:
                pass
        
del mxd

voilà wink
j'ai utilisé cette manip' pour un script qui avait grosso modo le même objectif
cette partie là marchait plutôt bien (le reste par contre ^^")
ATTENTION : si dans ton mxd tu as renommé des couches pour ta légende, ce script n'en a littéralement rien à f...faire, il est censé remplacer tout ce qu'il trouve

tu fais signe si ça ne marche pas (ou si ça marche d'ailleurs)
Bon code.

Hors ligne

 

#4 Mon 03 April 2017 10:51

jeremiedelefosse
Participant occasionnel
Lieu: Yvelines
Date d'inscription: 18 Nov 2012
Messages: 38

Re: Modifier nom couche par nom de la classe d'entité - ds plusieurs Mxd

Super ça marche très bien !!
Merci

Hors ligne

 

Pied de page des forums

Powered by FluxBB