2 402
edições
m (→Base16h) |
(reformat section) |
||
Linha 230: | Linha 230: | ||
O conjunto foi otimizado excluindo vogais ("I", "O", "U") e símbolos que podem ser facilmente confundidos entre si (como ''L''), e excluindo "X" porque é usado como prefixo de conversão hexadecimal (por exemplo, <code>x0123</code>). | O conjunto foi otimizado excluindo vogais ("I", "O", "U") e símbolos que podem ser facilmente confundidos entre si (como ''L''), e excluindo "X" porque é usado como prefixo de conversão hexadecimal (por exemplo, <code>x0123</code>). | ||
[[arquivo:KraEtAll2019-fig11-ordBases.png|thumb|300px|Tabela da representação dos códigos naturais de até 4 bits, em bases 2h, 4h, 8h e, com um dígito, 16h. ]] | |||
O nome desta nova representação é base16h, porque é a “base16 ordinária estendida para hierarquia”: | O nome desta nova representação é base16h, porque é a “base16 ordinária estendida para hierarquia”: | ||
<code>/^([0-9a-f]*)([GHJKMNP-TVZY])?$/</code> | <code>/^([0-9a-f]*)([GHJKMNP-TVZY])?$/</code> | ||
O inverso, para traduzir de uma | O inverso, para traduzir de uma cadeia de bits com ''b'' bits, há ''b''%4 últimos bits a serem traduzidos para um ''nhDigit''. Dividindo (por exemplo, com Javascript) o valor como partes de prefixo e sufixo, | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
let part = bitString.match(/^((?:[01]{4,4})*)([01]*)$/) | let part = bitString.match(/^((?:[01]{4,4})*)([01]*)$/) | ||
Linha 241: | Linha 243: | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ "0":"G", "00":"H", "000":"J", "001":"K", "01":"M", "010":"N", " 011":"P", | { "0":"G", "00":"H", "000":"J", "001":"K", | ||
"1":"Q", "10":"R", "100":"S", "101":"T", "11":"V", "110":"Z", "111 ":"S" | "01":"M", "010":"N", " 011":"P", | ||
"1":"Q", "10":"R", "100":"S", "101":"T", | |||
"11":"V", "110":"Z", "111 ":"S" | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
A tabela ao lado resume as convenções adotadas, e demonstra que há consistência entre as bases 4h, 8h e 16h. | |||
Exemplo: para converter <code>0010100101</code> em Base16h, divida em <code>part[0]=00101001</code> de blocos de 4 bits desde o início, e <code>part[1]=01</code>, dos bits restantes. Converta <code>parte[0]</code> em hexadecimal comum (<code>00101001</code> é “29”) e <code>part[1]</code> pela tabela JSON acima (<code>01</code> é “M”), resultando em “29M”. | Exemplo: para converter <code>0010100101</code> em Base16h, divida em <code>part[0]=00101001</code> de blocos de 4 bits desde o início, e <code>part[1]=01</code>, dos bits restantes. Converta <code>parte[0]</code> em hexadecimal comum (<code>00101001</code> é “29”) e <code>part[1]</code> pela tabela JSON acima (<code>01</code> é “M”), resultando em “29M”. | ||
== Ilustrando em geocódigos == | |||
Podemos imaginar, sobre um mapa geográfico, a célula-mãe de 512 km de lado, rotulada pelo ID <code>82</code>. Ela pode ser subdividida recursivamente em 4 partes para manter a formar quadrada, ou ainda ser subdivida recursivamente em 2, resultando em grades quadradas e retangulares alternadamente: | |||
[[Arquivo:GGeohash-ilustra4.png|centro|620px]] | [[Arquivo:GGeohash-ilustra4.png|centro|620px]] | ||
Abaixo células ''L0'' de cobertura do Brasil, ilustrando caso concreto de grades de diferentes níveis. | Abaixo células ''L0'' de cobertura do Brasil, ilustrando caso concreto de grades de diferentes níveis. |
edições