172 похожих чатов

Добрый день. Вопрос возник, а можно ли как-то средствами postgresql

конвертнуть массив 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[] ));

2 ответов

7 просмотров

можно как-то так: 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

Павел-Бабяк Автор вопроса

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Есть предложения, как подобное можно упростить?
Hemul GM
12
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
8
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
just use free version ?? pycharm has a free version
Fan / Ac
9
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
В си можно напрямую работает с памятью и процом?
Николай
7
Всем привет. Поделитесь, пожалуйста, опытом. Есть форма, на которой имеется dbgrid и кнопки: добавить, редактировать, удалить. Если нет записей в dbgrid, то кнопки редактирова...
Евгений
5
Карта сайта