2.4 SDO_GEOMETRYのコンストラクタ
SDO_GEOMETRYオブジェクト・タイプには、CLOB形式またはVARCHAR2形式のWell-Known Text (WKTまたはEWKT)文字列、またはBLOB形式(オプションで16進エンコード)のWell-Known Binary (WKBまたはEWKB)オブジェクトからジオメトリ・オブジェクトを作成するコンストラクタがあります。
使用可能なコンストラクタ書式は、次のとおりです。
SDO_GEOMETRY(wkt CLOB, srid NUMBER DEFAULT NULL); SDO_GEOMETRY(wkt VARCHAR2, srid NUMBER DEFAULT NULL); SDO_GEOMETRY(wkb BLOB, srid NUMBER DEFAULT NULL);
オプションのsridパラメータは、WKTまたはWKBデータの座標系を指定するために使用されます。EWKTまたはEWKBの入力のSRID指定はオーバーライドされます(変換は行われません)。作成したジオメトリを表に挿入する場合、コンストラクタで使用したsrid値と、表内のジオメトリのSDO_SRID値が一致している必要があります。
次の例は、well-knownテキスト文字列を使用して点ジオメトリを作成します。(WKTでは、頂点の座標は空白で区切られ、それぞれの頂点はカンマで区切られます。)
SELECT SDO_GEOMETRY('POINT(-79 37)') FROM DUAL;
SDO_GEOMETRY('POINT(-7937)')(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_I
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(-79, 37, NULL), NULL, NULL)
例2-5に、ジオメトリ・オブジェクトを作成して、そのオブジェクトを表に挿入し、表に追加したオブジェクトを表示するSDO_GEOMETRYのコンストラクタを示します。
例2-5 ジオメトリを作成するSDO_GEOMETRYのコンストラクタ
DECLARE
cola_b_wkb BLOB;
cola_b_wkt_clob CLOB;
cola_b_wkt_varchar VARCHAR2(255);
cola_b_geom SDO_GEOMETRY;
BEGIN
-- Get cola_b geometry into CLOB, VARCHAR2, and BLOB objects,
-- for use by the constructor.
SELECT c.shape.Get_WKT() INTO cola_b_wkt_clob
FROM cola_markets c WHERE c.name = 'cola_b';
cola_b_wkt_varchar := cola_b_wkt_clob;
SELECT c.shape.Get_WKB() INTO cola_b_wkb
FROM cola_markets c WHERE c.name = 'cola_b';
-- Use some SDO_GEOMETRY constructors;
-- insert 3 geometries into the table; display the geometries later.
cola_b_geom := SDO_GEOMETRY(cola_b_wkt_clob);
INSERT INTO cola_markets VALUES (101, 'cola_b_from_clob', cola_b_geom);
cola_b_geom := SDO_GEOMETRY(cola_b_wkt_varchar);
INSERT INTO cola_markets VALUES (102, 'cola_b_from_varchar', cola_b_geom);
cola_b_geom := SDO_GEOMETRY(cola_b_wkb);
INSERT INTO cola_markets VALUES (103, 'cola_b_from_wkb', cola_b_geom);
END;
/
PL/SQL procedure successfully completed.
-- Display the geometries created using SDO_GEOMETRY constructors.
-- All three geometries are identical.
SELECT name, shape FROM cola_markets WHERE mkt_id > 100;
NAME
--------------------------------
SHAPE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
cola_b_from_clob
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1))
cola_b_from_varchar
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1))
cola_b_from_wkb
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1))経度および緯度空間データを挿入するためのジオメトリ・コンストラクタ
次の例に示すように、SDO_GEOMETRY(longitude, latitude)コンストラクタを使用して、空間データを経度および緯度の座標系に格納するジオメトリ・オブジェクトを作成できます:
–- Create a table
CREATE TABLE t1(i NUMBER, geom SDO_GEOMETRY);
–- Insert lon/lat spatial data using the following constructor
INSERT INTO t1 VALUES (1, SDO_GEOMETRY(-73.45, 45.2));
–- Display the inserted geometry
SQL> SELECT geom FROM t1;
GEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(-73.45, 45.2, NULL), NULL, NULL)表示されるジオメトリ出力に示すように、前の例のINSERT文は次と同等です。
INSERT INTO t1 VALUES (1, SDO_GEOMETRY(2001, 4326, sdo_point_type(-73.45, 45.2, null), null, null);親トピック: 空間データ型およびメタデータ