ArcGIS применяет пространственные индексы для увеличения производительности выполнения пространственных запросов к классам объектов. Определение пространственного объекта, выбор объектов путем наведения и растягивания окна, а также перемещение и масштабирование – все это обязывает ArcMap использовать пространственный индекс для поиска объектов.
При создании пустого класса пространственных объектов* или импорте данных с целью создания класса объектов в базе геоданных из ArcGIS в классе пространственных объектов создается пространственный индекс. Пространственный индекс используется при запрашивании и редактировании данных.
*Если вы создаете пустые классы объектов в базе геоданных в DB2, пространственные индексы не создаются.
Типы пространственных индексов
Пространственные индексы работают по-разному в зависимости от типа источника данных. Классы пространственных объектов в базах геоданных следующих типов используют систему сеток (гридов) в качестве пространственных индексов:
- Персональные базы геоданных
- Файловые базы геоданных
- Базы геоданных в DB2
- Базы геоданных в Oracle, если класс объектов содержит Esri ST_Geometry или поле, хранящее геометрию в бинарном формате
- Базы геоданных в SQL Server, если класс объектов содержит поле, хранящее геометрию в бинарном формате
Классы пространственных объектов в базах геоданных следующих типов используют пространственные индексы типа R-tree:
- Базы геоданных в Oracle, если класс объектов содержит поле геометрии Oracle Spatial (SDO_Geometry)
- Базы геоданных в Informix
- Базы геоданных в PostgreSQL
Классы объектов в базах геоданных SQL Server, содержащие поле хранения геометрии или географических координат, используют модифицированный пространственный индекс B-tree.
Как ArcGIS поддерживает пространственные индексы
ArcGIS автоматически производит перестроение пространственного индекса по окончании определенных операций в файловой, многопользовательской базе геоданных, базе данных рабочей группы и настольных базах геоданных для обеспечения оптимальной работы индекса. Ниже приводится описание того, как ArcGIS управляет пространственным индексом:
- При создании пустого класса объектов в мастере Новый класс объектов создается пространственный индекс для файловой базы геоданных, базы данных рабочей группы и всех многопользовательских баз геоданных, кроме баз DB2. Пространственный индекс используется при редактировании, выполнении запросов и запуске команд Загрузить данные (Load Data). В многопользовательских базах геоданных в DB2 пространственный индекс создается после загрузки данных в пустой класс объектов.
- При импорте данных из персональной базы геоданных, шейп-файла или покрытия, а также при импорте CAD-данных или данных SDC в файловую, многопользовательскую или настольную базу геоданных, для нового класса пространственных объектов пространственный индекс рассчитывается автоматически.
- Пространственный индекс автоматически перестраивается при использовании команд Копировать (Copy) и Вставить (Paste) в ArcCatalog для копирования класса пространственных объектов из персональной базы геоданных в файловую, многопользовательскую, настольную базу геоданных или в базу геоданных рабочей группы. Пространственный индекс также перестраивается, если вы копируете класс пространственных объектов из Oracle Spatial, PostgreSQL или Informix. Если вы скопируете класс пространственных объектов из файловой или многопользовательской базы геоданных, которые используют индекс на основе грида (Oracle binary и ST_Geometry, SQL Server binary или DB2), в другую базу геоданных, которая также использует индекс на основе грида, то индекс будет скопирован вместе с исходными данными и не будет пересчитан.
- При запуске инструмента геообработки, создающего класс объектов, инструмент создает пространственный индекс на основе объектов нового класса.
- Когда вы сохраняете изменения или используете команды Загрузить данные (Load Data) с классом объектов, который не содержит пространственного индекса, индекс будет создан в конце операции сохранения изменений или загрузки данных.
- Сжатые классы пространственных объектов файловых баз геоданных не используют тот же самый тип пространственного индекса, который используется несжатыми классами пространственных объектов. При сжатии класса пространственных объектов файловой базы геоданных автоматически происходит его переиндексация. Данный индекс не может быть изменен. При отмене сжатия класса пространственных объектов тот пространственный индекс, который был у сжатого ранее класса пространственных объектов, автоматически устанавливается заново.
Когда обновляется пространственный индекс?
Поскольку ArcGIS поддерживает пространственный индекс в файловых, многопользовательских, настольных базах геоданных и базах геоданных рабочей группы, то вам редко придется вручную производить пересчет индекса. Рекомендуется производить пересчет индекса вручную только после добавления большого количества объектов, которые сильно отличаются размером от тех объектов, которые уже были в классе пространственных объектов. Это относится только к добавлению объектов в сессиях редактирования. Например, вы могли начать сессию редактирования и добавить большое количество линейных объектов вручную или с помощью Загрузчика объектов. Многие из добавленных вами объектов будут либо значительно длиннее, либо значительно короче, чем объекты, которые уже есть в классе пространственных объектов. Для обеспечения оптимальной работы пространственного индекса при добавлении новых объектов вы должны обновить его.
При создании класса пространственных объектов в персональной базе геоданных с помощью мастера Новый класс пространственных объектов, инструмента геообработки или любого другого способа ArcGIS вычислит пространственный индекс. Созданный для класса объектов персональной базы геоданных пространственный индекс основан на координатной системе класса объектов и всегда является оптимальным. Его изменить нельзя.