Я получил таблицу со строками строк, которую я хочу разделить на куски, у которых список идентификаторов не превышает предоставленного числа для каждого из них, и в нем хранятся только строки, которые находятся на определенном расстоянии.
Например, я получил таблицу с 14 строками
create table lines ( id integer primary key, geom geometry(linestring) );
insert into lines (id, geom) values ( 1, 'LINESTRING(0 0, 0 1)');
insert into lines (id, geom) values ( 2, 'LINESTRING(0 1, 1 1)');
insert into lines (id, geom) values ( 3, 'LINESTRING(1 1, 1 2)');
insert into lines (id, geom) values ( 4, 'LINESTRING(1 2, 2 2)');
insert into lines (id, geom) values ( 11, 'LINESTRING(2 2, 2 3)');
insert into lines (id, geom) values ( 12, 'LINESTRING(2 3, 3 3)');
insert into lines (id, geom) values ( 13, 'LINESTRING(3 3, 3 4)');
insert into lines (id, geom) values ( 14, 'LINESTRING(3 4, 4 4)');
create index lines_gix on lines using gist(geom);
Я хочу разбить его на куски с 3 идентификаторами для каждого чанка со строками, которые находятся в пределах 2 метров друг от друга или от первого.
Результат, который я пытаюсь получить из этого примера:
| Chunk No.| Id chunk list |
|----------|----------------|
| 1 | 1, 2, 3 |
| 2 | 4, 5, 6 |
| 3 | 7, 8, 9 |
| 4 | 10, 11, 12 |
| 5 | 13, 14 |
Я пытался использовать st_clusterwithin , но когда линии расположены близко друг к другу, он возвращает все из них, не разбитые на куски.
Я также пытался использовать некоторые с рекурсивной магией, например, из ответа, предоставленного Полом Рэмси здесь . Но я не знаю, как изменить запрос так, чтобы он возвращал ограниченный сгруппированный список идентификаторов.