Catégories :

Fonctions géospatiales, Fonctions de conversion

TO_GEOMETRY

Analyse une entrée et renvoie une valeur de type GEOMETRY.

Voir aussi :

TRY_TO_GEOMETRY , ST_GEOMETRYFROMWKB , ST_GEOMETRYFROMWKT

Syntaxe

Utilisez l’une des méthodes suivantes :

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> ] )
Copy

Arguments

Obligatoire :

varchar_expression

L’argument doit être une expression de chaîne qui représente un objet géométrique valide dans l’un des formats suivants :

  • WKT (texte bien connu)

  • WKB (binaire bien connu) au format hexadécimal (sans un 0x de début)

  • EWKT (texte bien connu étendu)

  • EWKB (binaire bien connu étendu) au format hexadécimal (sans un 0x de début)

  • GeoJSON

binary_expression

L’argument doit être une expression binaire au format WKB ou EWKB.

variant_expression

L’argument doit être un OBJECT au format GeoJSON.

geography_expression

L’argument doit être une expression de type GEOGRAPHY.

Facultatif :

srid

La valeur entière du SRID à utiliser.

allow_invalid

Si TRUE, spécifie que la fonction renvoie un objet GEOGRAPHY ou GEOMETRY, même lorsque la forme d’entrée n’est pas valide et ne peut pas être réparée. Pour plus d’informations, voir Spécification du mode de traitement des formes géospatiales non valides.

Renvoie

La fonction renvoie une valeur de type GEOMETRY.

Notes sur l’utilisation

  • Émet une erreur si l’entrée ne peut pas être analysée comme l’un des formats pris en charge (WKT, WKB, EWKT, EWKB, GeoJSON).

  • Pour les entrées GeoJSON, WKT et WKB, si l’argument srid n’est pas spécifié, l’objet GEOMETRY résultant a pour SRID 0.

  • Pour construire un objet GEOMETRY à partir d’une entrée WKT ou EWKT, vous pouvez également utiliser ST_GEOMETRYFROMWKT.

  • Pour construire un objet GEOMETRY à partir d’une entrée WKB ou EWKB, vous pouvez également utiliser ST_GEOMETRYFROMWKB.

Exemples

L’exemple suivant montre comment utiliser la fonction TO_GEOMETRY pour convertir un objet représenté par WKT en un objet GEOMETRY. L’exemple ne spécifie pas l’argument srid, et le SRID n’est pas spécifié dans la représentation d’entrée de l’objet, de sorte que le SRID est fixé à 0.

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';

SELECT TO_GEOMETRY('POINT(1820.12 890.56)');
Copy
+--------------------------------------+
| TO_GEOMETRY('POINT(1820.12 890.56)') |
|--------------------------------------|
| SRID=0;POINT(1820.12 890.56)         |
+--------------------------------------+

L’exemple suivant convertit un objet représenté par EWKT en un objet GEOMETRY. L’entrée EKWT spécifie le SRID à utiliser :

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';

SELECT TO_GEOMETRY('SRID=4326;POINT(1820.12 890.56)');
Copy
+------------------------------------------------+
| TO_GEOMETRY('SRID=4326;POINT(1820.12 890.56)') |
|------------------------------------------------|
| SRID=4326;POINT(1820.12 890.56)                |
+------------------------------------------------+

L’exemple suivant montre comment spécifier le SRID en tant qu’argument d’entrée srid :

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';

SELECT TO_GEOMETRY('POINT(1820.12 890.56)', 4326);
Copy
+--------------------------------------------+
| TO_GEOMETRY('POINT(1820.12 890.56)', 4326) |
|--------------------------------------------|
| SRID=4326;POINT(1820.12 890.56)            |
+--------------------------------------------+

L’exemple suivant renvoie l’objet GEOMETRY pour un objet géospatial avec une coordonnée Z décrit au format EWKT :

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';

SELECT TO_GEOMETRY('SRID=32633;POINTZ(389866.35 5819003.03 30)');
Copy
+-----------------------------------------------------------+
| TO_GEOMETRY('SRID=32633;POINTZ(389866.35 5819003.03 30)') |
|-----------------------------------------------------------|
| SRID=32633;POINTZ(389866.35 5819003.03 30)                |
+-----------------------------------------------------------+

Pour des exemples de conversion d’un objet GEOGRAPHY en un objet GEOMETRY, voir Conversion entre GEOGRAPHY et GEOMETRY.

