Více

Předefinovat soubory tvarů bodů v MXD, které nemají žádnou projekci a jsou umístěny v různých složkách pomocí ArcPy?

Předefinovat soubory tvarů bodů v MXD, které nemají žádnou projekci a jsou umístěny v různých složkách pomocí ArcPy?


# Skript pro použití vrstev v cestách zdrojových souborů MXD k vyhledání a předefinování projekcí import arcpy, glob, os, sys, arcgisscripting z arcpy import env, mapování path = os.getcwd () env.workspace = cesta env.overwriteOutput = True mxd = arcpy.mapping.MapDocument ("N:  MXDs  _ThomaKL  MXD GPS Valves  GPS_Shapefile_Paths.mxd") pro lyr v arcpy.mapping.ListLayers (mxd): if lyr.supports ("DATASOURCE"): print lyr.dataSource print 'Čtení souborů z' + lyr.dataSource os.chdir (cesta) sr = arcpy.SpatialReference (103133) x = 0 z = x + 1 NoProjCount = 0 FileList = arcpy.mapping.ListLayers () pro soubor v FileList: desc = arcpy.Describe (File) SR = desc.spatialReference if SR.name == "Unknown": print "Projection of" + str (File) + "is" + SR.name + "so defining projection." f = open ('NoProjection.txt', 'a') f.write (str (File)+" n") f.close () arcpy.DefineProjection_management (File, sr) NoProjCount = NoProjCount+1 else: print File + "promítá se" + str (jméno SR.)

Chápu to po spuštění skriptu

Traceback (poslední volání poslední): Soubor "N: MXDs_ThomaKL MXD GPS Valves DefineProjWDTest", řádek 22, v souboru FileList = arcpy.mapping.ListLayers () Soubor "C: Program Files (x86) ArcGIS Desktop10. 2 arcpy arcpy utils.py ", řádek 181, ve fn_ return fn (*args, ** kw) TypeError: ListLayers () takes at least 1 argument (0 given)

Soubor NoProjection.txt zobrazuje seznam tříd funkcí, který je ve složce, kde se třídy funkcí nacházejí.

Mám skript pythonu, na kterém jsem pracoval, pokud skript přejde do MXD, který má několik shapefile, které jsou na různých místech v mé síti. Znovu se snažím využít umístění tvarových souborů v MXD, abych řekl pythonu, kde je hledat, a poté předefinoval jejich projekce ... Mám pocit, že jsem velmi blízko, ale narazil jsem s tím na překážku a přemýšlel jsem, jestli někdo mohl by mi pomoci dokončit to, aby to fungovalo…

Aktualizace

# Skript pro použití vrstev v cestách zdrojových souborů MXD k vyhledání a předefinování projekcí import arcpy, glob, os, sys, arcgisscripting mxd = arcpy.mapping.MapDocument ("N:  MXDs  _ThomaKL  MXD GPS Valves  GPS_Shapefile_Paths.mxd") pro lyr v arcpy.mapping.ListLayers (mxd): if lyr.supports ("DATASOURCE"): print lyr.dataSource from arcpy import env, mapping path = lyr.dataSource env.workspace = path env.overwriteOutput = True print 'Reading soubory z ' + cesta sr = arcpy.SpatialReference (103133) x = 0 z = x + 1 NoProjCount = 0 FileList = arcpy.mapping.ListLayers (lyr) pro lyr v FileList: desc = arcpy.Describe (lyr) SR = desc .spatialReference pokud SR.name == "Neznámý": tisk "Projekce" + str (lyr) + "je" + SR.name + "takže definuje projekci." f = open ('NoProjection.txt', 'a') f.write (str (lyr)+" n") f.close () arcpy.DefineProjection_management (lyr, sr) NoProjCount = NoProjCount+1 else: print lyr + "se promítá" + str (název SR.)

Uvědomil jsem si, že jsem některé kusy objednal špatně, a tak jsem se rozhodl provést nějaké změny v mém původním kódu, dobrá zpráva je, že to fungovalo, špatná zpráva je, že to fungovalo jen na poslední vrstvě v MXD, takže všechny ostatní vrstvy v MXD se stále objevovalo s „bez projekce“. nedává mi to žádné chyby, ale znovu se snažím, aby to prošlo seznamem vrstev ve složkách a definovalo jejich projekce, jak jsem řekl, dělá to jen poslední, že to nečte celý seznam.


Tady máte chybu, která se podle mě projevuje jako tato chyba:

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

který by měl být:

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

nebo

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

nebo

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

Také si nejsem tak jistý podtržítkem v_ThomaKLnázev složky. Pokud výše uvedené nefunguje, zkuste tuto složku přejmenovat a změnit kód tak, aby odpovídal.


Jak uvádí chyba,arcpy.mapping.ListLayers ()vyžaduje hádku. Podle své dokumentace vyžaduje jako vstup objekt mapového dokumentu (nebo objekt vrstvy).

arcpy.mapping.ListLayers (mxd)

Podívejte se na video: How to make shapefile in arcgis, creating a shapefile in arcmap, arcgis tutorial for beginners