Я пытаюсь превратить все кольцевые развязки в городе в простые перекрестки / перекрестки (o -> +). Поскольку я использую OpenStreetMap для исходной топологии, некоторые обходные пути представляют собой не круг, а просто сегменты круга (например: https://www.openstreetmap.org/#map = 18 / 43.34516 / -8.41536 ).
На практике проблема в том, что мне нужен центроид каждой кольцевой развязки, и я получаю его почти во всех случаях, но иногда я получаю несколько центроидов для одной и той же кольцевой развязки (центроиды арок, нет полной кольцевой развязки).
I достигли этого:
select f.osm_id as fid, (select ST_CENTROID(ST_Buffer(ST_UNION(way),1)) as r_geom
from planet_osm_line d
where st_intersects(f.way, d.way) and junction = 'roundabout') as rotonda
from planet_osm_line f
where junction like 'roundabout';
Но это не решает проблему, а только уменьшает ее. Я не получаю полный круг, просто его большие сегменты.
Так что я думаю, что мне нужен рекурсивный запрос, чтобы сделать это, пока количество найденных геометрий не останется прежним (полный круг). Любые идеи о том, как построить этот запрос?