Pages: 1
- Sujet précédent - Modifier nom couche par nom de la classe d'entité - ds plusieurs Mxd - Sujet suivant
#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à
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
Pages: 1
- Sujet précédent - Modifier nom couche par nom de la classe d'entité - ds plusieurs Mxd - Sujet suivant