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

Пересечение геометрических объектов

Функция

Получение пересечения двух геометрических объектов.

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

  2. Для включения в результирующий объект составных типов (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON) они разбиваются на объекты простых типов.

    Примечание

    Пересечение значений типа Circle и значения, в состав которого входит тип Polygon (Polygon, Multipolygon, Geometrycollecion с Polygon), осуществляется особым образом, что связанно с отсутствием типа «кривая». Круг аппроксимируется вписанным правильным многоугольником с 32 вершинами, и полученный многоугольник пересекается со вторым значением геометрического типа.

  3. GEOMETRYCOLLECTION (EMPTY), если объекты не пересекаются.

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

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

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

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

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

Примеры
  1. геометрический VARBYTE-объект

    select AsText(Intersection(GeomFromText('POLYGON ((0 0,0 5,5 5,5 0,0 0),(2 2,2 4,3 4,3 2,2 2))'),
    GeomFromText('POLYGON ((1 1,1 6,6 6,6 1,1 1),(2 3,2 4,4 4,4 3,2 3))')));
    Результат:
    |POLYGON ((5 1,1 1,1 5,5 5,5 1),(2 3,2 4,3 4,4 4,4 3,3 3,3 2,2 2,2 3))                                    |
  2. геометрический BLOB-объект

    select getblobstr(astext(INTERSECTION(GEOM, GeomFromText('POLYGON (5 5,5 25,25 25,25 5,5 5)', 4284))), 1, 200) from GTEST;
    |POLYGON ((25 10,10 10,10 25,25 25,25 10)) |
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter