Типы пространственных данных SQL Server и ArcGIS

Базы геоданных поддерживают хранение векторных данных с использованием типов geometry и geography компании Microsoft. Эти типы встроены в SQL Server, их не нужно устанавливать отдельно. Также можно использовать ArcGIS для доступа к таблицам базы данных, содержащим столбцы geometry или geography.

Используйте тип хранения geometry с ArcGIS, если выполняется следующее:

  • Система координат, которую вы хотите использовать, не является географической или не задана в словаре данных SQL Server.
  • Вам необходимо хранить z- или m-значения вместе с геометрией.

Используйте тип хранения geography с ArcGIS, если выполняется любое условие:

  • Система координат, которую вы хотите использовать, определена в словаре данных SQL Server.
  • Данные охватывают крупные пространственные экстенты, и вам нужно использовать вычисления площадей и длин в SQL.

    Вычисления площадей и длин в SQL, которые используют линейную интерполяцию Great Elliptic, при больших экстентах могут существенно отличаться от линейной интерполяции на плоскости.

  • Необходимо использовать линейную интерполяцию Great Elliptic для пространственных SQL-запросов.

Для указания пространственных типов используйте ключевые слова конфигурации

По умолчанию в базе геоданных в SQL Server используется тип geometry. Если вы хотите использовать тип geography для хранения в базах геоданных на SQL Server, необходимо выполнить одно из действий:

  • Измените параметр конфигурации GEOMETRY_STORAGE в ключевом слове конфигурации DEFAULTS на GEOGRAPHY. Параметр GEOMETRY_STORAGE в ключевом слове DEFAULTS следует изменять только в том случае, если большинство ваших пользователей будет использовать большую часть времени тип данных geography.
  • При создании классов объектов укажите ключевое слово конфигурации, которое присваивает параметру GEOMETRY_STORAGE значение GEOGRAPHY. Если лишь часть ваших данных будет храниться в типе geography, укажите отдельное ключевое слово при создании класса пространственных объектов. Вы можете использовать уже имеющееся ключевое слово – GEOGRAPHY – или создать собственное пользовательское ключевое слово.

При создании классов объектов в базе данных SQL Server (не в базе геоданных) выберите ключевое слово geometry или geography.

Регистрация существующей пространственной таблицы в базе геоданных

Если вы создавали в базе геоданных таблицы, содержащие пространственные столбцы SQL Server, используя стороннее приложение или SQL, вы можете зарегистрировать эти таблицы в базе геоданных, чтобы получить доступ к ее функциям, таким как классы отношений, топология, геометрические сети, наборы кадастровых данных, а также иметь возможность использовать подтипы, значения по умолчанию, домены и правила проверки. Для этого таблицы должны отвечать следующим требованиям:

  • Владельцем таблицы должен быть пользователь, который ее регистрирует.
  • Таблица должна иметь только один пространственный столбец типа geometry или geography.
  • Все пространственные объекты в столбце должны быть одного пространственного типа: точки, линии, полигоны, мультиточки, полилинии, мультиполигоны.

    Добавление в столбец пространственных объектов другого типа в SQL после регистрации таблицы в базе геоданных не поддерживается, и результатом будет непредсказуемое поведение класса пространственных объектов.

  • Все пространственные объекты в столбце должны иметь одинаковый идентификатор пространственной привязки (SRID).
  • SRID, указываемый в момент регистрации, должен присутствовать в системной таблице SDE_spatial_references. Если его нет, при регистрации необходимо задать проекцию.
  • Если таблица содержит первичный ключ, он должен быть кластеризованным.
Примечание:

Включение базы геоданных в существующей базе данных не приведет к автоматической регистрации таблиц в базе геоданных. Любые таблицы или классы объектов, которые будут входить в базу геоданных, должны быть по отдельности зарегистрированы в базе геоданных.

Создайте пространственный индекс

Для создания пространственного индекса таблицы в SQL Server таблица должна иметь первичный ключ.

В ArcGIS

Если вы используете ArcGIS для создания класса объектов со столбцом geometry или geography, ArcGIS по умолчанию создает кластеризованный первичный ключ в столбце ObjectID бизнес-таблицы. Затем, ArcGIS создает пространственный индекс, используя настройки SQL Server по умолчанию. Когда класс пространственных объектов регистрируется как версионный, кластеризованный первичный ключ создается по столбцам ObjectID и идентификатора состояний в таблице Adds, затем строится пространственный индекс.

ArcGIS вычисляет ограничивающий прямоугольник класса пространственных объектов с столбцами пространственных данных типа geometry или geography как экстент данных, которые нужно проиндексировать. Все пространственные объекты, находящиеся вне этого диапазона, не индексируются, но по-прежнему будут возвращаться при пространственных запросах. Если экстент класса пространственных объектов не задан, ограничивающий прямоугольник определяется максимальным диапазоном координат системы пространственной привязки класса пространственных объектов. Вы можете задать или пересчитать экстент классов пространственных объектов в диалоговом окне Свойства класса пространственных объектов. Если класс объектов находится в базе геоданных, при каждом сбросе и перестроении пространственного индекса ограничивающий прямоугольник корректируется в соответствии с последним экстентом.

Вне ArcGIS

Если пространственные таблицы созданы не в ArcGIS, например, с помощью SQL, необходимо создать первичный ключ таблицы и затем пространственный индекс, используя SQL. Ниже показан синтаксис SQL для создания пространственного индекса в таблице, содержащей столбец geometry:

CREATE SPATIAL INDEX <index_name>
 ON <table> (<spatial column>)
 USING GEOMETRY_GRID
 WITH (
  BOUNDING_BOX = minx,miny,maxx,maxy),
  GRIDS = (low|medium|high, low|medium|high, low|medium|high, low|medium|high), 
  CELLS_PER_OBJECT = n,
  <other regular btree index options like filegroups, fill factors, etc>
 )

Для создания пространственного индекса в столбце geography используется следующий синтаксис:

CREATE SPATIAL INDEX <index_name>
 ON <table> (<spatial column>)
 USING GEOGRAPHY_GRID
 WITH (
  GRIDS = (low|medium|high, low|medium|high, low|medium|high, low|medium|high),
  CELLS_PER_OBJECT = n,
  <other regular btree index options like filegroups, fill factors, etc>
 )

ArcGIS добавляет столбец для хранения дополнительных элементов геометрии

Типы geometry и geography не могут хранить все типы геометрических элементов, которые должны поддерживать базы геоданных. Поэтому при создании или регистрации класса объектов, который использует тип хранения geometry или geography с базой геоданных SQL Server, ArcGIS добавляет в бизнес-таблицу столбец для хранения этих дополнительных элементов геометрии. Столбец называется gdb_geomattr_data. Дополнительные элементы геометрии включают:

  • Параметрические объекты, например, дуги окружности и кривые Безье, созданные с помощью расширенных инструментов редактирования
  • PointID
  • Объекты-мультипатчи
  • Патчи поверхности из дополнительного модуля ArcGIS Spatial Analyst extension

Когда ArcGIS определяет, что у источника данных есть эти дополнительные элементы геометрии, то простое представление геометрии хранится в столбце shape, а неизмененные данные (включая дополнительные элементы) хранятся в столбце gdb_geomattr_data.

Известные ограничения использования типа geography в SQL Server с ArcGIS

Измерения для данных типа geography, как правило, выполняются в метрах. Единица измерения указана в sys.spatial_ref_system; проверьте используемые единицы по значению EPSG, относящемуся к вашим данным.