Ir para o conteúdo

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

view e sua tabela
mSem resumo de edição
(view e sua tabela)
Linha 24: Linha 24:


<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
SELECT isolabel_ext ||' = '||(b'0000000000000000000000'||cb10::bit(32)::int ||' = '||cb10 as pais,
CREATE VIEW report.v001_osmc_coverage_l0_list AS
SELECT isolabel_ext ||' = '||(b'0000000000000000000000'||cb10)::bit(32)::int ||' = '||cb10 as pais,
       is_contained,
       is_contained,
       cb10::text||'.'||substring(cbits,11)::text as cbits,
       cb10::text||'.'||cb_suffix as cbits, natcod.vbit_to_baseh(cb_suffix,16) as b16,
       status,                                                                            
       status, round(st_area(geom)/1000000.0) as area_km2
      round(st_area(geom)/1000000.0) as area_km2
FROM (
FROM (select *, substring(cbits,1,10) as cb10) from osmc.coverage) t  
  select *, substring(cbits,1,10) as cb10, substring(cbits,11) as cb_suffix
WHERE is_country ORDER BY 1,2,cbits;
  from osmc.coverage
) t  
WHERE is_country ORDER BY 1,2,cbits
;
</syntaxhighlight>
</syntaxhighlight>


{| class="wikitable"
{| class="wikitable"
!        pais          !! is_contained !!        cbits        !! b16 !! area_km2 !! status
|-
|-
!        pais          !! is_contained !!        cbits        !! status !! area_km2
| BR = 76 = 0001001100  || f            || 0001001100.00000110 || 06  ||  1099512 ||      1
|-
|-
| BR = 76 = 0001001100  || f           || 0001001100.00000110 ||      1 ||  1099512
| BR = 76 = 0001001100  || t           || 0001001100.00000000 || 00  ||  275241 ||      1
|-
|-
| BR = 76 = 0001001100  || t            || 0001001100.00000000 ||     1 ||  275241
| BR = 76 = 0001001100  || t            || 0001001100.00000001 || 01  ||  757637 ||      1
|-
|-
| BR = 76 = 0001001100  || t            || 0001001100.00000001 ||     1 ||  757637
| BR = 76 = 0001001100  || t            || 0001001100.00000010 || 02  ||  645014 ||      1
|-
|-
| BR = 76 = 0001001100  || t            || 0001001100.00000010 ||      1 ||  645014
|...
|-
|-
|...
| BR = 76 = 0001001100  || t            || 0001001100.00001110 || 0e  ||    54071 ||      1
|-
| BR = 76 = 0001001100  || t            || 0001001100.00001111 || 0f  ||    17440 ||      1
|-
|-
| BR = 76 = 0001001100  || t            || 0001001100.00010000 ||     1 ||    1519
| BR = 76 = 0001001100  || t            || 0001001100.00010000 || 10  ||    1519 ||      1
|-
|-
| BR = 76 = 0001001100  || t            || 0001001100.00010001 ||     1 ||    3618
| BR = 76 = 0001001100  || t            || 0001001100.00010001 || 11  ||    3618 ||      1
|-
|-
| CM = 120 = 0001111000 || f            || 0001111000.1001    ||     1 ||    68719
| CM = 120 = 0001111000 || f            || 0001111000.1001    || 9    ||    68719 ||      1
|-
|-
| CM = 120 = 0001111000 || t            || 0001111000.0001    ||     1 ||    2469
| CM = 120 = 0001111000 || t            || 0001111000.0001    || 1   ||    2469 ||      1
|-
|-
| CM = 120 = 0001111000 || t            || 0001111000.0010    ||     1 ||    24181
| CM = 120 = 0001111000 || t            || 0001111000.0010    || 2    ||    24181 ||      1
|-
|-
|...
|...
|-
|-
| CM = 120 = 0001111000 || t            || 0001111000.1101    ||     1 ||    47183
| CM = 120 = 0001111000 || t            || 0001111000.1101    || d    ||    47183 ||      1
|-
|-
| CM = 120 = 0001111000 || t            || 0001111000.1110    ||     1 ||    5164
| CM = 120 = 0001111000 || t            || 0001111000.1110    || e    ||    5164 ||      1
|-
|-
| CO = 170 = 0010101010 || t            || 0010101010.0000    ||     1 ||    8083
| CO = 170 = 0010101010 || t            || 0010101010.0000    || 0    ||    8083 ||      1
|-
|-
| CO = 170 = 0010101010 || t            || 0010101010.0001    ||     1 ||  141953
| CO = 170 = 0010101010 || t            || 0010101010.0001    || 1   ||  141953 ||      1
|-
|-
| CO = 170 = 0010101010 || t            || 0010101010.0010    ||     1 ||    57590
| CO = 170 = 0010101010 || t            || 0010101010.0010    || 2    ||    57590 ||      1
|-
|-
|...
|...
|-
|-
| CO = 170 = 0010101010 || t            || 0010101010.1110    ||     1 ||    84471
| CO = 170 = 0010101010 || t            || 0010101010.1110    || e    ||    84471 ||      1
|-
|-
| CO = 170 = 0010101010 || t            || 0010101010.1111    ||     1 ||    61264
| CO = 170 = 0010101010 || t            || 0010101010.1111    || f    ||    61264 ||      1
 
|}
|}


Os códigos de país podem ser obtidos com zeros a esquerda, por exemplo Brasil <code>select (b'0000000000000000000000'||b'00010011')::bit(32)::int;</code> é 76.
A coluna ''cbits'' é composta de duas partes, o código do país e o código da sua célula ''L0'' (traduzido em hexadecimal=base16). A interseção da geometria da célula com o polígono do país tem a sua área indicada pela coluna ''area_km2''. A coluna ''is_contained'' é um flag, verdadeiro quando a célula tem interseção com as bordas do país. Analisando as áreas do Brasil, o ''flag'' foi falso apenas para os <math>1099512 \ km^2</math> de área, cuja raíz quadada é o tamanho do lado do quadrado, e uma das [[osmc:Metodologia#Projeção_e_cobertura_nacionais|potências de 2 utilizadas]], <math>\sqrt{1099512\ km^2} = 2^{20}\ km = 1048,58 \ km</math>.
4.319,4 quilômetros  1048576
<br/>PS: a coluna ''is_contained'' deveria indicar que a célula está totalmente contida no polígono do país.
 
Os códigos de país nessa versão ainda eram códigos ISO ocupando 10 bits. Por exemplo Brasil <code>0001001100</code> é 76. Na versão corrente são códigos internos (sem compromisso com ISO) de 8 bits, garantindo melhor ocupação nos 57 bits (56 bits para acomodar 14 dígitos hexadecimais) disponíveis de geocódigo [[Código_Natural/Representação_interna#hInt|hInt64]].  


Há um bug de nomenclatura. Analisando as áreas do Brasil, o flag foi apenas para os 1099512 km2 de área, cuja raís quadada é uma das potências de dois <math>\sqrt{1099512} = 2^{20} = 1048.58</math>.
== Ver também ==
* [[osmc:Metodologia/Algoritmo SQL/Issues]]


------
------
2 391

edições