osmc:Metodologia: mudanças entre as edições

7 376 bytes adicionados ,  Segunda-feira às 22h13min
(see also)
 
(39 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
Descrição do algoritmo do AFA.codes
{{osmc_info}}
 
A metodologia e algoritmos do sistema <code>AFA.codes</code> seguem em parte um padrão e em parte as [[DNGS/Decisões soberanas|decisões soberanas do país]].
 
O sistema AFAcodes implementou a metodologia sugerida pelo padrão [[DNGS]], semelhante ao padrão ISO [[DGGS]], particionando uma superfície com grandes células de igual-área.
 
A diferença da metodologia [[DNGS]] para a [[DGGS]] é que a superfície [[DNGS]] é um território nacional, ao invés do globo inteiro. O padrão [[DNGS]] é também mais restritivo, demandando projeção (oficial nacional), [[geocódigos]], tamanhos e formatos de células válidos (quadriláteros em potências de 2) e um limite na quantidade de células iniciais (até 16).


== Projeção e cobertura nacionais ==
== Projeção e cobertura nacionais ==


Começa-se com o mapa dos limites territoriais na [[DNGS/Decisões_soberanas#D2._Projeção_de_igual-área?|projeção igual-área]] adotada oficialmente pelo país, designada '''projeção igual-área nacional'''. Os limites podem abranger a [[wikipedia:Exclusive_economic_zone|Zona econômica exclusiva]] e arquipélagos, conforme [[DNGS/Decisões soberanas|decisão soberana]] do país.
Começa-se com o mapa dos limites territoriais na [[DNGS/Decisões_soberanas#D2._Projeção_de_igual-área?|projeção igual-área]] adotada oficialmente pelo país, designada '''projeção igual-área nacional'''. Os limites podem abranger [[wikipedia:Maritime_boundary|limites marítimos]] e arquipélagos, conforme [[DNGS/Decisões soberanas|decisão soberana]] do país.


[[Arquivo:Osmc-CO-projOficial.png|centro|miniaturadaimagem|380px|''Projeção igual-área nacional'' da Colômbia. Não é perfeita mas é satisfatória para o Censo. <br/>As tonalidades (vermelhas e azuis) representam o ''perfil de distorção de área'' (inferior a 2%) na projeção cilíndrica UTM oficial da Colômbia, "resolución 471 de 2020 del IGAC".]]
[[Arquivo:Osmc-CO-projOficial.png|centro|miniaturadaimagem|380px|''Projeção igual-área nacional'' da Colômbia. Não é perfeita mas é satisfatória para o Censo. <br/>As tonalidades (vermelhas e azuis) representam o ''perfil de distorção de área'' (inferior a 2%) na projeção cilíndrica UTM oficial da Colômbia, "resolución 471 de 2020 del IGAC".]]


[[Arquivo:Osmc-CO-Powers2.png|280px|miniaturadaimagem|[[wikipedia:Power of two|Potências de 2]], partindo do metro e crescendo até o valor correspondente à largura das células da cobertura ''L0''. <br/>Conforme a [[Prefixos binários|convenção IEC de prefixos binários]], múltiplos de 1024 metros são abreviados como '''Kim''' (''kilobinary meter''). ]]
[[Arquivo:Osmc-CO-Powers2.png|280px|miniaturadaimagem|[[wikipedia:Power of two|Potências de 2]], partindo do metro e crescendo até o valor correspondente à largura das células da cobertura ''L0''. <br/>Conforme a [[Prefixos binários|convenção IEC de prefixos binários]], múltiplos de 1024 metros são abreviados como '''Kim''' (''[[wikipedia:Binary_prefix|kilobinary meter]]'').]]
 
Sobre o polígono dos limites territoriais é encaixada uma grade de ''potência de 2'' (tabela ao lado), onde será desenhado um mosaico de no '''máximo 16 quadrados'''. O encaixe é obtido por um '''algoritmo de varredura''', testa-se com grades maiores e menores, sobre a '''BBOX dos polígonos territoriais'''.
 
[[Arquivo:Osmc-CO-coverEx1.png|centro|miniaturadaimagem|420px|No caso da Colômbia o '''melhor encaixe''' foi conseguido com quadrados de 2<sup>19</sup> m  de lado, ou seja, 2<sup>19</sup>&nbsp;m = 524288&nbsp;m =&nbsp;512×1024&nbsp;m =&nbsp;'''512&nbsp;Kim'''. Em destaque, os quadrados que cobrem  o território e formam a "'''cobertura nacional'''", com as coordenadas ''ji'' (''i'' horizontal e ''j'' vertical).]]
 
===Escolha oficial da origem===
[[Arquivo:OSMC-CO-Origem-ilustra.png|miniaturadaimagem|Ajuste fino de posição para escolha da origem-XY. No caso da Colômbia a origem é o ponto XY (3678500,1494288) na projeção de SRID=9377.<br/>PS: as outras alternativas (ex. sem parte insular nem zona econômica), descartadas, [https://raw.githubusercontent.com/osm-codes/CO_new/main/assets/bbox-v3mins.800px.png foram documentadas].]]


Sobre o polígono dos limites territoriais é encaixada uma grade de ''potência de 2'' (tabela ao lado), desenhado um mosaico de no '''máximo 16 quadrados'''. No caso da Colômbia o '''melhor encaixa''' foi conseguido com quadrados de 2<sup>19</sup> m  de lado, ou seja, 2<sup>19</sup>&nbsp;m =524,29&nbsp;km =&nbsp;512×1024&nbsp;m =&nbsp;'''512&nbsp;Kim'''.
Conforme previsto [[DNGS/Decisões_soberanas#D2.1._Eixos_das_coordenadas_de_referência|na metodologia DNGS para escolha das coordenadas de referência]], um ajuste fino da posição da ''cobertura nacional'' é necessário para se estabelecer em definitivo o sistema de coordenadas e, consequentemente, os identificadores de célula.


Abaixo, em roxo, com ''ij'' as coordenadas ''i'' horizontal e ''j'' vertical, o conjunto dos quadrados que cobrem  o território são apelidados de "'''cobertura nacional'''".  
Apesar de ser uma escolha objetiva, baseada no simples encaixe nos limites oficiais, a escolha desses limites requer decisões soberanas, tais como escolha do buffer de segurança, e decisões sobre uso ou não de limites marítimos.


[[Arquivo:Osmc-CO-coverEx1.png|centro|semmoldura|420px]]
=== Decisões sobre ajuste e desmembramento ===
[[Arquivo:BR-L0coverSci-f.png|miniaturadaimagem|380px|Desmembramento da célula "f" no Brasil, que resultou na partição em 8 células-filhas, do nível ''L1.5''. Apenas 4 delas em uso, as 4 restantes são reservas.]]


Em seguida os 16 quadrados recebem indexadores (rótulos) sequenciais no lugar de coordenadas ''ij''.
O algoritmo de escolha das células ''L0'' é relativamente simples, resulta da interseção do polígono com a grade: se o número de células exceder a 16, será utilizada uma grade de nível mais grosseiro.  


[[Arquivo:Osmc-CO-coverEx2.png|centro|miniaturadaimagem|580px]]
Por ser uma decisão definitiva e com grande impacto na posterior usabilidade da grade, é uma decisão delicada, requer "ajuste humano", e portanto decisões adicionais. Principais exemplos de causa e ajuste: erros implícitos nas delimitações territoriais, importância das delimitações (divisor oceânico vs divisor territorial), decisões por reserva (maior em territórios disputados) e descontinuidades, tais como as ilhas do Havaí no polígono territorial dos EUA, que requerem inclusive uma projeção diferente.


A sequência de indexação é arbitrária, poderia ser de cima para baixo da esquerda para a direita. Todavia, a formação da grade, conforme veremos a seguir, exige a [[DNGS/Decisões_soberanas#D4._Intervalos_de_geocódigos?|escolha de uma curva de preenchimento]] (Curva-Z no caso foi a escolha soberana da Colômbia).
Uma das soluções técnicas para garantir a cobertura nacional em 16 células ''L0'' é o desmembramento, ilustrado para o caso do Brasil. O algoritmo de cobertura requer mínimo de ~30% de taxa de ocupação territorial sobre a célula de cobertura. As células com "grandes vazios" são candidatas ao desmembramento para que seus geocódigos possam ser reutilizados em porções desconexas, tipicamente as insulares (ilustração).
 
===Indexação L0===
Em seguida os 16 quadrados recebem indexadores (rótulos) arbitrários no lugar de coordenadas ''ji''. Todavia, a formação da grade, conforme veremos a seguir, exige a [[DNGS/Decisões_soberanas#D4._Intervalos_de_geocódigos?|escolha de uma curva de preenchimento]].


Os cálculos de vizinhança na curva de preenchimento são complexos, quanto maior a quantidade de células ''L0'' que preservarem a distribuição de vizinhança original, mais simples o algoritmo de cálculo de vizinhança. Simplificar ou não o algoritmo (otimizar) é também uma decisão soberana.
Os cálculos de vizinhança na curva de preenchimento são complexos, quanto maior a quantidade de células ''L0'' que preservarem a distribuição de vizinhança original, mais simples o algoritmo de cálculo de vizinhança. Simplificar ou não o algoritmo (otimizar) é também uma decisão soberana.


[[Arquivo:Osmc-CO-cover-L0-Zcurve.png|thumb|280px|Indexação de ''L0'' na Colômbia, ajustada à Curva-Z.]]
A partir de então, conforme veremos, é adotado como oficial (notação científica para o Censo e outras aplicações) o rótulo hexadecimal de células da grade oficial, tendo como primeiro dígito os rótulos do mapa acima, do nível ''L0''.


Na Colômbia '''a decisão foi por otimizar''', ou seja, seguir-se, dentro do possível, a curva de preenchimento em ''L0''. Na ilustração ao lado a cobertura continental em amarelo, e os índices fora de ordem em roxo. O indexador, para sua representação humana, usando a representação hexadecimal (base 16).
[[Arquivo:Osmc-CO-coverEx2.png|centro|miniaturadaimagem|420px|Na Colômbia, a decisão soberana foi por seguir a Curva-Z, dentro do possível. Na ilustração, a cobertura nacional com os índices em sua representação humana, usando a representação hexadecimal ([[Código_natural/Notação_posicional#Base_Nh|base16h]]), que vai de "0" a "9" e "a" a "f".]]


A partir de então, conforme veremos, é adotado como oficial (notação científica para o Censo e outras aplicações) o rótulo hexadecimal de células da grade oficial, tendo como primeiro dígito os rótulos do mapa acima, do nível ''L0''.
[[Arquivo:Osmc-CO-cover-L0-Zcurve.png|thumb|280px|Indexação de ''L0'' na Colômbia, ajustada à Curva-Z. 81% das células ajustadas, apenas 3 (em roxo) fora do ordem. Toda a cobertura continental (amarelo) dentro da ordem.]]


== Formação da grade científica nacional ==
==Formação da grade científica nacional==
A partir dos quadrados da cobertura nacional será formada a grade, de modo que são apelidados de "células da grade nivel zero" (abreviadamente "'''células L0'''"). As células são todas iguais, com mesma área e formato.
A partir dos quadrados da cobertura nacional será formada a grade, de modo que são apelidados de "células da grade nivel zero" (abreviadamente "'''células L0'''"). As células são todas iguais, com mesma área e formato.


Linha 37: Linha 54:
Tomando como exemplo a Colômbia temos:
Tomando como exemplo a Colômbia temos:
* A primeira subdivisão das células ''L0'' resulta em células da grade nível ''L1'', cada uma das 4 células com lado ''h''<sub>1</sub> =&nbsp;''h''<sub>0</sub>/2 ≈ 256 km.
* A primeira subdivisão das células ''L0'' resulta em células da grade nível ''L1'', cada uma das 4 células com lado ''h''<sub>1</sub> =&nbsp;''h''<sub>0</sub>/2 ≈ 256 km.
* Em seguida a subdivisão das 4 células ''L1'' resulta em células da grade nível ''L2'', cada uma das 4 células com lado ''h''<sub>2</sub> =&nbsp;''h''<sub>1</sub>/2 =&nbsp;''h''<sub>0</sub>/4 ≈&nbsp;128 km. A cada célula ''L0'' correspondem portanto 4×4=16 células ''L2''.
*Em seguida a subdivisão das 4 células ''L1'' resulta em células da grade nível ''L2'', cada uma das 4 células com lado ''h''<sub>2</sub> =&nbsp;''h''<sub>1</sub>/2 =&nbsp;''h''<sub>0</sub>/4 ≈&nbsp;128 km. A cada célula ''L0'' correspondem portanto 4×4=16 células ''L2''.
* Em seguida a subdivisão das 16 células ''L2'' resulta em células da grade nível ''L3''...
*Em seguida a subdivisão das 16 células ''L2'' resulta em células da grade nível ''L3''...
* ... Até chegar nas células da grade nível ''L19'', com 1 m de lado.
*... Até chegar nas células da grade nível ''L19'', com 1 m de lado.
   
   
A grade nacional ''L0'' tem 16 células ao todo cobrindo o territóreio nacional, de modo que são ao todo 16×4=64 células ''L1'', células ''L2'', e assim por diante, até que no nível ''L19'' as células possuirão 1 metro de lado, e serão bilhões de células cobrindo o território nacional.
A grade nacional ''L0'' tem 16 células ao todo cobrindo o território nacional, de modo que são ao todo 16×4=64 células ''L1'', 16×16=256 células ''L2'', e assim por diante, até que no nível ''L19'' as células possuirão 1 metro de lado, e serão bilhões de células cobrindo o território nacional.


O indexador desse conjunto hierárquico de grades não é um número mas um [[código natural]], de modo que a rotulação numérica hexadecimal tradicional foi [[Código_natural/Notação_posicional#Base_Nh|extendida]] para que todos os códigos possam ser devidamente representados, além dos níveis pares:
O indexador desse conjunto hierárquico de grades não é um número mas um [[código natural]], de modo que a rotulação numérica hexadecimal tradicional foi [[Código_natural/Notação_posicional#Base_Nh|extendida]] para que todos os códigos possam ser devidamente representados, além dos níveis pares:
Linha 49: Linha 66:
Há ainda a possibilidade de criar '''"grades degeneradas"''', [[Generalized_Geohash/pt#Representação_geométrica|geometricamente unindo células vizinhas]] da sequência de indexação. Essa união de vizinhas resulta em grades retangulares ao invés de quadradas, e seu nível hierárquico é contabilizado como "nível meio" (''L½'', ''L1½'', ''L2½'', ...).  
Há ainda a possibilidade de criar '''"grades degeneradas"''', [[Generalized_Geohash/pt#Representação_geométrica|geometricamente unindo células vizinhas]] da sequência de indexação. Essa união de vizinhas resulta em grades retangulares ao invés de quadradas, e seu nível hierárquico é contabilizado como "nível meio" (''L½'', ''L1½'', ''L2½'', ...).  


O efeito prático disso é o mesmo que subdividir em 2 sucessivamente, de modo que todos os códigos binários com 1 a 19×2=38 dígitos binários (bits) podem ser representados por células em 38 grades distintas. As células dessas grades serão sempre identificadas por um código expresso na "notação científica", a [[Código_natural/Notação_posicional#Base_Nh|base16h]] (que é a hexadecimal extendida).
O efeito prático disso é o mesmo que subdividir em 2 sucessivamente, de modo que todos os códigos binários com 1 a 19×2=38 dígitos binários (bits) podem ser representados por células em '''38 grades distintas''', formando um [[Discrete National Grid Systems/pt|sistema hierárquico de grades]]. Grades ''L0'', ''L½'', ''L1'', ''L1½'', ''L2'', ''L2½'', ..., ''L18½'', ''L19''.
 
As células dessas grades serão sempre identificadas por um código expresso na "notação científica", a [[Código_natural/Notação_posicional#Base_Nh|base16h]] (que é a hexadecimal extendida para toda a hierarquia).
 
== Geocódigo logístico==
 
Um subconjunto da grades científicas <!-- obtido da representação dos 1 a 38 bits em um prefixo seguido de blocos de 5 bits (representáveis pela base32) --> é utilizado nas aplicações logísticas, tendo em vista que o geocódigo hexadecimal é muito longo para o ser humano memorizar.
 
Para o geocódigo logístico, é necessário ter um código mais fácil de recordar, composto de:
 
*um prefixo, muito fácil de lembrar porque é o próprio município descrito em formato abreviado. Por exemplo  [https://afa.codes/CO-Tunja <code>CO-Tunja</code>] na Colômbia ou [https://afa.codes/BR-SP-SJC <code>BR-SP-SJC</code>] (São Jose dos Campos) no Brasil;
 
*um sufixo de 4 a 6 caracteres representando células da grade, para se localizar a porta de casa. Em [[DNGS/Decisões_soberanas#D3a._Área_territorial_pequena?|países maiores]] o sufixo pode (conforme decisão soberana) ser expresso na [[Base32]]. <br />Por exemplo "GGQT" sufixo de [https://afa.codes/CO-15001~GGQT <code>CO-Tunja~GGQT</code>] no meio urbano de Tunja; "2YNHP" sufixo de [https://afa.codes/BR-SP-SJC~2YNHP <code>BR-SP-SJC~2YNHP</code>] no meio rural de São José.
**o primeiro dígito desse sufixo de grade é, a rigor, ainda parte do nome. O dígito surge com a detecção do território municipal. Por exemplo <code>CO-Tunja~G</code>, conforme veremos, tem o primeiro dígito "G" definido junto com o nome.


== Geocódigo logístico ==
Para chegar no código logístico, o prefixo <code>BR-SP-SJC</code>  aponta para a '''cobertura do município''', que consiste num conjunto indexado de até 30 células que cobrem o município, sendo que cada uma é associada a um índice, escolhido num alfabeto de 32 caracteres, descrito nas variantes da [[Base32]].
<gallery widths="400px" heights="300px">
Arquivo:OSMC-cober-base-CO-Tunja-i1.png|Cobertura-base de Tunja, composta de 11 células, já rotuladas pelo indexador base32.


Um subconjunto de grades obtido da representação dos 1 a 38 bits em um prefixo seguido de blocos de 5 bits (representáveis pela base32) é utilizado nas aplicações logísticas, tendo em vista que o código hexadecimal é muito longo para o ser humano memorizar.
File:CoverSample-CO-15001.png|Coberturas base e ''overlay'' sobre Tunja ([https://osm.codes/CO-15001 CO-15001]).


Para o código logístico, é necessário ter um código mais fácil de recordar, composto de:
Arquivo:Osmc-Tunja-Overlay-build-cut.png|Coberturas base e ''overlay'' com respectivos rótulos.


* um prefixo, muito fácil de lembrar porque é o próprio município descrito no formato: BR-SP-SJC (Exemplo de São Jose dos Campos)
Arquivo:Osmc-Tunja-gredeLogisticaInicial.png|Detalhe da grade de Tunja com geocódigo logístico de 2 dígitos na área rural e '''1 dígito na urbana''', onde foram definidas células de ''overlay'' (contorno azul).
* um sufixo de 4 a 6 caracteres
</gallery>


Para chegar no código logístico, o prefixo BR-SP-SJC aponta para a cobertura do município, ou um índice de até 30 células que cobrem o município, sendo que cada uma é associada a um caractere, escolhido num alfabeto de 32 caracteres, descrito aqui:
<!--
[[Arquivo:OSMC-cober-base-CO-Tunja-i1.png|miniaturadaimagem|Cobertura-base de Tunja, composta de 11 células, já rotuladas pelo indexador base32.]]


[[Arquivo:CoverSample-CO-15001.png|miniaturadaimagem|200px|Coberturas base e ''overlay'' sobre Tunja ([https://osm.codes/CO-15001 CO-15001]).]]
-->
Estas 30 células cobrem o município de maneira otimizada. São as células da cobertura do município.
Estas 30 células cobrem o município de maneira otimizada. São as células da cobertura do município.
Só definimos até 30 células para ter 2 caracteres de reserva, caso tenha alguma mudança no polígono do município.
Só definimos até 30 células para ter 2 de reserva, caso tenha alguma mudança futura no polígono do município.
 
O digito correspondente a cada célula de cobertura municipal vai ser o primeiro digito do sufixo do código logístico.


O digito correspondente à cada célula de cobertura vai ser o primeiro digito do sufixo do código logístico.
Podemos imaginar que cada uma das células da cobertura é dividida em 32, sucessivamente, até chegar a um nível de 1 m. Cada vez que a célula é dividida em 32, o sufixo do código é acrescido de um digito. Na prática, a grade da base32 reusa um [[osmc:Convenções/Grade_científica_multifinalitária#Grades_degeneradas_de_nível_meio|subconjunto da grade científica]] (base2).


Cada uma das células da cobertura é dividida em 32, sucessivamente, até chegar a um nível de 1 m. Cada vez que a célula é dividida em 32, o sufixo do código é acrescido de um digito.
[[Arquivo:GGeohash-niveis-base32.png|center|780px]]


No momento de definir a cobertura do município, é possível privilegiar a cobertura da área urbana para garantir que o código seja mais curto nestas áreas, ou que a zona apontada seja menor com o mesmo número de caracteres. Podemos considerar como padrão ter sufixos de 6 dígitos, sendo que na área urbana, estes 6 dígitos apontam para células de 6m e na área rural, apontam para áreas de 32m.
No momento de definir a cobertura do município, é possível privilegiar a cobertura da área urbana para garantir que o código seja mais curto nestas áreas, ou que a zona apontada seja menor com o mesmo número de caracteres. Podemos considerar como padrão ter sufixos de 6 dígitos, sendo que na área urbana, estes 6 dígitos apontam para células de 6m e na área rural, apontam para áreas de 32m.


<!--
[[Arquivo:Osmc-Tunja-gredeLogisticaInicial.png|centro|miniaturadaimagem|500px|Grade de cobertura de Tunja com geocódigo logístico de 2 dígitos na área reral e 1 dígito na urbana, onde foram definidas células de ''overlay''.]]
-->
As coberturas todas, de todos os municípios, não é uma caixa preta como a definição dos bairros. O padrão [[DNGS]] exige que as coberturas municipais sejam dados abertos. No  caso dos AFAcodes da Colômbia, que  implementam DNGS, os dados das coberturas municipais estão em https://git.afa.codes/CO_new/blob/main/data/coverage.csv
As coberturas todas, de todos os municípios, não é uma caixa preta como a definição dos bairros. O padrão [[DNGS]] exige que as coberturas municipais sejam dados abertos. No  caso dos AFAcodes da Colômbia, que  implementam DNGS, os dados das coberturas municipais estão em https://git.afa.codes/CO_new/blob/main/data/coverage.csv


== Ver também ==
==Seletores de SRID e jurisdição==
* [[osmc:Convenções/Grade científica multifinalitária]]
[[Arquivo:DNGS-BBOXes-exemplo2.png|thumb|380px|"Globo DNGS" quando apenas Brasil e Colômbia adotavam o padrão.
* [[Código natural/Notação posicional]]
A BBOX original de cada país é decomposta em BBOXes "puras" e "de fronteira". As puras permitem rápida decisão (alta performance), enquanto as de fronteira, ''border boxes'' em rosa, requerem avaliação de pertinência ao polígono de fronteira.]]
* [[Código natural/Representação interna]]
 
* [[Generalized Geohash/pt]]
A metodologia descrita foi inicialmente adotada para o Brasil, mas em seguida outros países solicitaram adotar ou testar o padrão DNGS. Uma metodologia de seleção foi implantada, para se distinguir e selecionar a grade nacional correta a cada ponto do globo &mdash; e seu complemento, a ausência de grade DNGS no restante do globo.
 
Ela é descrita no padrão DNGS como [[Discrete_National_Grid_Systems/pt#Seletor_de_jurisdição|algoritmo seletor de jurisdição]], e adotada apenas nos ''"raros casos de validação ou onde o usuário ou a interface não sabem em que país estão"''.
 
O algoritmo decide, para um ponto Latitude-Longitude, qual ''jurisdição nacional'' usar.  Ao lado foi ilustrada a decomposição do "globo DNGS" quando analisando apenas Brasil e Colômbia. A verificação de BBOX tem alta performance. O algoritmo consumirá  um pouco mais de CPU apenas quando for BBOX de fronteira, onde vai disparar a verificação do polígono local de fronteira.
 
==Ver também==
* Detalhamento técnico da metodologia em [[osmc:Metodologia/Algoritmo SQL]]
*Convenções AFAcodes:
**[[osmc:Convenções/Grade científica multifinalitária]]
**[[osmc:Convenções/Coberturas municipais]] ([[osmc:Viz/Navega%C3%A7%C3%A3o|vizualizar]])
*[[Código Natural]]:
**[[Código natural/Notação posicional]]
**[[Código natural/Representação interna]]
*[[Generalized Geohash/pt]]
198

edições