このパッケージを使用すると、Application Express内でOracle LocatorおよびOracle Spatialオプションを使用できます。Application Expressのコンテキストでは、データベース・セッションのログオン・ユーザーは通常、APEX_PUBLIC_USER
またはANONYMOUS
です。Spatialの開発者は、SQLワークショップ内のSQLコマンドなどでは、このようなセッション内でDMLをUSER_SDO_GEOM_METADATA
に対して直接使用できません。Spatialビューのトリガーはログオン・ユーザーとしてDMLを実行しますが、アプリケーション所有者またはワークスペース・ユーザーとして実行する必要があります。APEX_SPATIAL
APIにより、開発者は次に示すプロシージャおよびファンクションを使用し、現在のApplication ExpressユーザーとしてUSER_SDO_GEOM_METADATA
の行を挿入、更新および削除できます。また、このパッケージには、Application ExpressでのSpatialの使用を簡略化するユーティリティがいくつか用意されています。
この項では、このパッケージで使用するデータ型について説明します。
t_srid
subtype t_srid is number;
c_no_reference_system
c_no_reference_system constant t_srid := null;
c_wgs_84
c_wgs_84 constant t_srid := 4326; -- World Geodetic System, EPSG:4326
このプロシージャは、空間メタデータ・レコードを変更します。
構文
APEX_SPATIAL.CHANGE_GEOM_METADATA ( p_table_name IN VARCHAR2, p_column_name IN VARCHAR2, p_new_table_name IN VARCHAR2 DEFAULT NULL, p_new_column_name IN VARCHAR2 DEFAULT NULL, p_diminfo IN mdsys.sdo_dim_array, p_srid IN t_srid );
パラメータ
表24-1 CHANGE_GEOM_METADATAのパラメータ
パラメータ | 説明 |
---|---|
|
機能表の名前。 |
|
型 |
|
機能表の新しい名前(または現行値のままの場合はnull)。 |
|
型 |
|
ディメンションごとにエントリが1つあり、ディメンション順の |
|
列の全ジオメトリに対する座標系の |
例
次に示すコードは、列CITIES.SHAPE.
のディメンションを変更します。
begin for l_meta in ( select * from user_sdo_geom_metadata where table_name = 'CITIES' and column_name = 'SHAPE' ) loop apex_spatial.change_geom_metadata ( p_table_name => l_meta.table_name, p_column_name => l_meta.column_name, p_diminfo => SDO_DIM_ARRAY ( SDO_DIM_ELEMENT('X', -180, 180, 0.1), SDO_DIM_ELEMENT('Y', -90, 90, 0.1) ), p_srid => l_meta.srid ); end loop; end;
このファンクションは、(p_lon
, p_lat
)で半径p_radius
の円を近似するポリゴンを作成します。詳細は、mdsys.sdo_util.circle_polygon
を参照してください。
構文
APEX_SPATIAL.CIRCLE_POLYGON ( p_lon IN NUMBER, p_lat IN NUMBER, p_radius IN NUMBER, p_arc_tolerance IN NUMBER DEFAULT 20, p_srid IN t_srid DEFAULT c_wgs_84 ) RETURN mdsys.sdo_geometry;
パラメータ
表24-2 CIRCLE_POLYGONのパラメータ
パラメータ | 説明 |
---|---|
p_lon |
左下点の経度の位置。 |
p_lat |
左下点の緯度の位置。 |
|
円の半径(m)。 |
|
円弧の許容差(デフォルトは20)。 |
p_srid |
参照座標系(デフォルトはc_wgs_84)。 |
戻り値
例
この例は、(0, 0)で半径1の円を近似するポリゴンを戻す問合せです。
select apex_spatial.circle_polygon(0, 0, 1) from dual
このプロシージャは、空間メタデータ・レコードを削除します。
構文
APEX_SPATIAL.DELETE_GEOM_METADATA ( p_table_name IN VARCHAR2, p_column_name IN VARCHAR2, p_drop_index IN BOOLEAN DEFAULT FALSE );
パラメータ
表24-4 DELETE_GEOM_METADATAのパラメータ
パラメータ | 説明 |
---|---|
|
機能表の名前。 |
|
型 |
|
TRUE (デフォルトはFALSE)の場合、列の空間索引を削除します。 |
例
この例では、列CITIES.SHAPE
のメタデータを削除し、この列の空間索引を削除します。
begin apex_spatial.delete_geom_metadata ( p_table_name => 'CITIES', p_column_name => 'SHAPE', p_drop_index => true ); end;
このプロシージャは、空間メタデータ・レコードを挿入し、オプションで空間索引を作成します。
構文
APEX_SPATIAL.INSERT_GEOM_METADATA ( p_table_name IN VARCHAR2, p_column_name IN VARCHAR2, p_diminfo in mdsys.sdo_dim_array, p_srid in t_srid, p_create_index_name IN VARCHAR2 DEFAULT NULL );
パラメータ
表24-5 INSERT_GEOM_METADATA_LONLATのパラメータ
パラメータ | 説明 |
---|---|
|
機能表の名前。 |
|
型 |
|
ディメンションごとにエントリが1つあり、ディメンション順の |
p_srid |
列の全ジオメトリに対する座標系のSRID値。 |
|
nullでない場合、この名前で列の空間索引が作成されます。単純な列名のみがサポートされています。ファンクションベースの索引またはオブジェクト属性の索引はエラーとなります。より複雑な要件の場合は、このパラメータをnull (デフォルト)のままにし、手動で索引を作成します。 |
例
この例では、表CITIES
と、列CITIES.SHAPE
の空間メタデータおよび索引を作成します。
create table cities ( city_id number primary key, city_name varchar2(30), shape mdsys.sdo_geometry ) / begin apex_spatial.insert_geom_metadata ( p_table_name => 'CITIES', p_column_name => 'SHAPE', p_diminfo => SDO_DIM_ARRAY ( SDO_DIM_ELEMENT('X', -180, 180, 1), SDO_DIM_ELEMENT('Y', -90, 90, 1) ), p_srid => apex_spatial.c_wgs_84 ); end; / create index cities_idx_shape on cities(shape) indextype is mdsys.spatial_index /
このプロシージャは、経度/緯度に合った空間メタデータ・レコードを挿入し、オプションで空間索引を作成します。
構文
APEX_SPATIAL.INSERT_GEOM_METADATA_LONLAT ( p_table_name IN VARCHAR2, p_column_name IN VARCHAR2, p_tolerance IN NUMBER DEFAULT 1, p_create_index_name IN VARCHAR2 DEFAULT NULL );
パラメータ
表24-6 INSERT_GEOM_METADATA_LONLATのパラメータ
パラメータ | 説明 |
---|---|
|
機能表の名前。 |
|
型 |
|
各ディメンションの許容差値(m) (デフォルトは1)。 |
|
nullでない場合、この名前で列の空間索引が作成されます。単純な列名のみがサポートされています。ファンクションベースの索引またはオブジェクト属性の索引はエラーとなります。より複雑な要件の場合は、このパラメータをnull (デフォルト)のままにし、手動で索引を作成します。 |
例
次に示すコードは、表CITIES
および列CITIES.SHAPE
の空間メタデータを作成します。CITIES_IDX_SHAPE
をp_create_index_name
に渡すと、APIコールによって自動的に空間列の索引が作成されます。
create table cities ( city_id number primary key, city_name varchar2(30), shape mdsys.sdo_geometry ) / begin apex_spatial.insert_geom_metadata_lonlat ( p_table_name => 'CITIES', p_column_name => 'SHAPE', p_create_index_name => 'CITIES_IDX_SHAPE' ); end; /
このファンクションは、(p_lon
, p_lat
)で点を作成します。
構文
APEX_SPATIAL.POINT ( p_lon IN NUMBER, p_lat IN NUMBER, p_srid IN t_srid DEFAULT c_wgs_84 ) RETURN mdsys.sdo_geometry;
パラメータ
戻り値
例
この例は、(10, 50)の点を戻す問合せです。
select apex_spatial.point(10, 50) from dual;
この例は、次の例と同じです。
select mdsys.sdo_geometry(2001, 4326, sdo_point_type(10, 50, null), null, null) from dual;
このファンクションは、(p_lon1
, p_lat1
)の点から(p_lon2
, p_lat2
)までの四角形を作成します。
構文
APEX_SPATIAL.RECTANGLE ( p_lon1 IN NUMBER, p_lat1 IN NUMBER, p_lon2 IN NUMBER, p_lat2 IN NUMBER, p_srid IN t_srid DEFAULT c_wgs_84 ) RETURN mdsys.sdo_geometry;
パラメータ
表24-9 RECTANGLEのパラメータ
パラメータ | 説明 |
---|---|
|
左下点の経度の位置。 |
|
左下点の緯度の位置。 |
|
右上点の経度の位置。 |
|
右上点の緯度の位置。 |
|
参照座標系(デフォルトはc_wgs_84)。 |
戻り値
例
この例は、(10, 50)から(11, 51)までの四角形を戻す問合せです。
select apex_spatial.rectangle(10, 50, 11, 51) from dual
この例は、次の例と同じです。
select mdsys.sdo_geometry( 2003, 4326, null, sdo_elem_info_array(1, 1003, 1), sdo_ordinate_array(10, 50, 11, 50, 11, 51, 10, 51, 10, 50)) from dual;