Определение
ST_NumInteriorRing берет ST_Polygon и возвращает число внутренних колец.
Синтаксис
Oracle и PostgreSQL
sde.st_numinteriorring (polygon1 sde.st_geometry)
SQLite
st_numinteriorring (polygon1 geometryblob)
Тип возврата
Целочисленное (Integer)
Пример:
Орнитолог хочет изучить популяцию птиц на нескольких южных морских островах. Она хочет определить, на каких островах есть одно или несколько озер, так как интересующий ее вид птиц питается только в пресноводных озерах.
Столбцы ID и name таблицы islands определяют каждый остров, а в столбце land ST_Polygon хранится геометрия островов.
Так как внутренние кольца отображают озера, выражение SELECT, включающее функцию ST_NumInteriorRing, указывает только те острова, у которых есть по крайней мере одно внутреннее кольцо.
Oracle
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)
);
SELECT name
FROM ISLANDS
WHERE sde.st_numinteriorring (land)> 0;
NAME
Bear
PostgreSQL
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)
);
SELECT name
FROM islands
WHERE sde.st_numinteriorring (land)> 0;
name
Bear
SQLite
CREATE TABLE islands (
id integer,
name varchar(32)
);
SELECT AddGeometryColumn(
NULL,
'islands',
'land',
4326,
'polygon',
'xy',
'null'
);
INSERT INTO islands VALUES (
1,
'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 VALUES (
2,
'Johnson',
st_polygon ('polygon ((10 10, 50 10, 10 30, 10 10))', 4326)
);
SELECT name
FROM islands
WHERE st_numinteriorring (land)> 0;
name
Bear