Generalized Geohash/pt: mudanças entre as edições

De Documentação
m (→‎História: add img)
m (→‎História: ilustrando)
Linha 37: Linha 37:


== História ==
== História ==
A parte central do algoritmo Geohash e a primeira iniciativa para uma solução semelhante foi documentada em um relatório da G.M. Morton em 1966. O trabalho de Morton foi usado para implementações eficientes da curva de ordem Z, como na versão ''Geohash-integer'' de 2014, que faz uso da sua versão binária e ampliada para 64 bits. Ainda assim, a proposta de geocódigo de Morton não era legível por humanos, e foi esquecida por mais de três décadas.
A parte central do algoritmo Geohash e a primeira iniciativa para uma solução semelhante foi documentada em um relatório da G.M. Morton em 1966. O trabalho de Morton foi usado para implementações eficientes da curva de ordem Z em algumas aplicações eletrônicas, mas a proposta de geocódigo de Morton não era muito prática e legível, e foi esquecida por mais de três décadas.


G. Niemeyer, no final dos anos 2000, desconhecendo a obra de Morton, a reinventou, acrescentando o uso da representação [[wikipedia:base32|base32]]. Em fevereiro de 2008, junto com o anúncio do sistema, Niemeyer lançou o site http://geohash.org, que permite aos usuários converter coordenadas geográficas em URLs curtos que identificam exclusivamente as posições na Terra. <br/>Muitas variações foram desenvolvidas, incluindo o link curto do OpenStreetMap em 2009  (usando ''base64url'' em vez de ''base32ghs''), o Geohash de 64 bits em 2014, e outros.
G. Niemeyer, no final dos anos 2000, desconhecendo a obra de Morton, a reinventou, acrescentando o uso da representação [[wikipedia:base32|base32]]. Em fevereiro de 2008, junto com o anúncio do sistema, Niemeyer lançou o site (hoje semi-abandonado) http://geohash.org, que permite aos usuários converter coordenadas geográficas em URLs curtos que identificam exclusivamente as posições na Terra. A mais importante inovação em seguida foi a versão ''Geohash-integer'' de 2014, que faz uso da sua versão binária e ampliada para 64 bits.


[[Arquivo:Geohash-binary.png|centro|520px]]
[[Arquivo:Geohash-binary.png|centro|520px]]


Na AddressForAll, em 2018, foi desenvolvida a proposta do GGeohash, registrada para o domínio público em {{xref|KraEtAll2018}}. Em seguida, em 2019, uma fundamentação mais ampla foi adicionada através dos Natural Codes, com {{xref|KraEtAll2019}}.
[[Arquivo:Osmc-proj-S2geom-illustr1.png|thumb|S2 Geometry, usando curva de Hilbert e projeção plana.]]


