Todos os produtos
Search
Central de documentação

Tair (Redis® OSS-Compatible):GIS

Última atualização: Jun 26, 2026

O TairGIS é uma estrutura de dados GIS baseada em índices R-tree que permite armazenar e consultar pontos, linestrings e polígonos no formato WKT (well-known text). Diferentemente dos comandos GEO nativos do Redis — que utilizam GeoHash e Sorted Set apenas para consultas de pontos — o TairGIS suporta consultas de relacionamento espacial (contains, within, intersects) e busca por proximidade baseada em raio para os três tipos de geometria.

Este módulo é open source. Para mais informações, consulte TairGIS.

Conceitos principais

Consultas de relacionamento espacial: contains, within e intersects

Esses três comandos consultam diferentes relações direcionais entre uma geometria fornecida por você e as formas armazenadas em uma área. A distinção é importante porque GIS.CONTAINS e GIS.WITHIN parecem semelhantes, mas operam em direções opostas:

  • GIS.CONTAINS — localiza formas armazenadas que contêm sua entrada. Utilize este comando quando você tiver um ponto (como a localização GPS de um usuário) e precisar saber quais regiões armazenadas o englobam. Exemplo: "Em quais zonas de entrega este endereço está localizado?"

  • GIS.WITHIN — localiza formas armazenadas que estão dentro da sua entrada. Recomendado quando você possui uma forma delimitadora grande e deseja identificar quais formas armazenadas cabem inteiramente nela. Exemplo: "Quais estacionamentos estão totalmente dentro deste distrito?"

  • GIS.INTERSECTS — localiza formas armazenadas que compartilham quaisquer coordenadas com sua entrada. Ideal para casos em que a sobreposição parcial é suficiente. Exemplo: "Quais estradas cruzam esta zona de construção?"

Tipos de geometria WKT

O TairGIS utiliza o formato WKT (well-known text) para descrever geometrias. Todos os três tipos seguem o formato TYPE (coordinates):

Tipo

Exemplo WKT

Restrição

POINT

'POINT (120.086631 30.138141)'

Longitude primeiro, depois latitude

LINESTRING

'LINESTRING (30 10, 40 40)'

Pelo menos dois pares de coordenadas

POLYGON

'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'

Três ou mais pares de coordenadas; o primeiro e o último devem ser iguais

Intervalo válido de longitude: -180 a 180. Intervalo válido de latitude: -90 a 90.

Os tipos MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRY e COLLECTION não são suportados.

O parâmetro area

Todo comando do TairGIS recebe um argumento area como primeiro parâmetro. Uma área é um contêiner lógico — uma chave do Redis — que agrupa geometrias relacionadas. Todas as formas adicionadas à mesma área podem ser consultadas em conjunto.

Pré-requisitos

Antes de começar, certifique-se de ter:

Atualize sua instância para a versão secundária mais recente para obter mais recursos e maior estabilidade. Para mais informações, consulte Atualizar a versão secundária de uma instância . Para instâncias cluster ou leitura/gravação dividida , atualize também os nós de proxy para a versão secundária mais recente, garantindo que todos os comandos sejam executados conforme o esperado.

Notas de uso

Os dados do TairGIS são armazenados na instância Tair.

Comandos suportados

Comando

Sintaxe

Descrição

GIS.ADD

GIS.ADD area polygonName polygonWkt [polygonName polygonWkt ...]

Adiciona uma ou mais geometrias descritas em WKT a uma área

GIS.GET

GIS.GET area polygonName

Recupera o WKT de uma geometria nomeada

GIS.GETALL

GIS.GETALL area [WITHOUTWKT]

Recupera todos os nomes de geometrias (e opcionalmente seus WKT) em uma área

GIS.CONTAINS

GIS.CONTAINS area polygonWkt [WITHOUTWKT]

Retorna geometrias armazenadas que contêm a geometria de entrada

GIS.WITHIN

GIS.WITHIN area polygonWkt [WITHOUTWKT]

Retorna geometrias armazenadas que estão dentro da geometria de entrada

GIS.INTERSECTS

GIS.INTERSECTS area polygonWkt

Retorna geometrias armazenadas que interceptam a geometria de entrada

GIS.SEARCH

`GIS.SEARCH area [RADIUS lon lat dist M

KM

FT

MI] [MEMBER field dist M

KM

FT

MI] [GEOM geom] [COUNT count] [ASC

DESC] [WITHDIST] [WITHOUTWKT]`

Consulta pontos dentro de um raio ou limite de polígono

GIS.DEL

GIS.DEL area polygonName

Exclui uma geometria nomeada de uma área

DEL

DEL key [key ...]

Exclui uma ou mais chaves do TairGIS (comando nativo do Redis)

