Wie kann man mit arcpy die Quelldatenpfade für jede Layer-Datei in Ordner X ändern?
Ich habe das Aktualisieren und Korrigieren von Datenquellen mit arcpy.mapping so gut ich kann verfolgt, aber alles, was ich bekomme, ist eine nicht hilfreiche Datei , Runtime error <type 'exceptions.ValueError'>: Layer: Unexpected error
die mir nicht genug sagt, um Fehler zu beheben , die falsch sind oder fehlen.
Hier ist der Code (vereinfacht zum Testen einer Single-Layer-Datei):
import arcpy, os
fname = r'K:\Layers\xxx.lyr'
lyr = arcpy.mapping.Layer(fname)
oldpath = lyr.workspacePath
print 'oldpath: ', oldpath
lyr.findAndReplaceWorkspacePath(oldpath, r'C:\some\other.gdb')
print 'newpath: ', lyr.workspacePath
und die Ergebnisse:
oldpath: K:\Canvec_Utility\Temp.gdb
Traceback (most recent call last):
File "x10x.py", line 12, in <module>
lyr.findAndReplaceWorkspacePath(oldpath, r'C:\some\other.gdb')
File "C:\ESRI\ArcGIS\Desktop10.0\arcpy\arcpy\utils.py", line 181, in fn_
return fn(*args, **kw)
File "C:\ESRI\ArcGIS\Desktop10.0\arcpy\arcpy\_mapping.py", line 601, in findAndReplaceWorkspacePath
return convertArcObjectToPythonObject(self._arc_object.findAndReplaceWorkspacePath(*gp_fixargs((find_workspace_path, replace_workspace_path, validate), True
)))
ValueError: Layer: Unexpected error
((Abschnitt 'Update' in eine Antwort verschoben))
arcpy
arcgis-10.0
layers
matt wilkie
quelle
quelle
Runtime error...
oben zitierte stammt aus der interaktiven Python-Shell in Arccatalog, die keinen Traceback liefert. Die Ergebnisse mit Traceback werden aus einer Befehlsshell kopiert.Antworten:
Es sieht so aus, als ob die richtige Methode zum Wechseln von Arbeitsbereichen UND Feature-Datasets lyr.replaceDataSource () ist . Hier ist mein Arbeitsskript:
Beim Testen scheint die Validierung bei dieser Methode wieder anders zu sein: Sie überprüft, ob der neue Arbeitsbereich gültig ist, ignoriert jedoch die Feature-Class und die Feature-Datasets. Dies bedeutet, dass kein Fehler zurückgegeben wird, wenn der Ziel-FC nicht vorhanden ist.
Wenn andererseits die Ziel-FC auch innerhalb eines anderen Feature-Datasets vorhanden ist, wird der neue Datenquellenpfad entsprechend angepasst, unabhängig davon, ob die Validierung wahr oder falsch ist.
Update: jetzt auf Github , um das Teilen und Überarbeiten zu vereinfachen.
quelle
Das nicht hilfreiche bedeutet
unexpected error
in diesem Fall so etwas wie "neuer Pfad existiert nicht" . Der optionalevalidate
Parameter ist standardmäßig True, wenn nichts angegeben ist. Mit false wird das Skript ohne Fehler abgeschlossen, aber die resultierenden Layer-Dateien waren immer noch fehlerhaft, obwohl der Zielpfad und die Feature-Class vorhanden sind.Ergebnis
Zusätzlich zu dem anfänglichen Unwissen, dass validate standardmäßig true ist, erschwerten ein Fehler oder zumindest ein sehr eigenartiges Verhalten die Fehlerbehebung. Aktualisieren und Korrigieren von Datenquellen mit arcpy.mapping besagt , dass die Namen von Feature-Datasets nicht in den Arbeitsbereichspfad aufgenommen werden sollen. Feature-Datasets sind Teil des Arbeitsbereichs. Wenn beispielsweise eine Feature-Class von einer eigenständigen Feature-Class in ein Feature-Dataset verschoben wird, wird ein Map-Dokument weiterhin geöffnet, ohne dass der Layer unterbrochen wird. " Und " Wenn ein Layer oder eine Tabelle in einem Map-Dokument oder einer Layer-Datei vorhanden ist Wenn sie in ein Feature-Dataset verschoben oder aus diesem entfernt werden, sollten ihre Links nicht unterbrochen werden. "
Es stellt sich heraus, dass validate einen etwas anderen Winkel hat. Ja, es spielt keine Rolle, wo sich in der neuen Geodatabase (Arbeitsbereich) die Ziel-Feature-Class befindet , auf der obersten Ebene oder in einem völlig anderen Feature-Dataset. Der Zielarbeitsbereich muss jedoch ein Feature-Dataset mit demselben Namen enthalten, da sonst die Validierung fehlschlägt .
Quellen :
quelle