Определение
ST_ExteriorRing возвращает внешнее кольцо полигона в виде строки linestring.
Синтаксис
sde.st_exteriorring (polygon1 sde.st_geometry)
Oracle и PostgreSQL
sde.st_exteriorring (polygon1 sde.st_geometry)
SQLite
st_exteriorring (polygon1 geometryblob)
Тип возврата
ST_LineString
Пример:
Орнитолог, которая хочет изучить популяцию птиц на нескольких островах, знает, что зона питания интересующего ее вида птиц ограничена прибрежной полосой. При вычислении совокупной емкости популяции островов орнитолог должна знать периметр островов. Некоторые острова такие большие, что содержат несколько озер. Однако береговая линия озер населена только другим, более агрессивным видом птиц. Поэтому орнитолог должна знать периметр только внешнего кольца островов.
Столбцы ID и name таблицы islands определяют каждый остров, а в столбце land polygon хранится геометрия острова.
Функция ST_ExteriorRing извлекает внешнее кольцо из каждого полигона острова в виде строки linestring. Функция ST_Length вычисляет длину строки linestring. Длины строк linestring суммируются функцией SUM.
Внешние кольца островов представляют экологическую зону каждого острова, общую с морем.
Oracle
--Create the table and insert two polygons.
CREATE TABLE islands (
id integer,
name varchar(32),
land sde.st_geometry
);
INSERT INTO islands VALUES (
1,
'Bear',
sde.st_polygon ('polygon ((40 120, 90 120, 90 150, 40 150, 40 120),(50 130, 60 130, 60 140, 50 140, 50 130),
(70 130, 80 130, 80 140, 70 140, 70 130))', 4326)
);
INSERT INTO islands VALUES (
2,
'Johnson',
sde.st_polygon ('polygon ((10 10, 50 10, 10 30, 10 10))', 4326)
);
--Extract the exterior ring from each island and find its length.
SELECT SUM (sde.st_length (sde.st_exteriorring (land)))
FROM ISLANDS;
SUM(ST_LENGTH(ST_EXTERIORRING(LAND)))
264.72136
PostgreSQL
--Create the table and insert two polygons.
CREATE TABLE islands (
id serial,
name varchar(32),
land sde.st_geometry
);
INSERT INTO islands (name, land) VALUES (
'Bear',
sde.st_polygon ('polygon ((40 120, 90 120, 90 150, 40 150, 40 120),(50 130, 60 130, 60 140, 50 140, 50 130),
(70 130, 80 130, 80 140, 70 140, 70 130))', 4326)
);
INSERT INTO islands (name, land) VALUES (
'Johnson',
sde.st_polygon ('polygon ((10 10, 50 10, 10 30, 10 10))', 4326)
);
--Extract the exterior ring from each island and find its length.
SELECT SUM (sde.st_length (sde.st_exteriorring (land)))
FROM islands;
sum
264.721359549996
SQLite
--Create the table and insert two polygons.
CREATE TABLE islands (
id integer primary key autoincrement not null,
name varchar(32)
);
SELECT AddGeometryColumn (
NULL,
'islands',
'land',
4326,
'polygon',
'xy',
'null'
);
INSERT INTO islands (name, land) VALUES (
'Bear',
st_polygon ('polygon ((40 120, 90 120, 90 150, 40 150, 40 120),(50 130, 60 130, 60 140, 50 140, 50 130),
(70 130, 80 130, 80 140, 70 140, 70 130))', 4326)
);
INSERT INTO islands (name, land) VALUES (
'Johnson',
st_polygon ('polygon ((10 10, 50 10, 10 30, 10 10))', 4326)
);
--Extract the exterior ring from each island and find its length.
SELECT SUM (st_length (st_exteriorring (land)))
FROM islands;
sum
264.721359549996