Referência e Manual do Usuário

Aninhamento

As funções geométricas de aninhamento, em conjunto, podem apresentar problemas quando a função aninhada interna retornar um tipo de figura geométrica não aceito pela função de chamada externa. Esse problema poderá ser solucionado se o tipo de figura geométrica da função aninhada externa puder ser convertido em um tipo aceitável pela função de chamada externa.

Conversão de ST_Geometry em um subtipo

O tipo de figura geométrica das funções que retornam o supertipo ST_Geometry pode ser convertido num subtipo que use a função Tratar (TREAT). Por exemplo, a função ST_Union retorna valores de ST_Geometry. Quando ST_Union é aninhada na função ST_PointOnSurface, ST_PointOnSurface retorna o seguinte erro:

SQL00440N Nenhuma função com o nome "ST_POINTONSURFACE"
que tenha argumentos compatíveis foi encontrada no caminho
da função.    SQLSTATE=42884

A função ST_PointOnSurface considera o tipo de figura geométrica ST_Polygon ou ST_MultiPolygon, mas não o ST_Geometry retornado por ST_Union, embora o valor retornado pela função ST_Union seja ST_MultiPolygon. Portanto, nesse caso, é necessário converter o tipo de figura geométrica da função ST_Union em ST_MultiPolygon.

Por exemplo, se a tabela COUNTIES fosse auto-anexada pela união de sua coluna de polígono COUNTY, a função Treat deveria ser aplicada ao resultado da função ST_Union para converter o tipo ST_Geometry em ST_MultiPolygon, antes que a função ST_PointOnSurface pudesse ser aplicada.

SELECT ST_Astext(ST_PointOnSurface(
          TREAT ( ST_Union(c1.county, c2.county) AS ST_MultiPolygon))) 
FROM   counties AS c1, counties AS c2;

Se a função ST_Union retornar um valor de ST_MultiPolygon, a função Treat a converterá num tipo de dado ST_MultiPolygon. Se a função ST_Union não retornar um valor ST_MultiPolygon, a função Tratar retornará um erro de tempo de execução.

Para obter mais informações sobre o tratamento de um subtipo, consulte a Referência de SQL.

Conversão de uma coleção em uma figura geométrica básica

Utilize a função ST_GeometryN para converter um elemento de uma coleção de figuras geométricas em uma figura geométrica básica requerida pela função de chamada externa.

Por exemplo, o valor retornado pela função ST_Union é sempre uma coleção de figuras geométricas retornada como uma ST_Geometry. Utilize a função Treat para converter o tipo ST_Geometry em um subtipo, que pode ser um dos seguintes: ST_MultiPoint, ST_MultiLineString, ST_MultiPolygon, ST_GeomCollection, ST_MultiCurve ou ST_MultiSurface. Aplique a função ST_GeometryN à saída da função Treat que está convertendo a coleção de figuras geométricas em uma figura geométrica básica.

Por exemplo, para utilizar a função ST_ExteriorRing nos resultados da função ST_Union do exemplo da seção anterior, utilize primeiro a função ST_GeometryN para extrair um elemento de polígono.

SELECT ST_AsText(ST_ExteriorRing(ST_GeometryN(
          TREAT ( ST_Union(c1.county, c2.county) AS ST_MultiPolygon ), 1)))
FROM   counties AS c1, counties AS c2;

O cálculo é necessário somente ao se passar, na hierarquia, de um supertipo para um subtipo. Para obter mais informações sobre o tratamento de subtipos, consulte a Referência de SQL.


[ Início da Página | Página Anterior | Próxima Página | Índice | Índice Remissivo ]