ST_Boundary
Определение
Функция ST_Boundary принимает объект геометрии и возвращает объединенные границы в виде объекта геометрии.
Синтаксис
sde.st_boundary (g1 sde.st_geometry)
Тип возврата
ST_Geometry
Пример
В этом примере создается таблица boundaries с двумя столбцам: type типа varchar и geometry типа superclass ST_Geometry. Последующая инструкция INSERT добавляет одну запись для каждой геометрии подкласса. Функция ST_Boundary получает границу каждого подкласса, хранимую в столбце geometry. Учтите, что измерение полученной геометрии всегда на один меньше входной геометрии. Точки и мультиточки всегда приводят к получению границы пустой геометрии с измерением -1. Строки linestring и multilinestring возвращают границу из мультиточек, измерение 0. Полигон или мультиполигон всегда возвращает границу типа multilinestring, измерение 1.
Oracle
CREATE TABLE boundaries (geotype varchar(20), geometry sde.st_geometry);
INSERT INTO BOUNDARIES VALUES (
'Point',
sde.st_pointfromtext ('point (10.02 20.01)', 0)
);
INSERT INTO BOUNDARIES VALUES (
'Linestring',
sde.st_linefromtext ('linestring (10.02 20.01, 10.32 23.98, 11.92 25.64)', 0)
);
INSERT INTO BOUNDARIES VALUES (
'Polygon',
sde.st_polyfromtext ('polygon ((10.02 20.01, 11.92 35.64, 25.02 34.15, 19.15 33.94, 10.02 20.01))', 0)
);
INSERT INTO BOUNDARIES VALUES (
'Multipoint',
sde.st_mpointfromtext ('multipoint (10.02 20.01, 10.32 23.98, 11.92 25.64)', 0)
);
INSERT INTO BOUNDARIES VALUES (
'Multilinestring',
sde.st_mlinefromtext ('multilinestring ((10.02 20.01, 10.32 23.98, 11.92 25.64), (9.55 23.75, 15.36 30.11))', 0)
);
INSERT INTO BOUNDARIES VALUES (
'Multipolygon',
sde.st_mpolyfromtext ('multipolygon (((10.02 20.01, 11.92 35.64, 25.02 34.15, 19.15 33.94, 10.02 20.01), (51.71 21.73,73.36 27.04,71.52 32.87, 52.43 31.90, 51.71 21.73)))', 0)
);
SELECT type, sde.st_astext (sde.st_boundary (geometry)) "The boundary"
FROM BOUNDARIES;
GEOTYPE The boundary
Point POINT EMPTY
Linestring MULTIPOINT(10.02000000 20.01000000, 11.92000000 25.64000000)
Polygon MULTILINESTRING ((10.02000000 20.01000000, 19.15000000 33.94000000,25.02000000 34.15000000, 11.92000000 35.64000000, 10.02000000 20.01000000))
Multipoint POINT EMPTY
Multilinestring MULTIPOINT (9.55000000 23.75000000, 10.02000000 20.01000000, 11.92000000 25.64000000, 15.36000000 30.11000000)
Multipolygon MULTILINESTRING((51.71000000 21.73000000, 73.36000000 27.04000000, 71.52000000 32.87000000, 52.43000000 31.90000000, 51.71000000 21.73000000), (10.02000000 20.01000000, 19.15000000 33.94000000, 25.02000000 34.15000000, 11.92000000 35.64000000, 10.02000000 20.01000000))
PostgreSQL
CREATE TABLE boundaries (type varchar(20), geometry st_geometry);
INSERT INTO boundaries VALUES (
'Point',
st_point ('point (10.02 20.01)', 0)
);
INSERT INTO boundaries VALUES (
'Linestring',
st_linestring ('linestring (10.02 20.01, 10.32 23.98, 11.92 25.64)', 0)
);
INSERT INTO boundaries VALUES (
'Polygon',
st_polygon ('polygon ((10.02 20.01, 11.92 35.64, 25.02 34.15, 19.15 33.94, 10.02 20.01))', 0)
);
INSERT INTO boundaries VALUES (
'Multipoint',
st_multipoint ('multipoint (10.02 20.01, 10.32 23.98, 11.92 25.64)', 0)
);
INSERT INTO boundaries VALUES (
'Multilinestring',
st_multilinestring ('multilinestring ((10.02 20.01, 10.32 23.98, 11.92 25.64),
(9.55 23.75, 15.36 30.11))', 0)
);
INSERT INTO boundaries VALUES (
'Multipolygon',
st_multipolygon ('multipolygon (((10.02 20.01, 11.92 35.64, 25.02 34.15, 19.15 33.94, 10.02 20.01),
(51.71 21.73, 73.36 27.04, 71.52 32.87, 52.43 31.90, 51.71 21.73)))', 0)
);
SELECT type, st_astext (st_boundary (geometry))
AS "The boundary"
FROM boundaries;
type The boundary
Point EMPTY
Linestring MULTIPOINT(10.02000000 20.01000000, 11.92000000
25.64000000)
Polygon LINESTRING ((10.02000000 20.01000000, 19.15000000
33.94000000,25.02000000 34.15000000, 11.92000000 35.64000000, 10.02000000
20.01000000))
Multipoint EMPTY
Multilinestring MULTIPOINT (9.55000000 23.75000000, 10.02000000
20.01000000, 11.92000000 25.64000000, 15.36000000 30.11000000)
Multipolygon MULTILINESTRING((51.71000000 21.73000000, 73.36000000
27.04000000, 71.52000000 32.87000000, 52.43000000 31.90000000,
51.71000000 21.73000000), (10.02000000 20.01000000, 19.15000000
33.94000000, 25.02000000 34.15000000, 11.92000000 35.64000000,
10.02000000 20.01000000))