- Categorias:
TO_GEOMETRY¶
Analisa uma entrada e retorna um valor do tipo GEOMETRY.
- Consulte também:
Sintaxe¶
Use uma das seguintes opções:
TO_GEOMETRY( <varchar_expression> [ , <srid> ] [ , <allow_invalid> ] )
TO_GEOMETRY( <binary_expression> [ , <srid> ] [ , <allow_invalid> ] )
TO_GEOMETRY( <variant_expression> [ , <srid> ] [ , <allow_invalid> ] )
TO_GEOMETRY( <geography_expression> [ , <srid> ] [ , <allow_invalid> ] )
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 - 0xna frente)
- EWKT (texto bem conhecido estendido) 
- EWKB (binário bem conhecido estendido) em formato hexadecimal (sem um - 0xna 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. 
- geography_expression
- O argumento deve ser uma expressão do tipo GEOGRAPHY. 
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.
Notas de uso¶
- Emite um erro se a entrada não puder ser analisada como um dos formatos suportados (WKT, WKB, EWKT, EWKB, GeoJSON). 
- Para as entradas GeoJSON, WKT e WKB, se o argumento - sridnão for especificado, o objeto GEOMETRY resultante terá SRID definido como 0.
- Para criar um objeto GEOMETRY a partir da entrada de WKT ou EWKT, você também pode usar ST_GEOMETRYFROMWKT. 
- Para criar um objeto GEOMETRY a partir da entrada de WKB ou EWKB, você também pode usar ST_GEOMETRYFROMWKB. 
Exemplos¶
O exemplo a seguir mostra como usar a função TO_GEOMETRY para converter um objeto representado em WKT em um objeto GEOMETRY. O exemplo não especifica o argumento srid e o SRID não é especificado na representação de entrada do objeto, portanto, o SRID é definido como 0.
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT TO_GEOMETRY('POINT(1820.12 890.56)');
+--------------------------------------+
| TO_GEOMETRY('POINT(1820.12 890.56)') |
|--------------------------------------|
| SRID=0;POINT(1820.12 890.56)         |
+--------------------------------------+
O exemplo a seguir converte um objeto representado em EWKT em um objeto GEOMETRY. A entrada EKWT especifica o SRID a ser usado:
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT TO_GEOMETRY('SRID=4326;POINT(1820.12 890.56)');
+------------------------------------------------+
| TO_GEOMETRY('SRID=4326;POINT(1820.12 890.56)') |
|------------------------------------------------|
| SRID=4326;POINT(1820.12 890.56)                |
+------------------------------------------------+
O exemplo a seguir demonstra como especificar o SRID como argumento de entrada srid:
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT TO_GEOMETRY('POINT(1820.12 890.56)', 4326);
+--------------------------------------------+
| TO_GEOMETRY('POINT(1820.12 890.56)', 4326) |
|--------------------------------------------|
| SRID=4326;POINT(1820.12 890.56)            |
+--------------------------------------------+
O exemplo a seguir retorna o objeto GEOMETRY para um objeto geoespacial com coordenada Z descrito no formato EWKT:
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT TO_GEOMETRY('SRID=32633;POINTZ(389866.35 5819003.03 30)');
+-----------------------------------------------------------+
| TO_GEOMETRY('SRID=32633;POINTZ(389866.35 5819003.03 30)') |
|-----------------------------------------------------------|
| SRID=32633;POINTZ(389866.35 5819003.03 30)                |
+-----------------------------------------------------------+
Para exemplos que convertem um objeto GEOGRAPHY em um objeto GEOMETRY, consulte Conversão entre GEOGRAPHY e GEOMETRY.
Os próximos exemplos utilizam a função TO_GEOMETRY em consultas sobre dados em uma tabela.
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;
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 converte os valores VARCHAR na coluna wkt_col em valores GEOMETRY usando o SRID padrão de 0:
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT id, TO_GEOMETRY(wkt_col) AS g
  FROM demo_to_geometry;
+----+------------------------------+
| ID | G                            |
|----+------------------------------|
|  1 | SRID=0;POINT(10 20)          |
|  2 | SRID=0;LINESTRING(0 0,10 10) |
+----+------------------------------+
O exemplo a seguir converte os valores VARCHAR na coluna wkt_col em valores GEOMETRY usando o valor SRID na coluna srid_col:
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT id, TO_GEOMETRY(wkt_col, srid_col) AS g
  FROM demo_to_geometry;
+----+----------------------------------+
| ID | G                                |
|----+----------------------------------|
|  1 | SRID=3857;POINT(10 20)           |
|  2 | SRID=3857;LINESTRING(0 0,10 10)  |
+----+----------------------------------+
O exemplo a seguir converte valores VARCHAR na coluna ewkt_col em valores GEOMETRY, com o valor SRID incorporado no valor da coluna ewkt_col:
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT id, TO_GEOMETRY(ewkt_col) AS g
  FROM demo_to_geometry;
+----+--------------------------------------------+
| ID | G                                          |
|----+--------------------------------------------|
|  1 | SRID=32633;POINT(500000 4649776.22)        |
|  2 | SRID=32633;POINT(389866.35 5819003.03)     |
+----+--------------------------------------------+
O exemplo a seguir converte valores BINARY na coluna wkb_bin_col em valores GEOMETRY:
ALTER SESSION SET BINARY_OUTPUT_FORMAT='HEX';
SELECT id, TO_GEOMETRY(wkb_bin_col) AS g
  FROM demo_to_geometry;
+----+----------------------------+
| ID | G                          |
|----+----------------------------|
|  1 | SRID=0;LINESTRING(0 0,1 1) |
|  2 | SRID=0;POINT(2 3)          |
+----+----------------------------+
O exemplo a seguir converte os valores VARIANT na coluna geojson_col em valores GEOMETRY usando o valor SRID na coluna srid_col:
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT id, TO_GEOMETRY(geojson_col, srid_col) AS g
  FROM demo_to_geometry;
+----+--------------------------------+
| ID | G                              |
|----+--------------------------------|
|  1 | SRID=3857;POINT(10 20)         |
|  2 | SRID=3857;LINESTRING(0 0,1 1)  |
+----+--------------------------------+
O exemplo a seguir converte os valores GEOGRAPHY na coluna geog_col em valores GEOMETRY usando o valor SRID na coluna srid_col:
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT id, TO_GEOMETRY(geog_col, srid_col) AS g
  FROM demo_to_geometry;
+----+-----------------------------------------------+
| ID | G                                             |
|----+-----------------------------------------------|
|  1 | SRID=4326;POINT(-122.35 37.55)                |
|  2 | SRID=4326;LINESTRING(-124.2 42,-120.01 41.99) |
+----+-----------------------------------------------+
O exemplo a seguir converte valores VARCHAR na coluna invalid_wkt_col em valores GEOMETRY usando o valor SRID na coluna srid0 (0) e o valor allow_invalid na coluna allow_true:
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT id, TO_GEOMETRY(invalid_wkt_col, srid0, allow_true) AS g
  FROM demo_to_geometry;
A saída inclui formas que não são válidas:
+----+---------------------------------------+
| ID | G                                     |
|----+---------------------------------------|
|  1 | SRID=0;POLYGON((0 0,2 2,2 0,0 2,0 0)) |
|  2 | SRID=0;POLYGON((0 0,1 1,1 0,0 1,0 0)) |
+----+---------------------------------------+