Доступные версии документации

Симметричная разность геометрических объектов

Функция

Получение симметричной геометрической разности двух объектов. Симметричная разность вычисляется путем исключения общей (пересекающейся) части геометрических объектов.

Спецификация
  SymDifference (<объект1>,<объект2>)
<объект1>,<объект2> – геометрические объекты произвольного типа.
Возвращаемое значение
  1. В случае нормального завершения – геометрический объект, представляющий симметричную разность двух заданных геометрических объектов.

    Тип возвращаемого значения:

    • char, если оба геометрических объекта являются объектами VARBYTE-типа. Длина строки вычисляется динамически и не может превышать 4000 символов;

    • blob, если один или оба геометрических объектов являются объектами BLOB-типа. В этом случае для получения значения типа char необходимо использовать SQL-функцию getblobstr (см. документ «СУБД ЛИНТЕР. Справочник по SQL»);

    • NULL, если один или оба аргумента NULL.

  2. Код завершения СУБД ЛИНТЕР (при неправильном аргументе функции).

Примеры
  1. геометрический 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))|
  2. 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                                |
  3. геометрический 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)))|
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter