Приложение 1. Примеры работы с геометрическим VARBYTE-объектом

Примечание

Примеры выполняются в командном интерфейсе INL.

!Выполняем запрос в текущей сессии СУБД ЛИНТЕР и перезапускаем её
alter database set blob size limit 65536;

!Перезапускаем СУБД ЛИНТЕР
linternt …

!РАБОТА С ГЕОМЕТРИЧЕСКИМ VARBYTE-ДАННЫМИ

!Создание таблицы с геометрическими VARBYTE-данными

CREATE OR REPLACE TABLE GTEST (OBJECTID INT PRIMARY KEY, NAME NVARCHAR (250), GEOM GEOMETRY);

!Загрузка геометрических данных из шестнадцатеричного представления:

INSERT INTO GTEST (OBJECTID,NAME,GEOM) VALUES (1 , n'TEST', GEOMFROMWKB(hex('0103000000010000000500000000000000000024400000000000
0024400000000000002440000000000000494000000000000049400000000000004940
0000000000004940000000000000244000000000000024400000000000002440'),
 4284));

!Просмотр геометрического значения в виде символьной строки с помощью функции !ASTEXT
select cast astext(GEOM) as char(80) from GTEST;
|POLYGON ((10 10,10 50,50 50,50 10,10 10))|

!Просмотр геометрического значения в виде шестнадцатеричной строки с помощью функции ASBINARY: (длина должна быть равна 93)
select length(cast asbinary(GEOM) as byte), cast asbinary(GEOM) as byte(93) from GTEST;
|93|
0103000000010000000500000000000000000024400000000000002440000000000000
2440000000000000494000000000000049400000000000004940000000000000494000
0000000000244000000000000024400000000000002440

!Вычисление площади геометрической фигуры

select area(GEOM) from GTEST;
|1600|

!Загрузка геометрических данных их текстового представления
INSERT INTO GTEST (OBJECTID,NAME,GEOM) VALUES (2 , n'TEST2', GeomFromText('POLYGON (0 0,0 20,20 20,20 0,0 0)', 4284));

!Просмотр геометрического значения в виде символьной строки
select cast astext(GEOM) as char(80) from GTEST where OBJECTID=2;
|POLYGON ((0 0,0 20,20 20,20 0,0 0)) |

!Найти  геометрические объекты, которые пересекается с заданными
select cast astext(GEOM) as char(80) from GTEST where DISJOINT(GEOM, GeomFromText('POLYGON (0 0,0 1,1 1,1 0,0 0)', 4284)) = 0;
|POLYGON ((0 0,0 20,20 20,20 0,0 0)) |

select cast astext(GEOM) as char(80) from GTEST where DISJOINT(GEOM, GeomFromText('POLYGON (49 49,49 50,50 50,50 49,49 49)', 4284)) = 0;
|POLYGON ((10 10,10 50,50 50,50 10,10 10)) |


!Объединить заданный геометрический объект с объектами из таблицы:
select cast astext(UNION(GEOM, GeomFromText('POLYGON (5 5,5 25,25 25,25 5,5 5)', 4284))) as char(80) from GTEST;
|POLYGON ((10 25,10 50,50 50,50 10,25 10,25 5,5 5,5 25,10 25)) |
|POLYGON ((20 5,20 0,0 0,0 20,5 20,5 25,25 25,25 5,20 5))      |


!Получить пересечение заданного геометрического объекта с объектами из таблицы
select cast astext(INTERSECTION(GEOM, GeomFromText('POLYGON (5 5,5 25,25 25,25 5,5 5)', 4284))) as char(80) from GTEST;
|POLYGON ((25 10,10 10,10 25,25 25,25 10)) |
|POLYGON ((5 20,20 20,20 5,5 5,5 20))      |


!Получить следующие параметры:
! – симметричную разность геометрических объектов
! – количество объектов в группе
! – объект с заданным порядковым  номером в группе

select
  cast astext(SYMDIFFERENCE(GEOM, GeomFromText('POLYGON (5 5,5 25,25 25,25 5,5 5)', 4284))) as char(110),
  NUMGEOMETRIES(SYMDIFFERENCE(GEOM, GeomFromText('POLYGON (5 5,5 25,25 25,25 5,5 5)', 4284))),
  cast astext(GEOMETRYN(SYMDIFFERENCE(GEOM, GeomFromText('POLYGON (5 5,5 25,25 25,25 5,5 5)', 4284)), 2)) as char(80)
from GTEST;

|MULTIPOLYGON (((10 25,10 50,50 50,50 10,25 10,25 25,10 25)),((25 10,25 5,5 5,5 25,10 25,10 10,25 10)))| 2| POLYGON ((25 10,25 5,5 5,5 25,10 25,10 10,25 10)) |

|MULTIPOLYGON (((20 5,20 0,0 0,0 20,5 20,5 5,20 5)),((5 20,5 25,25 25,25 5,20 5,20 20,5 20))) | 2|POLYGON ((5 20,5 25,25 25,25 5,20 5,20 20,5 20)) |


!Получить разность двух геометрических объектов
select cast astext(DIFFERENCE(GEOM, GeomFromText('POLYGON (5 5,5 25,25 25,25 5,5 5)', 4284))) as char(200) from GTEST;
|POLYGON ((10 25,10 50,50 50,50 10,25 10,25 25,10 25)) |
|POLYGON ((20 5,20 0,0 0,0 20,5 20,5 5,20 5))          |


!Представить геометрический объект в заданной системе координат
SELECT cast astext(TRANSFORM(GEOM, 1)) as char(80) from GTEST;
|POLYGON ((10 10,10 50,50 50,50 10,10 10)) |
|POLYGON ((0 0,0 20,20 20,20 0,0 0))       |