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

mSem resumo de edição
(3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 19: Linha 19:
   grid_l0_cell_idxb16: 8  a  1  3  9  b  4  6  c  e  5  7  d  0  2  f
   grid_l0_cell_idxb16: 8  a  1  3  9  b  4  6  c  e  5  7  d  0  2  f
</pre>
</pre>
onde [https://postgis.net/docs/using_postgis_dbmanagement.html#spatial_ref_sys ''srid''] é a projeção igual-area do país; ''grid_xy_origin'' é a origem no plano projetado; ''grid_cell_side'' é o tamanho (potência de 2) da célula ''L0'' adotada; ''grid_l0_cell'' a lista de coordenadas ''ij'' da matriz de células, indicando aquelas selecionados para a cobertura; e ''grid_l0_cell_sci_base'' a sua correspondente indexação, já expressa em base16.
onde:
* [https://postgis.net/docs/using_postgis_dbmanagement.html#spatial_ref_sys ''srid''] é a projeção igual-area do país;
* ''grid_xy_origin'': é a origem no plano projetado;
* ''grid_cell_side'': é o tamanho (potência de 2) da célula ''L0'' adotada;
* ''grid_l0_cell'': a lista de coordenadas ''ij'' da matriz de células, indicando aquelas selecionados para a cobertura;
* ''grid_l0_cell_sci_base'': a sua correspondente indexação, já expressa em base16.


A parametrização YAML poderia ser lida diretamente do arquivo (pendente implementar essa estratégia); todavia, atualmente, seus parâmetros são copiadas/coladas na unção de inclusão desses dados na sua tabela. Exemplos:
A parametrização YAML poderia ser lida diretamente do arquivo (pendente implementar essa estratégia); todavia, atualmente, seus parâmetros estão embutidos na função wrapper <code>[https://github.com/osm-codes/GGeohash/blob/main/src/step04def-ini.sql#L67-L82 osmc.L0cover_upsert]</code>.
* Inclusão da configuração do Brasil https://git.osm.codes/GGeohash/blob/main/src/step04def-ini.sql#L95
* Inclusão da configuração de Camarões https://git.osm.codes/GGeohash/blob/main/src/step04def-ini.sql#L96
* Inclusão da configuração da Colômbia https://git.osm.codes/GGeohash/blob/main/src/step04def-ini.sql#L98


A configuração é efetivada pela chamada com o país específico, por exemplo Brasil <code>SELECT osmc.L0cover_upsert('BR');</code>
A configuração é efetivada pela chamada com o país específico, por exemplo Brasil <code>SELECT osmc.L0cover_upsert('BR');</code>


A função <code>L0_upsert()</code> atualiza a tabela  ''osmc.coverage'' com linhas ''is_country'' e sem popular as colunas ''cindex'', ''is_overlay'' ou ''kx_prefix'' (utilizadas apenas por coberturas municipais). A tabela abaixo, gerada pelo relatório  ''v001_osmc_coverage_l0_list'' apresentado em seguida, ilustra os casos típicos do Brasil, Camarões e Colômbia:
A função <code>osmc.L0_upsert()</code> atualiza a tabela  ''osmc.coverage'' com linhas ''is_country'' e sem popular as colunas ''cindex'', ''is_overlay'' ou ''kx_prefix'' (utilizadas apenas por coberturas municipais). A tabela abaixo, gerada pelo relatório  ''osmc_report.v001_osmc_coverage_l0_list'' apresentado em seguida, ilustra os casos típicos do Brasil, Camarões e Colômbia:


{| class="wikitable"
{| class="wikitable"
!        pais          !! is_contained !!        cbits        !! b16 !! area_km2  
!        pais          !! is_contained !!        cbits        !! b16 !! area_km2  
|-
|-
| BR = 76 = 0001001100  || f            || 0001001100.00000110 || 06  || 1099512
| BR = 1 = 00000001 || f            || 00000001.00000000 || 00  ||   275241
|-
|-
| BR = 76 = 0001001100  || t           || 0001001100.00000000 || 00  ||  275241
| BR = 1 = 00000001 || f           || 00000001.00000001 || 01  ||  757637
|-
|-
| BR = 76 = 0001001100  || t           || 0001001100.00000001 || 01  ||  757637
| BR = 1 = 00000001 || f           || 00000001.00000010 || 02  ||  645014
|-
|-
| BR = 76 = 0001001100  || t            || 0001001100.00000010 || 02  ||  645014
| ...
|-
|-
|...
| BR = 1 = 00000001 || f            || 00000001.00010000 || 10  ||    1519
|-
|-
| BR = 76 = 0001001100  || t           || 0001001100.00001110 || 0e  ||   54071
| BR = 1 = 00000001 || f           || 00000001.00010001 || 11  ||     3618
|-
|-
| BR = 76 = 0001001100  || t            || 0001001100.00001111 || 0f  ||   17440
| BR = 1 = 00000001 || t            || 00000001.00000110 || 06  || 1099512
|-
|-
| BR = 76 = 0001001100  || t           || 0001001100.00010000 || 10   ||     1519
| CM = 3 = 00000011 || f           || 00000011.0001    || 1   ||   16259
|-
|-
| BR = 76 = 0001001100  || t           || 0001001100.00010001 || 11   ||    3618
| CM = 3 = 00000011 || f           || 00000011.0010    || 2   ||    1261
|-
|-
| CM = 120 = 0001111000 || f            || 0001111000.1001     || 9    ||    68719
| CM = 3 = 00000011 || f            || 00000011.0011     || ||    43764
|-
|-
| CM = 120 = 0001111000 || t            || 0001111000.0001    || 1    ||    2469
| ...
|-
|-
| CM = 120 = 0001111000 || t           || 0001111000.0010     || 2    ||    24181
| CM = 3 = 00000011 || f           || 00000011.1110     || ||    49039
|-
|-
|...
| CM = 3 = 00000011 || f            || 00000011.1111    || f  ||    14919
|-
|-
| CM = 120 = 0001111000 || t            || 0001111000.1101     || d    ||    47183
| CM = 3 = 00000011 || t            || 00000011.1010     || ||    68719
|-
|-
| CM = 120 = 0001111000 || t           || 0001111000.1110     || e    ||    5164
| CO = 2 = 00000010 || f           || 00000010.0000     || ||    8083
|-
|-
| CO = 170 = 0010101010 || t           || 0010101010.0000     || 0    ||     8083
| CO = 2 = 00000010 || f           || 00000010.0001     || ||   230987
|-
|-
| CO = 170 = 0010101010 || t           || 0010101010.0001     || 1    ||   141953
| CO = 2 = 00000010 || f           || 00000010.0010     || ||   57590
|-
|-
| CO = 170 = 0010101010 || t            || 0010101010.0010    || 2    ||    57590
| ...
|-
|-
|...
| CO = 2 = 00000010 || f            || 00000010.1101    || d  ||  196017
|-
|-
| CO = 170 = 0010101010 || t           || 0010101010.1110    || e   ||    84471
| CO = 2 = 00000010 || f           || 00000010.1110    || e   ||    84471
|-
|-
| CO = 170 = 0010101010 || t           || 0010101010.1111    || f   ||    61264  
| CO = 2 = 00000010 || f           || 00000010.1111    || f   ||    61264


|}
|}
Linha 79: Linha 81:
A coluna ''cbits'' é composta de duas partes, o código do país e o código da sua célula ''L0''. O código é traduzido em hexadecimal (base16) na coluna ''b16'', e suas células formam a cobertura do país, ou seja, a grade de nível zero. Nos  [[osmc:Convenções/Grade científica multifinalitária|geocódigos de notação científica]] apare cerão sempre como primeiro dígito.  
A coluna ''cbits'' é composta de duas partes, o código do país e o código da sua célula ''L0''. O código é traduzido em hexadecimal (base16) na coluna ''b16'', e suas células formam a cobertura do país, ou seja, a grade de nível zero. Nos  [[osmc:Convenções/Grade científica multifinalitária|geocódigos de notação científica]] apare cerão sempre como primeiro dígito.  


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 mais atual 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]] (essa representação alternativa é mais eficiente e versátil do que o tipo de dado ''varbit'' (bit string) do PostgreSQL.
Os códigos dos países são números inteiros de 8 bits (atualmente, sem compromisso com códigos ISO de 10 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]] (essa representação alternativa é mais eficiente e versátil do que o tipo de dado ''varbit'' (bit string) do PostgreSQL.


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. Ver  [[osmc:Metodologia/Algoritmo_SQL/Issues#Issue_02_-_Função_estimadora_de_cobertura_interior_e_quadrado_envolvente|Issue 02 para detalhes sobre a dedução do caso cheio pela área]].  
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 está contida no polígono do país. Ver  [[osmc:Metodologia/Algoritmo_SQL/Issues#Issue_02_-_Função_estimadora_de_cobertura_interior_e_quadrado_envolvente|Issue 02 para detalhes sobre a dedução do caso cheio pela área]].  


<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
198

edições