Convenções de sintaxe de comandos:

  • MAIÚSCULAS: palavra-chave do comando

  • *Itálico*: variável

  • [opções]: parâmetro opcional; parâmetros sem colchetes são obrigatórios

  • A|B: mutuamente exclusivos — especifique apenas um

  • ...: o parâmetro anterior pode se repetir

GIS.ADD

Adiciona uma ou mais geometrias descritas em WKT a uma área.

Time complexity

Item

Detalhes

Sintaxe

GIS.ADD area polygonName polygonWkt [polygonName polygonWkt ...]

O(log n)

Parâmetros

Parâmetro

Descrição

area

A área (chave) que agrupa geometrias relacionadas

polygonName

O nome da geometria

polygonWkt

A geometria no formato WKT. Tipos suportados: POINT, LINESTRING, POLYGON

WKT (well-known text) é uma linguagem de marcação de texto padrão para representar objetos de geometria vetorial, sistemas de referência espacial e transformações entre sistemas de referência espacial.

Valor de retorno

  • Sucesso: a quantidade de geometrias adicionadas ou atualizadas

  • Falha: uma mensagem de erro

Exemplo

GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'

Saída:

(integer) 1

GIS.GET

Recupera o WKT de uma geometria nomeada dentro de uma área.

Item

Detalhes

Sintaxe

GIS.GET area polygonName

Complexidade de tempo

O(1)

Parâmetros

Parâmetro

Descrição

area

A área (chave) que agrupa geometrias relacionadas

polygonName

O nome da geometria a ser recuperada

Valor de retorno

  • Sucesso: a representação WKT da geometria

  • Não encontrado (a área ou geometria não existe): nil

  • Falha: uma mensagem de erro

Exemplo

Pré-requisito: execute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

GIS.GET hangzhou campus

Saída:

'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'

GIS.GETALL

Recupera todos os nomes de geometrias em uma área, com seus respectivos WKT por padrão.

Item

Detalhes

Sintaxe

GIS.GETALL area [WITHOUTWKT]

Complexidade de tempo

O(n)

Parâmetros

Parâmetro

Descrição

area

A área (chave) que agrupa geometrias relacionadas

WITHOUTWKT

(Opcional) Se especificado, retorna apenas os nomes das geometrias, sem seus WKT

Valor de retorno

  • Sucesso: nomes das geometrias e WKT (ou apenas nomes se WITHOUTWKT for especificado)

  • Não encontrado (a área não existe): nil

  • Falha: uma mensagem de erro

Exemplo

Pré-requisito: execute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

GIS.GETALL hangzhou

Saída:

1) "campus"
2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"

GIS.CONTAINS

Retorna as geometrias armazenadas em uma área que contêm a geometria de entrada.

Utilize GIS.CONTAINS quando você tiver uma geometria (como um ponto de coordenada) e quiser saber quais regiões armazenadas a englobam.

Item

Detalhes

Sintaxe

GIS.CONTAINS area polygonWkt [WITHOUTWKT]

Complexidade de tempo

Ótimo: O(log² n); pior caso: O(log n)

Parâmetros

Parâmetro

Descrição

area

A área (chave) que agrupa geometrias relacionadas

polygonWkt

A geometria de entrada no formato WKT. Tipos suportados: POINT, LINESTRING, POLYGON

WITHOUTWKT

(Opcional) Se especificado, retorna apenas os nomes das geometrias, sem seus WKT

Valor de retorno

  • Sucesso: a quantidade e o WKT das geometrias que contêm a entrada

  • Não encontrado (a área não existe): empty list or set

  • Falha: uma mensagem de erro

Exemplo

Pré-requisito: execute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

O exemplo abaixo verifica quais polígonos armazenados contêm o ponto em (30, 11):

GIS.CONTAINS hangzhou 'POINT (30 11)'

Saída:

1) "1"
2) 1) "campus"
   2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"

GIS.WITHIN

Retorna as geometrias armazenadas em uma área que estão inteiramente dentro da geometria de entrada.

Use GIS.WITHIN quando você tiver um limite (como um polígono de distrito) e precisar saber quais formas armazenadas estão completamente dentro dele.

Item

Detalhes

Sintaxe

GIS.WITHIN area polygonWkt [WITHOUTWKT]

Complexidade de tempo

Ótimo: O(log² n); pior caso: O(log n)

Parâmetros

Parâmetro

Descrição

area

A área (chave) que agrupa geometrias relacionadas

polygonWkt

A geometria de entrada no formato WKT. Tipos suportados: POINT, LINESTRING, POLYGON

WITHOUTWKT

(Opcional) Se especificado, retorna apenas os nomes das geometrias, sem seus WKT

Os tipos MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRY e COLLECTION não são suportados.

Valor de retorno

  • Sucesso: a quantidade e o WKT das geometrias dentro da entrada

  • Não encontrado (a área não existe): empty list or set

  • Falha: uma mensagem de erro

