Создание пространственных объектов и преобразование из пространственных объектов

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

Для получения пространственного объекта из текстового описания используется функция STGeomFromText(<строка_описания_объекта>, <id_проекции>), где <строка_описания_объекта> - текстовая строка с описанием объекта, а <id_проекции> - идентификатор используемой в карте проекции. Для идентификатора проекции в большинстве случаев следует оставлять значение 0 - автоматическое задание проекции. Формат строки описания объекта зависит от типа создаваемого объекта:

Многоугольник (POLYGON)

POLYGON ((<X1> <Y1>, <X2> <Y2>,....,<XN> <YN>)), где <X1> <Y1> - <XN> <YN> - координаты вершин многоугольника;

Ломаная (LINESTRING)

LINESTRING (<X1> <Y1>, <X2> <Y2>,....,<XN> <YN>), где <X1> <Y1> - <XN> <YN> - координаты точек соединяемых линиями ломаной в том порядке, в котором они заданы;

Точка (POINT)

POINT (<X> <Y>), где <X>,<Y> - координаты точки;

Набор многоугольников (MULTIPOLYGON)

MULTIPOLYGON (((<X11> <Y11>,....,<X1N> <Y1N>)),((<X21> <Y21>, ....,<X2N> <Y2N>))...,((<XN1> <YN1>,....,<XNN> <YNN>))), где <X11> <Y11> - <X1N> <Y1N> - координаты вершин первого многоугольника, <X21> <Y21> - <X2N>,<Y2N> , - второго и т.д.

Набор ломаных (MULTILINESTRING)

MULTILINESTRING ((<X11> <Y11>,....,<X1N> <Y1N>),(<X21> <Y21>, ....,<X2N> <Y2N>)...,(<XN1> <YN1>, ....,<XNN> <YNN>)), где <X11> <Y11> - <X1N>,<Y1N> - координаты точек первой ломаной, <X21> <Y21> - <X2N> <Y2N>,- второй и т.д.

Набор ломаных (MULTIPOINT)

MULTIPOINT ((<X1> <Y1>),(<X2> <Y2>),....,(<XN> <YN>)), где <X1> <Y1> - координаты первой точки, <X2> <Y2>,- второй и т.д.

Примеры формирование геометрических объектов из текстового описания

Создание многоугольника

Geometry::STGeomFromText("POLYGON((5522.66 9710.55,5523.11 9711.31,5523.59 9712.04,5524.13 9712.74))", 0)

Строка описывает четырехсторонний многоугольник.

Создание набора ломаных

Geometry::STGeomFromText("MULTILINESTRING((5522.66 9710.55,5523.11 9711.31,5523.59 9712.04,5524.13 9712.74),
(563379 965260,555165 956116,555220 956116))", 0)

Строка описывает набор из двух ломаных: первая соединяет четыре точки, вторая - три.

Для получения геометрического представления объекта из бинарного представления следует использовать функцию STGeomFromWKB(<бинарное_представление_объекта>, <id_проекции>), где <бинарное_представление_объекта> - описание пространственного объекта в бинарном формате (WKB, или Well Known Binary). Бинарное представление может храниться в полях таблиц БД, либо быть получено преобразованием пространственного объекта в бинарный формат.

Для получения из пространственного объекта его текстовое и бинарное представление, используются функции STAsText и STAsBinary. Аргументом обеих функций является геометрический объект. Первая возвращает его текстовое описание, вторая же - бинарное.

Пример использования функций преобразования форматов

DECLARE @g1 Geometry; 
DECLARE @g2 Geometry;
DECLARE @b Binary;

SET @g = Geometry::STGeomFromText(«POLYGON((5850.56 9849.42,
5753.64 9588.67,5618.16 9639.25,5715.91 9899.35,5850.56 9849.42))»,0); 
SET @b = @g.STAsBinary() 
SET @g2 = Geometry::STGeomFromWKB(@b) 

SELECT Sys FROM [Здания] WHERE geometry.within(@g)
где,