Em fevereiro de 2008, Gustavo Niemeyer apresentou o geohash e lançou o geohash.org: um sistema de geocódigo de domínio público que codifica uma localização geográfica em uma curta string de letras e dígitos. A ideia era tornar as coordenadas algo que se pudesse escrever em um e-mail, uma URL ou uma chave de banco de dados.
O truque está na hierarquia do prefixo. Um geohash intercala os bits de latitude e longitude e os codifica em base32; cada caractere extra acrescenta cinco bits de precisão e identifica uma de 32 subcélulas da anterior. Localizações próximas geralmente compartilham prefixos, e cortar caracteres do final reduz a área mantendo o código válido.
Essa propriedade foi o que o tornou um padrão. O Elasticsearch documenta que um geo-point pode ser expresso como um geohash — strings base32 de bits intercalados de latitude e longitude — e os utiliza para indexação e agregações em grade, de modo que uma busca por proximidade se torna uma busca por prefixo de string sobre um índice que já existe.
Uma única string cujo prefixo significa proximidade
O comprimento do prefixo serve tanto como precisão quanto como proximidade, então um único campo faz as duas coisas.
Uma string curta é mais fácil de compartilhar do que um par de coordenadas.
Os índices de string existentes não precisam de nova maquinaria para realizar trabalho geoespacial.
O lançamento em domínio público removeu qualquer motivo de licenciamento para recusá-lo.
Comprima um problema bidimensional em uma chave unidimensional e todo índice de string existente se torna um índice espacial — o comprimento do prefixo codifica tanto a precisão quanto a proximidade, então nenhuma nova maquinaria é necessária.
O geohash tornou-se uma forma padrão de expressar e indexar localizações: o Elasticsearch documenta geopoints em geohash e agregações em grade de geohash, e a forma de string o tornou natural para caches, URLs e chaves de banco de dados. Hoje é uma das codificações padrão por trás dos índices geoespaciais.
CONFIRA AS EVIDÊNCIAS
As fontes
- Geohash (lat/lon encoding) Movable Type Scripts · movable-type.co.uk
- Geo-point field type Elastic · elastic.co
- Geohash Wikipedia · en.wikipedia.org