TO_GEOMETRY
TO_GEOMETRY
TO_GEOMETRY는 입력을 파싱해 GEOMETRY 타입의 값을 반환하는 변환 함수예요. WKT, WKB, EWKT, EWKB, GeoJSON 같은 지리 공간 표현을 GEOMETRY 객체로 바꿀 때 사용해요.
본문
구문 (Syntax)
다음 중 하나를 사용해요:
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> ] )
인자 (Arguments)
필수:
<varchar_expression> — 다음 형식 중 하나로 유효한 기하 객체를 나타내는 문자열 표현식이어야 해요:
- WKT(well-known text)
- WKB(well-known binary), 16진수 형식(앞에
0x없음) - EWKT(extended well-known text)
- EWKB(extended well-known binary), 16진수 형식(앞에
0x없음) - GeoJSON
<binary_expression> — WKB 또는 EWKB 형식의 이진 표현식이어야 해요.
<variant_expression> — GeoJSON 형식의 OBJECT여야 해요.
<geography_expression> — GEOGRAPHY 타입의 표현식이어야 해요.
선택:
<srid> — 사용할 SRID의 정수 값이에요.
<allow_invalid> — TRUE이면 입력 모양이 유효하지 않고 복구할 수 없어도 GEOGRAPHY 또는 GEOMETRY 객체를 반환하도록 지정해요. 자세한 내용은 유효하지 않은 지리 공간 모양 처리 방법 지정을 참고해요.
반환값 (Returns)
GEOMETRY 타입의 값을 반환해요.
사용 시 유의사항 (Usage notes)
- 입력이 지원되는 형식(WKT, WKB, EWKT, EWKB, GeoJSON) 중 하나로 파싱될 수 없으면 오류를 발생시켜요.
- GeoJSON, WKT, WKB 입력에서
srid인자를 지정하지 않으면 결과 GEOMETRY 객체의 SRID는 0으로 설정돼요. - WKT 또는 EWKT 입력에서 GEOMETRY 객체를 만들려면 ST_GEOMETRYFROMWKT도 사용할 수 있어요.
- WKB 또는 EWKB 입력에서 GEOMETRY 객체를 만들려면 ST_GEOMETRYFROMWKB도 사용할 수 있어요.
예시 (Examples)
다음 예시는 WKT로 표현된 객체를 TO_GEOMETRY 함수로 GEOMETRY 객체로 변환하는 방법을 보여줘요. 예시는 srid 인자를 지정하지 않고, 객체의 입력 표현에도 SRID가 지정되어 있지 않으므로 SRID는 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) |
+--------------------------------------+
다음 예시는 EWKT로 표현된 객체를 GEOMETRY 객체로 변환해요. 입력 EWKT는 사용할 SRID를 지정해요:
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) |
+------------------------------------------------+
다음 예시는 SRID를 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) |
+--------------------------------------------+
다음 예시는 EWKT 형식으로 설명된 Z 좌표가 있는 지리 공간 객체에 대한 GEOMETRY 객체를 반환해요:
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) |
+-----------------------------------------------------------+
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;
이 테이블은 TO_GEOMETRY 함수가 다음 형식으로 입력으로 받아들이는 데이터 타입의 열을 가져요:
- VARCHAR (WKT/WKB 및 16진수/EWKT/EWKB/GeoJSON)
- BINARY (WKB/EWKB)
- VARIANT (GeoJSON 객체)
- GEOGRAPHY
선택적 srid와 allow_invalid 값은 이 형식 중 어떤 것 뒤에든 올 수 있어요. St_Aswkb 함수는 유효한 WKB BINARY 값을 생성해요.
다음 예시는 wkt_col 열의 VARCHAR 값을 기본 SRID 0을 사용해 GEOMETRY 값으로 변환해요:
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) |
+----+------------------------------+
다음 예시는 wkt_col 열의 VARCHAR 값을 srid_col 열의 SRID 값을 사용해 GEOMETRY 값으로 변환해요:
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) |
+----+----------------------------------+
다음 예시는 ewkt_col 열의 VARCHAR 값을, ewkt_col 열 값에 포함된 SRID 값을 사용해 GEOMETRY 값으로 변환해요:
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) |
+----+--------------------------------------------+
다음 예시는 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;
+----+----------------------------+
| ID | G |
|----+----------------------------|
| 1 | SRID=0;LINESTRING(0 0,1 1) |
| 2 | SRID=0;POINT(2 3) |
+----+----------------------------+
다음 예시는 geojson_col 열의 VARIANT 값을 srid_col 열의 SRID 값을 사용해 GEOMETRY 값으로 변환해요:
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) |
+----+--------------------------------+
다음 예시는 geog_col 열의 GEOGRAPHY 값을 srid_col 열의 SRID 값을 사용해 GEOMETRY 값으로 변환해요:
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) |
+----+-----------------------------------------------+
다음 예시는 invalid_wkt_col 열의 VARCHAR 값을 srid0 열의 SRID 값(0)과 allow_true 열의 allow_invalid 값을 사용해 GEOMETRY 값으로 변환해요:
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='EWKT';
SELECT id, TO_GEOMETRY(invalid_wkt_col, srid0, allow_true) AS g
FROM demo_to_geometry;
출력에는 유효하지 않은 모양도 포함돼요:
+----+---------------------------------------+
| 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)) |
+----+---------------------------------------+