Mam geobazę pliku Esri ze zdefiniowanymi domenami atrybutów . Muszę usunąć niektóre domeny atrybutów, ale nie mogę, ponieważ „Domena jest używana przez regułę atrybutów”. . Jak mogę dowiedzieć się, które klasy obiektów korzystają z domen?
Executing: DeleteDomain R:\v5\YT_Canvec.gdb Permanency
Start Time: Thu May 19 11:01:02 2011
ERROR 999999: Error executing function.
The domain is used by an attribute rule.
Failed to execute (DeleteDomain).
Failed at Thu May 19 11:01:02 2011 (Elapsed Time: 0.00 seconds)
W geobazie znajduje się ponad sto klas obiektów, interaktywnie przyglądających się właściwościom pola FC dla każdego z nich, który nie jest starterem. Gdb jest zbyt duży, aby przekonwertować go na osobisty gdb i wejść do tylnych drzwi z dostępem MS (i tak podejrzana metoda).
(2011-26 maja): Innym sposobem sformułowania tego jest „która klasa obiektów korzysta z domeny X?”
arcpy
file-geodatabase
error-999999
domains
matowe wilkie
źródło
źródło
Odpowiedzi:
Aby odpowiedzieć na pytanie o obsługę klas obiektów z podtypami, jest to możliwe dzięki Arcpy (10.1+).
Kod podtypu, kod stcode, będzie wynosił zero, jeśli nie będzie żadnych podtypów, więc kod wyświetla „Brak”.
Słowniku podtypy ma więcej do niego, więc sprawdzić je w kodzie.
źródło
Python ma metody wyliczania klas obiektów w geobazie, przeszukiwania każdej klasy obiektów na liście, wyszczególniania pól w każdej klasie obiektów i pokazywania domeny każdego pola.
Powyższy kod powinien działać w ArcGIS 10 i wyświetli listę bezpośrednio w oknie interpretera Pythona. Następnie możesz skopiować i wkleić listę do edytora tekstu lub programu Excel, aby łatwiej przeglądać wyniki.
źródło
Ponieważ nie sądzę, że Python obsługuje podtypy, zamieszczam ten kod c #, który powinien. Przetestowałem to za pomocą próbnej geodb Esri wody / ścieków i znalazłem następujące nieużywane domeny:
Często DBA denerwuje się, że do domen - które są zasadniczo tabelami odnośników - nie można uzyskać dostępu przez SQL.
Ten kod przetestowany z arcmap ( zaktualizowany zgodnie z komentarzem Matta):
źródło
Ten kod powinien zwrócić to, o co jest proszony. W zwięzły sposób przejdzie przez wszystkie klasy elementów i tabele w obszarze roboczym GDB / FS i zwróci wszystkie pola powiązane z domeną, nazwą pola i klasą elementu / tabelą, do której należy.
źródło
Niestety odpowiedź Briana, która jest bezpośrednią i użyteczną odpowiedzią na zadane pytanie, nie rozwiązuje mojego rzeczywistego problemu. Podejrzewam, że z powodu błędu w dostępnym gdb (chociaż żadna z klas funkcji nie ma dołączonych domen, wciąż jest jedna, której nie mogę usunąć). W każdym razie znalazłem inną metodę określania, które domeny mają powiązane domeny. Jest interaktywny, ale o wiele szybszy niż przeglądanie każdej właściwości pola na każdym fc:
źródło
HD_148009_2
jest połączony z domeną CVPermanency
, skrypt Arcana Briana nie zgłasza żadnej połączonej domeny, podobnie jak inspektor pól właściwości klasy elementów w ArcCatalog. Jednak teraz w końcu zawęziłem go na tyle, aby zapisać raport o błędzie dzięki pomocy technicznej Esri.Wyobrażam sobie, że Matt Wilkie musiał podnieść wzrok i napisać, by ulepszyć kod Briana. Musiałem uzyskać wszystkie domeny dla tabel, klasy obiektów w katalogu głównym bazy danych i funkcje we wszystkich zestawach danych funkcji. Wyeksportowałem te informacje jako plik CSV, aby niektórzy inni pracownicy mogli oczyścić nasze środowiska geobazy ze starych domen.
źródło
Esri: FAQ: Jak znaleźć wszystkie miejsca, do których odwołują się domeny w mojej geobazie? . „Funkcje Pythona, które mogą wyświetlać właściwości tych struktur w geobazie. Wśród właściwości są przywoływane domeny. Dostarczono przykładowy skrypt i geobazę plików, które pokazują, w jaki sposób można używać funkcji Pythona do wyświetlania domen i innych właściwości klas elementów i tabele. Domeny można powiązać z polami w klasie obiektów lub tabeli; można je dodatkowo ustawić dla pól sklasyfikowanych według podtypu. ”
Wyniki są głośne w przypadku tego pytania, wykraczając poza to, które domeny są używane, ale stanowi szerszą platformę do rozpoczęcia.
Fragment kodu, zredagowany dla zwięzłości:
źródło