В запросах 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) где,
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) – переменной
@g1 присваивается пространственный объект, полученный из
строки;
SET @b = @g.STAsBinary() – бинарное описание полученного пространственного объекта
сохраняется в переменной @b;
SET @g2 = Geometry::STGeomFromWKB(@b) – из бинарного описания создается
пространственный объект и сохраняется в переменной g2;
SELECT Sys FROM [Здания] WHERE geometry.within(@g) – производится выборка данных из
слоя Здания c выводом поля Sys для всех пространственных
объектов, располагающихся внутри пространственного объекта, сохраненного в переменной
g2.