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