Categorias:

Funções geospaciais, Funções de conversão

TRY_TO_GEOMETRY

Analisa uma entrada e retorna um valor do tipo GEOMETRY.

Esta função é idêntica a TO_GEOMETRY exceto que ela retorna NULL, enquanto TO_GEOMETRY retornaria um erro.

Consulte também:

TO_GEOMETRY

Sintaxe

Use uma das seguintes opções:

TRY_TO_GEOMETRY( <varchar_expression> [ , <srid> ] [ , <allow_invalid> ] )

TRY_TO_GEOMETRY( <binary_expression> [ , <srid> ] [ , <allow_invalid> ] )

TRY_TO_GEOMETRY( <variant_expression> [ , <srid> ] [ , <allow_invalid> ] )
Copy

Argumentos

Obrigatório:

varchar_expression

O argumento deve ser uma expressão de cadeia de caracteres que represente um objeto geométrico válido em um dos seguintes formatos:

  • WKT (texto bem conhecido).

  • WKB (binário bem conhecido) em formato hexadecimal (sem um 0x na frente).

  • EWKT (texto bem conhecido estendido).

  • EWKB (binário bem conhecido estendido) em formato hexadecimal (sem um 0x na frente).

  • GeoJSON.

binary_expression

O argumento deve ser uma expressão binária no formato WKB ou EWKB.

variant_expression

O argumento deve ser um formato OBJECT no formato GeoJSON.

Opcional:

srid

O valor inteiro do SRID a ser usado.

allow_invalid

Se for TRUE, especifica que a função retorna um objeto GEOGRAPHY ou GEOMETRY, mesmo quando a forma de entrada não é válida e não pode ser reparada. Para obter mais informações, consulte Especificação de como as formas geoespaciais inválidas são tratadas.

Retornos

A função retorna um valor do tipo GEOMETRY ou NULL quando TO_GEOMETRY retornaria um erro.

Notas de uso

  • Retorna NULL se a entrada não puder ser analisada como o formato compatível apropriado (WKT, WKB, EWKT, EWKB, GeoJSON).

  • Para as entradas GeoJSON, WKT e WKB, se o argumento srid não for especificado, o objeto GEOMETRY resultante terá SRID definido como 0.

Exemplos

Isso mostra uma simples utilização da função TRY_TO_GEOMETRY com dados VARCHAR:

SELECT TRY_TO_GEOMETRY('INVALID INPUT');
Copy
+----------------------------------+
| TRY_TO_GEOMETRY('INVALID INPUT') |
|----------------------------------|
| NULL                             |
+----------------------------------+
Copy

Crie uma tabela temporária e insira linhas com valores de GEOMETRY:

CREATE OR REPLACE TEMP TABLE demo_to_geometry AS
SELECT
  1                                                     AS id,
  'POINT(10 20)'                                        AS wkt_col,         -- VARCHAR (WKT)
  'SRID=32633;POINT(500000.0 4649776.22)'               AS ewkt_col,        -- VARCHAR (EWKT)
  ST_ASWKB(TO_GEOMETRY('LINESTRING(0 0, 1 1)'))         AS wkb_bin_col,     -- BINARY (WKB)
  PARSE_JSON('{"type":"Point","coordinates":[10,20]}')  AS geojson_col,     -- VARIANT (GeoJSON)
  TO_GEOGRAPHY('POINT(-122.35 37.55)')                  AS geog_col,        -- GEOGRAPHY
  'POLYGON((0 0,2 2,2 0,0 2,0 0))'                      AS invalid_wkt_col, -- invalid shape
  0                                                     AS srid0,           -- SRID columns to show positional args
  3857                                                  AS srid_col,
  TRUE                                                  AS allow_true,      -- allow_invalid flags from columns
  FALSE                                                 AS allow_false
UNION ALL
SELECT
  2,
  'LINESTRING(0 0, 10 10)',
  'SRID=32633;POINT(389866.35 5819003.03)',
  ST_ASWKB(TO_GEOMETRY('POINT(2 3)')),
  PARSE_JSON('{"type":"LineString","coordinates":[[0,0],[1,1]]}'),
  TO_GEOGRAPHY('LINESTRING(-124.2 42,-120.01 41.99)'),
  'POLYGON((0 0,1 1,1 0,0 1,0 0))',
  0,
  3857,
  TRUE,
  FALSE;
Copy

Esta tabela tem colunas com tipos de dados que a função TO_GEOMETRY aceita como entradas nos seguintes formatos:

  • VARCHAR (WKT/WKB e hexadecimal/EWKT/EWKB/GeoJSON)

  • BINARY (WKB/EWKB)

  • VARIANT (objeto GeoJSON)

  • GEOGRAPHY

Os valores opcionais srid e allow_invalid podem seguir qualquer um desses formatos. A função ST_ASWKB , ST_ASBINARY gera valores WKB BINARY válidos.

O exemplo a seguir tenta converter valores VARCHAR na coluna invalid_wkt_col em valores GEOMETRY, mas as formas não são válidas:

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';

SELECT id, TRY_TO_GEOMETRY(invalid_wkt_col) AS g_or_null
  FROM demo_to_geometry;
Copy
+----+-----------+
| ID | G_OR_NULL |
|----+-----------|
|  1 | NULL      |
|  2 | NULL      |
+----+-----------+