230
edições
(add gallery) |
|||
(37 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
{{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 | 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> m = 524288 m = 512×1024 m = '''512 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].]] | |||
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. | |||
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. | |||
=== 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.]] | |||
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. | |||
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. | |||
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. | ||
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 | [[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".]] | ||
[[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> = ''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> = ''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> = ''h''<sub>1</sub>/2 = ''h''<sub>0</sub>/4 ≈ 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> = ''h''<sub>1</sub>/2 = ''h''<sub>0</sub>/4 ≈ 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 | 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 == | == 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. | 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. | ||
Linha 57: | Linha 76: | ||
Para o geocódigo logístico, é necessário ter um código mais fácil de recordar, composto de: | 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 | *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, para se localizar a porta de casa. | |||
*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. | |||
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]]. | 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> | <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. | Arquivo:OSMC-cober-base-CO-Tunja-i1.png|Cobertura-base de Tunja, composta de 11 células, já rotuladas pelo indexador base32. | ||
Linha 77: | Linha 98: | ||
--> | --> | ||
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 | 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 a cada célula de cobertura municipal 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). | |||
[[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. | ||
Linha 89: | Linha 112: | ||
--> | --> | ||
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 | ||
==Seletores de SRID e jurisdição== | |||
[[Arquivo:DNGS-BBOXes-exemplo2.png|thumb|380px|"Globo DNGS" quando apenas Brasil e Colômbia adotavam o padrão. | |||
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.]] | |||
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 — 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== | ==Ver também== | ||
* Detalhamento técnico da metodologia em [[osmc:Metodologia/Algoritmo SQL]] | |||
*Convenções AFAcodes: | *Convenções AFAcodes: | ||
**[[osmc:Convenções/Grade científica multifinalitária]] | **[[osmc:Convenções/Grade científica multifinalitária]] |
edições