Jak zmienić źródłowe ścieżki danych dla każdego pliku warstwy w folderze X za pomocą arcpy?
I już po Uaktualnianie i ustalania źródeł danych arcpy.mapping najlepiej jak mogę, ale wszystko otrzymuję jest nieprzydatny Runtime error <type 'exceptions.ValueError'>: Layer: Unexpected error
, który nie mów mi wystarczy, aby rozwiązywać problemy, co jest złe lub brakuje.
Oto kod (uproszczony do testowania pliku jednowarstwowego):
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
i wyniki:
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
((przeniesiono sekcję „aktualizacja” do odpowiedzi))
arcpy
arcgis-10.0
layers
matowe wilkie
źródło
źródło
Runtime error...
cytowany powyżej interakcyjnego powłoki pytona w ArcCatalog, który nie daje traceback. Wyniki ze śledzeniem są kopiowane z powłoki poleceń.Odpowiedzi:
Wygląda na to, że poprawną metodą używaną podczas przełączania obszarów roboczych ORAZ zestawów danych funkcji jest lyr.replaceDataSource () . Oto mój działający skrypt:
Podczas testowania wydaje się, że poprawność w tej metodzie jest inna: sprawdza, czy nowy obszar roboczy jest poprawny, ale ignoruje klasę elementów i zestawy danych elementów - co oznacza, że nie zwróci błędu, jeśli docelowego FC nie ma.
Z drugiej strony, jeśli docelowy FC jest obecny, nawet w innym zestawie danych funkcji, nowa ścieżka źródła danych jest odpowiednio dostosowywana niezależnie od tego, czy sprawdzanie poprawności jest prawdziwe czy fałszywe.
Aktualizacja: teraz w Github, aby umożliwić łatwiejsze udostępnianie i zmiany.
źródło
Niepomocna
unexpected error
w tym przypadku oznacza coś takiego jak „nowa ścieżka nie istnieje” . Opcjonalnyvalidate
parametr ma domyślną wartość True, jeśli nie został określony. Przy false, skrypt kończy się bezbłędnie, ale wynikowe pliki warstw były nadal uszkodzone, mimo że istnieje ścieżka docelowa i klasa obiektów.wynik
Oprócz początkowej niewiedzy o sprawdzeniu poprawności domyślnie ustawiono wartość true, błąd lub przynajmniej bardzo dziwne zachowanie utrudniało rozwiązywanie problemów. Aktualizacja i naprawa źródeł danych za pomocą arcpy.mapping mówi: Nie dołączaj nazw zestawów danych funkcji do ścieżki obszaru roboczego. Zestawy danych elementów są częścią obszaru roboczego. Jeśli na przykład klasa obiektów zostanie przeniesiona z samodzielnej klasy obiektów do zestawu danych elementów, dokument mapy będzie nadal otwarty bez uszkodzenia warstwy ” i „ Jeśli warstwa lub tabela w dokumencie mapy lub pliku warstwy zostanie przeniesiony do zbioru danych funkcji lub z niego usunięty, ich łącza nie powinny być uszkodzone ”.
Okazuje się, że walidacja ma nieco inny kąt. Tak, nie ma znaczenia, gdzie w nowej geobazie (obszarze roboczym) znajduje się docelowa klasa obiektów , na najwyższym poziomie lub w zupełnie innym zestawie danych obiektów. Jednak docelowy obszar roboczy musi zawierać zestaw danych funkcji o tej samej nazwie lub sprawdzenie poprawności kończy się niepowodzeniem .
Źródła :
źródło