В запросах 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.