Идентификация объектов

Каждый объект системы ИнГЕО, (карта, слой, стиль, пространственный объект и пр.) имеет АБСОЛЮТНО уникальный идентификатор.

Полный формат такого идентификатора следующий: "{группа}номер", например "{EE02D47E-2B3A-468c-9127-DB2F0CFF0E7C}1256".

Что такое "группа" и что такое "номер"?

Все множество идентификаторов разбивается на подмножества, называемые группами идентификаторов (пространства идентификаторов). Каждая группа имеет абсолютно уникальный код (GUID). Код группы генерируется при помощи специальной функции операционной системы, гарантирующей абсолютную уникальность этого кода.

"номер" - это некоторое уникальное целое число в пределах группы.

Сам же идентификатор является совокупностью кода группы и уникального номера в пределах этой группы.

Поскольку в БД идентификаторы присутствуют повсеместно, их хранение в полной форме было бы весьма накладным. Поэтому для хранения идентификаторов в БД применяются следующие "хитрости":

В БД содержится таблица "коротких" псевдонимов для всех групп, используемых во всех идентификаторах, содержащихся в БД. Структура таблицы: "целое число", "GUID". Например: "1", "{E55B79A7-4A7A-49e3-B8EC-F4DDDD08E29F}" "2", "{0C99601E-512E-41b1-AFC8-5EC3E30EA1FC}" ... Каждый идентификатор записывается в сокращенной форме: "псевдоним группы" "номер". Физически это представляется двенадцатисимвольной строкой формата "GGGGNNNNNNNN", где: GGGG - шестнадцатеричное представление псевдонима группы, NNNNNNNN - шестнадцатеричное представление номера идентификатора в пределах группы. При миграции идентификаторов из одной БД в другую глобальный идентификатор не меняется, а вот сокращенная форма представления может измениться в части GGGG, так как псевдоним группы в разных БД может отличаться. Например, группа "{0C99601E-512E-41b1-AFC8-5EC3E30EA1FC}" в одной БД может иметь псевдоним "2", а в другой - "5". Это значит, что в одной БД сокращенная форма идентификатора будет иметь вид "0002NNNNNNNN", а в другой - "0005NNNNNNNN", хотя это один и тот же идентификатор.

При создании нового объекта Ингео создает новый идентификатор увеличивая "номер", либо создавая новую группу (если текущая уже заполнена).

Замечание:
<абсолютно - уникальный идентификатор> - уникальность идентификатора определяется уникальностью генерируемого системой GUID, если на машине установлена сетевая карта (не битая) с корректным MAC адресом, то GUID должен быть уникален

При импорте короткая "форма идентификатора" может изменится, но сам идентификатор (в его полной форме) остается постоянным. Поэтому при написанни модулей для ГИС ИнГео, если Вы сохраняете настройки во внешнем источнике и содержащие идентификаторы объектов ГИС, желательно сохранять их в полной форме.

Полный идентификатор, так же можно изменить, но обычно это делают в случае ошибок в БД, при помощи внешних утилит.

Глобальные идентификаторы пространственных объектов также изменяются при копировании объектов из одного слоя в другой.

См.также

IIngeoDb, GlobalIDToLocalID, LocalIDToGlobalID, IDSpaces