Новые типы данных в SQL Server 2008 - Пространственные типы данных

ОГЛАВЛЕНИЕ

 

Пространственные типы данных

Пространнственные данные – это данные, определяющие географические расположения и формы, преимущественно на Земле. Это могут быть ориентиры, дороги и даже расположение фирмы. В SQL Server 2008 есть географические (geography) и геометрические (geometry) типы данных для работы с этой информацией.

Тип данных geography работает с инфорацией для шарообразной земли. Модель шарообразной земли использует при расчетах кривизну земной поверхности. Информация о положении задается широтой и долготой. Эта модель хорошо годится для приложений, связанных с морскими перевозками, военным планированием и краткосрочными приложениями, имеющими привязку к земной поверхности. Эту модель нужно использовать, если данные хранятся в виде широт и долгот.

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

Типы geography и geometry создаются из векторных объектов, заданных в форматах Well-Known Text (WKT) или Well-Known Binary (WKB). Это форматы для перенесения пространственных данных, описанные в простых функциях открытого геопространственного консорциума (Open Geospatial Consortium (OGC) Simple Features) для спецификаций SQL (SQL Specification). На рис. 10 перечислены семь типов векторных объектов, поддерживаемых SQL Server 2008.

Рис. 10 Vector objects supported by SQL Server 2008

Объект Описание
Point Расположение.
MultiPoint Набор расположений.
LineString Набор из нуля или более точек, соединенных линиями.
MultiLineString Набор прямых (linestring).
Polygon Непрерывная область, описываемая набором закрытых прямых (linestring).
MultiPolygon Набор многоугольников (polygon).
GeometryCollection Собрание типов geometry.

Чтобы создать тип geography с одним или несколькими векторными объектами, сперва надо объявить тип geography в своем сценарии T-SQL, как на рис. 11. Затем нужно вызвать один из методов с рис. 12 и передать строку символов своего векторного объекта и идентификатор пространственного отношения (Spatial Reference ID) (SRID). SRID – это система идентификации пространственного отношения, созданная европейской группой нефтепоисковых исследований (European Petroleum Survey Group). Это часть набора стандартов, разработанных для картографии, геодезии и хранения геодезических данных. Каждый SRID задает для географических расчетов определенный тип эллипсоида. Это важно, потому что земля – не идеальная сфера. SQL Server 2008 может выполнять расчеты только на идентичных SRID.

Рис. 12 Construct objects for geography and geometry

Метод Описание
STGeomFromText Создает элементы geography из текста на вводе.
STPointFromText Создает элемент geography Point из текста на вводе.
STMPointFromText Создает элемент geography MultiPoint из текста на вводе.
STLineFromText Создает элемент geography LineString из текста на вводе.
STMLineFromText Создает элемент geography MultiLineString из текста на вводе.
STPolyFromText Создает элемент geography Polygon из текста на вводе.
STMPolyFromText Создает элемент geography MultiPolygon из текста на вводе.
STGeomCollFromText Создает элемент geography Geometry­Collection из текста на вводе.

Рис. 11 Create points, lines, and polygon geometry


DECLARE @geo1 geometry
SELECT @geo1 = geometry::STGeomFromText('POINT (3 4)', 0)
PRINT @geo1.ToString()

DECLARE @geo2 geometry
SELECT @geo2 = geometry::Parse('POINT(3 4 7 2.5)')
PRINT @geo2.STX;
PRINT @geo2.STY;
PRINT @geo2.Z;
PRINT @geo2.M;

DECLARE @geo3 geography;
SELECT @geo3 = geography::STGeomFromText(
    'LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326);
SELECT @geo3.ToString();

--Results
--POINT (3 4)
--3
--4
--7
--2.5

DECLARE @gx geometry;
SET @gx = geometry::STPolyFromText(
    'POLYGON ((5 5, 10 5, 10 10, 5 5))', 0);
PRINT @gx.ToString();
--Results
--POLYGON ((5 5, 10 5, 10 10, 5 5))