Если вы просто ищете способ определить, какие MultiLineStrings
содержат более одной строки, вы можете просто использовать ST_LineMerge
, затем ST_Dump
и подсчитать возвращение LineStrings
. Если геометрия содержит прерывистые линии, запрос вернет число больше 1, например
WITH j (geom) AS (
VALUES ('MULTILINESTRING((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))'),
('MULTILINESTRING((10 10, 20 20, 10 40),(10 40, 30 30, 40 20, 30 10))'))
SELECT geom,(SELECT count(*) FROM ST_Dump(ST_LineMerge(geom)))
FROM j;
geom | count
---------------------------------------------------------------------+-------
MULTILINESTRING((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10)) | 2
MULTILINESTRING((10 10, 20 20, 10 40),(10 40, 30 30, 40 20, 30 10)) | 1
(2 Zeilen)
Другой альтернативой является использование ST_NumGeometries
после применения ST_LineMerge
, например
WITH j (geom) AS (
VALUES ('MULTILINESTRING((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))'),
('MULTILINESTRING((10 10, 20 20, 10 40),(10 40, 30 30, 40 20, 30 10))'))
SELECT geom,ST_NumGeometries(ST_LineMerge(geom)) AS count
FROM j;
geom | count
---------------------------------------------------------------------+-------
MULTILINESTRING((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10)) | 2
MULTILINESTRING((10 10, 20 20, 10 40),(10 40, 30 30, 40 20, 30 10)) | 1
(2 Zeilen)