Suite

Redéfinir les fichiers de formes de points dans MXD qui n'ont pas de projection et qui se trouvent dans des dossiers différents à l'aide d'ArcPy ?


# Script pour utiliser les calques dans les chemins des fichiers source MXD pour localiser et redéfinir les projections import arcpy, glob, os, sys, arcgisscripting à partir d'arcpy import env, mapping path = os.getcwd() env.workspace = path env.overwriteOutput = True mxd = arcpy.mapping.MapDocument("N:MXDs\_ThomaKLMXD GPS ValvesGPS_Shapefile_Paths.mxd") pour lyr dans arcpy.mapping.ListLayers(mxd) : si lyr.supports("DATASOURCE") : print lyr.dataSource print 'Lecture de fichiers depuis ' + lyr.dataSource os.chdir(chemin) sr = arcpy.SpatialReference(103133) x=0 z=x+1 NoProjCount=0 FileList= arcpy.mapping.ListLayers() pour le fichier dans FileList : desc = arcpy.Describe(File) SR = desc.spatialReference if SR.name == "Unknown": print "La projection de " + str(File) + " est " + SR.name + " définissant ainsi la projection." f = open('NoProjection.txt', 'a') f.write(str(File)+"
") f.close() arcpy.DefineProjection_management(File, sr) NoProjCount=NoProjCount+1 else: print File + " est projeté " + str(SR.name)

Je reçois ceci après avoir exécuté le script

Traceback (appel le plus récent en dernier) : Fichier "N:MXDs_ThomaKLMXD GPS ValvesDefineProjWDTest", ligne 22, dans FileList= arcpy.mapping.ListLayers() Fichier "C:Program Files (x86)ArcGISDesktop10. 2arcpyarcpyutils.py", ligne 181, dans fn_ return fn(*args, **kw) TypeError : ListLayers() prend au moins 1 argument (0 donné)

NoProjection.txt affiche une liste de classes d'entités qui se trouve dans le dossier où se trouvent les classes d'entités.

J'ai un script python sur lequel j'ai travaillé où le script va dans un MXD qui a plusieurs fichiers de formes qui se trouvent à différents endroits sur mon réseau. Encore une fois, j'essaie d'utiliser l'emplacement des fichiers de formes dans le MXD pour dire à python où les rechercher, puis redéfinir leurs projections… J'ai l'impression d'être très proche mais j'ai rencontré un obstacle avec cela et je me demandais si quelqu'un pourrait m'aider à terminer ceci pour que cela fonctionne…

Mettre à jour

# Script pour utiliser les calques dans les chemins des fichiers source MXD pour localiser et redéfinir les projections import arcpy, glob, os, sys, arcgisscripting mxd = arcpy.mapping.MapDocument("N:MXDs\_ThomaKLMXD GPS ValvesGPS_Shapefile_Paths.mxd") pour lyr dans arcpy.mapping.ListLayers(mxd): if lyr.supports("DATASOURCE"): print lyr.dataSource depuis arcpy import env, mapping path = lyr.dataSource env.workspace = path env.overwriteOutput = True print 'Reading fichiers de ' + chemin sr = arcpy.SpatialReference(103133) x=0 z=x+1 NoProjCount=0 FileList= arcpy.mapping.ListLayers(lyr) pour lyr dans FileList : desc = arcpy.Describe(lyr) SR = desc .spatialReference if SR.name == "Unknown": print "La projection de " + str(lyr) + " est " + SR.name + " définissant ainsi la projection." f = open('NoProjection.txt', 'a') f.write(str(lyr)+"
") f.close() arcpy.DefineProjection_management(lyr, sr) NoProjCount=NoProjCount+1 else : imprimer lyr + " est projeté " + str(SR.name)

J'ai réalisé que j'avais mal commandé certaines pièces alors j'ai décidé d'apporter quelques modifications à mon code d'origine, la bonne nouvelle est que cela a fonctionné la mauvaise nouvelle est que cela n'a fonctionné que sur la toute dernière couche du MXD, donc toutes les autres couches du MXD s'est toujours présenté avec "aucune projection". cela ne me donne aucune erreur, mais encore une fois, j'essaie de lui faire parcourir la liste des calques dans les dossiers et de définir leurs projections, comme je l'ai dit, il ne fait que le tout dernier qu'il ne lit pas toute la liste.


Vous avez une erreur ici, qui, je pense, se manifeste par cette erreur :

mxd = arcpy.mapping.MapDocument("N:MXDs\_ThomaKLMXD GPS ValvesGPS_Shapefile_Paths.mxd")

qui doit être :

mxd = arcpy.mapping.MapDocument(r"N:MXDs\_ThomaKLMXD GPS ValvesGPS_Shapefile_Paths.mxd")

ou alors

mxd = arcpy.mapping.MapDocument("N:MXDs\_ThomaKLMXD GPS ValvesGPS_Shapefile_Paths.mxd")

ou alors

mxd = arcpy.mapping.MapDocument("N:/MXDs/_ThomaKL/MXD GPS Valves/GPS_Shapefile_Paths.mxd")

Je ne suis pas non plus si sûr du trait de soulignement dans le_ThomaKLnom de dossier. Si ce qui précède ne fonctionne pas, essayez de renommer ce dossier et de modifier votre code pour qu'il corresponde.


Comme l'indique l'erreur,arcpy.mapping.ListLayers ()nécessite une argumentation. Conformément à sa documentation, il nécessite l'objet de document cartographique (ou un objet de couche) comme entrée.

arcpy.mapping.ListLayers (mxd)


Voir la vidéo: Change Projection - Coordinate System in ArcMap (Octobre 2021).