Catégories :

Fonctions géospatiales, Fonctions de conversion

TRY_TO_GEOMETRY

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

Cette fonction est identique à TO_GEOMETRY sauf qu’elle renvoie NULL lorsque TO_GEOMETRY émettrait une erreur.

Voir aussi :

TO_GEOMETRY

Syntaxe

Utilisez l’une des méthodes suivantes :

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

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.

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 ou NULL quand TO_GEOMETRY renvoie une erreur.

Notes sur l’utilisation

  • Renvoie NULL si l’entrée ne peut pas être analysée comme le format pris en charge approprié (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.

Exemples

Cela montre une utilisation simple de la fonction TRY_TO_GEOMETRY avec des données VARCHAR :

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

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 tente de convertir les valeurs VARCHAR de la colonne invalid_wkt_col en valeurs GEOMETRY, mais les formes ne sont pas valides :

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