BR112015023617B1 - Método e sistema para gerar um trie de geocódigo e facilitar buscas de geocódigo reverso - Google Patents

Método e sistema para gerar um trie de geocódigo e facilitar buscas de geocódigo reverso Download PDF

Info

Publication number
BR112015023617B1
BR112015023617B1 BR112015023617-0A BR112015023617A BR112015023617B1 BR 112015023617 B1 BR112015023617 B1 BR 112015023617B1 BR 112015023617 A BR112015023617 A BR 112015023617A BR 112015023617 B1 BR112015023617 B1 BR 112015023617B1
Authority
BR
Brazil
Prior art keywords
geocode
geohash
request
messages
mosaic
Prior art date
Application number
BR112015023617-0A
Other languages
English (en)
Other versions
BR112015023617A2 (pt
BR112015023617A8 (pt
Inventor
Jonathan D. Simms
Dale Harrison
Raghav Chandra
Guy Dickinson
Original Assignee
Twitter, Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Twitter, Inc filed Critical Twitter, Inc
Publication of BR112015023617A2 publication Critical patent/BR112015023617A2/pt
Publication of BR112015023617A8 publication Critical patent/BR112015023617A8/pt
Publication of BR112015023617B1 publication Critical patent/BR112015023617B1/pt

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/29Geographical information databases

Abstract

MÉTODO E SISTEMA PARA GERAR UM TRIE DE GEOCÓDIGO E FACILITAR BUSCAS DE GEOCÓDIGO REVERSO. Um método e sistema gera um modelo de uma área geográfica para utilização na identificação de localizações da área geográfica. Um conjunto de mosaicos de tamanho variável é definido para cada um de um conjunto de geometrias sobrepostas na área geográfica. Cada um dos mosaicos de tamanho variável é definido por um geohash, em que o tamanho da mosaico é dependente de uma granularidade do geohash. Uma estrutura de trie de geocódigo representando os mosaicos de tamanho variável pode ser construída e utilizada para mapear uma ou mais coordenadas de localização providas com pelo menos uma das geometrias representadas pelos mosaicos.

Description

[0001] Este pedido reivindica o benefício do Pedido Provisório US No. 61/802.162 depositado em 15 de março de 2013, que é aqui incorporado por referência na sua totalidade.
ANTECEDENTES
[0002] A presente invenção refere-se geralmente a determinação de localização, e mais particularmente para gerar e utilizar um trie de geocódigo para determinar uma localização com base em um geohash gerado a partir das coordenadas de localização.
[0003] As soluções tradicionais para geocodificação reversa envolveram geometrias de caixa delimitadora com várias otimizações de embalagem. Por exemplo, uma estrutura Quadtree pode ser utilizada para representar geometrias não sobrepostas. Em situações em que existem geometrias sobrepostas que necessitem ou requerem que retângulos mínimos sejam utilizado, o método Quadtree retorna múltiplas geometrias em resposta a uma única entrada de coordenadas. Como um resultado, o sistema deve resolver o que é comumente referido como o problema "pointin-polygon" de combinar em uma única geometria. Têm sido propostas várias soluções diferentes para este problema (por exemplo, fundição de raios, álgebra de matriz), que conduz a todas as exigências de ineficiência e recursos substanciais.
[0004] Para complicar a questão, linguagens de programação com a funcionalidade de coleta de lixo (por exemplo, Java) não são adequadas para cálculos intensivos de recurso. Especificamente, o grande número de objetos atribuídos dinamicamente requeridos no cálculo pode sobrecarregar períodos de coleta de lixo e resultar em um sistema com elevada latência e características de baixa taxa de capacidade de vazão.
SUMÁRIO
[0005] Em geral, em um aspecto, a invenção refere-se a um método para facilitar buscas de geocódigo reverso compreendendo a identificação de uma área geográfica que compreende um conjunto de geometrias sobrepostas. Um conjunto de mosaicos de tamanho variável que representa cada uma das geometrias sobrepostas é criado, em que cada mosaico do conjunto de mosaicos de tamanho variável é definido por um valor de geohash, e em que o tamanho de cada mosaico do conjunto de mosaicos de tamanho variável é dependente de uma granularidade do valor de geohash. Uma estrutura de trie de geocódigo que representa o conjunto de mosaicos de tamanho variável é construída e a estrutura de trie de geocódigo é usada para realizar uma busca de geocódigo reverso com base em um valor de entrada de geohash.
[0006] Em geral, em um aspecto, a invenção refere-se a um método para facilitar buscas de geocódigo reverso, que compreendem receber uma solicitação de busca de geocódigo reverso identificando uma coordenada de localização. Um valor de geohash com base, pelo menos, na coordenada de localização é criado. Uma estrutura de trie de geocódigo é percorrida com base no valor de geohash. Um mosaico mais granular da estrutura de trie de geocódigo combinando o valor de geohash é identificado e um identificador do mosaico mais granular é provido em resposta à solicitação.
[0007] Em geral, em um aspecto, a invenção refere-se a um sistema para facilitar buscas de geocódigo reverso, que compreende um processador e uma máquina de busca de geocódigo. A máquina de busca de geocódigo está configurado para receber uma solicitação de busca de geocódigo reverso identificando uma coordenada de localização. Um valor de geohash é gerado com base em, pelo menos, na coordenada de localização. Uma estrutura de trie de geocódigo é percorrida com base no valor de geohash. Um mosaico mais granular da estrutura de trie de geocódigo combinando o valor de geohash é identificado. Um identificador do mosaico mais granular é provido em resposta à solicitação.
[0008] Outros aspectos da invenção serão evidentes a partir da descrição seguinte e reivindicações anexas.
BREVE DESCRIÇÃO DOS DESENHOS
[0009] Modalidades da presente invenção são ilustradas por meio de exemplo, e não como forma de limitação, nas figuras dos desenhos em anexo e em que números de referência semelhantes se referem a elementos semelhantes.
[0010] A Figura 1 representa um diagrama esquemático de um sistema, de acordo com uma ou mais modalidades da invenção;
[0011] A Figura 2 representa uma área geográfica dividida em uma pluralidade de mosaicos de geohash de 4 caracteres;
[0012] A Figura 3 representa uma área geográfica dividida em uma pluralidade de mosaicos de geohash de 8 caracteres;
[0013] A Figura 4 representa uma área geográfica dividida em uma pluralidade de mosaicos de geohash de 4 caracteres e 5 caracteres;
[0014] A Figura 5 representa um diagrama de fluxo de um método para gerar uma pluralidade de arquivos de valor separado de Tab pertencentes a uma área geográfica de acordo com uma modalidade;
[0015] A Figura 6 representa um layout de cluster compreendendo um grupo de processos de acordo com uma modalidade;
[0016] A Figura 7 representa uma estrutura de dados de trie de acordo com uma modalidade;
[0017] A Figura 8 representa uma representação geográfica de uma área de acordo com uma modalidade;
[0018] A Figura 9A representa um exemplo de uma busca em que um geohash é aplicado a um trie;
[0019] A figura 9B representa um exemplo de uma busca em que um geohash é aplicado a um trie;
[0020] A Figura 10 representa um exemplo de uma busca em que um geohash é aplicado a um trie;
[0021] A Figura 11 representa um exemplo de uma busca em que um geohash é aplicado a um trie;
[0022] A Figura 12 representa um diagrama de fluxo de um método para gerar um trie de geocódigo e realizar um busca de geocódigo reverso de acordo com uma modalidade;
[0023] A Figura 13 representa um fluxograma de um método para realizar um busca de geocódigo reverso de acordo com uma modalidade;
[0024] A Figura 14 representa um layout de cabeçalho de arquivo para uma implementação de um trie firmemente empacotado de acordo com uma modalidade;
[0025] A Figura 15 ilustra um formato de dados para um nó de trie de acordo com uma modalidade;
[0026] A Figura 16 representa uma matriz de dados de acordo com uma modalidade;
[0027] A Figura 17 representa um sistema para prover informação de localização de acordo com uma modalidade; e
[0028] A Figura 18 mostra um sistema de computador, de acordo com uma ou mais modalidades da invenção.
DESCRIÇÃO DETALHADA
[0029] Modalidades específicas da invenção serão agora descritas em detalhes com referência às figuras anexas. Elementos semelhantes nas várias figuras são designados por números de referência semelhantes para consistência.
[0030] Na descrição detalhada seguinte das modalidades da invenção, numerosos detalhes específicos são apresentados a fim de prover uma compreensão mais completa da invenção. No entanto, será evidente para um versado comum na técnica que a invenção pode ser praticada sem estes detalhes específicos. Em outros casos, as características bem conhecidas não têm sido descritas em detalhes para evitar complicar desnecessariamente a descrição.
[0031] De um modo geral, modalidades da invenção proveem um método e sistema para a geração de um modelo de uma área geográfica. Um conjunto de mosaicos de tamanho variável é definido para cada um de um conjunto de geometrias sobrepostas na área geográfica. Cada um dos mosaicos de tamanho variável é definido por um geohash, em que o tamanho do mosaico é dependente de uma granularidade do geohash. Uma estrutura de trie de geocódigo representando os mosaicos de tamanho variável pode ser construída e utilizada para mapear uma ou mais coordenadas de localização providas com pelo menos uma das geometrias representadas pelos mosaicos.
[0032] A Figura 1 mostra um sistema de geocódigo (100) e um cliente (105) de acordo com uma ou mais modalidades da invenção. Como mostrado na Figura 1, o cliente (105) inclui um receptor de sistema de posicionamento global (GPS) (106). Como também é mostrado na Figura 1, o sistema de geocódigo (100) tem múltiplos componentes incluindo um módulo de análise de geocódigo (145), uma máquina de busca de geocódigo (150), um depósito de geocódigo (115), e um módulo de frontend (110).
[0033] Vários componentes do sistema de geocódigo (100) podem ser localizados no mesmo dispositivo (por exemplo, um servidor, mainframe, computador pessoal desktop (PC), laptop, Assistente Digital Pessoal (PDA), telefone, telefone móvel, quiosque, caixa de cabo, e qualquer outro dispositivo) ou pode ser localizado em dispositivos separados conectados por uma rede (por exemplo, uma rede de área localização (LAN), a Internet, etc.). Os versados na técnica apreciarão que pode haver mais do que um de cada componente separado que funciona sobre um dispositivo, bem como qualquer combinação destes componentes dentro de uma dada modalidade da invenção.
[0034] Em uma ou mais modalidades da invenção, o módulo de análise de geocódigo (145) inclui funcionalidade para identificar uma área geográfica, incluindo um conjunto de geometrias sobrepostas. Por exemplo, a área geográfica pode ser uma cidade, estado ou país e as geometrias sobrepostas podem ser subáreas da área geográfica que podem incluir-se ou sobrepor-se a qualquer número de outras geometrias. Por exemplo, um estado pode incluir muitas geometrias de diferentes cidades e municípios no interior do estado.
[0035] Em uma ou mais modalidades da invenção, o módulo de análise de geocódigo (145) inclui funcionalidade para criar um conjunto de mosaicos de tamanho variável que representam cada uma das geometrias sobrepostas. Cada um dos mosaicos é definido por um valor de geohash e o tamanho de cada mosaico é dependente de uma granularidade do valor de geohash. Por exemplo, as Figuras 2, 3, e 4 descrevem vários exemplos de mosaicos e os seus valores de geohash correspondentes.
[0036] Um valor de geohash, em uma modalidade baseia-se nas coordenadas de localização de uma localização geográfica particular. As coordenadas de localização, em uma modalidade são valores de longitude e latitude que representam uma localização geográfica particular e podem ser obtidas em grande variedade de formas, incluindo receptor GPS (por exemplo, receptor de GPS 106 mostrado na Figura 1). Um valor de geohash é gerado intercalando bits de latitude e longitude e, em seguida, convertendo a representação de bits para uma representação de base32. Por exemplo, as coordenadas de localização são primeiro convertidas em sua representação binária. As representações binárias das coordenadas de localização são então iniciadas de forma intercalada, em uma modalidade, com os bits mais significativos. A sequência binária intercalada resultante é então convertida, em uma modalidade, para uma representação de base32 referida como um geohash. Em uma modalidade, cada caractere do geohash representa cinco bits de representações binárias intercaladas da longitude e latitude de uma determinada localização com base nas coordenadas da localização particulares.
[0037] A Figura 2 representa uma projeção de geohash de 4 caracteres 200 em que uma parte de uma área geográfica do nordeste dos Estados Unidos é representada dividida em uma pluralidade de mosaicos. A Figura 2 mostra a área geográfica dividida em nove mosaicos, designados em valores de geohash da esquerda superior para a direita inferior como dr70, dr72, dr78, dr5p, dr5r, dr5x, dr5n, dr5q, e dr5w. Cada valor de geohash é gerado com base em coordenadas de localização tais como descritas acima, utilizando um centro substancial de um mosaico como as coordenadas de localização para cada mosaico em particular. O comprimento de um geohash, em uma modalidade, está relacionado com um tamanho de um mosaico associado. Como mostrado na Figura 2, um geohash de 4 caracteres, em uma modalidade, é utilizado para representar um mosaico que tem uma largura que representa cerca de 18 milhas (30 km).
[0038] A Figura 3 representa uma projeção ded geohash de 8 caracteres 300 em que uma parte de uma área geográfica é mostrada dividida em uma pluralidade de mosaicos. Como mostrado na Figura 3, o mosaico central da área geográfica é o valor de geohash designado dr5ue40. Em uma modalidade, o comprimento de um valor de geohash está inversamente relacionado com um tamanho de um mosaico associado que delimita uma área geográfica. Por conseguinte, os valores de geohash de 8 caracteres mostrados na Figura 3, cada um, identificam uma área geográfica menor do que os valores de geohash de 4 caracteres mostrados na Figura 2. Em uma modalidade, o comprimento de um valor de geohash está relacionado com a precisão da coordenada de localização usada para gerar o geohash. Por exemplo, os valores de geohash de 4 caracteres representam 20 bits de valores de longitude e latitude combinados. Valores de geohash de 8 caracteres representam 40 bits de valores de longitude e latitude combinados. Em uma modalidade, um valor de geohash pode ser gerado com base nas coordenadas de localização em que os valores de latitude e longitude associados podem ser encurtados por meio de técnicas, tais como truncamento ou arredondamento, para produzir um geohash tendo um número desejado de caracteres.
[0039] Uma área geográfica inteira pode ser dividida em uma pluralidade de mosaicos com base em uma precisão desejada para determinação de localização. Por exemplo, os Estados Unidos inteiro podem ser divididos em uma pluralidade de mosaicos, onde cada mosaico representa um metro quadrado. No entanto, pode não ser eficaz dividir toda uma área geográfica em uma pluralidade de mosaicos com este nível de precisão uma vez que nem todas as áreas podem requerer o mesmo nível de precisão de determinação de localização. Por conseguinte, áreas geográficas diferentes podem ser divididas em uma pluralidade de mosaicos com base em um nível desejado de precisão. Por exemplo, uma área grande pouco povoada só pode exigir uma pluralidade de mosaicos, onde cada mosaico é de aproximadamente 25 quilômetros quadrados. Áreas densamente povoadas podem exigir uma pluralidade de mosaicos, onde cada mosaico é de aproximadamente um metro quadrado.
[0040] A Figura 4 representa uma área geográfica 400 que representa uma parte do estado da Califórnia dividida em uma pluralidade de mosaicos, em que algumas áreas são cobertas por mais mosaicos do que outras. Como mostrado no lado direito da Figura 4, vários mosaicos estão associados com geohashes de 4 caracteres. O centro e centro inferior da Figura 4 mostra mosaicos representados por geohashes de 5 caracteres. Tal como representado na Figura 4, mosaicos de geohash de 4 caracteres são maiores do que mosaicos de geohash de 5 caracteres. Como tal, mosaicos de geohash de 5 caracteres representam áreas menores e oferecem mais precisão na determinação de uma localização específica. Como mostrado na Figura 4, mosaicos de diferentes tamanhos podem ser utilizados em diferentes áreas geográficas de acordo com uma precisão desejada de determinação de localização.
[0041] A Figura 5 ilustra um fluxograma de um processo 500 para gerar uma pluralidade de arquivos de valores separados por tabulação ("TSV") relativos a geohashes para uma área geográfica de acordo com uma modalidade. Na etapa 502, geometrias (por exemplo, áreas geográficas em mosaicos) são recebidas de um ou mais provedores de terceiros (por exemplo, TomTom, Pitney-Bowes NAVTEQ, Bing Maps, e OpenStreetMap). Em uma modalidade, as geometrias estão associadas com um identificador de 8 bytes referido como um "PlaceID" e armazenadas em um banco de dados de lugar associado com metadados adicionais sobre o lugar (por exemplo, nomes localizados, informação específicas de negócio, código do país de 2 letras, etc.). Em uma modalidade, este banco de dados é um depósito de geocódigo 115 (mostrado na Figura 1).
[0042] Na etapa 504, um processo de exportação é executado em que o banco de dados de lugar é consultado para PlaceID, PlaceType, Geometria e outros metadados sobre um ou mais lugares. PlaceType, em uma modalidade, é um enum (por exemplo, um tipo enumerado que é um tipo de dados que consiste em um conjunto de valores nomeados chamados elementos, membros, ou enumeradores de tipo) das categorias gerais de lugares (por exemplo, município, estado, país, etc.) Estes tuplos são seriados, em uma modalidade, em formato de TSV usando uma representação hexagonal de 64 bits não sinalizada do PlaceID, um inteiro para o PlaceType, e a representação binária bem conhecida base64 gzipped da geometria. Base64, em uma modalidade, refere-se a um formato de codificação utilizado para incorporar dados binários em formato de sequência ASCII. Gzipped, em uma modalidade, refere-se à aplicação de um algoritmo de compressão de dados LZ77 a uma sequência de bytes. Arquivos TSV seriados são então carregados para um sistema de arquivo distribuído Hadoop ("HDFS").
[0043] Na etapa 506, um índice de densidade é calculado. Diferentes áreas geográficas podem exigir mais mosaicos do que outras, a fim de prover informação de localização mais precisa. O número de mosaicos necessários para uma determinada área geográfica pode ser baseado em um ou mais fatores. Por exemplo, o índice de densidade pode ser baseado em um número de empresas e/ou residências em uma área particular, um certo número de solicitações de diferentes usuários de uma área particular, ou de outros fatores que proveem uma indicação de que existe uma necessidade para um nível específico de precisão no que diz respeito à determinação da localização. O índice de densidade pode também basear-se em um tipo de análise a ser realizado, que está relacionado com uma área geográfica de alguma maneira. Por exemplo, o índice de densidade pode ser baseado em um nível de precisão necessário para uma análise geográfica relacionada com os padrões de migração, amostras de poluição, surtos de doenças, distribuição de espécies, etc. O índice de densidade, em uma modalidade, é baseado na frequência de ocorrência de um evento em uma área geográfica relacionada. O índice de densidade, em uma modalidade é especificado por um usuário para uma determinada área geográfica. Por exemplo, um usuário pode especificar que uma área geográfica particular requer um nível específico de precisão ajustando o índice de densidade associado com a área geográfica particular. O índice de densidade, em uma modalidade, pode basear-se em fatores identificados por outros sistemas. Por exemplo, um sistema de mensagens (por exemplo, Twitter,) ou uma rede social (por exemplo, Facebook) pode identificar um índice de densidade desejado com base na atividade do usuário, como um número de posts de mensagens ou atualizações de status que ocorrem em uma determinada área.
[0044] Em uma modalidade, o índice de densidade é calculado com base na densidade populacional. Por exemplo, uma cidade é tipicamente mais densamente povoada do que um subúrbio enquanto um subúrbio pode ser mais densamente povoado do que um deserto ou uma área silvestre. Em uma modalidade, um número de mosaicos associados com uma área geográfica particular é baseado em um índice de densidade de área geográfica em particular. Um índice de densidade para uma determinada área é calculado com base na frequência de solicitação provenientes dos usuários em uma área de geohash de N caractere particular que têm dispositivos de GPS ativados. Por exemplo, um índice de densidade pode ser calculado para uma área de geohash de 4 caracteres. Em uma modalidade, o índice de densidade permite que uma área (por exemplo, delimitada por um mosaico de geohash de 4 caracteres) seja classificada como um de uma área de utilização alta, média ou baixa. Em uma modalidade, as áreas de utilização são definidas como se segue. Uma área de utilização alta é uma área em que a frequência de solicitações de usuários é maior que duas vezes o desvio padrão de uma frequência média de solicitações de uma pluralidade de áreas. A área de utilização média é uma área em que a frequência das solicitações é menor do que duas vezes o desvio padrão e maior do que a frequência média das solicitações de uma pluralidade de áreas. Uma área de utilização baixa é uma área em que a frequência de solicitações é menor do que ou igual à frequência média de solicitações para uma pluralidade de áreas.
[0045] Em uma modalidade, um índice de densidade relativo à atividade do usuário é referido como um índice de densidade de usuário. Em uma modalidade, um conjunto de mosaicos de tamanho variável é criado através da identificação de um conjunto de índices de densidade de usuário, cada um representando uma frequência de solicitações de dispositivos de usuário em pelo menos uma parte de uma área geográfica e utilizando os índices de densidade de usuário para determinar o conjunto de mosaicos de tamanho variável, em que o tamanho de cada um do conjunto de mosaicos de tamanho variável é positivamente correlacionado com um índice de densidade de usuário, que corresponde aquele a mosaico.
[0046] Na etapa 508, geometrias são divididas em limites de geohash de 4 caracteres para criar subgeometrias que permite um processamento distribuído mais fácil. As subgeometrias são classificadas de forma aleatória e, em seguida, serializadas usando thrift, e armazenadas como PlaceID, PlaceType, e valores de geometria. O tipo aleatório, em uma modalidade, é usado para distribuir subgeometrias complicadas uniformemente através de um cluster. Thrift, em uma modalidade, refere-se ao quadro de serialização Apache Thrift que permite que um usuário defina estruturas de dados usando uma linguagem de descrição de interface (IDL). Thrift, em seguida, gera o código para uso em muitas linguagens diferentes que tem estruturas de dados nativas e serializa-os em matrizes de bytes que podem ser gravadas no disco.
[0047] Deve ser notado que os mosaicos podem se sobrepor. Por exemplo, um mosaico de geohash de 4 caracteres pode conter uma pluralidade de mosaicos de geohash de 5 caracteres. Os mosaicos de geohash de 5 caracteres dentro da mosaico de geohash de 4 caracteres são referidos como subgeometrias. Em uma modalidade, as subgeometrias são analisadas para determinar um mosaico de geohash de 4 caracteres em que o mosaico de geohash de 5 caracteres está localizado. Uma densidade de usuário para o mosaico de geohash de 4 caracteres em que o mosaico de geohash de 5 caracteres está localizado é identificada por um valor de índice de densidade. Com base no índice de densidade, a heurística de geohashing apropriada é usada para que uma área de densidade. Parâmetros heurísticos, em uma modalidade, incluem um número máximo de geohashes a serem utilizados para representar uma geometria (por exemplo, em uma área geográfica), o nível de detalhe (isto é, quão pequena um mosaico de geohash deve ser utilizado na criação de uma representação da geometria).
[0048] Em uma modalidade, os trabalhos do Apache hadoop executam algoritmos para calcular a densidade de usuário (etapa 506), tipificar e serializar subgeometrias (etapa 510) e realizar geohashing de mosaicos (etapa 512) que compõem uma geometria como descrito acima. Em uma modalidade, os algoritmos que os trabalhos de Hadoop executam são gravados em Scalding que é um quadro de scala para gravar trabalhos de Hadoop e prover programação primitiva funcional de alto nível de para lidar com grandes volumes de dados. Em outra modalidade, os algoritmos são gravados usando Java usando mapa de hadoop em bruto e reduzindo as chamadas. Os algoritmos geram um ou mais arquivos de TSV que, em uma modalidade, estão sendo emitidos em arquivos de formato de HDFS.
[0049] A saída dos trabalhos do Hadoop, ou seja, os arquivos de TSV, é então usada por outro trabalho de hadoop, em uma modalidade, para criar um arquivo de dados de trie bem empacotados ("arquivo de dados TPTrie"). O trabalho de Hadoop para criar um arquivo de dados TPTrie primeiro copia um arquivo de TSV do HDFS em um arquivo local. Cada par de valor de PlaceID e de Lista [Geohash] é lido e transformado em uma lista [(Geohash, PlaceID)]. Cada geohash é então inserido em um trie na memória. Deve ser notado que os valores são mantidos em uma estrutura de dados separada que remove duplicatas e retorna um identificador de número inteiro de 4 bytes. O identificador de 4 bytes, em uma modalidade, é um desvio para uma matriz de bytes que armazena valores PlaceID serializados. A travessia de pós-ordem do trie na memória é realizada para serializar cada nó usando o TPTrie formal. Um segmento de dados do TPTrie (por exemplo, a matriz de byte de PlaceIDs) é então gravado em um arquivo de dados e o arquivo de dados é enviado para o HDFS para distribuição a um cluster.
[0050] A Figura 6 representa o cluster 600 compreendendo um conjunto de processos (por exemplo, processos de máquina virtual Java) de acordo com uma modalidade. Cluster 600 é utilizado para determinar uma localização com base em um geohash. Cliente 602 faz uma solicitação que é transmitida ao diretor 604. O diretor 604 analisa a solicitação do cliente e determina para quais nós de índice encaminhar a solicitação. Com base na determinação, diretor 604 roteia a solicitação para um ou mais dos nó de índice (cidade) 608, índice (país) 610, ou índice (metro) 612. Cada um dos nós 608, 610, e 612 pode ser consultado pelo diretor 604. Em uma modalidade, diretor 604 executa uma operação de dispersão - coleta em que uma pluralidade de nós é consultada para partes de dados exigidas pelo diretor 604 e diretor 604 reúne as respostas para consultas parciais para formar uma resposta completa para a consulta do cliente. Por exemplo, em uma modalidade, certos nós contêm dados de cidade e outros nós contêm dados de estado. Para colocar juntos, máquinas de consulta "Columbus, OH" são necessárias, tanto no grupo de dados da cidade quanto no grupo de dados do estado. O grupo cidade iria retornar "Columbus" e o grupo estado iria retornar "OH". O "Columbus" e o "OH" são então combinados para produzir o resultado completo do "Columbus, OH", em resposta a uma solicitação de um cliente.
[0051] Deve ser notado que a informação em nós 608, 610, e 612 pode ser alternativamente localizada no diretor 604. A informação armazenada no diretor 604 é armazenada em um ou mais nós (por exemplo, o nó 608 índice (cidade), nó de índice (país) 612, etc.) quando o volume de dados total da informação torna-se muito grande. Por exemplo, a informação armazenada no diretor 604 pode ser transferida para um ou mais nós, quando o volume de dados total da informação é maior do que o processamento de espaço de memória do diretor 604. Quando a informação está localizada no diretor 604, em seguida, uma resposta a uma consulta de cliente é determinada pelo diretor 604 sem solicitar informação de outros nós.
[0052] A Figura 7 descreve estrutura de dados de trie 700 otimizada para buscas rápidas de prefixo comum de acordo com uma modalidade. Trie 700 é uma estrutura de dados de trie ordenada para armazenar informação. Nenhum nó de trie 700 armazena a tecla associada a esse nó. Em vez disso, a posição de nós na trie define a tecla com a qual ele está associado. Todos os descendentes de um nó têm um prefixo comum de uma sequência associada a esse nó e nó raiz 702 está associado a uma sequência vazia. Os valores não são normalmente associados com cada nó, mas em vez disso com as folhas ou nós interiores que correspondem a teclas de interesse. Em uma modalidade, o trie é um autómato finito determinista, embora o símbolo em cada extremidade seja frequentemente implícito na ordem das ramificações. No nó 702, determina-se qual a transição (isto é, t, A, ou i) corresponde a uma sequência que está sendo comparada com trie 700. Por exemplo, se a sequência de "dez" está sendo comparada com trie 700, transição t é selecionada e outra comparação é realizada no nó 704. Uma vez que o próximo caractere na sequência de "dez" é um "e", a transição e é selecionada e outra comparação é realizada no nó 712. Uma vez que o próximo caractere na sequência de "dez" é "n", a transição n é selecionada e a comparação termina no nó 720. Da mesma forma, trie 700 pode ser percorrido para chegar ao nó 710 para a sequência "to", o nó 716 para a sequência "tea", etc. Da mesma forma, tries de geocódigo podem ser atravessadas comparando os valores de geohash.
[0053] Geohashes facilitam a conversão de coordenadas de localização em texto descritivo da localização identificada pela coordenada de localização. A Figura 8 descreve uma representação geográfica de uma área 800 conhecida como a área de "Tenderloin" de San Francisco, Califórnia. Como mostrado na Figura 8, uma localização 802 está identificada na área 800. Em uma modalidade, esta localização é provida por um usuário através de um dispositivo de usuário portátil tendo um receptor GPS. O receptor GPS gera coordenadas de localização para localização 802 mostrada na Figura 8. No entanto, as coordenadas de localização são duas sequências de números que, embora precisas, não proveem a maioria dos usuários com informação úteis. Conforme descrito anteriormente, um valor de geohash é gerado com base nas coordenadas de localização. O geohash é então aplicado a um trie para determinar uma descrição de localização de texto.
[0054] A Figura 9A mostra um exemplo de uma busca em que um geohash é aplicado a um trie 900. Círculos descritos na Figura 9A são nós tendo um valor enquanto losangos representam os nós transitórios e setas representam uma borda ou uma transição para um outro nó. Como tal, nós são representados quer como círculos ou losangos. Nó 902 é um círculo associado com um prefixo de geohash 9q8. O prefixo de geohash 9q8 está associado com mosaicos identificando texto com o prefixo 9q8 como localizações na Califórnia. Em seguida, como mostrado pela seta 904, uma transição correspondente tendo um valor de "Y" é determinada e em uma localização dentro da Califórnia identificada pelo valor de geohash 9q8y é determinada para ser associada com o nó 906. Como mostrado pela seta 908, uma transição correspondente tendo um valor de "Y" é determinada e a localização de "San Francisco" identificada pelo valor de geohash 9q8yy é determinada como sendo associada com o nó 910. Como mostrado pela seta 912, uma transição correspondente tendo um valor de "m" é determinada e o nó 914 é associado com o valor de geohash 9q8yym. Embora o nó 914 esteja associado com um geohash conhecido por estar na área de Tenderloin de São Francisco, o nó não está associado com um identificador de localização de texto mais específico e é um nó transitório.
[0055] Em uma modalidade, os nós transitórios são usados para ligar os nós de um trie. Nem todos os nós possuem dados, mas os nós são necessários para manter localizações de outros nós no trie, ou, se eles têm um valor mais nós nulos, o último nó é terminal, uma vez que a busca termina. Em outras palavras, em uma modalidade, nós transitórios não mantém dados, mas atuam como marcadores de posição para que um trie pode ser atravessado para nós adicionais na parte inferior do trie que pode ser associado com os dados que um cliente está interessado.
[0056] Voltando à Figura 9A, como ilustrado pela seta 916, uma transição correspondente tendo um valor de "g" é determinada e nó 918 é associado com o valor de geohash 9q8yym. Semelhante ao nó 914, o nó 918 não está associado com um identificador de localização de texto mais específico e é também um nó transitório. As setas 920, 922, 924, 926, 928, e 930 identificam transições j, m, n, p, q, e r, respectivamente. Como tal, dependendo de um valor de geohash específico com o prefixo 9q8yymg, um dos nós 932, 934, 936, 938, 940, e 942 seria usado com base em uma transição específica. Por exemplo, o geohash 9q8yymgj usaria valor de transição "j" correspondente para determinar que nó 932 está associado com o valor de geohash 9q8yymgj.
[0057] A figura 9B ilustra um exemplo no qual a transição 920 tendo um valor de j é determinada para igualar valor de geohash 9q8yymgj associado com o nó 932. Em resposta à determinação que o nó 932 está associado com o valor de geohash 9q8yymgj, a informação de localização associada com o nó 932 pode ser provida a um usuário. Neste exemplo, o usuário pode ser provido com informação de localização que compreende o texto "área de Tenderloin, em São Francisco, Califórnia".
[0058] Como descrito em conjunto com as Figuras 9A e 9B, as coordenadas de localização de latitude: 37,781910 e longitude: -122,416507 são convertidas para um valor de geohash que é então aplicado a um trie de geocódigo, a fim de prover o usuário com uma descrição de texto das coordenadas de localização, no exemplo das Figuras 9A e 9B, a área do Tenderloin, São Francisco, Califórnia. Deve ser notado que, em uma modalidade, um valor de geohash pode conter um valor de espaço reservado que não é usado. Tal como mostrado na Figura 9B, o Geohash valorizado 9q8yymgj0s contém o marcador de posição "0s" que não é utilizado na aplicação do valor de geohash para o trie de geocódigo. Em uma modalidade, o "0s" indica uma extremidade do geohash. Como tal, se um trie é atravessado utilizando todos os valores em um valor de geohash particular e o espaço reservado "0s" é alcançado, o "0s" indica que o geohash não contém valores adicionais. Como tal, se o "0s" em um valor de geohash é alcançado enquanto atravessa um trie, o último nó associado com dados será considerado um nó terminal e informação obtida para esse nó irá ser utilizada para prover informação de localização. Por exemplo, se um termo de busca "firetruck" foi usado para percorrer um trie que inclui um nó "fire[DATA]" (onde DATA representa um nó terminal) a porção "truck" do termo de busca seria descartada e [DATA] seria devolvido em resposta a uma solicitação de busca "firetruck".
[0059] Uma vez que nem todas as áreas geográficas podem estar associadas com geohashes superiores a 4- caracteres, um usuário pode ser provido com um decodificador de texto mais geral de uma localização com base nas coordenadas de localização. A Figura 10 representa a aplicação do geohash 9q8yymqcg7 a um trie de geocódigo 1000 que não tem um nó associado com a totalidade do valor de geohash. Como mostrado na Figura 10, nó 1002 está associado com prefixo de geohash 9q8 que corresponde à parte de início de geohash 9q8yymqcg7. Além disso, a transição 1004 associada com o valor de "Y" é usada para determinar que o nó 1006 está associado com prefixo de geohash 9q8y. Além disso, a transição 1008 com o valor de "Y" é usado para determinar que o nó 1010 está associado com prefixo de geohash 9q8yy. A transição 1012 com o valor de "m" é usada para determinar que o nó de transição 1014 está associado com prefixo de geohash 9q8yym. No entanto, a transição 1016 com o valor de "g" não corresponde ao geohash 9q8yymqcg7. Como tal, o nó 1010 está determinado para ser a correspondência mais próxima disponível para o geohash 9q8yymqcg7 e informação de localização associada com o nó 1010 é provida a um usuário. Nó 1014 é um nó de transição que não tem dados de localização associados com ele. Como tal, o nó 1010 é o melhor nó correspondente tendo informação de localização associada a ele e a informação de localização associada com o nó 1010 é usada.
[0060] O comprimento de um geohash baseia-se nas coordenadas utilizadas para gerar o geohash. Como tal, as coordenadas de localização, com graus variáveis de precisão irá produzir geohashes semelhantes com diferentes graus de precisão. Por exemplo, as coordenadas de localização de latitude 37,78, longitude -122,41 podem ser utilizadas para gerar o geohash de 4 caracteres 9q8y. Um geohash de 4 caracteres pode ser usado para determinar a informação de localização tendo uma precisão comparável ao valor de geohash de 4 caracteres. A Figura 11 representa geohash 9q8y como aplicado para trie de geocódigo 1100. O nó 1102 está associado com prefixo de geohash 9q8. Transição de correspondência 1104 tem um valor de "y" e é utilizada para determinar que um nó 106 está associado com geohash 9q8y. Uma vez que não existem mais caracteres no geohash provido, a informação de localização associadas com o nó 1106 pode ser provida a um usuário. Deve ser notado que a informação de localização provida pelo geohash 9q8y só será tão exata quanto o que o geohash permitir. Neste exemplo, referindo- se à figura 9A, aplicar o valor de geohash 9q8y ao trie de geocódigo 900 produziria informação de localização identificando o geohash de 4 caracteres como sendo na Califórnia. Como tal, o geohash de 4 caracteres 9q8y resulta em informação de localização que permite identificar o geohash como estando localizado na Califórnia.
[0061] Em uma ou mais modalidades da invenção, o módulo de análise de geocódigo (145) inclui a funcionalidade para a construção de uma estrutura de trie de geocódigo representando os mosaicos de tamanho variável. Em uma ou mais modalidades, um ou mais nós no trie podem cada um representar um conjunto de mosaicos, de tal modo que as transições entre os nós correspondem a caracteres dos valores de Geohash associados com os mosaicos.
[0062] Em uma ou mais modalidades da invenção, o módulo de análise de geocódigo (145) inclui funcionalidade para usar a estrutura de trie de geocódigo para realizar buscas de geocódigo reverso com base em um valor de entrada de geohash. Fluxograma 1200 da Figura 12 mostra um método para gerar um trie de geocódigo e realizar uma busca de geocódigo reverso, de acordo com várias modalidades da invenção. Método 1200 inicia-se na etapa 1202. Na etapa 1204 uma área geográfica que inclui um conjunto de geometrias sobrepostas é identificada. Na etapa 1206 um conjunto de mosaicos de tamanho variável que representa cada uma das geometrias sobrepostas onde é criado cada um dos mosaicos é definido por um valor de geohash e onde o tamanho de cada mosaico é dependente de uma granularidade do valor de geohash. Na etapa 1208, uma estrutura de trie de geocódigo representando os mosaicos de tamanho variável é construída. Na etapa 1210, a estrutura de trie de geocódigo é usada para realizar uma busca de geocódigo reverso com base em um valor de entrada de geohash. Depois da etapa 1210, o processo pode ser repetido para outra área geográfica.
[0063] Em uma ou mais modalidades da invenção, a máquina de busca de geocódigo (145 da Figura 1) inclui funcionalidade para receber uma solicitação de geocódigo reverso identificando uma ou mais coordenadas de localização. Por exemplo, a solicitação de geocódigo reverso pode incluir as coordenadas GPS provenientes do receptor GPS (106 da Figura 1) do cliente (105 da Figura 1).
[0064] Em uma ou mais modalidades da invenção, a máquina de busca de geocódigo (145 da Figura 1) inclui a funcionalidade de gerar um valor de geohash utilizando as coordenadas de localização. O valor de geohash pode ser gerado, por exemplo, tomando os bits de uma latitude e longitude, a intercalando-os, em seguida, codificando o resultado em base32 para criar uma representação de sequência conveniente (isto é, o valor de geohash).
[0065] Em uma ou mais modalidades da invenção, a máquina de busca de geocódigo (145 da Figura 1) inclui funcionalidade para atravessar uma estrutura de trie de geocódigo com base no valor de geohash. O seguinte é um método exemplar de atravessar a estrutura de trie de geocódigo:
[0066] Para cada caractere c do geohash: Se o nó atual tem uma transição válida c: seguir a transição, e definir nó "atual" para o nó a transição leva a. repetir para o próximo caractere. Se não houver mais transições: você deve alcançar um nó folha, retornar o prefixo correspondente mais longo Se c não é uma transição válida a partir do nó atual subsequente ou você está fora de caracteres: voltar para baixo o trie e encontrar o último nó que contém um valor (um lugar que conhecemos).
[0067] A Figura 13 representa um fluxograma de um processo 1300 para a execução de uma busca de geocódigo reverso. Método 1300 começa na etapa 1302 e prossegue para a etapa 1304, em que uma solicitação de geocódigo reverso identificando uma ou mais coordenadas de localização é recebida. Na etapa 1306 um valor de geohash é gerado utilizando as coordenadas de localização. Na etapa 1308 uma estrutura de trie de geocódigo é atravessada com base no valor de geohash. Na etapa 1310 um mosaico mais granular da estrutura de trie de geocódigo combinando o valor de geohash é identificado. Na etapa 1312, um identificador do mosaico mais granular é provido em resposta à solicitação. Depois da etapa 1312, o método 1300 pode ser repetido para solicitações de Geocódigo reverso adicionais que são recebidas.
[0068] Em uma ou mais modalidades da invenção, a máquina de busca de geocódigo (145 da Figura 1) inclui funcionalidade para identificar um mosaico mais granular da estrutura de geocódigo combinando o valor de geohash. Um valor de geohash deste mosaico correspondente é então usado como entrada para uma tabela de hash, a fim de identificar uma localização. Identificar o mosaico mais granular pode envolver uma correspondência aproximada (por exemplo, combinar um primeiro N caracteres do valor de geohash com o valor de geohash do mosaico, para N > 0) ou uma correspondência exata (ou seja, todos os caracteres do valor de geohash correspondem ao valor de geohash do mosaico). A máquina de busca de geocódigo (145 da Figura 1) pode ser configurada para retornar um identificador da informação de localização e/ou adicional associada com a localização (por exemplo, um nome, coordenadas de localização, etc.) para o cliente (105 da Figura 1) em resposta à solicitação.
[0069] Em uma ou mais modalidades da invenção, o cliente (105 da Figura 1) pode ser qualquer dispositivo, incluindo a capacidade para identificar uma ou mais coordenadas de localização (por exemplo, utilizando o receptor GPS (106 da Figura 1)). Por exemplo, o cliente pode ser um smartphone, computador tablet, computador laptop, um sistema de entretenimento de veículo, e/ou qualquer outro dispositivo capaz de comunicar uma ou mais coordenadas de posição para o sistema de geocódigo (100). Em uma ou mais modalidades da invenção, o cliente (105 da Figura 1) é um aplicativo de servidor configurado para receber as coordenadas de localização de um ou mais de outros clientes, prover as coordenadas para o sistema de geocódigo (100 da Figura 1), e/ou para transmitir uma resposta do sistema de geocódigo (100 da Figura 1) para os clientes apropriados.
[0070] Em uma ou mais modalidades da invenção, o módulo de análise de geocódigo (145 da Figura 1) é uma software aplicativo ou um conjunto de softwares aplicativos relacionados configurados para serem executados em um ou mais processadores de hardware. O módulo de análise de geocódigo (145) pode incluir um ou mais segmentos configurados para construir uma estrutura de trie de geocódigo. O módulo de análise de geocódigo (145 da Figura 1) pode ser um componente de uma arquitetura orientada para serviços (SOA) ou qualquer outra plataforma de software, tanto dentro como fora do sistema de geocódigo (100 da Figura 1), de acordo com várias modalidades. Em uma ou mais modalidades da invenção, um ou mais dos componentes do módulo de análise de geocódigo (145 da Figura 1) residem em um aplicativo de computação de nuvem em um sistema distribuído por rede. Em uma ou mais modalidades da invenção, o módulo de análise de geocódigo 145 (da Figura 1) está integrado dentro ou operativamente ligado a um ou mais outros componentes do sistema de geocódigo (100 da Figura 1).
[0071] Em uma ou mais modalidades da invenção, a máquina de busca de geocódigo (150 da Figura 1) é uma software aplicativo ou um conjunto de softwares aplicativos relacionados configurados para serem executados em um ou mais processadores de hardware. A máquina de busca de geocódigo (150 da Figura 1) pode incluir um ou mais segmentos de leitor configurados para realizar várias buscas de Geocódigo reverso simultâneas utilizando dados (por exemplo, uma estrutura de trie de geocódigo) no depósito de geocódigo (115 da Figura 1). A máquina de busca de geocódigo (150 da Figura 1) pode ser um componente de uma arquitetura orientada a serviços (SOA) ou qualquer outra plataforma de software, dentro ou fora do sistema de geocódigo (100), de acordo com várias modalidades. Em uma ou mais modalidades da invenção, um ou mais dos componentes da máquina de busca de geocódigo (150 da Figura 1) residem em um aplicativo de computação de nuvem em um sistema de rede de distribuição. Em uma ou mais modalidades da invenção, a máquina de busca de geocódigo (150 da Figura 1) está integrada dentro ou operativamente ligada a um ou mais outros componentes do sistema de geocódigo (100 da Figura 1).
[0072] Em uma ou mais modalidades da invenção, o módulo de frontend (110 da Figura 1) é uma software aplicativo ou um conjunto de softwares aplicativos relacionados configurados para se comunicarem com entidades externas (por exemplo, cliente (105 da Figura 1)). O módulo de frontend (110 da Figura 1) pode incluir a interface de programação de aplicativo (API) e/ou qualquer número de outros componentes usados para a comunicação com entidades fora do sistema de geocódigo (100 da Figura 1). A API pode incluir qualquer número de especificações para fazer solicitações de e/ou prover dados para o sistema de geocódigo (100 da Figura 1). Por exemplo, uma função provida pela API pode prover buscas de geocódigo reverso para um cliente solicitante (105 da Figura 1).
[0073] Em uma ou mais modalidades da invenção, o depósito de geocódigo (115 da Figura 1) está configurado para armazenar um ou mais estruturas de trie de geocódigo, dados de localização geográfica, dados de mapas, valores de geohash, e/ou quaisquer outros dados pertinentes a realização de funcionalidade relacionada ao geocódigo (por exemplo, as buscas de geocódigo reverso).
[0074] Em uma ou mais modalidades da invenção, o depósito de geocódigo (115 da Figura 1) é um banco de dados e/ou serviços de armazenamento que reside em um ou mais servidores. Por exemplo, o depósito de geocódigo (115 da Figura 1) pode ser implementado como um serviço de armazenamento usando a arquitetura orientada a serviços (SOA) e configurado para receber solicitações de dados e prover os dados solicitados para outros componentes do sistema de geocódigo (100 de Figura 1). Em outro exemplo, o depósito de geocódigo (115 da Figura 1) pode incluir uma ou mais tabelas em um sistema de gerenciamento de banco de dados distribuído (SGBD), um banco de dados em cluster, um arquivo simples independente, e/ou qualquer software de armazenamento que resida em um ou mais dispositivos de armazenamento físico. Exemplos de um dispositivo de armazenamento podem incluir, mas não estão limitados a, uma unidade de disco rígido, um disco de estado sólido, e/ou outro dispositivo de memória. Qualquer tipo de banco de dados ou aplicativo de armazenamento pode ser utilizado, de acordo com várias modalidades da invenção.
[0075] Em uma ou mais modalidades da invenção, o depósito de geocódigo (115 da Figura 1) é um aplicativo separado ou um conjunto de aplicativos residentes em um ou mais servidores externos (e comunicativamente acoplados) para o sistema de geocódigo (100 da Figura 1). Alternativamente, em uma ou mais modalidades da invenção, um ou mais dos depósitos de dados pode ser um componente integrado do sistema de geocódigo (100 da Figura 1) e/ou pode residir, quer parcial ou inteiramente, em um ou mais dispositivos de hardware comuns (por exemplo, um servidor).
[0076] As Figuras 12 e 13 mostram fluxogramas de métodos, de acordo com várias modalidades da invenção. Embora as várias etapas nestes fluxogramas sejam apresentadas e descritas sequencialmente, um versado comum irá apreciar que algumas ou todas as etapas podem ser executadas em ordens diferentes e algumas ou todas as etapas podem ser executadas em paralelo. Além disso, em uma ou mais modalidades da invenção, uma ou mais das etapas podem ser omitidas, repetidas e/ou realizadas por uma ordem diferente. Deste modo, o esquema específico de etapas mostradas nas Figuras 12 e 13 não deve ser interpretado como limitando o âmbito da invenção.
[0077] As etapas da Figura 12 podem ser realizadas para construção de um modelo para realização de buscas de geocódigo reverso. As etapas da Figura 12 podem ser realizadas, por exemplo, por um módulo de análise de geocódigo (por exemplo, o módulo de análise de geocódigo (145) da Figura 1, discutido acima).
[0078] As etapas da figura 13 podem ser realizadas para realizar buscas de geocódigo reverso utilizando uma estrutura de trie de geocódigo. As etapas da figura 13 podem ser realizadas, por exemplo, por uma máquina de busca de geocódigo (por exemplo, máquina de busca de geocódigo (150) da Figura 1, discutido acima), em comunicação com um dispositivo de computação do cliente.
[0079] Em uma ou mais modalidades da invenção, uma ou mais etapas de fluxogramas são repetidas simultaneamente por vários segmentos. Por exemplo, as etapas 1204-1208 da Figura 12 podem ser realizadas simultaneamente por vários segmentos de um sistema. Assim, uma ou mais das etapas podem ser realizadas em série, em paralelo, e/ou por um sistema distribuído, de acordo com várias modalidades da invenção.
[0080] A Figura 14 representa um layout de cabeçalho de arquivo 1400 para uma implementação de um Trie fortemente empacotado de acordo com uma modalidade. TPGHT 1402 é um identificador de designação do arquivo como um "Trie de geohash fortemente empacotado." Em uma modalidade, a sequência de caracteres usada como um identificador é [0x54, 0x50 0x47, 0x48, 0x54]. VERS 1404 identifica uma versão do formato de arquivo como um i32. DATA_SZ 1406 é o tamanho em bytes da porção de dados do arquivo relacionado como um i32. Deve ser notado que DATA_SZ 1406 pode ser expandido (por exemplo, a um I64), se necessário, para suportar tamanhos maiores do que dois gigabytes. CHECKSUM 1408 é uma soma MD5 do trie e da porção e dados do arquivo armazenado como 16 bytes, como gerado, em uma modalidade, por MessageDigest do Java. DATA_0 1410 é um desvio absoluto no arquivo para o início da porção de dados e é armazenado como um i32. Deve ser notado que DATA_0 1410 pode ser expandido para um I64, se necessário. ROOT_0 1401 é o desvio relativo a partir do final do cabeçalho (neste exemplo, byte 37 é o primeiro byte do trie) do nó raiz do trie. Este valor é relativo porque, em uma modalidade, o trie é de memória mapeada. TRIE 1414 compreende nós de trie e dados e estende-se para o fim do arquivo.
[0081] A Figura 15 ilustra um formato de dados 1500 para um nó de trie de acordo com uma modalidade. D_IDX 1502 é um valor i32 positivo (ou seja, número inteiro 32) que é usado para recuperar o valor de dados para este nó a partir de uma seção de dados do arquivo. Um valor negativo é utilizado para indicar que não há dados associados com esse nó. C 1504 é uma contagem de bordas que este nó contém e é um i8. Para um nó de folha, C 1504 será zero. O valor máximo para C 1504 é de 32 bytes de comprimento baseado em codificação de base32. Os valores para b 1506, c 1510, e d 1514 representam valores de borda como i8. Os valores para Ob 1508, Oc 1512, e Od 1516 são o desvio relativo para o nó que aquela borda 'b' transita. O "O" em "Ob", "OC" em "OD" permanece para “desvio” e cada valor representa o desvio relativo a partir do início do nó em 1502 para o próximo nó no trie. Deve ser notado que o trie é atravessado da esquerda para a direita nas Figuras 9A, 9B, 10 e 11. A "raiz" do trie está localizada em uma extremidade do formato de dados 1500, que está à direita do diagrama mostrado na Figura 15. Os desvios são interpretados como significando que um salto para uma localização anterior em um arquivo (para a esquerda do diagrama) é necessário. Se um nó representado é um nó raiz, e o primeiro caractere em um termo de busca relacionado é "c", e há uma transição válida até a borda com o rótulo "c" para o próximo nó, o valor a partir de 1512 (um inteiro sinalizado de 32 bits) é lido e subtraído do desvio de arquivo absoluto para o nó que a transição "c" se liga.
[0082] A Figura 16 representa uma matriz de dados 1600 que, em uma modalidade, é um simples mapeamento 1:1 de D_IDK1502 (mostrado na Figura 15) para o N-ésimo valor longo. O deslocamento é D_IDX *8 e lê 8 bytes como i64. [Por favor, prover descrição adicional da Figura 16, se necessário].
[0083] A Figura 17 ilustra um sistema 1700 para prover informação sobre a localização de acordo com uma modalidade. Sistema de geocódigo 1702, em uma modalidade, é um sistema de geocódigo para prover informação de localização com base em valores de geohash tais como sistema de geocódigo 100 mostrado na Figura 1. Sistema de geocódigo 1702 se encontra em comunicação com o cliente 1706 através de uma rede 1704. O cliente 1706 pode ser qualquer tipo de dispositivo eletrônico capaz de se comunicar com o sistema geocódigo 1702 através de uma rede 1704. O cliente 1706 pode ser um computador, tal como um PC ou um dispositivo móvel, tal como um telefone celular, smartphone, assistente digital pessoal, etc. A rede 1704 pode ser qualquer tipo de rede com ou sem fio capaz de transmissão de informação de e para vários dispositivos conectados via rede. Em uma modalidade, a rede 1704 é a internet.
[0084] Sistema de geocódigo 1702 também está em comunicação com o sistema de troca de mensagens 1708 através da rede 1704. Sistema de SMS 1704 também está representado em comunicação direta com o cliente 1706 e os dados do sistema 1710 mas pode também estar em comunicação com os dispositivos através da rede 1704. O sistema de troca de mensagens 1708, em uma modalidade, é um sistema de mensagens curtas (por exemplo, Twitter), mas pode ser outros tipos de sistemas de mensagens também. O sistema de dados 1710 está em comunicação com o sistema de geocódigo 1702 através de uma rede de 1704 e também está representado em comunicação com o sistema de troca de mensagens 1708 e cliente 1712. O sistema de dados 1710 pode também comunicar com o cliente 1706, o sistema de troca de mensagens 1708, e o cliente 1712 através da rede 1704.
[0085] Em uma modalidade, os clientes 1706, 1712 se comunicam com o sistema de geocódigo 1702 diretamente para recuperar a informação de localização. Por exemplo, o cliente 1706 pode transmitir um conjunto de coordenadas de localização para o sistema de geocódigo como parte de uma solicitação de informação de localização. Em resposta à solicitação, o sistema de geocódigo 1702 retorna a informação de localização para o cliente 1706 com base nas coordenadas de localização, tal como descrito acima em conjunção com as Figuras 1 e 13.
[0086] Sistema de SMS 1708 comunica com o sistema de geocódigo 1702 para recuperar informação de localização. Sistema de SMS 1708, em uma modalidade, é um sistema de mensagens tal como o Twitter. Em uma modalidade, uma solicitação do sistema de troca de mensagens 1708 para a informação de localização baseia-se em um ou mais fatores. Por exemplo, um usuário postando uma mensagem através de uma conta associada pode desencadear uma solicitação de informação de localização proveniente do sistema de troca de mensagens 1708 para prover informação de localização no post do usuário. O post do usuário pode incluir a mensagem do usuário, bem como uma indicação de quando a mensagem foi postada e a localização do usuário quando o usuário criou a mensagem. Sistema de SMS 1708 também pode dirigir uma solicitação de informação de localização em resposta a uma solicitação do usuário para exibir mensagens de pessoas ou entidades que estão associadas com (por exemplo, mensagens de usuários que um determinado usuário tenha indicado que gostaria de receber). Sistema de SMS 1708 pode transmitir uma solicitação para determinar informação de localização relativa a um usuário em particular, a fim de prover o usuário com mensagens postadas a partir de locais próximos à localização do usuário.
[0087] Em uma modalidade, sistema de troca de mensagens 1708 pode prover mensagens para um usuário com base em mensagens ou assuntos que estão determinados para terem uma quantidade significativa de atividade associada a eles (por exemplo, mensagens de tendências ou temas). Sistema de SMS 1708 pode solicitar informação de localização para mensagens de tendências ou temas, a fim de prover aos usuários com mensagens de tendências ou temas com base na localização do usuário. Além disso, a informação de localização recuperada do sistema de geocódigo 1702 pode ser usada para prover aos usuários com mensagens de tendência ou objetos, juntamente com informação relativa a onde as mensagens de tendências ou objetos estão ocorrendo em números significativos.
[0088] Em uma modalidade, o sistema de troca de mensagens 1708 recebe uma solicitação do cliente 1706. A solicitação de cliente 1706 pode pertencer a uma variedade de informação, tais como uma solicitação de mensagem que um usuário associado com o cliente 1706 está interessada ou uma solicitação para as mensagens de tendência ou objetos. Em uma modalidade, a solicitação contém as coordenadas de localização de dispositivo de cliente 1706. Em resposta à solicitação, o sistema de troca de mensagens 1708 transmite as coordenadas de posição para o sistema de geocódigo 1702 através de uma rede 1704. Em resposta às coordenadas de localização, o sistema de geocódigo 1702 transmite informação de localização para o sistema de troca de mensagens 1708. A informação de localização, em uma modalidade, é gerada pelo sistema de geocódigo 100 da Figura 1, utilizando o método ilustrado na Figura 13. Sistema de SMS 1708, em seguida, determina uma resposta à solicitação com base na informação na solicitação, bem como na informação de localização provida pelo sistema de geocódigo 1702. O sistema de troca de mensagens 1708, em seguida, transmite uma resposta ao cliente 1706 com base na solicitação do dispositivo de cliente 1706 e na informação de localização por prover sistema de geocódigo 1702. Por exemplo, um usuário pode solicitar para ver as mensagens que foram postadas perto da localização na qual o dispositivo cliente está atualmente localizado. Em resposta, o sistema de troca de mensagens 1708 determina a localização atual do dispositivo cliente com base nas coordenadas de localização providas pelo dispositivo e identifica as mensagens que foram colocadas dentro de um certo raio do localização do dispositivo de cliente.
[0089] Sistema de dados 1710, em uma modalidade, se comunica com o sistema de geocódigo 1702 para recuperar a informação de localização. Em uma modalidade, sistema de dados 1710 é um sistema de informação geográfica (por exemplo, um serviço de mapeamento, um serviço de planejamento de rotas, etc.). Uma solicitação de um usuário é transmitida do cliente 1712 para o sistema de dados 1710. A solicitação pode ser qualquer tipo de solicitação, tal como uma solicitação de informação de localização em relação a um ponto em um mapa de uma área ou localização geográfica ou uma solicitação a partir de uma localização para outra. A solicitação, em uma modalidade, é recebida pelo sistema de dados 1710 que transmite, em seguida, uma ou mais coordenadas de posição para o sistema de geocódigo 1702. Em resposta às coordenadas de localização, o sistema de geocódigo 1702 transmite a informação de localização para o sistema de dados 1710. A informação de localização, em uma modalidade, é gerada pelo sistema de geocódigo 100 da Figura 1, utilizando o método descrito na Figura 13. A informação de localização a partir do sistema de geocódigo 1702 é então utilizada pelo sistema de dados 1710 para gerar uma resposta à solicitação do usuário. Por exemplo, a resposta pode ser uma informação de localização pertencente a um ponto em um mapa selecionado pelo usuário. A resposta pode também ser direção a partir de um primeiro ponto para um segundo ponto determinado pelo sistema de dados 1710 com base na informação de localização recebida do sistema de dados 1702. O sistema de geocódigo 1710 também pode solicitar informação de localização adicional, a fim de identificar a informação adicional no que diz respeito à informação de localização. Por exemplo, o sistema de dados 1710 que planeja uma rota para um usuário atravessar pode prover informação adicional, tal como a localização de postos de gasolina ao longo de uma rota de uma primeira localização para uma segunda localização. Outras informações como pontos de referência próximos à localização inicial e final de uma rota ou em localizações ao longo da rota podem ser determinadas e providas para o usuário.
[0090] O sistema de dados pode ser de outros tipos de sistema, tais como um sistema bancário, sistemas de varejo (por exemplo, sistemas associados com os varejistas ou outros merchandizers), e sistemas de navegação (por exemplo, FedEx, UPS ou USPS), etc. Tais sistemas podem utilizar a informação de localização para uma variedade de diferentes fins, tais como a segurança ou prover aos usuários com uma variedade de informação. Por exemplo, um banco pode determinar a localização de um usuário com base em coordenadas de localização recebidas do cliente 1712 que pode então ser convertido em informação de localização usando o sistema de geocódigo 1702. O banco pode usar a informação de localização para determinar se uma transação solicitada deve ser negada ou exigir autenticação adicional de um usuário para avançar. Por exemplo, se ocorrer uma primeira operação em Nova York e uma segunda operação é solicitada em San Francisco dez minutos mais tarde, o banco pode negar a solicitação para a segunda operação ou solicitar autenticação adicional a partir de um usuário, em resposta à diferença significativa nas localizações das operações que ocorrem dentro de um curto período de tempo.
[0091] Em uma modalidade, o sistema de dados ou sistema de mensagem 1710 1708 pode determinar a informação de localização, utilizando uma variedade de dados. Por exemplo, sistema de troca de mensagens 1708 pode não receber as coordenadas de localização de cliente 1706. Um endereço de IP associado com o dispositivo cliente 1706 pode ser utilizado pelo sistema de troca de mensagens 1708 para determinar coordenadas de localização associadas com o endereço de IP. A coordenada de localização associada com o endereço de IP pode ser transmitida para o sistema de geocódigo 1702 para determinar a informação de localização em relação ao endereço IP. Informação adicional pode então ser provida ao cliente 1706 com base na informação de localização, determinada pelo endereço de IP.
[0092] Sistema de dados 1710, em uma modalidade, pode ser um sistema para controlar a localização e movimento de uma variedade de dispositivos. Por exemplo, os telefones celulares que não têm receptores de GPS podem determinar sua coordenadas de localização com base em sinais de torres de celular próximas. As coordenadas de posição determinadas pelo telefone celular pode ser utilizado pelo sistema de geocódigo 1702 para geração de informação de localização. Em uma modalidade, o sistema de dados 1710 pode ser um sistema em comunicação com uma variedade de dispositivos. Por exemplo, o sistema de dados 1710 pode estar em comunicação com os sistemas do veículo (por exemplo, sistemas de navegação de veículos, OnStar, rádio por satélite, etc.).Informação de localização para um veículo pode ser determinada usando o sistema de geocódigo 1702 com base em coordenadas de localização providas pelos sistemas do veículo. A informação sobre a localização dos veículos pode então ser analisada para prover uma variedade de informação adicional, tal como o tráfego e uso rodoviário.
[0093] Modalidades da invenção podem ser implementadas virtualmente em qualquer tipo de computador, independentemente da plataforma a ser utilizada. Por exemplo, como mostrado na Figura 18, um sistema de computador (1800) inclui um ou mais processadores (s) (1802) (tal como uma unidade de processamento central (CPU), circuito integrado, um processador de hardware, etc.), memória associada (1804) (por exemplo, RAM, memória cache, memória flash, etc.), um dispositivo de armazenamento (1806) (por exemplo, um disco rígido, uma unidade óptica, como uma unidade de disco compacto ou disco de vídeo digital (DVD), um bastão de memória flash, etc.), um adaptador de rede (1818), e muitos outros elementos e funcionalidades típicas dos computadores de hoje (não mostradas). Um ou mais componentes do sistema de computador (1800) podem ser comunicativamente conectados por um barramento (1816). O sistema de computador (1800) também pode incluir meios de entrada, tais como um teclado (1808), um mouse (1810), ou um microfone (não representado). Além disso, o sistema de computador (1800) pode incluir meios de saída, tal como um monitor (1812) (por exemplo, uma tela de cristal líquido (LCD), uma tela de plasma, ou tela de tubo de raios catódicos (CRT)). O sistema de computador (1800) pode ser conectado a uma rede (1814) (por exemplo, uma rede de área de localização (LAN), uma rede de área alargada (WAN), tal como a Internet, ou qualquer outro tipo de rede) através do adaptador de rede (1818). Os versados na técnica apreciarão que existem muitos tipos diferentes de sistemas de computador, e os meios de entrada e de saída acima mencionadas podem assumir outras formas. De um modo geral, o sistema de computador (1800) inclui, pelo menos, o processamento mínimo, meios de entrada e/ou saída para necessários para a prática de modalidades da invenção. Além disso, em uma ou mais modalidades da invenção, um ou mais elementos do sistema de computador acima mencionados (1800) podem estar localizados em uma localização remota e ligados a outros elementos através de uma rede. Além disso, modalidades da invenção podem ser implementadas em um sistema de distribuído tendo uma pluralidade de nós, em que cada parte da invenção (por exemplo, o módulo de análise de geocódigo (145), máquina de busca de geocódigo (150), depósito de geocódigo (115), etc. da Figura 1, acima discutida) pode ser localizada em um nó diferente dentro do sistema distribuído. Em uma modalidade da invenção, o nó corresponde a um sistema de computador. Alternativamente, o nó pode corresponder a um processador com memória física associada. O nó pode alternativamente corresponder a um processador ou micronúcleo de um processador com memória e/ou recursos compartilhados.
[0094] Além disso, um ou mais elementos dos sistemas acima descritos (por exemplo, o módulo de análise de geocódigo (145), a máquina de busca de geocódigo (150), depósito de geocódigo (115), etc., da Figura 1, acima discutida) podem ser implementados como instruções de software na forma de código de programa legível por computador armazenado, temporária ou permanentemente, de um ou mais meios de armazenamento legível por computador não transitório. Os meios de armazenamento legíveis por computador não transitório são executáveis por um ou mais processadores de computador para realizar a funcionalidade de um ou mais componentes dos sistemas acima descritos (por exemplo, Figura 1) e/ou fluxogramas (por exemplo, as Figuras 12 e 13), de acordo com várias modalidades da invenção. Exemplos de meios legíveis por computador não transitórios podem incluir, mas não estão limitados a, discos compactos (CDs), memória flash, drives de estado sólido, memória de acesso aleatório (RAM), memória somente de leitura (ROM), ROM programável eletricamente apagável (EEPROM), discos versáteis digitais (DVDs) ou outro de armazenamento óptico, e qualquer outra mídia legível por computador excluindo sinais de propagação transitórios.
[0095] Embora várias modalidades tenham sido descritas e/ou ilustradas em que, no contexto dos sistemas de computação totalmente funcionais, uma ou mais destas modalidades exemplares podem ser distribuídas como um produto de programa em uma variedade de formas, independentemente do tipo particular de mídia legível por computador usada para realmente realizar a distribuição. As modalidades aqui descritas podem também ser implementadas utilizando módulos de software que executam certas tarefas. Estes módulos de software podem incluir script, lote ou outros arquivos executáveis que podem ser armazenados em um meio de armazenamento legível por computador ou em um sistema de computação. Estes módulos de software podem configurar um sistema de computação para realizar uma ou mais das modalidades exemplares aqui descritas. Um ou mais dos módulos de software aqui divulgados podem ser implementados em um ambiente de computação de nuvem. Ambientes de computação em nuvem podem prover vários serviços e aplicações através da Internet. Estes serviços baseados em nuvem (por exemplo, software como um serviço, plataforma como um serviço, infraestrutura como um serviço, etc.) podem ser acessados através de um navegador da Web ou outra interface remota. Várias funções descritos neste documento podem ser providas através de um ambiente de desktop remoto ou qualquer outro ambiente de computação baseado em nuvem.
[0096] Enquanto a descrição anterior apresenta várias modalidades utilizando diagramas específicos do bloco, fluxogramas e exemplos, cada componente de diagrama de blocos, fluxograma, etapa de operação e/ou componente descrito e/ou aqui ilustrado pode ser implementado, individualmente e/ou coletivamente, utilizando uma ampla gama de configurações de hardware, software ou firmware (ou qualquer combinação dos mesmos). Além disso, qualquer divulgação de componentes contidos dentro de outros componentes deve ser considerada como exemplos, porque muitas outras arquiteturas podem ser implementadas para obter a mesma funcionalidade.
[0097] Os parâmetros de processo e sequência de etapas descritos e/ou ilustrados aqui são dados a título de exemplo apenas. Por exemplo, enquanto que as etapas ilustradas e/ou descritas aqui podem ser exibidas ou discutidas em uma ordem particular, estas etapas não precisam necessariamente de ser realizadas na ordem ilustrada ou discutida. Os vários métodos exemplares descritos e/ou ilustrados aqui podem também omitir uma ou mais das etapas descritas ou aqui ilustradas ou incluir etapas adicionais em adição às divulgados.
[0098] Uma ou mais modalidades da invenção têm uma ou mais das seguintes vantagens. Através da criação de um conjunto de mosaicos de tamanho variável definido por um valor de hash, e utilizando os mosaicos para representar um conjunto de geometrias sobrepostas, pode ser possível gerar uma estrutura de trie de geocódigo permitindo rápidas e eficientes buscas de geocódigo reverso. Além disso, atravessar a estrutura de trie de geocódigo usando um valor de geohash que descreve uma ou mais coordenadas de localização, pode ser possível evitar o problema de "pointin-polygon" ao realizar buscas de geocódigo reverso.
[0099] Embora a invenção tenha sido descrita com respeito a um número limitado de modalidades, os versados na técnica, tendo benefício desta descrição, irão apreciar que outras modalidades podem ser concebidas sem que se afastem do âmbito da invenção tal como divulgado aqui. Por conseguinte, o âmbito da invenção deve ser limitado apenas pelas reivindicações anexas.
[00100] A descrição detalhada anterior deve ser entendida como sendo, em todos os aspectos, ilustrativa e exemplar, mas não restritiva, e o âmbito do conceito da invenção aqui divulgado não deve ser determinado a partir da descrição detalhada, mas a partir das reivindicações, tal como interpretado segundo a extensão máxima permitida pelas leis de patentes. Deve ser entendido que as modalidades mostradas e aqui descritas são apenas ilustrativas dos princípios do conceito inventivo e que várias modificações podem ser implementadas pelos versados na técnica sem se afastarem do âmbito e do espírito do conceito inventivo. Os versados na técnica podem implementar várias outras combinações de características sem sair do âmbito e do espírito do conceito inventivo.

Claims (20)

1. Método para facilitar buscas de geocódigo reverso, caracterizado pelo fato de que compreende: receber, de um sistema de mensagem, uma solicitação de busca de geocódigo reverso identificando coordenadas de localização em uma solicitação para mensagens recebidas pelo sistema de mensagem a partir de um dispositivo de computador; gerar um valor de geohash com base nas coordenadas de localização; atravessar uma estrutura de trie de geocódigo com base no valor de geohash, em que a estrutura de trie de geocódigo compreende nós representando valores de geohash correspondentes a mosaicos de tamanho variável dentro de cada uma das múltiplas geometrias, em que cada geometria corresponde a uma área geográfica, cada mosaico é definido por um valor de geohash correspondente, um tamanho de cada mosaico é dependente da granularidade do valor de geohash correspondente, e os mosaicos dentro de uma geometria associada com uma área geográfica contida dentro de outra área geográfica inclui pelo menos alguns mosaicos definidos por valores de geohash tendo granularidade maior que os valores de geohash definindo os mosaicos da geometria associada com a outra área geográfica; identificar um mosaico mais granular da estrutura de trie de geocódigo correspondendo ao valor de geohash; fornecer, para o sistema de mensagem, informação de localização com base no identificador do mosaico mais granular, em que a informação de localização é utilizável pelo sistema de mensagem para identificar e fornecer ao dispositivo de computador uma pluralidade de mensagens.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a estrutura de trie de geocódigo compreende: uma pluralidade de nós, cada nó particular representando um valor de geohash particular associado com um mosaico particular da estrutura de trie de geocódigo.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o tamanho de cada um mosaico é baseado em um índice de densidade correspondente àquele mosaico.
4. Método, de acordo com a reivindicação 3, caracterizado pelo fato de que o índice de densidade correspondendo a cada mosaico baseia-se em um número de usuários que solicitam as coordenadas de localização a partir de uma área geográfica correspondente àquele mosaico.
5. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que um comprimento de valor de geohash particular é inversamente relacionado com um tamanho de um mosaico associado com o valor de geohash particular.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o valor de geohash é uma representação da base 32 das coordenadas de localização intercaladas.
7. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a informação de localização baseada no mosaico mais granular identificado inclui uma descrição de texto de uma localização associada com o mosaico mais granular.
8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a solicitação para mensagens compreende uma solicitação para mensagens contidas em uma ou mais contas de usuário.
9. Sistema, caracterizado pelo fato de que compreende: um sistema de mensagem ao qual mensagens podem ser postadas por usuários de sistema de mensagem, o sistema de mensagem sendo configurado para receber uma solicitação de usuário para mensagens a partir de um dispositivo de computador, a solicitação para mensagens solicitando ao sistema de mensagem fornecer mensagens para o dispositivo de computador com base, pelo menos em parte, em uma localização correspondente a coordenadas de localização incluídas na solicitação; e um sistema de geocódigo para realizar buscas de geocódigo reverso, o sistema de geocódigo compreendendo: um processador; e uma máquina de busca de geocódigo configurada para: controlar o recebimento, de um sistema de mensagem, de uma solicitação de busca de geocódigo reverso, a solicitação de busca de geocódigo reverso incluindo coordenadas de localização incluídas na solicitação para mensagens; gerar um valor de geohash com base nas coordenadas de localização; atravessar uma estrutura de trie de geocódigo com base no valor de geohash, em que a estrutura de trie de geocódigo compreende nós representando mosaicos de tamanho variável dentro de cada uma das múltiplas geometrias, em que cada geometria corresponde a uma área geográfica, cada mosaico é definido por um valor de geohash correspondente, um tamanho de cada mosaico é dependente de uma granularidade do valor de geohash correspondente, e os mosaicos dentro de uma geometria associada com uma área geográfica contida dentro de outra área geográfica inclui pelo menos alguns mosaicos definidos por valores de geohash tendo granularidade maior que os valores de geohash definindo os mosaicos da geometria associada com a outra área geográfica; identificar um mosaico mais granular da estrutura de trie de geocódigo correspondendo ao valor de geohash; controlar o fornecimento, para o sistema de mensagem, de informação de localização com base no identificador de mosaico mais granular, em que o sistema de mensagem é configurado para identificar mensagens com base na solicitação para mensagens e informação de localização fornecidas pela máquina de busca de geocódigo e fornecer as mensagens identificadas para o dispositivo de computador.
10. Sistema, de acordo com a reivindicação 9, caracterizado pelo fato de que a estrutura de trie de geocódigo compreende: uma pluralidade de nós, cada nó particular representando um valor de geohash particular associado com um mosaico particular da estrutura de trie de geocódigo.
11. Sistema, de acordo com a reivindicação 9, caracterizado pelo fato de que o tamanho de cada um mosaico é baseado em um índice de densidade correspondente àquele mosaico.
12. Sistema, de acordo com a reivindicação 11, caracterizado pelo fato de que o índice de densidade correspondendo a cada mosaico baseia-se em um número de usuários que solicitam as coordenadas de localização a partir de uma área geográfica correspondente àquele mosaico.
13. Sistema, de acordo com a reivindicação 10, caracterizado pelo fato de que um comprimento de valor de geohash particular é inversamente relacionado com um tamanho de um mosaico associado com o valor de geohash particular.
14. Sistema, de acordo com a reivindicação 9, caracterizado pelo fato de que o valor de geohash é uma representação da base 32 das coordenadas de localização intercaladas.
15. Sistema, de acordo com a reivindicação 9, caracterizado pelo fato de que a informação de localização baseada no mosaico mais granular identificado inclui uma descrição de texto de uma localização associada com o mosaico mais granular.
16. Sistema, de acordo com a reivindicação 9, caracterizado pelo fato de que a solicitação para mensagens compreende uma solicitação para mensagens contidas em uma ou mais contas de usuário.
17. Memória, caracterizada pelo fato de que compreende instruções armazenadas na mesma, as instruções sendo executadas por um computador para realizar o método conforme definido em qualquer uma das reivindicações 1 a 8.
18. Sistema, caracterizado pelo fato de que compreende a memória conforme definida na reivindicação 17 e um processador configurado para executar as instruções armazenadas na memória.
19. Sistema, caracterizado pelo fato de que compreende: um sistema de mensagem ao qual mensagens podem ser postadas por usuários de sistema de mensagem; um dispositivo de computador configurado para transmitir uma solicitação para mensagens para o sistema de mensagem, a solicitação para mensagens solicitando ao sistema de mensagem fornecer mensagens para o dispositivo de computador com base, pelo menos em parte, em coordenadas de localização do dispositivo de computador incluídas na solicitação; e um sistema de geocódigo para realizar buscas de geocódigo reverso, o sistema de geocódigo compreendendo: um processador; e uma máquina de busca de geocódigo configurada para: controlar o recebimento, a partir de um sistema de mensagem, de uma solicitação de busca de geocódigo reverso, a solicitação de busca de geocódigo reverso incluindo coordenadas de localização incluídas na solicitação para mensagens; gerar um valor de geohash com base pelo menos nas coordenadas de localização; atravessar uma estrutura de trie de geocódigo com base no valor de geohash, em que a estrutura de trie de geocódigo compreende nós representando mosaicos de tamanho variável dentro de cada uma das múltiplas geometrias, em que cada geometria corresponde a uma área geográfica, cada mosaico é definido por um valor de geohash correspondente, um tamanho de cada mosaico é dependente de uma granularidade do valor de geohash correspondente, e os mosaicos dentro de uma geometria associada com uma área geográfica contida dentro de outra área geográfica inclui pelo menos alguns mosaicos definidos por valores de geohash tendo granularidade maior que os valores de geohash definindo os mosaicos da geometria associada com a outra área geográfica; identificar um mosaico mais granular da estrutura de trie de geocódigo correspondendo ao valor de geohash; controlar o fornecimento, para o sistema de mensagem, de informação de localização com base no identificador de mosaico mais granular, em que o sistema de mensagem é configurado para identificar mensagens com base na solicitação para mensagens e informação de localização fornecidas pela máquina de busca de geocódigo e fornecer as mensagens identificadas para o dispositivo de computador, e o dispositivo de computador é configurado para fornecer informação de mensagem com base nas mensagens a partir do sistema de mensagem.
20. Sistema, de acordo com a reivindicação 19, caracterizado pelo fato de que o dispositivo de computador compreende um smartphone.
BR112015023617-0A 2013-03-15 2014-03-14 Método e sistema para gerar um trie de geocódigo e facilitar buscas de geocódigo reverso BR112015023617B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361802162P 2013-03-15 2013-03-15
US61/802,162 2013-03-15
PCT/US2014/029868 WO2014145154A1 (en) 2013-03-15 2014-03-14 Method and system for generating a geocode trie and facilitating reverse geocode lookups

Publications (3)

Publication Number Publication Date
BR112015023617A2 BR112015023617A2 (pt) 2017-07-18
BR112015023617A8 BR112015023617A8 (pt) 2019-12-03
BR112015023617B1 true BR112015023617B1 (pt) 2022-05-31

Family

ID=50771581

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112015023617-0A BR112015023617B1 (pt) 2013-03-15 2014-03-14 Método e sistema para gerar um trie de geocódigo e facilitar buscas de geocódigo reverso

Country Status (3)

Country Link
US (2) US10366113B2 (pt)
BR (1) BR112015023617B1 (pt)
WO (1) WO2014145154A1 (pt)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9372894B2 (en) * 2013-08-15 2016-06-21 International Business Machines Corporation Scoring relationships between entities based on proximity in space and time
US9798808B2 (en) * 2014-03-17 2017-10-24 SynerScope B.V. Data visualization system
US9494440B2 (en) * 2014-06-30 2016-11-15 Strol, LLC Generating travel routes for increased visual interest
US20160103858A1 (en) * 2014-10-13 2016-04-14 Freescale Semiconductor, Inc. Data management system comprising a trie data structure, integrated circuits and methods therefor
CN104516950A (zh) * 2014-12-10 2015-04-15 百度在线网络技术(北京)有限公司 一种兴趣点的查询方法及装置
US9720092B2 (en) 2015-03-26 2017-08-01 International Business Machines Corporation Enhanced conversion between geohash codes and corresponding longitude/latitude coordinates
US9685088B2 (en) 2015-04-10 2017-06-20 Architecture Technology, Inc. Communication travel plan generation system
US10275671B1 (en) * 2015-07-14 2019-04-30 Wells Fargo Bank, N.A. Validating identity and/or location from video and/or audio
US20170017659A1 (en) * 2015-07-15 2017-01-19 Lane Petrauskas Methods for identifying levels of concentrated social activity at stored venue locations within a region and devices thereof
US10685024B2 (en) 2015-10-21 2020-06-16 Oracle International Corporation Tuple extraction using dynamically generated extractor classes
WO2017111644A1 (en) * 2015-12-23 2017-06-29 Oracle International Corporation Flexible event ingestion framework in an event processing system
CN107153647B (zh) * 2016-03-02 2021-12-07 北京字节跳动网络技术有限公司 进行数据压缩的方法、装置、系统和计算机程序产品
US10346131B2 (en) 2016-03-25 2019-07-09 International Business Machines Corporation Spatial predicates evaluation on geohash-encoded geographical regions
CN107291785A (zh) * 2016-04-12 2017-10-24 滴滴(中国)科技有限公司 一种数据查找方法及装置
WO2017185832A1 (en) 2016-04-27 2017-11-02 Beijing Didi Infinity Technology And Development Co., Ltd. System and method for determining routes of transportation service
DE102016209568B3 (de) 2016-06-01 2017-09-21 Volkswagen Aktiengesellschaft Verfahren, Vorrichtungen und Computerprogramme zum Erfassen von Messergebnissen von mobilen Geräten
US10521477B1 (en) * 2016-09-28 2019-12-31 Amazon Technologies, Inc. Optimized location identification
US10565279B2 (en) 2016-10-05 2020-02-18 Uber Technologies, Inc. Contextual search for location services
US10885072B2 (en) 2016-10-25 2021-01-05 International Business Machines Corporation Spatial computing for location-based services
US10352709B1 (en) * 2017-02-15 2019-07-16 Amazon Technologies, Inc. Identification of road segments
CN106991149B (zh) * 2017-03-28 2020-11-10 桂林电子科技大学 一种融合编码和多版本数据的海量空间对象存储方法
CN107402955B (zh) * 2017-06-02 2020-04-14 阿里巴巴集团控股有限公司 确定地理围栏的索引网格的方法和装置
US10747789B2 (en) * 2017-08-28 2020-08-18 Verizon Patent And Licensing, Inc. Geographic predictive search
CN109991797B (zh) * 2017-12-29 2021-04-06 光宝电子(广州)有限公司 加热装置及应用其的摄像器
EP3627343A1 (en) * 2018-09-19 2020-03-25 censhare AG Efficient in-memory multi-version concurrency control for a trie data structure based database
CN110059260B (zh) * 2019-04-29 2020-07-31 北京字节跳动网络技术有限公司 一种推荐方法、装置、设备和介质
US11070485B2 (en) * 2019-12-05 2021-07-20 Netflix, Inc. Multimedia content steering
US11200167B2 (en) * 2019-12-10 2021-12-14 Pony Ai Inc. Dynamic memory address encoding
WO2022019953A1 (en) * 2020-07-22 2022-01-27 Sekhar Chandra Human-friendly geocodes
US11734241B2 (en) 2020-11-25 2023-08-22 International Business Machines Corporation Efficient spatial indexing
CN113138985B (zh) * 2021-04-22 2023-05-02 重庆长安汽车股份有限公司 一种gps数据解析方法及系统
CN113342283A (zh) * 2021-06-29 2021-09-03 招商局金融科技有限公司 用户位置信息存储方法、装置、电子设备及可读存储介质
CN113626550B (zh) * 2021-08-05 2022-02-25 生态环境部卫星环境应用中心 基于三元组双向索引与优化缓存的影像瓦片地图服务方法

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5968109A (en) * 1996-10-25 1999-10-19 Navigation Technologies Corporation System and method for use and storage of geographic data on physical media
US20020035605A1 (en) * 2000-01-26 2002-03-21 Mcdowell Mark Use of presence and location information concerning wireless subscribers for instant messaging and mobile commerce
US6609005B1 (en) 2000-03-28 2003-08-19 Leap Wireless International, Inc. System and method for displaying the location of a wireless communications device wiring a universal resource locator
SE518059C2 (sv) 2000-12-22 2002-08-20 Payment Security Sweden Ab Förfarande för att öka säkerheten vid betalning med kredit- och betalkort
US6782319B1 (en) * 2002-11-26 2004-08-24 Navteq North America, Llc Method for organizing map data
US8015183B2 (en) * 2006-06-12 2011-09-06 Nokia Corporation System and methods for providing statstically interesting geographical information based on queries to a geographic search engine
WO2007146967A2 (en) * 2006-06-12 2007-12-21 Google Inc. Markup language for interactive geographic information system
US20080016066A1 (en) 2006-06-30 2008-01-17 Tele Atlas North America, Inc. Adaptive index with variable compression
US7941379B1 (en) * 2009-06-25 2011-05-10 Symantec Corporation Systems and methods for using geo-location information in sensitive internet transactions
US8660793B2 (en) * 2009-09-18 2014-02-25 Blackberry Limited Expediting reverse geocoding with a bounding region
US9357001B2 (en) * 2009-10-01 2016-05-31 Telefonaktiebolaget Lm Ericsson (Publ) Location aware mass information distribution system and method
US8489127B2 (en) * 2010-04-20 2013-07-16 Apple Inc. Context-based reverse geocoding
US8244743B2 (en) * 2010-06-08 2012-08-14 Google Inc. Scalable rendering of large spatial databases
US8504393B2 (en) * 2010-09-10 2013-08-06 State Farm Mutual Automobile Insurance Company Systems and methods for grid-based insurance rating
US9002859B1 (en) * 2010-12-17 2015-04-07 Moonshadow Mobile, Inc. Systems and methods for high-speed searching and filtering of large datasets
US8930391B2 (en) * 2010-12-29 2015-01-06 Microsoft Corporation Progressive spatial searching using augmented structures
US8965901B2 (en) * 2011-03-01 2015-02-24 Mongodb, Inc. System and method for determining exact location results using hash encoding of multi-dimensioned data
US8538679B1 (en) * 2011-04-08 2013-09-17 Oberweis Dairy, Inc. Enhanced geocoding
GB2492317A (en) * 2011-06-16 2013-01-02 Sony Comp Entertainment Europe Leaderboard system
JP2013045319A (ja) * 2011-08-25 2013-03-04 Sony Corp 情報処理装置、情報処理方法、およびプログラム
GB201117901D0 (en) * 2011-10-18 2011-11-30 Tomtom Int Bv Map code: a public location encoding standard
US8666989B1 (en) * 2011-12-02 2014-03-04 Google Inc. Adaptive distributed indexing of local adverts
US9171054B1 (en) * 2012-01-04 2015-10-27 Moonshadow Mobile, Inc. Systems and methods for high-speed searching and filtering of large datasets
CN103383682B (zh) * 2012-05-01 2017-12-26 刘龙 一种地理编码方法、位置查询系统及方法
US9235906B2 (en) * 2012-06-10 2016-01-12 Apple Inc. Scalable processing for associating geometries with map tiles
US10599818B2 (en) * 2012-10-02 2020-03-24 Banjo, Inc. Event-based vehicle operation and event remediation
US10360352B2 (en) * 2012-10-02 2019-07-23 Banjo, Inc. System and method for event-based vehicle operation
US20150286689A1 (en) * 2012-12-05 2015-10-08 Google Inc. Systems and Methods for Displaying Geographic Location Information Corresponding to Search Result
US10380636B2 (en) * 2012-12-06 2019-08-13 Ebay Inc. Systems and methods for statistical dynamic geofencing
US9081797B2 (en) * 2013-03-06 2015-07-14 Google Inc. Systems and methods for associating microposts with geographic locations
US9710485B2 (en) * 2014-03-14 2017-07-18 Twitter, Inc. Density-based dynamic geohash
US20160103858A1 (en) * 2014-10-13 2016-04-14 Freescale Semiconductor, Inc. Data management system comprising a trie data structure, integrated circuits and methods therefor

Also Published As

Publication number Publication date
US20140280318A1 (en) 2014-09-18
BR112015023617A2 (pt) 2017-07-18
US11550826B2 (en) 2023-01-10
US10366113B2 (en) 2019-07-30
US20200026721A1 (en) 2020-01-23
BR112015023617A8 (pt) 2019-12-03
WO2014145154A1 (en) 2014-09-18

Similar Documents

Publication Publication Date Title
US11550826B2 (en) Method and system for generating a geocode trie and facilitating reverse geocode lookups
CN108959244B (zh) 地址分词的方法和装置
US9996565B2 (en) Managing an index of a table of a database
US11537556B2 (en) Optimized content object storage service for large scale content
JP6188732B2 (ja) マルチテナント環境におけるテナント固有のデータ・セットを管理するための、コンピュータで実施される方法、コンピュータ・プログラム製品、およびシステム
US11204896B2 (en) Scalable space-time density data fusion
CN115130021A (zh) 用于提供位置信息的装置、系统和方法
US10002170B2 (en) Managing a table of a database
TWI483138B (zh) 遠端動態資料的處理與驗證方法、系統,以及電腦可讀記錄媒體
US10915532B2 (en) Supporting a join operation against multiple NoSQL databases
US20200311565A1 (en) Analyzing geotemporal proximity of entities through a knowledge graph
US9742860B2 (en) Bi-temporal key value cache system
US10659911B1 (en) Deduplication of points of interest (POIs) from different sources
US10936625B2 (en) Progressive optimization for implicit cast predicates
US9736272B2 (en) Generation and distribution of named, definable, serialized tokens
US10176205B2 (en) Using parallel insert sub-ranges to insert into a column store
GB2558431A (en) Auto discovery of configuration items
US20140164415A1 (en) Systems and Methods for Matching Similar Geographic Objects
US10628465B2 (en) Generating a ranked list of best fitting place names
US20200082026A1 (en) Graph data processing
US11409724B2 (en) Hashed balanced tree data structure
US11475151B2 (en) Security policy management for database
US20210243149A1 (en) Dynamically modifying shared location information
US20210256065A1 (en) Automated database query filtering for spatial joins
WO2022111148A1 (en) Metadata indexing for information management

Legal Events

Date Code Title Description
B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 14/03/2014, OBSERVADAS AS CONDICOES LEGAIS

B21F Lapse acc. art. 78, item iv - on non-payment of the annual fees in time

Free format text: REFERENTE A 10A ANUIDADE.