Получение симметричной геометрической разности двух объектов. Симметричная разность вычисляется путем исключения общей (пересекающейся) части геометрических объектов.
SymDifference
(<объект1>
,<объект2>
)
<объект1> ,<объект2> – геометрические
объекты произвольного типа. |
В случае нормального завершения – геометрический объект, представляющий симметричную разность двух заданных геометрических объектов.
Тип возвращаемого значения:
char, если оба геометрических объекта являются объектами VARBYTE-типа. Длина строки вычисляется динамически и не может превышать 4000 символов;
blob, если один или оба геометрических объектов являются объектами BLOB-типа. В этом случае для получения значения типа char необходимо использовать SQL-функцию getblobstr (см. документ «СУБД ЛИНТЕР. Справочник по SQL»);
NULL, если один или оба аргумента NULL.
Код завершения СУБД ЛИНТЕР (при неправильном аргументе функции).
геометрический VARBYTE-объект
Получить симметричную разность двух отрезков линии:
Объект 1 (0,0)__________________(5,0) Объект 2 (3,0)_____________________(7,0) Симметричная разность (0,0)_______(3,0) (5,0)_________(7,0) CREATE OR REPLACE TABLE TEST(Line1 LINESTRING, Line2 LINESTRING); INSERT INTO TEST VALUES(LineFromText('LINESTRING (0 0,5 0)'), LineFromText('LINESTRING (3 0,7 0)')); select astext(SYMDIFFERENCE(LINE1, LINE2)) FROM TEST; Результат: |MULTILINESTRING((0 0,3 0),(5 0,7 0))|
CREATE OR REPLACE TABLE TEST(Line1 LINESTRING, Line2 LINESTRING); INSERT INTO TEST VALUES(LineFromText('LINESTRING (0 0, 5 0)'), LineFromText('LINESTRING (6 0,7 0)')); INSERT INTO TEST VALUES(LineFromText('LINESTRING EMPTY'), LineFromText('LINESTRING (6 0,7 0)')); select decode(astext(SYMDIFFERENCE(LINE1, LINE2)), null,'null', astext(SYMDIFFERENCE(LINE1, LINE2))) FROM TEST; Результат: |MULTILINESTRING((0 0,5 0),(6 0,7 0))| |null |
геометрический BLOB-объект
select getblobstr(astext(SYMDIFFERENCE(GEOM, GeomFromText('POLYGON (5 5,5 25,25 25,25 5,5 5)', 4284))), 1, 110) 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)))|