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 |
|
Todos os pontos de g2 estão dentro de g1, e seus interiores compartilham pelo menos um ponto |
|
|
g1 e g2 compartilham alguns pontos interiores, mas não todos |
|
|
g1 e g2 não compartilham nenhum ponto |
|
|
g1 e g2 ocupam exatamente o mesmo conjunto de pontos |
|
|
g1 e g2 compartilham pelo menos um ponto |
|
|
g1 e g2 têm a mesma dimensão e se sobrepõem, mas nenhum contém o outro totalmente |
|
|
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) |
|
|
g1 e g2 compartilham pelo menos um ponto de fronteira, mas nenhum ponto interior |
|
|
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 |
|
|
geometry |
A primeira geometria |
|
|
geometry |
A segunda geometria |
|
|
VARCHAR |
Uma string de padrão de matriz DE-9IM (por exemplo, |
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 |
+-------------------------------------------------------------------------------------------------+