Todos os produtos
Search
Central de documentação

AnalyticDB:Funções de relação espacial

Última atualização: Jun 27, 2026

Use funções espaciais para verificar relações topológicas entre dois objetos geométricos. Cada função retorna 1 se a relação especificada for verdadeira e 0 caso contrário.

As seguintes funções de relação espacial estão disponíveis:

Função

Relação verificada

ST_Contains

Todos os pontos de g2 estão dentro de g1, e seus interiores compartilham pelo menos um ponto

ST_Crosses

g1 e g2 compartilham alguns pontos interiores, mas não todos

ST_Disjoint

g1 e g2 não compartilham nenhum ponto

ST_Equals

g1 e g2 ocupam exatamente o mesmo conjunto de pontos

ST_Intersects

g1 e g2 compartilham pelo menos um ponto

ST_Overlaps

g1 e g2 têm a mesma dimensão e se sobrepõem, mas nenhum contém o outro totalmente

ST_Relate

A relação espacial entre g1 e g2 corresponde a um padrão definido por uma string de matriz do Modelo de Interseção 9 Estendido Dimensionalmente (DE-9IM)

ST_Touches

g1 e g2 compartilham pelo menos um ponto de fronteira, mas nenhum ponto interior

ST_Within

Todos os pontos de g1 estão dentro de g2, e seus interiores compartilham pelo menos um ponto (o inverso de ST_Contains)

ST_Contains

ST_Contains(g1, g2)

Retorna 1 se g1 contiver completamente g2, ou seja, se todos os pontos de g2 estiverem dentro de g1 e os interiores de g1 e g2 compartilharem pelo menos um ponto. Retorna 0 caso contrário.

A fronteira de g1 não faz parte de seu interior. Um ponto situado exatamente na fronteira de g1 não é considerado contido em g1.

Tipo de retorno: INT

Relação com ST_Within: ST_Contains(A, B) é o inverso de ST_Within(B, A). Ambas retornam o mesmo resultado.

Exemplo:

SELECT ST_Contains(
    ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'),
    ST_GeometryFromText('POINT (2 2)')
);

Resultado:

