У меня есть таблица с точечной геометрией и ее свойствами.Свойство хранится в виде jsonb и в этой форме
{
"id": number,
"material": [[material_id, in_kgs, quantity]]
}
для примера:
{
"id": 1,
"material": [[101, false, 2],[102, true, 2],[103, false, 1]]
}
Моя задача здесь - написать функцию, которая запрашивает эту таблицу и преобразует ее в этуform:
{
"id": 1,
"material": [[101, true, 5],[102, true, 2],[103, true, 20]]
}
, т.е. если in_kgs является ложным, умножьте количество на коэффициент преобразования для material_id, хранящегося в таблице.Например: коэффициент преобразования для 101 равен 2,5, таким образом, количество становится 2 x 2,5 = 5. Аналогично для 103 его 20, таким образом, количество становится 1 x 20 = 20.
После того, как эта манипуляция была сделана, результат должен бытьпреобразован в GeoJSON.
Вот пример таблицы точек:
create table public.geometry_point
(
geometry_point_id integer not null,
point_metadata jsonb not null,
point_geometry geometry(point) not null,
constraint point_id_pk primary key (geometry_point_id)
);
alter table public.geometry_point
owner to postgres;
insert into public.geometry_point
(geometry_point_id, point_metadata, point_geometry)
values (1,
('{"id":1,"material": [[101,false,2],[102,true,2],[103,false,10]]}')::jsonb,
ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));
И таблицы преобразования:
create table public.material_units_to_kgs_conversion
(
conversion_id integer not null,
material_id integer not null,
conversion_factor float not null,
constraint conversion_id_pk primary key (conversion_id)
);
alter table public.material_units_to_kgs_conversion
owner to postgres;
insert into public.material_units_to_kgs_conversion
(conversion_id, material_id, conversion_factor)
values (1, 101, 2.5);
insert into public.material_units_to_kgs_conversion
(conversion_id, material_id, conversion_factor)
values (2, 102, 10);
insert into public.material_units_to_kgs_conversion
(conversion_id, material_id, conversion_factor)
values (3, 103, 20);