TRY_TO_GEOMETRY¶
解析输入,并返回 GEOMETRY 类型的值。
此函数与 TO_GEOMETRY 相同,但它在 TO_GEOMETRY 返回错误时将返回 NULL。
- 另请参阅:
语法¶
使用下列之一:
TRY_TO_GEOMETRY( <varchar_expression> [ , <srid> ] [ , <allow_invalid> ] )
TRY_TO_GEOMETRY( <binary_expression> [ , <srid> ] [ , <allow_invalid> ] )
TRY_TO_GEOMETRY( <variant_expression> [ , <srid> ] [ , <allow_invalid> ] )
实参¶
必填:
varchar_expression实参必须是字符串表达式,它使用以下格式之一表示有效的几何对象:
WKT (已知文本)。
WKB (已知二进制)采用十六进制格式(不带前导
0x)。EWKT (扩展的已知文本)。
EWKB (扩展的已知二进制文件)采用十六进制格式(不带前导
0x)。GeoJSON。
binary_expression实参必须是 WKB 或 EWKB 格式的二进制表达式。
variant_expression实参必须是 GeoJSON 格式的 OBJECT。
可选:
srid要使用的 SRID 的整数值。
allow_invalidIf TRUE, specifies that the function returns a GEOGRAPHY or GEOMETRY object, even when the input shape isn't valid and can't be repaired. For more information, see 指定如何处理无效的地理空间形状.
返回¶
The function returns a value of type GEOMETRY or NULL when TO_GEOMETRY would return an error.
使用说明¶
Returns NULL if the input can't be parsed as the appropriate supported format (WKT, WKB, EWKT, EWKB, GeoJSON).
对于 GeoJSON、WKT 和 WKB 输入,如果未指定
srid实参,则生成的 GEOMETRY 对象将 SRID 设置为 0。
示例¶
该示例展示了带有 VARCHAR 数据的 TRY_TO_GEOMETRY 函数的简单用法:
SELECT TRY_TO_GEOMETRY('INVALID INPUT');
+----------------------------------+
| TRY_TO_GEOMETRY('INVALID INPUT') |
|----------------------------------|
| NULL |
+----------------------------------+
Create a temporary table and insert rows with GEOMETRY values:
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;
This table has columns with data types that the TO_GEOMETRY function accepts as inputs in the following formats:
VARCHAR (WKT/WKB and hex/EWKT/EWKB/GeoJSON)
BINARY (WKB/EWKB)
VARIANT (GeoJSON object)
GEOGRAPHY
Optional srid and allow_invalid values can follow any of these formats. The ST_ASWKB、ST_ASBINARY function
generates valid WKB BINARY values.
The following example tries to convert VARCHAR values in the invalid_wkt_col column to GEOMETRY values,
but the shapes aren't valid:
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT id, TRY_TO_GEOMETRY(invalid_wkt_col) AS g_or_null
FROM demo_to_geometry;
+----+-----------+
| ID | G_OR_NULL |
|----+-----------|
| 1 | NULL |
| 2 | NULL |
+----+-----------+