== Typical and main usages ==
Algumas variações foram desenvolvidas, incluindo o link curto do OpenStreetMap em 2009  (usando ''base64url'' em vez de ''base32ghs''), o Geohash-integer de 2014, e outros. Em uma linha de desenvolvimento bem diferente, tendo o geocódigo como subproduto, em 2017 a Google tornou público no Github o seu software [https://s2geometry.io/ S2 Geometry]. O S2 implementa um geocódigo baseado na curva de Hilbert ao invés da curva de Morton, e faz uso de uma projeção plana para reduzir as distorções de latitude da grade LatLong.
 
Na AddressForAll, em 2018, foi desenvolvida a proposta do GGeohash, registrada para o domínio público em {{xref|KraEtAll2018}}. A proposta GGeohash unifica de forma coerente as variantes do Geohash e as variantes do S2.
Em seguida, em 2019, uma fundamentação mais ampla foi adicionada através dos Natural Codes, com {{xref|KraEtAll2019}}.
 
== Typical and main usages==
...
...


Linha 52: Linha 57:
...
...


=== Representação textual ===
===Representação textual===


Alfabetos e convenções da notação. Lista completa de IDs com respectivos alfabetos-padrão para [[Wikipedia:Positional notation|conversão de base]], para as “bases potência de 2”. O identificador é a concatenação da palavra “base” com o valor da base e o rótulo (''label'') do alfabeto. O número de ''bits'' por dígito é o [[Wikipedia:Binary logarithm|log<sub>2</sub>]] da base. No alfabeto foram destacados os ''nhDigits'' (''non-hierarchical digits'') conforme notação [[Código natural|Natural Code]].
Alfabetos e convenções da notação. Lista completa de IDs com respectivos alfabetos-padrão para [[Wikipedia:Positional notation|conversão de base]], para as “bases potência de 2”. O identificador é a concatenação da palavra “base” com o valor da base e o rótulo (''label'') do alfabeto. O número de ''bits'' por dígito é o [[Wikipedia:Binary logarithm|log<sub>2</sub>]] da base. No alfabeto foram destacados os ''nhDigits'' (''non-hierarchical digits'') conforme notação [[Código natural|Natural Code]].
Linha 96: Linha 101:
|3
|3
|<code>01234567 GQ HMRV</code>
|<code>01234567 GQ HMRV</code>
|ECMA + nhDigits alphabet
| ECMA + nhDigits alphabet
|-
|-
|16
|16
Linha 126: Linha 131:
|Geohash
|Geohash
|-
|-
|32
| 32
|nvu
|nvu  
|''base32nvu''
|''base32nvu''
|5
|5
Linha 133: Linha 138:
|No-Vowels except U (near non-syllabic)
|No-Vowels except U (near non-syllabic)
|-
|-
|32
| 32
|rfc
|rfc
|''base32rfc''
|''base32rfc''
|5
| 5
|<code>ABCDEFGHIJKLMNOPQRSTUVWXYZ234567</code>
|<code>ABCDEFGHIJKLMNOPQRSTUVWXYZ234567</code>
|<nowiki>RFC 4648</nowiki>/sec6
|<nowiki>RFC 4648</nowiki>/sec6
Linha 148: Linha 153:
|-
|-
|64
|64
|rfc
|rfc  
|''base64rfc''
| ''base64rfc''
|6
|6
|<code>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/</code>
| <code>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/</code>  
|<nowiki>RFC 4648</nowiki>/sec4
| <nowiki>RFC 4648</nowiki>/sec4
|-
|-
| colspan="6" |<small>(*) default base. For example base32 is interpreted by default as base32hex.</small>
| colspan="6" |<small>(*) default base. For example base32 is interpreted by default as base32hex.</small>
Linha 186: Linha 191:


Características da grade em base16h:
Características da grade em base16h:
* Níveis '''inteiros''' (L0, L1, L2 etc.) são quadrados.
*Níveis '''inteiros''' (L0, L1, L2 etc.) são quadrados.
* Níveis '''meio''' (L½, L1½, L2½ etc.) são retângulos (grades degeneradas).
*Níveis '''meio''' (L½, L1½, L2½ etc.) são retângulos (grades degeneradas).
* Níveis '''inteiros pares''' são hexadecimais, simbolicamente iguais aos hexadecimais tradicionais (exceto por diferenciar zeros a esquerda).
*Níveis '''inteiros pares''' são hexadecimais, simbolicamente iguais aos hexadecimais tradicionais (exceto por diferenciar zeros a esquerda).


Na base32 a principal característica é a alternância entre quadrados e retângulos. Pelas convenções adotadas no padrão [[DNGS]] a grade base32 de 1 metro sempre será quadrada.
Na base32 a principal característica é a alternância entre quadrados e retângulos. Pelas convenções adotadas no padrão [[DNGS]] a grade base32 de 1 metro sempre será quadrada.




== Solução multifinalitária ==
==Solução multifinalitária ==


As principais aplicações para um sistema de geocódigos, associado a múltiplas grades, são:
As principais aplicações para um sistema de geocódigos, associado a múltiplas grades, são:  
# Logísticas: código postal e geocódigos similares para apoio simplificar a localização de pontos de interesse, endereços, e quadrantes (grade tradicional de navegação).  
#Logísticas: código postal e geocódigos similares para apoio simplificar a localização de pontos de interesse, endereços, e quadrantes (grade tradicional de navegação).
# Computacionais: representação e conversão de geo-objetos em geo-campos e vice versa, indexação (''quadtree'' e similares em bancos de dados espaciais)
#Computacionais: representação e conversão de geo-objetos em geo-campos e vice versa, indexação (''quadtree'' e similares em bancos de dados espaciais)
# Métricas e Cartográficas: oferecer identificadores zonais padronizados e com representação visual compacta. Além disso as células da grade padronizada permitem a interação humana com sistemas de informação.
#Métricas e Cartográficas: oferecer identificadores zonais padronizados e com representação visual compacta. Além disso as células da grade padronizada permitem a interação humana com sistemas de informação.


O requisito mais importante, que garante o uso do mesmo sistema de grades nas diversas aplicações, é a ''hierarquia''. Sistemas não-hierarquicos, ou com limtações nas operações hierárquicas, perdem a utilidade nas aplicações mais sensíveis.  
O requisito mais importante, que garante o uso do mesmo sistema de grades nas diversas aplicações, é a ''hierarquia''. Sistemas não-hierarquicos, ou com limtações nas operações hierárquicas, perdem a utilidade nas aplicações mais sensíveis.  
Linha 205: Linha 210:


Como resultado da imposição destes requisitos, muitos sistemas de grades precisam ser descartados:
Como resultado da imposição destes requisitos, muitos sistemas de grades precisam ser descartados:
* sistemas baseados em células hexagonais não podem ser usados em coberturas nem em geocódigos consistentes
*sistemas baseados em células hexagonais não podem ser usados em coberturas nem em geocódigos consistentes
* sistemas baseados em células triangulares sao menos eficientes do que os quadrados ...
*sistemas baseados em células triangulares sao menos eficientes do que os quadrados ...
* sistemas sem projeção igual-area nao satisfazem nem à álgebra de geocampos/geoobjetos, nem aos requisitos métricos para a comparação das informações contidas nas células de diferentes locais.
*sistemas sem projeção igual-area nao satisfazem nem à álgebra de geocampos/geoobjetos, nem aos requisitos métricos para a comparação das informações contidas nas células de diferentes locais.


A conclusão é que apenas sistemas hierárquicos de grades quadriláteras regulares é seriam elejíveis para o uso multifinalitário.
A conclusão é que apenas sistemas hierárquicos de grades quadriláteras regulares é seriam elejíveis para o uso multifinalitário.


[[Categoria:Conceitos]]
[[Categoria:Conceitos]]

Edição das 09h09min de 21 de junho de 2023

Generalização do algoritmo Geohash para geocódigos, GGeohash (do inglês Generalized Geohash). Vantagens:

  • permite representações interna (no computador) e humana (como geocódigo) totalmente compatíveis e consistentes;
  • permite adequação da representação humana à sua cultura ou preferências do usuário:
  • permite escolha entre 2 curvas de preenchimento (Morton e Hilbert).

Opções podem ser visualizadas em https://osm-codes.github.io/Sfc4q/

Comparing-Geoash-Hilbert.png

Uma das inovações do GGeohash foi a introdução do conceito de níveis-meio (L½), que se originam da união geométrica de células consecutivas do nível inteiro, permitindo formalizar melhor o Geohash clássico e viabilizando a curva de Hilbert. Nos níveis-meio as curvas Morton e Hilbert são degeneradas.

Entre as várias opções, uma delas corresponde ao "Geohash clássico". As opções surgem da combinação dos seguintes parâmetros:

Opção Alternativas Descrição
Número de bits por dígito 1,2,3,4 ou 5 Apesar da geometria da célula ser subdividida sempre em 4 (2 bits), a representação pode determinar a compatibilidade da base com a geometria.
Base e alfabeto para humanos base4h, 8h e 16h ou base32 Base e alfabeto determinam a notação posicional. Geocódigo para humanos, mantendo a compatibilidade com número de bits. As bases hierárquicas (h) são compatíveis com 1 a 4 bits, a base32 apenas com 5 bits.
Curva de preenchimento Morton ou Hilbert Define como será a indexação e ordem da segunda.
...

História

A parte central do algoritmo Geohash e a primeira iniciativa para uma solução semelhante foi documentada em um relatório da G.M. Morton em 1966. O trabalho de Morton foi usado para implementações eficientes da curva de ordem Z em algumas aplicações eletrônicas, mas a proposta de geocódigo de Morton não era muito prática e legível, e foi esquecida por mais de três décadas.

G. Niemeyer, no final dos anos 2000, desconhecendo a obra de Morton, a reinventou, acrescentando o uso da representação base32. Em fevereiro de 2008, junto com o anúncio do sistema, Niemeyer lançou o site (hoje semi-abandonado) http://geohash.org, que permite aos usuários converter coordenadas geográficas em URLs curtos que identificam exclusivamente as posições na Terra. A mais importante inovação em seguida foi a versão Geohash-integer de 2014, que faz uso da sua versão binária e ampliada para 64 bits.

Geohash-binary.png
S2 Geometry, usando curva de Hilbert e projeção plana.

Algumas variações foram desenvolvidas, incluindo o link curto do OpenStreetMap em 2009 (usando base64url em vez de base32ghs), o Geohash-integer de 2014, e outros. Em uma linha de desenvolvimento bem diferente, tendo o geocódigo como subproduto, em 2017 a Google tornou público no Github o seu software S2 Geometry. O S2 implementa um geocódigo baseado na curva de Hilbert ao invés da curva de Morton, e faz uso de uma projeção plana para reduzir as distorções de latitude da grade LatLong.

Na AddressForAll, em 2018, foi desenvolvida a proposta do GGeohash, registrada para o domínio público em [KraEtAll2018]. A proposta GGeohash unifica de forma coerente as variantes do Geohash e as variantes do S2. Em seguida, em 2019, uma fundamentação mais ampla foi adicionada através dos Natural Codes, com [KraEtAll2019].

Typical and main usages

...

Descrição técnica

...

Representação textual

Alfabetos e convenções da notação. Lista completa de IDs com respectivos alfabetos-padrão para conversão de base, para as “bases potência de 2”. O identificador é a concatenação da palavra “base” com o valor da base e o rótulo (label) do alfabeto. O número de bits por dígito é o log2 da base. No alfabeto foram destacados os nhDigits (non-hierarchical digits) conforme notação Natural Code.

base label ID bits alphabet (depois do espaço os nhDigits) Reference standard
2 js* base2js 1 01 ECMA-262
4 js* base4js 2 0123 ECMA-262
4 h base4h 2 0123 GQ ECMA + nhDigits alphabet
8 js* base8js 3 01234567 ECMA-262
8 h base8h 3 01234567 GQ HMRV ECMA + nhDigits alphabet
16 js* base16js 4 0123456789abcdef ECMA-262 and RFC 4648/sec8
16 h base16h 4 0123456789abcdef GQ HMRV JKNPSTZY ECMA + nhDigits alphabet
32 hex* base32hex 5 0123456789abcdefghijklmnopqrstuv ECMA-262 and RFC 4648/sec7
32 ghs base32ghs 5 0123456789bcdefghjkmnpqrstuvwxyz Geohash
32 nvu base32nvu 5 0123456789BCDFGHJKLMNPQRSTUVWXYZ No-Vowels except U (near non-syllabic)
32 rfc base32rfc 5 ABCDEFGHIJKLMNOPQRSTUVWXYZ234567 RFC 4648/sec6
64 url* base64url 6 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_ RFC 4648/sec5
64 rfc base64rfc 6 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ RFC 4648/sec4
(*) default base. For example base32 is interpreted by default as base32hex.

    All base32 here are using with leading zeros, they are valid instances of “restricted hiearchy”, base32rh.

Representação geométrica

No contexto do padrão DNGS o importante é que as células de todos os níveis hierárquicos sejam quadriláteros: quadrados, losangos, retângulos ou paralelogramos. Portanto, apesar de não ser o ideal, é possível construir níveis intermediários entre grades quadradas, utilizando-se retângulos. Numa típica grade quadrada, considerando-se a sua simetria, a grade intermediária é uma degeneração.

É possível construir a grade retangular (degenerada) a partir da grade quadrada (simétrica) mesclando-se células vizinhas e indexando a grade retangular resultante pela função . As células Cj da grade resultante são obtidas da união de células da grade de nível superior, Fi, ou seja, . Ilustrando com os dois tipos de curva de preenchimento:

MortonCurve64grid-merging32grid.png

A Curva de Morton acima, e a ilustração de como obter a grade de 32 células retangulares a partir da grade de 64 células quadradas.

HilbertCurve64grid-merging32grid.png

A Curva de Hilbert acima, e a ilustração de como obter a grade de 32 células retangulares a partir da grade de 64 células quadradas. Repare que a grade deixa de ser regular e passa a ser uma grade aperiódica de dominós.

Ilustramos com decimais para permitir o entendimento dos cálculos. A propriedade mais importante do GGeohash para humanos é que ele preserva a hierarquia espacial nos prefixos do código. Para demonstrar isso precisamos visualizar com geocódigos hierárquicos, por exemplo com a base4h:

Zcurve-8cells base4h.png Zcutve-base4.png

Sfc4q-Morton-grid64 gridHalf.png

Geometria e geocódigo consistentes

Tendo a base16h como principal notação dentro das convenções adotadas, ela garante a consistência entre geometria e geocódigo, principalmente na expressão da hierarquia. A compatibilidade com os números hexadecimais tradicionais também foi ajustada de modo a bater com os casos de geometria simétrica (quadrados).

GGeohash-ilustra4.png

Características da grade em base16h:

  • Níveis inteiros (L0, L1, L2 etc.) são quadrados.
  • Níveis meio (L½, L1½, L2½ etc.) são retângulos (grades degeneradas).
  • Níveis inteiros pares são hexadecimais, simbolicamente iguais aos hexadecimais tradicionais (exceto por diferenciar zeros a esquerda).

Na base32 a principal característica é a alternância entre quadrados e retângulos. Pelas convenções adotadas no padrão DNGS a grade base32 de 1 metro sempre será quadrada.


Solução multifinalitária

As principais aplicações para um sistema de geocódigos, associado a múltiplas grades, são:

  1. Logísticas: código postal e geocódigos similares para apoio simplificar a localização de pontos de interesse, endereços, e quadrantes (grade tradicional de navegação).
  2. Computacionais: representação e conversão de geo-objetos em geo-campos e vice versa, indexação (quadtree e similares em bancos de dados espaciais)
  3. Métricas e Cartográficas: oferecer identificadores zonais padronizados e com representação visual compacta. Além disso as células da grade padronizada permitem a interação humana com sistemas de informação.

O requisito mais importante, que garante o uso do mesmo sistema de grades nas diversas aplicações, é a hierarquia. Sistemas não-hierarquicos, ou com limtações nas operações hierárquicas, perdem a utilidade nas aplicações mais sensíveis.

Em seguida, outro requisito importante é a visualização dos identificadores de células: os geocódigos não podem ser longos, e devem tirar proveito da hierarquia para serem reduzidos pelo contexto.

Como resultado da imposição destes requisitos, muitos sistemas de grades precisam ser descartados:

  • sistemas baseados em células hexagonais não podem ser usados em coberturas nem em geocódigos consistentes
  • sistemas baseados em células triangulares sao menos eficientes do que os quadrados ...
  • sistemas sem projeção igual-area nao satisfazem nem à álgebra de geocampos/geoobjetos, nem aos requisitos métricos para a comparação das informações contidas nas células de diferentes locais.

A conclusão é que apenas sistemas hierárquicos de grades quadriláteras regulares é seriam elejíveis para o uso multifinalitário.