Exemplo

Pré-requisito: execute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

O exemplo a seguir verifica quais polígonos armazenados estão dentro do polígono delimitador maior:

GIS.WITHIN hangzhou 'POLYGON ((30 5, 50 50, 20 50, 5 20, 30 5))'

Saída:

1) "1"
2) 1) "campus"
   2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"

GIS.INTERSECTS

Retorna as geometrias armazenadas em uma área que compartilham quaisquer coordenadas com a geometria de entrada.

Este comando é adequado quando a sobreposição parcial é suficiente — por exemplo, para encontrar todas as estradas que cruzam uma zona de construção.

Item

Detalhes

Sintaxe

GIS.INTERSECTS area polygonWkt

Complexidade de tempo

Ótimo: O(log² n); pior caso: O(log n)

Parâmetros

Parâmetro

Descrição

area

A área (chave) que agrupa geometrias relacionadas

polygonWkt

A geometria de entrada no formato WKT. Tipos suportados: POINT, LINESTRING, POLYGON

WITHOUTWKT

(Opcional) Se especificado, retorna apenas os nomes das geometrias, sem seus WKT

Valor de retorno

  • Sucesso: a quantidade e o WKT das geometrias que interceptam a entrada

  • Não encontrado (a área não existe): empty list or set

  • Falha: uma mensagem de erro

Exemplo

Pré-requisito: execute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

O exemplo abaixo verifica quais polígonos armazenados interceptam a linestring de (30, 10) a (40, 40):

GIS.INTERSECTS hangzhou 'LINESTRING (30 10, 40 40)'

Saída:

1) "1"
2) 1) "campus"
   2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"

GIS.SEARCH

Consulta geometrias de ponto em uma área que estão dentro de um determinado raio ou limite de polígono. Este comando é o equivalente no TairGIS ao comando nativo do Redis GEORADIUS.

Especifique exatamente um entre RADIUS, MEMBER ou GEOM para definir o limite de busca.

Item

Detalhes

Sintaxe

`GIS.SEARCH area [RADIUS lon lat dist M

KM

FT

MI] [MEMBER field dist M

KM

FT

MI] [GEOM geom] [COUNT count] [ASC

DESC] [WITHDIST] [WITHOUTWKT]`

Complexidade de tempo

Ótimo: O(log² n); pior caso: O(log n)

Opções de limite de busca (especifique exatamente uma)

Opção

Descrição

Exemplo

RADIUS lon lat dist unit

Busca dentro de dist da longitude e latitude fornecidas. Unidades: M (metro), KM (quilômetro), FT (pés), MI (milha)

RADIUS 15 37 200 KM

MEMBER field dist unit

Usa um ponto armazenado como centro e busca dentro de dist dele

MEMBER Agrigento 100 KM

GEOM geom

Busca dentro do polígono definido por uma string WKT

GEOM 'POLYGON((10 30,20 30,20 40,10 40))'

Opções adicionais

Opção

Descrição

COUNT count

Limita o número de resultados retornados. Exemplo: COUNT 3

ASC

Retorna resultados ordenados por distância, do mais próximo ao mais distante

DESC

Retorna resultados ordenados por distância, do mais distante ao mais próximo

WITHDIST

Retorna a distância entre cada ponto resultante e o ponto central especificado

WITHOUTWKT

Retorna apenas os nomes das geometrias, sem seus WKT

Valor de retorno

  • Sucesso: a quantidade e o WKT dos pontos correspondentes

  • Não encontrado (a área não existe): empty list or set

  • Falha: uma mensagem de erro

Exemplo

Pré-requisito: execute GIS.ADD Sicily "Palermo" "POINT (13.361389 38.115556)" "Catania" "POINT(15.087269 37.502669)".

O exemplo a seguir encontra todos os pontos na área Sicily dentro de 200 km de (15, 37), ordenados por distância:

GIS.SEARCH Sicily RADIUS 15 37 200 km WITHDIST ASC

Saída:

1) (integer) 2
2) 1) "Catania"
   2) "POINT(15.087269 37.502669)"
   3) "56.4413"
   4) "Palermo"
   5) "POINT(13.361389 38.115556)"
   6) "190.4424"

GIS.DEL

Exclui uma geometria nomeada de uma área.

Item

Detalhes

Sintaxe

GIS.DEL area polygonName

Complexidade de tempo

O(log n)

Parâmetros

Parâmetro

Descrição

area

A área (chave) que agrupa geometrias relacionadas

polygonName

O nome da geometria a ser excluída

Valor de retorno

  • Sucesso: OK

  • Não encontrado (a área ou geometria não existe): nil

  • Falha: uma mensagem de erro

Exemplo

Pré-requisito: execute GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'.

GIS.DEL hangzhou campus

Saída:

OK

Próximos passos