У меня есть файловая база геоданных Esri с определенными доменами атрибутов . Мне нужно удалить некоторые из доменов атрибутов, но не могу, потому что «Домен используется правилом атрибутов». , Как я могу узнать, какие классы объектов используют домены?
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)
В базе геоданных более ста классов пространственных объектов, в интерактивном режиме поиск свойств поля FC для каждого из них не является началом. GDB слишком велик, чтобы преобразовать его в персональный GDB и войти в черный ход с помощью ms-access (в любом случае, хитрый метод).
(2011-May-26): Еще один способ сформулировать это так: «какой класс объектов использует домен X?»
arcpy
file-geodatabase
error-999999
domains
Мэтт Уилки
источник
источник
Ответы:
Чтобы ответить на вопрос обработки классов объектов с подтипами, это можно сделать с помощью arcpy (10.1+).
Код подтипа stcode будет равен нулю, если нет подтипов, поэтому код выводит «None».
Словарь подтипа имеет больше к нему, так что проверить его в коде.
источник
В Python есть методы для перечисления классов пространственных объектов в базе геоданных, циклического просмотра каждого класса пространственных объектов в списке, перечисления полей в каждом классе пространственных объектов и отображения домена каждого поля.
Приведенный выше код должен работать в ArcGIS 10, и он напечатает список прямо в окне интерпретатора Python. Затем вы можете скопировать и вставить список в текстовый редактор или Excel для более удобного просмотра результатов.
источник
Поскольку я не думаю, что python обрабатывает подтипы, я публикую этот код на C #, который должен. Я проверил его с помощью образца Esri Geodb для воды и сточных вод и обнаружил следующие неиспользуемые домены:
Часто администраторы БД раздражаются, что к доменам, которые по сути являются справочными таблицами, нельзя получить доступ через SQL.
Этот код протестирован из arcmap ( обновлено согласно комментарию Мэтта):
источник
Этот код должен возвращать то, что запрашивается. Он будет кратко перебирать все классы пространственных объектов и таблицы в рабочей области GDB / FS и возвращать все поля, связанные с доменом, именем поля и классом пространственных объектов / таблицей, к которой он принадлежит.
источник
К сожалению, ответ Брайана, который является прямым и полезным ответом на заданный вопрос, не решает мою актуальную проблему. Я предполагаю, что из-за ошибки в gdb (хотя ни к одному из классов пространственных объектов не присоединены домены, есть еще один, который мне не разрешено удалять). В любом случае я нашел другой метод для определения того, какие фк имеют связанные домены. Это интерактивно, но намного быстрее, чем прохождение каждого свойства поля на каждом отдельном объекте:
источник
HD_148009_2
он связан с доменом CVPermanency
, arcpy скрипт Брайана не сообщает о связанном домене, а также не делает инспектор полей Свойства класса объектов в ArcCatalog. Однако теперь я, наконец, сузил его настолько, чтобы регистрировать отчет об ошибках в технической поддержке Esri.Это то, что, по-моему, Мэтту Уилки пришлось искать и писать, чтобы дополнить код Брайана. Мне нужно было получить все домены для таблиц, классов объектов в корневом каталоге базы данных и объектов во всех наборах классов объектов. Я экспортировал информацию в виде csv, чтобы позволить другим работникам очистить нашу базу геоданных от старых доменов.
источник
Esri: FAQ: Как я могу найти все места, на которые ссылаются домены в моей базе геоданных? , "Python-функции, которые могут перечислять свойства этих структур в базе геоданных. Среди свойств - ссылочные домены. Предоставляются пример сценария и файловая база геоданных, которые демонстрируют, как функции Python могут использоваться для перечисления доменов и других свойств классов объектов и Таблицы. Домены могут быть связаны с полями в классе пространственных объектов или в таблице; они могут быть дополнительно установлены для полей, классифицированных по подтипу. "
Результаты зашумлены по этому вопросу, выходят за рамки того, какие домены используются, но являются более широкой платформой для начала работы.
Отрывок кода, отредактированный для краткости:
источник