osmc:Metodologia/Algoritmo SQL/Issues: mudanças entre as edições

issue 2
m (→‎Bloco L0: nomes corrigidos)
(issue 2)
Linha 70: Linha 70:
</pre>
</pre>
|}
|}
== Issue 02 - Função estimadora de cobertura interior e quadrado envolvente ==
Para fazer estimativas sobre células de km2. A função f(x) que retorna potências ''side'' e ''next'':
* ''side'': estimativa para conferir se a área de uma célula recortada (ou seja célula de cobertura) é ou não uma célula interior (sem recortes), apenas pelo valor de sua área.
* ''next'': para chutar o quadrado envolvente inicial de um país (pode dispensar cobertura), ou de um município.
Abaixo a função com exemplo da área do Brasil.
<pre>
-- A = 8510417.771 km2:
with t as (select sqrt(8510417.771 *1000^2) as x)
select p as side_pow_exp, 2^p as side_pow_val,
      round( (100.0*(2^p-x)/2^p)::numeric , 2)::real  side_diff_perc,
      p+1 as next_pow_exp, 2^(p+1) as next_pow_val,
      round( (100.0*(2^(p+1)-x)/2^(p+1))::numeric , 2)::real  next_diff_perc
from (select round(log(x)/log(2)) p,x  from t) t2;
-- side_pow_exp | side_pow_val | side_diff_perc | next_pow_exp | next_pow_val | next_diff_perc
-- -------------+--------------+----------------+--------------+--------------+----------------
--          21 |      2097152 |        -39.11 |          22 |      4194304 |          30.45
-- A = 757637 km2:
side_pow_exp | side_pow_val | side_diff_perc |
--------------+--------------+----------------|
          20 |      1048576 |          16.99 |
-- A = 1099512 km2:
          20 |      1048576 |              0 |
</pre>
No caso da área do Brasil (de 8510417.771 km2) temos o next como estimativa de quadrado envolvente, com lados de 2^22 km:
# quadrado com 2^22 metros de lado contém o Brasil.
# Primeiro dígito base4 é a cobertura de 4 quadrados com 2^21 metros cada
# Primeiro dígito base16 é a cobertura de 16 quadrados com 2^20 metros de lado cada.
Nas áreas de células conferimos qual tem ''side_diff_perc=0'', que foi apenas o caso de A = 1099512 km2.
2 384

edições