Les exemples suivants utilisent la fonction TO_GEOMETRY dans les requêtes sur les données d’une table.

Créer une table temporaire et insérer des lignes avec les valeurs 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

Cette table possède des colonnes avec des types de données que la fonction TO_GEOMETRY accepte comme entrées dans les formats suivants :

  • VARCHAR (WKT/WKB et hex/EWKT/EWKB/GeoJSON)

  • BINARY (WKB/EWKB)

  • VARIANT (objet GeoJSON)

  • GEOGRAPHY

Les valeurs srid et allow_invalid facultatives peuvent suivre l’un de ces formats. La fonction ST_ASWKB , ST_ASBINARY génère des valeurs WKB BINARY valides.

L’exemple suivant convertit les valeurs VARCHAR de la colonne wkt_col en valeurs GEOMETRY à l’aide de la valeur par défaut SRID de 0 :

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';

SELECT id, TO_GEOMETRY(wkt_col) AS g
  FROM demo_to_geometry;
Copy
+----+------------------------------+
| ID | G                            |
|----+------------------------------|
|  1 | SRID=0;POINT(10 20)          |
|  2 | SRID=0;LINESTRING(0 0,10 10) |
+----+------------------------------+

L’exemple suivant convertit les valeurs VARCHAR de la colonne wkt_col en valeurs GEOMETRY à l’aide de la valeur SRID de la colonne srid_col :

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';

SELECT id, TO_GEOMETRY(wkt_col, srid_col) AS g
  FROM demo_to_geometry;
Copy
+----+----------------------------------+
| ID | G                                |
|----+----------------------------------|
|  1 | SRID=3857;POINT(10 20)           |
|  2 | SRID=3857;LINESTRING(0 0,10 10)  |
+----+----------------------------------+

L’exemple suivant convertit les valeurs VARCHAR de la colonne ewkt_col en valeurs GEOMETRY, avec la valeur SRID intégrée dans la valeur de colonne ewkt_col :

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';

SELECT id, TO_GEOMETRY(ewkt_col) AS g
  FROM demo_to_geometry;
Copy
+----+--------------------------------------------+
| ID | G                                          |
|----+--------------------------------------------|
|  1 | SRID=32633;POINT(500000 4649776.22)        |
|  2 | SRID=32633;POINT(389866.35 5819003.03)     |
+----+--------------------------------------------+

L’exemple suivant convertit les valeurs BINARY de la colonne wkb_bin_col en valeurs GEOMETRY :

ALTER SESSION SET BINARY_OUTPUT_FORMAT='HEX';

SELECT id, TO_GEOMETRY(wkb_bin_col) AS g
  FROM demo_to_geometry;
Copy
+----+----------------------------+
| ID | G                          |
|----+----------------------------|
|  1 | SRID=0;LINESTRING(0 0,1 1) |
|  2 | SRID=0;POINT(2 3)          |
+----+----------------------------+

L’exemple suivant convertit les valeurs VARIANT de la colonne geojson_col en valeurs GEOMETRY à l’aide de la valeur SRID de la colonne srid_col :

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';

SELECT id, TO_GEOMETRY(geojson_col, srid_col) AS g
  FROM demo_to_geometry;
Copy
+----+--------------------------------+
| ID | G                              |
|----+--------------------------------|
|  1 | SRID=3857;POINT(10 20)         |
|  2 | SRID=3857;LINESTRING(0 0,1 1)  |
+----+--------------------------------+

L’exemple suivant convertit les valeurs GEOGRAPHY de la colonne geog_col en valeurs GEOMETRY à l’aide de la valeur SRID de la colonne srid_col :

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';

SELECT id, TO_GEOMETRY(geog_col, srid_col) AS g
  FROM demo_to_geometry;
Copy
+----+-----------------------------------------------+
| ID | G                                             |
|----+-----------------------------------------------|
|  1 | SRID=4326;POINT(-122.35 37.55)                |
|  2 | SRID=4326;LINESTRING(-124.2 42,-120.01 41.99) |
+----+-----------------------------------------------+

L’exemple suivant convertit les valeurs VARCHAR de la colonne invalid_wkt_col en valeurs GEOMETRY à l’aide de la valeur SRID de la colonne srid0 (0) et de la valeur allow_invalid de la colonne 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;
Copy

La sortie inclut des formes qui ne sont pas valides :

+----+---------------------------------------+
| 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)) |
+----+---------------------------------------+