- 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
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.
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
srid
nã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)) |
+----+---------------------------------------+