конвертнуть массив jsonb
'[ -71.1776585052917, 42.3902909739571, -71.1776820268866, 42.3903701743239,
-71.1776063012595, 42.3903825660754, -71.1775826583081, 42.3903033653531, -71.1776585052917, 42.3902909739571 ]'::jsonb
в полигон postgis'а ?
'POLIGON(( -71.1776585052917 42.3902909739571, -71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754, -71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571 ))'::geometry
Я могу из jsonb получить набор значений.
select jsonb_array_elements('[ 1, 2, 3, 4 ]'::jsonb)::float;
Но вот как результат сгруппировать по два и подсунуть в конструктор ST_MakePoint и результат собрать в массив для конструктора геометрии?
SELECT ST_MakePolygon(ST_MakeLine( ARRAY[ ST_MakePoint(1,2), ST_MakePoint(3,4), ST_MakePoint(5,6), ST_MakePoint(1,2) ]::geometry[] ));
можно как-то так: select ST_MakePolygon(ST_MakeLine( array_agg(ST_MakePoint(pair[1], pair[2])))) from ( select array_agg(e.value order by ordinality) pair from jsonb_array_elements( '[ -71.1776585052917, 42.3902909739571, -71.1776820268866, 42.3903701743239, -71.1776063012595, 42.3903825660754, -71.1775826583081, 42.3903033653531, -71.1776585052917, 42.3902909739571 ]'::jsonb ) with ordinality e group by (ordinality-1) / 2) q
Спасибо, позже попробую.
Обсуждают сегодня