Управление таблицей с точечной геометрией, свойствами и преобразование в GeoJSON - PullRequest
0 голосов
/ 04 марта 2019

У меня есть таблица с точечной геометрией и ее свойствами.Свойство хранится в виде 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);
...