Типы пространственных данных Microsoft и ArcGIS
Базы геоданных поддерживают хранение векторных данных с использованием типов geometry и geography компании Microsoft. Эти типы встроены в SQL Server, их не нужно устанавливать отдельно. Также можно использовать ArcGIS для доступа к таблицам базы данных, содержащим столбцы geometry или geography.
Сравнение geometry и geography
Оба типа Microsoft – geometry и geography – обеспечивают SQL-доступ к пространственным данным. В следующих разделах сравниваются другие характеристики двух пространственных типов. Дополнительную информацию о типах пространственных данных Microsoft можно найти в документации к SQL Server.
Geometry
- Тип геометрии поддерживает любую систему координат X/Y.
- Для отображения и пространственных сравнений используются вычисления на плоскости (Евклидовы) и прямолинейная интерполяция между вершинами.
- Соответствует спецификации Open Geospatial Consortium (OGC) Simple Features for SQL версии 1.1.9 и совместимо с ISO-стандартом SQL MM.
Можно использовать этот тип хранения geometry с ArcGIS, если выполняется следующее:
- Система координат, которую вы хотите использовать, не является географической или не задана в словаре данных SQL Server.
- Используется SQL Server 2008 или 2008 R2, и вы хотите хранить z- или m-значения вместе с геометрией.
Geography
- Тип geography поддерживает многие стандартные географические системы координат, например, широта-долгота GPS.
Microsoft рекомендует использовать SRID и географические системы координат, заданные в словаре данных SQL Server.
- Для вычислений и пространственных сравнений используются модель эллипсоида (круглая Земля) и интерполяция отрезков линий между вершинами Great Elliptic.
- Использует глобальный (сфероидный) экстент слоя.
Координаты данных не могут выходить за пределы глобального экстента.
- В SQL Server 2008 и 2008 R2 объекты должны быть меньше полушария.
- При использовании в ArcGIS объекты не могут иметь z- или m-координаты, если используется SQL Server 2008 или 2008 R2.
Можно использовать тип хранения geography с ArcGIS, если:
- Система координат, которую вы хотите использовать, определена в словаре данных SQL Server.
- Используется SQL Server 2008 или 2008 R2, и вам не нужно хранить z- или m-значения объектов.
- Используется SQL Server 2012, в котором z- и m-значения поддерживаются ArcGIS.
- Данные охватывают крупные пространственные экстенты, и вам нужно использовать вычисления площадей и длин в SQL.
Вычисления площадей и длин в SQL, которые используют линейную интерполяцию Great Elliptic, при больших экстентах могут существенно отличаться от линейной интерполяции на плоскости.
- Необходимо использовать линейную интерполяцию Great Elliptic для пространственных SQL-запросов.
Использование пространственных типов Microsoft с ArcGIS
Для указания пространственных типов Microsoft используйте ключевые слова конфигурации
По умолчанию, в базе геоданных в SQL Server используется тип geometry Microsoft. Если вы хотите использовать тип geography Microsoft для хранения данных в базах геоданных в локальных базах данных SQL Server, вы должны либо (1) изменить значение параметра GEOMETRY_STORAGE в ключевом слове конфигурации DEFAULTS в таблице SDE dbtune на GEOGRAPHY, либо (2) указать ключевое слово конфигурации, которое обозначает значение GEOGRAPHY параметра GEOMETRY_STORAGE, при создании классов пространственных объектов.
Параметр GEOMETRY_STORAGE в ключевом слове DEFAULTS следует изменять только в том случае, если большинство ваших пользователей будет использовать большую часть времени тип данных geography. Если лишь часть ваших данных будет храниться в типе geography, укажите отдельное ключевое слово при создании класса пространственных объектов. Вы можете использовать уже имеющееся ключевое слово – GEOGRAPHY – или создать собственное пользовательское ключевое слово.
Используйте команду администрирования sdedbtune для изменения значений таблицы SDE_dbtune. Эта команда может быть установлена с помощью пакета установки ArcSDE Application Server for SQL Server.
При создании классов объектов в базах данных SQL Server выберите ключевое слово geometry или geography.
Регистрация существующей пространственной таблицы в базе геоданных
Если вы создавали в базе геоданных таблицы, содержащие пространственные столбцы геометрии Microsoft, используя стороннее приложение или SQL, вы можете зарегистрировать эти таблицы в базе геоданных, чтобы получить доступ к ее функциональности, такой как классы отношений, топология, геометрические сети, наборы кадастровых данных, наборы данных terrain или наборы схематических данных, а также иметь возможность использовать подтипы, значения по умолчанию, домены и правила проверки. Для этого таблицы должны отвечать определенным требованиям:
- Владельцем таблицы должен быть пользователь, который ее регистрирует.
- Таблица должна иметь только один пространственный столбец типа geometry или geography.
- Все пространственные объекты в столбце должны быть одного пространственного типа: точки, линии, полигоны, мультиточки, полилинии, мультиполигоны.
Добавление в столбец пространственных объектов другого типа в SQL после регистрации таблицы в базе геоданных не поддерживается, и результатом будет непредсказуемое поведение класса пространственных объектов.
- Все пространственные объекты в столбце должны иметь одинаковый идентификатор пространственной привязки (SRID).
- SRID, указываемый в момент регистрации, должен присутствовать в системной таблице SDE_spatial_references. Если его нет, при регистрации необходимо задать проекцию.
- Если таблица содержит первичный ключ, он должна быть кластеризованным.
См. в разделе Регистрация таблицы в базе геоданных инструкции по регистрации таблицы в базе геоданных из ArcGIS for Desktop.
Включение базы геоданных в существующей базе данных не приведет к автоматической регистрации таблиц в базе геоданных. Любые таблицы или классы объектов, которые будут входить в базу геоданных, должны быть по отдельности зарегистрированы в базе геоданных.
Создание пространственного индекса
Для создания пространственного индекса таблицы в SQL Server таблица должна иметь первичный ключ.
В ArcGIS
При создании в базе геоданных с помощью ArcGIS класса пространственных объектов со столбцом geometry или geography, ArcGIS по умолчанию создает кластеризованный первичный ключ по столбцу идентификатора строк (ObjectID) бизнес-таблицы и затем строит пространственный индекс на основе значений параметра B_MS_SPINDEX ключевого слова конфигурации в таблице SDE_dbtune, использованного при создании класса пространственных объектов. Когда класс пространственных объектов регистрируется как версионный, кластеризованный первичный ключ создается по столбцам идентификатора строк и идентификатора состояний в таблице Adds, а пространственный индекс строится на основе значений, заданных для A_MS_SPINDEX в ключевом слове конфигурации, использованном при создании класса пространственных объектов. Оба этих параметра имеют по умолчанию следующее значение:
GRIDS = (MEDIUM, MEDIUM, MEDIUM, MEDIUM), CELLS_PER_OBJECT = 16
О том, как задавать значения в таблице SDE_dbtune, см. Изменение содержания таблицы DBTUNE.
При создании в базе данных или в базе геоданных класса пространственных объектов со столбцом пространственных данных geometry или geography в ArcGIS, ограничивающий прямоугольник класса пространственных объектов вычисляется как экстент данных, которые нужно проиндексировать. Все пространственные объекты, находящиеся вне этого диапазона, не будут индексированы, но по-прежнему будут возвращаться при пространственных запросах. Если экстент класса пространственных объектов не задан, ограничивающий прямоугольник будет определяться максимальным диапазоном координат системы пространственной привязки класса пространственных объектов. Вы можете задать или пересчитать экстент классов пространственных объектов на закладке Экстент пространственных объектов (Feature Extent) диалогового окна Свойства класса пространственных объектов (Feature Class Properties). Если класс объектов находится в базе геоданных, при каждом переключении слоя из режима ввода/вывода только для загрузки в нормальный режим ввода/вывода, ограничивающий прямоугольник корректируется в соответствии с последним экстентом слоя.
Работа без 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>
)
Известные ограничения использования типа geography в SQL Server с ArcGIS
Ниже перечислены особенности, о которых следует помнить при хранении данных типа geography SQL Server в многопользовательской базе геоданных:
- Если вы используете SQL Server 2008 или 2008 R2, ArcGIS не может хранить z- или m-значения в типе данных geography. Поэтому, если вы переносите в базу геоданных существующие данные, такие как шейп-файл или класс пространственных объектов, из другой базы геоданных и хотите хранить их как данные типа geography, входящий набор данных не должен иметь иметь атрибуты 3D (z) или атрибуты измерений (m).
Перед импортом данных в базу геоданных на SQL Server 2008 или 2008 R2, атрибуты z и m необходимо выключить. Или импортируйте данные с атрибутами 3D или измерения в классы пространственных объектов с типом хранения geometry или двоичным типом со сжатием. Вы также можете использовать базы геоданных в SQL Server 2012.
- Измерения для данных типа geography, как правило, выполняются в метрах. Единица измерения указана в sys.spatial_ref_system; проверьте используемые единицы по значению EPSG, относящемуся к вашим данным.
- Увеличение класса объектов с типом geography в SQL Server 2008 до глобального экстента может привести к построению пространственного фильтра, который нарушает правило полушария или содержит координаты, выходящие за пределы допустимых географических экстентов, в этом случае фильтр построения формы создать не удастся и запрос не вернет результатов.