カテゴリ:

地理空間関数変換関数

TO_GEOMETRY

入力を解析し、 GEOMETRY 型の値を返します。

こちらもご参照ください。

TRY_TO_GEOMETRYST_GEOMETRYFROMWKBST_GEOMETRYFROMWKT

構文

次のいずれかを使用します。

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

引数

必須:

varchar_expression

引数は、次のいずれかの形式で有効なジオメトリオブジェクトを表す文字列式である必要があります。

  • WKT (Well-Known Text)

  • WKB (Well-Known Binary)16進数形式(先頭に 0x なし)

  • EWKT (拡張Well-Known Text)

  • EWKB (拡張Well-Known Binary)16進数形式(先頭に 0x なし)

  • GeoJSON

binary_expression

引数は WKB または EWKB 形式のバイナリ式である必要があります。

variant_expression

引数は、 GeoJSON 形式の OBJECT である必要があります。

geography_expression

引数は GEOGRAPHY 型の式でなければなりません。

オプション:

srid

使用する SRID の整数値。

allow_invalid

TRUE の場合、入力形状が有効ではなく修復できない場合でも、関数が GEOGRAPHY または GEOMETRY オブジェクトを返すことを指定します。詳細については、 無効な地理空間形状の処理方法の指定 をご参照ください。

戻り値

この関数は、 GEOMETRY 型の値を返します。

使用上の注意

  • 入力が、サポートされている形式(WKT、 WKB、 EWKT、 EWKB、 GeoJSON)の1つとして解析できない場合は、エラーを発行します。

  • GeoJSON、 WKT、および WKB 入力の場合は、 srid 引数が指定されていないと、結果の GEOMETRY オブジェクトの SRID は0に設定されます。

  • WKT または EWKT 入力から GEOMETRY オブジェクトを構築するには、 ST_GEOMETRYFROMWKT を使用することもできます。

  • WKB または EWKB 入力から GEOMETRY オブジェクトを構築するには、 ST_GEOMETRYFROMWKB を使用することもできます。

次の例は、 TO_GEOMETRY 関数を使用して、 WKT で表されるオブジェクトを GEOMETRY オブジェクトに変換する方法を示しています。この例では、srid 引数が指定されておらず、オブジェクトの入力表現で SRID が指定されていないため、SRID は 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)         |
+--------------------------------------+

次の例では、 EWKT で表されるオブジェクトを GEOMETRY オブジェクトに変換します。入力 EKWT は、使用する SRID を指定します。

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

次の例は、 SRID を 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)            |
+--------------------------------------------+

次の例は、 EWKT 形式内で説明されたZ座標のある地理空間オブジェクトに対して GEOMETRY オブジェクトを返します。

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

GEOGRAPHY オブジェクトを GEOMETRY オブジェクトに変換する例については、 GEOGRAPHY と GEOMETRY の間の変換 をご参照ください。

次の例では、テーブルのデータに関するクエリに TO_GEOMETRY 関数を使用します。

仮テーブルを作成し、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

このテーブルには、TO_GEOMETRY 関数が入力として受け入れる次の形式のデータ型の列があります。

  • VARCHAR (WKT/WKB および16進数/EWKT/EWKB/GeoJSON)

  • BINARY (WKB/EWKB)

  • VARIANT (GeoJSON オブジェクト)

  • GEOGRAPHY

オプションの srid 値と allow_invalid 値は、これらの形式のいずれかに従うことができます。ST_ASWKB , ST_ASBINARY 関数は有効な WKB BINARY 値を生成します。

次の例では、デフォルトの SRID である 0 を使用して wkt_col 列の VARCHAR 値を GEOMETRY 値に変換します。

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

次の例では、srid_col 列の SRID 値を使用して wkt_col 列の VARCHAR 値を GEOMETRY 値に変換します。

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

次の例では、ewkt_col 列の値に埋め込まれた SRID 値で ewkt_col 列の VARCHAR 値を GEOMETRY 値に変換します。

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

次の例では、wkb_bin_col 列の BINARY 値を 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)          |
+----+----------------------------+

次の例では、srid_col 列の SRID 値を使用して geojson_col 列の VARIANT 値を GEOMETRY 値に変換します。

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

次の例では、srid_col 列の SRID 値を使用して geog_col 列の GEOGRAPHY 値を GEOMETRY 値に変換します。

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

次の例では、srid0 列の SRID 値(0)と allow_true 列の allow_invalid 値を使用して invalid_wkt_col 列の VARCHAR 値を GEOMETRY 値に変換します。

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';

SELECT id, TO_GEOMETRY(invalid_wkt_col, srid0, allow_true) AS g
  FROM demo_to_geometry;
Copy

出力には、有効でない形も含まれます。

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