2 391
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> |
edições