Доступно с лицензией Standard или Advanced.
ArcGIS обнаруживает конфликты при согласовании версии, которую вы редактируете, с целевой версией. Конфликты возникают в следующих случаях:
- Один и тот же объект обновлен в текущей версии, которая редактируется, и в целевой версии.
- Один и тот же объект обновлен в одной версии и удален в другой.
- Топологически связанный объект или класс отношений изменяется в текущей редактируемой версии и в целевой версии.
Если возникнут какие-либо конфликты, то ArcGIS будет разрешать их в пользу редактируемой версии или в пользу представления целевой версии, в зависимости от ваших настроек. Как только конфликты будут разрешены, вы сможете произвести их поочередный обзор и при необходимости внести любые изменения. Например, если конфликт будет разрешен в пользу редактируемой версии, то вы сможете выбрать опцию замены объекта в пользу целевой версии или даже использовать инструменты редактирования для его изменения нужным образом.
Интерактивное разрешение конфликтов
Если при согласовании обнаруживаются конфликты, их можно просмотреть с помощью интерактивного диалогового окна Конфликты (Conflicts). В этом окне содержатся все конфликтующие классы объектов, а также их объекты и строки, которые находятся в конфликте. В этом окне также можно сделать следующее:
- Определить, какие поля или строки конфликтуют.
- Произвести обзор конфликтов.
- Разрешить конфликты путем указания того, какое представление следует использовать для замены пространственных объектов или атрибутов.
Определение, какие поля или строки конфликтуют
Все конфликтующие классы и объекты перечислены в списке в верхней левой части диалогового окна Конфликты (Conflicts). В данном списке перечислены конфликты (Conflicts), в котором указывается общее количество конфликтов, обзор которых был произведен, а также общее количество конфликтов в классах пространственных объектов. В примере ниже указан перечень Конфликты (Conflicts): В примере ниже имеется два конфликтующих объекта, и ни один из них не был просмотрен.
Conflicts (2/2)
В списке Конфликты (Conflicts) указаны классы объектов, содержащие конфликты. Рядом с ними значится число конфликтов в классе объектов, которые вы просмотрели или заменили, и число конфликтов в классе объектов. В этом примере конфликты имеются в двух классах объектов, по одному в каждом из них.
Conflicts (2/2) sde.RJP.ponds (1/1) sde.RJP.lakes (1/1)
Под каждым из классов пространственных объектов перечислены идентификаторы ObjectID конфликтующих объектов. В данном примере имеется конфликт для объекта ObjectID 30 в классе объектов пруды (ponds) и конфликт для объекта ObjectID 11 в классе объектов озера (lakes).
Conflicts (2/2) sde.RJP.ponds (1/1) 30 sde.RJP.lakes (1/1) 11
Вы можете заметить, что ни один из этих объектов не был просмотрен или замещен, потому что отношение между общим количеством конфликтующих объектов (1/1) и количеством просмотренных конфликтов (2/2) остается одинаковым для каждого из классов пространственных объектов. Вы также можете сказать о том, что ни один из конфликтов не был просмотрен или заменен, потому что все идентификаторы объектов (object ID) и классы пространственных объектов выделены жирным шрифтом.
Когда вы помечаете объекты как просмотренные (см. раздел «Отметить как просмотренный или Отметить как не просмотренный» (Mark as visited or mark as not visited) ниже) или замещаете объекты (см. раздел «Разрешение конфликтов» (Resolving conflicts) ниже), первое число в скобках уменьшается, а просмотренный объект ObjectID перестает быть выделенным. Если все идентификаторы объектов (Object ID) в классе объектов были отмечены как просмотренные или замещенные, то имя класса объектов больше не будет выделено жирным шрифтом. Если в примере с прудами и озерами отметить объект с ObjectID 30 как просмотренный, в списке диалогового окна Конфликты (Conflicts) отобразится следующее:
Conflicts (1/2) sde.RJP.ponds (0/1) 30 sde.RJP.lakes (1/1) 11
Если бы в ponds был второй конфликтный объект, то список мог бы выглядеть так:
Conflicts (2/3) sde.RJP.ponds (1/2) 5 30 sde.RJP.lakes (1/1) 11
Этот список означает, что в результате операции согласования выявлено три конфликта, а один из них просмотрен или замещен. В списке также указывается, что идентификатором конфликтного объекта (object ID), который был просмотрен или заменен, является 30, а также то, что этот объект содержится в классе пространственных объектов ponds.
Когда вы выделяете отдельный объект в этом списке, то в правой части от списка диалогового окна Конфликты (Conflicts) появляются столбцы и их атрибуты в версии до согласования, конфликтной версии и версии общего предка этого объекта.
- Версия до согласования представляет пространственный объект и изменения атрибутов, которые вы произвели.
- Конфликтная версия представляет объект и его атрибуты, как они были отредактированы и согласованы другим пользователем.
- Версия общего предка содержит представление пространственного объекта и его атрибутов, как они хранятся в базе данных; такими были объект и атрибуты до произведения изменений.
Красная точка слева от имени поля означает наличие конфликта. Например, если геометрия редактировалась в каждой версии, красная точка будет рядом с полем Shape.
Если конфликтовать будут еще какие-то атрибутивные поля, то красные точки будут отображены и с ними рядом. Если какой-то объект был удален в какой-то версии, то для значения атрибута этой версии появится надпись <deleted>.
Если в дочернюю версию были вставлены объекты, которые спровоцировали конфликт, то и в целевой версии, и в версии общего предка появится сообщение "не существовало" (<Did not exist>).
С помощью двух кнопок, расположенных в нижней части диалогового окна, вы можете переключать отображение видимых полей: либо все поля, либо только конфликтующие.
Когда у вас имеются атрибуты и их значения для всех представлений конфликтного объекта, то вы можете видеть, как атрибутивные значения отличаются между версиями. Это может помочь вам выбрать, какое представление данных вам нужно сохранить.
Просмотр конфликтов
Если в этом диалоговом окне вы нажмете кнопку Показать конфликты (Conflict Display), то в его нижней части будут отображены два представления конфликтующих объектов – версия до согласования и конфликтная версия.
С помощью ниспадающих списков, имеющихся под каждым представлением, можно переключаться между тремя различными представлениями конфликтующих объектов: версией до согласования, конфликтной версией и версией общего предка. Обратите внимание на то, что эти объекты будут отличаться внешне, только если конфликтуют их геометрии.
Под каждым представлением есть панель инструментов, которую можно использовать для навигации и идентификации соответствующего представления.
Можно приблизить изображение конфликтного объекта на карте в какой-то определенной версии. Для этого в списке объектов щелкните на нем правой кнопкой мыши, а затем выберите Приблизить к версии до согласования (Zoom To Pre-Reconcile Version), Приблизить к конфликтной версии (Zoom To Conflict Version) или Приблизить к версии общего предка (Zoom To Common Ancestor Version).
Если имеются конфликты геометрии, вы также можете увидеть разные представления на карте, щелкнув правой кнопкой на поле Форма (Shape) в списке и нажав кнопку Показать (Display).
Откроется диалоговое окно Установки отображения конфликтов (Conflict Display Settings). Щелкните на представлении, которое вы хотите отобразить на карте.
После нажатия OK на карте происходят следующие изменения:
- Представление конфликтной (целевой) версии отображается красным цветом.
- Представление версии до согласования отображается зеленым цветом.
- Представление версии общего предка отображается синим цветом.
Если бы вы включили в окне Установки отображения конфликтов (показаны на рисунке выше) такие опции, то смогли бы увидеть на карте такое изображение:
Если в диалоговом окне Установки отображения конфликтов (Conflict Display Settings) отмечено Отображать текущую версию (Draw current version), на карте вы увидите примерно такую картину:
После того, как вы просмотрите конфликты, вы сможете отметить их как просмотренные или выбрать опцию замещения, чтобы разрешить конфликт.
Отметить как просмотренный или Отметить как не просмотренный (Mark as visited or mark as not visited)
Как упоминалось в разделе «Определение, какие поля или строки конфликтуют», вы можете пометить пространственный объект как просмотренный. Это значит, что вы видели конфликт, но сейчас не хотите выбирать опцию замещения. Вы также можете вести учет того, какие объекты в этом списке были просмотрены: отмеченные как просмотренные объекты больше не отображаются жирной границей.
Если вы решили вернуться к конфликтующему объекту позднее, щелкните правой кнопкой мыши на идентификаторе объекта (ObjectID) в списке Конфликты (Conflicts), а затем нажмите кнопку Отметить как не просмотренный (Mark as not Visited). После этого объект снова будет выделен жирной границей.
Разрешение конфликтов
При устранении конфликтов вы решаете, какое представление пространственных объектов или атрибутов следует оставить. Независимо от того, выполняется согласование в пользу целевой или редактируемой версии, можно указать, какое представление следует сохранить: представление версии до согласования (отображение в версии до согласования), представление конфликтной версии (отображение изменений, внесенных другим редактором) или представление общего предка (отображение объекта или атрибута в целевой версии).
При разрешении конфликтов можно использовать пять вариантов замещения.
- Замещение атрибутов
Это происходит на уровне поля. При наличии конфликтов в атрибутах достаточно заменить значение атрибута в текущей версии значением из представления версии до согласования, конфликтующей версии или версии общего предка. Для этого щелкните правой кнопкой мыши на атрибуте в конфликте и выберите в меню необходимую опцию.
- Замещение пространственных объектов
Это происходит на уровне строки. Можно заменить весь объект представлением объекта в версии до согласования, конфликтующей версии или версии общего предка. Это значит, что все поля в конфликте будут заменены.
- Замещение на уровне классов
Чтобы разрешить конфликт, можно заменить текущее представление всего класса объектов представлением объекта в версии до согласования, конфликтующей версии или версии общего предка. Это приведет к одновременной замене всех конфликтующих объектов и атрибутов, позволяя быстро обновить и заменить конфликтующие объекты. Если в списке Конфликты (Conflicts) присутствует несколько объектов, все они заменяются выбранной версией.
Чтобы выбрать опцию замены на уровне класса, щелкните правой кнопкой мыши на имени класса объектов в списке Конфликты (Conflicts) и выберите необходимую версию.
- Полное замещение
Это замещение на корневом уровне. Вследствие использования данной опции замещения все конфликтные объекты и классы объектов в списке заменяются выбранным представлением. При наличии нескольких классов объектов и нескольких объектов в конфликте все они заменяются выбранной версией.
Щелкните правой кнопкой мыши на имени класса в списке Конфликты (Conflicts) и выберите версию, в которой необходимо заменить все конфликты.
- Слияние геометрии
Происходит на уровне полей и специально связано с атрибутом Shape. Опция слияния геометрии доступна там, где конфликт затрагивает поле Shape. Если два редактора редактируют геометрию одного и того же пространственного объекта, но в разных частях этого объекта, у них есть опция слияния геометрии, чтобы принять обе редакторские правки. Опция слияния геометрии доступна только из меню быстрого доступа поля Shape.После слияния геометрии в полученный пространственный объект будут внесены правки обоих редакторов:Если правки одного редактора охватывают область, уже отредактированную другим редактором, их области редактирования будут перекрываться. Хотя слияние геометрии может быть опцией, попытка это сделать провалится. Если это произошло, появляется следующее сообщение об ошибке:
"При слиянии геометрии обнаружена ошибка. Не удалось совместить две геометрии. Области редактирования перекрываются."
Конфликты в геометрических сетях
При редактировании сетевых объектов конфликты могут вызвать изменения геометрической или логической сети.
Например, при добавлении точки обслуживания к линии сети (main), линия сети (main) не будет в геометрической сети разделена физически, но будет разделена в логической сети. Следовательно, пока вы не отредактируете геометрию линии сети (main) напрямую, она будет редактироваться на логическом уровне. Если в целевой версии, которую вы согласуете, также будет изменена линия сети (main), то новая точка обслуживания, которую вы вставите, образует конфликт с линией сети.
Обзор конфликтов, создаваемых в классах пространственных объектов геометрических сетей, требует понимания того, каким образом существующая топология сети, представленная в сеансе редактирования, будет обновлена при использовании команды Заменить на (Replace With) диалогового окна Конфликты (Conflicts).
В примере водопроводной сети два пользователя изменили водопроводную магистраль — один путем добавления атрибута, а другой путем подключения новой точки обслуживания. При просмотре конфликта надо понять, что изменилось, и посмотреть, не требуется ли для разрешения конфликта предпринимать дальнейшие действия. Поскольку линия водопровода содержит корректное значение атрибута для диаметра, то новая точка обслуживания будет корректно подсоединена к водопроводу. Но бывают случаи, когда при разрешении конфликтов привлекается соединяющий класс пространственных объектов, который также обновляет ребра соединенной сети.
Конфликты в объектно-связанных аннотациях
При работе со связанными с объектами аннотациями вам нужно запомнить одно правило: при замещении объекта, у которого есть аннотация, связанная с объектом, новый объект и аннотация заменят и объект, и его аннотацию. Поэтому вам лучше продолжить редактирование новой аннотации, чтобы избежать двух аннотаций.
Например, вы можете столкнуться с конфликтом при перемещении объекта и смещении его аннотации. В конфликтной версии были произведены такие же изменения: объект был перемещен, а аннотация повернута. Если вы решите заменить этот объект объектом конфликтной версии, то существующая связанная с объектом аннотация будет удалена, будет вставлен конфликтный объект, и будет создана новая аннотации. После этого вам будет нужно отредактировать новую аннотацию, переместив и повернув ее, как вам надо.
Вы также можете столкнуться с конфликтом, когда другой редактор удалил какой-то объект в версии DEFAULT базы геоданных, в результате чего связанная с ним аннотация также была удалена. В дочерней версии базы геоданных вы отредактируете аннотацию, которая только что была удалена. Если при согласовании вы решаете заменить объект объектом из версии редактирования, то тот объект, который был удален из версии DEFAULT, будет замещен объектом вместе с аннотацией из версии редактирования, и у вас получится две аннотации для одного объекта.
Конфликты в отношениях
В отношениях имеются зависимости, которые схожи с зависимостями связанных с объектами аннотаций. Удаление объекта из класса отношений объектов-источников (origin relationship class) может вызвать отправку сообщения на удаление объекта из класса отношений объектов-адресатов (destination relationship class). Поэтому вам следует учитывать возможные последствия простой замены конфликтов, возникающих в классах пространственных объектов, участвующих в классах отношений.
Приведем пример того, когда между классами отношений может возникнуть конфликт:
- Вы обновляете Первичное поле объектов-источников (Origin Class Primary field), разрывая отношение в версии A.
- В то же самое время вы обновляете связанный объект-адресат в версии B.
- Поскольку класс объектов-адресатов зависит от класса объектов-источников, то при согласовании версий будет обнаружен конфликт.
Другой пример:
- В наборе классов объектов электросетей вы удалили столб, который имеет связь с трансформатором: это вызовет удаление связанного со столбом трансформатора.
- В другой сессии редактирования, начавшейся в то же время, редактор изменил атрибуты трансформатора, который только что был удален, поскольку вы удалили связанный с ним столб.
- При согласовании изменений будет обнаружен конфликт в обновлении-удалении.
Рассмотрим последний пример – если второй пользователь выбрал бы опцию замены всех конфликтов с использованием представлений редактируемой версии, то столб и трансформатор, удаленные в течение вашей сессии редактирования, были бы созданы заново. Помимо этого, был бы создан трансформатор из сессии второго редактора, что привело бы к появлению двух трансформаторов. Вы не смогли бы обнаружить этого на карте, потому что они были бы расположены друг на друге; однако в атрибутивной таблице вы бы могли увидеть две разные строки для объектов трансформаторов.
Конфликты в топологиях
Поскольку объекты в классах пространственных объектов, которые участвуют в топологии, могут разделять отдельные элементы своей геометрии с другими объектами, процесс обзора конфликтов между версиями классов пространственных объектов, образующих топологию, отличается от процесса замены конфликтов при работе с простыми классами пространственных объектов. Он также отличается от процесса, используемого для замещения конфликтов в геометрических сетях, классах отношений и связанных с объектами аннотаций.
Когда класс пространственных объектов участвует в редактируемой топологии, другие топологически связанные объекты могут быть одновременно изменены. Изменяемые объекты могут принадлежать к тому же самому классу пространственных объектов или к одному или нескольким другим классам пространственных объектов. Для управления процессом обнаружения новых топологических ошибок, появившихся при внесении изменений, в топологиях производится запись областей, где были произведены изменения, в виде измененных областей. Редактирование объектов в топологии производит в топологии создание измененных областей.
Новые топологические ошибки могут возникать при согласовании редактируемых родительских и дочерних версий, даже когда измененные области в рамках каждой версии были проверены и в них нет ошибок. Для обнаружения таких топологических ошибок в дочерних версиях происходит перевод всех измененных областей в состояние изменения. Это производится после того, как изменения из родительской версии переносятся в дочернюю в процессе согласования. После согласования эти области могут быть проверены еще раз, и все ошибки будут обнаружены.
Согласование двух версий, которые не содержат активных измененных областей, может привести к тому, что измененные области все равно останутся. Любая область, представленная в дочерней версии, независимо от того, была она проверена или нет, станет измененной областью после согласования версий. В общем, при согласовании версии верно следующее:
- Любая измененная область, которую дочерняя версия унаследовала от родительской версии, независимо от того, была ли она проверена в дочерней версии или нет, останется измененной областью после этого согласования.
- Любая измененная область, которая была создана для любого объекта, который был создан, обновлен или удален в дочерней версии, независимо от того, была она проверена или нет, останется измененной областью после этого согласования.
Конфликты в наборе сетевых данных
Редактирование класса объектов, который участвует в наборе сетевых данных, может изменить связность, т. е. то, как элементы сети связываются между собой. (Элементами сети могут быть улицы, путепроводы и т. д.) Более того, в наборе сетевых данных могут участвовать несколько классов объектов. Поэтому редактирование одного исходного класса объектов может изменить связность элементов сети, созданных из других исходных классов объектов.
Поскольку в наборе сетевых данных могут участвовать несколько классов объектов, а связность частично основывается на геометрических отношениях, процесс просмотра конфликтов в наборах сетевых данных очень похож на аналогичный процесс для топологий. Четким индикатором этого является то, что наборы сетевых данных также используют измененные области, но они используются для управления процессом обнаружения изменений связности, а не ошибок топологии.
Фильтрация конфликтов на уровне поля
Бывают случаи, когда необходимо избежать изменений, примененных по отношению к одному полю или к набору полей, если в процессе согласования были определены конфликты. Примеры, когда может быть полезно избежание конфликтов по полю в процессе согласования:
- Выполняется пакетное обновление по одному полю в разных версиях
- Информация записывается в поле на основе изменений, выполненных в данной версии
Фильтр конфликтов полей обеспечивает возможность отметить тегом поле или набор полей в пределах классов объектов, где выявление конфликтов не производится. Для этого необходимо, чтобы была выбрана опция определения конфликтов по атрибуту. Когда для поля задан фильтр конфликтов, значение поля после процесса согласования будет зависеть от того, в пользу какой версии было проведено согласование – в пользу целевой или в пользу редактируемой. Если согласование проведено в пользу целевой версии, поля с фильтром конфликтов получат значение целевой версии. Если согласование проведено в пользу редактируемой версии, поля с фильтром конфликтов получат значение редактируемой версии.
Для того, чтобы задать фильтрацию от конфликтов для группы полей, можно использовать инструмент Добавить фильтр конфликтов полей (Add Field Conflict Filter). Инструмент Удалить фильтр конфликтов полей (Remove Field Conflict Filter) удалит из этих полей фильтр конфликтов. Для того, чтобы узнать, заданы ли фильтры конфликтов для класса объектов или таблицы, можно использовать GP-функцию (GP function) ListFieldConflictFilters.