Usuário Discussão:Peter/Entrega2024-06grid: mudanças entre as edições

(→‎Geração da grade: osmc.grid_generate_all_levels_logistic rodar por fragmento de mil)
Linha 106: Linha 106:
   s := s|| E'\n  ORDER BY 1';
   s := s|| E'\n  ORDER BY 1';
   RETURN QUERY EXECUTE s;
   RETURN QUERY EXECUTE s;
END;
$_$;
</syntaxhighlight>
Infelizmente, por não realizar commit, essa estratégia não funciona, nem adianta tentar corrigir...
Gravando tudo numa tabela temporária.
<syntaxhighlight lang="sql">
CREATE TABLE grid_b2.tmp_cells (gid_vbit bit varying, geom public.geometry);
drop PROCEDURE osmc.grid_generate_all_levels_logistic;
CREATE or replace PROCEDURE osmc.grid_generate_all_levels_logistic(
    p_lev_max numeric, p_contry text,
p_contry_cover text[],
p_contry_base integer,
    p_lev0 numeric default 2.5
) RETURNS    LANGUAGE plpgsql IMMUTABLE
    AS $_$
DECLARE
  tpl text;
  cover_frag text[];
  lev numeric;
  s  text  :='';
  gg  text  :='geom4326';
BEGIN
tpl := $$
  SELECT cbits as gid_vbit, geom
  FROM osmc.decode_scientific_absolute_geoms_lixo1(
    natcod.parents_to_children_baseh(%1$s::real, %3$L::text[], 16, true, true)::text,
    %2$L,
    %4$s::int
  ) t
$$;
FOR cover_frag IN (
    select array_agg(x)
    from unnest(p_contry_cover) WITH ORDINALITY t(x,ord)
    group by ord/1000
) LOOP
    FOR lev IN (select x from generate_series(p_lev0, p_lev_max, 2.5) t(x)) LOOP
      IF lev>p_lev0 THEN s := s || E'\n UNION ALL \n'; END IF;
      s := s || format(tpl, lev::text, p_contry, cover_frag::text, p_contry_base::text);
    END LOOP; -- lev
  END LOOP; -- cover_frag
  s := s|| E'\n  ORDER BY 1';
  -- RETURN QUERY EXECUTE s;
END;
END;
$_$;
$_$;
</syntaxhighlight>
</syntaxhighlight>
2 384

edições