osmc talk:Metodologia/Algoritmo SQL
Chutando o quadrado inicial de um país
A função f(x) que retorna potências side e next ajuda tanto a avaliar a área de uma célula de cobertura, para saber pelo side (se diff_perc é zero então é interior), como avaliar qual poderia ser um quadro envolvente de cobertura de um país ou município, sempre em km2. Abaixo a área do Brasil.
-- 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 |
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.