+-----------------------------------------------------------------------------------------------------+
|ST_Contains(ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'), ST_GeometryFromText('POINT (2 2)')) |
+-----------------------------------------------------------------------------------------------------+
|                           1                                                                         |
+-----------------------------------------------------------------------------------------------------+

ST_Crosses

ST_Crosses(g1, g2)

Retorna 1 se g1 e g2 se cruzarem espacialmente, isto é, se compartilharem alguns pontos interiores, mas não todos. Retorna 0 caso contrário.

Tipo de retorno: INT

Exemplo:

SELECT ST_Crosses(
    ST_GeometryFromText('POINT (20 20)'),
    ST_GeometryFromText('POINT (25 25)')
);

Resultado:

+----------------------------------------------------------------------------------------------+
|ST_Crosses(ST_GeometryFromText('POINT (20 20)'), ST_GeometryFromText('POINT (25 25)'))        |
+----------------------------------------------------------------------------------------------+
|                 0                                                                            |
+----------------------------------------------------------------------------------------------+

ST_Disjoint

ST_Disjoint(g1, g2)

Retorna 1 se g1 e g2 forem espacialmente disjuntos, ou seja, se não compartilharem nenhum ponto. Retorna 0 caso contrário.

Tipo de retorno: INT

Exemplo:

SELECT ST_Disjoint(
    ST_GeometryFromText('POINT (50 100)'),
    ST_GeometryFromText('POINT (150 150)')
);

Resultado:

+--------------------------------------------------------------------------------------------------+
|ST_Disjoint(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)'))        |
+--------------------------------------------------------------------------------------------------+
|                        1                                                                         |
+--------------------------------------------------------------------------------------------------+

ST_Equals

ST_Equals(g1, g2)

Retorna 1 se g1 e g2 forem espacialmente iguais, ou seja, se ocuparem exatamente o mesmo conjunto de pontos. Retorna 0 caso contrário.

Tipo de retorno: INT

Exemplo:

SELECT ST_Equals(
    ST_GeometryFromText('POINT (50 100)'),
    ST_GeometryFromText('POINT (150 150)')
);

Resultado:

+------------------------------------------------------------------------------------------------+
|ST_Equals(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)'))        |
+------------------------------------------------------------------------------------------------+
|                  0                                                                             |
+------------------------------------------------------------------------------------------------+

ST_Intersects

ST_Intersects(g1, g2)

Retorna 1 se g1 e g2 se interceptarem espacialmente, ou seja, se compartilharem pelo menos um ponto. Retorna 0 caso contrário.

Tipo de retorno: INT

Exemplo:

SELECT ST_Intersects(
    ST_GeometryFromText('POINT (50 100)'),
    ST_GeometryFromText('POINT (150 150)')
);

Resultado:

+----------------------------------------------------------------------------------------------------+
|ST_Intersects(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)'))        |
+----------------------------------------------------------------------------------------------------+
|                 0                                                                                  |
+----------------------------------------------------------------------------------------------------+

ST_Overlaps

ST_Overlaps(g1, g2)

Retorna 1 se g1 e g2 se sobrepuserem espacialmente, ou seja, se tiverem a mesma dimensão e compartilharem alguns pontos, sem que nenhum contenha o outro completamente. Retorna 0 caso contrário.

Tipo de retorno: INT

Exemplo:

SELECT ST_Overlaps(
    ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'),
    ST_GeometryFromText('POLYGON ((3 3, 3 5, 5 5, 5 3))')
);

Resultado:

+---------------------------------------------------------------------------------------------------------------------------------+
|ST_Overlaps(ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'), ST_GeometryFromText('POLYGON ((3 3, 3 5, 5 5, 5 3))'))        |
+---------------------------------------------------------------------------------------------------------------------------------+
|                 1                                                                                                               |
+---------------------------------------------------------------------------------------------------------------------------------+

ST_Relate

ST_Relate(g1, g2, s1)

Retorna 1 se a relação espacial entre g1 e g2 corresponder ao padrão especificado pela string de matriz DE-9IM s1. Retorna 0 caso contrário.

O Modelo de Interseção 9 Estendido Dimensionalmente (DE-9IM) descreve a relação entre duas geometrias como uma string de 9 caracteres usando os símbolos F, 0, 1, 2, T e *. Use ST_Relate quando nenhuma função nomeada (como ST_Contains ou ST_Touches) cobrir a relação exata a ser testada.

Parâmetros:

Parâmetro

Tipo

Descrição

g1

geometry

A primeira geometria

g2

geometry

A segunda geometria

s1

VARCHAR

Uma string de padrão de matriz DE-9IM (por exemplo, 'T*****FF*')

Tipo de retorno: INT

Exemplo:

SELECT ST_Relate(
    ST_GeometryFromText('LINESTRING (0 0, 3 3)'),
    ST_GeometryFromText('LINESTRING (1 1, 4 1)'),
    '****T****'
);

Resultado:

+--------------------------------------------------------------------------------------------------------------------------+
|ST_Relate(ST_GeometryFromText('LINESTRING (0 0, 3 3)'), ST_GeometryFromText('LINESTRING (1 1, 4 1)'), '****T****')        |
+--------------------------------------------------------------------------------------------------------------------------+
|                 0                                                                                                        |
+--------------------------------------------------------------------------------------------------------------------------+

ST_Touches

ST_Touches(g1, g2)

Retorna 1 se g1 e g2 se tocarem espacialmente, ou seja, se compartilharem pelo menos um ponto de fronteira, mas nenhum ponto interior. Retorna 0 caso contrário.

Tipo de retorno: INT

Exemplo:

SELECT ST_Touches(
    ST_GeometryFromText('POINT (50 100)'),
    ST_GeometryFromText('POINT (150 150)')
);

Resultado:

+-------------------------------------------------------------------------------------------------+
|ST_Touches(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)'))        |
+-------------------------------------------------------------------------------------------------+
|                     0                                                                           |
+-------------------------------------------------------------------------------------------------+

ST_Within

ST_Within(g1, g2)

Retorna 1 se g1 estiver inteiramente dentro de g2, ou seja, se todos os pontos de g1 estiverem dentro de g2 e os interiores de ambos compartilharem pelo menos um ponto. Retorna 0 caso contrário.

Tipo de retorno: BOOLEAN

Relação com ST_Contains: ST_Within(A, B) é o inverso de ST_Contains(B, A). Ambas retornam o mesmo resultado.

Exemplo:

SELECT ST_Within(
    ST_GeometryFromText('POINT (50 100)'),
    ST_GeometryFromText('POINT (150 150)')
);

Resultado:

+-------------------------------------------------------------------------------------------------+
|ST_Within(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)'))         |
+-------------------------------------------------------------------------------------------------+
|                 0                                                                               |
+-------------------------------------------------------------------------------------------------+