Oracle® Spatial

開発者ガイド

11gリリース2 (11.2)

B72087-03(原本部品番号:E11830-15)

2013年11月

Oracle Spatial and GraphおよびOracle Locatorを使用して、空間データの索引付けと格納、および空間アプリケーションの開発を行うための使用方法およびリファレンス情報を示します。

Oracle Spatial開発者ガイド, 11g リリース2 (11.2)

B72087-03

Copyright © 1999, 2013, Oracle and/or its affiliates.All rights reserved.

原本著者: Chuck Murray

協力者: Dan Abugov、Nicole Alexander、Bruce Blackwell、Raja Chatterjee、Dan Geringer、Mike Horhammer、Ying Hu、Baris Kazar、Ravi Kothuri、Siva Ravada、Jack Wang、Ji Yang

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

例一覧

図一覧

表一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

Oracle Spatialの新機能

- リリース11.2

- リリース11.1

第I部 概念および使用方法

1 Spatialの概念

- 1.1 Spatial製品とは

- 1.2 オブジェクト・リレーショナル・モデル

- 1.3 空間データの概要

- 1.4 ジオメトリ・タイプ

- 1.5 データ・モデル

- 1.5.1 要素

- 1.5.2 ジオメトリ

- 1.5.3 レイヤー

- 1.5.4 座標系

- 1.5.5 許容差

- 1.5.5.1 レイヤーのジオメトリ・メタデータの許容差

- 1.5.5.2 入力パラメータとしての許容差

- 1.6 問合せモデル

- 1.7 空間データの索引付け

- 1.7.1 Rツリー索引

- 1.7.2 Rツリーの品質

- 1.8 空間関係およびフィルタ処理

- 1.9 空間演算子、空間プロシージャおよび空間ファンクション

- 1.10 空間集計ファンクション

- 1.10.1 SDOAGGRTYPEオブジェクト型

- 1.11 3次元の空間オブジェクト

- 1.11.1 表面のモデル化

- 1.11.2 ソリッドのモデル化

- 1.11.3 3次元の最適化された矩形

- 1.11.4 テクスチャ・データの使用

- 1.11.4.1 テクスチャ・データのスキーマに関する考慮事項

- 1.11.5 3次元ジオメトリの検証

- 1.12 ジオコーディング

- 1.13 Spatial Java Application Programming Interface(API)

- 1.14 Spatialによって作成される事前定義のユーザー・アカウント

- 1.15 パフォーマンスおよびチューニングの情報

- 1.16 OGCおよびISOへの準拠

- 1.17 Spatialのリリース(バージョン)番号

- 1.18 表の空間的な有効化

- 1.19 Spatialメタデータの移動(MDSYS.MOVE_SDO)

- 1.20 空間アプリケーションのハードウェア要件の考慮事項

- 1.21 Spatialのエラー・メッセージ

- 1.22 Spatialの例

- 1.23 Spatialおよび関連する機能のREADMEファイル

2 空間データ型およびメタデータ

- 2.1 空間データの挿入、索引付けおよび問合せの例

- 2.2 SDO_GEOMETRYオブジェクト型

- 2.2.1 SDO_GTYPE

- 2.2.2 SDO_SRID

- 2.2.3 SDO_POINT

- 2.2.4 SDO_ELEM_INFO

- 2.2.5 SDO_ORDINATES

- 2.2.6 使用上の注意

- 2.3 SDO_GEOMETRYのメソッド

- 2.4 SDO_GEOMETRYのコンストラクタ

- 2.5 TINに関連するオブジェクト型

- 2.5.1 SDO_TINオブジェクト型

- 2.5.2 SDO_TIN_BLK_TYPEオブジェクト型およびSDO_TIN_BLKオブジェクト型

- 2.6 点群に関連するオブジェクト型

- 2.6.1 SDO_PCオブジェクト型

- 2.6.2 SDO_PC_BLK_TYPEオブジェクト型およびSDO_PC_BLKオブジェクト型

- 2.7 ジオメトリの例

- 2.7.1 矩形

- 2.7.2 穴のあるポリゴン

- 2.7.3 複合線ストリング

- 2.7.4 複合ポリゴン

- 2.7.5 点

- 2.7.6 方向付きの点

- 2.7.7 タイプ0(ゼロ)要素

- 2.7.8 2次元の各種ジオメトリ・タイプ

- 2.7.9 3次元のジオメトリ・タイプ

- 2.8 ジオメトリのメタデータ・ビュー

- 2.8.1 TABLE_NAME

- 2.8.2 COLUMN_NAME

- 2.8.3 DIMINFO

- 2.8.4 SRID

- 2.9 空間索引に関する構造

- 2.9.1 空間索引ビュー

- 2.9.1.1 xxx_SDO_INDEX_INFOビュー

- 2.9.1.2 xxx_SDO_INDEX_METADATAビュー

- 2.9.2 空間索引表の定義

- 2.9.3 Rツリー索引における順序オブジェクト

- 2.10 測定単位のサポート

- 2.10.1 ユーザー定義の測定単位の作成

3 SQL Multimedia型のサポート

- 3.1 ST_GEOMETRYとSDO_GEOMETRYとの相互運用性

- 3.2 ST_xxxファンクションと同等のSpatialの機能

- 3.3 SQL Multimedia型と許容差

- 3.4 名前の競合の回避

- 3.5 注釈テキストの型およびビュー

- 3.5.1 ST_ANNOTATION_TEXTコンストラクタの使用

- 3.5.2 注釈テキストのメタデータ・ビュー

4 空間データのロード

- 4.1 バルク・ロード

- 4.1.1 SDO_GEOMETRYオブジェクトのバルク・ロード

- 4.1.2 SDO_GEOMETRYオブジェクトの点のみのデータのバルク・ロード

- 4.2 SQLを使用したトランザクション挿入

- 4.3 空間データのロードおよび検証に関する推奨事項

5 空間データの索引付けおよび問合せ

- 5.1 空間索引の作成

- 5.1.1 特定のジオメトリ・タイプへのデータの制限

- 5.1.2 クロススキーマの索引作成

- 5.1.3 パーティション空間索引の使用

- 5.1.3.1 ローカル・パーティション空間索引の作成

- 5.1.4 索引を含むパーティションの交換

- 5.1.5 空間索引および空間データのエクスポートとインポートに関する考慮事項

- 5.1.6 分散トランザクションと空間索引の一貫性

- 5.1.7 ロールバック・セグメントおよびソート領域サイズ

- 5.2 空間データの問合せ

- 5.2.1 空間問合せ

- 5.2.1.1 1次フィルタ用の演算子

- 5.2.1.2 1次フィルタおよび2次フィルタ用の演算子

- 5.2.1.3 WITHIN_DISTANCE演算子

- 5.2.1.4 Nearest Neighbor演算子

- 5.2.1.5 空間ファンクション

- 5.2.2 空間結合

- 5.2.3 データ、索引次元および空間問合せ

6 座標系(空間参照システム)

- 6.1 用語および概念

- 6.1.1 座標系(空間参照システム)

- 6.1.2 デカルト座標

- 6.1.3 測地座標(地理座標)

- 6.1.4 投影座標

- 6.1.5 ローカル座標

- 6.1.6 測地データ

- 6.1.7 変換

- 6.2 測地座標のサポート

- 6.2.1 測地および2次元のジオメトリ

- 6.2.2 測地座標系または投影座標系の選択

- 6.2.3 非楕円体高または楕円体高の選択

- 6.2.3.1 非楕円体高

- 6.2.3.2 楕円体高

- 6.2.4 測地MBR

- 6.2.5 測地データでのその他の考慮点および要件

- 6.3 ローカル座標のサポート

- 6.4 EPSGモデルとSpatial

- 6.5 3次元の座標参照系のサポート

- 6.5.1 地理3Dの座標参照系

- 6.5.2 複合座標参照系

- 6.5.3 3次元の変換

- 6.5.4 異なる次元間の変換

- 6.5.5 WGS 84に相当する3D

- 6.6 TFM_PLANオブジェクト型

- 6.7 座標系のデータ構造

- 6.7.1 SDO_COORD_AXES表

- 6.7.2 SDO_COORD_AXIS_NAMES表

- 6.7.3 SDO_COORD_OP_METHODS表

- 6.7.4 SDO_COORD_OP_PARAM_USE表

- 6.7.5 SDO_COORD_OP_PARAM_VALS表

- 6.7.6 SDO_COORD_OP_PARAMS表

- 6.7.7 SDO_COORD_OP_PATHS表

- 6.7.8 SDO_COORD_OPS表

- 6.7.9 SDO_COORD_REF_SYS表

- 6.7.10 SDO_COORD_REF_SYSTEMビュー

- 6.7.11 SDO_COORD_SYS表

- 6.7.12 SDO_CRS_COMPOUNDビュー

- 6.7.13 SDO_CRS_ENGINEERINGビュー

- 6.7.14 SDO_CRS_GEOCENTRICビュー

- 6.7.15 SDO_CRS_GEOGRAPHIC2Dビュー

- 6.7.16 SDO_CRS_GEOGRAPHIC3Dビュー

- 6.7.17 SDO_CRS_PROJECTEDビュー

- 6.7.18 SDO_CRS_VERTICALビュー

- 6.7.19 SDO_DATUM_ENGINEERINGビュー

- 6.7.20 SDO_DATUM_GEODETICビュー

- 6.7.21 SDO_DATUM_VERTICALビュー

- 6.7.22 SDO_DATUMS表

- 6.7.23 SDO_ELLIPSOIDS表

- 6.7.24 SDO_PREFERRED_OPS_SYSTEM表

- 6.7.25 SDO_PREFERRED_OPS_USER表

- 6.7.26 SDO_PRIME_MERIDIANS表

- 6.7.27 SDO_UNITS_OF_MEASURE表

- 6.7.28 座標系の表とビューとの関係

- 6.7.29 EPSGベースの座標系に関する情報の検索

- 6.7.29.1 測地座標系

- 6.7.29.2 投影座標系

- 6.8 レガシー表およびビュー

- 6.8.1 MDSYS.CS_SRS表

- 6.8.1.1 well-knownテキスト(WKT)

- 6.8.1.2 米国式およびヨーロッパ式のデータ・パラメータ表記法

- 6.8.1.3 well-knownテキストの更新手順

- 6.8.2 MDSYS.SDO_ANGLE_UNITSビュー

- 6.8.3 MDSYS.SDO_AREA_UNITSビュー

- 6.8.4 MDSYS.SDO_DATUMS_OLD_FORMAT表およびSDO_DATUMS_OLD_SNAPSHOT表

- 6.8.5 MDSYS.SDO_DIST_UNITSビュー

- 6.8.6 MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表およびSDO_ELLIPSOIDS_OLD_SNAPSHOT表

- 6.8.7 MDSYS.SDO_PROJECTIONS_OLD_FORMAT表およびSDO_PROJECTIONS_OLD_SNAPSHOT表

- 6.9 ユーザー定義の座標参照系の作成

- 6.9.1 測地CRSの作成

- 6.9.2 投影CRSの作成

- 6.9.3 垂直CRSの作成

- 6.9.4 複合CRSの作成

- 6.9.5 地理3D CRSの作成

- 6.9.6 変換操作の作成

- 6.9.7 British Grid Transformation OSTN02/OSGM02 (EPSG Method 9633)の使用

- 6.10 座標系サポートでの注意事項および制限事項

- 6.10.1 演算子およびファンクションでの座標系が異なるジオメトリの使用

- 6.10.2 測地データでサポートされない3D LRSファンクション

- 6.10.3 測地データでの近似処理によってサポートされるファンクション

- 6.10.4 unknown CRSおよびNaC座標参照系

- 6.11 U.S. National Gridのサポート

- 6.12 Google Mapsに関する考慮事項

- 6.13 座標系変換の例

7 線形参照システム

- 7.1 用語および概念

- 7.1.1 ジオメトリ・セグメント(LRSセグメント)

- 7.1.2 形状点

- 7.1.3 ジオメトリ・セグメント方向

- 7.1.4 メジャー(線形メジャー)

- 7.1.5 オフセット

- 7.1.6 メジャーの移入

- 7.1.7 ジオメトリ・セグメントのメジャー範囲

- 7.1.8 投影

- 7.1.9 LRS点

- 7.1.10 線形フィーチャ

- 7.1.11 複数線ストリングおよび穴があるポリゴンのメジャー

- 7.2 LRSデータ・モデル

- 7.3 LRSデータの索引付け

- 7.4 LRSファンクションの3D形式

- 7.5 LRSの処理

- 7.5.1 ジオメトリ・セグメントの定義

- 7.5.2 ジオメトリ・セグメントの再定義

- 7.5.3 ジオメトリ・セグメントのクリップ

- 7.5.4 ジオメトリ・セグメントの分割

- 7.5.5 ジオメトリ・セグメントの連結

- 7.5.6 ジオメトリ・セグメントのスケール変更

- 7.5.7 ジオメトリ・セグメントのオフセット設定

- 7.5.8 ジオメトリ・セグメント上の点の位置の確認

- 7.5.9 ジオメトリ・セグメント上の点の投影

- 7.5.10 LRSジオメトリの変換

- 7.6 LRSファンクションの許容差

- 7.7 LRSファンクションの例

8 空間分析およびマイニング

- 8.1 空間情報およびデータ・マイニング・アプリケーション

- 8.2 空間のビニングによる地域パターンの検出

- 8.3 空間相関のマテリアライズ

- 8.4 コロケーション・マイニング

- 8.5 空間のクラスタ化

- 8.6 位置の予測

9 空間索引付け機能の拡張

- 9.1 ユーザー定義型定義のSDO_GEOMETRYオブジェクト

- 9.2 ファンクション索引のSDO_GEOMETRYオブジェクト

- 9.2.1 例: 標準型を使用したファンクション

- 9.2.2 例: ユーザー定義のオブジェクト型を使用したファンクション

第II部 SpatialのWebサービス

10 SpatialのWebサービスの概要

- 10.1 SpatialのWebサービスの種類

- 10.2 SpatialのWebサービスのユーザーの種類

- 10.3 SpatialのWebサービスのクライアントの設定

- 10.4 サンプルJavaクライアントのデモ・ファイル

11 住所データのジオコーディング

- 11.1 ジオコーディングの概念

- 11.1.1 住所の表現

- 11.1.2 一致モード

- 11.1.3 一致コード

- 11.1.4 出力されたジオコード済住所のエラー・メッセージ

- 11.1.5 出力されたジオコード済住所の一致ベクトル

- 11.2 ジオコーディングのデータ型

- 11.2.1 SDO_GEO_ADDR型

- 11.2.2 SDO_ADDR_ARRAY型

- 11.2.3 SDO_KEYWORDARRAY型

- 11.3 ジオコーディング機能の使用

- 11.4 場所名からのジオコーディング

- 11.5 ジオコーディングのデータ構造

- 11.5.1 GC_ADDRESS_POINT_<接尾辞>表と索引

- 11.5.2 GC_AREA_<接尾辞>表

- 11.5.3 GC_COUNTRY_PROFILE表

- 11.5.4 GC_INTERSECTION_<接尾辞>表

- 11.5.5 GC_PARSER_PROFILES表

- 11.5.6 GC_PARSER_PROFILEAFS表

- 11.5.6.1 ADDRESS_FORMAT_STRINGの説明

- 11.5.7 GC_POI_<接尾辞>表

- 11.5.8 GC_POSTAL_CODE_<接尾辞>表

- 11.5.9 GC_ROAD_<接尾辞>表

- 11.5.10 GC_ROAD_SEGMENT_<接尾辞>表

- 11.5.11 ジオコーディングを行うための表の索引

- 11.6 プロファイル表のインストール

- 11.7 ジオコーディング・サービス(XML API)の使用

- 11.7.1 J2EEジオコーダのデプロイおよび構成

- 11.7.1.1 geocodercfg.xmlファイルの構成

- 11.7.2 ジオコーディング・リクエストのXMLスキーマ定義および例

- 11.7.3 ジオコーディング・レスポンスのXMLスキーマ定義および例

12 ビジネス・ディレクトリ(イエロー・ページ)のサポート

- 12.1 ビジネス・ディレクトリの概念

- 12.2 ビジネス・ディレクトリ機能の使用

- 12.3 ビジネス・ディレクトリのサポートのデータ構造

- 12.3.1 OPENLS_DIR_BUSINESSES表

- 12.3.2 OPENLS_DIR_BUSINESS_CHAINS表

- 12.3.3 OPENLS_DIR_CATEGORIES表

- 12.3.4 OPENLS_DIR_CATEGORIZATIONS表

- 12.3.5 OPENLS_DIR_CATEGORY_TYPES表

- 12.3.6 OPENLS_DIR_SYNONYMS表

13 ルーティング・エンジン

- 13.1 マルチアドレス・ルーティング

- 13.2 ルーティング・エンジンのデプロイおよび構成

- 13.2.1 web.xmlファイルの構成

- 13.3 ルーティング・エンジンのXML API

- 13.3.1 ルート・リクエストおよびルート・レスポンスの例

- 13.3.2 ルート・リクエストのDTD

- 13.3.2.1 route_request要素

- 13.3.2.2 route_request属性

- 13.3.2.3 input_location要素

- 13.3.2.4 pre_geocoded_location要素

- 13.3.3 ルート・レスポンスのDTD

- 13.3.4 一括ルート・リクエストおよび一括ルート・レスポンスの例

- 13.3.5 一括ルート・リクエストのDTD

- 13.3.5.1 batch_route_request要素

- 13.3.5.2 batch_route_request属性

- 13.3.6 一括ルート・レスポンスのDTD

- 13.4 ルーティング・エンジンで使用されるデータ構造

- 13.4.1 EDGE表

- 13.4.2 NODE表

- 13.4.3 PARTITION表

- 13.4.4 SIGN_POST表

14 OpenLSのサポート

- 14.1 サポートされているOpenLSサービス

- 14.2 OpenLSのApplication Program Interface

- 14.3 OpenLSサービスのサポートおよび例

- 14.3.1 OpenLSのジオコーディング

- 14.3.2 OpenLSのマッピング

- 14.3.3 OpenLSのルーティング

- 14.3.4 OpenLSのディレクトリ・サービス(YP)

15 Web Feature Service(WFS)のサポート

- 15.1 WFSエンジン

- 15.2 フィーチャ・タイプの管理

- 15.2.1 機能のドキュメント

- 15.3 XMLのリクエストおよびレスポンス例

- 15.4 WFSの管理用のJava API

- 15.4.1 createXMLTableIndexメソッド

- 15.4.2 dropFeatureTypeメソッド

- 15.4.3 dropXMLTableIndexメソッド

- 15.4.4 getIsXMLTableIndexCreatedメソッド

- 15.4.5 grantFeatureTypeToUserメソッド

- 15.4.6 grantMDAccessToUserメソッド

- 15.4.7 publishFeatureTypeメソッド

- 15.4.7.1 publishFeatureTypeに関連するクラス

- 15.4.8 revokeFeatureTypeFromUserメソッド

- 15.4.9 revokeMDAccessFromUserメソッド

- 15.4.10 setXMLTableIndexInfoメソッド

- 15.5 Oracle Workspace ManagerでのWFSの使用

16 Catalog Services for the Web(CSW)のサポート

- 16.1 CSWエンジンおよびアーキテクチャ

- 16.2 CSWのAPIおよび構成

- 16.2.1 機能のドキュメント

- 16.2.2 空間パス抽出ファンクション(extractSDO)

- 16.2.2.1 extractSDOファンクションの登録および登録解除

- 16.3 XMLのリクエストおよびレスポンス例

- 16.4 CSWの管理用のJava API

- 16.4.1 createXMLTableIndexメソッド

- 16.4.2 deleteDomainInfoメソッド

- 16.4.3 deleteRecordViewMapメソッド

- 16.4.4 disableVersioningメソッド

- 16.4.5 dropRecordTypeメソッド

- 16.4.6 dropXMLTableIndexメソッド

- 16.4.7 enableVersioningメソッド

- 16.4.8 getIsXMLTableIndexCreatedメソッド

- 16.4.9 getRecordTypeIdメソッド

- 16.4.10 grantMDAccessToUserメソッド

- 16.4.11 grantRecordTypeToUserメソッド

- 16.4.12 publishRecordTypeメソッド

- 16.4.12.1 publishRecordTypeに関連するクラス

- 16.4.13 registerTypePluginMapメソッド

- 16.4.14 revokeMDAccessFromUserメソッド

- 16.4.15 revokeRecordTypeFromUserメソッド

- 16.4.16 setCapabilitiesInfoメソッド

- 16.4.17 setDomainInfoメソッド

- 16.4.18 setRecordViewMapメソッド

- 16.4.19 setXMLTableIndexInfoメソッド

17 SpatialのWebサービスのセキュリティに関する考慮事項

- 17.1 ユーザー管理

- 17.1.1 データベースへのアイデンティティ伝播

- 17.1.2 キャッシュとユーザー管理

- 17.2 アクセス制御およびバージョニング

- 17.2.1 仮想プライベート・データベース

- 17.2.2 Workspace Manager

- 17.3 Webサービスのセキュリティの構成

- 17.3.1 Spatialのサービス・ハンドラの追加

- 17.4 SpatialのWebサービス用のインタフェース

- 17.4.1 SOAP/WSSインタフェース

- 17.4.2 XML(非SOAP)インタフェース

- 17.4.3 PL/SQLインタフェース(OpenLSのみ)

- 17.4.4 インタフェース別のセキュリティ・レベル

第III部 リファレンス情報

18 空間データを索引付けするためのSQL文

- ALTER INDEX

- ALTER INDEX REBUILD

- ALTER INDEX RENAME TO

- CREATE INDEX

- DROP INDEX

19 空間演算子

- SDO_ANYINTERACT

- SDO_CONTAINS

- SDO_COVEREDBY

- SDO_COVERS

- SDO_EQUAL

- SDO_FILTER

- SDO_INSIDE

- SDO_JOIN

- SDO_NN

- SDO_NN_DISTANCE

- SDO_ON

- SDO_OVERLAPBDYDISJOINT

- SDO_OVERLAPBDYINTERSECT

- SDO_OVERLAPS

- SDO_RELATE

- SDO_TOUCH

- SDO_WITHIN_DISTANCE

20 空間集計ファンクション

- SDO_AGGR_CENTROID

- SDO_AGGR_CONCAT_LINES

- SDO_AGGR_CONVEXHULL

- SDO_AGGR_LRS_CONCAT

- SDO_AGGR_MBR

- SDO_AGGR_SET_UNION

- SDO_AGGR_UNION

21 SDO_CSパッケージ(座標系変換)

- SDO_CS.ADD_PREFERENCE_FOR_OP

- SDO_CS.CONVERT_NADCON_TO_XML

- SDO_CS.CONVERT_NTV2_TO_XML

- SDO_CS.CONVERT_XML_TO_NADCON

- SDO_CS.CONVERT_XML_TO_NTV2

- SDO_CS.CREATE_CONCATENATED_OP

- SDO_CS.CREATE_OBVIOUS_EPSG_RULES

- SDO_CS.CREATE_PREF_CONCATENATED_OP

- SDO_CS.DELETE_ALL_EPSG_RULES

- SDO_CS.DELETE_OP

- SDO_CS.DETERMINE_CHAIN

- SDO_CS.DETERMINE_DEFAULT_CHAIN

- SDO_CS.FIND_GEOG_CRS

- SDO_CS.FIND_PROJ_CRS

- SDO_CS.FIND_SRID

- SDO_CS.FROM_OGC_SIMPLEFEATURE_SRS

- SDO_CS.FROM_USNG

- SDO_CS.GET_EPSG_DATA_VERSION

- SDO_CS.MAKE_2D

- SDO_CS.MAKE_3D

- SDO_CS.MAP_EPSG_SRID_TO_ORACLE

- SDO_CS.MAP_ORACLE_SRID_TO_EPSG

- SDO_CS.REVOKE_PREFERENCE_FOR_OP

- SDO_CS.TO_OGC_SIMPLEFEATURE_SRS

- SDO_CS.TO_USNG

- SDO_CS.TRANSFORM

- SDO_CS.TRANSFORM_LAYER

- SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS

- SDO_CS.UPDATE_WKTS_FOR_EPSG_CRS

- SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUM

- SDO_CS.UPDATE_WKTS_FOR_EPSG_ELLIPS

- SDO_CS.UPDATE_WKTS_FOR_EPSG_OP

- SDO_CS.UPDATE_WKTS_FOR_EPSG_PARAM

- SDO_CS.UPDATE_WKTS_FOR_EPSG_PM

- SDO_CS.VALIDATE_WKT

22 SDO_CSW_PROCESSパッケージ(CSWの処理)

- SDO_CSW_PROCESS.DeleteCapabilitiesInfo

- SDO_CSW_PROCESS.DeleteDomainInfo

- SDO_CSW_PROCESS.DeletePluginMap

- SDO_CSW_PROCESS.DeleteRecordViewMap

- SDO_CSW_PROCESS.GetRecordTypeId

- SDO_CSW_PROCESS.InsertCapabilitiesInfo

- SDO_CSW_PROCESS.InsertDomainInfo

- SDO_CSW_PROCESS.InsertPluginMap

- SDO_CSW_PROCESS.InsertRecordViewMap

- SDO_CSW_PROCESS.InsertRtDataUpdated

- SDO_CSW_PROCESS.InsertRtMDUpdated

23 SDO_GCDRパッケージ(ジオコーディング)

- SDO_GCDR.CREATE_PROFILE_TABLES

- SDO_GCDR.GEOCODE

- SDO_GCDR.GEOCODE_ADDR

- SDO_GCDR.GEOCODE_ADDR_ALL

- SDO_GCDR.GEOCODE_ALL

- SDO_GCDR.GEOCODE_AS_GEOMETRY

- SDO_GCDR.REVERSE_GEOCODE

24 SDO_GEOMパッケージ(ジオメトリ)

- SDO_GEOM.RELATE

- SDO_GEOM.SDO_ALPHA_SHAPE

- SDO_GEOM.SDO_ARC_DENSIFY

- SDO_GEOM.SDO_AREA

- SDO_GEOM.SDO_BUFFER

- SDO_GEOM.SDO_CENTROID

- SDO_GEOM.SDO_CLOSEST_POINTS

- SDO_GEOM.SDO_CONCAVEHULL

- SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY

- SDO_GEOM.SDO_CONVEXHULL

- SDO_GEOM.SDO_DIFFERENCE

- SDO_GEOM.SDO_DISTANCE

- SDO_GEOM.SDO_INTERSECTION

- SDO_GEOM.SDO_LENGTH

- SDO_GEOM.SDO_MAX_MBR_ORDINATE

- SDO_GEOM.SDO_MBR

- SDO_GEOM.SDO_MIN_MBR_ORDINATE

- SDO_GEOM.SDO_POINTONSURFACE

- SDO_GEOM.SDO_TRIANGULATE

- SDO_GEOM.SDO_UNION

- SDO_GEOM.SDO_VOLUME

- SDO_GEOM.SDO_XOR

- SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

- SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

- SDO_GEOM.WITHIN_DISTANCE

25 SDO_LRSパッケージ(線形参照システム)

- SDO_LRS.CLIP_GEOM_SEGMENT

- SDO_LRS.CONCATENATE_GEOM_SEGMENTS

- SDO_LRS.CONNECTED_GEOM_SEGMENTS

- SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY

- SDO_LRS.CONVERT_TO_LRS_GEOM

- SDO_LRS.CONVERT_TO_LRS_LAYER

- SDO_LRS.CONVERT_TO_STD_DIM_ARRAY

- SDO_LRS.CONVERT_TO_STD_GEOM

- SDO_LRS.CONVERT_TO_STD_LAYER

- SDO_LRS.DEFINE_GEOM_SEGMENT

- SDO_LRS.DYNAMIC_SEGMENT

- SDO_LRS.FIND_LRS_DIM_POS

- SDO_LRS.FIND_MEASURE

- SDO_LRS.FIND_OFFSET

- SDO_LRS.GEOM_SEGMENT_END_MEASURE

- SDO_LRS.GEOM_SEGMENT_END_PT

- SDO_LRS.GEOM_SEGMENT_LENGTH

- SDO_LRS.GEOM_SEGMENT_START_MEASURE

- SDO_LRS.GEOM_SEGMENT_START_PT

- SDO_LRS.GET_MEASURE

- SDO_LRS.GET_NEXT_SHAPE_PT

- SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE

- SDO_LRS.GET_PREV_SHAPE_PT

- SDO_LRS.GET_PREV_SHAPE_PT_MEASURE

- SDO_LRS.IS_GEOM_SEGMENT_DEFINED

- SDO_LRS.IS_MEASURE_DECREASING

- SDO_LRS.IS_MEASURE_INCREASING

- SDO_LRS.IS_SHAPE_PT_MEASURE

- SDO_LRS.LOCATE_PT

- SDO_LRS.LRS_INTERSECTION

- SDO_LRS.MEASURE_RANGE

- SDO_LRS.MEASURE_TO_PERCENTAGE

- SDO_LRS.OFFSET_GEOM_SEGMENT

- SDO_LRS.PERCENTAGE_TO_MEASURE

- SDO_LRS.PROJECT_PT

- SDO_LRS.REDEFINE_GEOM_SEGMENT

- SDO_LRS.RESET_MEASURE

- SDO_LRS.REVERSE_GEOMETRY

- SDO_LRS.REVERSE_MEASURE

- SDO_LRS.SCALE_GEOM_SEGMENT

- SDO_LRS.SET_PT_MEASURE

- SDO_LRS.SPLIT_GEOM_SEGMENT

- SDO_LRS.TRANSLATE_MEASURE

- SDO_LRS.VALID_GEOM_SEGMENT

- SDO_LRS.VALID_LRS_PT

- SDO_LRS.VALID_MEASURE

- SDO_LRS.VALIDATE_LRS_GEOMETRY

26 SDO_MIGRATEパッケージ(アップグレード)

- SDO_MIGRATE.TO_CURRENT

27 SDO_OLSパッケージ(OpenLS)

- SDO_OLS.MakeOpenLSClobRequest

- SDO_OLS.MakeOpenLSRequest

28 SDO_PC_PKGパッケージ(点群)

- SDO_PC_PKG.CLIP_PC

- SDO_PC_PKG.CREATE_PC

- SDO_PC_PKG.DROP_DEPENDENCIES

- SDO_PC_PKG.GET_PT_IDS

- SDO_PC_PKG.INIT

- SDO_PC_PKG.TO_GEOMETRY

29 SDO_SAMパッケージ(空間分析およびマイニング)

- SDO_SAM.AGGREGATES_FOR_GEOMETRY

- SDO_SAM.AGGREGATES_FOR_LAYER

- SDO_SAM.BIN_GEOMETRY

- SDO_SAM.BIN_LAYER

- SDO_SAM.COLOCATED_REFERENCE_FEATURES

- SDO_SAM.SIMPLIFY_GEOMETRY

- SDO_SAM.SIMPLIFY_LAYER

- SDO_SAM.SPATIAL_CLUSTERS

- SDO_SAM.TILED_AGGREGATES

- SDO_SAM.TILED_BINS

30 SDO_TIN_PKGパッケージ(TIN)

- SDO_TIN_PKG.CLIP_TIN

- SDO_TIN_PKG.CREATE_TIN

- SDO_TIN_PKG.DROP_DEPENDENCIES

- SDO_TIN_PKG.INIT

- SDO_TIN_PKG.TO_GEOMETRY

31 SDO_TUNEパッケージ(チューニング)

- SDO_TUNE.AVERAGE_MBR

- SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE

- SDO_TUNE.EXTENT_OF

- SDO_TUNE.MIX_INFO

- SDO_TUNE.QUALITY_DEGRADATION

32 SDO_UTILパッケージ(ユーティリティ)

- SDO_UTIL.AFFINETRANSFORMS

- SDO_UTIL.APPEND

- SDO_UTIL.BEARING_TILT_FOR_POINTS

- SDO_UTIL.CIRCLE_POLYGON

- SDO_UTIL.CONCAT_LINES

- SDO_UTIL.CONVERT_UNIT

- SDO_UTIL.DROP_WORK_TABLES

- SDO_UTIL.ELLIPSE_POLYGON

- SDO_UTIL.EXTRACT

- SDO_UTIL.EXTRACT_ALL

- SDO_UTIL.EXTRACT3D

- SDO_UTIL.EXTRUDE

- SDO_UTIL.FROM_GML311GEOMETRY

- SDO_UTIL.FROM_GMLGEOMETRY

- SDO_UTIL.FROM_KMLGEOMETRY

- SDO_UTIL.FROM_WKBGEOMETRY

- SDO_UTIL.FROM_WKTGEOMETRY

- SDO_UTIL.GETNUMELEM

- SDO_UTIL.GETNUMVERTICES

- SDO_UTIL.GETVERTICES

- SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS

- SDO_UTIL.INTERIOR_POINT

- SDO_UTIL.POINT_AT_BEARING

- SDO_UTIL.POLYGONTOLINE

- SDO_UTIL.PREPARE_FOR_TTS

- SDO_UTIL.RECTIFY_GEOMETRY

- SDO_UTIL.REMOVE_DUPLICATE_VERTICES

- SDO_UTIL.REVERSE_LINESTRING

- SDO_UTIL.SIMPLIFY

- SDO_UTIL.TO_GML311GEOMETRY

- SDO_UTIL.TO_GMLGEOMETRY

- SDO_UTIL.TO_KMLGEOMETRY

- SDO_UTIL.TO_WKBGEOMETRY

- SDO_UTIL.TO_WKTGEOMETRY

- SDO_UTIL.VALIDATE_WKBGEOMETRY

- SDO_UTIL.VALIDATE_WKTGEOMETRY

33 SDO_WFS_LOCKパッケージ(WFS)

- SDO_WFS_LOCK.EnableDBTxns

- SDO_WFS_LOCK.RegisterFeatureTable

- SDO_WFS_LOCK.UnRegisterFeatureTable

34 SDO_WFS_PROCESSパッケージ(WFSの処理)

- SDO_WFS_PROCESS.DropFeatureType

- SDO_WFS_PROCESS.DropFeatureTypes

- SDO_WFS_PROCESS.GenCollectionProcs

- SDO_WFS_PROCESS.GetFeatureTypeId

- SDO_WFS_PROCESS.GrantFeatureTypeToUser

- SDO_WFS_PROCESS.GrantMDAccessToUser

- SDO_WFS_PROCESS.InsertCapabilitiesInfo

- SDO_WFS_PROCESS.InsertFtDataUpdated

- SDO_WFS_PROCESS.InsertFtMDUpdated

- SDO_WFS_PROCESS.PopulateFeatureTypeXMLInfo

- SDO_WFS_PROCESS.PublishFeatureType

- SDO_WFS_PROCESS.RegisterMTableView

- SDO_WFS_PROCESS.RevokeFeatureTypeFromUser

- SDO_WFS_PROCESS.RevokeMDAccessFromUser

- SDO_WFS_PROCESS.UnRegisterMTableView

第IV部 補足情報

A インストール、移行、互換性およびアップグレード

- A.1 データベース間での空間データの移行

- A.2 インストールまたはアップグレード後にGeoRasterが正しく動作するための確認事項

- A.3 アップグレード前およびアップグレード後に行う索引のメンテナンス(WFSおよびCSW)

- A.4 非常に大きなジオメトリをサポートするための縦座標配列のサイズの増大

B Oracle Locator

- B.1 LocatorまたはSpatialの手動によるインストールおよび削除

C 複雑な空間問合せの例

- C.1 例で使用する表

- C.2 SDO_WITHIN_DISTANCEの例

- C.3 SDO_NNの例

- C.4 SDO_AGGR_UNIONの例

D SpatialへのESRIシェープファイルのロード

- D.1 シェープファイル・コンバータの使用方法

- D.2 シェープファイル・コンバータの例

用語集

索引

例一覧

- 1-1 テクスチャ座標の定義の挿入

- 1-2 テクスチャ座標の表、テクスチャの表および面の表の作成

- 1-3 表の空間的な有効化

- 2-1 空間データの挿入、索引付けおよび問合せの例

- 2-2 SDO_GEOMETRYのメソッド

- 2-3 ジオメトリを作成するSDO_GEOMETRYのコンストラクタ

- 2-4 SDO_TINの属性の問合せ

- 2-5 SDO_PCの属性の問合せ

- 2-6 矩形を挿入するSQL文

- 2-7 穴のあるポリゴンを挿入するSQL文

- 2-8 複合線ストリングを挿入するSQL文

- 2-9 複合ポリゴンを挿入するSQL文

- 2-10 点のみのジオメトリを挿入するSQL文

- 2-11 座標値に基づく点のみのジオメトリの問合せ

- 2-12 方向付きの点のジオメトリを挿入するSQL文

- 2-13 方向付きの複数点ジオメトリを挿入するSQL文

- 2-14 タイプ0(ゼロ)要素を含むジオメトリを挿入するSQL文

- 2-15 2次元の各種ジオメトリを挿入するSQL文

- 2-16 3次元のジオメトリを挿入するSQL文

- 2-17 3次元ジオメトリのメタデータの更新と索引の作成

- 2-18 ユーザー定義の測定単位の作成および使用

- 3-1 空間列でのST_GEOMETRY型の使用

- 3-2 ST_GEOMETRYデータの作成、索引付け、格納および問合せ

- 3-3 ST_ANNOTATION_TEXTコンストラクタの使用

- 4-1 コーラのマーケットのジオメトリをバルク・ロードするための制御ファイル

- 4-2 ポリゴンのバルク・ロードのための制御ファイル

- 4-3 点のみのデータをバルク・ロードするための制御ファイル

- 4-4 トランザクション挿入処理を実行するプロシージャ

- 4-5 ジオメトリを挿入するプロシージャをコールするPL/SQLブロック

- 5-1 パーティション空間索引を使用したSDO_NN問合せ

- 5-2 一時問合せウィンドウを使用した1次フィルタ

- 5-3 問合せウィンドウの一時的なインスタンスを使用した1次フィルタ

- 5-4 ストアド問合せウィンドウを使用した1次フィルタ

- 5-5 一時問合せウィンドウを使用した2次フィルタ

- 5-6 ストアド問合せウィンドウを使用した2次フィルタ

- 6-1 測地MBRの使用

- 6-2 3次元のデータ変換

- 6-3 ジオイド高と楕円体高の間の変換

- 6-4 異なる次元間の変換

- 6-5 ユーザー定義の測地座標参照系の作成

- 6-6 SDO_COORD_SYS表への行の挿入

- 6-7 ユーザー定義の投影座標参照系の作成

- 6-8 SDO_COORD_OPS表への行の挿入

- 6-9 SDO_COORD_OP_PARAM_VALS表への行の挿入

- 6-10 ユーザー定義の投影CRSの作成(拡張例)

- 6-11 垂直座標参照系の作成

- 6-12 複合座標参照系の作成

- 6-13 地理3D座標参照系の作成

- 6-14 変換操作の作成

- 6-15 オフセット・マトリックスのロード

- 6-16 British Grid Transformation OSTN02/OSGM02 (EPSG Method 9633)の使用

- 6-17 座標系変換の簡単な例

- 6-18 座標系変換の例でのSELECT文の出力

- 7-1 SpatialメタデータへのLRSメジャー次元の取込み

- 7-2 高速道路の例

- 7-3 SELECT文の出力例

- 10-1 WSConfig.xmlファイル

- 11-1 ジオコーディング、および住所オブジェクトと特定の属性の取得

- 11-2 場所名と国からのジオコーディング

- 11-3 場所名、国および他のフィールドからのジオコーディング

- 11-4 米国の住所形式のXML定義

- 11-5 ジオコーディングを行うための表に必要な索引

- 11-6 <database>要素定義

- 11-7 ジオコーディング・リクエスト(XML API)

- 11-8 ジオコーディング・レスポンス(XML API)

- 13-1 指定した住所を使用した場合のルート・リクエスト

- 13-2 指定した住所を使用した場合のルート・レスポンス

- 13-3 緯度/経度での点指定を使用した場合のルート・リクエスト

- 13-4 緯度/経度での点指定を使用した場合のルート・レスポンス

- 13-5 ジオコード済の場所を使用した場合のルート・リクエスト

- 13-6 ジオコード済の場所を使用した場合のルート・レスポンス

- 13-7 指定した住所を使用した場合の一括ルート・リクエスト

- 13-8 指定した住所を使用した場合の一括ルート・レスポンス

- 13-9 ジオコード済の場所を使用した場合の一括ルート・リクエスト

- 13-10 ジオコード済の場所を使用した場合の一括ルート・レスポンス

- 14-1 OpenLSのジオコーディング・リクエスト

- 14-2 OpenLSのジオコーディング・レスポンス

- 14-3 OpenLSのマッピング・リクエスト

- 14-4 OpenLSのマッピング・レスポンス

- 14-5 OpenLSのルーティング・リクエスト

- 14-6 OpenLSのルーティング・レスポンス

- 14-7 OpenLSのディレクトリ・サービス(YP)・リクエスト

- 14-8 OpenLSのディレクトリ・サービス(YP)・レスポンス

- 15-1 GetCapabilitiesリクエスト

- 15-2 GetCapabilitiesのレスポンス

- 15-3 DescribeFeatureTypeリクエスト

- 15-4 DescribeFeatureTypeのレスポンス

- 15-5 GetFeatureリクエスト

- 15-6 GetFeatureのレスポンス

- 15-7 GetFeatureWithLockリクエスト

- 15-8 GetFeatureWithLockのレスポンス

- 15-9 LockFeatureリクエスト

- 15-10 LockFeatureのレスポンス

- 15-11 Insertリクエスト

- 15-12 Insertのレスポンス

- 15-13 Updateリクエスト

- 15-14 Updateのレスポンス

- 15-15 Deleteリクエスト

- 15-16 Deleteのレスポンス

- 16-1 GetCapabilitiesリクエスト

- 16-2 GetCapabilitiesのレスポンス

- 16-3 DescribeRecordリクエスト

- 16-4 DescribeRecordのレスポンス

- 16-5 GetRecordsリクエスト

- 16-6 GetRecordsのレスポンス

- 16-7 GetDomainリクエスト

- 16-8 GetDomainのレスポンス

- 16-9 GetRecordByIdリクエスト

- 16-10 GetRecordByIdのレスポンス

- 16-11 Insertリクエスト

- 16-12 Insertのレスポンス

- 16-13 Updateリクエスト

- 16-14 Updateのレスポンス

- 16-15 Deleteリクエスト

- 16-16 Deleteのレスポンス

- C-1 高速道路から一定距離内に存在するすべての都市の検索

- C-2 都市から一定距離内に存在するすべての高速道路の検索

- C-3 高速道路に最も近い都市の検索

- C-4 高速道路に最も近く、指定の人口を超える都市の検索

- C-5 行が多数ある場合のグルーピングを使用した集計和集合

図一覧

- 1-1 ジオメトリ・タイプ

- 1-2 問合せモデル

- 1-3 MBRに囲まれたジオメトリ

- 1-4 MBR上のRツリー階層索引

- 1-5 9交差モデル

- 1-6 位相関係

- 1-7 点、線およびポリゴンの距離バッファ

- 1-8 集計和集合操作の許容差

- 1-9 空間オブジェクトの問合せウィンドウとしての錐台

- 1-10 面とテクスチャ

- 1-11 面にマッピングされたテクスチャ

- 2-1 対象領域の例

- 2-2 TINデータの記憶域

- 2-3 矩形

- 2-4 穴のあるポリゴン

- 2-5 複合線ストリング

- 2-6 複合ポリゴン

- 2-7 点のみのジオメトリ

- 2-8 方向付きの点のジオメトリ

- 2-9 タイプ0(ゼロ)要素を含むジオメトリ

- 5-1 ジオメトリとMBR

- 5-2 問合せウィンドウを追加したレイヤー

- 7-1 ジオメトリ・セグメント

- 7-2 メジャーおよびオフセットとセグメント上の点

- 7-3 メジャー、距離およびそのマッピングの関係

- 7-4 ジオメトリ・セグメントのメジャーの移入

- 7-5 不均等に割り当てられたメジャーでのメジャーの移入

- 7-6 線形フィーチャ、ジオメトリ・セグメントおよびLRS点

- 7-7 ジオメトリ・セグメントの作成

- 7-8 ジオメトリ・セグメントの定義

- 7-9 ジオメトリ・セグメントの再定義

- 7-10 ジオメトリ・セグメントのクリップ、分割および連結

- 7-11 ジオメトリ・セグメント処理でのメジャーの割当て

- 7-12 連結時のセグメント方向

- 7-13 ジオメトリ・セグメントのスケール変更

- 7-14 ジオメトリ・セグメントのオフセット設定

- 7-15 メジャーおよびオフセットを持つセグメント上の点の位置

- 7-16 オフセットで発生する位置参照のあいまいさ

- 7-17 複数の投影点

- 7-18 標準フォーマットからLRSフォーマットへの線ストリングの変換

- 7-19 許容差の影響を受けるクリップ操作のセグメント

- 7-20 LRSの例: 高速道路

- 8-1 空間マイニングおよびOracle Data Mining

- 11-1 Spatialジオコーディング・サービスを使用した基本的なアクション・フロー

- 13-1 Spatialルーティング・エンジンを使用した基本的なアクション・フロー

- 15-1 Web Feature Serviceのアーキテクチャ

- 16-1 CSWのアーキテクチャ

- 24-1 円弧の許容差

- 24-2 SDO_GEOM.SDO_DIFFERENCE

- 24-3 SDO_GEOM.SDO_INTERSECTION

- 24-4 SDO_GEOM.SDO_UNION

- 24-5 SDO_GEOM.SDO_XOR

- 25-1 ジオメトリ・セグメントの変換

- 32-1 ジオメトリの簡略化

表一覧

- 1-1 3次元ジオメトリのSDO_GEOMETRY属性

- 1-2 Spatialによって作成される事前定義のユーザー・アカウント

- 2-1 有効なSDO_GTYPE値

- 2-2 SDO_ELEM_INFOにおける値および意味

- 2-3 SDO_GEOMETRYのメソッド

- 2-4 SDO_TIN型の属性

- 2-5 TINブロック表の列

- 2-6 SDO_PC型の属性

- 2-7 点群ブロック表の列

- 2-8 xxx_SDO_INDEX_INFOビューの列

- 2-9 xxx_SDO_INDEX_METADATAビューの列

- 2-10 Rツリー空間索引データ表の列

- 2-11 ユーザー定義の単位で使用するSDO_UNITS_OF_MEASURE表のエントリ

- 3-1 ST_xxxファンクションと同等のSpatialの機能

- 3-2 注釈テキストのメタデータ・ビューの列

- 5-1 データ、索引次元および問合せサポート

- 6-1 SDO_COORD_AXES表

- 6-2 SDO_COORD_AXIS_NAMES表

- 6-3 SDO_COORD_OP_METHODS表

- 6-4 SDO_COORD_OP_PARAM_USE表

- 6-5 SDO_COORD_OP_PARAM_VALS表

- 6-6 SDO_COORD_OP_PARAMS表

- 6-7 SDO_COORD_OP_PATHS表

- 6-8 SDO_COORD_OPS表

- 6-9 SDO_COORD_REF_SYS表

- 6-10 SDO_COORD_SYS表

- 6-11 SDO_CRS_COMPOUNDビュー

- 6-12 SDO_CRS_ENGINEERINGビュー

- 6-13 SDO_CRS_GEOCENTRICビュー

- 6-14 SDO_CRS_GEOGRAPHIC2Dビュー

- 6-15 SDO_CRS_GEOGRAPHIC3Dビュー

- 6-16 SDO_CRS_PROJECTEDビュー

- 6-17 SDO_CRS_VERTICALビュー

- 6-18 SDO_DATUM_ENGINEERINGビュー

- 6-19 SDO_DATUM_GEODETICビュー

- 6-20 SDO_DATUM_VERTICALビュー

- 6-21 SDO_DATUMS表

- 6-22 SDO_ELLIPSOIDS表

- 6-23 SDO_PREFERRED_OPS_SYSTEM表

- 6-24 SDO_PREFERRED_OPS_USER表

- 6-25 SDO_PRIME_MERIDIANS表

- 6-26 SDO_UNITS_OF_MEASURE表

- 6-27 EPSGの表名とOracle Spatialの表名

- 6-28 MDSYS.CS_SRS表

- 6-29 MDSYS.SDO_ANGLE_UNITSビュー

- 6-30 SDO_AREA_UNITSビュー

- 6-31 MDSYS.SDO_DATUMS_OLD_FORMAT表およびSDO_DATUMS_OLD_SNAPSHOT表

- 6-32 MDSYS.SDO_DIST_UNITSビュー

- 6-33 MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表およびSDO_ELLIPSOIDS_OLD_SNAPSHOT表

- 6-34 MDSYS.SDO_PROJECTIONS_OLD_FORMAT表およびSDO_PROJECTIONS_OLD_SNAPSHOT表

- 7-1 高速道路のフィーチャとLRSの機能

- 11-1 正式な住所表現の属性

- 11-2 ジオコーディング操作の一致モード

- 11-3 ジオコーディング操作の一致コード

- 11-4 ジオコードされた住所のエラー・メッセージの解釈

- 11-5 ジオコードされた住所の一致ベクトルの解釈

- 11-6 SDO_GEO_ADDR型の属性

- 11-7 GC_ADDRESS_POINT_<接尾辞>表

- 11-8 GC_AREA_<接尾辞>表

- 11-9 GC_COUNTRY_PROFILE表

- 11-10 GC_INTERSECTION_<接尾辞>表

- 11-11 GC_PARSER_PROFILES表

- 11-12 GC_PARSER_PROFILEAFS表

- 11-13 GC_POI_<接尾辞>表

- 11-14 GC_POSTAL_CODE_<接尾辞>表

- 11-15 GC_ROAD_<接尾辞>表

- 11-16 GC_ROAD_SEGMENT_<接尾辞>表

- 12-1 OPENLS_DIR_BUSINESSES表

- 12-2 OPENLS_DIR_BUSINESS_CHAINS表

- 12-3 OPENLS_DIR_CATEGORIES表

- 12-4 OPENLS_DIR_CATEGORIZATIONS表

- 12-5 OPENLS_DIR_CATEGORY_TYPES表

- 12-6 OPENLS_DIR_SYNONYMS表

- 13-1 EDGE表

- 13-2 NODE表

- 13-3 PARTITION表

- 13-4 SIGN_POST表

- 14-1 SpatialのOpenLSサービスの依存性

- 18-1 空間索引付けに使用する文

- 19-1 主な空間演算子

- 19-2 SDO_RELATE操作用の簡易演算子

- 19-3 SDO_JOIN演算子のparamsキーワード

- 19-4 SDO_NN Paramパラメータのキーワード

- 20-1 空間集計ファンクション

- 21-1 座標系変換のサブプログラム

- 21-2 変換したレイヤーを格納する表

- 22-1 CSWの処理操作のサブプログラム

- 23-1 住所データのジオコーディングを行うサブプログラム

- 24-1 ジオメトリ・サブプログラム

- 25-1 ジオメトリ・セグメントの作成および編集サブプログラム

- 25-2 ジオメトリ・セグメントの問合せおよび検査サブプログラム

- 25-3 ジオメトリ・セグメントの変換サブプログラム

- 27-1 OpenLSをサポートするサブプログラム

- 28-1 点群のサブプログラム

- 29-1 空間分析およびマイニングのサブプログラム

- 30-1 TINのサブプログラム

- 31-1 チューニング・サブプログラム

- 32-1 空間ユーティリティ・サブプログラム

- 33-1 WFSをサポートするサブプログラム

- 34-1 WFSの処理操作のサブプログラム

- 34-2 ジオメトリ・タイプとcolumnInfoパラメータ値(WFS 1.0.n)

- B-1 LocatorでサポートされているSpatial関連の機能

- B-2 LocatorでサポートされていないSpatialの機能

- B-3 Standard EditionまたはEnterprise Editionでの機能の可用性

はじめに

『Oracle Spatial開発者ガイド』では、Oracle SpatialおよびOracle Locatorを使用して、空間データの索引付けと格納、および空間アプリケーションの開発を行うための使用方法およびリファレンス情報を示します。

Oracle Spatialを使用するには、Oracle Database 11gのEnterprise Editionが必要です。複雑な空間データ管理が必要な、企業規模の空間情報システム、Webベース・アプリケーションおよび位置情報を基にしたワイヤレス・アプリケーションのデプロイメントの基盤となります。Oracle Locatorは、Oracle Database 11gのStandard EditionとEnterprise Editionの機能です。Oracle Locatorは、通常、インターネット・サービス・アプリケーション、ワイヤレス・サービス・アプリケーションおよびパートナ・ベースの地理情報システム(GIS)・ソリューションのサポートに必要なOracle Spatialの機能(Locatorの機能は付録Bを参照)のサブセットを提供します。

Oracle Database 11gのStandard EditionとEnterprise Editionの基本機能は同じです。ただし、拡張されたデータ型などの様々な拡張機能は、Enterprise Editionを併用した場合のみ使用可能です。一部の拡張機能は、オプションです。たとえば、Oracle Database 11gの表のパーティション化機能を使用するには、Enterprise EditionとPartitioning Optionを購入する必要があります。

Oracle Database 11g Standard EditionとOracle Database 11g Enterprise Editionの違いおよびユーザーが利用できる機能およびオプションの詳細は、『Oracle Database新機能ガイド』を参照してください。

対象読者

このマニュアルは、Oracle Databaseに空間データを格納する必要があるユーザーを対象としています。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

Oracleサポート・サービスでは、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info) か、聴覚に障害のあるお客様は (http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

関連ドキュメント

詳細は、次のドキュメントを参照してください。

- 『Oracle Spatial GeoRaster開発者ガイド』

- 『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』

- 『Oracle Database SQL言語リファレンス』

- 『Oracle Database管理者ガイド』

- 『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』

- 『Oracle Databaseエラー・メッセージ』(Spatialのメッセージは、13000から13499です。)

- 『Oracle Databaseパフォーマンス・チューニング・ガイド』

- 『Oracle Databaseユーティリティ』

- 『Oracle Databaseアドバンスト・レプリケーション』

- 『Oracle Databaseデータ・カートリッジ開発者ガイド』

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

Oracle Spatialの新機能

この項では、Oracle Databaseリリース11のOracle Spatialの新機能および変更された機能について説明します。

リリース11.2

Oracle Spatial 11g リリース2 (11.2)の新機能および変更された機能は次のとおりです。

WFSおよびCSWデータのアップグレード前後に索引のメンテナンスが必要

SpatialのWeb Feature Service (WFS)のサポートまたはCatalog Services for the Web (CSW)のサポートを使用している場合、および1つ以上のSYS.XMLTABLEINDEXの索引を使用して索引付けされた以前のリリースのデータがある場合は、アップグレード前に関連付けられた索引を削除し、アップグレード後に索引を再作成する必要があります。

詳細は、A.3項を参照してください。

新しい空間集計ファンクション

次の新しい空間集計ファンクションが追加されました(第20章を参照)。

- SDO_AGGR_SET_UNION

新しいSDO_GEOMサブプログラム

次の新しいサブプログラムがSDO_GEOMパッケージに追加されました(第24章を参照)。

- SDO_GEOM.SDO_ALPHA_SHAPE

- SDO_GEOM.SDO_CONCAVEHULL

- SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY

- SDO_GEOM.SDO_TRIANGULATE

新しいSDO_UTILサブプログラム

次の新しいサブプログラムがSDO_UTILパッケージに追加されました(第32章を参照)。

- SDO_UTIL.INTERIOR_POINT

- SDO_UTIL.FROM_KMLGEOMETRY

- SDO_UTIL.TO_KMLGEOMETRY

新しいSDO_WFS_LOCKサブプログラム

次の新しいサブプログラムがSDO_WFS_LOCKパッケージに追加されました(第33章を参照)。

- SDO_WFS_LOCK.EnableDBTxns

FIRST_ROWSヒントを使用したSDO_NN_DISTANCEのパフォーマンスの向上

SDO_NN_DISTANCE補助演算子の実装が変更され、FIRST_ROWSオプティマイザ・ヒントを指定するとパフォーマンスが向上するようになりました。FIRST_ROWSヒントの使用例は、第19章のSDO_NN_DISTANCEを参照してください。

SpatialアプリケーションでのGoogle Mapsのサポート

Oracle Spatialアプリケーションを使用したGoogle Mapsのサポートが強化されました。リリース11.2.0.2より、EPSGルールを宣言したり、Google互換の結果を生成するためにユースケース名USE_SPHERICALを指定する必要がないため、SRID 3785に代わって、便利な新しいSRID 3857を指定できます。もう1つのオプション(リリース11.2.0.1より有効ですが、前述のオプションの方が便利です)では、SDO_CS.TRANSFORMファンクションまたはSDO_CS.TRANSFORM_LAYERプロシージャを使用してUSE_SPHERICALのユース・ケース名を指定できます。これらのオプションのどちらも、Spatialで、その投影で楕円体の計算ではなく、(Google Mapsが使用する)球体の計算が使用されます。詳細は、6.12項「Google Mapsに関する考慮事項」を参照してください。

WFSを使用したWorkspace Managerのサポート

データベース・トランザクションおよびOracle Workspace Managerワークスペース・メンテナンス操作を、WFS(WFS-T)と同じセッションで実行できます。以前のリリースでは、1 つ以上のワークスペースのWFS問合せのみがサポートされていました。Workspace ManagerでのWFSの使用方法の詳細は、15.5項を参照してください。

空間索引を含むトランスポート可能な表領域でサポートされるクロスエンディアン操作

SDO_UTIL.INITIALIZE_INDEXES_FOR_TTSプロシージャ(第32章を参照)では、空間索引を含むトランスポート可能な表領域,が、エンディアン形式のプラットフォーム(ビッグエンディアンからリトルエンディアンまたはリトルエンディアンからビッグエンディアン)でサポートされるようになりました。これらは、以前のリリースではサポートされていませんでした。

非常に大きなジオメトリのサポート(1,048,576より多い縦座標)

1,048,576より多い縦座標を含むジオメトリをサポートしている場合、新しいスクリプトを使用できますが、そうすると、多くの追加作業、データベースのダウンタイム、およびいくつかの考慮事項と制限事項が発生します。詳細は、A.4項を参照してください。

SDO_UTIL.PREPARE_FOR_TTS 非推奨

Oracle Database リリース11.2で有効なSDO_UTIL.PREPARE_FOR_TTSプロシージャは、非推奨となっています。トランスポータブル表領域のエクスポート操作を実行する前に、このプロシージャをコールする必要はありません。

GC_ADDRESS_POINT表

GC_ADDRESS_POINT_<suffix>表(たとえば、GC_ADDRESS_POINT_US)は、住所の実際の緯度と経度の座標を格納します。そのため、これを使用するとSpatialのジオコーダでより正確な位置を提供することができます。GC_ADDRESS_POINT表はジオコーディングに必要ではありませんが、この表が存在する場合は、ジオコーダによって自動的に使用され、結果が改善されます。この表およびこの表に関連付けられた索引については、11.5.1項を参照してください。

リリース11.1

Oracle Spatial 11g リリース1 (11.1)の新機能および変更された機能は次のとおりです。

3次元のジオメトリのサポート

1.11項で説明しているように、Oracle Spatialでは、3次元のジオメトリ・オブジェクトの作成と格納をサポートしています。

Webサービスのサポートの拡張: ビジネス・ディレクトリ、Web Feature Service、カタログ・サービスおよびOpenLS

SpatialのWebサービスに対するサポートが拡張されました。Webサービスを使用すると、Oracle Spatialアプリケーションの開発者は、アプリケーション・ユーザーに対してフィーチャ・データおよびメタデータをWeb経由で提供できます。第10章では、Webサービスに対するサポートと、全体的な要件および考慮事項について説明します。Webサービスを介してサポートされる新機能については、次に示す章で説明します。

- 第12章「ビジネス・ディレクトリ(イエロー・ページ)のサポート」

- 第14章「OpenLSのサポート」

- 第15章「Web Feature Service(WFS)のサポート」

- 第16章「Catalog Services for the Web(CSW)のサポート」

ルーティング・エンジン機能の強化

ルーティング・エンジンは次の点が強化されました。

- マヌーバ当たりの時間およびジオメトリ

- 長いIDのサポート

- ルート・レベルとセグメント・レベルの両方でのエッジIDのサポート

- 運転方向の生成機能の向上

ルーティング・エンジンについては、第13章を参照してください。

SQL Multimedia型

SQL Multimedia空間型(ST_xxx)に対するサポートが強化されました。これらの型は、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』で指定されています。これらの型に対するOracle Spatialのサポートについては、第3章を参照してください。

注釈テキスト

Oracle Spatialは、『OpenGIS Implementation Specification for Geographic information - Simple feature access - Part 1: Common architecture』で指定されているアノテーション・テキストをサポートするようになりました。このサポートについては、3.5項を参照してください。

RELAX_POSTAL_CODEと同等なジオコーディング操作のDEFAULT一致モード

ジオコーディング操作のDEFAULT一致モードは、RELAX_POSTAL_CODEモードと同等になりました。以前のリリースでは、このモードはRELAX_BASE_NAMEモードと同等でした。ジオコーディング操作の一致モードについては、11.1.2項を参照してください。

SDO_GEOR_ADDRの新しいMatchVector属性

MatchVectorは、SDO_GEO_ADDRオブジェクト型の最後の属性として追加されました。この属性は、各住所の属性がジオコーディングに使用されるデータとどのように一致したかを示す文字列です。MatchVector属性は、表11-6にリストされており、11.1.5項で詳細に説明されています。

SDO_GEOM.CLOSEST_POINTSプロシージャ

この新しいSDO_GEOM.SDO_CLOSEST_POINTSプロシージャ(第24章を参照)は、2つのジオメトリ間の最短距離、および最短距離を示す点(各ジオメトリに1つ)を計算します。

SDO_UTIL.BEARING_TILT_FOR_POINTSプロシージャ

この新しいSDO_UTIL.BEARING_TILT_FOR_POINTSプロシージャ(第32章を参照)は、開始点から終了点への方位と傾きを計算します。

SDO_NN演算子を使用した距離によるフィルタリング

SDO_NN演算子に、paramパラメータのdistanceキーワードを使用して(第19章を参照)、最近傍を検索する距離を制限します(たとえば、'distance=10 unit=mile')。

第I部

概念および使用方法

このマニュアルは、次のように構成されています。

- 第I部では、Oracle Spatialの概念および使用方法について説明します。

- 第II部では、Oracle SpatialのWebサービスの概念および使用方法について説明します。

- 第III部では、Oracle Spatialの演算子、ファンクションおよびプロシージャに関するリファレンス情報について説明します。

- 第IV部では、補足情報(付録および用語集)を示します。

第I部は、Oracle Spatialを効率的に理解することを目的としています。まず、基本的な概念および方法について説明し、次に、より高度な内容(座標系、線形参照システム、ジオコーディング、拡張空間索引付けなど)について説明します。第I部に含まれる章は、次のとおりです。

- 第1章「Spatialの概念」

- 第2章「空間データ型およびメタデータ」

- 第3章「SQL Multimedia型のサポート」

- 第4章「空間データのロード」

- 第5章「空間データの索引付けおよび問合せ」

- 第6章「座標系(空間参照システム)」

- 第7章「線形参照システム」

- 第8章「空間分析およびマイニング」

- 第9章「空間索引付け機能の拡張」

1 Spatialの概念

Oracle Spatialは、Oracleのファンクションとプロシージャを統合した製品であり、Oracle Databaseでの空間データの格納、アクセスおよび分析を短時間で効率的に処理することを目的としています。

空間データは、実際のオブジェクトまたは概念的なオブジェクトの本質的な位置特性情報を、それらが存在する実際の領域または概念的な領域に関連付けて表現します。

この章の内容は次のとおりです。

- 1.1項「Spatial製品とは」

- 1.2項「オブジェクト・リレーショナル・モデル」

- 1.3項「空間データの概要」

- 1.4項「ジオメトリ・タイプ」

- 1.5項「データ・モデル」

- 1.6項「問合せモデル」

- 1.7項「空間データの索引付け」

- 1.8項「空間関係およびフィルタ処理」

- 1.9項「空間演算子、空間プロシージャおよび空間ファンクション」

- 1.10項「空間集計ファンクション」

- 1.11項「3次元の空間オブジェクト」

- 1.12項「ジオコーディング」

- 1.13項「Spatial Java Application Programming Interface(API)」

- 1.14項「Spatialによって作成される事前定義のユーザー・アカウント」

- 1.15項「パフォーマンスおよびチューニングの情報」

- 1.16項「OGCおよびISOへの準拠」

- 1.17項「Spatialのリリース(バージョン)番号」

- 1.18項「表の空間的な有効化」

- 1.19項「Spatialメタデータの移動(MDSYS.MOVE_SDO)」

- 1.20項「空間アプリケーションのハードウェア要件の考慮事項」

- 1.21項「Spatialのエラー・メッセージ」

- 1.22項「Spatialの例」

- 1.23項「Spatialおよび関連機能のREADMEファイル」

1.1 Spatial製品とは

Oracle Spatialは、Spatialとも呼ばれ、Oracle Databaseへの空間フィーチャの集合の格納、検索、更新および問合せを容易にするSQLスキーマおよびファンクションを提供します。Spatialは、次の要素で構成されています。

- サポートされているジオメトリ・データ・タイプの格納方法、構文および意味を規定するスキーマ(MDSYS)

- 空間索引付けメカニズム

- 対象領域問合せ、空間結合問合せおよび他の空間分析操作を実行する演算子、ファンクションおよびプロシージャ

- ユーティリティおよびチューニング操作用のファンクションおよびプロシージャ

- トポロジ内のノード、エッジおよびフェイスに関するデータを処理するためのトポロジ・データ・モデル(『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照)

- ネットワーク内のノードおよびリンクとしてモデル化される機能やオブジェクトを表現するためのネットワーク・データ・モデル(『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照)

- GeoRasterデータ(ラスター・イメージ・データ、グリッド化データ、および関連するメタデータ)の格納、索引付け、問合せ、分析および配信を可能にするGeoRaster機能(『Oracle Spatial GeoRaster開発者ガイド』を参照)

空間フィーチャの空間構成要素とは、ある座標空間においてその形を幾何学的に表現したものです。これをジオメトリと呼びます。

注意:
MDSYSスキーマの下では、どのパッケージ、表または他のオブジェクトも変更しないでください。(ただし、ユーザー定義の座標参照系を作成する必要がある場合は除きます(6.9項を参照)。)

1.2 オブジェクト・リレーショナル・モデル

Spatialでは、ジオメトリを表現するオブジェクト・リレーショナル・モデルがサポートされています。このモデルでは、ジオメトリ全体が、ベクトル・データ用のOracle固有の空間データ型(SDO_GEOMETRY)に格納されます。Oracle表には、1つ以上のSDO_GEOMETRY列を格納できます。オブジェクト・リレーショナル・モデルは、地理空間フィーチャについてOpen GIS ODBC/SQL仕様に定義されている、空間フィーチャ表の「SQL with Geometry Types」実装に対応しています。

オブジェクト・リレーショナル・モデルには、次のメリットがあります。

- 円弧、円、複合ポリゴン、複合線ストリング、最適化された矩形など、多くのジオメトリ・タイプのサポート

- 索引の作成とメンテナンスおよび空間問合せの実行が容易

- Oracle Databaseによる索引のメンテナンス

- 単一列でモデル化されたジオメトリ

- 最適なパフォーマンス

1.3 空間データの概要

Oracle Spatialは、位置情報アプリケーションおよび地理情報システム(GIS)・アプリケーションのユーザーが、簡単に無理のない形で空間データを管理できるように設計されています。Oracle Databaseに格納された空間データは、簡単に操作および取出しができ、データベースに格納された他のすべてのデータとの関連付けも可能です。

空間データの一般的な例としては、道路地図があります。道路地図は点、線およびポリゴンを含む2次元オブジェクトであり、都道府県などの行政的境界、都市および道路を表現できます。道路地図は地理情報を視覚化したものです。地表面に存在する行政的境界、都市および道路の位置は、レンダリング対象となるオブジェクトの相対位置と相対距離を維持したまま、2次元の画面または紙上に投影されます。

レンダリングされるこれらのオブジェクトの地表面位置(緯度と経度など)を示すデータが、空間データです。地図のレンダリングでは、この空間データを使用することによって、オブジェクトの位置を2次元の紙上に投影します。GISは、このような地表面と相関する空間データを格納、取出しおよびレンダリングする一般的な方法です。

Spatialを使用して格納できる空間データの種類には、GISデータ以外にコンピュータ支援設計(CAD)システムとコンピュータ支援製造(CAM)システムのデータがあります。CADおよびCAMシステムでは、地理的なスケールでオブジェクトを処理するのではなく、自動車のエンジンまたはプリント回路基板などの比較的小さいスケールを扱います。

これらのシステムの違いはデータのサイズと精度のみで、データの複雑さではありません。これらのすべてのシステムで同数の点データを処理することも考えられます。地理的なスケールでは、ある橋の位置に1/10インチ単位の誤差があっても、実際の道路工事の際には、問題が発生することはありせん。それに対して、エンジンのピストンの直径が1/10インチ単位でもずれてしまうと、エンジンは作動しません。

また、データの複雑さは、表現されている領域の絶対スケールとは無関係です。たとえば、多くのプリント回路基板の場合、その基板上に数千個のオブジェクトがエッチングされ、その小さい面積に道路の工事現場の青写真の詳細図より複雑な情報が含まれます。

これらのアプリケーションは、空間および非空間の両方の属性を持つフィーチャの集合について、格納、検索、更新または問合せのすべてを行います。非空間属性の名前の例には、soil_type、landuse_classificationおよびpart_numberがあります。空間属性は、そのフィーチャの形を、座標またはベクトル・ベースで表現するものです。

1.4 ジオメトリ・タイプ

ジオメトリは、直線セグメントまたは円弧を結合した頂点を順番につなげたものです。ジオメトリの意味は、その型によって決定されます。Spatialは、いくつかの基本タイプ、および2次元を含む、次のタイプの集合で構成されるジオメトリをサポートしています。

- 点および点クラスタ

- 線ストリング

- N点ポリゴン

- 円弧線ストリング(すべての円弧は円の一部として生成されます。)

- 円弧ポリゴン

- 複合ポリゴン

- 複合線ストリング

- 円

- 最適化された矩形

2次元の点は、XとYの2つの座標値(経度および緯度である場合が多い)で構成される要素です。線ストリングは、線セグメントを定義する2点のペアの、1つ以上の集合で構成されます。ポリゴンは、閉じた輪を形成するように連結された複数の線ストリングで構成されます。たとえば、点で建物の位置を、線ストリングで道路または飛行経路を、多角形で都道府県、都市、区画地域または都市の街区を表現できます。

自己交差する線ストリングはサポートされますが、自己交差するポリゴンはサポートされません。自己交差する線ストリングは、ポリゴンを形成しません。自己交差する線ストリングでは、領域が暗黙的に指定されません。

図1-1に、ジオメトリ・タイプを示します。

図1-1 ジオメトリ・タイプ

Spatialでは、定義するオブジェクトの各頂点の定義に3つまたは4つの座標を使用する3次元および4次元のジオメトリ・タイプの保存および索引付けもサポートしています。3次元ジオメトリのサポートの詳細は、1.11項を参照してください。

1.5 データ・モデル

空間データ・モデルは、要素、ジオメトリおよびレイヤーで構成される階層型の構造体です。レイヤーはジオメトリで構成され、ジオメトリは要素で構成されます。

1.5.1 要素

要素は、ジオメトリの基本的構成単位です。サポートされる空間要素タイプは、点、線ストリングおよびポリゴンです。たとえば、要素を使用することによって、星座(点クラスタ)、道路(線ストリング)および都道府県の境界(ポリゴン)のモデルを作成できます。要素内の各座標は、XとYの値のペアとして格納されます。複合ポリゴンの外部の輪と0(ゼロ)個以上の内部の輪(穴)は、単一の要素とみなされます。

点データは1個の座標で構成されます。線データは要素の線セグメントを表現する2個の座標で構成されます。ポリゴン・データは複数の座標値ペア(ポリゴンの各線セグメントに対して、1つの頂点ペア)で構成されます。座標は、ポリゴンの周囲に沿って順に(外部の輪は反時計回り、内部の輪は時計回りで)定義されます。

1.5.2 ジオメトリ

ジオメトリ(またはジオメトリ・オブジェクト)は、空間フィーチャの表現であり、基本形要素を配列した集合をモデル化したものです。ジオメトリは、単一の要素、(サポートされている基本タイプの1つのインスタンス)または同種か異種の要素の集合で構成できます。群島を表現する場合に使用されるような複数ポリゴンは、同種の集合です。異種の集合とは、異なるタイプの要素の集合(点とポリゴンなど)です。

たとえば、ある町の建築予定地を示すジオメトリの例を考えます。このジオメトリは、穴のあいたポリゴンとして表現できます(河川、湖、または区画指定により建築できない地域が穴に相当します)。

1.5.3 レイヤー

レイヤーは、同じ属性セットを持つジオメトリの集合です。たとえば、あるGISにおいて3つのレイヤーが、それぞれ地形、人口密度および領域内の道路と橋のネットワーク(線および点)を表現する場合が考えられます。各レイヤーのジオメトリおよびそれに関連付けられた空間索引は、データベース内の標準表に格納されます。

1.5.4 座標系

座標系(空間参照システム)は、座標を位置に割り当て、そのような座標間の関連を確立するための手段を提供します。これによって、実際の空間における位置表現として、座標を変換することが可能になります。

すべての空間データには、座標系が関連付けられています。座標系は、地理参照(地表の特定の表現に関連)または非地理参照(デカルトで、地表の特定の表現に関連しない)のいずれかになります。座標系が地理参照の場合、デフォルトの測定単位(mなど)が関連付けられますが、指定した別の単位(マイルなど)で結果を自動的に戻すように、Spatialに指示できます。(サポートされている測定単位の詳細は、2.10項を参照してください。)

空間データは、デカルト座標系、測地(地理)座標系、投影座標系またはローカル座標系に関連付けができます。

- デカルト座標は、指定した基点からの点の位置を、2次元または3次元空間の相互に直交する軸を関連付けて測定する座標です。
座標系がジオメトリに明示的に関連付けられていない場合、デカルト座標系が想定されます。

- 測地座標(地理座標)は、角度を持つ座標(経度および緯度)であり、球体の極点の座標と密接に関連し、また、地球上の特定の測地データに関連付けて定義されます。(測地データは、地球の形を表現し、測地座標系の参照として機能します。)

- 投影座標は、地表の点を平面に数学的にマップした結果である平面的なデカルト座標です。このような数学的マッピングは、それぞれ異なる目的に使用されます。

- ローカル座標は、非地球(非地理参照)座標系のデカルト座標です。ローカル座標系は、通常、CADアプリケーションおよび現地測量に使用されます。

Spatialは、ジオメトリで操作を実行する場合、空間データに関連付けられた座標系に適切なデカルトまたは曲線計算モデルのいずれかを使用します。

Spatialでの座標系サポート(測地座標、投影座標、ローカル座標、座標系の変換など)の詳細は、第6章を参照してください。

1.5.5 許容差

許容差は、空間データに精度レベルを関連付けるために使用します。許容差は、(たとえば、丸めの誤差の調整のために、)2つの点が一致しない場合でも、2点が同一の点とみなされる最大距離に影響します。許容差には、0(ゼロ)より大きい正の数字を指定する必要があります。値の重要度は、空間データが測地座標系に関連付けられているかどうかによって異なります。(測地座標系および他の座標系の詳細は、1.5.4項を参照してください。)

- 測地データ(経度と緯度の座標によって識別されるデータなど)の場合、許容差はm単位になります。たとえば、許容差100は、100mの許容差を示します。測地データの許容差には、0.05 (5cm)以上の値を指定する必要があります。SDO_GEOM.RELATE、SDO_GEOM.SDO_DIFFERENCE、SDO_GEOM.SDO_INTERSECTION、SDO_GEOM.SDO_UNIONおよびSDO_GEOM.SDO_XORファンクションでは、測地データの許容差の値に0.05より小さい値を指定しても、0.05が使用されます(ただし、ジオメトリは許容差0.05で有効である必要があります)。

- 非測地データの場合、許容差は、データに関連付けられた座標系に関連付けられた単位での数値です。たとえば、測定単位がマイルの場合、許容差の値0.005は許容差0.005(1/200)マイル(約26フィート(7.9メートル))を示し、許容差の値2は許容差2マイルを示します。

いずれの場合も、許容差が小さいほど、データに関連付けられる精度は高くなります。

空間ブール演算(SDO_GEOM.SDO_UNION、SDO_GEOM.SDO_INTERSECTIONなど)およびSDO_GEOM.RELATEファンクションでは、16桁以上の精度を持つジオメトリについて、浮動小数点演算での精度不足が原因で、一貫性のない結果が生成されることがあります。精度の桁数は、たとえば許容差が0.0000000005に設定され、座標の整数部分が6桁(123456.4321など)であるとすると、精度は10+6つまり16桁という計算になります。このような場合は、空間演算を使用した結果に一貫性を持たせるため、使用する許容差をより大きく(小数点に続くゼロをより少なく)します。

許容差は、次の2つの項目で指定されます。

- レイヤーのジオメトリ・メタデータの定義(1.5.5.1項を参照)

- 特定のファンクションに対する入力パラメータ(1.5.5.2項を参照)

線形参照システム(LRS)データの許容差の詳細は、7.6項を参照してください。

1.5.5.1 レイヤーのジオメトリ・メタデータの許容差

レイヤーの次元情報には、許容差が含まれます。具体的には、xxx_SDO_GEOM_METADATAビューのDIMINFO列(2.8.3項を参照)には、次元ごとにSDO_TOLERANCE値が含まれ、この値は各次元で同じあることが必要です。

ファンクションがオプションのtoleranceパラメータを受け入れ、このパラメータがNULLまたは指定されていない場合は、レイヤーのSDO_TOLERANCE値が使用されます。2.1項の例の非測地データを使用すると、ジオメトリcola_bとcola_d間の実際の距離は0.846049894です。問合せでtoleranceパラメータ値を指定しないでSDO_GEOM.SDO_DISTANCEファンクションを実行すると、戻されるcola_bとcola_d間の距離の結果はレイヤーのSDO_TOLERANCE値によって異なります。次に例を示します。

- レイヤーのSDO_TOLERANCE値が0.005の場合、この問合せは0.846049894を戻します。

- レイヤーのSDO_TOLERANCE値が0.5の場合、この問合せは0(ゼロ)を戻します。
Spatialは、まず考慮する各ジオメトリの周りに許容差(0.5)の仮想的なバッファを構築します。この場合、cola_bおよびcola_dの周りのバッファがオーバーラップするため、結果が0(ゼロ)になります。(考慮対象の2つのジオメトリが異なる許容差を持つ場合、大きい方の値が仮想的なバッファ用に使用されます。)

したがって、次の2つのいずれかの方法を使用して、レイヤーのSDO_TOLERANCE値を選択できます。

- 値に、オブジェクト間の距離を問合せする場合の精度レベルを反映します。たとえば、距離の単位で0.8離れた2つの非測地ジオメトリを離れているとみなす必要がある場合、SDO_TOLERANCEを小さい値(0.05以下など)に指定します。

- 値に、レイヤー内のジオメトリに関連付けられた値の精度を反映します。たとえば、非測地レイヤー内のすべてのジオメトリが整数で定義され、距離の単位で0.8離れている2つのオブジェクトを離れているとみなさない場合は、SDO_TOLERANCEの値を0.5に指定すると適切です。すべての問合せでの精度を上げるには、toleranceパラメータを指定してデフォルトを上書きする必要があります。

非測地データの場合、2つ目の方法(レイヤーに存在するジオメトリの値の精度)のほとんどのインスタンスで、ジオメトリ定義の最高レベルの精度を指定し、次のレベルでSDO_TOLERANCE値を0.5に指定することをお薦めします。たとえば、ジオメトリが整数で定義されている(2.1項に簡単な例を示す)場合、適切な値は0.5です。ただし、ジオメトリが小数点第4桁までの数値(31.2587など)で定義されている場合、適切な値は0.00005です。

注意:
ジオメトリに、任意の点で幅が狭く、対辺の間の距離が提案された許容差より短いポリゴンが含まれている場合は、このガイドラインに従わないでください。許容差が、すべてのポリゴンのすべての2辺間の最短距離より小さいことを確認してください。
また、実際はジオメトリが有効であるにもかかわらず、ジオメトリの挿入または更新で「invalid geometry」エラーが発生した場合は、許容差の精度を上げることを検討してください(たとえば、0.00005から0.000005に変更)。

1.5.5.2 入力パラメータとしての許容差

多くの空間ファンクションでtoleranceパラメータを指定でき、このパラメータは(指定した場合)、レイヤーのデフォルトの許容差を上書きします(1.5.5.1項を参照)。2点間の距離が許容差以下の場合、Spatialはその2つの点を単一の点とみなします。そのため、許容差には、空間データを認識させる精度を反映します。

たとえば、家から5km以内の距離にあるレストランを検索する場合を考えてみます。Maria's Pizzeriaが、家から5.1kmの場所にあるとします。空間データに測地座標系が関連付けられており、許容差に100 (または500など、これ以上の値)を使用して5km以内にあるすべてのレストランを検索するように指定した場合、5.1kmは5km (5000m)から100m以内であるためMaria's Pizzeriaは含まれます。許容差を100未満(50など)に指定した場合、Maria's Pizzeriaは含まれません。

各ケースの最適値はデータを使用するアプリケーションの種類によって異なりますが、通常、空間ファンクションの許容差は非常に小さい値です。1.5.5.1項に示す許容差のガイドラインを参照してください。また、すべての入力ジオメトリが有効であることを確認します。(ジオメトリ・データが有効でないと、空間ファンクションは予測どおりに動作しないことがあります。)

ジオメトリ・レイヤーの次元情報配列からの許容差値を明示的に使用する必要があり、かつ1つのサブプログラムにtolerance (またはtol)パラメータを使用する形式とdimパラメータを使用する形式がある場合は、dimの形式を使用します。次の例で、最初の文では次元情報配列からの許容差値を使用し、2番目の文では許容差値を数値で指定しています(0.005)。

-- Return the area of the cola_a geometry.

SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, m.diminfo)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_a';

SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, 0.005) FROM cola_markets c
WHERE c.name = 'cola_a';

1.6 問合せモデル

Spatialでは、空間問合せおよび空間結合を解決するために、2層問合せモデルを使用します。2層問合せとは、問合せの解決のために実行される2種類の別々の処理を指します。両方を組み合せた処理が実行されると、完全一致の結果セットが戻されます。

この2つの処理を、1次および2次フィルタ処理と呼びます。

- 1次フィルタを使用すると、候補レコードを高速に選択した後で、その結果セットを2次フィルタに渡すことができます。1次フィルタでは、ジオメトリの近似値を比較して計算の複雑さを軽減させるため、これは低コスト化のためのフィルタであるといえます。1次フィルタでは、ジオメトリの近似値を比較するため、完全一致の結果セットのスーパーセットが戻されます。

- 2次フィルタでは、1次フィルタの結果であるジオメトリが、完全一致幾何学計算によって処理されます。2次フィルタによって、空間問合せに対する完全一致の回答が得られます。2次フィルタ処理は、計算が複雑であるという点では高コストですが、データ・セット全体ではなく、1次フィルタから渡された結果セットのみに限定して処理されます。

図1-2に、1次フィルタと2次フィルタの関係を示します。

図1-2 問合せモデル

図1-2に示すように、大量入力データセットに対する1次フィルタ処理は、少数の候補セットを生成します。この候補セットには、少なくとも完全一致の結果セットとそれ以上のレコードが含まれます。少数の候補セットに対する2次フィルタ処理では、完全一致の結果セットを生成します。

Spatialでは、1次フィルタ機能を実行するために空間索引を使用します。Spatialでは、1次フィルタと2次フィルタを常に両方とも使用する必要はありません。1次フィルタを使用するのみで十分な場合もあります。たとえば、マップ・アプリケーションのズーム機能では、可視部分の境界を表現する矩形に重なるデータを問い合せます。1次フィルタを使用すると、問合せのスーパーセットが高速に戻されます。その後マップ・アプリケーションは、クリッピング・ルーチンを適用することによって、ターゲット領域を表示します。

1次フィルタの目的は、データのサブセットを高速に作成し、2次フィルタでの処理の負荷を軽減させることです。そのため1次フィルタでは、できるだけ効率的に(選択的かつ高速に)処理する必要があります。これは、データの空間索引の特性に左右されます。

空間データの問合せの詳細は、5.2項を参照してください。

1.7 空間データの索引付け

Oracle Databaseのエンジンに導入された、空間索引の作成機能は、Spatial製品の重要な機能です。空間索引は、他の索引と同様、検索対象を限定するメカニズムを提供しますが、この場合は、交差および包含のような空間基準に基づきます。空間索引は、次の場合に必要です。

- 指定された点または対象領域(ウィンドウ問合せ)と重なる、索引付きデータ領域内のオブジェクトを検索する場合

- 空間的に相互作用(空間結合)する2つの索引付きデータ領域内のオブジェクトの組合せを検索する場合

大量のワークロードおよび演算子が含まれる空間索引については、現在、テスト中です。

これ以降の項では、Rツリー索引に関連する概念およびオプションについて説明します。

1.7.1 Rツリー索引

空間Rツリー索引では、最大4次元の空間データの索引付けが可能です。Rツリー索引は、図1-3に示すとおり、ジオメトリを囲む最小の矩形(最小境界矩形(MBR))によって各ジオメトリを近似させます。

図1-3 MBRに囲まれたジオメトリ

ジオメトリのレイヤーでは、Rツリー索引は、図1-4に示すとおり、レイヤー内のジオメトリのMBRに対する階層索引で構成されています。

図1-4 MBR上のRツリー階層索引

次に、図1-4について説明します。

- 1 から9 は、レイヤー内のジオメトリです。

- a、b、c およびd は、Rツリー索引のリーフ・ノードで、ジオメトリへのポインタとともにジオメトリの最小境界矩形を含みます。たとえば、a にはジオメトリ1 および2 のMBRが含まれ、b にはジオメトリ3 および4 のMBRが含まれます。

- A にはa およびb のMBRが含まれ、B にはc およびd のMBRが含まれます。

- ルートには、A およびB のMBR(図に示す領域全体)が含まれます。

このRツリー索引は、空間索引表(2.9項に示すUSER_SDO_INDEX_METADATAビューのSDO_INDEX_TABLE)に格納されます。また、Rツリー索引は、順序オブジェクト(USER_SDO_INDEX_METADATAビューのSDO_RTREE_SEQ_NAME)の管理も行い、索引に対する同時ユーザーによる同時更新が可能になります。

1.7.2 Rツリーの品質

Rツリー索引に影響する挿入および削除操作を何度も行うと、Rツリー構造の品質が低下し、これによって問合せのパフォーマンスが低下する場合があります。

Rツリーは、ツリーの異なる高さにノードを持つ階層ツリー構造です。問合せでのRツリー索引構造のパフォーマンスは、Rツリーの索引ノードの面積および周囲の長さに比例します。たとえば、レベル0 (ゼロ)の覆われた領域は、データ・ジオメトリの最小境界矩形が占める領域を表し、レベル1の領域は、リーフ・レベルのRツリー・ノードで覆われた領域を示します。ルート(最上位レベル)の領域とレベル0 (ゼロ)の領域の元の比率は、表の更新に基づいて時間の経過に応じて変化する可能性があります。その比率が悪化した(大幅に増えた)場合、索引を再作成すると問合せのパフォーマンスが向上する場合があります。

ジオメトリに影響を及ぼす多くの挿入、更新または削除操作を実行した際にSDO_FILTER操作のパフォーマンスが低下した場合、関連付けられたRツリー索引の品質の低下が原因である場合があります。SDO_TUNE.QUALITY_DEGRADATIONファンクション(第31章に記載)を使用して索引の品質が低下していないかを確認することができますが、このとき、ファンクションが2より大きい値を戻す場合は、索引を再構築することを検討してください。ただし、Oracleのキャッシュ方式およびその他の重要なOracle機能(Rツリーの索引問合せからI/Oオーバーヘッドを実質的に削除できる表固定など)が原因となることがあるため、問合せのパフォーマンス全体から見ると、Rツリーの索引の品質低下の値は重要でない場合もあります。

Rツリー索引を再作成するには、ALTER INDEX REBUILD文(第18章を参照)を使用します。

1.8 空間関係およびフィルタ処理

Spatialは、2次フィルタを使用して、データベース内のエンティティ間の空間関係を判断します。空間関係は、ジオメトリの位置に基づいています。空間関係の最も多くは、位相および距離に基づいています。たとえば、領域の境界は、その他の座標領域から領域を分割する曲線の集合で構成されています。領域の内部は、その境界上の点を除いて、領域のすべての点で構成されています。このため、領域内部の点ではなく境界の一部を共有している場合、2つの領域は接しているといえます。

2つの空間オブジェクトの距離は、それらのオブジェクトの点と点の最短距離です。2つのオブジェクトは、オブジェクト間の距離が指定された距離より短い場合、互いに指定された距離内にあるといえます。

空間関係を判断するために、Spatialにはいくつかの2次フィルタ・メソッドがあります。

- SDO_RELATE演算子は、位相的な基準で判断します。

- SDO_WITHIN_DISTANCE演算子は、2つの空間オブジェクトが互いに指定された距離内にあるかどうかを判断します。

- SDO_NN演算子は、最も近くにある空間オブジェクトを識別します。

これらの演算子の構文については、第19章を参照してください。

SDO_RELATE演算子は、点、線およびポリゴンのバイナリ位相関係を分類する、9交差モデルを実装します。各空間オブジェクトには、内部、境界および外部があります。境界は、内部と外部を分ける点または線で構成されます。単一線ストリングの境界は、その終了点で構成されています。ただし、終了点が重なる(同じ点である)場合、その線ストリングには境界が存在しません。複数線ストリングの境界は、それを構成する各線ストリングの終了点です。ただし、終了点が重なる場合、奇数回重なる終了点のみが境界になります。ポリゴンの境界は、ポリゴンの周囲を描く線です。内部はオブジェクト内にあり、境界上にはない点で構成され、外部はオブジェクト内にはない点で構成されます。

オブジェクトAには3つの構成要素(境界Ab、内部Aiおよび外部Ae)があり、どのようなオブジェクトの組合せにも、それらの構成要素間には、9つの相互作用の可能性があります。構成要素の組合せには、空(0)または空ではない(1)セットの交差があります。2つのジオメトリ間で相互作用するセットは、交差する構成要素の組合せを指定する9交差マトリックスによって表現されます。図1-5に、互いに接している2つのポリゴンの9交差マトリックスを示します。このマトリックスによって、行優先形式(行を主にした順序で、ビット列を表記する形式)「101001111」に生成された、次のビット・マスクが得られます。

図1-5 9交差モデル

Max Egenhofer博士(Maine州立大学)およびその仲間による研究で発見された一部の位相関係には、彼らに関係のある名前が付けられています。Spatialでは、次の名前を使用します。

- DISJOINT: 境界および内部が交差しない。

- TOUCH: 境界は交差するが、内部は交差しない。

- OVERLAPBDYDISJOINT: 1つのオブジェクトの内部が他のオブジェクトの境界および内部と交差するが、その2つの境界は交差しない。この関係は、たとえば、1本の線がポリゴンの外側から始まり、ポリゴンの内側で終わる場合に発生します。

- OVERLAPBDYINTERSECT: 2つのオブジェクトの境界および内部が交差する。

- EQUAL: 2つのオブジェクトの境界および内部が同じである。

- CONTAINS: 1つのオブジェクトの内部および境界が完全にもう1つのオブジェクトの内部に含まれている。

- COVERS: 1つのオブジェクトの内部が、完全にもう1つのオブジェクトの内部または境界に含まれ、その2つのオブジェクトの境界が交差する。

- INSIDE: CONTAINSの逆。A INSIDE Bは、B CONTAINS Aを意味します。

- COVEREDBY: COVERSの逆。A COVEREDBY Bは、B COVERS Aを意味します。

- ON: 1つのオブジェクトの内部および境界が、もう1つのオブジェクトの境界上にある。この関係は、たとえば、1本の線がポリゴンの境界上にある場合に発生します。

- ANYINTERACT: オブジェクトがなんらかの形で接合する。

図1-6に、これらの位相関係を示します。

図1-6 位相関係

SDO_WITHIN_DISTANCE演算子では、2つの空間オブジェクトAおよびBが、互いに指定された距離内にあるかどうかが判断されます。この演算子は、まず、参照オブジェクトの周りに距離バッファDbを構成します。その後、AとDbが結合していないことを確認します。オブジェクトの距離バッファは、そのオブジェクトから指定距離内にあるすべての点で構成されます。図1-7に、点、線およびポリゴンの距離バッファを示します。

図1-7 点、線およびポリゴンの距離バッファ

次に、図1-7に示す点、線およびポリゴンのジオメトリについて説明します。

- 破線は、距離バッファを表します。オブジェクトの角の近くで、どのようにバッファが丸められるかに注意してください。

- 右のジオメトリは、穴のあるポリゴンです。大きい矩形はポリゴンの外部の輪で、小さい矩形はポリゴンの内部の輪(穴)です。大きい矩形の外側の破線は外部の輪に対するバッファで、小さい矩形の内側の破線は内部の輪に対するバッファです。

SDO_NN演算子は、指定したジオメトリに最も近いジオメトリ列から、指定した数のオブジェクト(たとえば、公園に最も近いレストラン5件)を戻します。2つのオブジェクトの近さを判断するには、各オブジェクトの領域上にある2点間の最短距離が使用されます。

1.9 空間演算子、空間プロシージャおよび空間ファンクション

SpatialのPL/SQL Application Program Interface(API)には、いくつかの演算子と多くのプロシージャおよびファンクションが含まれています。

SDO_FILTERやSDO_RELATEなどの空間演算子では、空間索引を使用するため、パフォーマンスが最適化されます。(空間演算子では、最初のパラメータのジオメトリ列に、空間索引が定義されている必要があります。)空間演算子は、問合せのWHERE句で使用する必要があります。演算子の最初のパラメータには検索するジオメトリ列を指定し、2番目のパラメータには問合せウィンドウを指定します。問合せウィンドウとジオメトリ列の座標系が異なる場合は、Spatialによって暗黙的な座標系変換が実行されます。空間演算子の詳細は、第19章を参照してください。

空間プロシージャと空間ファンクションは、PL/SQLパッケージ内のサブプログラム(SDO_GEOM、SDO_CS、SDO_LRSなど)として提供されます。これらのサブプログラムでは、空間索引を定義する必要がなく、空間索引を定義しても使用されません。これらのサブプログラムは、WHERE句または副問合せで使用できます。空間プロシージャまたは空間ファンクションで2つのジオメトリが入力パラメータとして使用される場合は、両方のジオメトリの座標系が同じである必要があります。

注意:
Spatial and Graphの演算子やサブプログラムに対する文字列(VARCHAR2)パラメータの中に数値がある場合は、ロケールにかかわらず、小数点にはピリオド(.)を使用する必要があります。例: 'distance=3.7'

空間演算子、空間プロシージャおよび空間ファンクションを使用する場合、パフォーマンスに関する次のガイドラインに従ってください。

- 演算子と、プロシージャまたはファンクションが比較可能な操作を実行し、その演算子が要件を満たす場合は、その演算子を使用します。たとえば、特に必要がないかぎり、SDO_GEOM.RELATEではなくSDO_RELATEを使用し、SDO_GEOM.WITHIN_DISTANCEではなくSDO_WITHIN_DISTANCEを使用します。

- 演算子には、常に大文字のTRUEを指定します。つまり、<> 'FALSE'や= 'true'ではなく、= 'TRUE'を指定します。

- 問合せウィンドウが表から取り出された場合は、演算子に/*+ ORDERED */オプティマイザ・ヒントを使用します。(複数のウィンドウが表から取り出された場合は、このヒントを使用する必要があります。)詳細は、各演算子の「使用上の注意」および「例」を参照してください。

トポロジで演算子を使用する方法は、『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照してください。

1.10 空間集計ファンクション

SQLには、SQL問合せの結果を集計するために使用される、集計ファンクションが存在します。次の例では、SUM集計ファンクションを使用して、部門ごとの従業員の給与を集計します。

SELECT SUM(salary), dept
FROM employees
GROUP BY dept;

Oracle Spatialの集計ファンクションでは、ジオメトリ・オブジェクトを伴うSQL問合せの結果を集計できます。空間集計ファンクションでは、SDO_GEOMETRY型のジオメトリ・オブジェクトが戻されます。たとえば、(2.1項の定義およびデータを使用して)次の文を実行すると、表内に存在するすべてのジオメトリの最小境界矩形が戻されます。

SELECT SDO_AGGR_MBR(shape) FROM cola_markets;

次の例では、cola_dを除くすべてのジオメトリの和集合が戻されます。

SELECT SDO_AGGR_UNION(SDOAGGRTYPE(c.shape, 0.005))
FROM cola_markets c WHERE c.name <> 'cola_d';

空間集計ファンクションのリファレンス情報および使用例については、第20章を参照してください。

注意:
2次元と3次元の両方のジオメトリでサポートされているSDO_AGGR_MBR以外の空間集計ファンクションは、2次元ジオメトリでのみサポートされています。

1.10.1 SDOAGGRTYPEオブジェクト型

多くの空間集計ファンクションは、SDOAGGRTYPE型の入力パラメータを受け入れます。Oracle Spatialでは、次のとおりSDOAGGRTYPEオブジェクト型を定義します。

CREATE TYPE sdoaggrtype AS OBJECT (
geometry SDO_GEOMETRY,
tolerance NUMBER);

注意:
SDOAGGRTYPEを表内の列のデータ型として使用しないでください。この型は、空間集計ファンクションへのコールにのみ使用してください。

SDOAGGRTYPE定義のtolerance値は、特定の理由がないかぎり、ジオメトリのxxx_SDO_GEOM_METADATAビューのDIMINFO列に指定されたSDO_TOLERANCE値と同じである必要があります。許容差の詳細は、1.5.5項を参照してください。xxx_SDO_GEOM_METADATAビューの詳細は、2.8項を参照してください。

SDOAGGRTYPE定義のtoleranceの値は、空間集計ファンクションの結果に影響する可能性があります。図1-8に、2つの異なるtoleranceの値(ジオメトリ間の距離より小さい値と大きい値)を使用した、2つのジオメトリの空間集計和集合(SDO_AGGR_UNION)操作を示します。

図1-8 集計和集合操作の許容差

図1-8の最初の集計和集合操作では、toleranceが矩形間の距離より小さく、結果は2つの矩形で構成された複合ジオメトリになります。2つ目の集計和集合操作では、toleranceが矩形間の距離より大きく、結果は単一のジオメトリになります。

1.11 3次元の空間オブジェクト

Oracle Database リリース11.1より、Oracle Spatialでは、3次元の空間データの格納および取出しがサポートされています(扱うことができる3次元空間データは、点、点群(点の集合)、線、ポリゴン、面、ソリッドなど)。表1-1に、3次元のジオメトリに該当するSDO_GEOMETRY型のSDO_GTYPE属性および要素に関連する属性を示します。(SDO_GEOMETRY型については、2.2項を参照してください。)

表1-1 3次元ジオメトリのSDO_GEOMETRY属性

3-Dデータのタイプ

SDO_GTYPE

要素タイプ、SDO_ELEM_INFOでの解釈

点

3001

該当しません。SDO_POINT_TYPE属性に含まれる3次元の値をすべて指定します。

線

3002

2, 1

ポリゴン

3003

1003, 1: 平面の外部ポリゴン

2003, 1: 平面の内部ポリゴン

1003, 3: 平面の外部矩形

2003, 3: 平面の内部矩形

表面

3003

1006, 1:表面(次にポリゴンの要素情報が続きます)

コレクション

3004

2次元の場合と同様に扱われます

複数点(点群)

3005

1, n(nは点の数)

複数線

3006

2次元の場合と同様に扱われます

複数面

3007

1つ以上の表面の要素定義

ソリッド

3008

閉じられた1つの表面で形成される単純なソリッド: 1つの要素タイプ1007の後に、1つの要素タイプ1006(外部表面)が続き、オプションで1つ以上の要素タイプ2006(内部表面)が続きます。

隣接する複数の単純なソリッドで形成される複合ソリッド: 1つの要素タイプ1008(単純なソリッドの数を保持)の後に、任意の数の要素タイプ1007(それぞれが1つの単純なソリッド)が続きます。

マルチソリッド

3009

1つ以上の単純なソリッドの要素定義(要素タイプ1007)または複合ソリッド(要素タイプ1008)

次の空間演算子を使用する計算では、3次元すべてが使用されます。

- SDO_ANYINTERACT

- SDO_FILTER

- SDO_INSIDE(ソリッド・ジオメトリのみ)

- SDO_NN

- SDO_WITHIN_DISTANCE

他の演算子では、最初の2次元のみ使用されます。前述した演算子には、この項で後述するように、測地データを処理するときに高さの情報が無視されるものもあります。(空間演算子については、第19章を参照してください。)

SDO_GEOM.SDO_VOLUMEファンクションはソリッド・ジオメトリ(その名のとおり3次元のジオメトリ)にのみ適用されます。ただし、このファンクションを測地データで使用することはできません。(この関数の詳細は、第24章を参照。)その他のSDO_GEOMサブプログラムにおける3次元のジオメトリのサポートについては、表24-1「ジオメトリ・サブプログラム」に続く使用方法を参照してください。

3次元ジオメトリでの距離計算は次のように行われます。

- 測地データ(地理3Dデータ)の場合、距離計算は測地面上で行われます。

- 非測地データ(投影データまたはローカル・データ)の場合、距離計算は、3次元すべての測定単位が同じ場合のみ有効です。

どのファンクション、プロシージャまたは演算子でも3次元すべてを使用できるようにするには、地理3Dデータ(経度、緯度、楕円体高)を含む空間表に空間索引を作成する際に、CREATE INDEX文でPARAMETERS ('sdo_indx_dims=3')を指定する必要があります。このパラメータをCREATE INDEX文で指定しないと、2次元の索引が作成されます。

3次元すべてを使用するSpatialのファンクション、プロシージャおよび演算子では、距離および長さの計算は、高さ(標高)を適切に組み込んで行われます。たとえば、3次元の点が2つあり、1つの点はデカルト空間の基点(0,0,0)にあり、もう1つの点はY軸上のX=3の位置の、高さ(Z)が4の位置(3,0,4)にあるとします。

- 演算に3次元をすべて使用して計算すると、2点間の距離は5になります。(辺が3:4:5の直角三角形の斜辺と考えられます。)

- 演算に2次元のみ使用すると、2点間の距離は3になります。(つまり、3番目の次元である高さは無視されます。)

ただし、次の演算子およびサブプログラムでは、測地データを処理するときに、3次元ジオメトリでの距離が地上表現(たとえば、ビルの伏図の経度/緯度方向の広がり)で計算され、高さの情報は無視されます。

- SDO_NN演算子

- SDO_WITHIN_DISTANCE演算子

- SDO_GEOM.SDO_DISTANCEファンクション

- SDO_GEOM.WITHIN_DISTANCEファンクション

3次元データを使用した2次元問合せウィンドウでは、SDO_FILTER演算子は使用できますが、その他の空間演算子は使用できません。

様々なタイプの3次元空間ジオメトリの作成例は、2.7.9項を参照してください。そこでは、3次元ジオメトリの空間メタデータの更新方法および空間索引の作成方法についても例を示しています。

3次元の座標参照系のサポートの詳細は、6.5項を参照してください。

空間集計ファンクションおよびPL/SQLパッケージとサブプログラムの多くで、3次元はサポートされません。2次元ジオメトリのみがサポートされるものは次のとおりです。

- 空間集計ファンクション。SDO_AGGR_MBR(2次元と3次元の両方のジオメトリがサポートされる)を除きます。

- SDO_GEOM(ジオメトリ)サブプログラム。次に示すサブプログラム(2次元と3次元の両方のジオメトリがサポートされる)を除きます。

- SDO_GEOM.RELATE(ANYINTERACTマスクを使用)

- SDO_GEOM.SDO_AREA

- SDO_GEOM.SDO_DISTANCE

- SDO_GEOM.SDO_LENGTH

- SDO_GEOM.SDO_MAX_MBR_ORDINATE

- SDO_GEOM.SDO_MBR

- SDO_GEOM.SDO_MIN_MBR_ORDINATE

- SDO_GEOM.SDO_VOLUME

- SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

- SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

- SDO_GEOM.WITHIN_DISTANCE

- SDO_SAM(空間分析およびマイニング)サブプログラム

- SDO_MIGRATE.TO_CURRENTプロシージャ

1.11.1 表面のモデル化

表面には面積はあるものの、容積はありません。また、2次元または3次元を使用できます。表面は、通常、一連の平面領域で構成されます。

表面は、表面タイプのSDO_GEOMETRYオブジェクトとして、または表面が非常に大きい場合はSDO_TINオブジェクトとしてモデル化されます。SDO_GEOMETRYにおける表面タイプは、隣接する3次元ポリゴンによって境界となる連続領域を定義する不定形面の場合があります。SDO_GEOMETRY内のポリゴンの数は、SDO_ORDINATES_ARRAYに指定可能な座標の数によって制限されます。一方、SDO_TINオブジェクトの場合、表面は三角形網としてモデル化され、三角形の数に対する明示的な制限はありません。

表面は、三角形網として、Triangulated Irregular Network(TIN)と呼ばれる形式で格納されます。TINモデルでは、面は連続した重ならない三角形の集合として表現されます。各三角形の表面は、1つの平面で表現されます。三角形は質点と呼ばれる一連の点で構成されます。慎重に質点を選択した場合、TINでは表面のモデルが正確に表現されます。山の頂上、谷底、または崖の縁(頂上や底)など、表面の形状に大きな変化がある場所では、質点が適切に配置されます。

TINは通常、経度(x)、緯度(y)および標高(z)の各次元における座標値を指定する3次元の点を基に計算されます。OracleのTIN生成ソフトウェアでは、デローニ三角分割法が使用されますが、デローニ三角分割法のみを使用してTINデータを形成する必要はありません。

TINの一般的な操作手順は次のとおりです。

1. SDO_TIN_PKG.INITファンクションを使用して、TINを初期化します。

2. SDO_TIN_PKG.CREATE_TINプロシージャを使用して、TINを作成します。

3. 問合せが必要な場合は、SDO_TIN_PKG.CLIP_TINファンクションを使用して、TINをクリップします。

4. 必要に応じて、SDO_TIN_PKG.TO_GEOMETRYファンクションを使用します(たとえば、クリップ操作の結果を1つのSDO_GEOMETRYオブジェクトに変換する場合)。

TINの操作に使用するPL/SQLサブプログラムについては、第30章を参照してください。

JavaによるTINの操作の例は、次のファイルを参照してください。

$ORACLE_HOME/md/demo/TIN/examples/java/README.txt
$ORACLE_HOME/md/demo/TIN/examples/java/readTIN.java

1.11.2 ソリッドのモデル化

最も単純なソリッドの種類は、サイコロや積み木のような立方形として表現できます。複雑なソリッドとして錐台があります。これは(3面以上の)大きなピラミッドを底面と平行な平面で切り取って形作ったピラミッドです。錐台は、空間演算子の問合せウィンドウとしてのみ使用できます。錐台および立方体は、通常、ソリッド・タイプのSDO_GEOMETRYオブジェクトとしてモデル化されます。図1-9に、ビュー・ポイントからの距離が異なる2つの空間オブジェクトを含む問合せウィンドウとしての錐台を示します。

図1-9 空間オブジェクトの問合せウィンドウとしての錐台

点群(点の巨大な集合体)を使用して、ソリッド・ジオメトリおよび表面ジオメトリの形状または構造をモデル化することもできます。点群データを使用するほとんどのアプリケーションには、位置に基づく問合せと、位置および可視性の両方に基づく問合せ(可視性問合せ)という2種類の空間問合せのいずれかが含まれます。

点群データを使用するアプリケーションのほとんどは、ビュー・ポイントからの距離に基づいてオブジェクトを取得することで、データ転送の最小化を図ります。たとえば、図1-9では、オブジェクトBはオブジェクトAよりもビュー・ポイントから離れています。したがって、アプリケーションは、オブジェクトAを細部まで(高解像度で)取得し、オブジェクトBを大まかに(低解像度で)取得する可能性があります。ほとんどの場合、ビュー・ポイントからの距離が遠くなるほど、オブジェクトの数は著しく増加します。また、離れているオブジェクトが近くにあるオブジェクトより低解像度で取得されると、問合せによって戻されるバイト数およびオブジェクトのレンダリング時間は飛躍的に減少します。

点群の一般的な操作手順は次のとおりです。

1. SDO_PC_PKG.INITファンクションを使用して、点群を初期化します。

2. SDO_PC_PKG.CREATE_PCプロシージャを使用して点群を作成します。

3. 問合せが必要な場合は、SDO_PC_PKG.CLIP_PCファンクションを使用して、点群をクリップします。

4. 必要に応じて、SDO_PC_PKG.TO_GEOMETRYファンクションを使用します(たとえば、クリップ操作の結果を1つのSDO_GEOMETRYオブジェクトに変換する場合)。

点群の操作に使用するPL/SQLサブプログラムについては、第28章を参照してください。

Javaによる点群の操作の例は、次のファイルを参照してください。

$ORACLE_HOME/md/demo/PointCloud/examples/java/README.txt
$ORACLE_HOME/md/demo/PointCloud/examples/java/readPointCloud.java

1.11.3 3次元の最適化された矩形

3次元の矩形(3次元空間の矩形状のポリゴン)のすべての頂点を指定するかわりに、X、YおよびZ次元について最小座標値(min-corner)と最大座標値(max-corner)に対応する2つの角を指定するだけで矩形を表現できます。

この方法で定義された3次元の矩形の方向は、次のようになります。

- 矩形が<min-corner, max-corner>で指定された場合、法線は直交する3つ目の次元の正の方向を指します。

- 矩形が<max-corner, min-corner>で指定された場合、法線は直交する3つ目の次元の負の方向を指します。

たとえば、矩形がXY面にあり、頂点の順序が<min-corner, max-corner>の場合、法線は正のZ軸方向を指しますが、順序が<max-corner, min-corner>の場合、法線は負のZ軸方向を指します。

矩形におけるこれらの方向規則を使用して、次の要件を満たすように、矩形のmin-cornerとmax-cornerの各頂点の順序を適切に指定できます。

- 矩形がソリッドの一部である場合、ソリッドにおける各ポリゴンの法線は常にソリッドから外方向を指します。

- 矩形が面の一部である場合、内側の矩形ポリゴンはその外側の矩形ポリゴンとは反対の方向を向きます。

1.11.4 テクスチャ・データの使用

注意:
この項では、Spatialでテクスチャ・データを使用するために理解しておく必要のある概念について説明します。ただし、テクスチャ・メタデータはまだOracle Spatialに完全に実装されておらず、ビューアはまだサポートされていません。この項は、テクスチャのサポートがリリースされるときに更新されます。

テクスチャは、フィーチャの1つ以上の部分を表すイメージです。テクスチャは、一般的に、空間ジオメトリとして格納されているオブジェクトを表示するビジュアライザ・アプリケーション(ビューア)で使用されます。たとえば、テクスチャを使用してオフィス・ビル(3次元ソリッド)をビューアで表示し、色だけを使用する場合よりさらにリアルな視覚化を実現することができます。テクスチャは、2次元と3次元のジオメトリで使用できます。

最も単純なケースでは、矩形ジオメトリをテクスチャ・ビットマップで覆うことができます。ただし、多くの場合、次のケースの例のように、テクスチャ・ビットマップのサブリージョンのみが使用されます。

- テクスチャ・ビットマップに、同じビルの複数の側面、屋根および切妻屋根が含まれる場合。このケースでは、各ビットマップ部分が、ジオメトリの面の1つを覆っています。

- テクスチャ・ビットマップがビルの面上にある1つのパネルまたは窓を表し、ジオメトリ面がこのようなパネルまたは窓を15個備えた壁(3つの階それぞれに5個ずつ)を表す場合。このケースでは、1つのテクスチャ・ビットマップを面上に15回並べます。

- 面が矩形以外のサブ面(切妻屋根など)である場合。このケースでは、テクスチャ・ビットマップの一部(可能な三角形)のみが使用されます。

図1-10に、表示すると3つのテクスチャで構成される大きな矩形面を示します(各テクスチャは、面の様々な場所で複数回繰り返されます)。

図1-10 面とテクスチャ

次に、図1-10について説明します。

- イメージ全体は12個の小さな矩形面(表面ジオメトリ)で構成される大きな面であり、小さな矩形面はそれぞれ(A、BおよびCのラベルが付けられた)3つのイメージのうち1つで表すことができます。

- (A、BおよびCのラベルが付けられた)3つのテクスチャ・ビットマップを使用すると、すべての面を視覚化できます。このケースでは、ビットマップAを3回、ビットマップBを6回、ビットマップCを3回使用します。

図1-11に、三角形の面にマッピングされたテクスチャ・ビットマップを示します。

図1-11 面にマッピングされたテクスチャ

次に、図1-11について説明します。

- 面(表面ジオメトリ)は三角形です。(たとえば、ビルの側面または屋根に、この面が複数含まれる可能性があります。)

- テクスチャ・ビットマップ(イメージ)は矩形です(中央のボックスを参照)。

- テクスチャ・ビットマップの一部が面のイメージを表します。この部分は右側のボックス内で破線で表されています。
アプリケーションでは、テクスチャ・ビットマップ内で座標を指定して、適切な部分を面ジオメトリにマッピングする必要があります。

面を表すイメージ・データの記憶域要件を最小化するために、必要となる重複していないテクスチャのみのイメージを格納する必要があります。テクスチャの格納に使用するデータ型はSDO_ORDINATE_ARRAYであり、これはSDO_GEOMETRY型定義(2.2項を参照)で使用されます。

たとえば、図1-10の大きな面が次のように定義されているとします。

SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(1,1. 1,13, 13,13, 1,13, 1,1)
)

次のように定義されたMY_TEXTURE_COORDINATES表があるとします。

CREATE TABLE my_texture_coordinates (
texture_coord_id NUMBER PRIMARY KEY,
texture_name VARCHAR2(32),
texture_coordinates SDO_ORDINATE_ARRAY);

例1-1では、この表に3つのテクスチャ座標の定義を挿入しています。テクスチャごとに、テクスチャ座標が図1-10で示す適切な小さな矩形のうち1つを反映します(ただし、各テクスチャに対しては、適切な矩形のうち任意のものを選択できます)。図1-1では、各テクスチャのSDO_ORDINATE_ARRAY定義で、図1-10の上部近くにあるポリゴンを反映しています。

例1-1 テクスチャ座標の定義の挿入

INSERT INTO my_texture_coordinates VALUES(
1,
'Texture_A',
SDO_ORDINATE_ARRAY(1,9, 1,5, 5,12, 1,12, 1,9)
);

INSERT INTO my_texture_coordinates VALUES(
2,
'Texture_B',
SDO_ORDINATE_ARRAY(5,9, 9,9, 9,12, 5,12, 5,9)
);

INSERT INTO my_texture_coordinates VALUES(
3,
'Texture_C',
SDO_ORDINATE_ARRAY(1,12, 13,12, 13,13, 1,13, 1,12)
);

1.11.4.1 テクスチャ・データのスキーマに関する考慮事項

テクスチャ・ビットマップ(VARCHAR2形式のBLOBまたはURLとして格納)とテクスチャ座標配列(SDO_ORDINATE_ARRAY型を使用して格納)は、SDO_GEOMETRY列として同じ表に格納したり、個別の表に格納することができますが、特にテクスチャ・ビットマップについては、通常、個別の表を使用することをお薦めします。テクスチャ・ビットマップはフィーチャ(異なるオフィス・ビルなど)間で共有可能になる可能性が高いのですが、テクスチャ座標の定義はフィーチャ間で共有可能になる可能性が低くなります。(たとえば、多くのオフィス・ビルは同じ一般的なガラスの外観を共有しますが、窓の数と階数が同じビルはほとんどありません。テクスチャとアプリケーションの設計では、同じテクスチャのサブリージョンを使用するビルの数、または同じサイズの反復マトリクスでテクスチャを覆うビルの数を考慮する必要があります。)

例外は、テクスチャ・ビットマップ全体で矩形のジオメトリ面を覆うテクスチャ座標配列です。この場合は、テクスチャ座標配列を(0,0, 1,0, 1,1, 0,1, 1,1)として指定することができます(左下、右下、右上、左上および最後に左下の頂点を定義します)。多くのデータ・セットで、このテクスチャ座標配列を広く使用していますが、これはデータ・セットでは主に矩形面を使用し、各テクスチャ・ビットマップに対して1つのファサードを格納するためです。

個別の表を使用している場合は、外部キーを使用してこれらの表を表面ジオメトリにリンクできます(例1-2を参照)。

例1-2 テクスチャ座標の表、テクスチャの表および面の表の作成

-- One row for each texture coordinates definition.
CREATE TABLE my_texture_coordinates (
texture_coord_id NUMBER PRIMARY KEY,
texture_coordinates SDO_ORDINATE_ARRAY);

-- One row for each texture.
CREATE TABLE my_textures(
texture_id NUMBER PRIMARY KEY,
texture BLOB);

-- One row for each surface (each individual "piece" of a
-- potentially larger surface).
CREATE TABLE my_surfaces(
surface_id NUMBER PRIMARY KEY,
surface_geometry SDO_GEOMETRY,
texture_id NUMBER,
texture_coord_id NUMBER,
CONSTRAINT texture_id_fk
FOREIGN KEY (texture_id) REFERENCES my_textures(texture_id),
CONSTRAINT texture_coord_id_fk
FOREIGN KEY (texture_coord_id) REFERENCES
my_texture_coordinates(texture_coord_id));

1.11.5 3次元ジオメトリの検証

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTおよびSDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTサブプログラムで、2次元および3次元のジオメトリを検証できます。3次元ジオメトリの場合、これらのサブプログラムは、3次元ジオメトリ全体内で2次元ジオメトリに必要な検証(SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTの「使用上の注意」を参照)を行いますが、オブジェクト全体の3次元特性に固有の検証もいくつかの行います。

単純なソリッド(1つの外部表面と任意の数の内部表面を持つソリッド)の場合は、これらのサブプログラムで次の項目を確認します。

- 閉鎖性: ソリッドは閉じている必要があります。

- 到達可能性: ソリッドの各面は、隣接する各面と完全に共通なエッジを持つ必要があり、どの面からもすべての面に到達可能であることが必要です。

- 内部と外部の非連結性: 内部表面は、複数の点や線で外部表面と交差しないことが必要です。つまり、内部表面で領域が重なることはできません。

- 面への追加がないこと: ソリッドを構成する表面上に、追加の表面を定義することはできません。

- 方向: すべての面で、法線ベクトル(面法線つまり法線)が外部ソリッドの外側(外部ソリッドから離れた方向)を指すように頂点が配置されている必要があります。したがって、外部ソリッドの容積は0(ゼロ)より大きい必要があり、内部ソリッドの容積は0(ゼロ)より小さい必要があります。

複合ソリッド(1つ以上のソリッドが相互に結合したもの)の場合は、これらのサブプログラムによって次の項目が確認されます。

- 連結性: 複合ソリッドに含まれるすべてのソリッドは、1つ以上の面を共有している必要があります。

- 容積0(ゼロ)の交差: 複合ソリッドに含まれるソリッドの交差部分の容積が0(ゼロ)であることが必要です。

マルチソリッド(単純なソリッドまたは複合ソリッドで構成される1つ以上のソリッド)の場合は、これらのサブプログラムによって次の項目が確認されます。

- 非結合性: マルチソリッドに含まれる任意の2つのソリッドは、点または線を共有できますが、これ以外の方法で交差していないことが必要です。

1.12 ジオコーディング

ジオコーディングは、住所データの表を規格化された住所、位置およびその他のデータに変換するプロセスです。ジオコーディング操作の結果は、入力された住所または場所に対応する経度と緯度の座標のペアを含みます。たとえば、入力住所が22 Monument Square, Concord, MA 01742である場合、ジオコーディング操作の結果の経度と緯度の座標は、それぞれ-71.34937と42.46101(ジオコーディング・データ・プロバイダによって異なる)になります。

住所をジオコードすると、Oracle Spatialなどの空間エンジンを使用して、近接問合せまたは位置問合せを実行したり、Oracleのビジネス・パートナのツールおよびデータを使用して、デモグラフィック分析を行うことができます。また、ジオコードされたデータは、デモグラフィック情報に関連する区画、郵便番号、国コードなど、その他の空間データで使用することもできます。分析または問合せの結果は、Oracle Spatialに統合されているサード・パーティ・ソフトウェアを使用して、表形式のみでなく地図で表すことができます。

Oracle Spatialのジオコーディング機能の概念および使用方法については、第11章を参照してください。MDSYS.SDO_GCDR PL/SQLパッケージのリファレンス情報については、第23章を参照してください。

1.13 Spatial Java Application Programming Interface(API)

Oracle Spatialでは、次のパッケージが含まれるJava Application Programming Interface(API)を提供しています。

- oracle.spatial.geometry: Spatial SQL SDO_GEOMETRYデータ型(説明はこのマニュアルを参照)のサポートを提供します。

- oracle.spatial.georaster: GeoRasterの主要な機能のサポートを提供します(『Oracle Spatial GeoRaster開発者ガイド』を参照)。

- oracle.spatial.georaster.image: GeoRasterオブジェクトまたはGeoRasterオブジェクトのサブセットからJavaイメージを生成し、イメージを処理するためのサポートを提供します。これらの機能の詳細は、『Oracle Spatial GeoRaster開発者ガイド』を参照してください。

- oracle.spatial.georaster.sql: GeoRaster PL/SQL APIのラップのサポートを提供します(『Oracle Spatial GeoRaster開発者ガイド』を参照)。

- oracle.spatial.network: Oracle Spatialネットワーク・データ・モデル(『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照)のサポートを提供します。

- oracle.spatial.network.lod: Oracle Spatialネットワーク・データ・モデルにおいて、ロード・オンデマンド方法でネットワーク分析を行うためのサポートを提供します(『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照)。

- oracle.spatial.network.lod.config: Oracle Spatialネットワーク・データ・モデルにおいて、ロード・オンデマンド(LOD)でのネットワーク分析を構成するためのサポートを提供します(『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照)。

- oracle.spatial.topo: Oracle Spatialトポロジ・データ・モデル(『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照)のサポートを提供します。

- oracle.spatial.util: 各種操作を実行するクラスを提供します。

これらのパッケージに含まれるクラスとインタフェースのリファレンス情報の詳細は、『Oracle Spatial Java API Reference』(Javadoc)を参照してください。

SpatialのJavaクラス・ライブラリは、<ORACLE_HOME>/md/jlib/ディレクトリ下の.jarファイルに格納されています。

1.14 Spatialによって作成される事前定義のユーザー・アカウント

Spatialでは、インストール中にジョブの実行に必要な最小限の権限を持つユーザー・アカウントが作成されます。これらのアカウントはロックされた期限切れの状態で作成されます。アカウントを使用する必要がある場合は、ロックを解除する必要があります。表1-2に、Spatialによって作成される事前定義のユーザー・アカウントを示します。

表1-2 Spatialによって作成される事前定義のユーザー・アカウント

ユーザー・アカウント

説明

MDDATA

ジオコーディング・アプリケーションおよびルーティング・アプリケーションで使用するデータを格納するためにOracle Spatialで使用されるスキーマです。これは、ジオコーディング・データおよびルーティング・データにアクセスするOracleソフトウェアのデフォルトのスキーマです。

SPATIAL_CSW_ADMIN_USR

Catalog Services for the Web(CSW)のアカウントです。データベースからすべてのレコード・タイプ・メタデータとすべてのレコード・インスタンスを、キャッシュされたレコード・タイプのメイン・メモリーにロードするために、Oracle Spatial CSWキャッシュ・マネージャで使用されます。

SPATIAL_WFS_ADMIN_USR

Web Feature Service(WFS)のアカウントです。データベースからすべての機能タイプ・メタデータとすべての機能インスタンスを、キャッシュされた機能タイプのメイン・メモリーにロードするために、Oracle Spatial WFSキャッシュ・マネージャで使用されます。

Oracle Databaseの事前定義のユーザー・アカウント(アカウント保護方法を含む)の詳細は、『Oracle Database 2日でセキュリティ・ガイド』を参照してください。

1.15 パフォーマンスおよびチューニングの情報

Oracle Spatialアプリケーションのパフォーマンスは、問合せ実行計画に影響するオプティマイザ・ヒントの使用など、多くの要因に影響されます。このマニュアルでは、特定の項目に関連するパフォーマンスおよびチューニングの情報を示します。たとえば、1.7.2項では、Rツリーの品質および問合せのパフォーマンスへの影響について説明します。1.9項では、空間演算子を使用すると、プロシージャやファンクションを使用する場合よりパフォーマンスが向上する理由について説明します。

Spatialのパフォーマンスおよびチューニングの追加情報は、Oracle Technology Network(OTN)で入手可能なホワイト・ペーパーを参照してください。多くの場合、これらのホワイト・ペーパーの情報はこのマニュアルの情報より詳細で、内部テストおよびSpatialユーザーからの参考を基に定期的に更新されます。OTNでこれらの情報を検索するには、次のURLに接続してください。

http://www.oracle.com/technetwork/database/options/spatialandgraph/

Spatialのパフォーマンスおよびチューニングに関するページを参照してください。

1.16 OGCおよびISOへの準拠

Oracle Databaseリリース10g バージョン10.1.0.4以降のOracle Spatialは、Open Geospatial Consortium(OGC)Simple Features Specification 1.1.1(Document 99-049)に準拠しています。Geometry Types Implementationに準拠しているということは、その仕様書の3.2項に詳細が述べられているすべての型、ファンクションおよび言語要素がOracle Spatialでサポートされていることを意味します。

すべてのOGCファンクション名に一致するシノニムが作成されますが、X(p Point)とY(p Point)に一致するシノニムは作成されません。これらのファンクションには、XおよびYのかわりに、OGC_XおよびOGC_Yを使用する必要があります。

Oracle Spatialは、次の国際標準化機構(ISO)の標準に準拠しています。

- ISO 13249-3 SQL Multimedia and Application Packages - Part 3: Spatial

- ISO 19101: Geographic information - Reference model (definition of terms and approach)

- ISO 19109: Geographic information - Rules for application schema (called the General Feature Model)

- ISO 19111: Geographic information - Spatial referencing by coordinates (also OGC Abstract specification for coordinate reference systems)

- ISO 19118: Geographic information - Encoding (GML 2.1 and GML 3.1.1)

- ISO 19107: Geographic information - Spatial schema (also OGC Abstract specification for Geometry)

ただし、Oracle Spatial and Graphの標準準拠テストは進行中であるため、いつでも最新バージョンの標準または新しい標準への準拠が通知される可能性があります。標準への準拠に関する最新情報は、http://www.oracle.com/technetwork/database/options/spatialandgraph/documentation/を参照してください。

1.17 Spatialのリリース(バージョン)番号

実行中のSpatialのリリース番号を確認するには、SDO_VERSIONファンクションを使用します。次に例を示します。

SELECT SDO_VERSION FROM DUAL;

SDO_VERSION
--------------------------------------------------------------------------------
11.2.0.2.0

1.18 表の空間的な有効化

SDO_GEOMETRY列がないが、ポイントの緯度/経度値などの位置に関連する情報を含んでいるOracle表を使用する場合、SDO_GEOMETRY列を追加し、レコードの既存(および現在以降)の位置に関連する情報を使用してSDO_GEOMETRY列の値を移入することで、表を空間的に有効化することができます。

次は、通常の表を空間的に有効化する基本手順です。これらは、通常の表に、表の各レコードに関連付けられた位置に関連する値を含む列があることを前提としています。

1. (SDO_GEOMETRY)列を追加するために表を変更します。

2. 位置に関連するデータの値を使用してSDO_GEOMETRYオブジェクトを移入するために、表を更新します。

3. 空間メタデータ(USER_SDO_GEOM_METADATA)を更新します。

4. 表に空間索引を作成します。

例1-3は、最初SDO_GEOMETRY列を含まないが、各レコードの緯度および経度の値(指定した都市内または近郊のポイント)を含む表(CITY_POINTS)を作成します。これは、表を空間的に有効化し、既存のレコードを更新してSDO_GEOMETRY情報を含めるだけでなく、新しいレコードを挿入してそれらを更新します。

例1-3 表の空間的な有効化

-- Original table without a spatial geometry column.
CREATE TABLE city_points (
city_id NUMBER PRIMARY KEY,
city_name VARCHAR2(25),
latitude NUMBER,
longitude NUMBER);

-- Original data for the table.
-- (The sample coordinates are for a random point in or near the city.)
INSERT INTO city_points (city_id, city_name, latitude, longitude)
VALUES (1, 'Boston', 42.207905, -71.015625);
INSERT INTO city_points (city_id, city_name, latitude, longitude)
VALUES (2, 'Raleigh', 35.634679, -78.618164);
INSERT INTO city_points (city_id, city_name, latitude, longitude)
VALUES (3, 'San Francisco', 37.661791, -122.453613);
INSERT INTO city_points (city_id, city_name, latitude, longitude)
VALUES (4, 'Memphis', 35.097140, -90.065918);

-- Add a spatial geometry column.
ALTER TABLE city_points ADD (shape SDO_GEOMETRY);

-- Update the table to populate geometry objects using existing
-- latutide and longitude coordinates.
UPDATE city_points SET shape =
SDO_GEOMETRY(
2001,
8307,
SDO_POINT_TYPE(LONGITUDE, LATITUDE, NULL),
NULL,
NULL
);

-- Update the spatial metadata.
INSERT INTO user_sdo_geom_metadata VALUES (
'city_points',
'SHAPE',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('Longitude',-180,180,0.5),
SDO_DIM_ELEMENT('Latitude',-90,90,0.5)
),
8307
);

-- Create the spatial index.
CREATE INDEX city_points_spatial_idx on city_points(SHAPE)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

-- Later, add new records to the table, using original INSERT format
-- (latitude and longitude, no spatial geometry object data).
-- Then update to include spatial geometry object information.
-- Tip: For efficiency, keep track of existing and new records, and use
-- a WHERE clause to restrict the UPDATE to new records (not shown here).

INSERT INTO city_points (city_id, city_name, latitude, longitude)
VALUES (5, 'Chicago', 41.848832, -87.648926);
INSERT INTO city_points (city_id, city_name, latitude, longitude)
VALUES (6, 'Miami', 25.755043, -80.200195);

UPDATE city_points SET shape =
SDO_GEOMETRY(
2001,
8307,
SDO_POINT_TYPE(LONGITUDE, LATITUDE, NULL),
NULL,
NULL
);

例1-3に関する注意は、次のとおりです。

- 列名が、UPDATE文のジオメトリ・コンストラクタ(この場合SDO_POINT)で正しい順序で指定されているかぎり、元の表にLATITUDEとLONGITUDEの値がこの順序で含まれていなくてもかまいません。(SDO_GEOMETRYオブジェクトでは、ポイントの経度が最初で、次が緯度です。)

- 検証はポイントと関係ないため、ジオメトリの検証はこの例に含まれていません。ただし、他の種類のジオメトリを持つ表を空間的に有効化する場合、最初と追加のジオメトリすべてを検証する必要があります。(検証を実行するには、SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTまたはSDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTを使用します。)

関連項目:

- 第2章「空間データ型およびメタデータ」

- 第5章「空間データの索引付けおよび問合せ」

1.19 Spatialメタデータの移動(MDSYS.MOVE_SDO)

データベース管理者(DBA)は、MDSYS.MOVE_SDOプロシージャを使用して、すべてのOracle Spatialメタデータ表を、指定したターゲット表領域に移動できます。デフォルトでは、Spatialメタデータ表は、リリース11.1以降のリリースではSYSAUX表領域に、また11.1より前のリリースではSYSTEM表領域に作成されます。

MDSYS.MOVE_SDOプロシージャの構文は次のとおりです。

MDSYS.MOVE_SDO(
target_tablespace_name IN VARCHAR2);

必須パラメータであるtarget_tablespace_nameは、Spatialメタデータ表の移動先となる表領域の名前を指定します。

このプロシージャは、DBAのみが使用する必要があります。

移動操作中、他のすべてのOracle Spatial機能は無効になります。

次の例は、Spatialメタデータ表をSYSAUX表領域に移動します。

EXECUTE MDSYS.MOVE_SDO('SYSAUX');

1.20 空間アプリケーションのハードウェア要件の考慮事項

この項では、Oracle Spatialを使用するアプリケーションに必要なディスク領域の容量およびCPUの能力に影響する一般的なガイドラインについて説明します。このガイドラインは、一般的なアプリケーションのサイズ指定に使用するその他のガイドラインに代わるものではなく、それらのガイドラインを補足することを目的としています。

空間アプリケーションの次の特性は、記憶域およびCPUの能力の要件に影響する可能性があります。

- データ量: 空間オブジェクトに必要な記憶域の量は、それらのオブジェクトの複雑さ(表現の精度および各オブジェクトの点の数)によって変わります。たとえば、100万の点オブジェクトを格納する場合に必要な領域は、100万の道路セグメントまたは土地区画を格納する場合より小さくなります。海岸線、断層線、川などの複雑な自然のフィーチャ、および地形のタイプによっては、高い精度で格納すると、必要な記憶域が非常に大きくなる可能性があります。

- 問合せの複雑さ:ある矩形内のすべてのフィーチャを選択するなどの単純なマッピング問合せのCPU要件は、ある海岸線と交差するすべての断層線を検索するなどのより複雑な問合せより低くなります。

1.21 Spatialのエラー・メッセージ

Spatialのエラー・メッセージの詳細は、『Oracle Databaseエラー・メッセージ』を参照してください。

Oracleエラー・メッセージのドキュメントは、HTML版のみが存在します。Oracle Database JP Documentation Libraryへのアクセス権限のみを所有している場合は、エラー・メッセージを範囲ごとに参照できます。特定の範囲のページを表示したら、ブラウザの「このページの検索」機能を使用して特定のメッセージを検索できます。インターネットに接続できる場合、Oracleオンライン・ドキュメントのエラー・メッセージ検索機能を使用して特定のエラー・メッセージを検索できます。

1.22 Spatialの例

Oracle Spatialでは、特定の処理をコーディングするための理解を深めたり、モデルを作成するための例を提供しています。Oracle Database Examplesメディアからすでにデモ・ファイルをインストールしている場合は(『Oracle Database Examplesインストレーション・ガイド』を参照)、次のディレクトリにいくつかの例があります。

$ORACLE_HOME/md/demo/examples

ディレクトリに含まれる次のファイルは、Oracle Call Interface(OCI)を使用するアプリケーションに有効です。

- readgeom.cおよびreadgeom.h

- writegeom.cおよびwritegeom.h

このマニュアルには、SQLおよびPL/SQLの例も記載されています。これらの例と一緒に各ファンクションまたは各プロシージャの参照情報も提供されています。また、表と索引の作成方法、ファンクションとプロシージャの組合せおよび拡張機能を説明するための単純な例も提供されています。

- 空間データの挿入、索引付けおよび問合せ(2.1項を参照)

- 座標系(空間参照システム)(6.13項を参照)

- 線形参照システム(LRS)(7.7項を参照)

- ファンクション索引のSDO_GEOMETRYオブジェクト(9.2項を参照)

- 複雑な問合せ(付録Cを参照)

1.23 Spatialおよび関連機能のREADMEファイル

README.txtファイルには、『Oracle Spatial開発者ガイド』(このマニュアル)、『Oracle Spatial GeoRaster開発者ガイド』、および『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』の内容を補足する情報が記載されています。このファイルは、次の場所にあります。

$ORACLE_HOME/md/doc/README.txt

2 空間データ型およびメタデータ

Oracle Spatialは、一連のオブジェクト・データ型、タイプ・メソッド、およびこれらのタイプを使用する演算子、ファンクションおよびプロシージャで構成されます。ジオメトリは、オブジェクトとしてSDO_GEOMETRY型の列の1行に格納されています。空間索引は、基本的なデータ定義言語(DDL)文(CREATE、ALTER、DROP)およびデータ操作言語(DML)文(INSERT、UPDATE、DELETE)を使用して作成およびメンテナンスされます。

この章では、最初に、空間データを挿入、索引付けおよび問合せする例を示します。この章の後半に記載するデータ型およびメタデータの詳細情報を読む前に、この例を参照しておくことをお薦めします。

この章の内容は次のとおりです。

- 2.1項「空間データの挿入、索引付けおよび問合せの例」

- 2.2項「SDO_GEOMETRYオブジェクト型」

- 2.3項「SDO_GEOMETRYのメソッド」

- 2.4項「SDO_GEOMETRYのコンストラクタ」

- 2.5項「TINに関連するオブジェクト型」

- 2.6項「点群に関連するオブジェクト型」

- 2.7項「ジオメトリの例」

- 2.8項「ジオメトリのメタデータ・ビュー」

- 2.9項「空間索引に関する構造」

- 2.10項「測定単位のサポート」

2.1 空間データの挿入、索引付けおよび問合せの例

ここでは、空間表の作成、データの挿入、空間索引の作成および空間問合せの実行についての例を示します。例では、第1章およびこの章の他の項で説明する内容の概念を示しています。

その内容は、ソフト・ドリンクのメーカーが持っている、数種類の製品(コーラ)に対する市場の関心度についての地域別検証データです。コーラは、その会社、競合他社および数社の共同で生産されています。それぞれの対象領域は、ユーザーが定義した次の基準を表現しています。たとえば、そのコーラが主にマーケットシェアを持つ領域、他社製品よりもシェアが少ない領域、または今後成長が期待できる領域です。それぞれの領域には、都市内の地区、都道府県内の地域、国などがあるとします。

図2-1に、4種類のコーラについての対象領域を示します。

図2-1 対象領域の例

例2-1では、次の処理を実行します。

- 空間データを格納するための表(COLA_MARKETS)を作成する

- 4つの対象領域(cola_a、cola_b、cola_c、cola_d)に行を挿入する

- USER_SDO_GEOM_METADATAビューを更新し、その領域の次元情報を反映する

- 空間索引(COLA_SPATIAL_IDX)を作成する

- 空間問合せを実行する

例2-1で説明する概念および定義の詳細は、この章の他の項を参照してください。

例2-1 空間データの挿入、索引付けおよび問合せの例

-- Create a table for cola (soft drink) markets in a
-- given geography (such as city or state).
-- Each row will be an area of interest for a specific
-- cola (for example, where the cola is most preferred
-- by residents, where the manufacturer believes the
-- cola has growth potential, and so on).
-- (For restrictions on spatial table and column names, see
-- Section 2.8.1 and Section 2.8.2.)

CREATE TABLE cola_markets (
mkt_id NUMBER PRIMARY KEY,
name VARCHAR2(32),
shape SDO_GEOMETRY);

-- The next INSERT statement creates an area of interest for
-- Cola A. This area happens to be a rectangle.
-- The area could represent any user-defined criterion: for
-- example, where Cola A is the preferred drink, where
-- Cola A is under competitive pressure, where Cola A
-- has strong growth potential, and so on.

INSERT INTO cola_markets VALUES(
1,
'cola_a',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
-- define rectangle (lower left and upper right) with
-- Cartesian-coordinate data
)
);

-- The next two INSERT statements create areas of interest for
-- Cola B and Cola C. These areas are simple polygons (but not
-- rectangles).

INSERT INTO cola_markets VALUES(
2,
'cola_b',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
)
);

INSERT INTO cola_markets VALUES(
3,
'cola_c',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)
)
);

-- Now insert an area of interest for Cola D. This is a
-- circle with a radius of 2. It is completely outside the
-- first three areas of interest.

INSERT INTO cola_markets VALUES(
4,
'cola_d',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4), -- one circle
SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11)
)
);

---------------------------------------------------------------------------
-- UPDATE METADATA VIEW --
---------------------------------------------------------------------------
-- Update the USER_SDO_GEOM_METADATA view. This is required
-- before the Spatial index can be created. Do this only once for each
-- layer (that is, table-column combination; here: COLA_MARKETS and SHAPE).

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'cola_markets',
'shape',
SDO_DIM_ARRAY(   -- 20X20 grid
SDO_DIM_ELEMENT('X', 0, 20, 0.005),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
),
NULL   -- SRID
);

-------------------------------------------------------------------
-- CREATE THE SPATIAL INDEX --
-------------------------------------------------------------------
CREATE INDEX cola_spatial_idx
ON cola_markets(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
-- Preceding statement created an R-tree index.

-------------------------------------------------------------------
-- PERFORM SOME SPATIAL QUERIES --
-------------------------------------------------------------------
-- Return the topological intersection of two geometries.
SELECT SDO_GEOM.SDO_INTERSECTION(c_a.shape, c_c.shape, 0.005)
FROM cola_markets c_a, cola_markets c_c
WHERE c_a.name = 'cola_a' AND c_c.name = 'cola_c';

-- Do two geometries have any spatial relationship?
SELECT SDO_GEOM.RELATE(c_b.shape, 'anyinteract', c_d.shape, 0.005)
FROM cola_markets c_b, cola_markets c_d
WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';

-- Return the areas of all cola markets.
SELECT name, SDO_GEOM.SDO_AREA(shape, 0.005) FROM cola_markets;

-- Return the area of just cola_a.
SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, 0.005) FROM cola_markets c
WHERE c.name = 'cola_a';

-- Return the distance between two geometries.
SELECT SDO_GEOM.SDO_DISTANCE(c_b.shape, c_d.shape, 0.005)
FROM cola_markets c_b, cola_markets c_d
WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';

-- Is a geometry valid?
SELECT c.name, SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(c.shape, 0.005)
FROM cola_markets c WHERE c.name = 'cola_c';

-- Is a layer valid? (First, create the results table.)
CREATE TABLE val_results (sdo_rowid ROWID, result VARCHAR2(2000));
CALL SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT('COLA_MARKETS', 'SHAPE',
'VAL_RESULTS', 2);
SELECT * from val_results;

2.2 SDO_GEOMETRYオブジェクト型

Spatialでは、空間オブジェクトのジオメトリの記述は、ユーザーが定義した表のSDO_GEOMETRYオブジェクト型の1列に、1行で格納されます。表にSDO_GEOMETRY型の列がある場合、その表に対して一意の主キーを定義する別の列または列のセットが必要です。このような表を、空間表または空間ジオメトリ表ともいいます。

Oracle Spatialでは、SDO_GEOMETRYオブジェクト型を次のとおり定義します。

CREATE TYPE sdo_geometry AS OBJECT (
SDO_GTYPE NUMBER,
SDO_SRID NUMBER,
SDO_POINT SDO_POINT_TYPE,
SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,
SDO_ORDINATES SDO_ORDINATE_ARRAY);

Oracle Spatialでは、SDO_GEOMETRY型定義で使用されるSDO_POINT_TYPE型、SDO_ELEM_INFO_ARRAY型およびSDO_ORDINATE_ARRAY型も次のとおり定義します。

CREATE TYPE sdo_point_type AS OBJECT (
X NUMBER,
Y NUMBER,
Z NUMBER);
CREATE TYPE sdo_elem_info_array AS VARRAY (1048576) of NUMBER;
CREATE TYPE sdo_ordinate_array AS VARRAY (1048576) of NUMBER;

SDO_ORDINATE_ARRAYの最大サイズは1,048,576であるため、SDO_GEOMETRYオブジェクト内の頂点の最大数は、頂点ごとの次元数によって決まります。その数は、2次元の場合は524,288、3次元の場合は349,525、4次元の場合は262,144になります。

次の項では、それぞれのSDO_GEOMETRY属性の意味および使用する場合の考慮点(2.2.6項)を説明します。

SDO_GEOMETRYオブジェクト型には、その属性にアクセスする場合に有効なメソッドがあります。これらのメソッドについては、2.3項を参照してください。

次の空間データ型については、それぞれの項またはマニュアルを参照してください。

- ジオコーディング用のデータ型(11.2項)

- Oracle Spatial GeoRaster用のデータ型(『Oracle Spatial GeoRaster開発者ガイド』)

- Oracle Spatialのトポロジ・データ・モデル用のデータ型(『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』)

2.2.1 SDO_GTYPE

SDO_GTYPE属性は、ジオメトリのタイプを示します。有効なジオメトリ・タイプはGeometry Object Model for the OGIS Simple Features for SQL仕様(曲面は例外として)で指定されたジオメトリに対応しています。数値はOGIS仕様の指定とは異なりますが、対応する名前および意味は同じです。

SDO_GTYPE値は、4桁の書式DLTTで表されます。各桁が示す内容は次のとおりです。

- D は、次元数(2、3または4)を識別します。

- Lは、(3または4の次元がメジャー値を含む)3次元線形参照システム(LRS)・ジオメトリの線形参照メジャー次元を識別します。非LRSジオメトリの場合、または最後の次元をLRSジオメトリのメジャーとして受け入れる場合(Spatialのデフォルト)は、0(ゼロ)を指定します。線形参照システム(LRS)については、第7章を参照してください。

- TT は、ジオメトリ・タイプ(有効値は00から09で、10から99は将来使用するために予約されています)を識別します。

表2-1に、有効なSDO_GTYPE値を示します。「ジオメトリ・タイプ」および「説明」の列に示す値は、OGIS仕様を反映しています。

表2-1 有効なSDO_GTYPE値

値

ジオメトリ・タイプ

説明

DL00

UNKNOWN_GEOMETRY

このジオメトリは、Spatialでは無視されます。

DL01

POINT

1つの点を含むジオメトリです。

DL02

LINEまたはCURVE

直線セグメントまたは円弧セグメント(あるいはその両方)を含むことができる1つの線ストリングを含むジオメトリです。(LINEおよびCURVEは、このコンテキストでは同義です。)

DL03

POLYGONまたはSURFACE

穴のある(または穴のない)1つのポリゴンを含むジオメトリ、注1または1つ以上のポリゴンで構成される1つの表面です。3次元ポリゴンでは、すべての点が同じ平面上にあることが必要です。

DL04

COLLECTION

ジオメトリは、異種の要素の集合です。COLLECTIONは、他のすべてのタイプを含むスーパーセットです。

DL05

MULTIPOINT

ジオメトリに1つ以上の点が存在しています。(MULTIPOINTは、POINTのスーパーセットです。)

DL06

MULTILINEまたはMULTICURVE

ジオメトリに1つ以上の線ストリングが存在しています。(MULTILINEおよびMULTICURVEは、このコンテキストでは同義であり、それぞれLINEおよびCURVEのスーパーセットです。)

DL07

MULTIPOLYGONまたはMULTISURFACE

ジオメトリに複数の非接続ポリゴン(複数の外側の境界)または複数の面が存在している場合があります(MULTIPOLYGONはPOLYGONのスーパーセットで、MULTISURFACEはSURFACEのスーパーセットです)。

DL08

SOLID

複数の面で構成されたジオメトリです。3次元空間で完全に囲まれています。立方形や錐台があります。

DL09

MULTISOLID

ジオメトリには、複数の非接続のソリッド(複数の外側の境界)が存在している場合があります。(MULTISOLIDは、SOLIDのスーパーセットです。)

1 穴のあるポリゴンでは、外側の境界を先に入力し、次に内側の境界を入力します。

表2-1の「値」列に示すD は、次元数(2、3または4)です。たとえば、SDO_GTYPE値2003は、2次元ポリゴンを示します。次元数は、それぞれの頂点(たとえば、2次元オブジェクトのX、Y)を表現する座標の数に影響します。

指定されたレイヤー(列)にあるすべてのジオメトリは、同じ次元数である必要があります。たとえば、2次元と3次元のデータを同じレイヤーに混在させることはできません。

Get_Dims、Get_LRS_DimおよびGet_Gtypeメソッドを使用すると、ジオメトリ・オブジェクトのSDO_GTYPEのDLTTの各桁を戻すことができます。これらのメソッドについては、2.3項を参照してください。

3次元ジオメトリのSDO_GTYPE値の詳細は、1.11項の表1-1を参照してください。

2.2.2 SDO_SRID

SDO_SRID属性を使用して、ジオメトリに関連付ける座標系(空間参照システム)を識別できます。SDO_SRIDがnullの場合、ジオメトリには座標系は関連付けられていません。SDO_SRIDがNULL以外である場合、SDO_COORD_REF_SYS表のSRID列の値が含まれている必要があります(6.7.9項を参照)。また、この値をUSER_SDO_GEOM_METADATAビューのSRID列に挿入する必要があります(2.8項を参照)。

ジオメトリ列にあるすべてのジオメトリは、その列に空間索引が作成される場合は、同じSDO_SRID値である必要があります。

座標系については、第6章を参照してください。

2.2.3 SDO_POINT

SDO_POINT属性は、属性X、Y、ZおよびすべてのNUMBER型を持つSDO_POINT_TYPEオブジェクト・タイプを使用して定義されます。(SDO_POINT_TYPEの定義の詳細は、2.2項を参照。)SDO_ELEM_INFO配列およびSDO_ORDINATES配列が両方ともNULLで、SDO_POINT属性がNULL以外である場合、X、YおよびZの値は点ジオメトリの座標であるとみなされます。そうでない場合、SDO_POINT属性はSpatialによって無視されます。点ジオメトリを適切な記憶域のSDO_POINT属性に格納する必要があります。レイヤーに点ジオメトリのみが存在する場合は、点ジオメトリをSDO_POINT属性に格納してください。

点ジオメトリおよびその挿入と問合せの例については、2.7.5項を参照してください。

注意:
線形参照システム(LRS)の点または方向付きの点の定義に、SDO_POINT属性を使用しないでください。LRSについては、第7章を参照してください。方向付きの点については、2.7.6項を参照してください。

2.2.4 SDO_ELEM_INFO

SDO_ELEM_INFO属性は、数の可変長配列を使用して定義されます。この属性によって、SDO_ORDINATES属性(2.2.5項を参照)に格納されている縦座標の解釈方法がわかります。

それぞれ3つの数値セットは、次のとおり解釈されます。

- SDO_STARTING_OFFSET -- この要素の最初の縦座標が保存されているSDO_ORDINATES配列内のオフセットを示します。オフセット値は0ではなく1から始まります。そのため、最初の要素の最初の縦座標はSDO_GEOMETRY.SDO_ORDINATES(1)になります。2つ目の要素がある場合、その要素の1つ目の縦座標はSDO_GEOMETRY.SDO_ORDINATES(n)の位置になります。ここで、nはSDO_ORDINATE_ARRAY定義内の位置を示します(たとえば、2.7.2項の図2-4に示すように、19は19番目の位置です)。

- SDO_ETYPE -- 要素のタイプを示します。表2-2に、有効な値を示します。
SDO_ETYPE値の1、2、1003および2003は、単純な要素とみなされます。それらは、SDO_ELEM_INFO配列の3つのエントリ1組によって定義されます。SDO_ETYPE値が1003および2003の場合、1桁目はexterior (1)またはinterior (2)を示します。

1003: ポリゴンの外部の輪(反時計回りで指定される必要がある)

2003: ポリゴンの内部の輪(時計回りで指定される必要がある)

注意:
単一ジオメトリのポリゴンの輪の要素には、SDO_ETYPE値として3を使用しないでください。単純なポリゴンが外部であるか内部であるかを判断できない場合にのみ、3を指定してください。その後、第26章で説明するSDO_MIGRATE.TO_CURRENTプロシージャを使用して、表またはレイヤーを現行の形式にアップグレードしてください。
1桁と4桁のSDO_ETYPE値を単一のジオメトリに混在させることはできません。

SDO_ETYPE値の4、1005、2005、1006および2006は、複合要素とみなされます。これらは、複合要素に属する一連の3つの値を持つ、1つ以上のヘッダーを含みます。4桁のSDO_ETYPE値の場合、1桁目はexterior (1)またはinterior (2)を示します。

1005: ポリゴンの外部の輪(反時計回りで指定される必要がある)

2005: ポリゴンの内部の輪(時計回りで指定される必要がある)

1006: 1つ以上のポリゴンの輪で構成される外側の表面

2006: ソリッド要素の内側の表面

1007: ソリッド要素

複合要素の要素は、連続しています。複合要素にあるサブ要素の最後の点は、次のサブ要素の最初の点です。点は繰り返されません。

- SDO_INTERPRETATION -- SDO_ETYPEが複合要素であるかどうかによって、次のいずれかを意味します。
SDO_ETYPEが複合要素の場合(4、1005または2005)、このフィールドは、要素の一部となる後続の3つの数値セットの組数を指定します。

SDO_ETYPEが複合要素ではない場合(1、2、1003または2003)、SDO_INTERPRETATIONによってこの要素に対する座標の順序の解釈方法が決定されます。たとえば、線ストリングまたはポリゴン境界は、連結された一連の直線セグメントまたは円弧で構成されます。

有効なSDO_ETYPEおよびSDO_INTERPRETATIONの値の組合せについては、表2-2を参照してください。

複数の要素で構成されるジオメトリの場合、ある要素を表す最後の縦座標のオフセットは、常に次の要素を表す先頭座標のオフセットより1小さい値になります。ジオメトリの最後の要素は、その要素の開始オフセットからSDO_ORDINATES可変長配列の最後までの座標によって記述されます。

複合要素(SDO_ETYPE値が4、1005または2005)では、3つの数値のn組(サブ要素当たり1組)が要素の記述に使用されます。複合要素のサブ要素は、連続しています。サブ要素の最後の点は、次のサブ要素の最初の点です。1からn-1のサブ要素では、あるサブ要素の最後の点は、次のサブ要素の開始点と同じです。サブ要素2...n-2の開始点は、サブ要素1...n-1の終了点と同じです。サブ要素nの最後の縦座標は、ジオメトリの次の要素の開始オフセット-1か、またはSDO_ORDINATES変長配列の最後の縦座標のいずれかです。

可変長配列の現行のサイズは、PL/SQLのvarray_variable.CountファンクションまたはOracle Call Interface(OCI)のOCICollSize関数を使用することによって求められます。

各SDO_ETYPE要素の意味、およびこれらのSDO_ETYPE要素のそれぞれに対するSDO_ELEM_INFOとSDO_ORDINATES可変長配列間の関係を表2-2に示します。

表2-2 SDO_ELEM_INFOにおける値および意味

SDO_ETYPE

SDO_INTERPRETATION

意味

0

(任意の数値)

タイプ0(ゼロ)要素です。Oracle Spatialによってサポートされないジオメトリ・タイプのモデル化に使用します。詳細は、2.7.7項を参照してください。

1

1

点のタイプです。

1

0

方向付きの点の方向です。詳細は、2.7.6項を参照してください。

1

n > 1

n点の点の集合です。

2

1

頂点が直線セグメントに連結している線ストリングです。

2

2

連結された一連の円弧で構成される線ストリングです。

それぞれの円弧は、円弧の開始点、円弧上の任意の点および円弧の終了点という3つの座標を使用して記述されます。1つの円弧の終了点および次の円弧の開始点に対する座標は、繰り返されません。たとえば、2つの連結した円弧で構成される線ストリングの記述には、5つの座標が使用されます。点1、2および3は、最初の円弧を定義し、点3、4および5は、2つ目の円弧を定義します。ただし、点3は1回だけ格納されます。

1003または2003

1

頂点が直線セグメントに連結している単純なポリゴンです。各頂点について点を指定し、ポリゴンを閉じるために、終了点と開始点が(許容差の範囲内で)一致するように指定する必要があります。たとえば、4面のポリゴンの場合は、5番目の点が1番目の点と同じになるような5つの点を指定します。

1003または2003

2

それ自身で閉じている連結された一連の円弧で構成されるポリゴンです。最後の円弧の終了点は、最初の円弧の開始点と同じです。

それぞれの円弧は、円弧の開始点、円弧上の任意の点および円弧の終了点という3つの座標を使用して記述されます。1つの円弧の終了点および次の円弧の開始点に対する座標は、繰り返されません。たとえば、2つの連結した円弧で構成されるポリゴンの記述には、5つの座標が使用されます。点1、2および3は、最初の円弧を定義し、点3、4および5は、2つ目の円弧を定義します。点1および5の座標は同じである必要があり(許容差は考慮されません)、点3は繰り返されません。

1003または2003

3

矩形のタイプ(「最適化された矩形」ともいう)です。左下および右上の2点のみの境界矩形で、記述する必要があります。矩形タイプは、測地データまたは非測地データで使用できます。ただし、測地データでは、問合せウィンドウを作成するためにのみ矩形タイプを使用します(データベースにオブジェクトを格納するためには使用しないでください)。

測地データでのこのタイプの使用方法および例については、6.2.4項を参照してください。3次元の最適化された矩形の作成については、1.11.3項を参照してください。

1003または2003

4

円のタイプです。すべて円周上にある、非直線上の異なる3つの点によって記述されます。

4

n > 1

直線セグメントおよび円弧によって連結されたいくつかの頂点による複合線ストリングです。SDO_INTERPRETAION列にある値nは、線ストリングを構成する、連続するサブ要素の数を指定します。

SDO_ELEM_INFO配列にある次のn組は、これらサブ要素のそれぞれを記述します。SDO_ETYPE 2のもののみサブ要素になります。サブ要素の最後の点は、次のサブ要素の最初の点であり、繰り返すことはできません。

複合線ストリング・ジオメトリの例は、2.7.3項および図2-5を参照してください。

1005または2005

n > 1

直線セグメントおよび円弧によって連結された頂点がある複合ポリゴンです。SDO_INTERPRETAION列にある値nは、ポリゴンを形成する、連続するサブ要素の数を指定します。

SDO_ELEM_INFO配列にある次のn組は、これらサブ要素のそれぞれを記述します。SDO_ETYPE 2のもののみサブ要素になります。サブ要素の終了点は、次のサブ要素の開始点であり、繰り返すことはできません。ポリゴンの開始点および終了点は同じである必要があります(許容差は無視されます)。

複合ポリゴン・ジオメトリの例は、2.7.4項および図2-6を参照してください。

1006または2006

n > 1

1つ以上のポリゴンで構成され、各エッジが2つ以下のポリゴンで共有されている面です。面には面積はありますが、容積はありません。INTERPRETAION列にある値nは、表面を形成するポリゴンの数を指定します。

SDO_ELEM_INFO配列にある次のn組は、これらのポリゴンの各サブ要素を記述します。

表面は3次元である必要があります。Spatialでの3次元のサポートについては、1.11項を参照してください。

1007

n = 1または3

複数の面で構成され、完全に3次元空間で囲まれたソリッドです。したがって、ソリッドの内側には容積があります。ソリッド要素には、1006要素で定義された1つの外側の面と、2006要素で定義された0 (ゼロ)個以上の内側の境界が含まれる場合があります。Interpretation列の値nは、1または3である必要があります。

SDO_ELEM_INFO配列の後続の3つの数値セットは、ソリッド要素を構成する外側の面1006とオプションの内側の面2006を記述します。

nが3の場合、ソリッドは最適化されたボックスです。2つの3次元の点のみで定義が可能です。すなわち、そのボックスのX、YおよびZの各次元の最小値と最大値を示す点の2つのみで定義できます。例: SDO_GEOMETRY(3008, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1007,3), SDO_ORDINATE_ARRAY(1,1,1, 3,3,3))

Spatialでの3次元のサポートについては、1.11項を参照してください。

2.2.5 SDO_ORDINATES

SDO_ORDINATES属性は、空間オブジェクトの境界を形成する座標の値を格納するNUMBER型の可変長配列(1048576)を使用して定義されます。この配列は、常にSDO_ELEM_INFO可変長配列の論理積で使用されます。配列の値は、次元によって指定されます。たとえば、境界に4つの2次元の点があるポリゴンは、{X1, Y1, X2, Y2, X3, Y3, X4, Y4, X1, Y1}のように格納されます。点が3次元の場合、{X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4, Y4, Z4, X1, Y1, Z1}のように格納されます。それぞれの点に関連付けられている次元数は、2.8項で説明するとおり、xxx_SDO_GEOM_METADATAビューのメタデータとして格納されます。

SDO_ORDINATES配列のすべての値は、有効で、NULL以外である必要があります。複数要素のジオメトリにおいて、要素の区切りに使用される特別な値はありません。特定の要素を記述する順序の開始点および終了点は、その要素に対するSTARTING_OFFSET値と、2.2.4項で説明したSDO_ELEM_INFO配列における次の要素によって決定されます。オフセット値は、1から開始します。SDO_ORDINATES(1)は、最初の要素の最初の点の最初の縦座標です。

2.2.6 使用上の注意

SDO_GTYPEの値は、表2-1に示すとおりに使用する必要があります(ただし、Spatialでは、すべてのジオメトリの整合性制約を確認または強制するわけではありません)。Spatialでは、次の内容については確認されません。

- SDO_GTYPEの値がd001およびd005の場合、SDO_ETYPE 1以外のサブ要素は無視されます。

- SDO_GTYPEの値がd002およびd006の場合、SDO_ETYPE 2または4以外のサブ要素は無視されます。

- SDO_GTYPEの値がd003およびd007の場合、SDO_ETYPE 3または5以外のサブ要素は無視されます。(2.2.4項で説明したSDO_ETYPEの変形1003、2003、1005および2005は含まれます。)

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションを使用して、1つのジオメトリ・オブジェクト、または指定されたフィーチャ表にあるすべてのジオメトリ・オブジェクトについての整合性を評価できます。

2.3 SDO_GEOMETRYのメソッド

SDO_GEOMETRYオブジェクト型(2.2項を参照)には、ジオメトリ・オブジェクトの情報を取得するメソッド(メンバー・ファンクション)があります。表2-3に、これらのメソッドを示します。

表2-3 SDO_GEOMETRYのメソッド

名前

戻り値

説明

Get_Dims

NUMBER

SDO_GTYPE値に指定された、ジオメトリ・オブジェクトの次元数を戻します。Oracle Spatialでは、Get_DimsメソッドとST_CoordDimメソッドは、同じ結果を戻します。

Get_Gtype

NUMBER

SDO_GTYPE値に指定された、ジオメトリ・オブジェクトのジオメトリ・タイプを戻します。

Get_LRS_Dim

NUMBER

SDO_GTYPE値に指定された、LRSジオメトリ・オブジェクトのメジャー次元を戻します。

戻り値0(ゼロ)は、ジオメトリが、標準の(非LRS)ジオメトリであるか、またはリリース1(9.0.1)より前の形式のLRSジオメトリでメジャーがデフォルトの(最後の)次元にあることを示します。3は3つ目の次元にメジャー情報が含まれ、4は4つ目の次元にメジャー情報が含まれていることを示します。

Get_WKB

BLOB

ジオメトリ・オブジェクトのwell-knownバイナリ(WKB)形式を戻します。(戻されるオブジェクトに、SRID情報は含まれません。)

Get_WKT

CLOB

ジオメトリ・オブジェクトのwell-knownテキスト(WKT)形式(6.8.1.1項を参照)を戻します。(戻されるオブジェクトに、SRID情報は含まれません。)

ST_CoordDim

NUMBER

ジオメトリ・オブジェクトの座標次元(ISO/IEC SQL Multimedia規格により定義)を戻します。Oracle Spatialでは、Get_DimsメソッドとST_CoordDimメソッドは、同じ結果を戻します。

ST_IsValid

NUMBER

ジオメトリ・オブジェクトが無効な場合は0(ゼロ)、有効な場合は1を戻します。(ISO/IEC SQL Multimedia規格では、このようなコンテキストの場合、「有効」のかわりに「well formed (整形式)」という語句が使用されています。)

このメソッドでは、0.001が許容差として使用されます。(許容差については、1.5.5項を参照してください。)許容差を別途指定する場合、またはジオメトリが無効である理由の詳細情報を取得する場合は、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションを使用します。このファンクションの詳細は、第24章を参照してください。

例2-2に、ほとんどのSDO_GEOMETRYメソッドを示します。(Get_WKBメソッドは、出力をSQL*Plusで表示できないため、含まれていません。)

例2-2 SDO_GEOMETRYのメソッド

SELECT c.shape.Get_Dims()
FROM cola_markets c WHERE c.name = 'cola_b';

C.SHAPE.GET_DIMS()
------------------
2

SELECT c.shape.Get_GType()
FROM cola_markets c WHERE c.name = 'cola_b';

C.SHAPE.GET_GTYPE()
-------------------
3

SELECT a.route_geometry.Get_LRS_Dim()
FROM lrs_routes a WHERE  a.route_id = 1;

A.ROUTE_GEOMETRY.GET_LRS_DIM()
------------------------------
3

SELECT c.shape.Get_WKT()
FROM cola_markets c WHERE c.name = 'cola_b';

C.SHAPE.GET_WKT()
--------------------------------------------------------------------------------
POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))

SELECT c.shape.ST_CoordDim()
FROM cola_markets c WHERE c.name = 'cola_b';

C.SHAPE.ST_COORDDIM()
---------------------
2

SELECT c.shape.ST_IsValid()
FROM cola_markets c WHERE c.name = 'cola_b';

C.SHAPE.ST_ISVALID()
--------------------
1

2.4 SDO_GEOMETRYのコンストラクタ

SDO_GEOMETRYオブジェクト型(2.2項を参照)には、CLOB形式またはVARCHAR2形式のwell-knownテキスト(WKT)文字列から、またはBLOB形式のwell-knownバイナリ(WKB)オブジェクトからジオメトリ・オブジェクトを作成するコンストラクタがあります。使用可能なコンストラクタ書式は、次のとおりです。

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値と、表内のジオメトリの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-3に、ジオメトリ・オブジェクトを作成して、そのオブジェクトを表に挿入し、表に挿入したオブジェクトを表示するSDO_GEOMETRYコンストラクタを示します。

例2-3 ジオメトリを作成する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))

2.5 TINに関連するオブジェクト型

ここでは、Triangulated Irregular Network(TIN)のサポートに関連する次のオブジェクト型について説明します。

- SDO_TIN

- SDO_TIN_BLK_TYPE

- SDO_TIN_BLK

2.5.1 SDO_TINオブジェクト型

TINの記述は、ユーザーが定義した表のSDO_TINオブジェクト型の1列に、1行で格納されます。SDO_TINオブジェクト型の定義は次のとおりです。

CREATE TYPE sdo_tin AS OBJECT
(base_table          VARCHAR2(70),
base_table_col      VARCHAR2(1024),
tin_id              NUMBER.
blk_table           VARCHAR2(70),
ptn_params          VARCHAR2(1024),
tin_extent          SDO_GEOMETRY,
tin_tol             NUMBER,
tin_tot_dimensions  NUMBER,
tin_domain          SDO_ORGSCL_TYPE,
tin_break_lines     SDO_GEOMETRY,
tin_stop_lines      SDO_GEOMETRY,
tin_void_rgns       SDO_GEOMETRY,
tin_val_attr_tables SDO_STRING_ARRAY,
tin_other_attrs     XMLTYPE);

SDO_TIN型には、表2-4に示す属性が含まれます。

表2-4 SDO_TIN型の属性

属性

説明

BASE_TABLE

SDO_TIN型の列を含む実表の名前。

BASE_TABLE_COL

実表のSDO_TIN型の列の名前。

TIN_ID

TINのID番号。(この一意のID番号はSpatialによって生成されます。このID番号は、型SDO_TINの列を含む実表のスキーマ内で一意です。)

BLK_TABLE

TINの各ブロックに関する情報を含む表の名前。この表に含まれる列を、表2-5に示します。

PTN_PARAMS

TINを分割するためのパラメータ。

TIN_EXTENT

TINの空間エクステント(TINに含まれるすべてのオブジェクトを囲む最小境界オブジェクト)を表すSDO_GEOMETRYオブジェクト。

TIN_TOL

TIN内のオブジェクトの許容差。(空間許容差の詳細は、1.5.5項を参照してください。)

TIN_TOT_DIMENSIONS

TINの総次元数。空間次元および非空間次元が含まれます(最大値は9)。

TIN_DOMAIN

(現在は未使用。)

TIN_BREAK_LINES

(現在は未使用。)

TIN_STOP_LINES

(現在は未使用。)

TIN_VOID_RGNS

(現在は未使用。)

TIN_VAL_ATTR_TABLES

TINの値属性表の名前を指定するSDO_STRING_ARRAYオブジェクトを指定します。SDO_STRING_ARRAY型は、VARRAY(1048576) OF VARCHAR2(32)として定義されます。

TIN_OTHER_ATTRS

TINのその他の属性を指定するXMLTYPEオブジェクトを指定します。

図2-2に、TINデータの記憶域モデルを示します。このモデルでは、(SDO_TIN型のBLK_TABLE属性で指定した)TINブロック表にSDO_TINオブジェクトに関連付けられたブロックが格納されます。

図2-2 TINデータの記憶域

TINブロック表には、表2-5に示す列が含まれます。

表2-5 TINブロック表の列

列名

データ型

説明

BLK_ID

NUMBER

ブロックのID番号。

BLK_EXTENT

SDO_GEOMETRY

ブロックの空間エクステント。

BLK_DOMAIN

SDO_ORGSCL_TYPE

(現在は未使用。)

PCBLK_MIN_RES

NUMBER

点群データの場合は、問合せ時にブロックを可視化できる解像度の最小レベルです。問合せウィンドウがブロックの空間エクステントと重なる場合に、ブロックの最小から最大までの解像度幅が問合せの最小から最大までの解像度幅と重なる場合のみ、ブロックが取得されます。通常、小さい値ほどビュー・ポイントから離れており、高い値ほどビュー・ポイントに近いことを示します。

PCBLK_MAX_RES

NUMBER

点群データの場合は、問合せ時にブロックを可視化できる解像度の最大レベルです。問合せウィンドウがブロックの空間エクステントと重なる場合に、ブロックの最小から最大までの解像度幅が問合せの最小から最大までの解像度幅と重なる場合のみ、ブロックが取得されます。通常、小さい値ほどビュー・ポイントから離れており、高い値ほどビュー・ポイントに近いことを示します。

NUM_POINTS

NUMBER

点群データの場合は、POINTS BLOBに含まれる点の総数。

NUM_UNSORTED_POINTS

NUMBER

点群データの場合は、POINTS BLOB内のソートされていない点の数。

PT_SORT_DIM

NUMBER

点群データの場合は、点の空間次元数(2または3)。

POINTS

BLOB

点群データの場合は、点を含むBLOB。点ごとに次の情報を持つ点の配列で構成されます。

- d 8バイトIEEE倍精度(dは点群の総次元数)

- BLK_ID値に対応する4バイトのビッグ・エンディアン整数

- PT_ID値に対応する4バイトのビッグ・エンディアン整数

TR_LVL

NUMBER

(現在は未使用。)

TR_RES

NUMBER

(現在は未使用。)

NUM_TRIANGLES

NUMBER

TRIANGLES BLOBに含まれる三角形の数。

TR_SORT_DIM

NUMBER

(現在は未使用。)

TRIANGLES

BLOB

三角形を含むBLOB。ブロックの三角形の配列で構成されます。

- 各三角形は3つの頂点で指定されます。

- 各頂点は(BLK_ID, PT_ID)のペアで指定され、それぞれの値は4バイトのビッグ・エンディアン整数です。

TINブロック表のPOINTS列の各BLOBは、次のとおりです。

- 合計サイズは(tdim+1)×8です。tdimは各ブロックの合計次元数です。

- 合計サイズは、5MB未満(Oracle Databaseリリース11.1.0.6以下の場合)または12MB未満(Oracle Databaseリリース11.1.0.7以上の場合)である必要があります。

属性名は、SDO_TIN型のオブジェクトに対する問合せで使用できます。例2-4に、LANDSCAPESという架空の表に含まれるTERRAIN列のTIN_EXTENT属性を問い合せるSELECT文の一部を示します。

例2-4 SDO_TINの属性の問合せ

SELECT l.terrain.tin_extent FROM landscapes l WHERE ...;

2.5.2 SDO_TIN_BLK_TYPEオブジェクト型およびSDO_TIN_BLKオブジェクト型

SDO_TIN_PKG.CLIP_TINファンクションを使用してクリップ操作を実行する場合、SDO_TIN_BLK_TYPE型のオブジェクトが戻されます。このオブジェクトはTABLE OF SDO_TIN_BLKとして定義されます。

SDO_TIN_BLKオブジェクト型の属性は、TINブロック表に含まれる列と同じです(TINブロック表については、2.5.2項の表2-5を参照)。

2.6 点群に関連するオブジェクト型

ここでは、点群のサポートに関連する次のオブジェクト型について説明します。

- SDO_PC

- SDO_PC_BLK

2.6.1 SDO_PCオブジェクト型

点群の記述は、ユーザーが定義した表のSDO_PCオブジェクト型の1列に、1行で格納されます。SDO_PCオブジェクト型の定義は次のとおりです。

CREATE TYPE sdo_pc AS OBJECT
(base_table         VARCHAR2(70),
base_table_col     VARCHAR2(1024),
pc_id              NUMBER.
blk_table          VARCHAR2(70),
ptn_params         VARCHAR2(1024),
pc_extent          SDO_GEOMETRY,
pc_tol             NUMBER,
pc_tot_dimensions  NUMBER,
pc_domain          SDO_ORGSCL_TYPE,
pc_val_attr_tables SDO_STRING_ARRAY,
pc_other_attrs     XMLTYPE);

SDO_PC型の属性を表2-6に示します。

表2-6 SDO_PC型の属性

属性

説明

BASE_TABLE

SDO_PC型の列を含む実表の名前。

BASE_TABLE_COL

実表のSDO_PC型の列名。

PC_ID

点群のID番号。(この一意のID番号はSpatialによって生成されます。このID番号は、型SDO_PCの列を含む実表のスキーマ内で一意です。)

BLK_TABLE

点群の各ブロックに関する情報を含む表の名前。この表に含まれる列を、表2-7に示します。

PTN_PARAMS

点群を分割するためのパラメータ。

PC_EXTENT

点群の空間エクステント(点群に含まれるすべてのオブジェクトを囲む最小境界オブジェクト)を表すSDO_GEOMETRYオブジェクト。

PC_TOL

点群内の点の許容差。(空間許容差の詳細は、1.5.5項を参照してください。)

PC_TOT_DIMENSIONS

点群の総次元数。空間次元および非空間次元が含まれます(最大値は9)。

PC_DOMAINS

(現在は未使用。)

PC_VAL_ATTR_TABLES

点群の値属性表の名前を指定するSDO_STRING_ARRAYオブジェクト。SDO_STRING_ARRAY型は、VARRAY(1048576) OF VARCHAR2(32)として定義されます。

PC_OTHER_ATTRS

点群のその他の属性を指定するXMLTYPEオブジェクト。

点群ブロック表(SDO_PC型のBLK_TABLE属性で指定された)には、表2-7に示す列が含まれます。

表2-7 点群ブロック表の列

列名

データ型

説明

OBJ_ID

NUMBER

点群オブジェクトのID番号。

BLK_ID

NUMBER

ブロックのID番号。

BLK_EXTENT

SDO_GEOMETRY

ブロックの空間エクステント。

BLK_DOMAIN

SDO_ORGSCL_TYPE

(現在は未使用。)

PCBLK_MIN_RES

NUMBER

点群データの場合は、問合せ時にブロックを可視化できる解像度の最小レベルです。問合せウィンドウがブロックの空間エクステントと重なる場合に、ブロックの最小から最大までの解像度幅が問合せの最小から最大までの解像度幅と重なる場合のみ、ブロックが取得されます。通常、小さい値ほどビュー・ポイントから離れており、高い値ほどビュー・ポイントに近いことを示します。

PCBLK_MAX_RES

NUMBER

点群データの場合は、問合せ時にブロックを可視化できる解像度の最大レベルです。問合せウィンドウがブロックの空間エクステントと重なる場合に、ブロックの最小から最大までの解像度幅が問合せの最小から最大までの解像度幅と重なる場合のみ、ブロックが取得されます。通常、小さい値ほどビュー・ポイントから離れており、高い値ほどビュー・ポイントに近いことを示します。

NUM_POINTS

NUMBER

点群データの場合は、POINTS BLOBに含まれる点の総数。

NUM_UNSORTED_POINTS

NUMBER

点群データの場合は、POINTS BLOB内のソートされていない点の数。

PT_SORT_DIM

NUMBER

点がソートされる次元数(1は最初の次元、2は2つ目の次元など)。

POINTS

BLOB

点を含むBLOBを指定します。点ごとに次の情報を持つ点の配列で構成されます。

- d 8バイトIEEE倍精度(dはPC_TOT_DIMENSIONS値)

- BLK_ID値に対応する4バイトのビッグ・エンディアン整数

- PT_ID値に対応する4バイトのビッグ・エンディアン整数

属性名は、SDO_PC型のオブジェクトに対する問合せで使用できます。例2-5に、OCEAN_FLOOR_MODELという架空の表に含まれるOCEAN_FLOOR列のPC_EXTENT属性を問い合せるSELECT文の一部を示します。

例2-5 SDO_PCの属性の問合せ

SELECT o.ocean_floor.pc_extent FROM ocean_floor_model o WHERE ...;

2.6.2 SDO_PC_BLK_TYPEオブジェクト型およびSDO_PC_BLKオブジェクト型

SDO_PC_PKG.CLIP_PCファンクションを使用してクリップ操作を実行する場合、SDO_PC_BLK_TYPE型のオブジェクトが戻されます。このオブジェクトはTABLE OF SDO_PC_BLKとして定義されます。

SDO_PC_BLKオブジェクト型の属性は、点群ブロック表に含まれる列と同じです(点群ブロック表については、2.6.1項の表2-7を参照)。

2.7 ジオメトリの例

この項では、様々なジオメトリ・タイプの例を示します。

- 2.7.1項「矩形」

- 2.7.2項「穴のあるポリゴン」

- 2.7.3項「複合線ストリング」

- 2.7.4項「複合ポリゴン」

- 2.7.5項「点」

- 2.7.6項「方向付きの点」

- 2.7.7項「タイプ0(ゼロ)要素」

- 2.7.8項「2次元の各種ジオメトリ・タイプ」

2.7.1 矩形

図2-3に、2.1項の例のcola_aを表す矩形を示します。

図2-3 矩形

図2-3に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。

- SDO_GTYPE = 2003。2は2次元を示し、3はポリゴンを示します。

- SDO_SRID = NULL

- SDO_POINT = NULL

- SDO_ELEM_INFO = (1, 1003, 3)。1,1003,3の最後の3は、これが矩形であることを示しています。これは矩形なので、SDO_ORDINATESに2つの縦座標のみが指定されています(左下と右上)。

- SDO_ORDINATES = (1,1, 5,7)。これらは、矩形の左下と右上の縦座標を示しています。

例2-6に、図2-3のジオメトリをデータベースに挿入するSQL文を示します。

例2-6 矩形を挿入するSQL文

INSERT INTO cola_markets VALUES(
1,
'cola_a',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
-- define rectangle (lower left and upper right) with
-- Cartesian-coordinate data
)
);

2.7.2 穴のあるポリゴン

図2-4に、2つの要素(ポリゴンの外部および内部の輪)で構成されるジオメトリを示します。この例で内側の要素は、空間(穴)として扱われます。

図2-4 穴のあるポリゴン

図2-4に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。

- SDO_GTYPE = 2003。2は2次元を示し、3はポリゴンを示します。

- SDO_SRID = NULL

- SDO_POINT = NULL

- SDO_ELEM_INFO = (1,1003,1, 19,2003,1)。3つの値で構成される2つの要素(1,1003,1および19,2003,1)があります。
1003は、要素がポリゴンの外部の輪であることを示し、2003は、要素がポリゴンの内部の輪であることを示します。

19は、2番目の要素(ポリゴンの内部の輪)の縦座標の指定が、SDO_ORDINATES配列の19番目の数字から開始している(ここでは7であるため、第1の点は7,5であるという意味になる)ことを示します。

- SDO_ORDINATES = (2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4, 7,5, 7,10, 10,10, 10,5, 7,5)

- ポリゴンの面積(SDO_GEOM.SDO_AREAファンクション)は、ポリゴンの外部面積からポリゴンの内部面積を引きます。この例では、ポリゴンの面積は84(99 - 15)です。

- ポリゴンの周囲(SDO_GEOM.SDO_LENGTHファンクション)は、ポリゴンの外部の周囲にポリゴンの内部の周囲を足します。この例では、ポリゴンの周囲は52.9193065(36.9193065 + 16)です。

例2-7に、図2-4のジオメトリをデータベースに挿入するSQL文を示します。

例2-7 穴のあるポリゴンを挿入するSQL文

INSERT INTO cola_markets VALUES(
10,
'polygon_with_hole',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1), -- polygon with hole
SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4,
7,5, 7,10, 10,10, 10,5, 7,5)
)
);

そのような「穴のあるポリゴン」の例としては、中に湖がある広大な土地(国や島など)があります。もちろん、実際の広大な土地にはそのような内部ポリゴンが多数存在する場合があるので、それぞれに対して、SDO_ELEM_INFOの3つ値で構成される要素および座標指定が必要になります。

外部の輪と内部の輪はネストできません。たとえば、ある国に湖があり、湖に島がある(さらに島に湖もある)ような場合は、島に対して別のポリゴンを定義する必要があります。湖を示すポリゴン内部の輪の中に、ポリゴン内部の輪として島を定義することはできません。

複数のポリゴン(ポリゴンの集合)では、輪をポリゴンごとにグループ化し、各ポリゴンの最初の輪を外部の輪にする必要があります。たとえば、2つのポリゴン(AおよびB)を含むポリゴンの集合について考えてみます。

- ポリゴンA(1つの内部の「穴」): 外部の輪A0、内部の輪A1

- ポリゴンB(2つの内部の「穴」): 外部の輪B0、内部の輪B1、内部の輪B2

SDO_ELEM_INFOおよびSDO_ORDINATESの要素は、次のいずれかの順序で記述する必要があります(ポリゴンAとBのどちらを最初に指定するかによって異なります)。

- A0, A1; B0, B1, B2

- B0, B1, B2; A0, A1

2.7.3 複合線ストリング

図2-5に、1つのまっすぐな線分と1つの円弧で構成される複合線ストリングとして表される三日月形のオブジェクトを示します。この形を表すには4つの点が必要で、(10,10)と(10,14)の点はまっすぐな線分を表し、(10,14)、(6,10)および(14,10)の点は円弧を表します。

図2-5 複合線ストリング

図2-5に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。

- SDO_GTYPE = 2002.最初の2は2次元を示し、2番目の2は1つ以上の線分を示します。

- SDO_SRID = NULL

- SDO_POINT = NULL

- SDO_ELEM_INFO = (1,4,2, 1,2,1, 3,2,2).3つの値で構成される3つの要素1,4,2、1,2,1および3,2,2があります。
最初の組は、この要素が、後の2組を使用して記述されている2つのサブ要素線ストリングで構成される複合線ストリングであることを示します。

2番目の組は、線ストリングが直線セグメントで構成され、かつこの線ストリングに対する座標がオフセット1から開始していることを示しています。この線ストリングの終了点は2番目の線ストリングの開始オフセット(このインスタンスでは3)によって決定されます。

3つの値で構成される3番目の要素は、2番目の線ストリングが、オフセット3で始まる縦座標が指定された円弧で構成されることを示しています。この線ストリングの終了点は、次の要素の開始オフセットによって決まりますが、これが最後の要素である場合は、SDO_ORDINATES配列の現在の長さで決まります。

- SDO_ORDINATES = (10,10, 10,14, 6,10, 14,10)

例2-8に、図2-5のジオメトリをデータベースに挿入するSQL文を示します。

例2-8 複合線ストリングを挿入するSQL文

INSERT INTO cola_markets VALUES(
11,
'compound_line_string',
SDO_GEOMETRY(
2002,
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,4,2, 1,2,1, 3,2,2), -- compound line string
SDO_ORDINATE_ARRAY(10,10, 10,14, 6,10, 14,10)
)
);

2.7.4 複合ポリゴン

図2-6に、1つの直線セグメントおよび1つの円弧で構成される複合ポリゴンとして表現される、アイスクリーム・コーンの形をしたオブジェクトを示します。この形を表すには5つの点が必要で、(6,10)、(10,1)および(14,10)の点は1つの鋭角の線ストリングを表し、(14,10)、(10,14)および(6,10)の点は円弧を表します。線ストリングの開始点と円弧の終了点は同じ点(6,10)です。SDO_ELEM_INFO配列には、この複合線ストリングに対して3つの値の組が3つ含まれます。これらは、{(1,1005,2), (1,2,1), (5,2,2)}です。

図2-6 複合ポリゴン

図2-6に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。

- SDO_GTYPE = 2003。2は2次元を示し、3はポリゴンを示します。

- SDO_SRID = NULL

- SDO_POINT = NULL

- SDO_ELEM_INFO = (1,1005,2, 1,2,1, 5,2,2).3つの値で構成される3つの要素1,1005,2、1,2,1および5,2,2があります。
最初の組は、この要素が、後の2組を使用して記述されている2つのサブ要素線ストリングで構成される複合ポリゴンであることを示します。

2番目の組は、最初のサブ要素線ストリングが直線セグメントで構成され、かつこの線ストリングに対する座標がオフセット1から開始していることを示しています。この線ストリングの終了点は2番目の線ストリングの開始オフセット(このインスタンスでは5)によって決定されます。1つの頂点はXとYの2つの値で決定されるため、最初の線ストリングの終了点座標はオフセット5および6となります。

3つの値で構成される3番目の要素は、2番目のサブ要素線ストリングが、オフセット5で始まる縦座標が指定された円弧で構成されることを示しています。この線ストリングの終了点は、次の要素の開始オフセットによって決まりますが、これが最後の要素である場合は、SDO_ORDINATES配列の現在の長さで決まります。

- SDO_ORDINATES = (6,10, 10,1, 14,10, 10,14, 6,10)

例2-9に、図2-6のジオメトリをデータベースに挿入するSQL文を示します。

例2-9 複合ポリゴンを挿入するSQL文

INSERT INTO cola_markets VALUES(
12,
'compound_polygon',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1005,2, 1,2,1, 5,2,2), -- compound polygon
SDO_ORDINATE_ARRAY(6,10, 10,1, 14,10, 10,14, 6,10)
)
);

2.7.5 点

図2-7に、座標(12,14)にある点のみのジオメトリを示します。

図2-7 点のみのジオメトリ

図2-7に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。

- SDO_GTYPE = 2001.2は2次元を、1は単一の点を示します。

- SDO_SRID = NULL

- SDO_POINT = SDO_POINT_TYPE(12, 14, NULL).これは点のみのジオメトリであるため、SDO_POINT属性はSDO_POINT_TYPEオブジェクト型を使用して定義されます。
SDO_POINT属性の詳細は、2.2.3項を参照してください。

- SDO_POINT属性が指定されている場合、必要に応じてSDO_ELEM_INFOおよびSDO_ORDINATESの両方がNULLになります。

例2-10に、図2-7のジオメトリをデータベースに挿入するSQL文を示します。

例2-10 点のみのジオメトリを挿入するSQL文

INSERT INTO cola_markets VALUES(
90,
'point_only',
SDO_GEOMETRY(
2001,
NULL,
SDO_POINT_TYPE(12, 14, NULL),
NULL,
NULL));

SDO_POINT_TYPEに指定されたX、YおよびZの値に基づいて点のみのジオメトリを検索できます。例2-11は、1つ目の座標(X値)が12であるすべての点を検索する問合せです。この例では、例2-10で挿入した点が検索されます。

例2-11 座標値に基づく点のみのジオメトリの問合せ

SELECT * from cola_markets c WHERE c.shape.SDO_POINT.X = 12;

MKT_ID NAME
---------- --------------------------------
SHAPE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
90 point_only
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(12, 14, NULL), NULL, NULL)

2.7.6 方向付きの点

方向付きの点は、点と仮想の終了点の位置を示す座標を含む特殊な点のジオメトリで、点でのシンボルの回転や点からのラベルの引き出しに使用する方向ベクトルを表すことができます。方向付きの点は、主に地図の視覚化と、シンボル(高速道路を表す盾状のシンボルなど)を含む表示アプリケーションで使用されます。

方向付きの点は、次のように指定します。

- SDO_GTYPE値(2.2.1項を参照)は、単一点または複数点のジオメトリを使用します。

- SDO_POINT属性には、NULL値を指定します。

- SDO_ELEM_INFO配列(2.2.4項を参照)では、2番目と3番目の値(SDO_ETYPEとSDO_INTERPRETATION)を1と0にして、3つの値の組を追加指定します。たとえば、3つの値が3,1,0であれば、点が方向付きの点で、SDO_ORDINATES配列の3番目の数字が、シンボルやラベルの方向ベクトルを表す終了点の1つ目の座標(X軸値)であることを示されます。

- SDO_ORDINATES配列(2.2.5項を参照)は、点の方向ベクトルを表す終了点の座標を-1から1の値で指定します。方向は、その起点を(0,0)とし、その方向が対応する物理的な点の位置に変換されます。

図2-8は、座標(12,14)に方向付きの点のジオメトリがあり、方向ベクトルは約34度(X軸から反時計回り)で、方向座標が0.3,0.2であることを示しています。(方向の精度を上げて特定の角度に合わせるには、余接または正接の値を三角法のテキストの表から取得してください。)この例の方向ベクトルは、(0,0)から(0.3,0.2)を経由しその先に延長されます。i=0.3、j=0.2とすると、角度(ラジアン)はarctan (j/i)で計算できます。この角度は、方向ベクトルに関連付けられた物理点に適用されます。

図2-8 方向付きの点のジオメトリ

図2-8に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。

- SDO_GTYPE = 2001.2は2次元を、1は単一の点を示します。

- SDO_SRID = NULL

- SDO_POINT = NULL

- SDO_ELEM_INFO = (1,1,1, 3,1,0)3,1,0の末尾の1,0は、方向付きの点であることを示します。

- SDO_ORDINATES = (12,14, 0.3,0.2).12,14は点の物理的な座標を識別し、0.3,0.2は方向ベクトルの終了点のx座標とy座標(12,14が原点と仮定)を識別します。この結果、方向ベクトルは、約34度の上向きに傾斜したものになります。

例2-12に、図2-8のジオメトリをデータベースに挿入するSQL文を示します。

例2-12 方向付きの点のジオメトリを挿入するSQL文

INSERT INTO cola_markets VALUES(
91,
'oriented_point',
SDO_GEOMETRY(
2001,
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1,1, 3,1,0),
SDO_ORDINATE_ARRAY(12,14, 0.3,0.2)));

方向付きの点を定義する際は、次のことに注意してください。

- 方向ベクトルは、-1から1の数値で定義する必要があります。(例2-12では、この数値は0.3と0.2です。)

- 方向付きの点は、複数点でも指定できますが(例2-13を参照)、方向付けをする点の後に方向情報を続ける必要があります。

方向付きの点の方向ベクトルの次元については、次のことに注意してください。

- 2次元の点の方向ベクトルは2次元です。

- LRSメジャーを持つ2次元の点(SDO_GTYPE=3301)の方向ベクトルは2次元です。

- 3次元の点(SDO_GTYPE=3001)の方向ベクトルは3次元です。

- LRSメジャーを持つ3次元の点(SDO_GTYPE=4401)の方向ベクトルは3次元です。

- 4次元の点(SDO_GTYPE=4001)の方向ベクトルは3次元です。

例2-13に、方向付きの複数点ジオメトリをデータベースに挿入するSQL文を示します。この複数点ジオメトリには、座標(12,14)および(12, 10)の位置に2つの点があり、それぞれが異なる方向ベクトルを保持しています。この文は例2-12の文と類似していますが、例2-13では、方向座標-1,-1を使用して、2つ目の点に左下向き45度(X軸から時計回りに135度)の方向ベクトルが割り当てられています。

例2-13 方向付きの複数点ジオメトリを挿入するSQL文

-- Oriented multipoint: 2 points, different orientations
INSERT INTO cola_markets VALUES(
92,
'oriented_multipoint',
SDO_GEOMETRY(
2005, -- Multipoint
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1,1, 3,1,0, 5,1,1, 7,1,0),
SDO_ORDINATE_ARRAY(12,14, 0.3,0.2, 12,10, -1,-1)));

2.7.7 タイプ0(ゼロ)要素

タイプ0(ゼロ)要素は、Oracle Spatialでサポートされないジオメトリ・タイプ(曲線やスプラインなど)をモデル化するために使用します。タイプ0(ゼロ)要素のSDO_ETYPE値は0(ゼロ)です。(SDO_ETYPEについては、2.2.4項を参照。)タイプ0 (ゼロ)要素は、Oracle Spatialでは索引付けされず、SpatialファンクションおよびSpatialプロシージャでは無視されます。

タイプ0(ゼロ)要素を使用するジオメトリは、0(ゼロ)以外の要素(SDO_ETYPE値が0(ゼロ)以外の要素)を1つ以上含む必要があります。0(ゼロ)以外の要素は、サポートされないジオメトリの近似値である必要があるため、次の両方の値を持つ必要があります。

- Spatialでサポートされているジオメトリ・タイプに関連付けられたSDO_ETYPE値

- そのSDO_ETYPE値に有効なSDO_INTERPRETATION値(表2-2を参照)
(タイプ0(ゼロ)要素のSDO_INTERPRETATION値には、任意の数値を指定できます。その値の妥当性および有効性は、アプリケーションが判断します。)

0(ゼロ)以外の要素は、Spatialによって索引付けされ、空間索引によって戻されます。

タイプ0(ゼロ)要素を含むジオメトリのSDO_GTYPE値は、0(ゼロ)以外の要素のジオメトリ・タイプの値に設定する必要があります。

図2-9に、曲線(サポートされないジオメトリ)およびその曲線に近い矩形(0(ゼロ)以外の要素)の2つの要素を含むジオメトリを示します。曲線は文字「S」のように見え、矩形は破線で表されています。

図2-9 タイプ0(ゼロ)要素を含むジオメトリ

図2-9に示すジオメトリの定義は、次のとおりです。

- ジオメトリのSDO_GTYPE値は2003(2次元ポリゴンを示す)です。

- SDO_ELEM_INFO配列には、この複合線ストリングに対して3つの値の組が2つ含まれます。たとえば、{(1,0,57), (11,1003,3)}という組が含まれているとします。この場合は、次のとおりです。

縦座標の開始オフセット(SDO_STARTING_OFFSET)

要素タイプ(SDO_ETYPE)

解釈(SDO_INTERPRETATION)

1

0

57

11

1003

3

この例では、次のとおりです。

- タイプ0(ゼロ)要素のSDO_ETYPE値は0(ゼロ)です。

- 0(ゼロ)以外の要素(矩形)のSDO_ETYPE値は1003です。これは、ポリゴンの外部の輪を示します。

- 縦座標x6はジオメトリの11番目の縦座標であるため、0(ゼロ)以外の要素のSDO_STARTING_OFFSET値は11です。

- タイプ0(ゼロ)要素のSDO_INTERPRETATIONには、アプリケーション固有の値が指定されます。この例では、SDO_INTERPRETATION値は57です。

- 0 (ゼロ)以外の要素のSDO_INTERPRETATION値は、値が1003のSDO_ETYPEに対して有効な値です。この例では、SDO_INTERPRETATION値は3です。これは、2点(左下および右上)によって定義される矩形を示します。

例2-14に、タイプ0(ゼロ)要素を含むジオメトリ(図2-9に示すジオメトリに類似)をデータベースに挿入するSQL文を示します。このSDO_ORDINATE_ARRAY構造では、曲線は点(6,6)、(12,6)、(9,8)、(6,10)および(12,10)によって定義され、矩形は点(6,4)および(12,12)によって定義されています。

例2-14 タイプ0(ゼロ)要素を含むジオメトリを挿入するSQL文

INSERT INTO cola_markets VALUES(
13,
'type_zero_element_geom',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,0,57, 11,1003,3), -- 1st is type 0 element
SDO_ORDINATE_ARRAY(6,6, 12,6, 9,8, 6,10, 12,10, 6,4, 12,12)
)
);

2.7.8 2次元の各種ジオメトリ・タイプ

例2-15は、1つの表を作成し、複数点(点クラスタ)、複数ポリゴン、コレクションなどの2次元の各種ジオメトリを挿入します。最後に、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションをコールして、挿入したジオメトリの有効性を検証します。なお、一部のジオメトリは、意図的に無効にしてあります(ジオメトリの説明に、INVALIDという文字列が書かれています)。

例2-15 2次元の各種ジオメトリを挿入するSQL文

CREATE TABLE t1 (
i NUMBER,
d VARCHAR2(50),
g SDO_GEOMETRY
);
INSERT INTO t1 (i, d, g)
VALUES (
1,
'Point',
sdo_geometry (2001, null, null, sdo_elem_info_array (1,1,1),
sdo_ordinate_array (10,5))
);
INSERT INTO t1 (i, d, g)
VALUES (
2,
'Line segment',
sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,1),
sdo_ordinate_array (10,10, 20,10))
);
INSERT INTO t1 (i, d, g)
VALUES (
3,
'Arc segment',
sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,2),
sdo_ordinate_array (10,15, 15,20, 20,15))
);
INSERT INTO t1 (i, d, g)
VALUES (
4,
'Line string',
sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,1),
sdo_ordinate_array (10,25, 20,30, 25,25, 30,30))
);
INSERT INTO t1 (i, d, g)
VALUES (
5,
'Arc string',
sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,2),
sdo_ordinate_array (10,35, 15,40, 20,35, 25,30, 30,35))
);
INSERT INTO t1 (i, d, g)
VALUES (
6,
'Compound line string',
sdo_geometry (2002, null, null,
sdo_elem_info_array (1,4,3, 1,2,1, 3,2,2, 7,2,1),
sdo_ordinate_array (10,45, 20,45, 23,48, 20,51, 10,51))
);
INSERT INTO t1 (i, d, g)
VALUES (
7,
'Closed line string',
sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,1),
sdo_ordinate_array (10,55, 15,55, 20,60, 10,60, 10,55))
);
INSERT INTO t1 (i, d, g)
VALUES (
8,
'Closed arc string',
sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,2),
sdo_ordinate_array (15,65, 10,68, 15,70, 20,68, 15,65))
);
INSERT INTO t1 (i, d, g)
VALUES (
9,
'Closed mixed line',
sdo_geometry (2002, null, null, sdo_elem_info_array (1,4,2, 1,2,1, 7,2,2),
sdo_ordinate_array (10,78, 10,75, 20,75, 20,78, 15,80, 10,78))
);
INSERT INTO t1 (i, d, g)
VALUES (
10,
'Self-crossing line',
sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,1),
sdo_ordinate_array (10,85, 20,90, 20,85, 10,90, 10,85))
);
INSERT INTO t1 (i, d, g)
VALUES (
11,
'Polygon',
sdo_geometry (2003, null, null, sdo_elem_info_array (1,1003,1),
sdo_ordinate_array (10,105, 15,105, 20,110, 10,110, 10,105))
);
INSERT INTO t1 (i, d, g)
VALUES (
12,
'Arc polygon',
sdo_geometry (2003, null, null, sdo_elem_info_array (1,1003,2),
sdo_ordinate_array (15,115, 20,118, 15,120, 10,118, 15,115))
);
INSERT INTO t1 (i, d, g)
VALUES (
13,
'Compound polygon',
sdo_geometry (2003, null, null, sdo_elem_info_array (1,1005,2, 1,2,1, 7,2,2),
sdo_ordinate_array (10,128, 10,125, 20,125, 20,128, 15,130, 10,128))
);
INSERT INTO t1 (i, d, g)
VALUES (
14,
'Rectangle',
sdo_geometry (2003, null, null, sdo_elem_info_array (1,1003,3),
sdo_ordinate_array (10,135, 20,140))
);
INSERT INTO t1 (i, d, g)
VALUES (
15,
'Circle',
sdo_geometry (2003, null, null, sdo_elem_info_array (1,1003,4),
sdo_ordinate_array (15,145, 10,150, 20,150))
);
INSERT INTO t1 (i, d, g)
VALUES (
16,
'Point cluster',
sdo_geometry (2005, null, null, sdo_elem_info_array (1,1,3),
sdo_ordinate_array (50,5, 55,7, 60,5))
);
INSERT INTO t1 (i, d, g)
VALUES (
17,
'Multipoint',
sdo_geometry (2005, null, null, sdo_elem_info_array (1,1,1, 3,1,1, 5,1,1),
sdo_ordinate_array (65,5, 70,7, 75,5))
);
INSERT INTO t1 (i, d, g)
VALUES (
18,
'Multiline',
sdo_geometry (2006, null, null, sdo_elem_info_array (1,2,1, 5,2,1),
sdo_ordinate_array (50,15, 55,15, 60,15, 65,15))
);
INSERT INTO t1 (i, d, g)
VALUES (
19,
'Multiline - crossing',
sdo_geometry (2006, null, null, sdo_elem_info_array (1,2,1, 5,2,1),
sdo_ordinate_array (50,22, 60,22, 55,20, 55,25))
);
INSERT INTO t1 (i, d, g)
VALUES (
20,
'Multiarc',
sdo_geometry (2006, null, null, sdo_elem_info_array (1,2,2, 7,2,2),
sdo_ordinate_array (50,35, 55,40, 60,35, 65,35, 70,30, 75,35))
);
INSERT INTO t1 (i, d, g)
VALUES (
21,
'Multiline - closed',
sdo_geometry (2006, null, null, sdo_elem_info_array (1,2,1, 9,2,1),
sdo_ordinate_array (50,55, 50,60, 55,58, 50,55, 56,58, 60,55, 60,60, 56,58))
);
INSERT INTO t1 (i, d, g)
VALUES (
22,
'Multiarc - touching',
sdo_geometry (2006, null, null, sdo_elem_info_array (1,2,2, 7,2,2),
sdo_ordinate_array (50,65, 50,70, 55,68, 55,68, 60,65, 60,70))
);
INSERT INTO t1 (i, d, g)
VALUES (
23,
'Multipolygon - disjoint',
sdo_geometry (2007, null, null, sdo_elem_info_array (1,1003,1, 11,1003,3),
sdo_ordinate_array (50,105, 55,105, 60,110, 50,110, 50,105, 62,108, 65,112))
);
INSERT INTO t1 (i, d, g)
VALUES (
24,
'Multipolygon - touching',
sdo_geometry (2007, null, null, sdo_elem_info_array (1,1003,3, 5,1003,3),
sdo_ordinate_array (50,115, 55,120, 55,120, 58,122))
);
INSERT INTO t1 (i, d, g)
VALUES (
25,
'Multipolygon - tangent * INVALID 13351',
sdo_geometry (2007, null, null, sdo_elem_info_array (1,1003,3, 5,1003,3),
sdo_ordinate_array (50,125, 55,130, 55,128, 60,132))
);
INSERT INTO t1 (i, d, g)
VALUES (
26,
'Multipolygon - multi-touch',
sdo_geometry (2007, null, null, sdo_elem_info_array (1,1003,1, 17,1003,1),
sdo_ordinate_array (50,95, 55,95, 53,96, 55,97, 53,98, 55,99, 50,99, 50,95,
55,100, 55,95, 60,95, 60,100, 55,100))
);
INSERT INTO t1 (i, d, g)
VALUES (
27,
'Polygon with void',
sdo_geometry (2003, null, null, sdo_elem_info_array (1,1003,3, 5,2003,3),
sdo_ordinate_array (50,135, 60,140, 51,136, 59,139))
);
INSERT INTO t1 (i, d, g)
VALUES (
28,
'Polygon with void - reverse',
sdo_geometry (2003, null, null, sdo_elem_info_array (1,2003,3, 5,1003,3),
sdo_ordinate_array (51,146, 59,149, 50,145, 60,150))
);
INSERT INTO t1 (i, d, g)
VALUES (
29,
'Crescent (straight lines) * INVALID 13349',
sdo_geometry (2003, null, null, sdo_elem_info_array (1,1003,1),
sdo_ordinate_array (10,175, 10,165, 20,165, 15,170, 25,170, 20,165,
30,165, 30,175, 10,175))
);
INSERT INTO t1 (i, d, g)
VALUES (
30,
'Crescent (arcs) * INVALID 13349',
sdo_geometry (2003, null, null, sdo_elem_info_array (1,1003,2),
sdo_ordinate_array (14,180, 10,184, 14,188, 18,184, 14,180, 16,182,
14,184, 12,182, 14,180))
);
INSERT INTO t1 (i, d, g)
VALUES (
31,
'Heterogeneous collection',
sdo_geometry (2004, null, null, sdo_elem_info_array (1,1,1, 3,2,1, 7,1003,1),
sdo_ordinate_array (10,5, 10,10, 20,10, 10,105, 15,105, 20,110, 10,110,
10,105))
);
INSERT INTO t1 (i, d, g)
VALUES (
32,
'Polygon+void+island touch',
sdo_geometry (2007, null, null,
sdo_elem_info_array (1,1003,1, 11,2003,1, 31,1003,1),
sdo_ordinate_array (50,168, 50,160, 55,160, 55,168, 50,168,  51,167,
54,167, 54,161, 51,161, 51,162, 52,163, 51,164, 51,165, 51,166, 51,167,
52,166, 52,162, 53,162, 53,166, 52,166))
);
COMMIT;
SELECT i, d, SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT (g, 0.5) FROM t1;

2.7.9 3次元のジオメトリ・タイプ

例2-16では、複数の表(POINTS3D、LINES3DおよびPOLYGONS3D)を作成し、それぞれの表に対応する3次元オブジェクトを(点はPOINTS3Dに、線はLINES3Dに、ポリゴン、面およびソリッドはPOLYGONS3Dに)挿入します。続いて例2-17では、各表のメタデータと空間索引を作成します。

3次元ジオメトリのサポートの詳細は、1.11項を参照してください。

例2-16 3次元のジオメトリを挿入するSQL文

create table points3d(id number, geometry sdo_geometry);
insert into points3d values(1, sdo_geometry(3001,null,
sdo_point_type(0,0,0), null, null));
insert into points3d values(2, sdo_geometry(3001,null,
sdo_point_type(1,1,1), null, null));
insert into points3d values(3, sdo_geometry(3001,null,
sdo_point_type(0,1,1), null, null));
insert into points3d values(4, sdo_geometry(3001,null,
sdo_point_type(0,0,1), null, null));
insert into points3d values(5, sdo_geometry(3001,null,
sdo_point_type(1,1,0), null, null));
insert into points3d values(6, sdo_geometry(3001,null,
sdo_point_type(1,0,1), null, null));
insert into points3d values(7, sdo_geometry(3001,null,
sdo_point_type(1,0,0), null, null));
insert into points3d values(8, sdo_geometry(3001,null,
sdo_point_type(0,1,0), null, null));
insert into points3d values(9, sdo_geometry(3005,null, null,
sdo_elem_info_array(1,1,1, 4,1,1),
sdo_ordinate_array(1,1,1, 0,0,0)));

create table lines3d(id number, geometry sdo_geometry);
insert into lines3d values(1, sdo_geometry(3002,null, null,
sdo_elem_info_array(1,2,1),
sdo_ordinate_array(1,1,1, 0,0,0)));
insert into lines3d values(2, sdo_geometry(3002,null, null,
sdo_elem_info_array(1,2,1),
sdo_ordinate_array(1,0,1, 0,1,0)));
insert into lines3d values(2, sdo_geometry(3002,null, null,
sdo_elem_info_array(1,2,1),
sdo_ordinate_array(0,1,1, 1,0,0)));
insert into lines3d values(3, sdo_geometry(3002,null, null,
sdo_elem_info_array(1,2,1),
sdo_ordinate_array(0,1,1, 1,0,0)));
insert into lines3d values(4, sdo_geometry(3002,null, null,
sdo_elem_info_array(1,2,1),
sdo_ordinate_array(0,1,0, 1,0,1)));

create table polygons3d(id number, geometry sdo_geometry);

-- Simple Polygon
-- All points have to be on the same plane.
insert into polygons3d values(1,
SDO_Geometry (3003,NULL,NULL ,
SDO_Elem_Info_Array(1,1003,1),
SDO_Ordinate_Array(0.5,0.0,0.0,
0.5,1.0,0.0,
0.0,1.0,1.0,
0.0,0.0,1.0,
0.5,0.0,0.0
)));
insert into polygons3d values(2,
SDO_Geometry (3003,NULL,NULL ,
SDO_Elem_Info_Array(1,1003,1),
SDO_Ordinate_Array(6.0,6.0,6.0,
5.0,6.0,10.0,
3.0,4.0,8.0,
4.0,4.0,4.0,
6.0,6.0,6.0
)));
insert into polygons3d values(3,
SDO_Geometry (3007,NULL,NULL ,
SDO_Elem_Info_Array(1,1003,1,16,1003,1),
SDO_Ordinate_Array(6.0,6.0,6.0,
5.0,6.0,10.0,
3.0,4.0,8.0,
4.0,4.0,4.0,
6.0,6.0,6.0,
0.5,0.0,0.0,
0.5,1.0,0.0,
0.0,1.0,1.0,
0.0,0.0,1.0,
0.5,0.0,0.0
)));
-- Polygon with a Hole (same rules as 2D) plus all points on the same plane
insert into polygons3d values(4,
SDO_Geometry (3003,NULL,NULL ,
SDO_Elem_Info_Array(1,1003,1,16,2003,1),
SDO_Ordinate_Array(0.5,0.0,0.0,
0.5,1.0,0.0,
0.0,1.0,1.0,
0.0,0.0,1.0,
0.5,0.0,0.0,
0.25,0.5,0.5,
0.15,0.5,0.7,
0.15,0.6,0.7,
0.25,0.6,0.5,
0.25,0.5,0.5
)));
-- Surface with 2 3D polygons (on same plane)
insert into polygons3d values(5,
SDO_Geometry (3003,NULL,NULL ,
SDO_Elem_Info_Array(1,1006,2,1,1003,1,16,1003,1),
SDO_Ordinate_Array(0.5,0.0,0.0,
0.5,1.0,0.0,
0.0,1.0,0.0,
0.0,0.0,0.0,
0.5,0.0,0.0,
1.5,0.0,0.0,
2.5,1.0,0.0,
1.5,2.0,0.0,
0.5,2.0,0.0,
0.5,0.0,0.0,
1.5,0.0,0.0
)));
-- Surface with 2 3D polygons (on two planes)
insert into polygons3d values(5,
SDO_Geometry(3003,NULL,NULL ,
SDO_Elem_Info_Array(1,1006,2,1,1003,3,7,1003,3),
SDO_Ordinate_Array(2,2,2,
4,4,2,
2,2,2,
4,2,4
)));
-- Surface with 2 3D polygons
-- First polygon has one ext and one int.
insert into polygons3d values(6,
SDO_Geometry (3003,NULL,NULL ,
SDO_Elem_Info_Array(1,1006,2,1,1003,1,16,2003,1,31,1003,1),
SDO_Ordinate_Array(0.5,0.0,0.0,
0.5,1.0,0.0,
0.0,1.0,1.0,
0.0,0.0,1.0,
0.5,0.0,0.0,
0.25,0.5,0.5,
0.15,0.5,0.7,
0.15,0.6,0.7,
0.25,0.6,0.5,
0.25,0.5,0.5,
1.5,0.0,0.0,
2.5,1.0,0.0,
1.5,2.0,0.0,
0.5,2.0,0.0,
0.5,0.0,0.0,
1.5,0.0,0.0
)));
--3D Surface with 3 3D polygons
insert into polygons3d values(7,
SDO_Geometry (3003,NULL,NULL ,
SDO_Elem_Info_Array(1,1006,3,1,1003,1,16,1003,1,34,1003,1),
SDO_Ordinate_Array(0.5,0.0,0.0,
0.5,1.0,0.0,
0.0,1.0,1.0,
0.0,0.0,1.0,
0.5,0.0,0.0,
1.5,0.0,0.0,
2.5,1.0,0.0,
1.5,2.0,0.0,
0.5,2.0,0.0,
0.5,0.0,0.0,
1.5,0.0,0.0,
1.5,0.0,0.0,
2.5,0.0,0.0,
2.5,1.0,0.0,
1.5,0.0,0.0
)));
-- 3D surface with 3 3D polygons
insert into polygons3d values(8,
SDO_Geometry (3003,NULL,NULL ,
SDO_Elem_Info_Array(1,1006,3,1,1003,1,16,2003,1,31,1003,1,49,1003,1),
SDO_Ordinate_Array(0.5,0.0,0.0,
0.5,1.0,0.0,
0.0,1.0,1.0,
0.0,0.0,1.0,
0.5,0.0,0.0,
0.25,0.5,0.5,
0.15,0.5,0.7,
0.15,0.6,0.7,
0.25,0.6,0.5,
0.25,0.5,0.5,
1.5,0.0,0.0,
2.5,1.0,0.0,
1.5,2.0,0.0,
0.5,2.0,0.0,
0.5,0.0,0.0,
1.5,0.0,0.0,
0.5,1.0,0.0,
0.5,2.0,0.0,
0.0,2.0,0.0,
0.0,1.0,0.0,
0.5,1.0,0.0
)));
-- Simple 3D polygon
insert into polygons3d values(9,
SDO_Geometry (3003,NULL,NULL ,
SDO_Elem_Info_Array(1,1003,1),
SDO_Ordinate_Array(0.0,-4.0,1.0,
4.0,-4.0,1.0,
5.0,-3.0,1.0,
5.0,0.0,1.0,
3.0,1.0,1.0,
-1.0,1.0,1.0,
-3.0,0.5,1.0,
0.0,0.0,1.0,
-6.0,-2.0,1.0,
-6.0,-3.5,1.0,
-2.0,-3.5,1.0,
0.0,-4.0,1.0
)));
-- SOLID with 6 polygons
insert into polygons3d values(10,
SDO_Geometry (3008,NULL,NULL ,
SDO_Elem_Info_Array(1,1007,1,1,1006,6,1,1003,1,16,1003,1,31,1003,1,46,1003,1,61,1003,1,76,1003,1),
SDO_Ordinate_Array(1.0,0.0,-1.0,
1.0,1.0,-1.0,
1.0,1.0,1.0,
1.0,0.0,1.0,
1.0,0.0,-1.0,
1.0,0.0,1.0,
0.0,0.0,1.0,
0.0,0.0,-1.0,
1.0,0.0,-1.0,
1.0,0.0,1.0,
0.0,1.0,1.0,
0.0,1.0,-1.0,
0.0,0.0,-1.0,
0.0,0.0,1.0,
0.0,1.0,1.0,
1.0,1.0,-1.0,
0.0,1.0,-1.0,
0.0,1.0,1.0,
1.0,1.0,1.0,
1.0,1.0,-1.0,
1.0,1.0,1.0,
0.0,1.0,1.0,
0.0,0.0,1.0,
1.0,0.0,1.0,
1.0,1.0,1.0,
1.0,1.0,-1.0,
1.0,0.0,-1.0,
0.0,0.0,-1.0,
0.0,1.0,-1.0,
1.0,1.0,-1.0
)));
-- Simple SOLID with 6 polygons
-- All polygons are described using the optimized rectangle representation.
insert into polygons3d values(11,
SDO_Geometry (3008,NULL,NULL , SDO_Elem_Info_Array(1,1007,1,1,1006,6,1,1003,3,7,1003,3,13,1003,3,19,1003,3,25,1003,3,31,1003,3),
SDO_Ordinate_Array(1.0,0.0,-1.0,
1.0,1.0,1.0,
1.0,0.0,1.0,
0.0,0.0,-1.0,
0.0,1.0,1.0,
0.0,0.0,-1.0,
0.0,1.0,-1.0,
1.0,1.0,1.0,
0.0,0.0,1.0,
1.0,1.0,1.0,
1.0,1.0,-1.0,
0.0,0.0,-1.0
)));
-- Multi-Solid
-- Both solids use optimized representation.
insert into polygons3d values(12,
SDO_Geometry (3009,NULL,NULL ,
SDO_Elem_Info_Array(1,1007,3,7,1007,3),
SDO_Ordinate_Array(-2.0,1.0,3.0,
-3.0,-1.0,0.0,
0.0,0.0,0.0,
1.0,1.0,1.0
)));
-- Multi-Solid - like multi-polygon in 2D
-- disjoint solids
insert into polygons3d values(13,
SDO_Geometry (3009,NULL,NULL , SDO_Elem_Info_Array(1,1007,1,1,1006,6,1,1003,1,16,1003,1,31,1003,1,46,1003,1,61,1003,1,76,1003,1,91,1007,1,91,1006,7,91,1003,1,106,1003,1,121,1003,1,136,1003,1,151,1003,1,166,1003,1,184,1003,1),
SDO_Ordinate_Array(1.0,0.0,4.0,
1.0,1.0,4.0,
1.0,1.0,6.0,
1.0,0.0,6.0,
1.0,0.0,4.0,
1.0,0.0,6.0,
0.0,0.0,6.0,
0.0,0.0,4.0,
1.0,0.0,4.0,
1.0,0.0,6.0,
0.0,1.0,6.0,
0.0,1.0,4.0,
0.0,0.0,4.0,
0.0,0.0,6.0,
0.0,1.0,6.0,
1.0,1.0,4.0,
0.0,1.0,4.0,
0.0,1.0,6.0,
1.0,1.0,6.0,
1.0,1.0,4.0,
1.0,1.0,6.0,
0.0,1.0,6.0,
0.0,0.0,6.0,
1.0,0.0,6.0,
1.0,1.0,6.0,
1.0,1.0,4.0,
1.0,0.0,4.0,
0.0,0.0,4.0,
0.0,1.0,4.0,
1.0,1.0,4.0,
2.0,0.0,3.0,
2.0,0.0,0.0,
4.0,2.0,0.0,
4.0,2.0,3.0,
2.0,0.0,3.0,
4.5,-2.0,3.0,
4.5,-2.0,0.0,
2.0,0.0,0.0,
2.0,0.0,3.0,
4.5,-2.0,3.0,
4.5,-2.0,3.0,
-2.0,-2.0,3.0,
-2.0,-2.0,0.0,
4.5,-2.0,0.0,
4.5,-2.0,3.0,
-2.0,-2.0,3.0,
-2.0,2.0,3.0,
-2.0,2.0,0.0,
-2.0,-2.0,0.0,
-2.0,-2.0,3.0,
4.0,2.0,3.0,
4.0,2.0,0.0,
-2.0,2.0,0.0,
-2.0,2.0,3.0,
4.0,2.0,3.0,
2.0,0.0,3.0,
4.0,2.0,3.0,
-2.0,2.0,3.0,
-2.0,-2.0,3.0,
4.5,-2.0,3.0,
2.0,0.0,3.0,
2.0,0.0,0.0,
4.5,-2.0,0.0,
-2.0,-2.0,0.0,
-2.0,2.0,0.0,
4.0,2.0,0.0,
2.0,0.0,0.0
)));

-- SOLID with a hole
-- etype = 1007 exterior solid
-- etype = 2007 is interior solid
-- All polygons of etype=2007 are described as 2003's.
insert into polygons3d values(14,
SDO_Geometry (3008,NULL,NULL ,
SDO_Elem_Info_Array(1,1007,1,1,1006,7,1,1003,1,16,1003,1,31,1003,1,46,1003,1,61,1003,1,76,1003,1,94,1003,1,112,2006,6,112,2003,1,127,2003,1,142,2003,1,157,2003,1,172,2003,1,187,2003,1),
SDO_Ordinate_Array(2.0,0.0,3.0,
2.0,0.0,0.0,
4.0,2.0,0.0,
4.0,2.0,3.0,
2.0,0.0,3.0,
4.5,-2.0,3.0,
4.5,-2.0,0.0,
2.0,0.0,0.0,
2.0,0.0,3.0,
4.5,-2.0,3.0,
4.5,-2.0,3.0,
-2.0,-2.0,3.0,
-2.0,-2.0,0.0,
4.5,-2.0,0.0,
4.5,-2.0,3.0,
-2.0,-2.0,3.0,
-2.0,2.0,3.0,
-2.0,2.0,0.0,
-2.0,-2.0,0.0,
-2.0,-2.0,3.0,
4.0,2.0,3.0,
4.0,2.0,0.0,
-2.0,2.0,0.0,
-2.0,2.0,3.0,
4.0,2.0,3.0,
2.0,0.0,3.0,
4.0,2.0,3.0,
-2.0,2.0,3.0,
-2.0,-2.0,3.0,
4.5,-2.0,3.0,
2.0,0.0,3.0,
2.0,0.0,0.0,
4.5,-2.0,0.0,
-2.0,-2.0,0.0,
-2.0,2.0,0.0,
4.0,2.0,0.0,
2.0,0.0,0.0,
1.0,1.0,2.5,
-1.0,1.0,2.5,
-1.0,1.0,0.5,
1.0,1.0,0.5,
1.0,1.0,2.5,
-1.0,1.0,2.5,
-1.0,-1.0,2.5,
-1.0,-1.0,0.5,
-1.0,1.0,0.5,
-1.0,1.0,2.5,
-1.0,-1.0,2.5,
1.0,-1.0,2.5,
1.0,-1.0,0.5,
-1.0,-1.0,0.5,
-1.0,-1.0,2.5,
1.0,-1.0,2.5,
1.0,1.0,2.5,
1.0,1.0,0.5,
1.0,-1.0,0.5,
1.0,-1.0,2.5,
-1.0,-1.0,2.5,
-1.0,1.0,2.5,
1.0,1.0,2.5,
1.0,-1.0,2.5,
-1.0,-1.0,2.5,
1.0,1.0,0.5,
-1.0,1.0,0.5,
-1.0,-1.0,0.5,
1.0,-1.0,0.5,
1.0,1.0,0.5
)));
-- Gtype = SOLID
-- The elements make up one composite solid (non-disjoint solids) like a cube
-- on a cube on a cube.
-- This is made up of two solid elements.
-- Each solid element here is a simple solid.
insert into polygons3d values(15,
SDO_Geometry (3008,NULL,NULL ,
SDO_Elem_Info_Array(1,1008,2,1,1007,1,1,1006,6,1,1003,1,16,1003,1,31,1003,1,46,1003,1,61,1003,1,76,1003,1,91,1007,1,91,1006,7,91,1003,1,106,1003,1,121,1003,1,136,1003,1,151,1003,1,166,1003,1,184,1003,1),
SDO_Ordinate_Array(-2.0,1.0,3.0,
-2.0,1.0,0.0,
-3.0,1.0,0.0,
-3.0,1.0,3.0,
-2.0,1.0,3.0,
-3.0,1.0,3.0,
-3.0,1.0,0.0,
-3.0,-1.0,0.0,
-3.0,-1.0,3.0,
-3.0,1.0,3.0,
-3.0,-1.0,3.0,
-3.0,-1.0,0.0,
-2.0,-1.0,0.0,
-2.0,-1.0,3.0,
-3.0,-1.0,3.0,
-2.0,-1.0,3.0,
-2.0,-1.0,0.0,
-2.0,1.0,0.0,
-2.0,1.0,3.0,
-2.0,-1.0,3.0,
-2.0,-1.0,3.0,
-2.0,1.0,3.0,
-3.0,1.0,3.0,
-3.0,-1.0,3.0,
-2.0,-1.0,3.0,
-2.0,1.0,0.0,
-2.0,-1.0,0.0,
-3.0,-1.0,0.0,
-3.0,1.0,0.0,
-2.0,1.0,0.0,
2.0,0.0,3.0,
2.0,0.0,0.0,
4.0,2.0,0.0,
4.0,2.0,3.0,
2.0,0.0,3.0,
4.5,-2.0,3.0,
4.5,-2.0,0.0,
2.0,0.0,0.0,
2.0,0.0,3.0,
4.5,-2.0,3.0,
4.5,-2.0,3.0,
-2.0,-2.0,3.0,
-2.0,-2.0,0.0,
4.5,-2.0,0.0,
4.5,-2.0,3.0,
-2.0,-2.0,3.0,
-2.0,2.0,3.0,
-2.0,2.0,0.0,
-2.0,-2.0,0.0,
-2.0,-2.0,3.0,
4.0,2.0,3.0,
4.0,2.0,0.0,
-2.0,2.0,0.0,
-2.0,2.0,3.0,
4.0,2.0,3.0,
2.0,0.0,3.0,
4.0,2.0,3.0,
-2.0,2.0,3.0,
-2.0,-2.0,3.0,
4.5,-2.0,3.0,
2.0,0.0,3.0,
2.0,0.0,0.0,
4.5,-2.0,0.0,
-2.0,-2.0,0.0,
-2.0,2.0,0.0,
4.0,2.0,0.0,
2.0,0.0,0.0
)));

例2-17では、例2-16で作成した表(POINTS3D、LINES3DおよびPOLYGONS3D)に関する必要な情報を使用してUSER_SDO_GEOM_METADATAビューを更新し、各表のジオメトリ列(GEOMETRY)に空間索引を作成します。索引の作成にはPARAMETERS ('sdo_indx_dims=3')句を使用し、3次元ジオメトリをサポートする演算に3つの次元すべてが使用されるようにします。

例2-17 3次元ジオメトリのメタデータの更新と索引の作成

INSERT INTO user_sdo_geom_metadata VALUES('POINTS3D', 'GEOMETRY',
sdo_dim_array( sdo_dim_element('X', -100,100, 0.000005),
sdo_dim_element('Y', -100,100, 0.000005),
sdo_dim_element('Z', -100,100, 0.000005)), NULL);

CREATE INDEX points3d_sidx on points3d(geometry)
INDEXTYPE IS mdsys.spatial_index
PARAMETERS ('sdo_indx_dims=3');

INSERT INTO user_sdo_geom_metadata VALUES('LINES3D', 'GEOMETRY',
sdo_dim_array( sdo_dim_element('X', -100,100, 0.000005),
sdo_dim_element('Y', -100,100, 0.000005),
sdo_dim_element('Z', -100,100, 0.000005)), NULL);

CREATE INDEX lines3d_sidx on lines3d(geometry)
INDEXTYPE IS mdsys.spatial_index
PARAMETERS ('sdo_indx_dims=3');

INSERT INTO user_sdo_geom_metadata VALUES('POLYGONS3D', 'GEOMETRY',
sdo_dim_array( sdo_dim_element('X', -100,100, 0.000005),
sdo_dim_element('Y', -100,100, 0.000005),
sdo_dim_element('Z', -100,100, 0.000005)), NULL);

CREATE INDEX polygons3d_sidx on polygons3d(geometry)
INDEXTYPE IS mdsys.spatial_index
PARAMETERS ('sdo_indx_dims=3');

2.8 ジオメトリのメタデータ・ビュー

次元、上限と下限および各次元の許容差を記述するジオメトリのメタデータは、MDSYSが所有するグローバル表に格納されます。ユーザーは、このグローバル表を直接更新しないでください。Spatialの各ユーザーには、そのユーザーに関連付けられたスキーマで使用可能な次のビューがあります。

- USER_SDO_GEOM_METADATAには、ユーザーが所有するすべての空間表(スキーマ)についてのメタデータ情報が含まれます。このビューのみが更新可能であり、Spatialのユーザーは、空間表に関連するメタデータをこのビューに挿入する必要があります。

- ALL_SDO_GEOM_METADATAには、ユーザーがSELECT権限を持つ、すべての空間表のメタデータ情報が含まれます。

これらのビューの移入は、Spatialのユーザーの責任において行います。各空間列について、USER_SDO_GEOM_METADATAビューに対応する行を挿入する必要があります。Oracle Spatialでは、ALL_SDO_GEOM_METADATAビューも更新され、USER_SDO_GEOM_METADATAに挿入した行が確実に反映されます。

各メタデータ・ビューは、次のとおり定義されています。

(
TABLE_NAME   VARCHAR2(32),
COLUMN_NAME  VARCHAR2(32),
DIMINFO      SDO_DIM_ARRAY,
SRID         NUMBER
);

また、ALL_SDO_GEOM_METADATAビューには、TABLE_NAMEで指定した表を所有するスキーマを識別するOWNER列があります。

次に、Oracle Spatialメタデータ・ビューに格納されるスキーマ名、表名、列名およびSDO_DIMNAME値に関する注意事項を示します。

- これらは、文字、数字およびアンダースコアのみで構成する必要があります。たとえば、このような名前には、空白( )、アポストロフィ(')、引用符(")またはカンマ(,)を含めることはできません。

- 名前がジオメトリのメタデータ・ビューに格納される前、または表がアクセスされる前に、名前に含まれるすべての文字が大文字に変換されます。この変換は、表名で指定されるスキーマ名についても実行されます。

2.8.1 TABLE_NAME

TABLE_NAME列には、COLA_MARKETSなどのフィーチャ表の名前が含まれます。このフィーチャ表には、SDO_GEOMETRY型の列があります。

表名は、空間メタデータ・ビューにすべて大文字で格納されます。

表名をUSER_SDO_GEOM_METADATAビューに挿入する場合、空白または大/小文字が混在した文字列を引用符で囲んで指定することはできません。また、問合せで使用する場合は、(すべて大文字でないかぎり)引用符で囲むことはできません。

空間列に空間索引を作成する場合、空間フィーチャ表を索引構成表にすることはできません。

2.8.2 COLUMN_NAME

COLUMN_NAME列には、SDO_GEOMETRY型の列名が含まれます。COLA_MARKETS表の場合、この列をSHAPEといいます。

列名は、空間メタデータ・ビューにすべて大文字で格納されます。

列名は、USER_SDO_GEOM_METADATAビューに挿入する場合、空白または大/小文字が混在した文字列を引用符で囲んで指定することができません。また、問合せで使用する場合は、(すべて大文字でないかぎり)引用符で囲むことはできません。

2.8.3 DIMINFO

DIMINFO列は、オブジェクト型の可変長配列であり、次元によって指定され、次元ごとに1つのエントリがあります。SDO_DIM_ARRAY型は、次のとおり定義されます。

Create Type SDO_DIM_ARRAY as VARRAY(4) of SDO_DIM_ELEMENT;

SDO_DIM_ELEMENT型は、次のとおり定義されます。

Create Type SDO_DIM_ELEMENT as OBJECT (
SDO_DIMNAME VARCHAR2(64),
SDO_LB NUMBER,
SDO_UB NUMBER,
SDO_TOLERANCE NUMBER);

n次元の場合、SDO_DIM_ARRAYインスタンスは、サイズがnのインスタンスです。DIMINFOには、2次元のジオメトリに対して2つ、3次元のジオメトリに対して3つ、4次元のジオメトリに対して4つのSDO_DIM_ELEMENTインスタンスが含まれます。配列の各SDO_DIM_ELEMENTインスタンスには、SDO_LB、SDO_UBおよびSDO_TOLERANCE属性に対する有効な(NULL以外の)値が必要です。

注意:
DIMINFO情報に反映される次元数は、レイヤー内の各ジオメトリ・オブジェクトの次元数に一致している必要があります。

許容差および適切なSDO_TOLERANCE値の判断方法については、1.5.5項(特に1.5.5.1項)を参照してください。

Spatialでは、可変長配列は次元によって指定されるとみなされます。DIMINFO可変長配列は、SDO_ORDINATES可変長配列の点の縦座標と同じ方法で、次元によって指定される必要があります。たとえば、SDO_ORDINATES可変長配列に{X1, Y1, ..., Xn, Yn}が含まれる場合、最初のDIMINFOエントリはX次元を定義し、2番目のDIMINFOエントリはY次元を定義する必要があります。

2.1項の例2-1に、SDO_GEOMETRY型およびSDO_DIM_ARRAY型の使用方法を示しています。この例は、ジオメトリ・オブジェクト(コーラの仮想マーケット領域)の表現方法、およびCOLA_MARKETSフィーチャ表とUSER_SDO_GEOM_METADATAビューにそれらのオブジェクトのデータを移入する方法を示しています。

2.8.4 SRID

SRID列は、列にあるすべてのジオメトリに対する座標系のSRID値、またはジオメトリに座標系が関連付けられていない場合はNULLを含む必要があります。(座標系については、第6章を参照してください。)

2.9 空間索引に関する構造

この項では、空間索引データおよびメタデータを含む表の構造について説明します。空間索引付けの概念および使用上の注意は、1.7項を参照してください。空間索引データおよびメタデータは、ともに空間索引付けルーチンによって作成およびメンテナンスされる表に格納されています。これらの表は、(基になる)フィーチャ表の所有者のスキーマに作成され、フィーチャ表には、SDO_GEOMETRY型の列に作成された空間索引があります。

2.9.1 空間索引ビュー

スキーマ(ユーザー)ごとに、xxx_SDO_INDEX_INFOとxxx_SDO_INDEX_METADATAという2つの空間索引メタデータ・ビューがあります。xxxはUSERまたはALLです。これらのビューは、ユーザーに対して読込み専用であり、Spatial索引付けルーチンによって作成およびメンテナンスされます。

2.9.1.1 xxx_SDO_INDEX_INFOビュー

次のビューには、空間索引についての基本情報が含まれます。

- USER_SDO_INDEX_INFOには、ユーザーが所有するすべての空間表の索引情報が含まれます。

- ALL_SDO_INDEX_INFOには、ユーザーがSELECT権限を持つ、すべての空間表の索引情報が含まれます。

USER_SDO_INDEX_INFOビューおよびALL_SDO_INDEX_INFOビューには、表2-8に示すとおり、同じ列が含まれます。ただし、USER_SDO_INDEX_INFOビューには、SDO_INDEX_OWNER列は含まれません。列をビュー定義の順に示します。

表2-8 xxx_SDO_INDEX_INFOビューの列

列名

データ型

説明

SDO_INDEX_OWNER

VARCHAR2

索引の所有者です(ALL_SDO_INDEX_INFOビューのみ)。

INDEX_NAME

VARCHAR2

索引名です。

TABLE_OWNER

VARCHAR2

この索引が作成された列を含む表の所有者の名前です。

TABLE_NAME

VARCHAR2

この索引が作成された列を含む表の名前です。

COLUMN_NAME

VARCHAR2

この索引が作成された列の名前です。

SDO_INDEX_TYPE

VARCHAR2

RTREEが含まれます(Rツリー索引の場合)。

SDO_INDEX_TABLE

VARCHAR2

空間索引表(2.9.2項を参照)の名前です。

SDO_INDEX_STATUS

VARCHAR2

(Oracleで使用するために予約されています。)

2.9.1.2 xxx_SDO_INDEX_METADATAビュー

次のビューには、空間索引メタデータについての詳細情報が含まれます。

- USER_SDO_INDEX_METADATAには、ユーザーが所有するすべての空間表の索引情報が含まれます。

- ALL_SDO_INDEX_METADATAには、ユーザーがSELECT権限を持つ、すべての空間表の索引情報が含まれます。

USER_SDO_INDEX_METADATAとALL_SDO_INDEX_METADATAビューには、表2-9に示す、同じ列が含まれます。列をビュー定義の順に示します。

表2-9 xxx_SDO_INDEX_METADATAビューの列

列名

データ型

説明

SDO_INDEX_OWNER

VARCHAR2

索引の所有者です。

SDO_INDEX_TYPE

VARCHAR2

RTREEが含まれます(Rツリー索引の場合)。

SDO_LEVEL

NUMBER

(該当なし、サポートされなくなった機能で使用。)

SDO_NUMTILES

NUMBER

(該当なし、サポートされなくなった機能で使用。)

SDO_MAXLEVEL

NUMBER

(該当なし、サポートされなくなった機能で使用。)

SDO_COMMIT_INTERVAL

NUMBER

(該当なし、サポートされなくなった機能で使用。)

SDO_INDEX_TABLE

VARCHAR2

空間索引表(2.9.2項を参照)の名前です。

SDO_INDEX_NAME

VARCHAR2

索引名です。

SDO_INDEX_PRIMARY

NUMBER

1次索引か2次索引かを示します。1は1次索引、2は2次索引です。

SDO_TSNAME

VARCHAR2

SDO_INDEX_TABLEのスキーマ名です。

SDO_COLUMN_NAME

VARCHAR2

この索引が作成された列の名前です。

SDO_RTREE_HEIGHT

NUMBER

Rツリーの高さです。

SDO_RTREE_NUM_NODES

NUMBER

Rツリーのノード数です。

SDO_RTREE_DIMENSIONALITY

NUMBER

Spatialが内部的に使用する次元数です。これは、索引付けされる次元数(CREATE INDEX文またはALTER INDEX文のsdo_indx_dimsキーワードで制御され、このビューのSDO_INDEX_DIMS列に格納)とは異なる場合があります。たとえば、測地データの索引の場合、SDO_RTREE_DIMENSIONALITYの値は3ですが、SDO_INDEX_DIMSの値は2です。

SDO_RTREE_FANOUT

NUMBER

Rツリー・ノードにある子の最大数です。

SDO_RTREE_ROOT

VARCHAR2

索引表にあるRツリーのルート・ノードに対応するROWIDです。

SDO_RTREE_SEQ_NAME

VARCHAR2

Rツリーに関連付けられた順序名です。

SDO_FIXED_META

RAW

使用可能な場合、この列には固定レベル索引に対するSDO_GROUPCODEまたはSDO_CODEのメタデータ部分が含まれます。

SDO_TABLESPACE

VARCHAR2

SQLのCREATE TABLE文の場合と同様です。SDOINDEX表を作成するための表領域です。

SDO_INITIAL_EXTENT

VARCHAR2

SQLのCREATE TABLE文の場合と同様です。

SDO_NEXT_EXTENT

VARCHAR2

SQLのCREATE TABLE文の場合と同様です。

SDO_PCTINCREASE

NUMBER

SQLのCREATE TABLE文の場合と同様です。

SDO_MIN_EXTENTS

NUMBER

SQLのCREATE TABLE文の場合と同様です。

SDO_MAX_EXTENTS

NUMBER

SQLのCREATE TABLE文の場合と同様です。

SDO_INDEX_DIMS

NUMBER

この索引が構築された列内のジオメトリ・オブジェクトの次元数です。この値は、CREATE INDEX文またはALTER INDEX文のsdo_indx_dimsキーワードの値で決定されます。

SDO_LAYER_GTYPE

VARCHAR2

DEFAULT(レイヤーが点およびポリゴン・データの両方を含むことができる場合)または2.2.1項の表2-1の「ジオメトリ・タイプ」列に示す値が含まれます。

SDO_RTREE_PCTFREE

NUMBER

Rツリー索引の作成時は空にしておく、各索引ツリー・ノードのスロットの最小割合です。

SDO_INDEX_PARTITION

VARCHAR2

パーティション索引の場合は、索引パーティションの名前です。

SDO_PARTITIONED

NUMBER

索引がパーティション索引でない場合は0(ゼロ)、パーティション索引の場合は1が含まれます。

SDO_RTREE_QUALITY

NUMBER

索引の品質スコアです。Rツリーの品質については、1.7.2項を参照してください。

SDO_INDEX_VERSION

NUMBER

索引の内部バージョン番号です。

SDO_INDEX_GEODETIC

VARCHAR2

索引が測地索引の場合はTRUE、測地索引でない場合はFALSEです。

SDO_INDEX_STATUS

VARCHAR2

(Oracleで使用するために予約されています。)

SDO_NL_INDEX_TABLE

VARCHAR2

索引の非リーフ・ノードに対する個別の索引表の名前(名前の形式はMDNT_...$)です。詳細は、第18章のCREATE INDEX文のsdo_non_leaf_tblパラメータの説明を参照してください。

SDO_DML_BATCH_SIZE

NUMBER

コミット操作後に、それぞれの更新バッチで処理する索引更新数です。詳細は、第18章のCREATE INDEX文のsdo_dml_batch_sizeパラメータの説明を参照してください。

SDO_RTREE_EXT_XPND

NUMBER

(将来使用するために予約済。)

SDO_ROOT_MBR

SDO_GEOMETRY

空間レイヤーの最大エクステントに対する最小境界矩形です。これは、現在のエクステントのMBRに等しいかまたは大きくなります。索引が再構築されると、現在のエクステントを反映するように再設定されます。

2.9.2 空間索引表の定義

Rツリー索引の場合、空間索引表(2.9.1.2項の表2-9に示すSDO_INDEX_TABLEの各エントリ)には、表2-10に示す列が含まれます。

表2-10 Rツリー空間索引データ表の列

列名

データ型

説明

NODE_ID

NUMBER

ツリーのこのノードに対する一意のID番号です。

NODE_LEVEL

NUMBER

ツリー内のノードのレベルです。リーフ・ノード(エントリが実表のデータ項目を指すノード)はレベル1、その親ノードはレベル2などのようになります。

INFO

BLOB

ノード内のその他の情報です。<child_mbr, child_rowid>のペア(fanoutの最大値、または各Rツリー・ノード内のペアの子の数)の配列が含まれます。ここで、child_rowidは子ノードのROWID、または実表のデータ項目のROWIDです。

2.9.3 Rツリー索引における順序オブジェクト

各Rツリー空間索引表は、それぞれ関連付けられた順序オブジェクト(2.9.1.2項の表2-9に示すUSER_SDO_INDEX_METADATAビューのSDO_RTREE_SEQ_NAME列を参照)を持ちます。順序によって、複数の同時ユーザーによる索引の同時更新が可能になります。

順序名は、アンダースコアの前にある「T」を「S」に置き換えた索引表名です。たとえば、索引表MDRT_5C01$は、順序オブジェクトMDRS_5C01$に関連付けられます。

2.10 測定単位のサポート

地理参照座標系(SDO_SRID値)が入力ジオメトリに関連付けられている場合、測定を伴うジオメトリ・ファンクションを使用すると、オプションのunitパラメータを使用して、特定の距離または面積の測定単位を指定できます。unitパラメータは、SDO_SRID値がNULLであるジオメトリ(垂直デカルト・システム)には無効です。座標系のサポートについては、第6章を参照してください。

デフォルトの測定単位は、地理参照座標系に関連付けられた測定単位です。ほとんどの座標系の測定単位はmです。この場合、デフォルトの距離単位はmで、デフォルトの面積単位はm2です。ただし、unitパラメータを使用すると、アプリケーション・ユーザーにとってより有効な結果(レストランまでの距離のマイル表示など)をSpatialで自動的に換算し、戻すことができます。

unitパラメータは、文字列unit=およびSDO_UNITS_OF_MEASURE表(6.7.27項を参照)の有効なUNIT_OF_MEAS_NAME値を一重引用符で囲む必要があります。たとえば、次の例(6.13項の例6-17のデータおよび定義を使用)に示す'unit=KM'は、測定単位としてkmを指定しています。

SELECT c.name, SDO_GEOM.SDO_LENGTH(c.shape, m.diminfo, 'unit=KM')
FROM cola_markets_cs c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS_CS' AND m.column_name = 'SHAPE';

Spatialでは、SDO_UNITS_OF_MEASURE表(6.7.27項を参照)の情報を使用して、有効な単位名、および異なる単位間での比較または換算で使用する比率を決定します。また、次のレガシー・ビューを使用すると、メジャーの角度、面積および距離の単位を簡単に確認することもできます。

- MDSYS.SDO_ANGLE_UNITS(6.8.2項を参照)

- MDSYS.SSDO_AREA_UNITS(6.8.3項を参照)

- MDSYS.SSDO_DIST_UNITS(6.8.5項を参照)

2.10.1 ユーザー定義の測定単位の作成

Oracleから提供されている面積および距離の測定単位でニーズを十分に満たすことができない場合は、ユーザー定義の面積および距離の単位を作成できます。(ユーザー定義の角度の単位は作成できません。)ユーザー定義の測定単位を作成するには、DBAロールが付与されているユーザーとしてデータベースに接続し、SDO_UNITS_OF_MEASURE表に必要な単位ごとに1行挿入する必要があります(6.7.27項を参照)。

表2-11に、ユーザー定義の測定単位に対応する行を挿入する場合に使用するSDO_UNITS_OF_MEASURE表の列と、各列の要件および推奨値を示します。

表2-11 ユーザー定義の単位で使用するSDO_UNITS_OF_MEASURE表のエントリ

列名

説明

UOM_ID

任意の測定単位ID番号で、Oracle提供の単位または別のユーザー定義の単位で現在使用されていないIDです。例: 1000001

UNIT_OF_MEAS_NAME

ユーザー定義の測定単位の名前を指定します。例: HALF_METER

SHORT_NAME

測定単位の短縮名を指定します(オプションの短縮名がある場合)。

UNIT_OF_MEAS_TYPE

その単位が使用される測定の種類です。area(面積単位の場合)またはlength(距離単位の場合)のいずれかを指定する必要があります。

TARGET_UOM_ID

サポート用のオプションとして、面積単位の場合は10008(10008はSQ_METERのUOM_ID)、距離単位の場合は10032(10032はMETERのUOM_ID)を入力することをお薦めします。

FACTOR_B

浮動小数点数として表現できる値の場合は、ユーザー定義の1単位と等しい平方m(面積単位の場合)の数値またはm(距離単位の場合)の数値を指定します。たとえば、標準の1mの半分として定義された単位の場合は、.5を指定します。

単純な浮動小数点数として表現できない値の場合は、ユーザー定義の単位の1つと等しい平方mの数値(面積単位の場合)またはmの数値(距離単位の場合)を決定する式FACTOR_B/FACTOR_Cの被除数を指定します。

FACTOR_C

浮動小数点数として表現できる値の場合は、1を指定します。

単純な浮動小数点数として表現できない値の場合は、ユーザー定義の単位の1つと等しい平方mの数値(面積単位の場合)またはmの数値(距離単位の場合)を決定する式FACTOR_B/FACTOR_Cの除数を指定します。

INFORMATION_SOURCE

USER_DEFINEDを指定します。

DATA_SOURCE

単位を説明する短い文です。例: User-defined half meter

IS_LEGACY

FALSEを指定します。

LEGACY_CODE

(ユーザー定義の単位には使用しないでください。)

例2-18では、HALF_METERという名前のユーザー定義の距離単位を作成し、作成した単位を問合せで使用して、指定した店舗の400,000半メートル(200km)以内に居住するすべての顧客を検索します。

例2-18 ユーザー定義の測定単位の作成および使用

-- Distance unit: HALF_METER
-- FACTOR_B specifies how many meters = one of this unit.

INSERT INTO MDSYS.SDO_UNITS_OF_MEASURE
(UOM_ID, UNIT_OF_MEAS_NAME, UNIT_OF_MEAS_TYPE, TARGET_UOM_ID,
FACTOR_B, FACTOR_C, INFORMATION_SOURCE, DATA_SOURCE, IS_LEGACY)
VALUES
(100001, 'HALF_METER', 'length', 100001,
.5, 1, 'User-defined half meter', 'USER_DEFINED', 'FALSE');

. . .
-- Find all the customers within 400,000 half-meters of store_id = 101
SELECT /*+ordered*/
c.customer_id,
c.first_name,
c.last_name
FROM stores s,
customers c
WHERE s.store_id = 101
AND sdo_within_distance (c.cust_geo_location,
s.store_geo_location,
'distance = 400000 unit = HALF_METER') = 'TRUE';

CUSTOMER_ID FIRST_NAME                     LAST_NAME
----------- ------------------------------ ------------------------------
1005 Carla                          Rodriguez
1004 Thomas                         Williams
1003 Marian                         Chang
1001 Alexandra                      Nichols

3 SQL Multimedia型のサポート

この章では、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』で指定されたST_xxx型の使用に対する、Oracle Spatialでのサポートについて説明します。この章の内容は次のとおりです。

- 3.1項「ST_GEOMETRYとSDO_GEOMETRYとの相互運用性」

- 3.3項「SQL Multimedia型での許容差」

- 3.4項「名前の競合の回避」

- 3.5項「注釈テキストの型およびビュー」

3.1 ST_GEOMETRYとSDO_GEOMETRYとの相互運用性

SQL MultimediaのST_GEOMETRYルート・タイプ(サブタイプを含む)とOracle SpatialのSDO_GEOMETRY型(2.2項を参照)は、基本的に相互運用できます。ST_GEOMETRYサブタイプは次のとおりです。

- ST_CIRCULARSTRING

- ST_COMPOUNDCURVE

- ST_CURVE

- ST_CURVEPOLYGON

- ST_GEOMCOLLECTION

- ST_LINESTRING

- ST_MULTICURVE

- ST_MULTILINESTRING

- ST_MULTIPOINT

- ST_MULTIPOLYGON

- ST_MULTISURFACE

- ST_POINT

- ST_POLYGON

- ST_SURFACE

ST_GEOMETRY型には、SDO_GEOMETRYオブジェクトを使用してその型のインスタンスを作成するための追加コンストラクタ・メソッド(つまり、ISO標準で定義されたコンストラクタに加え)があります。このコンストラクタには、次の形式があります。

ST_GEOMETRY(geom SDO_GEOMETRY);

例3-1では、SDO_GEOMETRY型のかわりに空間列にST_GEOMETRY型を使用して表を作成し、ST_GEOMETRYコンストラクタを使用して、その表に行を挿入する際のSHAPE列の値を指定します。

例3-1 空間列でのST_GEOMETRY型の使用

CREATE TABLE cola_markets (
mkt_id NUMBER PRIMARY KEY,
name VARCHAR2(32),
shape ST_GEOMETRY);

INSERT INTO cola_markets VALUES(
1,
'cola_a',
ST_GEOMETRY(
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
-- define rectangle (lower left and upper right) with
-- Cartesian-coordinate data
)
)
);

ST_GEOMETRY型の空間列を持つ表を作成する場合は、SDO_GEOMETRY型を使用して定義される空間データの場合と同様に、その情報をUSER_SDO_GEOM_METADATAビューに追加し、ST_GEOMETRY列に空間索引を作成する必要があります。これらの操作を実行した後に、ST_GEOMETRYデータでOracle Spatialの演算子(第19章を参照)を使用できます。標準で定義されている演算子の他に、SDO_NN演算子およびSDO_WITHIN_DISTANCE演算子も使用できます。

例3-2では、2.1項の例2-1と基本的に同じ操作を実行しますが、空間列に対して、SDO_GEOMETRY型のかわりにST_GEOMETRY型を使用します。

例3-2 ST_GEOMETRYデータの作成、索引付け、格納および問合せ

CREATE TABLE cola_markets (
mkt_id NUMBER PRIMARY KEY,
name VARCHAR2(32),
shape ST_GEOMETRY);

INSERT INTO cola_markets VALUES(
1,
'cola_a',
ST_GEOMETRY(
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
-- define rectangle (lower left and upper right) with
-- Cartesian-coordinate data
)
)
);

INSERT INTO cola_markets VALUES(
2,
'cola_b',
ST_GEOMETRY(
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
)
)
);

INSERT INTO cola_markets VALUES(
3,
'cola_c',
ST_GEOMETRY(
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)
)
)
);

INSERT INTO cola_markets VALUES(
4,
'cola_d',
ST_GEOMETRY(
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4), -- one circle
SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11)
)
)
);

---------------------------------------------------------------------------
-- UPDATE METADATA VIEW --
---------------------------------------------------------------------------

-- Update the USER_SDO_GEOM_METADATA view. This is required before
-- the spatial index can be created. Do this only once for each layer
-- (that is, table-column combination; here: cola_markets and shape).

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'cola_markets',
'shape',
SDO_DIM_ARRAY(   -- 20X20 grid
SDO_DIM_ELEMENT('X', 0, 20, 0.005),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
),
NULL   -- SRID
);

-------------------------------------------------------------------
-- CREATE THE SPATIAL INDEX --
-------------------------------------------------------------------

CREATE INDEX cola_spatial_idx
ON cola_markets(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

---------------------------
-- SDO_NN and SDO_WITHIN_DISTANCE
--------------------------

-- SDO_NN operator.

SELECT  /*+ INDEX(c cola_spatial_idx) */ c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_NN(c.shape,  sdo_geometry(2001, NULL,
sdo_point_type(10,7,NULL), NULL,  NULL),  'sdo_num_res=2') = 'TRUE';

-- SDO_NN_DISTANCE ancillary operator

SELECT   /*+ INDEX(c cola_spatial_idx) */
c.mkt_id, c.name, SDO_NN_DISTANCE(1) dist
FROM cola_markets c
WHERE SDO_NN(c.shape,  sdo_geometry(2001, NULL,
sdo_point_type(10,7,NULL), NULL,  NULL),
'sdo_num_res=2', 1) = 'TRUE' ORDER BY dist;

-- SDO_WITHIN_DISTANCE operator (two examples)

SELECT c.name FROM cola_markets c WHERE SDO_WITHIN_DISTANCE(c.shape,
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8)),
'distance=10') = 'TRUE';

-- What geometries are within a distance of 10 from a query window
-- (here, a rectangle with lower-left, upper-right coordinates 4,6, 8,8)?
-- But exclude geoms with MBRs with both sides < 4.1, i.e., cola_c and cola_d.

SELECT c.name FROM cola_markets c WHERE SDO_WITHIN_DISTANCE(c.shape,
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8)),
'distance=10 min_resolution=4.1') = 'TRUE';

-------------------------------------
-- Some ST_GEOMETRY member functions
-------------------------------------

SELECT c.shape.GET_WKB()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.GET_WKT()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_COORDDIM()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_ISVALID()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_SRID()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_SRID(8307)
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_ISEMPTY()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_ENVELOPE()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_BOUNDARY()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_GEOMETRYTYPE()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_ISSIMPLE()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_DIMENSION()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_CONVEXHULL()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_CENTROID()
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_GETTOLERANCE()
FROM cola_markets c WHERE c.name = 'cola_b';

-- Some member functions that require a parameter
DECLARE
cola_a_geom ST_GEOMETRY;
cola_b_geom ST_GEOMETRY;
cola_c_geom ST_GEOMETRY;
cola_d_geom ST_GEOMETRY;
returned_geom ST_GEOMETRY;
returned_number NUMBER;

BEGIN

-- Populate geometry variables with cola market shapes.
SELECT c.shape INTO cola_a_geom FROM cola_markets c
WHERE c.name = 'cola_a';
SELECT c.shape INTO cola_b_geom FROM cola_markets c
WHERE c.name = 'cola_b';
SELECT c.shape INTO cola_c_geom FROM cola_markets c
WHERE c.name = 'cola_c';
SELECT c.shape INTO cola_d_geom FROM cola_markets c
WHERE c.name = 'cola_d';

SELECT c.shape.ST_EQUALS(cola_a_geom) INTO returned_number
FROM cola_markets c WHERE c.name = 'cola_b';
DBMS_OUTPUT.PUT_LINE('Is cola_b equal to cola_a?: ' || returned_number);

SELECT c.shape.ST_SYMMETRICDIFFERENCE(cola_a_geom) INTO returned_geom
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_DISTANCE(cola_d_geom) INTO returned_number
FROM cola_markets c WHERE c.name = 'cola_b';
DBMS_OUTPUT.PUT_LINE('Distance between cola_b equal to cola_d: ' || returned_number);

SELECT c.shape.ST_INTERSECTS(cola_a_geom) INTO returned_number
FROM cola_markets c WHERE c.name = 'cola_b';
DBMS_OUTPUT.PUT_LINE('Does cola_b intersect cola_a?: ' || returned_number);

SELECT c.shape.ST_CROSS(cola_a_geom) INTO returned_number
FROM cola_markets c WHERE c.name = 'cola_b';
DBMS_OUTPUT.PUT_LINE('Does cola_b cross cola_a?: ' || returned_number);

SELECT c.shape.ST_DISJOINT(cola_a_geom) INTO returned_number
FROM cola_markets c WHERE c.name = 'cola_b';
DBMS_OUTPUT.PUT_LINE('Is cola_b disjoint with cola_a?: ' || returned_number);

SELECT c.shape.ST_TOUCH(cola_a_geom) INTO returned_number
FROM cola_markets c WHERE c.name = 'cola_b';
DBMS_OUTPUT.PUT_LINE('Does cola_b touch cola_a?: ' || returned_number);

SELECT c.shape.ST_WITHIN(cola_a_geom) INTO returned_number
FROM cola_markets c WHERE c.name = 'cola_b';
DBMS_OUTPUT.PUT_LINE('Is cola_b within cola_a?: ' || returned_number);

SELECT c.shape.ST_OVERLAP(cola_a_geom) INTO returned_number
FROM cola_markets c WHERE c.name = 'cola_b';
DBMS_OUTPUT.PUT_LINE('Does cola_b overlap cola_a?: ' || returned_number);

SELECT c.shape.ST_CONTAINS(cola_a_geom) INTO returned_number
FROM cola_markets c WHERE c.name = 'cola_b';
DBMS_OUTPUT.PUT_LINE('Does cola_b contain cola_a?: ' || returned_number);

SELECT c.shape.ST_INTERSECTION(cola_a_geom) INTO returned_geom
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_DIFFERENCE(cola_a_geom) INTO returned_geom
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_UNION(cola_a_geom) INTO returned_geom
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_SYMDIFFERENCE(cola_a_geom) INTO returned_geom
FROM cola_markets c WHERE c.name = 'cola_b';

SELECT c.shape.ST_TOUCHES(cola_a_geom) INTO returned_number
FROM cola_markets c WHERE c.name = 'cola_b';
DBMS_OUTPUT.PUT_LINE('Does cola_b touch cola_a?: ' || returned_number);

SELECT c.shape.ST_CROSSES(cola_a_geom) INTO returned_number
FROM cola_markets c WHERE c.name = 'cola_b';
DBMS_OUTPUT.PUT_LINE('Does cola_b cross cola_a?: ' || returned_number);

END;
/

3.2 ST_xxxファンクションと同等のSpatialの機能

表3-1にSQL Multimediaファンクションおよび同等のOracle SpatialのSDO_GEOMETRYメソッド(つまりSpatialのファンクション、プロシージャ、演算子)を示します。なお、同等のOracle Spatialの機能は、SQL Multimediaファンクションより多くの機能を持っている場合があることに注意してください。

表3-1 ST_xxxファンクションと同等のSpatialの機能

SQL Multimediaファンクション

同等のOracle Spatialインタフェース

FROM_WKB

SDO_UTIL.FROM_WKBGEOMETRY

FROM_WKT

SDO_UTIL.FROM_WKTGEOMETRY

GET_WKB

SDO_GEOMETRY.Get_WKB

GET_WKT

SDO_GEOMETRY.Get_WKT

ST_BUFFER

SDO_GEOM.SDO_BUFFER

ST_CENTROID

SDO_GEOM.SDO_CENTROID

ST_CONTAINS

mask=CONTAINSを指定したSDO_GEOM.RELATE

ST_CONVEXHULL

SDO_GEOM.SDO_CONVEXHULL

ST_COORDDIM

SDO_GEOMETRY.Get_DimsおよびSDO_GEOMETRY.ST_CoordDim (同じ)

ST_CROSS

(事前定義なし、complex maskを指定してSDO_GEOM.RELATEを使用)

ST_CROSSES

(事前定義なし、complex maskを指定してSDO_GEOM.RELATEを使用)

ST_DIFFERENCE

SDO_GEOM.SDO_DIFFERENCE

ST_DIMENSION

SDO_GEOMETRY.Get_Dims

ST_DISJOINT

mask=DISJOINTを指定したSDO_GEOM.RELATE

ST_DISTANCE

SDO_GEOM.SDO_DISTANCE

ST_ENVELOPE

SDO_GEOM.SDO_MBR

ST_EQUALS

mask=EQUALを指定したSDO_GEOM.RELATE

ST_GEOMETRYTYPE

SDO_GEOMETRY.Get_GType

ST_INTERSECTION

SDO_GEOM.SDO_INTERSECTION

ST_INTERSECTS

mask=OVERLAPBDYDISJOINT + OVERLAPBDYINTERSECTを指定したSDO_GEOM.RELATE

ST_ISVALID

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

ST_OVERLAP

mask=CONTAINSを指定したSDO_GEOM.RELATE

ST_RELATE

SDO_RELATE、SDO_GEOM.RELATE

ST_SYMDIFFERENCE

SDO_GEOM.SDO_XOR

ST_SYMMETRICDIFFERENCE

SDO_GEOM.SDO_XOR

ST_TOUCH

mask=TOUCHを指定したSDO_GEOM.RELATE

ST_TOUCHES

mask=TOUCHを指定したSDO_GEOM.RELATE

ST_UNION

SDO_GEOM.SDO_UNION

ST_WITHIN

mask=COVERS+CONTAINSを指定したSDO_GEOM.RELATE

3.3 SQL Multimedia型での許容差

SQL Multimedia規格では、ST_ xxxで使用する許容差が定義されていないため、Spatialでは、ST_GEOMETRY型のすべてのメンバー・メソッドにデフォルト値の0.005が使用されます。ST_GEOMETRYメンバー・ファンクションで使用する許容差に異なる値を指定する場合は、SDO_ST_TOLERANCE表に指定する値を挿入してデフォルトを上書きする必要があります。

SDO_ST_TOLERANCE表はグローバルな一時表であり、ST_GEOMETRYメンバー・メソッドで使用される許容差を指定する1行があります。この表には、(tolerance NUMBER)で定義される1列があります。

空間索引を使用するSpatialのすべての演算子に対し、Spatialでは、USER_SDO_GEOM_METADATAビューの空間列に指定された許容差が使用されます。

3.4 名前の競合の回避

一部のサード・パーティ・ベンダーでは、OracleでST_xxx型の独自のバージョンをサポートしています。たとえば、ベンダーがST_GEOMETRY型の独自のバージョンを作成する場合もあります。

サード・パーティの名前とOracle提供の名前が競合することを回避するには、サード・パーティのST_xxx型をOracleに実装する際に、スキーマの接頭辞を使用する必要があります。たとえば、列の型に単にST_GEOMETRYを指定すると、OracleにST_GEOMETRY型を実装する際にその列が作成されることになります。

3.5 注釈テキストの型およびビュー

Oracle Spatialでは、『OpenGIS Implementation Specification for Geographic information - Simple feature access - Part 1: Common architecture』で指定された注釈テキストをサポートしており、この仕様では、注釈テキストは、地理関連データまたはアドホック・データ、およびプロセス関連情報を表示可能なテキストとして含む、単純に挿入されたテキストとして定義されています。このテキストは、エディタまたは単純な地図で表示するために使用できます。通常、完全な地図製作における品質としては不十分ですが、あらゆるアプリケーションで必要となるテキスト機能をほぼ果たすことができます。

ST_ANNOTATION_TEXTオブジェクト型は、注釈テキストの格納に使用できます。この型には、注釈テキストを表に挿入するコンストラクタがあります(3.5.1項を参照)。

USER_ANNOTATION_TEXT_METADATAビューおよびALL_ANNOTATION_TEXT_METADATAビューは、注釈テキストに関連するメタデータを格納します(3.5.2項を参照)。

3.5.1 ST_ANNOTATION_TEXTコンストラクタの使用

注釈テキストのオブジェクトには、オブジェクトの配列が含まれます。ここでは、各オブジェクトは、テキスト・ラベル、テキスト・ラベルのレンダリングを開始する点、引き出し線(通常、テキスト・ラベルから地図上の関連付けられた点)およびオプションで追加の属性情報で構成されます。通常、単一の注釈テキストのオブジェクトには、地図のすべてのテキスト・ラベルを含めることができます。

各テキスト・ラベルのオブジェクトは、次のように定義されています。

Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
PRIVATEVALUE                                       VARCHAR2(4000)
PRIVATELOCATION                                    MDSYS.SDO_GEOMETRY
PRIVATELEADERLINE                                  MDSYS.SDO_GEOMETRY
PRIVATETEXTATTRIBUTES                              VARCHAR2(4000)

単一の点に注釈を挿入する場合は、ST_ANNOTATION_TEXTコンストラクタを使用します。このコンストラクタは、例3-3に示すように、配列を使用して単一の点に情報を指定します。この例では、ST_ANNOTATION_TEXT型の列を含む表を作成し、INSERT文でST_ANNOTATION_TEXTコンストラクタを使用して、1つの行を挿入します。

例3-3 ST_ANNOTATION_TEXTコンストラクタの使用

CREATE TABLE my_annotations (id NUMBER, textobj ST_ANNOTATION_TEXT);

INSERT INTO my_annotations VALUES (2,
ST_ANNOTATION_TEXT(
ST_ANNOTATIONTEXTELEMENT_ARRAY(
ST_ANNOT_TEXTELEMENT_ARRAY(
ST_ANNOTATIONTEXTELEMENT(
'Sample Label 2',
SDO_GEOMETRY(2001,null,sdo_point_type(10,10,null),null,null),
SDO_GEOMETRY(2002,null,null,
SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(5,10, 10,10)),
NULL)))));

例3-3のST_ANNOTATION_TEXTコンストラクタでは、ST_ANNOTATIONTEXTELEMENTサブ要素で、次のような属性を指定しています。

- ラベルのテキスト(この場合はSample Label 2)。

- ラベルのレンダリングを開始する点を指定する点ジオメトリ(この場合は位置(10,10))。

- 対象点とテキスト・ラベルの間で、引き出し線の開始点と終了点を指定する線ストリング・ジオメトリ(この場合は位置(5,10)と(10,10)の間の線)。

- テキスト表示の属性情報がなく(NULL)、注釈テキストのメタデータ・ビューのTEXT_ATTRIBUTES列の情報が使用されていることを意味します(3.5.2項の表3-2を参照)。

3.5.2 注釈テキストのメタデータ・ビュー

注釈テキストのメタデータは、MDSYSが所有するグローバル表に格納されます。ユーザーは、このグローバル表を直接更新しないでください。Spatialの各ユーザーには、そのユーザーに関連付けられたスキーマで使用可能な次のビューがあります。

- USER_ANNOTATION_TEXT_METADATAには、ユーザー(スキーマ)が所有する表のすべての注釈テキストについてのメタデータ情報が含まれます。このビューのみが更新可能であり、Spatialのユーザーは、空間表に関連するメタデータをこのビューに挿入する必要があります。

- ALL_ANNOTATION_TEXT_METADATAには、ユーザーがSELECT権限を持つ、表のすべての注釈テキストのメタデータ情報が含まれます。

これらのビューの移入は、Spatialのユーザーの責任において行います。注釈テキストの各オブジェクトについて、USER_ANNOTATION_TEXT_METADATAビューに適切な行を挿入する必要があります。Oracle Spatialでは、ALL_ANNOTATION_TEXT_METADATAビューも更新され、USER_ANNOTATION_TEXT_METADATAに挿入した行が確実に反映されます。

USER_ANNOTATION_TEXT_METADATAビューとALL_ANNOTATION_TEXT_METADATAビューのどちらにも表3-2に示す列が含まれますが、USER_ANNOTATION_TEXT_METADATAビューにはOWNER列は含まれません。列をビュー定義の順に示します。

表3-2 注釈テキストのメタデータ・ビューの列

列名

データ型

説明

OWNER

VARCHAR2(32)

TABLE_NAME列で指定された表の所有者(ALL_ANNOTATION_TEXT_METADATAビューのみ)。

TABLE_NAME

VARCHAR2(32)

ST_ANNOTATION_TEXT型の列を含む表の名前。

COLUMN_NAME

VARCHAR2(1024)

ST_ANNOTATION_TEXT型の列の名前。

TEXT_EXPRESSION

VARCHAR2(4000)

ラベルにテキストが指定されていない場合に使用できる値。OpenGISの仕様によると、挿入するテキストは、VALUEがNULLでない場合、最初に現行の要素のVALUEの内容から取得されます。それ以外の場合、テキストは最初のNULL以外の先行する要素のVALUEから取得されます。すべての先行する要素がNULLのVALUEフィールドの場合、VALUEはメタデータ表のTEXT_EXPRESSIONから取得されます。

TEXT_ATTRIBUTES

VARCHAR2(4000)

ラベル・テキストのスタイルおよびレイアウトについて、デフォルトのテキスト表示属性(フォント・ファミリーおよびフォント・サイズ、水平スペースおよび垂直スペースなど)ですが、ST_ANNOTATION_TEXTコンストラクタのPRIVATETEXTATTRIBUTES属性で上書きされた場合を除きます(3.5.1項を参照)。OpenGISの仕様の「XML for Text Attributes」の項で指定された形式を使用してください。

4 空間データのロード

この章では、データベースに空間データをロードする方法(SDO_GEOMETRY型の列を使用した表へのデータの格納を含む)を説明します。空間データのロードの完了後、データに対して空間索引を作成し、データに対する問合せを実行できます(第5章を参照)。

データのロード処理には、次の2種類があります。

- データのバルク・ロード(4.1項を参照)
大量のデータをデータベースにロードする場合は、この処理方法を使用します。データのロードには、SQL*Loaderユーティリティを使用します。

- トランザクション挿入(4.2項を参照)
一般的に、この処理は比較的少量のデータをデータベースに挿入する場合に、SQLのINSERT文を使用して行われます。

空間データのロードおよび検証に関する推奨事項は、4.3項を参照してください。

4.1 バルク・ロード

バルク・ロードでは、大量のデータをOracle Databaseにインポートできます。バルク・ロードは、SQL*Loaderユーティリティを使用して実行します。(SQL*Loaderの詳細は、『Oracle Databaseユーティリティ』を参照してください。)

4.1.1 SDO_GEOMETRYオブジェクトのバルク・ロード

例4-1は、4つのジオメトリをロードするためのSQL*Loader制御ファイルです。この制御ファイルをSQL*Loaderで使用すると、2.1項の例2-1でSQL文を使用して挿入されたコーラのマーケットのジオメトリと同じジオメトリがロードされます。

例4-1 コーラのマーケットのジオメトリをバルク・ロードするための制御ファイル

LOAD DATA
INFILE *
TRUNCATE
CONTINUEIF NEXT(1:1) = '#'
INTO TABLE COLA_MARKETS
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS (
mkt_id INTEGER EXTERNAL,
name CHAR,
shape COLUMN OBJECT
(
SDO_GTYPE INTEGER EXTERNAL,
SDO_ELEM_INFO VARRAY TERMINATED BY '|/'
(elements FLOAT EXTERNAL),
SDO_ORDINATES VARRAY TERMINATED BY '|/'
(ordinates FLOAT EXTERNAL)
)
)
begindata
1|cola_a|
#2003|1|1003|3|/
#1|1|5|7|/
2|cola_b|
#2003|1|1003|1|/
#5|1|8|1|8|6|5|7|5|1|/
3|cola_c|
#2003|1|1003|1|/
#3|3|6|3|6|5|4|5|3|3|/
4|cola_d|
#2003|1|1003|4|/
#8|7|10|9|8|11|/

例4-1では、次のことに注意してください。

- mkt_id INTEGER EXTERNAL定義内のEXTERNALキーワードは、MKT_ID列に挿入するそれぞれの値(この例では、1、2、3および4)がバイナリ形式ではなく、人間が判読可能な形式の整数であることを意味します。

- CONTINUEIF NEXT(1:1) = '#'指定によって、各データ行の先頭が番号記号(#)継続文字でないかぎり無視されるため、begindataの後のデータでは、各MKT_ID値の前に空白が1つあります。

例4-2では、POLY_4PTという表を次のとおり作成したと想定しています。

CREATE TABLE POLY_4PT (GID VARCHAR2(32),
GEOMETRY SDO_GEOMETRY);

ASCIIデータは、デリミタ付きの列および次の書式の表制限で固定されている別々の行で構成されているとします。

geometry rows:    GID, GEOMETRY

GEOMETRY列の座標は、ポリゴンを表現しています。データをロードするための制御ファイルを例4-2に示します。

例4-2 ポリゴンのバルク・ロードのための制御ファイル

LOAD DATA
INFILE *
TRUNCATE
CONTINUEIF NEXT(1:1) = '#'
INTO TABLE POLY_4PT
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS (
GID  INTEGER EXTERNAL,
GEOMETRY COLUMN OBJECT
(
SDO_GTYPE       INTEGER EXTERNAL,
SDO_ELEM_INFO   VARRAY TERMINATED BY '|/'
(elements     FLOAT EXTERNAL),
SDO_ORDINATES   VARRAY TERMINATED BY '|/'
(ordinates    FLOAT EXTERNAL)
)
)
begindata
1|2003|1|1003|1|/
#-122.4215|37.7862|-122.422|37.7869|-122.421|37.789|-122.42|37.7866|
#-122.4215|37.7862|/
2|2003|1|1003|1|/
#-122.4019|37.8052|-122.4027|37.8055|-122.4031|37.806|-122.4012|37.8052|
#-122.4019|37.8052|/
3|2003|1|1003|1|/
#-122.426|37.803|-122.4242|37.8053|-122.42355|37.8044|-122.4235|37.8025|
#-122.426|37.803|/

4.1.2 SDO_GEOMETRYオブジェクトの点のみのデータのバルク・ロード

例4-3に、点データを表にロードする制御ファイルを示します。

例4-3 点のみのデータをバルク・ロードするための制御ファイル

LOAD DATA
INFILE *
TRUNCATE
CONTINUEIF NEXT(1:1) = '#'
INTO TABLE POINT
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS (
GID      INTEGER EXTERNAL,
GEOMETRY COLUMN OBJECT
(
SDO_GTYPE       INTEGER EXTERNAL,
SDO_POINT COLUMN OBJECT
(X            FLOAT EXTERNAL,
Y            FLOAT EXTERNAL)
)
)

BEGINDATA
1| 2001| -122.4215| 37.7862|
2| 2001| -122.4019| 37.8052|
3| 2001| -122.426| 37.803|
4| 2001| -122.4171| 37.8034|
5| 2001| -122.416151| 37.8027228|

4.2 SQLを使用したトランザクション挿入

Oracle Spatialでは、標準SQL構文を使用してアクセスまたはロード可能な、標準のOracleの表を使用します。この項では、SDO_GEOMETRY型の列へのトランザクション挿入の例を示します。一般的に、この処理は比較的少量のデータをデータベースに追加する場合に使用されます。

Oracle SQLのINSERT文では、引数の指定は999までに制限されています。そのため、トランザクションのINSERT文でSDO_GEOMETRYコンストラクタを使用して、999要素以上の可変長配列を作成することはできません。ただし、ホスト変数を使用してジオメトリを挿入することは可能で、そのホスト変数は、SDO_ORDINATE_ARRAYに999以上の値を指定したSDO_GEOMETRYコンストラクタで作成可能です。(ホスト変数は、OCI、PL/SQLまたはJavaプログラムの変数です。)

ジオメトリを挿入するプロシージャを作成し、挿入する各ジオメトリに対してそのプロシージャをコールして、ジオメトリのトランザクション挿入を実行します。例4-4では、挿入処理を実行するプロシージャを作成します。

例4-4 トランザクション挿入処理を実行するプロシージャ

CREATE OR REPLACE PROCEDURE
INSERT_GEOM(GEOM SDO_GEOMETRY)
IS

BEGIN
INSERT INTO TEST_1 VALUES (GEOM);
COMMIT;
END;
/

例4-4で作成したプロシージャを使用して、例4-5に示すようなPL/SQLブロック(geomという変数にジオメトリをロードし、プロシージャINSERT_GEOMをコールしてジオメトリを挿入する)でデータを挿入できます。

例4-5 ジオメトリを挿入するプロシージャをコールするPL/SQLブロック

DECLARE
geom SDO_geometry :=
SDO_geometry (2003, null, null,
SDO_elem_info_array (1,1003,3),
SDO_ordinate_array (-109,37,-102,40));
BEGIN
INSERT_GEOM(geom);
COMMIT;
END;
/

様々なジオメトリ・タイプを使用したその他の例については、次の例を参照してください。

- 矩形: 2.7.1項の例2-6

- 穴のあるポリゴン: 2.7.2項の例2-7

- 複合線ストリング: 2.7.3項の例2-8

- 複合ポリゴン: 2.7.4項の例2-9

- 点: 2.7.5項の例2-10および例2-11

- 方向付きの点: 2.7.6項の例2-12

- タイプ0(ゼロ)要素: 2.7.7項の例2-14

4.3 空間データのロードおよび検証に関する推奨事項

空間データをロードおよび検証するための推奨手順は、次のとおりです。

1. 4.1項または4.2項に示した方法でデータをロードします。

2. データベースにロードされたすべての空間データに対して、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションまたはSDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTプロシージャを使用します。

3. 無効な方向や無効なETYPE値またはGTYPE値を持つジオメトリに対して、SDO_MIGRATE.TO_CURRENTを使用してこれらの無効なジオメトリを修正します。

4. その他の理由で無効になっているジオメトリについては、SDO_UTIL.RECTIFY_GEOMETRYを使用して修正します。

これらのサブプログラムの使用方法の詳細は、そのリファレンス情報を示す項にある使用上の注意を参照してください。

5 空間データの索引付けおよび問合せ

空間データを使用した問合せのパフォーマンスを向上させるには、空間データのロード(第4章を参照)が完了した後で、データに対して空間索引を作成する必要があります。この章では、次の操作を実行する方法について説明します。

- 空間索引の作成(5.1項を参照)

- Oracle Spatialの問合せモデルおよび1次フィルタ処理と2次フィルタ処理を理解したうえでの効率的な空間データの問合せ(5.2項を参照)

5.1 空間索引の作成

効率的にデータにアクセスするには、バルク・ロードまたはトランザクション・ロードによる空間表へのデータのロードが完了した後で、表内の各ジオメトリ列に対して空間索引(空間Rツリー索引)を作成する必要があります。たとえば、次の文は、すべてのパラメータについてデフォルト値を使用して、territory_idxという空間索引を作成します。

CREATE INDEX territory_idx ON territories (territory_geom)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

空間索引の作成のオプションの詳細は、第18章のCREATE INDEX文を参照してください。

索引作成が完了しなかった場合、索引は無効になるため、DROP INDEX <index_name> [FORCE]文で削除する必要があります。

索引付けされる各ジオメトリ列内では、すべてのジオメトリのSDO_SRID値が同じである必要があります。

空間索引は、2次元、3次元または4次元のデータに作成できます。デフォルトの次元数は2ですが、3次元以上のデータの場合は、sdo_indx_dimsパラメータ・キーワードを使用して、索引を作成する次元数を指定できます。(3次元ジオメトリのサポートの詳細は、1.11項を参照してください。問合せ要素における次元の様々な組合せのサポートについては、5.2.3項を参照してください。)

Oracle Databaseの自動UNDO管理機能またはPGAメモリー管理機能のいずれかを使用していないか、あるいはこの両方を使用していない場合、設定する必要のある初期化パラメータの値については、5.1.7項を参照してください。自動UNDO管理およびPGAメモリー管理の両方は、デフォルトで有効になっており、これらを使用することをお薦めします。

CREATE INDEX文のtablespaceキーワードで指定された表領域(または、tablespaceキーワードが指定されていない場合はデフォルトの表領域)を使用すると、索引データ表、および内部計算用に作成されたいくつかの一時表の両方が保持されます。WORK_TABLESPACEを表領域として指定すると、一時表は作業表領域に格納されます。

1,000,000行を超える大規模な表では、内部ソート操作を実行する場合に一時表領域が必要です。この一時表領域のサイズは、最大値を1GBとして、100×n バイト(n は表の行数)にすることをお薦めします。

空間索引の作成に必要な領域を推定するには、SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZEファンクション(第31章を参照)を使用します。

5.1.1 特定のジオメトリ・タイプへのデータの制限

空間索引の作成または再作成時、表内のすべてのジオメトリ、または後で挿入されるすべてのジオメトリを、指定したジオメトリ・タイプにすることができます。このように、データのジオメトリ・タイプを制限するには、CREATE INDEX文またはALTER INDEX REBUILD文のPARAMETERS句でlayer_gtypeキーワードを使用し、2.2.1項の表2-1の「ジオメトリ・タイプ」列の値を指定します。次に、レイヤー内の空間データをポリゴンに制限する例を示します。

CREATE INDEX cola_spatial_idx
ON cola_markets(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX
PARAMETERS ('layer_gtype=POLYGON');

表2-1のジオメトリ・タイプは、データの確認時に階層とみなされます。

- MULTIフォームには、通常のフォームも含まれます。たとえば、'layer_gtype=MULTIPOINT'を指定すると、レイヤーには、POINTジオメトリおよびMULTIPOINTジオメトリの両方を含めることができます。

- COLLECTIONを指定すると、レイヤーには、すべてのジオメトリ・タイプを含めることができます。

5.1.2 クロススキーマの索引作成

自分のスキーマ以外にある表に対して、空間索引を作成できます。ユーザーBが、ユーザーAのスキーマにある表T1のGEOMETRY列に空間索引を作成するとします。次に手順を示します。

1. 権限を持つユーザー(SYSTEMなど)としてデータベースに接続し、次の文を実行します。

GRANT create table, create sequence to B;

2. 権限を持つユーザーとして接続するか、またはユーザーAとして接続して(接続をユーザーAに切り替えて)、次の文を実行します。

GRANT select, index on A.T1 to B;

3. ユーザーBで接続し、次の文を実行します。

CREATE INDEX t1_spatial_idx on A.T1(geometry)
INDEXTYPE IS mdsys.spatial_index;

5.1.3 パーティション空間索引の使用

パーティション表にはパーティション空間索引を作成できます。この項では、Oracle Spatial固有の使用上の考慮点について説明します。パーティション表およびパーティション索引の詳細は、『Oracle Database管理者ガイド』を参照してください。

パーティション空間索引には、次のメリットがあります。

- パーティション化によってディスクI/O操作が削減されるため、長時間実行問合せの応答時間が短縮されます。

- I/O操作が各パーティションで同時に実行されるため、同時問合せの応答時間が短縮されます。

- パーティション・レベルでの作成および再作成操作によって、索引のメンテナンスが容易になります。
パーティションの索引は、他のパーティションに対する問合せに影響を与えずに再作成できます。また、各ローカル索引の記憶域パラメータは、他のパーティションとは無関係に変更できます。

- 複数のパーティションの検索にパラレル問合せが実行されます。
並列度は、USER_INDEXESビューに表示される索引の行のDEGREE列の値(CREATE INDEX、ALTER INDEXまたはALTER INDEX REBUILD文のPARALLELキーワードの指定値またはデフォルト値)です。

- マルチプロセッサ・システム環境における問合せ処理が向上します。
マルチプロセッサ・システム環境では、パーティション化された空間索引を持つ表に対して空間演算子が使用され、問合せで複数のパーティションが検索される場合、複数のプロセッサを使用して問合せを評価できます。使用されるプロセッサの数は、並列度と、問合せの評価に使用されるパーティションの数によって決まります。

空間索引のパーティション化には、次の制限事項が適用されます。

- 空間表のパーティション・キーは、空間列ではなく、スカラー値である必要があります。

- 基になる表では、レンジ・パーティション化のみがサポートされています。その他すべての種類のパーティション化は、パーティション空間索引ではサポートされていません。

パーティション空間索引を作成するには、LOCALキーワードを指定する必要があります。(LOCALキーワードを指定しないと、すべての表パーティションのデータに非パーティション空間索引が作成されます。)次の例ではパーティション空間索引を作成します。

CREATE INDEX counties_idx ON counties(geometry)
INDEXTYPE IS MDSYS.SPATIAL_INDEX LOCAL;

この例では、索引パーティションの数および配置に、次のデフォルト値を使用します。

- 索引のパーティション化は、基になる表のパーティション化に基づきます。表パーティションごとに、対応する索引パーティションが作成されます。

- 各索引パーティションは、デフォルトの表領域に置かれます。

個々のパーティションに対してパラメータを指定する場合は、次の考慮点が適用されます。

- 各パーティションには、各パーティションに同じ記憶特性か、またはそれぞれ異なる記憶特性を指定できます。記憶特性が異なる場合は、パラレルI/O(表領域が異なるディスク上にある場合)が使用可能になり、パフォーマンスが向上する場合があります。

- sdo_indx_dims値には、すべてのパーティションで同じ値を指定する必要があります。

- 各パーティションで使用されるlayer_gtypeパラメータ値(5.1.1項を参照)には異なる値を指定できます。

パーティション化のデフォルト値を上書きするには、次の一般的な形式のCREATE INDEX文を使用します。

CREATE INDEX <indexname> ON <table>(<column>)
INDEXTYPE IS MDSYS.SPATIAL_INDEX
[PARAMETERS ('<spatial-params>, <storage-params>')] LOCAL
[( PARTITION <index_partition>
PARAMETERS ('<spatial-params>, <storage-params>')
[, PARTITION <index_partition>
PARAMETERS ('<spatial-params>, <storage-params>')]
)]

パーティション表で問合せを操作して、1つのパーティションのみに対する問合せを実行できます。次に例を示します。

SELECT * FROM counties PARTITION(p1)
WHERE ...<some-spatial-predicate>;

複数の問合せを異なるパーティションで同時に操作する場合、選択したパーティションに対する問合せを行うと、問合せが高速化され、スループット全体が向上する場合もあります。

問合せでパーティション空間索引を使用する場合、空間演算子およびファンクションのセマンティック(意味または動作)は、SDO_NN(最も近くにあるもの)の場合を除いて、パーティション索引および非パーティション索引を使用する場合と同じです。SDO_NNの場合、その問合せによって影響されるパーティションごとに、要求した数のジオメトリが戻されます。(詳細は、第19章のSDO_NN演算子の説明を参照してください。)

たとえば、ある地点に最も近い5つのレストランを要求し、空間索引に4つのパーティションがある場合、SDO_NNは最大20(5ラ4)のジオメトリを戻します。この場合、最も近い5つのレストランを戻すためにROWNUM疑似列(ここでは、WHERE ROWNUM <=5)を、結果を距離(マイル)でソートするためにORDER BY句を使用する必要があります。例5-1では、パーティション空間索引から最も近い5つのレストランを戻します。

例5-1 パーティション空間索引を使用したSDO_NN問合せ

SELECT * FROM
(
SELECT r.name, r.location, SDO_NN_DISTANCE(1) distance_in_miles
FROM restaurants_part_table r
WHERE SDO_NN(r.location,
MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(-110,35,Null),Null,Null),
'SDO_NUM_RES=5 distance=2  unit=MILE', 1) = 'TRUE'
ORDER BY distance_in_miles
)
WHERE ROWNUM<=5;

関連項目:
SDO_NN演算子を使用するその他の例については、C.3項「SDO_NNの例」を参照してください。

クロススキーマ問合せでは、表にパーティション空間索引がある場合、空間表と、空間表に作成された空間索引の索引表(MDRT_xxx)の両方について、ユーザーにSELECT権限が付与されている必要があります。詳細と例については、第19章のSDO_JOIN演算子の「使用上の注意」に記載されている「SDO_JOINのクロススキーマでの使用」を参照してください。

5.1.3.1 ローカル・パーティション空間索引の作成

ローカル・パーティション空間索引を作成する場合は、PARALLELキーワードを使用するかわりに、この項の手順を使用することをお薦めします。この手順では、(表領域に空きがないなど)なんらかの理由でパーティションの索引作成に失敗した場合に、最初からやり直す必要がなくなります。次に手順を示します。

1. ローカル空間索引を作成し、UNUSABLEキーワードを指定します。次に例を示します。

CREATE INDEX sp_idx ON my_table (location)
INDEXTYPE IS mdsys.spatial_index
PARAMETERS ('tablespace=tb_name work_tablespace=work_tb_name')
LOCAL UNUSABLE;

この文の実行は短時間で行われ、索引に関連付けられたメータデータが作成されます。

2. ALTER INDEX REBUILD文を使用したスクリプトを作成しますが、PARALLELキーワードは指定しません。たとえば、パーティションが100個、プロセッサが10個ある場合は、次のようにALTER INDEX文を10個使用したスクリプトを10個作成します。

ALTER INDEX sp_idx REBUILD PARTITION ip1;
ALTER INDEX sp_idx REBUILD PARTITION ip2;
. . .
ALTER INDEX sp_idx REBUILD PARTITION ip10;

3. すべてのスクリプトを同時に実行します。これにより、各プロセッサが単一パーティションの索引に対して機能する一方で、すべてのプロセッサではその一連のALTER INDEX文による動作が進められます。

ALTER INDEX文のいずれかが失敗しても、操作が正常に完了したパーティションを再作成する必要はありません。

5.1.4 索引を含むパーティションの交換

EXCHANGE PARTITION...INCLUDING INDEXES句を指定してALTER TABLE文を実行すると、空間表パーティションおよびその索引パーティションを対応する表およびその索引と交換できます。パーティションの交換については、『Oracle Database SQL言語リファレンス』のALTER TABLE文の説明を参照してください。

この機能を使用すると、次のような様々な状況でより効率的に操作を実行できます。

- データをパーティション表に挿入し、索引作成のコストを回避する場合。

- パーティション索引を管理および作成する場合。たとえば、データを複数表に分割できます。各表の索引を1つずつ作成して、索引作成中に必要なメモリーおよび表領域リソースを最小化できます。または、索引を複数のセッションでパラレルで作成することもできます。その後、表を(索引とともに)元のデータ表のパーティションと交換できます。

- オフライン挿入操作を管理する場合。新しいデータを一時表に格納し、定期的に新しいパーティションと交換できます(履歴データを含むデータベース内など)。

索引を含むパーティションを空間データおよびその索引と交換するには、2つの空間索引(1つはパーティションの索引、もう1つは表の索引)が同じ次元数(sdo_indx_dims値)である必要があります。2つの索引が同じ次元数でない場合は、エラーが発生します。表データは交換されますが、索引は交換されず、変換に失敗したことが示されます。索引を使用するには、その索引を再作成する必要があります。

5.1.5 空間索引および空間データのエクスポートとインポートに関する考慮事項

エクスポート・ユーティリティを使用して空間データを含む表をエクスポートする場合、その処理の動作は、空間データが空間索引付けされているかどうかによって異なります。

- 空間データが空間索引付けされていない場合、表データはエクスポートされます。ただし、適切な情報でターゲット・システムのUSER_SDO_GEOM_METADATAビューを更新する必要があります。

- 空間データが空間索引付けされている場合は、表データがエクスポートされ、ターゲット・システムのUSER_SDO_GEOM_METADATAビューに適切な情報が挿入され、ターゲット・システムに空間索引が作成されます。ただし、USER_SDO_GEOM_METADATAビューへの挿入が失敗した場合(たとえば、その空間レイヤーのUSER_SDO_GEOM_METADATAエントリがすでに存在する場合)、空間索引は作成されません。

インポート・ユーティリティを使用して、空間索引付けされたデータをインポートする場合は、次の考慮点が適用されます。

- エクスポートするデータの索引がTABLESPACE句を使用して作成された場合、その指定表領域がインポート時にデータベースに存在しないと、索引は作成されません。(これはOracleの他の索引とは異なる動作です。他の索引では、元の索引に指定された表領域がインポート時に存在しない場合、索引はユーザーのデフォルトの表領域に作成されます。)

- 権限を持つデータベース・ユーザーがインポート操作を実行することが必要な場合にFROMUSERおよびTOUSER書式を使用するときは、インポート操作を実行する前に、次の例に示すように、CREATE TABLEおよびCREATE SEQUENCE権限をTOUSERユーザーに付与しておく必要があります(プロンプトが表示されたらSYSTEMアカウントのパスワードを入力します)。

sqlplus system
SQL> grant CREATE TABLE, CREATE SEQUENCE to CHRIS;
SQL> exit;
imp system file=spatl_data.dmp fromuser=SCOTT touser=CHRIS

エクスポート・ユーティリティおよびインポート・ユーティリティの詳細は、『Oracle Databaseユーティリティ』を参照してください。

5.1.6 分散トランザクションと空間索引の一貫性

分散トランザクションでは、トランザクションの複数のブランチをそれぞれ異なるセッションで実行できます。ブランチは、現行のセッションから分離し、同じトランザクション・スコープ内の別のセッションに移行する可能性があります。分散トランザクションで空間索引の一貫性を維持するには、この項の使用ガイドラインに従う必要があります。

ある分散トランザクションで、空間索引を含む空間表に対して挿入、更新または削除操作を初めて実行した後、そのトランザクションでは、同じ空間表に対する後続の挿入、更新または削除操作、および操作をコミットするための準備(コミットを準備する最初のブランチ)は、すべて最初の操作と同じセッションで実行する必要があります。これらの後続の操作を実行するブランチは、まず、操作が初めて実行されたセッションに接続する必要があります。

分散トランザクションの詳細は、『Oracle Database管理者ガイド』を参照してください。

5.1.7 ロールバック・セグメントおよびソート領域サイズ

この項は、ユーザー(データベース管理者)がOracle Databaseの自動UNDO管理機能またはPGAメモリー管理機能のいずれかを使用していないか、あるいはこの両方を使用していない場合にのみ適用されます。自動メモリー管理およびPGAメモリー管理は、デフォルトで有効になっており、これらを使用することをお薦めします。これらの機能の詳細は、次を参照してください。

- 『Oracle Database概要』の自動UNDO管理およびUNDOセグメントに関する項

- 『Oracle Database概要』のPGAメモリー管理に関する項

自動UNDO管理を使用していない場合、ロールバック・セグメントの大きさが十分でないと、空間索引の作成は失敗します。ロールバック・セグメントは、100×nバイト(nは索引付けされるデータの行)である必要があります。たとえば、1,000,000行ある表の場合、ロールバック・セグメントのサイズは100,000,000バイトである必要があります。

十分なロールバック・セグメントを確保する場合、または空間索引の作成時にロールバック・セグメントを拡張できないというエラーが発生した場合は、ユーザー(またはDBA)が、ロールバック・セグメントのサイズおよび構造を再確認します。適切なサイズのパブリック・ロールバック・セグメントを作成し、そのロールバック・セグメントをオンラインにします。また、大きな空間索引の操作中は、不適切で小さなロールバック・セグメントがすべてオフラインになっていることを確認してください。

PGAメモリー管理機能を使用していない場合、システム・パラメータSORT_AREA_SIZEは、索引作成に必要な時間に影響します。SORT_AREA_SIZEの値は、ソート操作で使用するメモリーの最大バイト数です。最適値はデータベースのサイズによって異なりますが、空間索引を作成する場合は1,000,000バイト以上にすることをお薦めします。SORT_AREA_SIZEの値を変更する場合は、ALTER SESSION文を使用します。次の文は、値を20,000,000バイトに変更します。

ALTER SESSION SET SORT_AREA_SIZE = 20000000;

5.2 空間データの問合せ

この項では、空間問合せと空間結合の解決のために使用する空間レイヤーの構造について説明します。

Spatialでは、1.6項で説明したとおり、空間問合せおよび空間結合を解決するために、1次フィルタ処理と2次フィルタ処理を含む2層問合せモデルを使用します。2層とは、問合せの解決のために2種類の別々の処理が実行されることを指します。両方の処理が実行されると、完全一致の結果セットが戻されます。

問合せ内の空間表に空間索引が定義されている場合、その表の名前にデータベース・リンク(dblink)名を追加することはできません。

5.2.1 空間問合せ

空間Rツリー索引では、各ジオメトリが最小境界矩形(MBR)で表現されます(1.7.1項を参照)。図5-1のような、複数のオブジェクトを含むレイヤーについて考えてみます。各オブジェクトには、ジオメトリ名が付いており(線ストリングにはgeom_1、4面のポリゴンにはgeom_2、三角形ポリゴンにはgeom_3、楕円にはgeom_4)、各オブジェクトのMBRは破線で表されています。

図5-1 ジオメトリとMBR

一般的な空間問合せでは、問合せウィンドウ(定義された範囲またはウィンドウ)の内部に位置するすべてのオブジェクトが要求されます。動的問合せウィンドウとは、データベース内には定義されず、使用前に定義が必要な矩形領域を指します。図5-2に、図5-1と同じジオメトリに、太い点線のボックスで表されている問合せウィンドウを追加したものを示します。

図5-2 問合せウィンドウを追加したレイヤー

図5-2で、問合せウィンドウは、ジオメトリgeom_1およびgeom_2の一部と、geom_3のMBRの一部を覆っていますが、実際のgeom_3ジオメトリは覆っていません。問合せウィンドウは、geom_4ジオメトリまたはそのMBRを覆っていません。

5.2.1.1 1次フィルタ用の演算子

SDO_FILTER演算子(第19章を参照)は、Oracle Spatialの問合せ処理モデルに含まれる2段階の処理のうち、1次フィルタ部分を実行します。1次フィルタは、候補オブジェクトの組合せの集合が相互作用するかどうかを判断するためにのみ索引データを使用します。具体的には、1次フィルタは、候補オブジェクト自体が相互作用するかどうかではなく、候補オブジェクトのMBRが相互作用するかどうかを確認します。SDO_FILTER演算子の構文は、次のとおりです。

SDO_FILTER(geometry1 SDO_GEOMETRY, geometry2 SDO_GEOMETRY, param VARCHAR2)

引数の意味は、次のとおりです。

- geometry1は、表のSDO_GEOMETRY型の列です。この列は、空間索引付けされている必要があります。

- geometry2は、SDO_GEOMETRY型のオブジェクトです。このオブジェクトは、表から取り出される場合とそうでない場合があります。表から取り出される場合は、空間索引付けされている場合とされていない場合があります。

- paramは、VARCHAR2型のオプションの文字列です。min_resolutionキーワードとmax_resolutionキーワードのいずれか、または両方を指定できます。

次の例では、1次フィルタ処理のみを実行します(2次フィルタ処理は実行しません)。この例では、図5-2に示すジオメトリのうち、MBRが問合せウィンドウと交差するすべてのジオメトリが戻されます。次の例の結果は、ジオメトリgeom_1、geom_2、geom_3です。

例5-2では、問合せウィンドウを表に挿入せずに1次フィルタ処理を実行します。そのウィンドウはメモリー内で索引付けされるため、パフォーマンスが大幅に向上します。

例5-2 一時問合せウィンドウを使用した1次フィルタ

SELECT A.Feature_ID FROM TARGET A  WHERE sdo_filter(A.shape, SDO_geometry(2003,NULL,NULL,
SDO_elem_info_array(1,1003,3),
SDO_ordinate_array(x1,y1, x2,y2))
) = 'TRUE';

例5-2では、(x1,y1)および(x2,y2)は、問合せウィンドウの左下および右上の角です。

例5-3では、問合せ自体にウィンドウ・パラメータを指定するのではなく、SDO_GEOMETRY型の一時的なインスタンスが、問合せウィンドウ用に構成されます。

例5-3 問合せウィンドウの一時的なインスタンスを使用した1次フィルタ

SELECT A.Feature_ID FROM TARGET A  WHERE sdo_filter(A.shape, :theWindow) = 'TRUE';

例5-4では、問合せウィンドウが、WINS_1というIDを持つ表WINDOWSに挿入されたとします。

例5-4 ストアド問合せウィンドウを使用した1次フィルタ

SELECT A.Feature_ID FROM TARGET A, WINDOWS B  WHERE B.ID = 'WINS_1' AND    sdo_filter(A.shape, B.shape) = 'TRUE';

B.SHAPE列が空間索引付けされていない場合、SDO_FILTER演算子は、問合せウィンドウをメモリー内で索引付けするため、高いパフォーマンスを実現します。

5.2.1.2 1次フィルタおよび2次フィルタ用の演算子

SDO_RELATE演算子(第19章を参照)は、1次フィルタおよび2次フィルタの両方の処理を、問合せ処理時に実行します。2次フィルタは、実際に相互作用する候補オブジェクトのみが選択されていることを確認します。この演算子は、2次元のデータに空間索引が作成されている場合にのみ使用できます。SDO_RELATE演算子の構文は次のとおりです。

SDO_RELATE(geometry1  SDO_GEOMETRY,
geometry2  SDO_GEOMETRY,
param      VARCHAR2)

引数の意味は、次のとおりです。

- geometry1は、表のSDO_GEOMETRY型の列です。この列は、空間索引付けされている必要があります。

- geometry2は、SDO_GEOMETRY型のオブジェクトです。このオブジェクトは、表から取り出される場合とそうでない場合があります。表から取り出される場合は、空間索引付けされている場合とされていない場合があります。

- paramは、引用符で囲まれた文字列で、maskキーワードと有効なマスク値を持ちます。オプションで、min_resolutionキーワードまたはmax_resolutionキーワード(あるいはその両方)も設定されます。詳細は、第19章のSDO_RELATE演算子の説明を参照してください。

次の例では、1次フィルタおよび2次フィルタの両方の処理を実行します。この例では、図5-2に示すジオメトリのうち、問合せウィンドウ内に位置する、または部分的に重なるすべてのジオメトリが戻されます。これらの例の結果は、オブジェクトgeom_1およびgeom_2です。

例5-5では、問合せウィンドウを表に挿入せずに、1次フィルタおよび2次フィルタの両方の処理を実行します。そのウィンドウはメモリー内で索引付けされるため、パフォーマンスが大幅に向上します。

例5-5 一時問合せウィンドウを使用した2次フィルタ

SELECT A.Feature_ID FROM TARGET A
WHERE sdo_relate(A.shape, SDO_geometry(2003,NULL,NULL,
SDO_elem_info_array(1,1003,3),
SDO_ordinate_array(x1,y1, x2,y2)),                         'mask=anyinteract') = 'TRUE';

例5-5では、(x1,y1)および(x2,y2)は、問合せウィンドウの左下および右上の角です。

例5-6では、問合せウィンドウが、WINS_1というID値を持つ表WINDOWSに挿入されたとします。

例5-6 ストアド問合せウィンドウを使用した2次フィルタ

SELECT A.Feature_ID FROM TARGET A, WINDOWS B  WHERE B.ID = 'WINS_1' AND          sdo_relate(A.shape, B.shape,
'mask=anyinteract') = 'TRUE';

B.SHAPE列が空間索引付けされていない場合、SDO_RELATE演算子は、問合せウィンドウをメモリー内で索引付けするため、高いパフォーマンスを実現します。

5.2.1.3 WITHIN_DISTANCE演算子

SDO_WITHIN_DISTANCE演算子(第19章を参照)は、参照オブジェクトからn 距離単位内に、表内のオブジェクトの集合があるかどうかを判断するために使用されます。この演算子は、2次元のデータに空間索引が作成されている場合にのみ使用できます。参照オブジェクトは、SDO_GEOMETRYの一時的または永続的なインスタンス(一時問合せウィンドウやデータベースに格納された永続的ジオメトリなど)です。演算子の構文は次のとおりです。

SDO_WITHIN_DISTANCE(geometry1  SDO_GEOMETRY,
aGeom      SDO_GEOMETRY,
params     VARCHAR2);

引数の意味は、次のとおりです。

- geometry1は、表のSDO_GEOMETRY型の列です。この列は、空間索引付けされている必要があります。

- aGeomは、SDO_GEOMETRY型のインスタンスです。

- paramsは、演算子の動作を判断する、キーワードの値のペアを引用符で囲んだ文字列です。パラメータ・リストの詳細は、第19章のSDO_WITHIN_DISTANCE演算子を参照してください。

次の例では、問合せウィンドウから1.35距離単位内にあるオブジェクトを選択します。

SELECT A.Feature_ID
FROM TARGET A
WHERE SDO_WITHIN_DISTANCE( A.shape, :theWindow, 'distance=1.35') = 'TRUE';

距離単位は、使用しているジオメトリ座標系に基づきます。測地座標系を使用する場合、単位はmです。座標系を使用しない場合、単位は格納されたデータの場合と同じです。

SDO_WITHIN_DISTANCE演算子は、空間結合の実行に適していません。「海岸線から10距離単位以内にあるすべての駐車場(parks)を検索」のような問合せは、COASTLINES表およびPARKS表の索引ベースの空間結合として処理されません。かわりに、それぞれのCOASTLINESインスタンスが順番にPARKS表に対してバッファ、索引付けおよび評価される参照オブジェクトになるネステッド・ループ問合せとして処理されます。このようにSDO_WITHIN_DISTANCE演算子は、COASTLINES表にn 行がある場合にn 回実行されます。

非測地データの場合、レイヤーのすべてのジオメトリのバッファリングが必要な空間結合を実行する、効率的な方法があります。この方法では、SDO_WITHIN_DISTANCE演算子は使用しません。まず、新しい表COSINE_BUFSを次のように作成します。

CREATE TABLE cosine_bufs UNRECOVERABLE AS
SELECT SDO_BUFFER (A.SHAPE, B.DIMINFO, 1.35)
FROM COSINE A, USER_SDO_GEOM_METADATA B
WHERE TABLE_NAME='COSINES' AND COLUMN_NAME='SHAPE';

次に、COSINE_BUFSのSHAPE列に空間索引を作成します。これによって、次の問合せを実行できます。

SELECT /*+ ordered */ a.gid, b.gid
FROM TABLE(SDO_JOIN('PARKS', 'SHAPE',
'COSINE_BUFS', 'SHAPE',
'mask=ANYINTERACT')) c,
parks a,
cosine_bufs b
WHERE c.rowid1 = a.rowid AND c.rowid2 = b.rowid;

5.2.1.4 Nearest Neighbor演算子

SDO_NN演算子(第19章を参照)は、最も近くにあるジオメトリを識別するために使用します。この演算子は、2次元のデータに空間索引が作成されている場合にのみ使用できます。演算子の構文は次のとおりです。

SDO_NN(geometry1  SDO_GEOMETRY,
geometry2  SDO_GEOMETRY,
param      VARCHAR2
[, number  NUMBER]);

引数の意味は、次のとおりです。

- geometry1は、表のSDO_GEOMETRY型の列です。この列は、空間索引付けされている必要があります。

- geometry2は、SDO_GEOMETRY型のインスタンスです。

- paramは、キーワードと値のペアを引用符で囲んだ文字列で、近くにあるジオメトリをいくつ戻すかといった、演算子の動作を決定できます。このパラメータの詳細は、第19章のSDO_NN演算子を参照してください。

- numberは、SDO_NN_DISTANCEのコールで使用される数と同じ数です。これは、SDO_NN_DISTANCE補助演算子がSDO_NNのコールに含まれている場合にのみ使用します。このパラメータの詳細は、第19章のSDO_NN演算子を参照してください。

次の例では、COLA_MARKETS表のSHAPE列から、指定した点(10,7)に最も近い2つのオブジェクトを検索します。(SELECT文のオプティマイザ・ヒントの使用方法は、第19章のSDO_NN演算子の「使用上の注意」を参照してください。)

SELECT /*+ INDEX(cola_markets cola_spatial_idx) */
c.mkt_id, c.name  FROM cola_markets c  WHERE SDO_NN(c.shape,
SDO_geometry(2001, NULL, SDO_point_type(10,7,NULL), NULL,
NULL),  'sdo_num_res=2') = 'TRUE';

5.2.1.5 空間ファンクション

Spatialでは、ジオメトリ間の関係の判断、単一のジオメトリに関する情報の検索、ジオメトリの変更および結合を行うためのファンクションも提供されます。これらのすべてのファンクションでは、2次元のソース・データが考慮されます。これらのファンクションの出力値がジオメトリの場合、結果のジオメトリの次元は入力ジオメトリと同じになりますが、最初の2次元のみに操作の結果が正確に反映されます。

5.2.2 空間結合

空間結合は、条件で空間演算子を使用することを除いて、通常の結合と同じです。Spatialでは、あるレイヤーのすべてのジオメトリと別のレイヤーのすべてのジオメトリを比較する場合、空間結合に領域が必要です。これは、単一のジオメトリとレイヤーのすべてのジオメトリを比較する問合せウィンドウとは異なります。

空間結合を使用すると、「国立公園を横切る高速道路はどれか?」のような質問に対する回答を得ることができます。

次の表構造で、この例の結合の実行方法を示します。

PARKS(    GID VARCHAR2(32), SHAPE SDO_GEOMETRY)
HIGHWAYS( GID VARCHAR2(32), SHAPE SDO_GEOMETRY)

空間結合を実行するには、SDO_JOIN演算子を使用します(第19章を参照)。次の空間結合問合せでは、高速道路と公園が交差する場所の高速道路と公園のGID列の値を表示するために、1次フィルタ処理のみ('mask=FILTER')が実行されるため、次のようなおおまかな結果のみが戻されます。

SELECT /*+ ordered */ a.gid, b.gid
FROM TABLE(SDO_JOIN('PARKS', 'SHAPE',
'HIGHWAYS', 'SHAPE',
'mask=FILTER')) c,
parks a,
highways b
WHERE c.rowid1 = a.rowid AND c.rowid2 = b.rowid;

次の空間結合問合せは、前述の例と同じ情報を要求しますが、1次と2次の両方のフィルタ処理('mask=ANYINTERACT')を実行するため、正確な結果を戻します。

SELECT /*+ ordered */ a.gid, b.gid
FROM TABLE(SDO_JOIN('PARKS', 'SHAPE',
'HIGHWAYS', 'SHAPE',
'mask=ANYINTERACT')) c,
parks a,
highways b
WHERE c.rowid1 = a.rowid AND c.rowid2 = b.rowid;

5.2.3 データおよび索引の次元と空間問合せ

空間問合せの要素には、理論上、次の次元があります。

- 実表ジオメトリ(空間演算子形式のgeometry1)は、2次元、3次元またはそれ以上の次元になる可能性があります。

- 実表に作成される空間索引(geometry1)は、2次元または3次元になる可能性があります。

- 問合せウィンドウ(空間演算子形式のgeometry2)は、2次元、3次元またはそれ以上の次元になる可能性があります。

これらの3つの要素における次元の組合せには、サポートされるものとされないものがあります。表5-1に、2次元および3次元の組合せによる結果を示します。

表5-1 データおよび索引の次元と問合せサポート

実表(geometry1)の次元

空間索引の次元

問合せウィンドウ(geometry2)の次元

問合せ結果

2次元

2次元

2次元

2次元問合せが実行されます。

2次元

2次元

3次元

問合せウィンドウのSDO_GTYPE値が適切で、3008未満の場合にサポートされます。

2次元

3次元

2次元

非サポート: 2次元データで3次元索引は許可されません。

2次元

3次元

3次元

非サポート: 2次元データで3次元索引は許可されません。

3次元

2次元

2次元

基となる各ジオメトリで3番目の(Z)次元が無視され、2次元問合せが実行されます。

3次元

2次元

3次元

問合せウィンドウのSDO_GTYPE値が適切で、3008未満の場合にサポートされます。

3次元

3次元

2次元

2次元問合せウィンドウが、0個のZ値を持つ3次元ウィンドウに変換され、3次元問合せが実行されます。

3次元

3次元

3次元

3次元問合せが実行されます。

6 座標系(空間参照システム)

この章では、Oracle Spatialでの座標系サポートの詳細を説明します(このサポートの概要については、1.5.4項を参照してください)。様々な座標系でSDO_GEOMETRYオブジェクトを格納および操作できます。

MDSYS.SDO_CSパッケージに含まれる座標系の変換ファンクションおよびプロシージャについては、第21章を参照してください。

この章の内容は次のとおりです。

- 6.1項「用語および概念」

- 6.2項「測地座標のサポート」

- 6.3項「ローカル座標のサポート」

- 6.4項「EPSGモデルとSpatial」

- 6.5項「3次元の座標参照系のサポート」

- 6.6項「TFM_PLANオブジェクト型」

- 6.7項「座標系のデータ構造」

- 6.8項「レガシー表およびビュー」

- 6.9項「ユーザー定義の座標参照系の作成」

- 6.10項「座標系サポートでの注意事項および制限事項」

- 6.11項「U.S. National Gridのサポート」

- 6.12項「Google Mapsに関する考慮事項」

- 6.13項「座標系変換の例」

6.1 用語および概念

この項では、Oracle Spatialでサポートされる座標系に関連する重要な用語および概念について説明します。

6.1.1 座標系(空間参照システム)

座標系(空間参照システム)は、座標を位置に割り当て、そのような座標間の関連を確立するための手段を提供します。これによって、実際の空間における位置表現として、座標を変換することが可能になります。

座標参照系という用語の意味は、Spatialでの「座標系」と同じであり、この2つの用語は区別なく使用されます。European Petroleum Survey Group(EPSG)の規格とドキュメントでは、通常は、座標参照系という用語が使用されています。(EPSGでは、「座標系」という用語に独自の意味があります。詳細は、6.7.11項を参照してください。)

6.1.2 デカルト座標

デカルト座標は、指定した基点からの点の位置を、2次元または3次元空間の相互に直交する軸を関連付けて測定する座標です。

6.1.3 測地座標(地理座標)

測地座標(地理座標)は、角度を持つ座標(経度および緯度)であり、球体の極点の座標と密接に関連し、また、地球上の特定の測地データに関連付けて定義されます(6.1.6を参照)。測地座標のサポートの詳細は、6.2項を参照してください。

6.1.4 投影座標

投影座標は、地表の点を平面に数学的にマップした結果である平面的なデカルト座標です。このような数学的マッピングは、それぞれ異なる目的に使用されます。

6.1.5 ローカル座標

ローカル座標は、非地球(非地理参照)座標系のデカルト座標です。Spatialでのローカル座標のサポートについては、6.3項を参照してください。

6.1.6 測地データ

測地データ(データ)は、楕円体をシフトおよび回転し、通常は地表を部分的または全体的に近似する扁平回転楕円体として、地球の形を表現する手段で、測地座標系の基準になります。

それぞれの測地座標系は、データに基づきます。

6.1.7 変換

変換は、ある座標系から別の座標系へ座標を変換します。

座標系が地理参照座標系である場合、変換はデータ変換を伴う場合があります。データ変換は、ある測地データから別の測地データへ測地座標を変換します。通常、参照する楕円体の形、方向および中心が変化します。

6.2 測地座標のサポート

Oracle9i 以上のSpatialでは、測地座標の合理的かつ完全な処理が提供されます。Oracle9i より前のSpatialでの計算は、ジオメトリのレイヤーに対して指定された座標系に関係なく、平面(デカルト)座標のみに基づいていました。したがって、測地座標系のデータの計算では、常に座標が平面上にある場合と同様に処理され、表面の曲率が考慮されないため、計算が不正確でした。

リリース2(9.2)以上では、指定された測地座標系での地球の曲率を考慮して楕円体の表面が計算されるため、正確な結果が得られます。そのため、空間問合せは常に正しい回答を戻します。

6.2.1 測地および2次元のジオメトリ

2次元のジオメトリは面ジオメトリですが、面を正確に定義しておくことが必要です。平らな面(平面)は、デカルト座標によって正確に表現されます。ただし、デカルト座標は、ソリッドの表面の表現には適していません。一般的に使用される空間ジオメトリの表面は地表面ですが、地表面でのジオメトリの法則は平面での法則とは異なります。たとえば、地表面に平行線はなく、線は測地線であり、すべての測地線は交差します。そのため、デカルト・ジオメトリでは閉曲面の問題を正確に処理できません。

Spatialでは、データを平面上に投影せずに、座標系または関連する地域のサイズに関係なく正確な結果を提供します。問合せが地表面上のどの部分を対象にしているかに関係なく、極などの特殊な地域でも、正確な結果が得られます。そのため、選択した任意のデータおよび投影に座標を格納し、座標系に関係なく正確な問合せを実行できます。

6.2.2 測地座標系または投影座標系の選択

地表面を処理するアプリケーションでは、データは、測地座標系または投影平面座標系を使用して表現できます。どちらの方法を使用するかは、次の精度およびパフォーマンスに関連するすべての要件を考慮してください。

- 精度
多くの空間アプリケーションは、非常に小さい地域を対象としているため、ローカル投影のデカルト座標上で正確な計算を行うことができます。たとえば、New Hampshire州平地のローカル投影では、その州のデータを使用するほとんどの空間アプリケーションで適切な精度が得られます。

ただし、カナダやスカンジナビアなどの広い地域については、平面投影上でのデカルト計算では正確な結果を得られません。たとえば、スウェーデンのストックホルムおよびフィンランドのヘルシンキが、指定した距離内にあるかどうかの問合せを実行した場合、指定した距離が実際の距離に近い値である場合は、不適切な結果が戻される場合があります。広い地域に関係する計算を行う場合または非常に高い精度を必要とする場合は、地表面の曲率を考慮する必要があります。

- パフォーマンス
球体の計算は、デカルトの計算より多くの計算リソースを使用します。測地座標を使用する一部の操作では、同じ操作をデカルト座標を使用して行う場合よりも、完了までに時間がかかることがあります。

6.2.3 非楕円体高または楕円体高の選択

この項では、3次元データ(非楕円体または楕円体)の高さについて、その適切なタイプを選択するためのガイドラインを説明します。楕円体高は幅広く使用される、多くのGPSアプリケーションのデフォルトです。また、楕円体計算ではパフォーマンスのオーバーヘッドはあまり発生しません。ただし、アプリケーションの中には、非楕円体高の方が適切であったり、あるいは必須であるものもあります。

高さ基準のタイプは、最初の指定から変更することもできます。これは、異なる高さ基準間での変換がサポートされているためです。

6.2.3.1 非楕円体高

非楕円体高は、準拠楕円体以外のある地点から測定されます。非楕円体における高さの一般的な測定値は、地表面、平均海水面(MSL)または基準のジオイドからのものです。

- 地表面: 地表面からの高さの測定は、概念的には最も簡単な方法であり、非常にローカルなアプリケーションあるいは非公式のアプリケーションで一般的です。たとえば、1つのビルや1つのビル群をモデル化する場合、地表レベルで十分であることがあります。
さらに、ローカルの地表高さをグローバルな高さデータと統合する必要がある場合は、ローカルの一定の基準の高さを追加するという変換(EPSG method 9616)を介して行うことができます。ローカルの地形のうねりをモデル化する必要がある場合は、オフセット・マトリックス(EPSG method 9635)を使用した変換を介して行います。これは、ジオイドと楕円体の間での変換と同じように行うことができます。

- 平均海水面(MSL): MSLは、海面を示すものとしては一般的であり、概念的には単純です。これは、海面におけるローカルでの相違や、時間経過による変化を無視します。また、陸地で覆われている領域に対しても推定できます。
MSLとの相対的な高さは、洪水の危険性、重力ポテンシャル、空気の希薄さを扱う場合など、様々なアプリケーションで役立ちます。MSLは、一般に、航空機の飛行中の高度を示すために使用されます。

- ジオイド: ジオイドは、MSLに最も近い等ポテンシャル面です。これは、気候変動や地殻変動などを考慮しているため、重力の点から考えると、高さについて最も正確な測定値となります。ジオイドとMSLとの差は、おおよそ(プラスまたはマイナス) 2mになります。
その時点での局所的な海面よりも、重力の方がアプリケーションにとって影響が大きいときは、MSLではなくジオイドを基準に使用します。MSL、ジオイドまたは楕円体の間で変換を行う場合は、EPSG method 9635と、適切なタイムスタンプが設定されたオフセット・マトリックスを使用できます。

多くの非楕円体の高さ基準には規則性がなく、表面にはうねりがあるため、非楕円体高の間での変換は、楕円体高の場合よりも複雑になります。1つの方法として、オフセット格子ファイルを使用して変換を定義することもできます。この方法は、EPSG method 9635に実装されています。格子ファイルは、入手する必要がありますが、政府機関のWebサイトから公的に入手できる場合があります。さらに、このような非楕円体高データ(ジオイド、海水面、ローカルの地形を含む)のほとんどは、時間とともに変化するため、その変化が大きくはないとしてもオフセット・マトリックスのタイムスタンプが重要になることがあります。(当然、長期的に考えると楕円体は静的ではないため、同じことが楕円体にも当てはまります。結局のところ、楕円体は、変化し続けるジオイド、MSLまたは地形の近似値を表すことになります。)

EPSG method 9635でのパフォーマンスおよびメモリー使用量を考慮すると、実行時には、データセットの変換前に格子をロードしておく必要があります。このロード操作によって、メイン・メモリー内にフットプリントが一時的に増え、1回のみのロード・オーバーヘッドが発生します。1つのデータセット全体を変換してもオーバーヘッドはそれほど大きくありませんが、個々のジオメトリに対して変換を頻繁に行うと、その累積オーバーヘッドが大きくなる場合があります。

6.2.3.2 楕円体高

楕円体高は、参照する楕円体のある地点から測定されます。楕円体は、地球を簡便かつ比較的忠実に表現した近似的なものです。地球を表現するために楕円体を使用すると、球体を使用する場合よりも複雑になりますが、ほとんどのアプリケーションでは、楕円体の使用は、ジオイドまたは局所的な高さを使用する場合よりも簡単です(ただし、精度の低下は多少あります)。さらに、ジオイド高および海水面高は、数学的な分析に適さない場合があります。これは、うねりがあり不規則な形状が、特定の計算を非常に複雑かつ高コストにするためです。

多くのGPSアプリケーションは、楕円体高を基準として想定し、デフォルトとして使用しています。その楕円体は、ジオイド(およびこれに近い海水面)と一致するように選択されるため、楕円体高とMSL高との差は大きくありません。たとえば、ジオイドとNAD83楕円体との差は、最大でも50メートルです。特定の国との一致がより正確になるとして、他の楕円体が選択されることがあります。

様々な団体が異なる楕円体を使用していても、WKTではその相違点を簡単に記述できます。単純なデータ変換は、楕円体間で効率的かつ正確に変換を実行できます。オフセット・マトリックスが含まれないため、ロード・オーバーヘッドは不要です。したがって、将来の要件または分析に、MSL、ジオイドまたは他の非楕円体高データの使用が必要になることがあっても、楕円体高を使用すると相互運用性が高くなります。

6.2.4 測地MBR

測地データに対する特定の操作の問合せウィンドウを作成するには、SDO_ETYPE値に1003または2003(最適化された矩形)を指定し、SDO_INTERPRETATION値に3を指定して、MBR(最小境界矩形)を使用します(2.2.4項の表2-2を参照)。測地MBRは、SDO_FILTER、ANYINTERACT maskを指定したSDO_RELATE、SDO_ANYINTERACTおよびSDO_WITHIN_DISTANCEの演算子で使用できます。

例6-1では、測地MBRと空間的に相互作用するすべてのコーラのマーケットの名前が得られます。

例6-1 測地MBRの使用

SELECT c.name FROM cola_markets_cs c WHERE
SDO_FILTER(c.shape,
SDO_GEOMETRY(
2003,
8307,    -- SRID for WGS 84 longitude/latitude
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(6,5, 10,10))
) = 'TRUE';

例6-1の出力を次に示します(6.13項の例6-17で定義されたデータを使用すると想定しています)。

NAME
--------------------------------
cola_c
cola_b
cola_d

測地MBRを使用する場合は、次のことを考慮してください。

- データベースに格納されている空間オブジェクトには、測地MBRを使用しないでください。問合せウィンドウを作成するためにのみ使用します。

- 左下のY座標(minY)は、右上のY座標(maxY)より小さい値である必要があります。左下のX座標(minX)が右上のX座標(maxX)より大きい場合、ウィンドウは、日付変更線(本初子午線と「逆」の子午線、または経度180度(-180度))をまたぐと想定されます。たとえば、経度/緯度データ(-10,10, -100, 20)のMBRは、(日付変更線をまたいで)地球の4分の3周に渡り、緯度線10から20度に渡っています。

- Spatialで問合せ用のMBRを内部的に作成する場合、緯度線に沿った線は、1度間隔で点を追加することで稠密化されます。これは、MBRの枠から数メートル以内にあるオブジェクト(特に両方の半球で中間緯度にあるオブジェクト)の結果に影響を及ぼす場合があります。

- 最適化された矩形の範囲が経度で119度を越えている場合、内部的に3つの矩形に分割され、結果として、これら3つの矩形は、そこで共通する境界であるエッジを共有します。このような最適化された矩形のジオメトリを検証すると、内部矩形に共有エッジがあるため、エラー・コード13351が戻されます。問合せにこのような最適化された矩形を使用できるのは、SDO_ANYINTERACT演算子、ANYINTERACTマスクを指定したSDO_RELATE演算子またはANYINTERACTマスクを指定したSDO_GEOM.RELATEファンクションでのみです。(他の問合せをこのような最適化された矩形に対して行うと、誤った結果が戻されることがあります。)

次の例では、特殊なケースを示し、測地MBRの緯度/経度データを解釈する方法を説明します。

- (10,0, -110,20)は、日付変更線をまたいで地球をほぼ一周し、赤道から緯度20度に渡っています。

- (10,-90, 40,90)は、経度10から40度の間で、南極から北極までの帯域を示します。

- (10,-90, 40,50)は、経度10から40度の間で、南極から緯度50度までの帯域を示します。

- (-180,-10, 180,5)は、地球を一周する南緯10度から北緯5度の帯域を示します。

- (-180,-90, 180,90)は、地球全体を示します。

- (-180,-90, 180,50)は、緯度50度から下の地球全体を示します。

- (-180,50, 180,90)は、緯度50度から上の地球全体を示します。

6.2.5 測地データでのその他の考慮点および要件

測地座標系を使用する場合または変換を行う場合は(ある投影座標系から別の投影座標系への変換であっても)、次のジオメトリは使用できません。

- 円

- 円弧

測地座標系は、点または測地線(楕円体上の線)で構成されるジオメトリのみにサポートされます。投影座標系に円または円弧を含むジオメトリがある場合、それらのジオメトリを測地座標に変換する前に、SDO_GEOM.SDO_ARC_DENSIFYファンクション(第24章を参照)を使用してジオメトリを稠密化してから、結果のジオメトリに対してSpatial操作を実行することができます。

測地データを使用する場合、次のサイズ制限が適用されます。

- ポリゴン要素は、地表面の半分以上の面積を持つことはできません。また、2つのポリゴンの和集合の結果が地表面の半分より大きい場合、操作によって正しい結果が生成されません。たとえば、AとBの和集合の結果が地表の領域の半分より大きいポリゴンの場合、AとBの差集合演算、AとBの積集合演算およびAとBのXOR演算はサポートされず、これら2つのポリゴン間でANYINTERACTマスクを指定したRELATE演算のみがサポートされます。

- 1つの線上の隣接する座標間の距離を、地球の外周(大円)の長さの半分以上にすることはできません。

これらの制限より大きい要素を使用する必要がある場合は、まず、これらの要素をより小さい複数の要素に分割してから使用します。たとえば、地球のすべての海洋面を表現するジオメトリは作成できませんが、それぞれが海洋面全体の一部を表現する複数のジオメトリ要素を作成することはできます。長さが地球外周の半分以上の線ストリングを処理する場合は、その線上に1つ以上の中間点を追加して、隣接する座標が地球の外周の半分未満になるようにします。

測地レイヤーでは、許容差がm単位で指定されます。通常、非測地データに使用される許容差を使用する場合、測地データでは、これらの値がm単位で解釈されます。たとえば、測地データに0.05の許容差を指定した場合、この値は5cmまでの精度で解釈されます。この値の精度がアプリケーションで必要とされる精度より高い場合、指定した精度の実装に必要な内部計算操作のために、パフォーマンスに影響を与える場合があります。(許容差の詳細は、1.5.5項を参照してください。)

測地レイヤーでは、索引メタデータの次元のエクステントを、経度に対しては-180,180、緯度に対しては-90,90に指定する必要があります。次の文(6.13項の例6-17から抜粋)は、測地データ・レイヤーに対して、これらのエクステント(次元ごとに10mの許容差を持つ)を指定します。

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'cola_markets_cs',
'shape',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('Longitude', -180, 180, 10),  -- 10 meters tolerance
SDO_DIM_ELEMENT('Latitude', -90, 90, 10)  -- 10 meters tolerance
),
8307   -- SRID for 'Longitude / Latitude (WGS 84)' coordinate system
);

測地データに関連するその他の注意事項および制限事項については、6.10項を参照してください。

6.3 ローカル座標のサポート

Spatialでは、ローカル座標系に対してあるレベルのサポートが提供されます。ローカル座標系は、多くの場合、CADシステムで使用されます。また、調査対象地とそれ以外の地域の関係が重要でない現地測量にも使用できます。

Spatialでは、いくつかのローカル座標系が事前定義され、SDO_COORD_REF_SYS表(6.7.9項を参照)に含まれています。これらのローカル座標系は、名前が「Non-Earth」で始まり、様々な測定単位(m、mm、インチなど)に基づいて非地球デカルト座標系を定義します。

今回のリリースでは、ローカルと地表基準の座標系間での座標系変換は実行できません。ジオメトリまたはジオメトリのレイヤーをローカル座標系の間で変換する場合は、ローカル座標系の座標を1つの測定単位から別の測定単位にのみ変換できます(たとえば、インチからmmへの変換など)。ただし、SDO_RELATE、SDO_WITHIN_DISTANCEなどを使用した他のすべてのSpatial操作は、ローカル座標系で実行できます。

6.4 EPSGモデルとSpatial

Oracle Spatial座標系のサポートは、European Petroleum Survey Group (EPSG)のデータ・モデルおよびデータセットに基づいています(ただし、常に同じとはかぎりません)。詳細は、http://www.epsg.orgを参照してください。詳細に説明されています。また、EPSG測地パラメータ・データセットのダウンロードには、「README」が含まれており、エンティティ関連(E-R)ダイアグラムが示されています。Oracle Spatialによる方法では、標準化、サポートの拡張、柔軟性などの面で、次のようなメリットがあります。

- EPSGモデルは、包括的で広く受け入れられているデータ表現用の標準であるため、このモデルを扱い慣れているユーザーは、Spatialの記憶域と操作を容易に理解できます。

- サポートされる座標系と、それに関連するデータ、楕円体および投影図が増加しています。たとえば、EPSGの一部の測地座標系および投影座標系については、それに対応する座標系が以前のリリースのSpatialではサポートされていませんでした。このような座標系が追加されたことで、サポートされる座標系が拡大しました。

- データ変換が柔軟になりました。あるソースとターゲット座標系間で使用可能な変換パスはOracle定義の1種類のみではなく、代替パスを、特定の領域に対して適用するように指定したり(ユースケース)、システム全体のデフォルトとして指定できます。
この項の後半では、この柔軟性について説明します。

データ変換(ある座標系のデータを別の座標系に変換)に適用する変換ルールを指定できるようになりました。以前のリリースおよび今回のリリースのデフォルトでは、指定されたソースとターゲットの座標系のみに基づいて、事前定義済の中間変換手順を使用して変換が行われます。このデフォルトの処理は、正しい変換連鎖(優先する変換連鎖)が1つしか存在しないことを前提としています。

デフォルトでは、ソース座標系とターゲット座標系間でサポートされている変換ごとに、特定の変換メソッドが適用されます。たとえば、ある座標系からWGS 84 (経度/緯度)座標系への変換メソッドは500種類以上サポートされています(WGS 84のEPSG SRID値は4326)。たとえば、SRID 4605からSRID 4326に変換する場合は、COORD_OP_ID値が1445の変換メソッドを使用できます(この値は、座標系間の変換操作ごとに1つの行が含まれるSDO_COORD_OPS表(6.7.8項を参照)に示されます)。

ただし、任意のソース/ターゲットSRIDの組合せに対して別のメソッドを指定(Oracleから提供されているメソッドの中から選択)すると、デフォルトの変換を無視できます。ある変換をシステム全体のデフォルトとして新しく指定することもできます。また、名前付きのユースケースに変換を関連付け、空間ジオメトリのレイヤーを変換する際にそのユースケースを指定することもできます。(ユースケースは、単に、使用例や適用範囲に対して付けられる「Project XYZ」、「Mike's Favorite Transformations」などの名前です。ユースケースはデータベース・ユーザーやスキーマとは関係しません。)

ある変換を、システム全体のデフォルトに指定する場合、またはユースケースに関連付ける場合は、SDO_CS.ADD_PREFERENCE_FOR_OPプロシージャを使用します。以前に指定したプリファレンスを削除する場合は、SDO_CS.REVOKE_PREFERENCE_FOR_OPプロシージャを使用します。

Spatialで座標系を変換する場合、使用する変換は、一般に次の手順によって決定されます。

1. ユースケースが指定されている場合は、そのユースケースに関連付けられている変換が適用されます。

2. ユースケースが指定されていない場合、指定されたソース/ターゲット座標系のペアに対して作成されたユーザー定義によるシステム全体の変換が存在すると、その変換が適用されます。

3. ユースケースが指定されておらず、指定されたソース/ターゲット座標系のペアに対するユーザー定義の変換も存在しない場合の動作は、SDO_CS.CREATE_OBVIOUS_EPSG_RULESプロシージャなどによってEPSGルールが作成済かどうかによって異なります。

- EPSGルールが作成済で、この変換に対してEPSGルールが定義されている場合は、そのEPSG変換が適用されます。

- EPSGルールが作成されていないか、または作成されていてもこの変換に対してEPSGルールが定義されていない場合は、Oracle Spatialのデフォルトの変換が適用されます。

Spatialで使用されるEPSGデータセットのバージョン番号を返すには、SDO_CS.GET_EPSG_DATA_VERSIONファンクションを使用します。

6.5 3次元の座標参照系のサポート

3次元の座標参照系に対するOracle SpatialのサポートはEPSGモデル(6.4項を参照)に準拠しており、次の種類の座標参照系を使用できます。

- 地理2D

- 投影2D

- 地理3D(地理2Dおよび楕円体高で構成され、経度、緯度および高さは同じ楕円体とデータに基づく)

- 複合(地理2Dおよび重力に関係する高さで構成されるか、または投影2Dおよび重力に関係する高さで構成される)

したがって3次元の座標参照系は、楕円体高に基づく座標参照系(地理3D(6.5.1項を参照))と、重力に関係する高さに基づく座標参照系(複合(6.5.2項を参照))の2つに分類されます。

3次元での計算結果は2次元での計算結果より正確で、とりわけ変換連鎖の場合の精度は2次元より3次元の方が高くなります。たとえば、ソースおよびターゲットのCRSやジオメトリには関係なく、内部的なデータ変換は常に3つの次元で行われます。2次元ジオメトリが含まれる場合は、次の項目が1つ以上発生する可能性があります。

1. 入力または出力ジオメトリおよびCRSが2次元の場合、内部的に行われる3次元の計算では、(指定されない)高さの入力値はデフォルトでゼロ(楕円体の上、CRSに依存)になります。このことは、高さが厳密にゼロであると意図されている場合を除き、変換が不正確になる潜在的な原因となっています。(高さの値はもともと使用できないか重要ではないため、データは2次元となる可能性があります。これは、高さが正確にゼロであるとわかっているために、データが2つの次元で表現されることとは異なります。)

2. 高さの変換結果が内部的にはゼロ以外になる場合があります。ターゲットCRSが2次元の場合、高さの値を扱うことができないため、高さの値は切り捨てられ、さらに不正確な結果になります。

3. さらに変換が続く場合は、高さの値が繰り返し切り捨てられることにより、結果はさらに不正確になります。不正確な高さの値を入力すると、高さの変換結果だけではなく経度および緯度の変換結果にも影響を与える可能性があることに注意してください。

ただし、ソースおよびターゲットCRSが3次元の場合は、高さの切り捨てが繰り返されることはありません。したがって、とりわけ変換連鎖の場合に、精度が高くなります。

Spatialでの3次元ジオメトリのサポートの概要は、1.11項を参照してください。

6.5.1 地理3D座標参照系

地理3D座標参照系は、経度および緯度の他に楕円体高に基づきます。楕円体高とは、(実際の地球を近似的に表現した)参照する楕円体に関連する高さのことです。CRSの3つの次元はすべて同じ楕円体に基づいています。

楕円体高を使用することにより、数学的な規則性および効率性に優れた内部操作をSpatialで行うことが可能です。一方、複合座標参照系では、オフセット・マトリックスに基づいて、さらに複雑な変換が要求されることがよくあります。そのような一部のマトリックスは、ダウンロードして構成する必要があります。さらに、これらのマトリックスでは、ディスク上およびメイン・メモリー内で大きなフットプリントを使用する可能性もあります。

サポートされる地理3D座標参照系は、SDO_CRS_GEOGRAPHIC3Dビュー(6.7.16項を参照)に表示されます。

6.5.2 複合座標参照系

複合3次元座標参照系は、地理2Dまたは投影2Dに加えて重力に関係する高さに基づきます。重力に関係する高さは、地球の重力の影響を受ける高さのことです。この場合、通常、基準となる高さ(ゼロ)は等ポテンシャル面であり、海面より上または下として定義されます。

重力には次に示すような不規則性があるため、重力に関係する高さの表現は楕円体高より複雑です。

- 海抜高度
正標高は、ジオイド上の高さとも呼ばれます。ジオイドは等ポテンシャル面で、正確ではありませんが、平均海水面とほぼ一致します。等ポテンシャル面は、各点が同じ重力ポテンシャル・レベルにある面です。地球は場所によって密度が異なるので、このような面には、多少のうねりが存在します。地球の密度の不規則性により、複数の等ポテンシャル面が存在し、相互に平行ではないことがあります。

- 平均海水面、特定の場所における海抜、または複数の検潮所を適合させるためにゆがめられた垂直ネットワークに対する相対的な高さ(NGVD 29など)
平均海水面はジオイドに近いですが、ジオイドと同一ではありません。ある特定地域の平均海水面の多くは、特定の港の平均海水面を基に定義されます。

サポートされる複合座標参照系は、SDO_CRS_COMPOUNDビュー(6.7.12項を参照)に表示されます。

水平CRSと垂直CRSを組み合せて、カスタマイズした複合座標参照系を作成できます。(水平CRSにはXおよびYまたは経度および緯度などの2つの次元が含まれ、垂直CRSにはZ、高さ、標高といった3番目の次元が含まれます。)複合CRSの作成方法は、6.9.4項を参照してください。

6.5.3 3次元の変換

Spatialでは、SDO_GEOMETRYオブジェクトの3次元座標変換が直接サポートされますが、点群およびTINは間接的にサポートされます。(たとえば、点群はSDO_GEOMETRY列を含む表に変換する必要があります。)サポートされる変換は次のとおりです。

- 3次元データの変換

- 楕円体高と重力に関係する高さとの間の変換

3次元データ変換の場合、2つの楕円体間のデータ変換は、2次元座標参照系の場合と基本的に同じで、3つ目の次元が無視されずに使用される点が異なります。高さの値が無視されないため、特に変換連鎖の場合に変換結果の精度が高くなります。

楕円体高と重力に関係する高さの間の変換の場合、等ポテンシャル面および他の重力に関係する面にはうねりがあることから、どのような楕円体と比較しても、相互に比較しても計算は複雑になります。変換は、高次多項式関数または共1次内挿法に基づいて行われることになります。いずれの場合も、変換の定義には大きなパラメータ・マトリックスが必要です。

重力に関係する高さと楕円体高の間で変換される場合、変換の手順には、通常、オフセット・マトリックスに基づくジオイド高と楕円体高の間の変換が含まれます。ソースまたはターゲットのオフセット・マトリックスの定義に従って、共通するデータ変換を後か前に追加する必要があります。

例6-2に、3次元のデータ変換を示します。

例6-2 3次元のデータ変換

set numwidth 9

CREATE TABLE source_geoms (
mkt_id NUMBER PRIMARY KEY,
name VARCHAR2(32),
GEOMETRY SDO_GEOMETRY);

INSERT INTO source_geoms VALUES(
1,
'reference geom',
SDO_GEOMETRY(
3001,
4985,
SDO_POINT_TYPE(
4.0,
55.0,
1.0),
NULL,
NULL));

INSERT INTO USER_SDO_GEOM_METADATA VALUES (
'source_geoms',
'GEOMETRY',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
SDO_DIM_ELEMENT('Height',   -1000,1000, 10)),
4985);

commit;

--------------------------------------------------------------------------------

CALL SDO_CS.TRANSFORM_LAYER(
'source_geoms',
'GEOMETRY',
'GEO_CS_4979',
4979);

INSERT INTO USER_SDO_GEOM_METADATA VALUES (
'GEO_CS_4979',
'GEOMETRY',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
SDO_DIM_ELEMENT('Height',   -1000,1000, 10)),
4979);

set lines 210;

--------------------------------------------------------------------------------

CALL SDO_CS.TRANSFORM_LAYER(
'GEO_CS_4979',
'GEOMETRY',
'source_geoms2',
4985);

INSERT INTO USER_SDO_GEOM_METADATA VALUES (
'source_geoms2',
'GEOMETRY',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
SDO_DIM_ELEMENT('Height',   -1000,1000, 10)),
4985);

--------------------------------------------------------------------------------

DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'GEO_CS_4979';
DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'SOURCE_GEOMS';
DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'SOURCE_GEOMS2';

drop table GEO_CS_4979;
drop table source_geoms;
drop table source_geoms2;

例6-2の変換の結果、(4, 55, 1)は(4.0001539, 55.0000249, 4.218)に変換されます。

例6-3では、ジオイド高と楕円体高の間の変換を、オフセット格子Hawaiiを使用して構成します。SDO_CS.CREATE_PREF_CONCATENATED_OPプロシージャを使用して先にルールを作成しないと、格子は使用できないことに注意してください。

例6-3 ジオイド高と楕円体高の間の変換

-- Create Sample operation:
insert into mdsys.sdo_coord_ops (
COORD_OP_ID,
COORD_OP_NAME,
COORD_OP_TYPE,
SOURCE_SRID,
TARGET_SRID,
COORD_TFM_VERSION,
COORD_OP_VARIANT,
COORD_OP_METHOD_ID,
UOM_ID_SOURCE_OFFSETS,
UOM_ID_TARGET_OFFSETS,
INFORMATION_SOURCE,
DATA_SOURCE,
SHOW_OPERATION,
IS_LEGACY,
LEGACY_CODE,
REVERSE_OP,
IS_IMPLEMENTED_FORWARD,
IS_IMPLEMENTED_REVERSE)
values (
1000000005,
'Test Bi-linear Interpolation',
'CONVERSION',
null,
null,
null,
null,
9635,
null,
null,
'Oracle',
'Oracle',
1,
'FALSE',
null,
1,
1,
1);

--Create sample parameters, pointing to the offset file
--(in this case reusing values from an existing operation):
insert into mdsys.sdo_coord_op_param_vals (
coord_op_id,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
PARAM_VALUE_FILE,
PARAM_VALUE_XML,
UOM_ID) (
select
1000000005,
9635,
8666,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
PARAM_VALUE_FILE,
PARAM_VALUE_XML,
UOM_ID
from
mdsys.sdo_coord_op_param_vals
where
coord_op_id = 999998 and
parameter_id = 8666);

--Create a rule to use this operation between SRIDs 7406 and 4359:
call sdo_cs.create_pref_concatenated_op(
300,
'CONCATENATED OPERATION',
TFM_PLAN(SDO_TFM_CHAIN(7406, 1000000005, 4359)),
NULL);

-- Now, actually perform the transformation:
set numformat 999999.99999999

-- Create the source table
CREATE TABLE source_geoms (
mkt_id NUMBER PRIMARY KEY,
name VARCHAR2(32),
GEOMETRY SDO_GEOMETRY);

INSERT INTO source_geoms VALUES(
1,
'reference geom',
SDO_GEOMETRY(
3001,
7406,
SDO_POINT_TYPE(
-161,
18,
0),
NULL,
NULL));

INSERT INTO USER_SDO_GEOM_METADATA VALUES (
'source_geoms',
'GEOMETRY',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
SDO_DIM_ELEMENT('Height',    -100, 100, 10)),
7406);

commit;

SELECT GEOMETRY "Source" FROM source_geoms;

--------------------------------------------------------------------------------

--Perform the transformation:
CALL SDO_CS.TRANSFORM_LAYER(
'source_geoms',
'GEOMETRY',
'GEO_CS_4359',
4359);

INSERT INTO USER_SDO_GEOM_METADATA VALUES (
'GEO_CS_4359',
'GEOMETRY',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
SDO_DIM_ELEMENT('Height',    -100, 100, 10)),
4359);

set lines 210;

SELECT GEOMETRY "Target" FROM GEO_CS_4359;

--------------------------------------------------------------------------------

--Transform back:
CALL SDO_CS.TRANSFORM_LAYER(
'GEO_CS_4359',
'GEOMETRY',
'source_geoms2',
7406);

INSERT INTO USER_SDO_GEOM_METADATA VALUES (
'source_geoms2',
'GEOMETRY',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('Longitude', -180, 180, 10),
SDO_DIM_ELEMENT('Latitude',   -90,  90, 10),
SDO_DIM_ELEMENT('Height',    -100, 100, 10)),
7406);

SELECT GEOMETRY "Source2" FROM source_geoms2;

--------------------------------------------------------------------------------

--Clean up (regarding the transformation):
DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'GEO_CS_4359';
DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'SOURCE_GEOMS';
DELETE FROM USER_SDO_GEOM_METADATA WHERE table_name = 'SOURCE_GEOMS2';

drop table GEO_CS_4359;
drop table source_geoms;
drop table source_geoms2;

--Clean up (regarding the rule):
CALL sdo_cs.delete_op(300);

delete from mdsys.sdo_coord_op_param_vals where coord_op_id = 1000000005;

delete from mdsys.sdo_coord_ops where coord_op_id = 1000000005;

COMMIT;

例6-3の構成を使用すると、変換結果は次のようになります。

- ルールを使用しない場合、データ変換のみに基づいて、(-161.00000000, 18.00000000, .00000000)が(-161.00127699, 18.00043360, 62.03196364)に変換されます。

- ルールを使用する場合は、(-161.00000000, 18.00000000, .0000000)が(-161.00000000, 18.00000000, 6.33070000)に変換されます。

6.5.4 異なる次元間の変換

2次元ジオメトリから3次元ジオメトリへなど、異なる次元間の変換は、SDO_CS.TRANSFORMファンクションまたはSDO_CS.TRANSFORM_LAYERプロシージャを使用して直接行うことはできません。ただし、SDO_CS.MAKE_3Dファンクションを使用して2次元ジオメトリを3次元ジオメトリに変換したり、SDO_CS.MAKE_2Dファンクションを使用して3次元ジオメトリを2次元ジオメトリに変換することができます。また、変換されたジオメトリを使用して、目的の次元数のジオメトリに変換することができます。

たとえば、2次元ジオメトリを3次元ジオメトリに変換するには、SDO_CS.MAKE_3Dファンクションを使用します。このファンクション自体は座標変換を行わず、単に高さの値を追加し、ターゲットSRIDの設定のみを行います。ターゲットSRIDは適切なものを選択する必要があり、ソースSRIDと等価の3次元の値にする必要があります。たとえば、3次元のWGS84 (4327)は、2次元のWGS84 (4326)に相当します。必要に応じて、戻されたジオメトリに含まれる頂点の高さの値を変更します。

SDO_CS.MAKE_3Dファンクションの使用方法には多数の選択肢がありますが、次の方法が最も簡単です。

1. 2次元のソースSRIDを、2次元のWGS84(4326)に変換します。

2. SDO_CS.MAKE_3Dをコールしてジオメトリを3次元のWGS84(4327)に変換します。

3. 3次元のWGS84(4327)を、3次元のターゲットSRIDに変換します。

例6-4では、SRIDが27700の2次元の点を2次元のSRID 4326に変換し、変換結果をSRIDが4327の3次元の点に変換し、変換された点を3次元のSRID 4327に変換します。

例6-4 異なる次元間の変換

SELECT
SDO_CS.TRANSFORM(
SDO_CS.MAKE_3D(
SDO_CS.TRANSFORM(
SDO_GEOMETRY(
2001,
27700,
SDO_POINT_TYPE(577274.984, 69740.4923, NULL),
NULL,
NULL),
4326),
height => 0,
target_srid => 4327),
4327) "27700 > 4326 > 4327 > 4327"
FROM DUAL;

27700 > 4326 > 4327 > 4327(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INF
--------------------------------------------------------------------------------
SDO_GEOMETRY(3001, 4327, SDO_POINT_TYPE(.498364058, 50.5006366, 0), NULL, NULL)

6.5.5 WGS 84に相当する3D

WGS 84座標系に相当する3Dは何か(WGS 84座標系とは2D Oracle SRID 8308またはEPSG SRID 4326)の質問に対する回答には、次の2つが考えられます。

- 4979 (多くの場合またはほとんどの場合)、または

- (地表面より上、海面より上または下など)高さをどうとらえるかによって異なります。

多くの異なる高さ基準があります。高さは次の基準に関連付けることができます。

- 楕円体(SRID値4327、43229および4979がOracle Spatialで事前定義されるGEOGRAPHIC3dという座標系の種類を使用する必要があります)。

- 非楕円体高基準(通常、カスタムSRIDを定義する必要があるCOMPOUNDという座標系の種類を使用する必要があります)。非楕円体高は、ジオイド、一部の局所的な海面や平均海水面(または局所的な海面網)、または高さの他の定義(地表面より上など)と関連させて指定できます。

2次元のWGS 84座標系に基づいて複合座標系(6.5.2項「複合座標参照系」を参照)を定義するには、最初に事前定義またはカスタムの垂直座標参照系(6.9.3項「垂直CRSの作成」を参照)を選択する必要があります。使用可能な垂直座標参照系を検索するには、次の文を入力します。

SELECT srid, COORD_REF_SYS_NAME from sdo_coord_ref_sys
WHERE COORD_REF_SYS_KIND = 'VERTICAL' order by srid;

SRID COORD_REF_SYS_NAME
---------- ---------------------------------------------------------------------
3855 EGM2008 geoid height
3886 Fao 1979 height
4440 NZVD2009 height
4458 Dunedin-Bluff 1960 height
5600 NGPF height
5601 IGN 1966 height
5602 Moorea SAU 1981 height
. . .
5795 Guadeloupe 1951 height
5796 Lagos 1955 height
5797 AIOC95 height
5798 EGM84 geoid height
5799 DVR90 height

123 rows selected.

垂直座標参照系を選択してから、次の形式で文を入力して複合SRIDを作成します。

INSERT INTO sdo_coord_ref_system (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
GEOG_CRS_DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS,
IS_VALID,
SUPPORTS_SDO_GEOMETRY)
values (
custom-SRID,
'custom-name',
'COMPOUND',
NULL,
NULL,
6326,
NULL,
NULL,
4326,
vertical-SRID,
'custom-information-source',
'custom-data-source',
'FALSE',
NULL,
NULL,
NULL,
'TRUE',
'TRUE');

次の形式で文を入力することによって、生成されたWKTに基づいて定義を確認することができます。

SELECT wktext3d FROM cs_srs WHERE srid = custom-SRID;

WKTEXT3D
------------------------------------------------------------------------------
COMPD_CS[
"NTF (Paris) + NGF IGN69",
GEOGCS["NTF (Paris)",
DATUM["Nouvelle Triangulation Francaise (Paris)",
SPHEROID[
"Clarke 1880 (IGN)",
6378249.2,
293.4660212936293951,
AUTHORITY["EPSG", "7011"]],
TOWGS84[-168.0, -60.0, 320.0, 0.0, 0.0, 0.0, 0.0],
AUTHORITY["EPSG", "6807"]],
PRIMEM["Paris", 2.337229, AUTHORITY["EPSG","8903"]],
UNIT["grad", 0.015707963267949, AUTHORITY["EPSG", "9105"]],
AXIS["Lat", NORTH],
AXIS["Long", EAST],
AUTHORITY["EPSG", "4807"]],
VERT_CS["NGF IGN69",
VERT_DATUM["Nivellement general de la France - IGN69", 2005,
AUTHORITY["EPSG", "5119"]],
UNIT["metre", 1.0, AUTHORITY["EPSG", "9001"]],
AXIS["H", UP],
AUTHORITY["EPSG", "5720"]],
AUTHORITY["EPSG","7400"]]

異なる高さ基準間で変換する場合は、VERTCONマトリックスを使用できます。たとえば、WGS 84楕円体とジオイドの間では、高さの変換を可能にするオフセット・マトリックスがあります。詳細は、次を参照してください。

- 6.5.3項「3次元の変換」の例6-3「ジオイド高と楕円体高の間の変換」

- 6.9.6項「変換操作の作成」

- 6.9.7項「British Grid Transformation OSTN02/OSGM02 (EPSG Method 9633)の使用」

6.6 TFM_PLANオブジェクト型

オブジェクト型TFM_PLANは、SDO_CSパッケージのいくつかのサブプログラムで変換計画を指定する際に使用します。たとえば、2つの操作をTFM_PLAN型のパラメータで指定し、それらの操作で構成される連結操作を作成するには、SDO_CS.CREATE_CONCATENATED_OPプロシージャを使用します。

Oracle Spatialでは、TFM_PLANオブジェクト型を次のとおり定義します。

CREATE TYPE tfm_plan AS OBJECT (
THE_PLAN SDO_TFM_CHAIN);

SDO_TFM_CHAIN型は、VARRAY(1048576) OF NUMBERとして定義されます。

SDO_TFM_CHAIN配列の要素の意味は、次のとおりです。

- 最初の要素は、ソース座標系のSRIDを示します。

- 最初の要素に続くそれぞれの要素ペアは、操作IDとターゲット座標系のSRIDを示します。

6.7 座標系のデータ構造

座標系ファンクションおよびプロシージャは、Oracle Spatialで提供される表とビューの情報を使用します。この表とビューはMDSYSスキーマの一部ですが、パブリック・シノニムが定義されているため、表およびビューの名前の前にMDSYS.を指定する必要はありません。この表とビューの定義およびデータは、EPSGのデータ・モデルとデータセットに基づいています(6.4項を参照)。

座標系の表は、いくつかの一般的なカテゴリに分類されます。

- 座標系の一般的な情報: SDO_COORD_SYS、SDO_COORD_REF_SYS

- 座標系定義の要素または様相: SDO_DATUMS、SDO_ELLIPSOIDS、SDO_PRIME_MERIDIANS

- データ変換のサポート: SDO_COORD_OPS、SDO_COORD_OP_METHODS、SDO_COORD_OP_PARAM_USE、SDO_COORD_OP_PARAM_VALS、SDO_COORD_OP_PARAMS、SDO_COORD_OP_PATHS、SDO_PREFERRED_OPS_SYSTEM、SDO_PREFERRED_OPS_USER

- 座標系定義に関連する他の項目: SDO_COORD_AXES、SDO_COORD_AXIS_NAMES、SDO_UNITS_OF_MEASURE

座標系の表と同じビューまたはサブセットのビューがいくつか提供されています。

- SDO_COORD_REF_SYSTEM: このビューには、SDO_COORD_REF_SYS表と同じ列が含まれています。挿入、更新、削除の操作を行う場合は、COORD_REF_SYS表ではなく、SDO_COORD_REF_SYSTEMビューを使用してください。

- SDO_DATUMSのサブセット(DATUM_TYPE列の値を基に選択): SDO_DATUM_ENGINEERING、SDO_DATUM_GEODETIC、SDO_DATUM_VERTICAL。

- SDO_COORD_REF_SYSのサブセット(COORD_REF_SYS_KIND列の値を基に選択): SDO_CRS_COMPOUND、SDO_CRS_ENGINEERING、SDO_CRS_GEOCENTRIC、SDO_CRS_GEOGRAPHIC2D、SDO_CRS_GEOGRAPHIC3D、SDO_CRS_PROJECTED、SDO_CRS_VERTICAL。

この項の残りの大半を使用して、これらの表とビューをアルファベット順に説明します。(列の説明の多くは、EPSGの説明の翻案または転載です。)6.7.28項では表とビューの関係を説明し、EPSGの表名とそれらの表に対応するOracle Spatialの名前を示します。6.7.29項では、EPSGベースの座標系に関する情報の検索方法を説明し、いくつかの例を紹介します。

Spatialでは、この項の表とビューの他に、レガシー表もいくつか提供しています(その表の定義とデータは、以前のリリースで使用されていた特定のSpatialシステム表と対応しています)。レガシー表の説明は、6.8項を参照してください。

注意:
座標系のサポートに使用されるすべての表およびビューでは、Oracleが提供するどのような情報も変更または削除しないでください。
ユーザー定義の座標系を作成する場合は、6.9項を参照してください。

6.7.1 SDO_COORD_AXES表

SDO_COORD_AXES表には、座標系の軸の定義ごとに1つの行が含まれます。この表に含まれる列を、表6-1に示します。

表6-1 SDO_COORD_AXES表

列名

データ型

説明

COORD_SYS_ID

NUMBER(10)

この軸が適用される座標系のID番号です。

COORD_AXIS_NAME_ID

NUMBER(10)

座標系の軸名のID番号です。SDO_COORD_AXIS_NAMES表(6.7.2項を参照)のCOORD_AXIS_NAME_ID列の値と一致します。例: 9901(Geodetic latitudeの場合)

COORD_AXIS_ORIENTATION

VARCHAR2(24)

座標系軸の方位の向きです。例: east

COORD_AXIS_ABBREVIATION

VARCHAR2(24)

座標系軸の方位の略称です。例: E

UOM_ID

NUMBER(10)

軸に関連付けられている測定単位のID番号です。SDO_UNITS_OF_MEASURE表(6.7.27項を参照)のUOM_ID列の値と一致します。

ORDER

NUMBER(5)

座標系内のこの軸の位置です(1、2または3)。

6.7.2 SDO_COORD_AXIS_NAMES表

SDO_COORD_AXIS_NAMES表には、座標系の定義で使用可能な軸ごとに1つの行が含まれます。この表に含まれる列を、表6-2に示します。

表6-2 SDO_COORD_AXIS_NAMES表

列名

データ型

説明

COORD_AXIS_NAME_ID

NUMBER(10)

座標軸の名前のID番号です。例: 9926

COORD_AXIS_NAME

VARCHAR2(80)

座標軸の名前です。例: Spherical latitude

6.7.3 SDO_COORD_OP_METHODS表

SDO_COORD_OP_METHODS表には、座標系の変換メソッドごとに1つの行が含まれます。この表に含まれる列を、表6-3に示します。

表6-3 SDO_COORD_OP_METHODS表

列名

データ型

説明

COORD_OP_METHOD_ID

NUMBER(10)

座標系の変換メソッドのID番号です。例: 9613

COORD_OP_METHOD_NAME

VARCHAR2(50)

メソッドの名前です。例: NADCON

LEGACY_NAME

VARCHAR2(50)

レガシーWKT文字列でのこの変換メソッドの名前です。この名前は、EPSGで使用される名前と構文が異なる場合があります。

REVERSE_OP

NUMBER(1)

各パラメータ値の符号を逆にすることで(現在のターゲット座標系からソース座標系への)逆変換が実現できる場合は1、逆変換を行うために別の操作を定義する必要がある場合は0です。

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: US Coast and geodetic Survey - http://www.ngs.noaa.gov

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供している組織です。例: EPSG

IS_IMPLEMENTED_FORWARD

NUMBER(1)

順方向操作が実行される場合は1、実行されない場合は0です。

IS_IMPLEMENTED_REVERSE

NUMBER(1)

逆方向操作が実行される場合は1、実行されない場合は0です。

6.7.4 SDO_COORD_OP_PARAM_USE表

SDO_COORD_OP_PARAM_USE表には、使用可能な変換メソッドと変換操作パラメータの組合せごとに1つの行が含まれます。この表に含まれる列を、表6-4に示します。

表6-4 SDO_COORD_OP_PARAM_USE表

列名

データ型

説明

COORD_OP_METHOD_ID

NUMBER(10)

座標系の変換メソッドのID番号です。COORD_OP_METHODS表(6.7.3項を参照)のCOORD_OP_METHOD_ID列の値と一致します。

PARAMETER_ID

NUMBER(10)

変換操作のパラメータのID番号です。SDO_COORD_OP_PARAMS表(6.7.6項を参照)のPARAMETER_ID列の値と一致します。

LEGACY_PARAM_NAME

VARCHAR2(80)

パラメータのOpen GeoSpatial Consortium (OGC)名です。

SORT_ORDER

NUMBER(5)

このメソッドにおける一連のパラメータのうち、このパラメータの位置を示す番号です。例: 2(2番目のパラメータの場合)

PARAM_SIGN_REVERSAL

VARCHAR2(3)

各パラメータ値の符号を逆にすることで(現在のターゲット座標系からソース座標系への)逆変換が実現できる場合はYes、逆変換を行うには別の操作を定義する必要がある場合はNoです。

6.7.5 SDO_COORD_OP_PARAM_VALS表

SDO_COORD_OP_PARAM_VALS表には、座標系の各変換メソッドのパラメータ値に関する情報が含まれます。この表に含まれる列を、表6-5に示します。

表6-5 SDO_COORD_OP_PARAM_VALS表

列名

データ型

説明

COORD_OP_ID

NUMBER(10)

座標変換操作のID番号です。SDO_COORD_OPS表(6.7.8項を参照)のCOORD_OP_ID列の値と一致します。

COORD_OP_METHOD_ID

NUMBER(10)

座標操作メソッドのIDです。この値は、SDO_COORD_OP_METHODS表(6.7.3項を参照)のCOORD_OP_METHOD_ID値と一致する必要があります。

PARAMETER_ID

NUMBER(10)

変換操作のパラメータのID番号です。SDO_COORD_OP_PARAMS表(6.7.6項を参照)のPARAMETER_ID列の値と一致します。

PARAMETER_VALUE

FLOAT(49)

この操作のパラメータの値です。

PARAM_VALUE_FILE_REF

VARCHAR2(254)

値のデータが含まれている(元のEPSGデータベースに指定された)ファイルの名前です(パラメータ値が1つでは不十分な場合)。

PARAM_VALUE_FILE

CLOB

PARAM_VALUE_FILE_REF列で指定されたASCII形式のファイルの内容です。格子ファイルのパラメータ(NADCON、NTv2および高さの変換(Geographic3DからGeographic2D+GravityRelatedHeight))にのみ使用されます。

PARAM_VALUE_XML

XMLTYPE

PARAM_VALUE_FILE_REF列で指定されたファイルの内容のXML表現です。(オプション、現在はドキュメントにのみ使用。)

UOM_ID

NUMBER(10)

操作に関連付けられている測定単位のID番号です。SDO_UNITS_OF_MEASURE表(6.7.27項を参照)のUOM_ID列の値と一致します。

6.7.6 SDO_COORD_OP_PARAMS表

SDO_COORD_OP_PARAMS表には、変換操作で使用可能なパラメータごとに1つの行が含まれます。この表に含まれる列を、表6-6に示します。

表6-6 SDO_COORD_OP_PARAMS表

列名

データ型

説明

PARAMETER_ID

NUMBER(10)

パラメータのID番号です。例: 8608

PARAMETER_NAME

VARCHAR2(80)

操作の名前です。例: X-axis rotation

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: EPSG guidance note number 7

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供している組織です。例: EPSG

6.7.7 SDO_COORD_OP_PATHS表

SDO_COORD_OP_PATHS表には、連結操作の最小単位の手順ごとに1つの行が含まれます。この表に含まれる列を、表6-7に示します。

表6-7 SDO_COORD_OP_PATHS表

列名

データ型

説明

CONCAT_OPERATION_ID

NUMBER(10)

連結操作のID番号です。この値は、COORD_OP_TYPE値がCONCATENATIONであるSDO_COORD_OPS表(6.7.8項を参照)のCOORD_OP_ID値と一致する必要があります。

SINGLE_OPERATION_ID

NUMBER(10)

連結操作内のこの手順(最小単位の操作)に対応する1つの座標操作のID番号です。この値は、SDO_COORD_OPS表(6.7.8項を参照)のCOORD_OP_ID値と一致する必要があります。

SINGLE_OP_SOURCE_ID

NUMBER(10)

この手順の1つの座標操作に対するソースの座標参照系のID番号です。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID値と一致する必要があります。

SINGLE_OP_TARGET_ID

NUMBER(10)

この手順の1つの座標操作に対するターゲットの座標参照系のID番号です。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID値と一致する必要があります。

OP_PATH_STEP

NUMBER(5)

この連結操作内のこの手順(最小単位の操作)の順序番号です。

6.7.8 SDO_COORD_OPS表

SDO_COORD_OPS表には、座標系間の変換操作ごとに1つの行が含まれます。この表に含まれる列を、表6-8に示します。

表6-8 SDO_COORD_OPS表

列名

データ型

説明

COORD_OP_ID

NUMBER(10)

座標変換操作のID番号です。例: 101

COORD_OP_NAME

VARCHAR2(80)

操作の名前です。例: ED50 to WGS 84 (14)

COORD_OP_TYPE

VARCHAR2(24)

操作のタイプです。CONCATENATED OPERATION、CONVERSION、TRANSFORMATIONのいずれかです。

SOURCE_SRID

NUMBER(10)

変換を実行する際の変換元の座標系のSRIDです。例: 4230

TARGET_SRID

NUMBER(10)

変換を実行する際の変換先の座標系のSRIDです。例: 4326

COORD_TFM_VERSION

VARCHAR2(24)

EPSGによって座標変換に割り当てられた名前です。例: 5Nat-NSea90

COORD_OP_VARIANT

NUMBER(5)

COORD_OP_METHOD_IDに指定されている一般的なメソッドの変数です。例: 14

COORD_OP_METHOD_ID

NUMBER(10)

座標操作メソッドのIDです。この値は、SDO_COORD_OP_METHODS表(6.7.3項を参照)のCOORD_OP_METHOD_ID値と一致する必要があります。1つのメソッドを複数の操作で使用できます。例: 9617

UOM_ID_SOURCE_OFFSETS

NUMBER(10)

ソース座標系のオフセットの測定単位のID番号です。SDO_UNITS_OF_MEASURE表(6.7.27項を参照)のUOM_ID列の値と一致します。

UOM_ID_TARGET_OFFSETS

NUMBER(10)

ターゲット座標系のオフセットの測定単位のID番号です。SDO_UNITS_OF_MEASURE表(6.7.27項を参照)のUOM_ID列の値と一致します。

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: Institut de Geomatica; Barcelona

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供している組織です。例: EPSG

SHOW_OPERATION

NUMBER(3)

(現在は未使用。)

IS_LEGACY

VARCHAR2(5)

操作が、リリース2(10.2)より前のOracle Spatialに含まれていた場合はTRUE、Oracle Spatialリリース2(10.2)で新設された場合はFALSEです。

LEGACY_CODE

NUMBER(10)

EPSG座標変換操作と同じ意味を持つレガシー操作が(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー座標変換操作のCOORD_OP_ID値です。

REVERSE_OP

NUMBER(1)

各パラメータ値の符号を逆にすることで(現在のターゲット座標系からソース座標系への)逆変換が実現可能と定義されている場合は1、逆変換を行うには別の操作を定義する必要がある場合は0です。REVERSE_OPが1の場合、実際に実行される操作は、IS_IMPLEMENTED_FORWARDとIS_IMPLEMENTED_REVERSEの値で示されます。

IS_IMPLEMENTED_FORWARD

NUMBER(1)

順方向操作が実行される場合は1、実行されない場合は0です。

IS_IMPLEMENTED_REVERSE

NUMBER(1)

逆方向操作が実行される場合は1、実行されない場合は0です。

6.7.9 SDO_COORD_REF_SYS表

SDO_COORD_REF_SYS表には、座標参照系ごとに1つの行が含まれます。この表に含まれる列を、表6-9に示します。(SDO_COORD_REF_SYS表は、EPSG座標参照系の表を基にしています。)

注意:
挿入、更新、削除の各操作を実行する場合は、SDO_COORD_REF_SYSTEMビューで実行する必要があり、このビューには、SDO_COORD_REF_SYS表と同じ列が含まれています。SDO_COORD_REF_SYSTEMビューの説明は、6.7.10項を参照してください。

表6-9 SDO_COORD_REF_SYS表

列名

データ型

説明

SRID

NUMBER(10)

座標参照系のID番号です。例: 8307

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。例: Longitude / Latitude (WGS 84)

COORD_REF_SYS_KIND

VARCHAR2(24)

座標系のカテゴリです。例: GEOGRAPHIC2D

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。投影座標系の場合はNULLです。測地座標系の場合は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。例: 10115

GEOG_CRS_DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。投影座標系の場合は、その投影座標系の基になっている測地座標系のDATUM_ID値(6.7.22項のSDO_DATUMS表を参照)と一致する必要があります。測地座標系の場合は、DATUM_ID値と一致する必要があります。例: 10115

SOURCE_GEOG_SRID

NUMBER(10)

投影座標系の場合は、関連付けられている測地座標系のID番号です。

PROJECTION_CONV_ID

NUMBER(10)

投影座標参照系の場合は、その投影座標系とソース地理座標系との間の変換に使用する変換操作のCOORD_OP_ID値です。

CMPD_HORIZ_SRID

NUMBER(10)

(EPSGによって割り当てられた値で、Oracle Spatialでは使用しません。EPSGの説明は、「複合CRSの水平要素のコード(複合CRSの場合のみ)」です。)

CMPD_VERT_SRID

NUMBER(10)

(EPSGによって割り当てられた値で、Oracle Spatialでは使用しません。EPSGの説明は、「複合CRSの垂直要素のコード(複合CRSの場合のみ)」です。)

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

IS_LEGACY

VARCHAR2(5)

座標系定義が、リリース2(10.2)より前のOracle Spatialに含まれていた場合はTRUE、Oracle Spatialリリース2(10.2)で新設された場合はFALSEです。

LEGACY_CODE

NUMBER(10)

EPSG座標参照系と同じ意味を持つレガシー座標系が(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー座標系のSRID値です。

LEGACY_WKTEXT

VARCHAR2(2046)

IS_LEGACYがTRUEの場合は、座標系に関する説明が含まれます。例: GEOGCS [ "Longitude / Latitude (WGS 84)", DATUM ["WGS 84", SPHEROID ["WGS 84", 6378137, 298.257223563]], PRIMEM [ "Greenwich", 0.000000 ], UNIT ["Decimal Degree", 0.01745329251994330]]

LEGACY_CS_BOUNDS

SDO_GEOMETRY

レガシー座標系の場合は、次元境界です(存在する場合)。

IS_VALID

VARCHAR2(5)

座標参照系のEPSGレコードの定義が完全な場合はTRUE、完全でない場合はFALSEです。

SUPPORTS_SDO_GEOMETRY

VARCHAR2(5)

COORD_REF_SYS_KIND列にENGINEERING、GEOGRAPHIC2DまたはPROJECTED CRSが含まれる場合はTRUE、他の値が含まれる場合はFALSEです。

COORD_REF_SYS_KIND列の値に基づいて定義される次のビューも参照してください。

- SDO_CRS_COMPOUND(6.7.12項)

- SDO_CRS_ENGINEERING(6.7.13項)

- SDO_CRS_GEOCENTRIC(6.7.14項)

- SDO_CRS_GEOGRAPHIC2D(6.7.15項)

- SDO_CRS_GEOGRAPHIC3D(6.7.16項)

- SDO_CRS_PROJECTED(6.7.17項)

- SDO_CRS_VERTICAL(6.7.18項)

6.7.10 SDO_COORD_REF_SYSTEMビュー

SDO_COORD_REF_SYSTEMビューには、SDO_COORD_REF_SYS表(6.7.9項を参照)と同じ列が含まれています。ただし、SDO_COORD_REF_SYSTEMビューには、トリガーが定義されており、このビューに対して挿入、更新または削除操作が実行されると、関連するすべてのSpatialシステム表に対して、適切な操作が実行されます。

したがって、挿入、更新または削除操作を実行する場合は、SDO_COORD_REF_SYS表に対してではなく、SDO_COORD_REF_SYSTEMビューに対して実行する必要があります。

6.7.11 SDO_COORD_SYS表

SDO_COORD_SYS表には、座標系に関する情報を持つ行が含まれます。この表に含まれる列を、表6-10に示します。(SDO_COORD_SYS表は、EPSG座標参照系の表を基にしています。EPSG座標参照系の表では、座標系が「再利用可能な軸のペア」と表現されています。)

表6-10 SDO_COORD_SYS表

列名

データ型

説明

COORD_SYS_ID

NUMBER(10)

座標系のID番号です。例: 6405

COORD_SYS_NAME

VARCHAR2(254)

座標系の名前です。例: Ellipsoidal 2D CS. Axes: latitude, longitude. Orientations: north, east. UoM: dec deg

COORD_SYS_TYPE

VARCHAR2(24)

座標系の種類です。例: ellipsoidal

DIMENSION

NUMBER(5)

座標系によって表現される次元の数です。

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。

DATA_SOURCE

VARCHAR2(50)

このレコードのデータを提供している組織です。

6.7.12 SDO_CRS_COMPOUNDビュー

SDO_CRS_COMPOUNDビューに含まれている情報は、COORD_REF_SYS_KIND列の値がCOMPOUNDのSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。(複合座標参照系については、6.5.2項を参照してください。)このビューに含まれる列を、表6-11に示します。

表6-11 SDO_CRS_COMPOUNDビュー

列名

データ型

説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

CMPD_HORIZ_SRID

NUMBER(10)

(EPSGによって割り当てられた値で、Oracle Spatialでは使用しません。EPSGの説明は、「複合CRSの水平要素のコード(複合CRSの場合のみ)」です。)

CMPD_VERT_SRID

NUMBER(10)

(EPSGによって割り当てられた値で、Oracle Spatialでは使用しません。EPSGの説明は、「複合CRSの垂直要素のコード(複合CRSの場合のみ)」です。)

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.13 SDO_CRS_ENGINEERINGビュー

SDO_CRS_ENGINEERINGビューに含まれている情報は、COORD_REF_SYS_KIND列の値がENGINEERINGのSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。このビューに含まれる列を、表6-12に示します。

表6-12 SDO_CRS_ENGINEERINGビュー

列名

データ型

説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.14 SDO_CRS_GEOCENTRICビュー

SDO_CRS_GEOCENTRICビューに含まれている情報は、COORD_REF_SYS_KIND列の値がGEOCENTRICのSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。このビューに含まれる列を、表6-13に示します。

表6-13 SDO_CRS_GEOCENTRICビュー

列名

データ型

説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.15 SDO_CRS_GEOGRAPHIC2Dビュー

SDO_CRS_GEOGRAPHIC2Dビューに含まれている情報は、COORD_REF_SYS_KIND列の値がGEOGRAPHIC2DのSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。このビューに含まれる列を、表6-14に示します。

表6-14 SDO_CRS_GEOGRAPHIC2Dビュー

列名

データ型

説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.16 SDO_CRS_GEOGRAPHIC3Dビュー

SDO_CRS_GEOGRAPHIC3Dビューに含まれている情報は、COORD_REF_SYS_KIND列の値がGEOGRAPHIC3DのSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。(地理3D座標参照系については、6.5.1項を参照してください。)このビューに含まれる列を、表6-15に示します。

表6-15 SDO_CRS_GEOGRAPHIC3Dビュー

列名

データ型

説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.17 SDO_CRS_PROJECTEDビュー

SDO_CRS_PROJECTEDビューに含まれている情報は、COORD_REF_SYS_KIND列の値がPROJECTEDのSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。このビューに含まれる列を、表6-16に示します。

表6-16 SDO_CRS_PROJECTEDビュー

列名

データ型

説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。

SOURCE_GEOG_SRID

NUMBER(10)

関連付けられている測地座標系のID番号です。

PROJECTION_CONV_ID

NUMBER(10)

投影座標系とソース測地座標系との間の変換に使用する変換操作のCOORD_OP_ID値です。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.18 SDO_CRS_VERTICALビュー

SDO_CRS_VERTICALビューに含まれている情報は、COORD_REF_SYS_KIND列の値がVERTICALのSDO_COORD_REF_SYS表(6.7.9項を参照)の情報です。このビューに含まれる列を、表6-17に示します。

表6-17 SDO_CRS_VERTICALビュー

列名

データ型

説明

SRID

NUMBER(10)

座標参照系のID番号です。

COORD_REF_SYS_NAME

VARCHAR2(80)

座標参照系の名前です。

COORD_SYS_ID

NUMBER(10)

座標参照系で使用される座標系のID番号です。この値は、SDO_COORD_SYS表(6.7.11項を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID値と一致する必要があります。

INFORMATION_SOURCE

VARCHAR2(254)

座標系定義の提供元です(Oracleによって提供される行はすべてOracle)。

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

6.7.19 SDO_DATUM_ENGINEERINGビュー

SDO_DATUM_ENGINEERINGビューに含まれている情報は、DATUM_TYPE列の値がENGINEERINGのSDO_DATUMS表(6.7.22項を参照)の情報です。このビューに含まれる列を、表6-18に示します。

表6-18 SDO_DATUM_ENGINEERINGビュー

列名

データ型

説明

DATUM_ID

NUMBER(10)

データのID番号です。

DATUM_NAME

VARCHAR2(80)

データ名です。

ELLIPSOID_ID

NUMBER(10)

データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(6.7.23項を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(6.7.26項を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: 8950

INFORMATION_SOURCE

VARCHAR2(254)

データ定義の提供元です。例: Ordnance Survey of Great Britain.

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

SHIFT_X

NUMBER

X軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Y

NUMBER

Y軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Z

NUMBER

Z軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

ROTATE_X

NUMBER

X軸を中心にした回転のアーク秒数です。

ROTATE_Y

NUMBER

Y軸を中心にした回転のアーク秒数です。

ROTATE_Z

NUMBER

Z軸を中心にした回転のアーク秒数です。

SCALE_ADJUST

NUMBER

1.0 +(SCALE_ADJUST×10-6)という計算式に従って、シフトおよび回転後のX値、Y値およびZ値の調整に使用する値です。

6.7.20 SDO_DATUM_GEODETICビュー

SDO_DATUM_GEODETICビューに含まれている情報は、DATUM_TYPE列の値がGEODETICのSDO_DATUMS表(6.7.22項を参照)の情報です。このビューに含まれる列を、表6-19に示します。

表6-19 SDO_DATUM_GEODETICビュー

列名

データ型

説明

DATUM_ID

NUMBER(10)

データのID番号です。

DATUM_NAME

VARCHAR2(80)

データ名です。

ELLIPSOID_ID

NUMBER(10)

データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(6.7.23項を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(6.7.26項を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: 8950

INFORMATION_SOURCE

VARCHAR2(254)

データ定義の提供元です。例: Ordnance Survey of Great Britain.

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

SHIFT_X

NUMBER

X軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Y

NUMBER

Y軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Z

NUMBER

Z軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

ROTATE_X

NUMBER

X軸を中心にした回転のアーク秒数です。

ROTATE_Y

NUMBER

Y軸を中心にした回転のアーク秒数です。

ROTATE_Z

NUMBER

Z軸を中心にした回転のアーク秒数です。

SCALE_ADJUST

NUMBER

1.0 +(SCALE_ADJUST×10-6)という計算式に従って、シフトおよび回転後のX値、Y値およびZ値の調整に使用する値です。

6.7.21 SDO_DATUM_VERTICALビュー

SDO_DATUM_VERTICALビューに含まれている情報は、DATUM_TYPE列の値がVERTICALのSDO_DATUMS表(6.7.22項を参照)の情報です。このビューに含まれる列を、表6-20に示します。

表6-20 SDO_DATUM_VERTICALビュー

列名

データ型

説明

DATUM_ID

NUMBER(10)

データのID番号です。

DATUM_NAME

VARCHAR2(80)

データ名です。

ELLIPSOID_ID

NUMBER(10)

データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(6.7.23項を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(6.7.26項を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: 8950

INFORMATION_SOURCE

VARCHAR2(254)

データ定義の提供元です。例: Ordnance Survey of Great Britain.

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。

SHIFT_X

NUMBER

X軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Y

NUMBER

Y軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Z

NUMBER

Z軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

ROTATE_X

NUMBER

X軸を中心にした回転のアーク秒数です。

ROTATE_Y

NUMBER

Y軸を中心にした回転のアーク秒数です。

ROTATE_Z

NUMBER

Z軸を中心にした回転のアーク秒数です。

SCALE_ADJUST

NUMBER

1.0 +(SCALE_ADJUST×10-6)という計算式に従って、シフトおよび回転後のX値、Y値およびZ値の調整に使用する値です。

6.7.22 SDO_DATUMS表

SDO_DATUMS表には、データごとに1つの行が含まれます。この表に含まれる列を、表6-21に示します。

表6-21 SDO_DATUMS表

列名

データ型

説明

DATUM_ID

NUMBER(10)

データのID番号です。例: 10115

DATUM_NAME

VARCHAR2(80)

データ名です。例: WGS 84

DATUM_TYPE

VARCHAR2(24)

データの種類です。例: GEODETIC

ELLIPSOID_ID

NUMBER(10)

データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(6.7.23項を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(6.7.26項を参照)のPRIME_MERIDIAN_ID値と一致する必要があります。例: 8950

INFORMATION_SOURCE

VARCHAR2(254)

データ定義の提供元です。例: Ordnance Survey of Great Britain.

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。例: EPSG

SHIFT_X

NUMBER

X軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Y

NUMBER

Y軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Z

NUMBER

Z軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

ROTATE_X

NUMBER

X軸を中心にした回転のアーク秒数です。

ROTATE_Y

NUMBER

Y軸を中心にした回転のアーク秒数です。

ROTATE_Z

NUMBER

Z軸を中心にした回転のアーク秒数です。

SCALE_ADJUST

NUMBER

1.0 +(SCALE_ADJUST×10-6)という計算式に従って、シフトおよび回転後のX値、Y値およびZ値の調整に使用する値です。

IS_LEGACY

VARCHAR2(5)

座標系定義が、リリース2(10.2)より前のOracle Spatialに含まれていた場合はTRUE、Oracle Spatialリリース2(10.2)で新設された場合はFALSEです。

LEGACY_CODE

NUMBER(10)

EPSGデータと同じ意味を持つレガシー・データが(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー・データのDATUM_ID値です。

DATUM_TYPE列の値に基づいて定義されるビューのSDO_DATUM_ENGINEERING(6.7.19項)、SDO_DATUM_GEODETIC(6.7.20項)およびSDO_DATUM_VERTICAL(6.7.21項)も参照してください。

6.7.23 SDO_ELLIPSOIDS表

SDO_ELLIPSOIDS表には、楕円体ごとに1つの行が含まれます。この表に含まれる列を、表6-22に示します。

表6-22 SDO_ELLIPSOIDS表

列名

データ型

説明

ELLIPSOID_ID

NUMBER

楕円体(球体)のID番号です。例: 8045

ELLIPSOID_NAME

VARCHAR2(80)

楕円体の名前です。例: WGS 84

SEMI_MAJOR_AXIS

NUMBER

半長径(楕円体の長軸の半分)に沿った半径(m)です。

UOM_ID

NUMBER

楕円体の測定単位のID番号です。SDO_UNITS_OF_MEASURE表(6.7.27項を参照)のUOM_ID列の値と一致します。例: 9001

INV_FLATTENING

NUMBER

楕円体の逆フラット化( 1/f )です。この場合(1/f)、f = (a-b)/a、aは半長径、bは半短径です。

SEMI_MINOR_AXIS

NUMBER

半短軸(楕円体の短軸の半分)に沿った半径(m)です。

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: Kort og Matrikelstyrelsen (KMS), Copenhagen.

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供した組織です(Oracle以外の場合)。例: EPSG

IS_LEGACY

VARCHAR2(5)

楕円体が、リリース2(10.2)より前のOracle Spatialに含まれていた場合はTRUE、Oracle Spatialリリース2(10.2)で新設された場合はFALSEです。

LEGACY_CODE

NUMBER

EPSG楕円体と同じ意味を持つレガシー楕円体が(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー楕円体のELLIPSOID_ID値です。

6.7.24 SDO_PREFERRED_OPS_SYSTEM表

SDO_PREFERRED_OPS_SYSTEM表には、ソースおよびターゲットSRIDの組合せに対するユーザー定義のデフォルトの優先座標変換操作の指定ごとに、行が1つ含まれます。SDO_PREFERRED_OPS_SYSTEM表に行を挿入すると、指定したソースおよびターゲット座標系間で行われるOracleのデフォルトの変換操作が無効になります。SDO_CS.CREATE_OBVIOUS_EPSG_RULESプロシージャを使用すると、複数の行がこの表に挿入されます。use_caseパラメータにNULLを指定してSDO_CS.DELETE_ALL_EPSG_RULESプロシージャを使用すると、この表のすべての行が削除されます。この表に含まれる列を、表6-23に示します。

表6-23 SDO_PREFERRED_OPS_SYSTEM表

列名

データ型

説明

SOURCE_SRID

NUMBER(10)

座標変換を実行する際の変換元の座標系(空間参照システム)のID番号です。指定したターゲットSRIDへの変換には、COORD_OP_IDで指定するデフォルトの優先変換メソッドが使用されます。

COORD_OP_ID

NUMBER(10)

座標変換操作のID番号です。SDO_COORD_OPS表(6.7.8項を参照)のCOORD_OP_ID列の値と一致します。

TARGET_SRID

NUMBER(10)

座標変換を実行する際の変換先の座標系(空間参照システム)のID番号です。この変換では、COORD_OP_IDで指定する操作が使用されます。

6.7.25 SDO_PREFERRED_OPS_USER表

SDO_PREFERRED_OPS_USER表には、ユーザーが定義するソースとターゲットのSRIDおよび座標変換操作の指定ごとに、1つの行が含まれます。SDO_PREFERRED_OPS_USER表に行を挿入すると、ソースおよびターゲット座標系間のカスタム変換を作成できます。また、変換操作の名前(USE_CASE列の値)を指定して、様々なSDO_CSファンクションやプロシージャのuse_caseパラメータとして使用することもできます。SDO_CS.DELETE_ALL_EPSG_RULESプロシージャでユースケースを指定すると、そのユースケースに関連付けられている行がこの表から削除されます。この表に含まれる列を、表6-24に示します。

表6-24 SDO_PREFERRED_OPS_USER表

列名

データ型

説明

USE_CASE

VARCHAR2(32)

ソースとターゲットのSRIDおよび座標変換操作を規定するこの仕様の名前です。

SOURCE_SRID

NUMBER(10)

変換を実行する際の変換元の座標系(空間参照システム)のID番号です。

COORD_OP_ID

NUMBER(10)

座標変換操作のID番号です。SDO_COORD_OPS表(6.7.8項を参照)のCOORD_OP_ID列の値と一致します。

TARGET_SRID

NUMBER(10)

変換を実行する際の変換先の座標系(空間参照システム)のID番号です。

6.7.26 SDO_PRIME_MERIDIANS表

SDO_PRIME_MERIDIANS表には、データ指定で使用可能な本初子午線ごとに1つの行が含まれます。この表に含まれる列を、表6-25に示します。

表6-25 SDO_PRIME_MERIDIANS表

列名

データ型

説明

PRIME_MERIDIAN_ID

NUMBER(10)

本初子午線のID番号です。例: 8907

PRIME_MERIDIAN_NAME

VARCHAR2(80)

本初子午線の名前です。例: Bern

GREENWICH_LONGITUDE

FLOAT(49)

本初子午線の経度(グリニッジ子午線からのオフセット)です。例: 7.26225

UOM_ID

NUMBER(10)

本初子午線の測定単位のID番号です。SDO_UNITS_OF_MEASURE表(6.7.27項を参照)のUOM_ID列の値と一致します。例: 9110(60進法の度の場合)

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: Bundesamt fur Landestopographie

DATA_SOURCE

VARCHAR2(254)

このレコードのデータを提供した組織です(Oracle以外の場合)。例: EPSG

6.7.27 SDO_UNITS_OF_MEASURE表

SDO_UNITS_OF_MEASURE表には、測定単位ごとに1つの行が含まれます。この表に含まれる列を、表6-26に示します。

表6-26 SDO_UNITS_OF_MEASURE表

列名

データ型

説明

UOM_ID

NUMBER(10)

測定単位のID番号です。例: 10032

UNIT_OF_MEAS_NAME

VARCHAR2(2083)

測定単位の名前で、URLまたはURIを指定することもできます。例: Meter

SHORT_NAME

VARCHAR2(80)

測定単位の短縮名です(短縮名がある場合)。例: METER

UNIT_OF_MEAS_TYPE

VARCHAR2(50)

単位が使用される測定の種類です。角度単位(angle)、面積単位(area)、距離単位(length)、スケール単位(scale)または容積単位(volume)です。

TARGET_UOM_ID

NUMBER(10)

ターゲットの測定単位のID番号です。EPSG測定単位表のTARGET_UOM_CODE列と対応しています。この列は、「式(POSC)を使用して現在のUOMを変換可能な、種類が同じ他のUOM。EPSGで提供する測定単位では、POSCファクタのAおよびDは必ずゼロに等しい」と説明されています。

FACTOR_B

NUMBER

EPSG測定単位表のFACTOR_B列と対応しています。この列は、「ターゲットUOM(y)の量は、y = (B/C).xの変換により、現在のUOM(x)の量から得られる」と説明されています。

ユーザー定義の測定単位の場合、FACTOR_Bは通常、平方mの数値またはmの数値のうち単位が等しい方の数値です。ユーザー定義の単位の詳細は、2.10.1項を参照してください。

FACTOR_C

NUMBER

EPSG測定単位表のFACTOR_C列と対応しています。

ユーザー定義単位でのFACTOR_Cについては、2.10.1項を参照してください。

INFORMATION_SOURCE

VARCHAR2(254)

この情報のソースです。例: ISO 1000.

DATA_SOURCE

VARCHAR2(40)

このレコードのデータを提供している組織です。例: EPSG

IS_LEGACY

VARCHAR2(5)

測定単位の定義が、リリース2(10.2)より前のOracle Spatialに含まれていた場合はTRUE、Oracle Spatialリリース2(10.2)で新設された定義の場合はFALSEです。

LEGACY_CODE

NUMBER(10)

EPSG測定単位と同じ意味を持つレガシー測定単位が(リリース2(10.2)より前のOracle Spatialに)存在する場合は、そのレガシー測定単位のUOM_ID値です。

6.7.28 座標系の表とビューとの関係

Spatialのシステム表およびビューの定義は、EPSGデータ・モデルおよびデータセットに基づいているため、EPSGのエンティティ関連(E-R)ダイアグラムを参照すると、Spatialの座標系データ構造間の関係の概要がよくわかります。EPSG E-Rダイアグラムは、ドキュメント(http://www.epsg.org/CurrentDB.html)に記載されています。

ただし、Oracle Spatialでは次のEPSG E-Rダイアグラムは使用されていません。

- Area of Use(ダイアグラムの中央上部にある黄色いボックス)

- Deprecation、Aliasなど(ダイアグラムの右下部分にピンク色のボックスで表されている部分)

この他、Spatialでは、一部の表名がSpatial独自の命名規則に準拠するように変更されます。また、表6-27に示す一部の表は使用されません。

表6-27 EPSGの表名とOracle Spatialの表名

EPSGの表名

Oracleの表名

Coordinate System

SDO_COORD_SYS

Coordinate Axis

SDO_COORD_AXES

Coordinate Reference System

SDO_COORD_REF_SYSTEM

Area Of Use

(未使用)

Datum

SDO_DATUMS

Prime Meridian

SDO_PRIME_MERIDIANS

Ellipsoid

SDO_ELLIPSOIDS

Unit Of Measure

SDO_UNITS_OF_MEASURE

Coordinate Operation

SDO_COORD_OPS

Coord.Operation Parameter ValueCoord

SDO_COORD_OP_PARAM_VALS

Operation Parameter UsageCoord.

SDO_COORD_OP_PARAM_USE

Operation Parameter

SDO_COORD_OP_PARAMS

Coordinate Operation Path

SDO_COORD_OP_PATHS

Coordinate Operation Method

SDO_COORD_OP_METHODS

Change

(未使用)

Deprecation

(未使用)

Supersession

(未使用)

Naming System

(未使用)

Alias

(未使用)

Any Entity

(未使用)

6.7.29 EPSGベースの座標系に関する情報の検索

この項では、EPSGベースの測地座標系および投影座標系に関する情報を、Spatialの座標系データ構造で問い合せる方法を説明します。

6.7.29.1 測地座標系

人間が判読可能なCRSのサマリー形式はWKT文字列です。次に例を示します。

SQL> select wktext from cs_srs where srid = 4326;

WKTEXT
--------------------------------------------------------------------------------
GEOGCS [ "WGS 84", DATUM ["World Geodetic System 1984 (EPSG ID 6326)", SPHEROID
["WGS 84 (EPSG ID 7030)", 6378137, 298.257223563]], PRIMEM [ "Greenwich", 0.0000
00 ], UNIT ["Decimal Degree", 0.01745329251994328]]

EPSG WKTは、下位互換性を維持するためにSpatialによって自動生成されます。EPSG WKTには便宜上、数値ID(前述の例のEPSG ID 6326など)も含まれます。ただし、詳細な情報を得るには、座標系データ構造に格納されたEPSGデータにアクセスする必要があります。次の例は、SRID 4123に対する楕円体、データのシフト、回転およびスケール調整に関する情報を戻します。

SQL> select
ell.semi_major_axis,
ell.inv_flattening,
ell.semi_minor_axis,
ell.uom_id,
dat.shift_x,
dat.shift_y,
dat.shift_z,
dat.rotate_x,
dat.rotate_y,
dat.rotate_z,
dat.scale_adjust
from
sdo_coord_ref_system crs,
sdo_datums dat,
sdo_ellipsoids ell
where
crs.srid = 4123 and
dat.datum_id = crs.datum_id and
ell.ellipsoid_id = dat.ellipsoid_id;

SEMI_MAJOR_AXIS INV_FLATTENING SEMI_MINOR_AXIS     UOM_ID    SHIFT_X    SHIFT_Y    SHIFT_Z   ROTATE_X   ROTATE_Y   ROTATE_Z SCALE_ADJUST
--------------- -------------- --------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ------------
6378388            297      6356911.95       9001      -90.7     -106.1     -119.2       4.09       .218      -1.05         1.37

前述の例では、UOM_IDはSEMI_MAJOR_AXIS(a)およびSEMI_MINOR_AXIS(b)の測定単位を表します。INV_FLATTENINGはa/(a-b)であり、単位は関連付けられていません。シフトの単位はmで、回転角度の単位はアーク秒数、スケール調整の単位は100万分の1です。

UOM_IDを解釈するには、次の例に示すとおり、単位表を問い合せます。

SQL> select UNIT_OF_MEAS_NAME from sdo_units_of_measure where UOM_ID = 9001;

UNIT_OF_MEAS_NAME
--------------------------------------------------------------------------------
metre

次の例に示すとおり、長さの単位換算率は、mに対して相対的に指定します。

SQL> select UNIT_OF_MEAS_NAME, FACTOR_B/FACTOR_C from sdo_units_of_measure where UOM_ID = 9002;

UNIT_OF_MEAS_NAME
--------------------------------------------------------------------------------
FACTOR_B/FACTOR_C
-----------------
foot
.3048

次の例に示すとおり、角度の単位換算率は、ラジアンに対して相対的に指定します。

SQL> select UNIT_OF_MEAS_NAME, FACTOR_B/FACTOR_C from sdo_units_of_measure where UOM_ID = 9102;

UNIT_OF_MEAS_NAME
--------------------------------------------------------------------------------
FACTOR_B/FACTOR_C
-----------------
degree
.017453293

6.7.29.2 投影座標系

6.7.29.1項で説明したとおり、WKTは人間が判読可能なCRSのサマリーですが、実際のEPSGデータはSpatialの座標系データ構造に格納されています。次の例に、投影座標系のWKT文字列を示します。

SQL> select wktext from cs_srs where srid = 32040;

WKTEXT
--------------------------------------------------------------------------------
PROJCS["NAD27 / Texas South Central", GEOGCS [ "NAD27", DATUM ["North American D
atum 1927 (EPSG ID 6267)", SPHEROID ["Clarke 1866 (EPSG ID 7008)", 6378206.4, 29
4.978698213905820761610537123195175418]], PRIMEM [ "Greenwich", 0.000000 ], UNIT
["Decimal Degree", 0.01745329251994328]], PROJECTION ["Texas CS27 South Central
zone (EPSG OP 14204)"], PARAMETER ["Latitude_Of_Origin", 27.8333333333333333333
3333333333333333333], PARAMETER ["Central_Meridian", -98.99999999999999999999999
999999999999987], PARAMETER ["Standard_Parallel_1", 28.3833333333333333333333333
3333333333333], PARAMETER ["Standard_Parallel_2", 30.283333333333333333333333333
33333333333], PARAMETER ["False_Easting", 2000000], PARAMETER ["False_Northing",
0], UNIT ["U.S. Foot", .3048006096012192024384048768097536195072]]

投影CRSの基となる地理CRSを特定するには、次の例に示すとおり、SDO_COORD_REF_SYSTEM表を問い合せます。

SQL> select SOURCE_GEOG_SRID from sdo_coord_ref_system where srid = 32040;

SOURCE_GEOG_SRID
----------------
4267

次の例では、投影CRS 32040の投影方法が戻されます。

SQL> select
m.coord_op_method_name
from
sdo_coord_ref_sys crs,
sdo_coord_ops ops,
sdo_coord_op_methods m
where
crs.srid = 32040 and
ops.coord_op_id = crs.projection_conv_id and
m.coord_op_method_id = ops.coord_op_method_id;

COORD_OP_METHOD_NAME
--------------------------------------------------
Lambert Conic Conformal (2SP)

次の例では、投影CRS 32040の投影パラメータが戻されます。

SQL> select
params.parameter_name || ' = ' ||
vals.parameter_value || ' ' ||
uom.unit_of_meas_name "Projection parameters"
from
sdo_coord_ref_sys crs,
sdo_coord_op_param_vals vals,
sdo_units_of_measure uom,
sdo_coord_op_params params
where
crs.srid = 32040 and
vals.coord_op_id = crs.projection_conv_id and
uom.uom_id = vals.uom_id and
params.parameter_id = vals.parameter_id;

Projection parameters
--------------------------------------------------------------------------------
Latitude of false origin = 27.5 sexagesimal DMS
Longitude of false origin = -99 sexagesimal DMS
Latitude of 1st standard parallel = 28.23 sexagesimal DMS
Latitude of 2nd standard parallel = 30.17 sexagesimal DMS
Easting at false origin = 2000000 US survey foot
Northing at false origin = 0 US survey foot

次の例は基本的に前述の例と同じ問合せですが、基本単位への値の変換も行われます。

SQL> select
params.parameter_name || ' = ' ||
vals.parameter_value || ' ' ||
uom.unit_of_meas_name || ' = ' ||
sdo_cs.transform_to_base_unit(vals.parameter_value, vals.uom_id) || ' ' ||
decode(
uom.unit_of_meas_type,
'area', 'square meters',
'angle', 'radians',
'length', 'meters',
'scale', '', '') "Projection parameters"
from
sdo_coord_ref_sys crs,
sdo_coord_op_param_vals vals,
sdo_units_of_measure uom,
sdo_coord_op_params params
where
crs.srid = 32040 and
vals.coord_op_id = crs.projection_conv_id and
uom.uom_id = vals.uom_id and
params.parameter_id = vals.parameter_id;

Projection parameters
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Latitude of false origin = 27.5 sexagesimal DMS = .485783308471754564814814814814814814815 radians
Longitude of false origin = -99 sexagesimal DMS = -1.7278759594743845 radians
Latitude of 1st standard parallel = 28.23 sexagesimal DMS = .495382619357723367592592592592592592593 radians
Latitude of 2nd standard parallel = 30.17 sexagesimal DMS = .528543875145615595370370370370370370371 radians
Easting at false origin = 2000000 US survey foot = 609601.219202438404876809753619507239014 meters
Northing at false origin = 0 US survey foot = 0 meters

次の例では、投影CRS 32040の投影測定単位が戻されます。(投影単位は、投影パラメータに使用された長さの単位とは異なる場合があります。)

SQL> select
axes.coord_axis_abbreviation || ': ' ||
uom.unit_of_meas_name "Projection units"
from
sdo_coord_ref_sys crs,
sdo_coord_axes axes,
sdo_units_of_measure uom
where
crs.srid = 32040 and
axes.coord_sys_id = crs.coord_sys_id and
uom.uom_id = axes.uom_id;

Projection units
------------------------------------------------------------------------------
X: US survey foot
Y: US survey foot

6.8 レガシー表およびビュー

リリース10.2より前のSpatialでは、座標系ファンクションおよびプロシージャは、次の表の情報を使用していました。その一部は名前が新しくなったり、現在、表ではなくビューになっています。

- MDSYS.CS_SRS (6.8.1項を参照)は、有効な座標系を定義していました。この表では、各座標系と、それに関する説明を対応付けています。この表は、Open Geospatial Consortium (http://www.opengeospatial.org)から公開されている標準に準拠しています。

- MDSYS.SDO_ANGLE_UNITS(6.8.2項を参照)は、有効な角度単位を定義します。

- MDSYS.SDO_AREA_UNITS(6.8.3項を参照)は、有効な面積単位を定義します。

- MDSYS.SDO_DIST_UNITS(6.8.5項を参照)は、有効な距離単位を定義します。

- MDSYS.SDO_DATUMS_OLD_FORMATおよびMDSYS.SDO_DATUMS_OLD_SNAPSHOT(6.8.4項を参照)は、リリース10.2より前のMDSYS.SDO_DATUMS表(有効なデータを定義)に基づいています。

- MDSYS.SDO_ELLIPSOIDS_OLD_FORMATおよびMDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT(6.8.6項を参照)は、リリース10.2より前のMDSYS.SDO_ELLIPSOIDS表(有効な楕円体を定義)に基づいています。

- MDSYS.SDO_PROJECTIONS_OLD_FORMATおよびMDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT(6.8.7項を参照)は、リリース10.2より前のMDSYS.SDO_PROJECTIONS表(有効な投影図を定義)に基づいています。

注意:
これらのレガシー表でOracleから提供されている情報は、すべて変更および削除しないでください。
SQL文でレガシー表を参照する場合は、表の名前の前にMDSYS.を付ける必要があります。

6.8.1 MDSYS.CS_SRS表

MDSYS.CS_SRS参照表には4000を超える行が含まれ、それぞれが有効な座標系に割り当てられています。この表に含まれる列を、表6-28に示します。

表6-28 MDSYS.CS_SRS表

列名

データ型

説明

CS_NAME

VARCHAR2(68)

わかりやすい名前(ニーモニック)を指定します。これによって、ユーザーは座標系を参照できます。

SRID

NUMBER(38)

座標系の一意のID番号(空間参照ID)です。現在、SRID値1から999999は、Oracle Spatialが使用するために予約されているため、ユーザー定義の座標系には、1000000以上のSRID値を使用できます。

AUTH_SRID

NUMBER(38)

オプションのID番号です。エントリの抽出方法を指定します。たとえば、別の座標系への外部キーとなる場合があります。

AUTH_NAME

VARCHAR2(256)

座標系の認可レベル名です。指定された表にはOracleが含まれます。ユーザーが追加するすべての行には、どのような値でも指定できます。

WKTEXT

VARCHAR2(2046)

SRSのwell-knownテキスト(WKT)の説明で、Open Geospatial Consortiumによって定義されています。詳細は、6.8.1.1項を参照してください。

CS_BOUNDS

SDO_GEOMETRY

WGS 84経度および緯度の頂点を持つポリゴンであるオプションのSDO_GEOMETRYオブジェクトで、投影座標系の有効範囲に関する球形ポリゴンの説明を表します。地理または非地球座標系の場合は、NULLである必要があります。すべての行にNULLが入ります。

6.8.1.1 well-knownテキスト(WKT)

MDSYS.CS_SRS表のWKTEXT列には、SRSの説明としてOpen Geospatial Consortiumによって定義されたwell-knownテキスト(WKT)の説明が含まれています。WKT拡張バッカス正規形構文を次に示します。

<coordinate system> ::=
<horz cs> | <local cs>

<horz cs> ::=
<geographic cs> | <projected cs>

<projected cs> ::=
PROJCS [ "<name>", <geographic cs>, <projection>,
{<parameter>,}* <linear unit> ]

<projection> ::=
PROJECTION [ "<name>" ]

<parameter> ::=
PARAMETER [ "<name>", <number> ]

<geographic cs> ::=
GEOGCS [ "<name>", <datum>, <prime meridian>, <angular unit> ]

<datum> ::=
DATUM [ "<name>", <spheroid>
{, <shift-x>, <shift-y>, <shift-z>
, <rot-x>, <rot-y>, <rot-z>, <scale_adjust>}
]

<spheroid> ::=
SPHEROID ["<name>", <semi major axis>, <inverse flattening> ]

<prime meridian> ::=
PRIMEM ["<name>", <longitude> ]

<longitude> ::=
<number>

<semi-major axis> ::=
<number>

<inverse flattening> ::=
<number>

<angular unit> ::= <unit>

<linear unit> ::= <unit>

<unit> ::=
UNIT [ "<name>", <conversion factor> ]

<local cs> ::=
LOCAL_CS [ "<name>", <local datum>, <linear unit>,
<axis> {, <axis>}* ]

<local datum> ::=
LOCAL_DATUM [ "<name>", <datum type>
{, <shift-x>, <shift-y>, <shift-z>
, <rot-x>, <rot-y>, <rot-z>, <scale_adjust>}
]

<datum type> ::=
<number>

<axis> ::=
AXIS [ "<name>", NORTH | SOUTH | EAST |
WEST | UP | DOWN | OTHER ]

それぞれの<parameter>指定は、次のいずれかです。

- Standard_Parallel_1(10進度単位)

- Standard_Parallel_2(10進度単位)

- Central_Meridian(10進度単位)

- Latitude_of_Origin(10進度単位)

- Azimuth(10進度単位)

- False_Easting(座標系の単位。たとえば、m)

- False_Northing(座標系の単位。たとえば、m)

- Perspective_Point_Height(座標系の単位。たとえば、m)

- Landsat_Number(1、2、3、4または5である必要があります)

- Path_Number

- Scale_Factor

注意:
WKTのデータ回転パラメータに使用されている表記法が米国式ではなくヨーロッパ式の場合、または変換結果が正しくないと思われる場合は、6.8.1.2項を参照してください。

各<parameter>指定のデフォルト値は0(ゼロ)です。つまり、投影に対して指定が必要なときに値がWKTで指定されていない場合は、値0が使用されます。

本初子午線(PRIMEM)は、10進度の経度で指定されます。

測地(地理)座標系のWKTの例を次に示します。

'GEOGCS [ "Longitude / Latitude (Old Hawaiian)", DATUM ["Old Hawaiian", SPHEROID
["Clarke 1866", 6378206.400000, 294.978698]], PRIMEM [ "Greenwich", 0.000000 ],
UNIT ["Decimal Degree", 0.01745329251994330]]'

座標系のWKT定義は、階層的にネストされています。Old Hawaiian地理座標系(GEOGCS)は、名前が付いたデータ(DATUM)、本初子午線(PRIMEM)および単位定義(UNIT)で構成されています。逆に、データは、名前が付いた球体およびそのsemi-major axisパラメータおよびinverse flatteningパラメータで構成されています。

投影座標系のWKTの例(Wyoming州平地)を次に示します。

'PROJCS["Wyoming 4901, Eastern Zone (1983, meters)", GEOGCS [ "GRS 80", DATUM
["GRS 80", SPHEROID ["GRS 80", 6378137.000000, 298.257222]], PRIMEM [
"Greenwich", 0.000000 ], UNIT ["Decimal Degree", 0.01745329251994330]],
PROJECTION ["Transverse Mercator"], PARAMETER ["Scale_Factor", 0.999938],
PARAMETER ["Central_Meridian", -105.166667], PARAMETER ["Latitude_Of_Origin",
40.500000], PARAMETER ["False_Easting", 200000.000000], UNIT ["Meter",
1.000000000000]]'

投影座標系には、投影を制御するパラメータと同様に、ネストした地理座標系が基準として含まれます。

Oracle Spatialでは、すべての測地データおよび投影図をサポートします。

ローカル座標系のWKTの例を次に示します。

LOCAL_CS [ "Non-Earth (Meter)", LOCAL_DATUM ["Local Datum", 0], UNIT ["Meter", 1.0], AXIS ["X", EAST], AXIS["Y", NORTH]]

ローカル座標系の詳細は、6.3項を参照してください。

SDO_CS.VALIDATE_WKTファンクション(第21章を参照)を使用すると、MDSYS.CS_SRS表に定義されているすべての座標系のWKTを検証できます。

6.8.1.2 米国式およびヨーロッパ式のデータ・パラメータ表記法

データ関連のWKTパラメータは、Bursa Wolf変換パラメータを最大7個含むリストです。回転パラメータではアーク秒が指定され、シフト・パラメータではmが指定されます。

米国式およびヨーロッパ式の異なる2つの表記法は、3つの汎用回転パラメータで使用されており、またそれぞれ正反対の符号を使用しています。Spatialでは、米国式の表記法を採用し想定しています。したがって、WKTでヨーロッパ式表記法が使用されている場合は、回転パラメータの符号を逆にして、米国式表記法に変換する必要があります。

パラメータ・セットで使用されている表記法が米国式かヨーロッパ式か不明な場合は、次のテストを実行します。

1. 正しい変換結果がわかっている単一の点を選択します。

2. 現行のWKTを使用して変換を実行します。

3. 想定した正しい結果と計算結果が一致しない場合は、回転パラメータの符号を逆にして変換を実行し、想定した正しい結果と計算結果が一致するかを確認します。

6.8.1.3 well-knownテキストの更新手順

SDO_COORD_REF_SYSTEMビュー(6.7.10項を参照)に対して行を挿入または削除すると、MDSYS.CS_SRS表のWKTEXT列が自動的に更新されます。(WKTEXT列の書式については、6.8.1.1項を参照してください。)ただし、SDO_COORD_REF_SYSTEMビュー内の既存行を更新した場合は、well-knownテキスト(WKT)値は自動的に更新されません。

さらに、座標参照系に関連する情報は、SDO_DATUMS(6.7.22項を参照)、SDO_ELLIPSOIDS(6.7.23項を参照)、SDO_PRIME_MERIDIANS(6.7.26項を参照)などのシステム表にも格納されています。これらの表の情報を追加、削除または変更した場合も、MDSYS.CS_SRS表のWKTEXT値は自動的に更新されません。たとえば、SDO_ELLIPSOIDS表の楕円体のフラット化の値を更新したとしても、関連付けられている座標系のwell-knownテキスト文字列は更新されません。

ただし、名前がUPDATE_WKTS_FOR で始まるプロシージャ(たとえば、SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS、SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUMなど)を使用すると、MDSYS.CS_SRS表のWKTEXT値を手動で更新できます。SERVEROUTPUT情報の表示が有効になっている場合は、MDSYS.CS_SRS表内で、WKTEXT値が更新される行のSRID値を識別するメッセージが、これらのプロシージャによって表示されます。これらのプロシージャについては、第21章を参照してください。

6.8.2 MDSYS.SDO_ANGLE_UNITSビュー

MDSYS.SDO_ANGLE_UNITS参照ビューには、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効な角度のUNIT指定ごとに1つの行が含まれます。WKTについては、6.8.1.1項を参照してください。

MDSYS.SDO_ANGLE_UNITSビューは、SDO_UNITS_OF_MEASURE表(6.7.27項を参照)に基づいており、これには表6-29に示す列が含まれています。

表6-29 MDSYS.SDO_ANGLE_UNITSビュー

列名

データ型

説明

SDO_UNIT

VARCHAR2(32)

角度単位名(ほとんどの場合は、UNIT_NAME値の略称)です。SDO_UNIT値は、SDO_UTIL.CONVERT_UNITファンクションのfrom_unitおよびto_unitパラメータで使用します。

UNIT_NAME

VARCHAR2(100)

角度単位名です。任意のユーザー定義の座標系に対するWKTのUNIT指定にこの列の値を指定します。値は、Decimal Degree (10進度)、Radian (ラジアン)、Decimal Second (10進秒)、Decimal Minute (10進分)、Gon、Gradなどです。

CONVERSION_FACTOR

NUMBER

1ラジアンに対する指定した単位の比率です。たとえば、ラジアンに対する10進度の比率は0.017453293です。

6.8.3 MDSYS.SDO_AREA_UNITSビュー

MDSYS.SDO_AREA_UNITS参照ビューには、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効な面積のUNIT指定ごとに1つの行が含まれます。WKTについては、6.8.1.1項を参照してください。

MDSYS.SDO_AREA_UNITSビューは、SDO_UNITS_OF_MEASURE表(6.7.27項を参照)に基づいており、これには表6-30に示す列が含まれています。

表6-30 SDO_AREA_UNITSビュー

列名

データ型

説明

SDO_UNIT

VARCHAR2

値は、SDO_UNITS_OF_MEASURE表のSHORT_NAME列から取得されます。

UNIT_NAME

VARCHAR2

値は、SDO_UNITS_OF_MEASURE表のUNIT_OF_MEAS_NAME列から取得されます。

CONVERSION_FACTOR

NUMBER

1平方mに対する単位の比率です。たとえば、1平方mの換算係数は1.0で、1平方マイルの換算係数は2589988です。

6.8.4 MDSYS.SDO_DATUMS_OLD_FORMAT表およびSDO_DATUMS_OLD_SNAPSHOT表

MDSYS.SDO_DATUMS_OLD_FORMAT参照表とMDSYS.SDO_DATUMS_OLD_SNAPSHOT参照表には、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効なDATUM指定ごとに1つの行が含まれます。(WKTについては、6.8.1.1項を参照してください。)

- MDSYS.SDO_DATUMS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースのデータ指定が表に格納されています)。

- MDSYS.SDO_DATUMS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前のデータ指定と表形式)。

これらの表に含まれる列を、表6-31に示します。

表6-31 MDSYS.SDO_DATUMS_OLD_FORMAT表およびSDO_DATUMS_OLD_SNAPSHOT表

列名

データ型

説明

NAME

VARCHAR2(80)(OLD_FORMATの場合)

VARCHAR2(64)(OLD_SNAPSHOTの場合)

データ名です。任意のユーザー定義の座標系に対するWKTのDATUM指定にこの列の値(Oracleが指定する値またはユーザー定義の値)を指定します。値は、Adindan、Afgooye、Ain el Abd 1970、Anna 1 Astro 1965、Arc 1950、Arc 1960、Ascension Island 1958などです。

SHIFT_X

NUMBER

X軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Y

NUMBER

Y軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

SHIFT_Z

NUMBER

Z軸上で楕円体の中心をWGS 84楕円体の中心に相対的にシフトする数(m)です。

ROTATE_X

NUMBER

X軸を中心にした回転のアーク秒数です。

ROTATE_Y

NUMBER

Y軸を中心にした回転のアーク秒数です。

ROTATE_Z

NUMBER

Z軸を中心にした回転のアーク秒数です。

SCALE_ADJUST

NUMBER

1.0 +(SCALE_ADJUST×10-6)という計算式に従って、シフトおよび回転後のX値、Y値およびZ値の調整に使用する値です。

これらの表に格納されるデータの名前(表形式)を次に示します。

Adindan

Afgooye

Ain el Abd 1970

Anna 1 Astro 1965

Arc 1950

Arc 1960

Ascension Island 1958

Astro B4 Sorol Atoll

Astro Beacon E

Astro DOS 71/4

Astronomic Station 1952

Australian Geodetic 1966

Australian Geodetic 1984

Belgium Hayford

Bellevue(IGN)

Bermuda 1957

Bogota Observatory

CH 1903(Switzerland)

Campo Inchauspe

Canton Astro 1966

Cape

Cape Canaveral

Carthage

Chatham 1971

Chua Astro

Corrego Alegre

DHDN(Potsdam/Rauenberg)

DOS 1968

Djakarta(Batavia)

Easter Island 1967

European 1950

European 1979

European 1987

GRS 67

GRS 80

GUX 1 Astro

Gandajika Base

Geodetic Datum 1949

Guam 1963

Hito XVIII 1963

Hjorsey 1955

Hong Kong 1963

Hu-Tzu-Shan

ISTS 073 Astro 1969

Indian(Bangladeshなど)

Indian(Thailand/Vietnam)

Ireland 1965

Johnston Island 1961

Kandawala

Kerguelen Island

Kertau 1948

L.C. 5 Astro

Liberia 1964

Lisboa(DLx)

Luzon(Mindanao Island)

Luzon(Philippines)

Mahe 1971

Marco Astro

Massawa

Melrica 1973(D73)

Merchich

Midway Astro 1961

Minna

NAD 27(Alaska)

NAD 27(Bahamas)

NAD 27(Canada)

NAD 27(Canal Zone)

NAD 27(Caribbean)

NAD 27(Central America)

NAD 27(Continental US)

NAD 27(Cuba)

NAD 27(Greenland)

NAD 27(Mexico)

NAD 27(Michigan)

NAD 27(San Salvador)

NAD 83

NTF(Greenwich meridian)

NTF(Paris meridian)

NWGL 10

Nahrwan(Masirah Island)

Nahrwan(Saudi Arabia)

Nahrwan (Un.Arab Emirates)

Naparima、BWI

Netherlands Bessel

Observatorio 1966

Old Egyptian

Old Hawaiian

Oman

Ordinance Survey Great Brit

Pico de las Nieves

Pitcairn Astro 1967

Provisional South American

Puerto Rico

Pulkovo 1942

Qatar National

Qornoq

RT 90(Sweden)

Reunion

Rome 1940

Santo(DOS)

Sao Braz

Sapper Hill 1943

Schwarzeck

South American 1969

South Asia

Southeast Base

Southwest Base

Timbalai 1948

Tokyo

Tristan Astro 1968

Viti Levu 1916

WGS 60

WGS 66

WGS 72

WGS 84

Wake-Eniwetok 1960

Yacare

Zanderij

6.8.5 MDSYS.SDO_DIST_UNITSビュー

MDSYS.SDO_DIST_UNITS参照ビューには、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効な距離のUNIT指定ごとに1つの行が含まれます。WKTについては、6.8.1.1項を参照してください。

MDSYS.SDO_DIST_UNITSビューは、SDO_UNITS_OF_MEASURE表(6.7.27項を参照)に基づいており、これには表6-32に示す列が含まれています。

表6-32 MDSYS.SDO_DIST_UNITSビュー

列名

データ型

説明

SDO_UNIT

VARCHAR2

値は、SDO_UNITS_OF_MEASURE表のSHORT_NAME列から取得されます。

UNIT_NAME

VARCHAR2

値は、SDO_UNITS_OF_MEASURE表のUNIT_OF_MEAS_NAME列から取得されます。

CONVERSION_FACTOR

NUMBER

1mに対する単位の比率です。たとえば、1mの換算係数は1.0で、1マイルの換算係数は1609.344です。

6.8.6 MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表およびSDO_ELLIPSOIDS_OLD_SNAPSHOT表

MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT参照表とMDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT参照表には、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効なSPHEROID指定ごとに1つの行が含まれます。(WKTについては、6.8.1.1項を参照してください。)

- MDSYS.SDO_ELLIPSOIDS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースの楕円体指定が表に格納されています)。

- MDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前の楕円体指定と表形式)。

これらの表に含まれる列を、表6-33に示します。

表6-33 MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表およびSDO_ELLIPSOIDS_OLD_SNAPSHOT表

列名

データ型

説明

NAME

VARCHAR2(80)(OLD_FORMATの場合)

VARCHAR2(64)(OLD_SNAPSHOTの場合)

楕円体(球体)の名前です。任意のユーザー定義の座標系に対するWKTのSPHEROID指定にこの列の値を指定します。値は、Clarke 1866、WGS 72、Australian、Krassovsky、International 1924などです。

SEMI_MAJOR_AXIS

NUMBER

半長径(楕円体の長軸の半分)に沿った半径(m)です。

INVERSE_FLATTENING

NUMBER

楕円体の逆フラット化( 1/f )です。この場合(1/f)、f = (a-b)/a、aは半長径、bは半短径です。

これらの表に格納される楕円体の名前(表形式)を次に示します。

Airy 1830

Airy 1830(Ireland 1965)

Australian

Bessel 1841

Bessel 1841(NGO 1948)

Bessel 1841(Schwarzeck)

Clarke 1858

Clarke 1866

Clarke 1866(Michigan)

Clarke 1880

Clarke 1880(Arc 1950)

Clarke 1880(IGN)

Clarke 1880(Jamaica)

Clarke 1880(Merchich)

Clarke 1880(Palestine)

Everest

Everest(Kalianpur)

Everest(Kertau)

Everest(Timbalai)

Fischer 1960(Mercury)

Fischer 1960(South Asia)

Fischer 1968

GRS 67

GRS 80

Hayford

Helmert 1906

Hough

IAG 75

Indonesian

International 1924

Krassovsky

MERIT 83

NWL 10D

NWL 9D

New International 1967

OSU86F

OSU91A

Plessis 1817

South American 1969

Sphere(6370997m)

Struve 1860

WGS 60

WGS 66

WGS 72

WGS 84

Walbeck

War Office

6.8.7 MDSYS.SDO_PROJECTIONS_OLD_FORMAT表およびSDO_PROJECTIONS_OLD_SNAPSHOT表

MDSYS.SDO_PROJECTIONS_OLD_FORMAT参照表とMDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT参照表には、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効なPROJECTION指定ごとに1つの行が含まれます。(WKTについては、6.8.1.1項を参照してください。)

- MDSYS.SDO_PROJECTIONS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースの投影法指定が表に格納されています)。

- MDSYS.SDO_PROJECTIONS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前の投影法指定と表形式)。

これらの表に含まれる列を、表6-34に示します。

表6-34 MDSYS.SDO_PROJECTIONS_OLD_FORMAT表およびSDO_PROJECTIONS_OLD_SNAPSHOT表

列名

データ型

説明

NAME

VARCHAR2(80)(OLD_FORMATの場合)

VARCHAR2(64)(OLD_SNAPSHOTの場合)

投影図名です。任意のユーザー定義の座標系に対するPROJECTION指定にこの列の値を指定します。値は、Geographic (Lat/Long)、Universal Transverse Mercator、State Plane Coordinates、Albers Conical Equal Areaなどです。

これらの表に格納される投影法の名前(表形式)を次に示します。

Alaska Conformal

Albers Conical Equal Area

Azimuthal Equidistant

Bonne

Cassini

Cylindrical Equal Area

Eckert IV

Eckert VI

Equidistant Conic

Equirectangular

Gall

General Vertical Near-Side Perspective

Geographic(Lat/Long)

Gnomonic

Hammer

Hotine Oblique Mercator

Interrupted Goode Homolosine

Interrupted Mollweide

Lambert Azimuthal Equal Area

Lambert Conformal Conic

Lambert Conformal Conic(Belgium 1972)

Mercator

Miller Cylindrical

Mollweide

New Zealand Map Grid

Oblated Equal Area

Orthographic

Polar Stereographic

Polyconic

Robinson

Sinusoidal

Space Oblique Mercator

State Plane Coordinates

Stereographic

Swiss Oblique Mercator

Transverse Mercator

Transverse Mercator Danish System 34 Jylland-Fyn

Transverse Mercator Danish System 45 Bornholm

Transverse Mercator Finnish KKJ

Transverse Mercator Sjaelland

Universal Transverse Mercator

Van der Grinten

Wagner IV

Wagner VII

6.9 ユーザー定義の座標参照系の作成

Oracleから提供されている座標系でニーズを十分に満たすことができない場合は、ユーザー定義の座標参照系を作成できます。

注意:
6.1.1項で述べたように、「座標系」という用語と「座標参照系」(CRS)という用語は、通常、区別なく使用されます。ただし、「座標参照系」は、地球をベースにしている必要があります。

ユーザー定義のCRSを作成する手順は、厳密には、それが測地座標参照系であるか、投影座標参照系であるかによって異なります。どちらの場合も、座標系に関する情報(座標軸、軸の名前、測定単位など)を指定する必要があります。測地CRSの場合は、データに関する情報(楕円体、本初子午線など)を指定します(6.9.1項を参照)。投影CRSの場合は、ソース(測地)CRSと投影法に関する情報(操作およびパラメータ)を指定します(6.9.2項を参照)。

ユーザー定義の座標系の場合、SRID値は1000000以上にする必要があります。

6.9.1 測地CRSの作成

測定単位、座標軸、SDO_COORD_SYS表の行、楕円体、本初子午線、データなどの必要情報が定義済の場合は、SDO_COORD_REF_SYSTEMビュー(6.7.10項を参照)に行を挿入して、新しい測地CRSを定義します。

例6-5では、My Own NAD27という名前の架空の測地CRSの定義を挿入しています(これは、SRIDと名前以外は、Oracle提供のNAD27 CRSと同じです)。

例6-5 ユーザー定義の測地座標参照系の作成

INSERT INTO SDO_COORD_REF_SYSTEM (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
GEOG_CRS_DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS,
IS_VALID,
SUPPORTS_SDO_GEOMETRY)
VALUES (
9994267,
'My Own NAD27',
'GEOGRAPHIC2D',
6422,
6267,
6267,
NULL,
NULL,
NULL,
NULL,
NULL,
'EPSG',
'FALSE',
NULL,
NULL,
NULL,
'TRUE',
'TRUE');

定義に必要な情報が不足している場合は、必要に応じて、次の手順に従って情報を定義してからSDO_COORD_REF_SYSTEMビューに行を挿入します。

1. 測定単位がSDO_UNITS_OF_MEASURE表(6.7.27項を参照)に定義されていない場合は、表に行を挿入して新しい測定単位を定義します。

2. 座標軸がSDO_COORD_AXES表(6.7.1項を参照)に定義されていない場合は、新しい座標軸ごとに1行を表に挿入します。

3. 座標系の適切なエントリがSDO_COORD_SYS表(6.7.11項を参照)に定義されていない場合は、表に行を挿入します。例6-6では、架空の座標系の定義を挿入しています。

例6-6 SDO_COORD_SYS表への行の挿入

INSERT INTO SDO_COORD_SYS (
COORD_SYS_ID,
COORD_SYS_NAME,
COORD_SYS_TYPE,
DIMENSION,
INFORMATION_SOURCE,
DATA_SOURCE)
VALUES (
9876543,
'My custom CS. Axes: lat, long. Orientations: north, east. UoM: deg',
'ellipsoidal',
2,
'Myself',
'Myself');

4. 楕円体がSDO_ELLIPSOIDS表(6.7.23項を参照)に定義されていない場合は、表に行を挿入して新しい楕円体を定義します。

5. 本初子午線がSDO_PRIME_MERIDIANS表(6.7.26項を参照)に定義されていない場合は、表に行を挿入して新しい本初子午線を定義します。

6. データがSDO_DATUMS表(6.7.22項を参照)に定義されていない場合は、表に行を挿入して新しいデータを定義します。

6.9.2 投影CRSの作成

測定単位、座標軸、SDO_COORD_SYS表の行、ソース座標系、投影操作、投影パラメータなどの必要情報が定義済の場合は、SDO_COORD_REF_SYSTEMビュー(6.7.10項を参照)に行を挿入して新しい投影CRSを定義します。

例6-7では、My Own NAD27 / Cuba Norteという名前の架空の投影CRSの定義を挿入しています(これは、SRIDと名前以外は、Oracle提供のNAD27 / Cuba Norte CRSと同じです)。

例6-7 ユーザー定義の投影座標参照系の作成

INSERT INTO SDO_COORD_REF_SYSTEM (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
GEOG_CRS_DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS,
IS_VALID,
SUPPORTS_SDO_GEOMETRY)
VALUES (
9992085,
'My Own NAD27 / Cuba Norte',
'PROJECTED',
4532,
NULL,
6267,
4267,
18061,
NULL,
NULL,
'Institut Cubano di Hidrografia (ICH)',
'EPSG',
'FALSE',
NULL,
NULL,
NULL,
'TRUE',
'TRUE');

定義に必要な情報が不足している場合は、必要に応じて、次の手順に従って情報を定義してからSDO_COORD_REF_SYSTEMビューに行を挿入します。

1. 測定単位がSDO_UNITS_OF_MEASURE表(6.7.27項を参照)に定義されていない場合は、表に行を挿入して新しい測定単位を定義します。

2. 座標軸がSDO_COORD_AXES表(6.7.1項を参照)に定義されていない場合は、新しい座標軸ごとに1行を表に挿入します。

3. 座標系の適切なエントリがSDO_COORD_SYS表(6.7.11項を参照)に定義されていない場合は、表に行を挿入します。(6.9.1項の例6-6を参照してください。)

4. 投影操作がSDO_COORD_OPS表(6.7.8項を参照)に定義されていない場合は、表に行を挿入して新しい投影操作を定義します。例6-8に、Oracleが提供している座標操作ID 18061の情報を挿入する文を示します。

例6-8 SDO_COORD_OPS表への行の挿入

INSERT INTO SDO_COORD_OPS (
COORD_OP_ID,
COORD_OP_NAME,
COORD_OP_TYPE,
SOURCE_SRID,
TARGET_SRID,
COORD_TFM_VERSION,
COORD_OP_VARIANT,
COORD_OP_METHOD_ID,
UOM_ID_SOURCE_OFFSETS,
UOM_ID_TARGET_OFFSETS,
INFORMATION_SOURCE,
DATA_SOURCE,
SHOW_OPERATION,
IS_LEGACY,
LEGACY_CODE,
REVERSE_OP,
IS_IMPLEMENTED_FORWARD,
IS_IMPLEMENTED_REVERSE)
VALUES (
18061,
'Cuba Norte',
'CONVERSION',
NULL,
NULL,
NULL,
NULL,
9801,
NULL,
NULL,
NULL,
'EPSG',
1,
'FALSE',
NULL,
1,
1,
1);

5. 投影操作のパラメータがSDO_COORD_OP_PARAM_VALS表(6.7.5項を参照)に定義されていない場合は、新しいパラメータごとに1行を表に挿入します。例6-9に、Oracleが提供している、ID値が8801、8802、8805、8806および8807のパラメータの情報を挿入する文を示します。

例6-9 SDO_COORD_OP_PARAM_VALS表への行の挿入

INSERT INTO SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
18061,
9801,
8801,
22.21,
NULL,
9110);

INSERT INTO SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
18061,
9801,
8802,
-81,
NULL,
9110);

INSERT INTO SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
18061,
9801,
8805,
.99993602,
NULL,
9201);

INSERT INTO SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
18061,
9801,
8806,
500000,
NULL,
9001);

INSERT INTO SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
18061,
9801,
8807,
280296.016,
NULL,
9001);

例6-10に、ユーザー定義の投影座標参照系の作成例に注釈を付けて拡張した例を示します。

例6-10 ユーザー定義の投影CRSの作成(拡張例)

-- Create an EPSG equivalent for the following CRS:
--
-- CS_NAME:    VDOT_LAMBERT
-- SRID:       51000000
-- AUTH_SRID:  51000000
-- AUTH_NAME:  VDOT Custom Lambert Conformal Conic
-- WKTEXT:
--
-- PROJCS[
--   "VDOT_Lambert",
--   GEOGCS[
--     "GCS_North_American_1983",
--     DATUM[
--       "D_North_American_1983",
--       SPHEROID["GRS_1980", 6378137.0, 298.257222101]],
--     PRIMEM["Greenwich", 0.0],
--     UNIT["Decimal Degree",0.0174532925199433]],
--   PROJECTION["Lambert_Conformal_Conic"],
--   PARAMETER["False_Easting", 0.0],
--   PARAMETER["False_Northing", 0.0],
--   PARAMETER["Central_Meridian", -79.5],
--   PARAMETER["Standard_Parallel_1", 37.0],
--   PARAMETER["Standard_Parallel_2", 39.5],
--   PARAMETER["Scale_Factor", 1.0],
--   PARAMETER["Latitude_Of_Origin", 36.0],
--   UNIT["Meter", 1.0]]

-- First, the base geographic CRS (GCS_North_American_1983) already exists in EPSG.
-- It is 4269:
-- Next, find the EPSG equivalent for PROJECTION["Lambert_Conformal_Conic"]:
select
coord_op_method_id,
legacy_name
from
sdo_coord_op_methods
where
not legacy_name is null
order by
coord_op_method_id;

-- Result:
-- COORD_OP_METHOD_ID LEGACY_NAME
-- ------------------ --------------------------------------------------
--               9802 Lambert Conformal Conic
--               9803 Lambert Conformal Conic (Belgium 1972)
--               9805 Mercator
--               9806 Cassini
--               9807 Transverse Mercator
--               9829 Polar Stereographic
--
-- 6 rows selected.
--
-- It is EPSG method 9802. Create a projection operation 510000001, based on it:

insert into MDSYS.SDO_COORD_OPS (
COORD_OP_ID,
COORD_OP_NAME,
COORD_OP_TYPE,
SOURCE_SRID,
TARGET_SRID,
COORD_TFM_VERSION,
COORD_OP_VARIANT,
COORD_OP_METHOD_ID,
UOM_ID_SOURCE_OFFSETS,
UOM_ID_TARGET_OFFSETS,
INFORMATION_SOURCE,
DATA_SOURCE,
SHOW_OPERATION,
IS_LEGACY,
LEGACY_CODE,
REVERSE_OP,
IS_IMPLEMENTED_FORWARD,
IS_IMPLEMENTED_REVERSE)
VALUES (
510000001,
'VDOT_Lambert',
'CONVERSION',
NULL,
NULL,
NULL,
NULL,
9802,
NULL,
NULL,
NULL,
NULL,
1,
'FALSE',
NULL,
1,
1,
1);

-- Now, set the parameters. See which are required:

select
use.parameter_id || ': ' ||
use.legacy_param_name
from
sdo_coord_op_param_use use
where
use.coord_op_method_id = 9802;

-- result:
-- 8821: Latitude_Of_Origin
-- 8822: Central_Meridian
-- 8823: Standard_Parallel_1
-- 8824: Standard_Parallel_2
-- 8826: False_Easting
-- 8827: False_Northing
--
-- 6 rows selected.

-- Also check the most common units we will need:

select
UOM_ID || ': ' ||
UNIT_OF_MEAS_NAME
from
sdo_units_of_measure
where
uom_id in (9001, 9101, 9102, 9201)
order by
uom_id;

-- result:
-- 9001: metre
-- 9101: radian
-- 9102: degree
-- 9201: unity

-- Now, configure the projection parameters:

-- 8821: Latitude_Of_Origin

insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8821,
36.0,
NULL,
9102);

-- 8822: Central_Meridian

insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8822,
-79.5,
NULL,
9102);

-- 8823: Standard_Parallel_1

insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8823,
37.0,
NULL,
9102);

-- 8824: Standard_Parallel_2

insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8824,
39.5,
NULL,
9102);

-- 8826: False_Easting

insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8826,
0.0,
NULL,
9001);

-- 8827: False_Northing

insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8827,
0.0,
NULL,
9001);

-- Now, create the actual projected CRS.Look at the GEOG_CRS_DATUM_ID
-- and COORD_SYS_ID first. The GEOG_CRS_DATUM_ID is the datum of
-- the base geog_crs (4269):

select datum_id from sdo_coord_ref_sys where srid = 4269;

--   DATUM_ID
-- ----------
--       6269

-- And the COORD_SYS_ID is the Cartesian CS used for the projected CRS.
-- We can use 4400, if meters will be the unit:

select COORD_SYS_NAME from sdo_coord_sys where COORD_SYS_ID = 4400;

-- Cartesian 2D CS. Axes: easting, northing (E,N). Orientations: east, north.
-- UoM: m.

-- Now create the projected CRS:

insert into MDSYS.SDO_COORD_REF_SYSTEM (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS,
GEOG_CRS_DATUM_ID)
VALUES (
51000000,
'VDOT_LAMBERT',
'PROJECTED',
4400,
NULL,
4269,
510000001,
NULL,
NULL,
NULL,
NULL,
'FALSE',
NULL,
NULL,
NULL,
6269);

-- To see the result:

select srid, wktext from cs_srs where srid = 51000000;

--  51000000
-- PROJCS[
--   "VDOT_LAMBERT",
--   GEOGCS [
--     "NAD83",
--     DATUM [
--       "North American Datum 1983 (EPSG ID 6269)",
--       SPHEROID [
--         "GRS 1980 (EPSG ID 7019)",
--         6378137,
--         298.257222101]],
--     PRIMEM [ "Greenwich", 0.000000 ],
--     UNIT ["Decimal Degree", 0.01745329251994328]],
--   PROJECTION ["VDOT_Lambert"],
--   PARAMETER ["Latitude_Of_Origin", 36],
--   PARAMETER ["Central_Meridian", -79.50000000000000000000000000000000000028],
--   PARAMETER ["Standard_Parallel_1", 37],
--   PARAMETER ["Standard_Parallel_2", 39.5],
--   PARAMETER ["False_Easting", 0],
--   PARAMETER ["False_Northing", 0],
--   UNIT ["Meter", 1]]

6.9.3 垂直CRSの作成

垂直CRSには1つの次元(通常、高さ)のみがあります。そのままでは、垂直CRSの有用性は低いですが、2次元のCRS(測地CRSまたは投影CRS)と結合して複合CRSを作り出すことができます。例6-11に、SRID 5701を使用して垂直CRSを作成する文を示します(SRID 5701はSpatialに同梱されています)。この定義では、既存の(1次元の)座標系(ID 6499、6.7.11項「SDO_COORD_SYS表」を参照)と垂直データ(ID 5101、6.7.22項「SDO_DATUMS表」を参照)を参照します。

例6-11 垂直座標参照系の作成

INSERT INTO MDSYS.SDO_COORD_REF_SYSTEM (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS)
VALUES (
5701,
'Newlyn',
'VERTICAL',
6499,
5101,
NULL,
NULL,
NULL,
NULL,
NULL,
'EPSG',
'FALSE',
NULL,
NULL,
NULL);

垂直CRSでは、うねりのある等ポテンシャル面がいくつか定義される場合があります。そのような面の形状と、楕円体からのそのオフセットは、垂直CRSレコード自体に実際どおりには定義されません。そのかわり、垂直CRSと別のCRSとの間の操作に定義が指定されます。したがって、同じ組合せのジオイド高とWGS84楕円体高間にいくつかの代替操作を定義することができます。たとえば、ジオイドのオフセット・マトリックスにはGEOID90、GEOID93、GEOID96、GEOID99、GEOID03、GEOID06などがあり、これらの各変形に対して別々の操作を定義できます。このような操作の説明は、6.9.6項を参照してください。

6.9.4 複合CRSの作成

複合CRSは、既存の水平(2次元の) CRSと垂直(1次元の) CRSを組み合せたものです。水平CRSには、測地CRSまたは投影CRSを使用できます。例6-12に、SRID 7405を使用して複合CRSを作成する文を示します(Spatialに同梱されています)。この定義では、既存の投影CRSおよび垂直CRS (それぞれ、ID 27700および5701。6.7.9項「SDO_COORD_REF_SYS表」を参照)を参照します。

例6-12 複合座標参照系の作成

INSERT INTO MDSYS.SDO_COORD_REF_SYSTEM (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS)
VALUES (
7405,
'OSGB36 / British National Grid + ODN',
'COMPOUND',
NULL,
NULL,
NULL,
NULL,
27700,
5701,
NULL,
'EPSG',
'FALSE',
NULL,
NULL,
NULL);

6.9.5 地理3D CRSの作成

地理3D CRSは、地理2D CRSと楕円高を結合したものです。例6-13に、SRID 4327を使用して地理3D CRSを作成する文を示します(SRID 4327はSpatialに同梱されています)。この定義は、既存の投影座標系(ID 6401、6.7.11項「SDO_COORD_SYS表」を参照)およびデータ(ID 6326、6.7.22項「SDO_DATUMS表」を参照)を参照します。

例6-13 地理3D座標参照系の作成

INSERT INTO MDSYS.SDO_COORD_REF_SYSTEM (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
GEOG_CRS_DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS,
IS_VALID,
SUPPORTS_SDO_GEOMETRY)
VALUES (
4327,
'WGS 84 (geographic 3D)',
'GEOGRAPHIC3D',
6401,
6326,
6326,
NULL,
NULL,
NULL,
NULL,
'NIMA TR8350.2 January 2000 revision. http://164.214.2.59/GandG/tr8350_2.html',
'EPSG',
'FALSE',
NULL,
NULL,
NULL,
'TRUE',
'TRUE');

6.9.6 変換操作の作成

6.9.2項で、投影CRSを作成するために投影操作を作成する方法について説明しました。正標高に基づく複合CRSを使用する場合にも、同様の要件が起こる可能性があります。ジオイド高と楕円体高の間で変換した方がよい場合があるためです。2つの高さの間のオフセットは一定ではなく、不規則です。

Spatialのデフォルトでは、ID変換を使用して楕円体高と正標高の間の変換が行われます。(異なる楕円体の間の変換は、デフォルトではID変換ではなくデータ変換で行われます。)ID変換は合理的な近似化の方法です。ただし、この方法より正確な変換方法としてEPSGタイプ9635の操作があり、この操作ではオフセット・マトリックスが使用されます。例6-14は、このような操作を宣言しています。

例6-14 変換操作の作成

INSERT INTO MDSYS.SDO_COORD_OPS (
COORD_OP_ID,
COORD_OP_NAME,
COORD_OP_TYPE,
SOURCE_SRID,
TARGET_SRID,
COORD_TFM_VERSION,
COORD_OP_VARIANT,
COORD_OP_METHOD_ID,
UOM_ID_SOURCE_OFFSETS,
UOM_ID_TARGET_OFFSETS,
INFORMATION_SOURCE,
DATA_SOURCE,
SHOW_OPERATION,
IS_LEGACY,
LEGACY_CODE,
REVERSE_OP,
IS_IMPLEMENTED_FORWARD,
IS_IMPLEMENTED_REVERSE)
VALUES (
999998,
'Test operation, based on GEOID03 model, using Hawaii grid',
'TRANSFORMATION',
NULL,
NULL,
NULL,
NULL,
9635,
NULL,
NULL,
'NGS',
'NGS',
1,
'FALSE',
NULL,
1,
1,
1);

INSERT INTO MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
999998,
9635,
8666,
NULL,
'g2003h01.asc',
NULL);

例6-14の2つ目のINSERT文では、ファイル名g2003h01.ascが指定されていますが、オフセット・マトリックスを使用する実際のCLOBコンテンツはまだ指定されていません。NADCONおよびNTv2のマトリックスの場合と同様に、ジオイド・マトリックスをPARAM_VALUE_FILE列にロードする必要があります。紙面および著作権の関係で、これらのマトリックスのほとんどは、Oracleから提供されませんが、通常、Webからダウンロードできます。該当する政府機関のWebサイトがよい情報源で、ファイル名(この例のg2003h01など)を使用して検索できます。これらのファイルのうち一部は、バイナリ形式(.gsbなど)とASCII形式(.gsaまたは.ascなど)の両方が用意されていますが、Spatialで使用できるのはASCII形式のみです。既存のEPSG操作には、標準で使用されるファイル名が含まれます。

例6-15は、このような一連のマトリックスをロードするスクリプトです。これは、指定した物理ファイル(ntv20.gsaなど)が、公式なファイル名参照(NTV2_0.GSBなど)に基づいて、データベースCLOBにロードされます。

例6-15 オフセット・マトリックスのロード

DECLARE
ORCL_HOME_DIR VARCHAR2(128);
ORCL_WORK_DIR VARCHAR2(128);
Src_loc       BFILE;
Dest_loc      CLOB;
CURSOR PARAM_FILES IS
SELECT
COORD_OP_ID,
PARAMETER_ID,
PARAM_VALUE_FILE_REF
FROM
MDSYS.SDO_COORD_OP_PARAM_VALS
WHERE
PARAMETER_ID IN (8656, 8657, 8658, 8666);
PARAM_FILE PARAM_FILES%ROWTYPE;
ACTUAL_FILE_NAME VARCHAR2(128);
platform NUMBER;
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY work_dir AS ''define_your_source_directory_here''';

FOR PARAM_FILE IN PARAM_FILES LOOP
CASE UPPER(PARAM_FILE.PARAM_VALUE_FILE_REF)
/* NTv2, fill in your files here */
WHEN 'NTV2_0.GSB'   THEN ACTUAL_FILE_NAME := 'ntv20.gsa';
/* GEOID03, fill in your files here */
WHEN 'G2003H01.ASC' THEN ACTUAL_FILE_NAME := 'g2003h01.asc';
ELSE                     ACTUAL_FILE_NAME := NULL;
END CASE;

IF(NOT (ACTUAL_FILE_NAME IS NULL)) THEN
BEGIN
dbms_output.put_line('Loading file ' || actual_file_name || '...');
Src_loc := BFILENAME('WORK_DIR', ACTUAL_FILE_NAME);
DBMS_LOB.OPEN(Src_loc, DBMS_LOB.LOB_READONLY);
END;

UPDATE
MDSYS.SDO_COORD_OP_PARAM_VALS
SET
PARAM_VALUE_FILE = EMPTY_CLOB()
WHERE
COORD_OP_ID = PARAM_FILE.COORD_OP_ID AND
PARAMETER_ID = PARAM_FILE.PARAMETER_ID
RETURNING
PARAM_VALUE_FILE INTO Dest_loc;

DBMS_LOB.OPEN(Dest_loc, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.LOADFROMFILE(Dest_loc, Src_loc, DBMS_LOB.LOBMAXSIZE);
DBMS_LOB.CLOSE(Dest_loc);
DBMS_LOB.CLOSE(Src_loc);
DBMS_LOB.FILECLOSE(Src_loc);
END IF;
END LOOP;
END;
/

6.9.7 British Grid Transformation OSTN02/OSGM02 (EPSG Method 9633)の使用

投影座標参照系でBritish Grid Transformation OSTN02/OSGM02 (EPSG method 9633)を使用するには、最初にSDO_COORD_OP_PARAM_VALS表(6.7.5項を参照)のPARAM_VALUE_FILE列(CLOB型)に変更されたバージョンのOSTN02_OSGM02_GB.txt格子ファイルを挿入する必要があります。OSTN02_OSGM02_GB.txtファイルには、EPSG変換メソッド9633の基になっているオフセット・マトリックスが含まれています。

次に手順を示します。

1. ファイルhttp://www.ordnancesurvey.co.uk/docs/gps/ostn02-osgm02-files.zipをダウンロードします。

2. この.zipファイルからOSTN02_OSGM02_GB.txtというファイルを展開します。

3. OSTN02_OSGM02_GB.txtのコピーを編集して、現在のファイルの最初の行の前に次の行を挿入します。

SDO Header
x: 0.0 - 700000.0
y: 0.0 - 1250000.0
x-intervals: 1000.0
y-intervals: 1000.0
End of SDO Header

編集操作後のファイルの内容は次のようになります。

SDO Header
x: 0.0 - 700000.0
y: 0.0 - 1250000.0
x-intervals: 1000.0
y-intervals: 1000.0
End of SDO Header
1,0,0,0.000,0.000,0.000,0
2,1000,0,0.000,0.000,0.000,0
3,2000,0,0.000,0.000,0.000,0
4,3000,0,0.000,0.000,0.000,0
5,4000,0,0.000,0.000,0.000,0
. . .
876949,698000,1250000,0.000,0.000,0.000,0
876950,699000,1250000,0.000,0.000,0.000,0
876951,700000,1250000,0.000,0.000,0.000,0

4. 異なる名前(たとえば、my_OSTN02_OSGM02_GB.txt)を使用して、編集したファイルを保存します。

5. SDO_COORD_OP_PARAM_VALS表で、PARAM_VALUE_FILE_REF値にOSTN02_OSGM02_GB.TXTを持つEPSG method 9633の各操作に対して、保存したファイルの内容(たとえば、my_OSTN02_OSGM02_GB.txtの内容)になるようにPARAM_VALUE_FILE列を更新します。例6-16に示すようなコーディングを使用できます。

例6-16 British Grid Transformation OSTN02/OSGM02 (EPSG Method 9633)の使用

DECLARE
ORCL_HOME_DIR VARCHAR2(128);
ORCL_WORK_DIR VARCHAR2(128);
Src_loc       BFILE;
Dest_loc      CLOB;
CURSOR PARAM_FILES IS
SELECT
COORD_OP_ID,
PARAMETER_ID,
PARAM_VALUE_FILE_REF
FROM
MDSYS.SDO_COORD_OP_PARAM_VALS
WHERE
PARAMETER_ID IN (8656, 8657, 8658, 8664, 8666)
order by
COORD_OP_ID,
PARAMETER_ID;
PARAM_FILE PARAM_FILES%ROWTYPE;
ACTUAL_FILE_NAME VARCHAR2(128);
platform NUMBER;
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY work_dir AS ''' || system.geor_dir || '''';

FOR PARAM_FILE IN PARAM_FILES LOOP
CASE UPPER(PARAM_FILE.PARAM_VALUE_FILE_REF)
/* NTv2 */
WHEN 'NTV2_0.GSB'   THEN ACTUAL_FILE_NAME := 'ntv20.gsa';
/* GEOID03 */
WHEN 'G2003H01.ASC' THEN ACTUAL_FILE_NAME := 'g2003h01.asc';
/* British Ordnance Survey (9633) */
WHEN 'OSTN02_OSGM02_GB.TXT'
THEN ACTUAL_FILE_NAME := 'my_OSTN02_OSGM02_GB.txt';
ELSE                ACTUAL_FILE_NAME := NULL;
END CASE;

IF(NOT (ACTUAL_FILE_NAME IS NULL)) THEN
BEGIN
dbms_output.put_line('Loading file ' || actual_file_name || '...');
Src_loc := BFILENAME('WORK_DIR', ACTUAL_FILE_NAME);
DBMS_LOB.OPEN(Src_loc, DBMS_LOB.LOB_READONLY);
END;

UPDATE
MDSYS.SDO_COORD_OP_PARAM_VALS
SET
PARAM_VALUE_FILE = EMPTY_CLOB()
WHERE
COORD_OP_ID = PARAM_FILE.COORD_OP_ID AND
PARAMETER_ID = PARAM_FILE.PARAMETER_ID
RETURNING
PARAM_VALUE_FILE INTO Dest_loc;

DBMS_LOB.OPEN(Dest_loc, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.LOADFROMFILE(Dest_loc, Src_loc, DBMS_LOB.LOBMAXSIZE);
DBMS_LOB.CLOSE(Dest_loc);
DBMS_LOB.CLOSE(Src_loc);
DBMS_LOB.FILECLOSE(Src_loc);
END IF;
END LOOP;
END;
/

格子ファイルにヘッダー情報を追加する必要があるのは、British Grid Transformation OSTN02/OSGM02の場合のみであることに注意してください。NADCON、NTv2またはVERTCONマトリックスには様々な形式のヘッダーがすでに含まれているため、追加する必要はありません。

関連情報については、次も参照してください。

- 6.9.2項「投影CRSの作成」

- 6.9.6項「変換操作の作成」

6.10 座標系サポートでの注意事項および制限事項

今回のリリースのOracle Spatialでは、次の注意事項および制限事項が座標系のサポートに適用されます。

測地データを使用する場合の考慮点、ガイドラインおよび制限事項については、6.2項を参照してください。

6.10.1 演算子およびファンクションでの座標系が異なるジオメトリの使用

入力パラメータとして2つのジオメトリを取る空間演算子(第19章を参照)では、それらのジオメトリが異なる座標系に基づいている場合、操作が実行される前に、問合せウィンドウ(2つ目のジオメトリ)が1つ目のジオメトリの座標系に変換されます。この変換は、Spatialが実行する一時内部操作であり、格納されたすべての問合せウィンドウ・ジオメトリには影響を及ぼしません。

入力パラメータとして2つのジオメトリを取るSDO_GEOMパッケージ・ジオメトリ・ファンクション(第24章を参照)では、両方のジオメトリが同じ座標系に基づいている必要があります。

6.10.2 測地データでサポートされない3D LRSファンクション

今回のリリースでは、LRSファンクションの3D形式(7.4項を参照)は測地データでサポートされていません。

6.10.3 測地データでの近似処理によってサポートされるファンクション

今回のリリースでは、次のファンクションが近似処理によって測地データでサポートされています。

- SDO_GEOM.SDO_BUFFER

- SDO_GEOM.SDO_CENTROID

- SDO_GEOM.SDO_CONVEXHULL

これらのファンクションを測地座標を含むデータに対して使用した場合、暗黙的に生成されたローカル交差平面デカルト座標系で内部操作が実行され、その結果が測地座標系に変換されます。SDO_GEOM.SDO_BUFFERでは、生成された円弧が元の形式に戻される前に線セグメントによって近似処理されます。

6.10.4 unknown CRSおよびNaC座標参照系

次の座標参照系は、Oracle内部と特殊用途で使用するためのものです。

- unknown CRS(SRID 999999)は、座標系が不明であることを意味し、その空間は測地の場合もデカルトの場合もあります。NULL座標参照系は、これとは異なり、デカルト空間を持つ不明な座標系を示します。

- NaC (SRID 999998)は、Not-a-CRS (非CRS)を意味します。この名前は、JavaのNaN (Not-a-Number、非数値)を参考にして名付けられました。これは、非空間ジオメトリで使用することを意図しています。

次の制限は、unknown CRSおよびNaC座標参照系をベースとするジオメトリに適用されます。

- これらのジオメトリに対して座標系変換を実行することはできません。

- 座標系を必要とする操作をこれらのジオメトリに対して実行すると、NULL値が戻ります。このような操作には、ジオメトリの面積または外周の取得、バッファの作成、円弧の稠密化、集計重心の計算などがあります。

6.11 U.S. National Gridのサポート

U.S. National Gridは、1つの英数字座標(たとえば、18SUJ2348316806479498)を使用して点の座標を表現します。これは、Oracle SpatialやEPSGのように数字座標を使用して点の位置を表す方法とは対照的な方法です。U.S. National Gridの説明は、http://www.ngs.noaa.gov/TOOLS/usng.htmlを参照してください。

SpatialでU.S. National Gridをサポートする場合、SDO_GEOMETRY型は使用できません(この型は、数字座標を基準にしています)。かわりに、U.S. National Grid形式の点は、1つのVARCHAR2型の文字列として表現されます。SDO_CSパッケージ(第21章を参照)には、SDO_GEOMETRY形式とU.S. National Grid形式の間で変換を行うために、次のファンクションが用意されています。

- SDO_CS.FROM_USNG

- SDO_CS.TO_USNG

6.12 Google Mapsに関する考慮事項

Google Mapsでは、Oracle Spatialによって使用される楕円体の計算ではなく、その投影で球体の計算を使用します。この違いによって、Oracle Spatialの楕円体投影に基づいた地図でGoogle Mapsに基づいた地図をオーバーレイする場合など、アプリケーションで不整合が発生する場合があります。たとえば、Oracle Spatialでの楕円体SRID 8307から球体SRID 3785への変換では、デフォルトで異なる楕円体の形状が考慮されますが、Google Mapsでは楕円体の形状は考慮されません。

Oracle SpatialでGoogle Mapsの結果に対応する必要がある場合は、次のオプションを検討してください。

- 楕円体SRID 8307ではなく球体SRID 4055を使用する。これは最も簡単な方法ですが、(サード・パーティのツールなど)SRID 8307に基づいたデータを球体として扱う必要がある場合に、別のオプションを使用する必要があります。

- SRID 3785ではなくSRID 3857を使用する。SRID 3857を使用すると、EPSGルールを宣言したり、Google互換の結果を生成するためにユースケース名USE_SPHERICALを指定する必要がないため、次の2つのオプションよりも便利です。

- 楕円体座標系と球体座標系の間のEPSGルールを宣言する。たとえば、次の例のように、SRID 8307と3785の間のEPSGルールを宣言し、SRID 8307の楕円体の形状を無視します。

CALL sdo_cs.create_pref_concatenated_op(
302,
'CONCATENATED OPERATION',
TFM_PLAN(SDO_TFM_CHAIN(8307, 1000000000, 4055, 19847, 3785)),
NULL);

この例では、操作1000000000は無操作を表すため、楕円体と球体の間のデータ変換は無視されます。

この方法では、必要なSRIDペア(楕円体と球体)ごとにルールを宣言する必要があります。

- 次の例のように、SDO_CS.TRANSFORMファンクションまたはSDO_CS.TRANSFORM_LAYERプロシージャを使用して、ユースケース名USE_SPHERICALを指定する。

SELECT
SDO_CS.TRANSFORM(
sdo_geometry(
2001,
4326,
sdo_point_type(1, 1, null),
null,
null),
'USE_SPHERICAL',
3785)
FROM DUAL;

CALL SDO_CS.TRANSFORM_LAYER(
'source_geoms',
'GEOMETRY',
'GEO_CS_3785_SPHERICAL',
'USE_SPHERICAL',
3785);

use_caseパラメータ値にUSE_SPHERICALを指定すると、変換はデフォルトで楕円体の計算ではなく球体の計算を使用するため、球体の計算を使用するGoogle Mapsおよびその他のサード・パーティのツールに対応できます。

この方法('USE_SPHERICAL'を指定する)を使用したうえ、2つの指定されたSRID間の変換で楕円体の計算を使用する必要があるEPSGルールも宣言した場合は、宣言したEPSGルールが優先され、それら2つのSRID間の変換には楕円体の計算が使用されます。

6.13 座標系変換の例

この項では、座標系変換ファンクションおよびプロシージャを使用する簡単な例を示します。この例では、この章で説明する概要および第21章で説明するファンクションを使用します。

例6-17では、主に、2.1項で使用したジオメトリ・データ(cola markets)を使用します(ただし、SDO_SRIDの値はNULLではなく8307です)。つまり、ジオメトリは、SRID値が8307でwell-known nameが「Longitude / Latitude (WGS 84)」である座標系を使用するように定義されます。これは、最も一般的な座標系であり、Global Positioning System (GPS)デバイスで使用されます。ジオメトリは、SRID値が8199でwell-known nameが「Longitude / Latitude (Arc 1950)」の座標系を使用して変換されます。

例6-17では、2.1項の図2-1に示すジオメトリを使用します(ただし、円弧は測地座標系でサポートされていないため、cola_dは円弧ではなく矩形(ここでは、正方形)です)。

例6-17では、次の処理を行います。

- 空間データを格納するための表(COLA_MARKETS_CS)を作成する

- SDO_SRID値8307を使用して、4つの対象領域(cola_a、cola_b、cola_c、cola_d)の行を挿入する

- SDO_SRID値8307を使用して、USER_SDO_GEOM_METADATAビューを更新し、その領域の次元を反映する

- 空間索引(COLA_SPATIAL_IDX_CS)を作成する

- (単一ジオメトリおよびレイヤー全体の)変換操作を実行する

例6-17のSELECT文の出力結果を例6-18に示します。

例6-17 座標系変換の簡単な例

-- Create a table for cola (soft drink) markets in a
-- given geography (such as city or state).

CREATE TABLE cola_markets_cs (
mkt_id NUMBER PRIMARY KEY,
name VARCHAR2(32),
shape SDO_GEOMETRY);

-- The next INSERT statement creates an area of interest for
-- Cola A. This area happens to be a rectangle.
-- The area could represent any user-defined criterion: for
-- example, where Cola A is the preferred drink, where
-- Cola A is under competitive pressure, where Cola A
-- has strong growth potential, and so on.

INSERT INTO cola_markets_cs VALUES(
1,
'cola_a',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
8307,  -- SRID for 'Longitude / Latitude (WGS 84)' coordinate system
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- polygon
SDO_ORDINATE_ARRAY(1,1, 5,1, 5,7, 1,7, 1,1) -- All vertices must
-- be defined for rectangle with geodetic data.
)
);

-- The next two INSERT statements create areas of interest for
-- Cola B and Cola C. These areas are simple polygons (but not
-- rectangles).

INSERT INTO cola_markets_cs VALUES(
2,
'cola_b',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
8307,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
)
);

INSERT INTO cola_markets_cs VALUES(
3,
'cola_c',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
8307,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), --one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)
)
);

-- Insert a rectangle (here, square) instead of a circle as in the original,
-- because arcs are not supported with geodetic coordinate systems.
INSERT INTO cola_markets_cs VALUES(
4,
'cola_d',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
8307,  -- SRID for 'Longitude / Latitude (WGS 84)' coordinate system
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- polygon
SDO_ORDINATE_ARRAY(10,9, 11,9, 11,10, 10,10, 10,9) -- All vertices must
-- be defined for rectangle with geodetic data.
)
);

---------------------------------------------------------------------------
-- UPDATE METADATA VIEW --
---------------------------------------------------------------------------
-- Update the USER_SDO_GEOM_METADATA view. This is required
-- before the Spatial index can be created. Do this only once for each
-- layer (table-column combination; here: cola_markets_cs and shape).

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'cola_markets_cs',
'shape',
SDO_DIM_ARRAY(
SDO_DIM_ELEMENT('Longitude', -180, 180, 10),  -- 10 meters tolerance
SDO_DIM_ELEMENT('Latitude', -90, 90, 10)  -- 10 meters tolerance
),
8307   -- SRID for 'Longitude / Latitude (WGS 84)' coordinate system
);

-------------------------------------------------------------------
-- CREATE THE SPATIAL INDEX --
-------------------------------------------------------------------
CREATE INDEX cola_spatial_idx_cs
ON cola_markets_cs(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

-------------------------------------------------------------------
-- TEST COORDINATE SYSTEM TRANSFORMATION --
-------------------------------------------------------------------

-- Return the transformation of cola_c using to_srid 8199
-- ('Longitude / Latitude (Arc 1950)')
SELECT c.name, SDO_CS.TRANSFORM(c.shape, 8199)
FROM cola_markets_cs c WHERE c.name = 'cola_c';

-- Same as preceding, but using to_srname parameter.
SELECT c.name, SDO_CS.TRANSFORM(c.shape, 'Longitude / Latitude (Arc 1950)')
FROM cola_markets_cs c  WHERE c.name = 'cola_c';

-- Transform the entire SHAPE layer and put results in the table
-- named cola_markets_cs_8199, which the procedure will create.
CALL SDO_CS.TRANSFORM_LAYER('COLA_MARKETS_CS','SHAPE','COLA_MARKETS_CS_8199',8199);

-- Select all from the old (existing) table.
SELECT * from cola_markets_cs;

-- Select all from the new (layer transformed) table.
SELECT * from cola_markets_cs_8199;

-- Show metadata for the new (layer transformed) table.
DESCRIBE cola_markets_cs_8199;

-- Use a geodetic MBR with SDO_FILTER.
SELECT c.name FROM cola_markets_cs c WHERE
SDO_FILTER(c.shape,
SDO_GEOMETRY(
2003,
8307,    -- SRID for WGS 84 longitude/latitude
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(6,5, 10,10))
) = 'TRUE';

例6-18に、例6-17のSELECT文の出力結果を示します。元のジオメトリ(SRID 8307)の座標と変換された座標(SRID 8199)の違いに注目してください。たとえば、cola_aについては、(1, 1, 5, 1, 5, 7, 1, 7, 1, 1)と(1.00078604, 1.00274579, 5.00069354, 1.00274488, 5.0006986, 7.00323528, 1.00079179, 7.00324162, 1.00078604, 1.00274579)です。

例6-18 座標系変換の例でのSELECT文の出力

SQL> -- Return the transformation of cola_c using to_srid 8199
SQL> -- ('Longitude / Latitude (Arc 1950)')
SQL> SELECT c.name, SDO_CS.TRANSFORM(c.shape, 8199)
2    FROM cola_markets_cs c WHERE c.name = 'cola_c';

NAME
--------------------------------
SDO_CS.TRANSFORM(C.SHAPE,8199)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM
--------------------------------------------------------------------------------
cola_c
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3.00074114, 3.00291482, 6.00067068, 3.00291287, 6.0006723, 5.00307625, 4.0007
1961, 5.00307838, 3.00074114, 3.00291482))

SQL>
SQL> -- Same as preceding, but using to_srname parameter.
SQL> SELECT c.name, SDO_CS.TRANSFORM(c.shape, 'Longitude / Latitude (Arc 1950)')
2    FROM cola_markets_cs c  WHERE c.name = 'cola_c';

NAME
--------------------------------
SDO_CS.TRANSFORM(C.SHAPE,'LONGITUDE/LATITUDE(ARC1950)')(SDO_GTYPE, SDO_SRID, SDO
--------------------------------------------------------------------------------
cola_c
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3.00074114, 3.00291482, 6.00067068, 3.00291287, 6.0006723, 5.00307625, 4.0007
1961, 5.00307838, 3.00074114, 3.00291482))

SQL>
SQL> -- Transform the entire SHAPE layer and put results in the table
SQL> -- named cola_markets_cs_8199, which the procedure will create.
SQL> CALL SDO_CS.TRANSFORM_LAYER('COLA_MARKETS_CS','SHAPE','COLA_MARKETS_CS_8199',8199);

Call completed.

SQL>
SQL> -- Select all from the old (existing) table.
SQL> SELECT * from cola_markets_cs;

MKT_ID NAME
---------- --------------------------------
SHAPE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
1 cola_a
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(1, 1, 5, 1, 5, 7, 1, 7, 1, 1))

2 cola_b
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1))

3 cola_c

MKT_ID NAME
---------- --------------------------------
SHAPE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3, 3, 6, 3, 6, 5, 4, 5, 3, 3))

4 cola_d
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(10, 9, 11, 9, 11, 10, 10, 10, 10, 9))

SQL>
SQL> -- Select all from the new (layer transformed) table.
SQL> SELECT * from cola_markets_cs_8199;

SDO_ROWID
------------------
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
AAABZzAABAAAOa6AAA
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(1.00078604, 1.00274579, 5.00069354, 1.00274488, 5.0006986, 7.00323528, 1.0007
9179, 7.00324162, 1.00078604, 1.00274579))

AAABZzAABAAAOa6AAB
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5.00069354, 1.00274488, 8.00062191, 1.00274427, 8.00062522, 6.00315345, 5.000
6986, 7.00323528, 5.00069354, 1.00274488))

SDO_ROWID
------------------
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------

AAABZzAABAAAOa6AAC
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3.00074114, 3.00291482, 6.00067068, 3.00291287, 6.0006723, 5.00307625, 4.0007
1961, 5.00307838, 3.00074114, 3.00291482))

AAABZzAABAAAOa6AAD
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(10.0005802, 9.00337775, 11.0005553, 9.00337621, 11.0005569, 10.0034478, 10.00

SDO_ROWID
------------------
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
05819, 10.0034495, 10.0005802, 9.00337775))

SQL>
SQL> -- Show metadata for the new (layer transformed) table.
SQL> DESCRIBE cola_markets_cs_8199;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
SDO_ROWID                                          ROWID
GEOMETRY                                           SDO_GEOMETRY

SQL>
SQL> -- Use a geodetic MBR with SDO_FILTER
SQL> SELECT c.name FROM cola_markets_cs c WHERE
2     SDO_FILTER(c.shape,
3         SDO_GEOMETRY(
4             2003,
5             8307,    -- SRID for WGS 84 longitude/latitude
6             NULL,
7             SDO_ELEM_INFO_ARRAY(1,1003,3),
8             SDO_ORDINATE_ARRAY(6,5, 10,10))
9         ) = 'TRUE';

NAME
--------------------------------
cola_c
cola_b
cola_d

7 線形参照システム

線形参照は、属性またはイベントと線形フィーチャの位置または一部分の関連付けを自然かつ有効に実現します。線形参照は、高速道路、鉄道、公共輸送路などの輸送アプリケーション、およびガソリンや石油の流通ルートなどの公共事業アプリケーションで広く使用されています。線形参照の主なメリットは、2つのパラメータ(経度/緯度またはx/yで表すデカルト領域)のかわりに、1つのパラメータ(通常メジャーという)によって、線形フィーチャに属性およびイベントを位置付けできることです。線形フィーチャでは、開始位置および終了位置を明示的に格納しなくても、線形フィーチャに沿ってそれらの位置を指定することによって、線形フィーチャを動的に参照および作成できます。

Oracle Spatialの線形参照システム(LRS)Application Program Interface(API)は、地図製作レベルでのLRS機能をサーバー側に提供します。線形メジャー情報は、Oracle Spatialのジオメトリ構造体に直接統合されます。Oracle SpatialのLRS APIは、動的セグメントをサポートし、すべての座標系の線形参照メソッドおよびモデルに対し、サード・パーティまたは中間層アプリケーション開発の基礎として機能します。

7.7項にLRSの例を示します。ただし、この例の示す概要を理解するためにも、この章のその他の項をはじめにお読みください。

LRSファンクションおよびLRSプロシージャのリファレンス情報については、第25章を参照してください。

この章の内容は次のとおりです。

- 7.1項「用語および概念」

- 7.2項「LRSデータ・モデル」

- 7.3項「LRSデータの索引付け」

- 7.4項「LRSファンクションの3D形式」

- 7.5項「LRSの処理」

- 7.6項「LRSファンクションの許容差」

- 7.7項「LRSファンクションの例」

7.1 用語および概念

この項では、Oracle Spatialでサポートされる線形参照に関連する重要な用語および概念について説明します。

7.1.1 ジオメトリ・セグメント(LRSセグメント)

ジオメトリ・セグメントは、Oracle SpatialにおけるLRSの基本的な要素です。ジオメトリ・セグメントは、次のいずれかのジオメトリです。

- 線ストリング: 順序付けされ、分岐のない連続するジオメトリ(単純な道路など)

- 複数線ストリング: 非接続線ストリング(湖やバイパス道路によって途切れた高速道路など)

- ポリゴン(開始および終了が同一の点である競技トラックや観光ツアー・ルートなど)

ジオメトリ・セグメントは、開始点および終了点の開始メジャーおよび終了メジャーを含む必要があります。また、ジオメトリ・セグメント上の対象点のメジャー(高速道路の出口など)も割り当てられます。これらのメジャーは、ユーザーによって割り当てられるか、または既存のジオメトリ・セグメントから導出されます。図7-1に、4つの線セグメントと1つの円弧で構成されるジオメトリ・セグメントの例を示します。ジオメトリ・セグメント上の点は、3つの数値(x, y, m)で表します。xおよびyは位置を示し、mはメジャーを示します(図7-1で下線が付いた値がメジャー値を表します)。

図7-1 ジオメトリ・セグメント

7.1.2 形状点

形状点は、LRSセグメント作成時に指定される点で、メジャー情報が割り当てられます。Oracle Spatialでは、線セグメントは開始点および終了点で表され、円弧は3つの点(開始点、中間点および終了点)で表されます。形状点として3つの点を指定する必要がありますが、この3つの点にメジャー情報を格納する場合は、形状点としてその他の点を指定することもできます(たとえば、高速道路の直線部分の中間にある出口などです)。

形状点は、セグメント方向(たとえば、回転やカーブなど)を示す場合やメジャー情報が格納さる対象点を識別する場合に使用できます。

形状点は、LRSの距離標または参照標とは直接関連しませんが、内部的な参照点として使用されます。形状点のメジャー情報は、SDO_LRS.DEFINE_GEOM_SEGMENTプロシージャ(第25章を参照)を使用したLRSセグメントの定義時に自動的に移入されます。

7.1.3 ジオメトリ・セグメント方向

ジオメトリ・セグメント方向は、ジオメトリ・セグメントの開始点から終了点で示されます。ジオメトリ・セグメント方向は、ジオメトリの定義における頂点の順序(開始点から終了点)によって決定されます。ジオメトリ・セグメント上の点のメジャーは、常にジオメトリ・セグメント方向に増減します。

7.1.4 メジャー(線形メジャー)

ジオメトリ・セグメント上の点のメジャーは、ジオメトリ・セグメントの開始点(値が増加する場合)または終了点(値が減少する場合)から測定された点までの(メジャー次元の)線形距離です。メジャー情報は、それらの距離と同じ位取りでなくてもかまいません。ただし、メジャーと距離の線形マッピング関係は、常に保たれる必要があります。

LRSファンクションは、メジャーのかわりにオフセットを使用して、線形フィーチャに沿って測定した距離を表す場合もあります。線形参照システムでは、Oracle SpatialのLRSがメジャーとして参照するものを表すためにオフセットを使用する場合もありますが、Oracle Spatialでは、オフセットはメジャーとは別の意味を持ちます。詳細は、7.1.5項を参照してください。

7.1.5 オフセット

ジオメトリ・セグメント上の点のオフセットとは、点とジオメトリ・セグメント間の垂直距離です。点がセグメント方向の左側にある場合、オフセット値は正、右側にある場合は負です。また、点がジオメトリ・セグメント上にある場合、オフセットは0(ゼロ)です。

オフセットの測定単位は、ジオメトリ・セグメントに関連付けられた座標系の測定単位と同じです。測地データの場合、デフォルトの測定単位はmです。

図7-2に、点がメジャーおよびオフセット情報とともにジオメトリ・セグメント上にどのように位置付けられるかを示します。オフセットをメジャーとともに割り当てることによって、ジオメトリ・セグメント上の点のみでなく、ジオメトリ・セグメントに垂直な点を位置付けることも可能です。

図7-2 メジャーおよびオフセットとセグメント上の点

7.1.6 メジャーの移入

ジオメトリ・セグメントにまだ割り当てられていないメジャーがある場合、距離分布に基づいて自動的に移入されます。これは、不明なメジャー(Oracle SpatialではNULL)を持つジオメトリ・セグメントに対するLRS処理の前に行われます。ジオメトリ・セグメントにLRS処理を行うと、ジオメトリ・セグメントに関連付けられたメジャー情報が戻されます。ジオメトリ・セグメント上の点のメジャーは、前後のメジャーまたは位置間の線形マッピング関係に基づいて取得できます。詳細は、図7-3および図7-4を参照してください。

図7-3 メジャー、距離およびそのマッピングの関係

図7-4 ジオメトリ・セグメントのメジャーの移入

メジャーは、割り当てられたメジャーの間で均等に配置されます。ただし、ジオメトリ・セグメント上の対象点に対して割り当てられるメジャーは、均等でなくてもかまいません。これによって、エラーの蓄積や不正確なデータ・ソースの問題を排除できます。

また、割り当てられたメジャーは、実際の距離を反映する必要はなく(たとえば、見積り運転時間を反映できます)、メジャーの有効範囲内の有効な値を使用できます。図7-5に、割り当てられたメジャーの値が不均等で、距離が様々な場合のメジャーの移入の例を示します。

図7-5 不均等に割り当てられたメジャーでのメジャーの移入

メジャーは、必ずセグメント方向に増分的に移入されます。これによって、以降のLRS処理のパフォーマンスが向上します。

7.1.7 ジオメトリ・セグメントのメジャー範囲

ジオメトリ・セグメントの開始メジャーおよび終了メジャーは、ジオメトリ・セグメントの線形メジャー範囲を定義します。ジオメトリ・セグメントの有効なLRSメジャーは、線形メジャー範囲内で指定する必要があります。

7.1.8 投影

ジオメトリ・セグメント上の点の投影は、ジオメトリ・セグメント上に指定した点から最短距離にある点です。その点のメジャー情報も点ジオメトリに戻されます。

7.1.9 LRS点

LRS点は、線形メジャー情報を持つジオメトリ・セグメント上の点です。有効なLRS点は、メジャー情報を持つ点ジオメトリです。

すべてのLRS点データは、SDO_ELEM_INFO_ARRAYおよびSDO_ORDINATE_ARRAYに格納する必要があり、その点のSDO_GEOMETRY定義のSDO_POINTフィールドには格納できません。

7.1.10 線形フィーチャ

線形フィーチャは、線形セグメントの論理セットとして処理できる空間オブジェクトです。輸送アプリケーションにおける高速道路や、公共事業アプリケーションにおける流通ルートなどが、線形フィーチャの例です。線形フィーチャ、ジオメトリ・セグメントおよびLRS点の関係を、図7-6に示します。この図では、1つの線形フィーチャが3つのジオメトリ・セグメントで構成され、3つのLRS点は最初のセグメントに示されています。

図7-6 線形フィーチャ、ジオメトリ・セグメントおよびLRS点

7.1.11 複数線ストリングおよび穴があるポリゴンのメジャー

LRSジオメトリが複数線ストリングまたは穴のあるポリゴンの場合、SDO_LRS.DEFINE_GEOM_SEGMENTプロシージャおよびSDO_LRS.CONVERT_TO_LRS_GEOMファンクションは、あるセグメントの終了点と、その次のセグメントの(切れ目によって分離されている)開始点に、デフォルトで同じメジャー値を割り当てます(ただし、後で各点に異なる値を割り当てることは可能です)。したがって、このようなジオメトリの場合、デフォルトでは、異なるセグメントに同じメジャー値が割り当てられることになります。このような場合、LRSサブプログラムは、指定されたメジャーを持つ最初の点を選択します(ただし、その選択によってジオメトリが無効になる場合は除きます)。

たとえば、複数線ストリングLRSジオメトリの場合に、最初のセグメントのメジャーが0から100で、2番目のセグメントのメジャーが100から150とします。SDO_LRS.LOCATE_PTファンクションを使用してメジャーが100の点を検出する場合、戻される点は最初のセグメントのメジャー100の点になります。SDO_LRS.CLIP_GEOM_SEGMENT、SDO_LRS.DYNAMIC_SEGMENTまたはSDO_LRS.OFFSET_GEOM_SEGMENTファンクションを使用してメジャー値が75から125のジオメトリ・オブジェクトを戻す場合は、2つのセグメントで構成される複数線ストリング・ジオメトリが戻されます。同じファンクションを使用してメジャー値が100から125のジオメトリ・オブジェクトを戻す場合は、最初のセグメントのメジャー値100の点は無視され、結果は、メジャー値が100から125の2番目のセグメントに沿った線ストリングになります。

7.2 LRSデータ・モデル

Oracle SpatialのLRSデータ・モデルは、メジャー情報を点レベルでジオメトリ表現に取り込みます。メジャー情報は、Oracle Spatialモデルに直接統合されます。そのためには、Oracle Spatialのメタデータにメジャー次元を追加する必要があります。

Oracle SpatialのLRSサポートは、Spatialのメタデータおよびデータ(ジオメトリ)に影響します。例7-1に、メジャー次元がSpatialのメタデータで2次元ジオメトリにどのように追加されるかを示します。メジャー次元は、空間オブジェクト定義におけるSDO_DIM_ARRAYの最後の要素(例7-1の太字を参照)である必要があります。

例7-1 SpatialメタデータへのLRSメジャー次元の取込み

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES(
'LRS_ROUTES',
'GEOMETRY',
SDO_DIM_ARRAY (
SDO_DIM_ELEMENT('X', 0, 20, 0.005),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005),
SDO_DIM_ELEMENT('M', 0, 100, 0.005)),
NULL);

新しいメジャー次元を追加すると、ジオメトリ・セグメントやLRS点などのメジャー情報を持つジオメトリを表現することができます。図7-7に、3つの線セグメントを持つジオメトリ・セグメントの作成例を示します。

図7-7 ジオメトリ・セグメントの作成

図7-7では、ジオメトリ・セグメントは次のように定義されています(メジャー値には、下線が付いています)。

SDO_GEOMETRY(3302, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(5,10,0, 20,5,NULL, 35,10,NULL, 55,10,100))

ジオメトリ・セグメントが定義されると、既存のジオメトリ・セグメントから開始および終了メジャーが定義または導出される必要があります。ジオメトリ・セグメント上にあるすべての形状点に、符号なしのメジャーがある場合は、自動的に移入されます。

LRSファンクションで使用されるすべての点ジオメトリのSDO_GTYPEは3301になります。

7.3 LRSデータの索引付け

LRSデータに4次元(3次元およびM次元)があり、メジャー次元以外の3次元に索引付けする必要がある場合は、空間Rツリー索引を使用してデータを索引付けし、CREATE INDEX文にPARAMETERS('sdo_indx_dims=3')を指定して、確実に最初の3次元が索引付けされるようにする必要があります。ただし、sdo_indx_dimsに3以上の値を指定すると、3次元すべてを考慮する必要があるので、1.11項でリストされる演算子のみが、索引付けされたジオメトリに対して使用できます。第19章で説明する他の演算子は使用できません。(sdo_indx_dimsキーワードのデフォルト値は2です。この値を使用すると、最初の2次元のみが索引付けされます。)たとえば、次元がX、Y、ZおよびMの場合に、X、YおよびZの各次元を索引付けし、メジャー(M)次元を索引付けしないようにするには、sdo_indx_dims=3を指定します。追加の処理オーバーヘッドが発生し、メリットがないため、メジャー次元は空間索引に含めないでください。

CREATE INDEX文およびそのパラメータとキーワードの詳細は、第18章を参照してください。

7.4 LRSファンクションの3D形式

ほとんどのLRSファンクションは、末尾に_3Dの付いた形式(DEFINE_GEOM_SEGMENT_3D、CLIP_GEOM_SEGMENT_3D、FIND_MEASURE_3D、LOCATE_PT_3Dなど)と付かない形式を持ちます。3D形式を持つファンクションについては、第25章の各ファンクションの「使用上の注意」にその旨を示します。

3D形式は、単一線ストリングおよび複数線ストリングのジオメトリでのみサポートされます。3D形式は、ジオメトリ・オブジェクトに4次元があり、4つ目の次元がメジャーである場合(X、Y、Z、Mなど)、およびファンクションに最初の3次元(X、Y、Zなど)を考慮させる場合にのみ使用する必要があります。ファンクションの標準形式(_3Dが付いていない)を4次元を持つジオメトリに対して使用すると、ファンクションは最初の2次元(XおよびYなど)のみを考慮します。

たとえば、次の形式では、クリップ操作で、指定したGEOMオブジェクトのX、YおよびZ次元が考慮されます。

SELECT  SDO_LRS.CLIP_GEOM_SEGMENT_3D(a.geom, m.diminfo, 5, 10)
FROM routes r, user_sdo_geom_metadata m
WHERE m.table_name = 'ROUTES' AND m.column_name = 'GEOM'
AND r.route_id = 1;

ただし、次の形式では、クリップ操作で、指定したGEOMオブジェクトのXおよびY次元のみが考慮され、Z次元は無視されます。

SELECT  SDO_LRS.CLIP_GEOM_SEGMENT(a.geom, m.diminfo, 5, 10)
FROM routes r, user_sdo_geom_metadata m
WHERE m.table_name = 'ROUTES' AND m.column_name = 'GEOM'
AND r.route_id = 1;

すべてのファンクションの標準形式および3D形式のパラメータは同じであり、「使用上の注意」は両方の形式に適用されます。

3D形式は、次のデータではサポートされていません。

- 測地データ

- ポリゴン、円弧または円

7.5 LRSの処理

この項では、Oracle SpatialのLRS APIでサポートされている線形参照処理について説明します。

7.5.1 ジオメトリ・セグメントの定義

メジャー情報付きのジオメトリ・セグメントを作成するには、次の2つの方法があります。

- ジオメトリ・セグメントを作成し、メジャーを明示的に割り当てます。

- ジオメトリ・セグメントに、開始点と終了点および他のメジャーを付けて、昇順または降順に定義します。ジオメトリ・セグメント内に不明な(割り当てられていない)メジャー(NULL値)を持つ形状点メジャーは、それらの位置および距離分布に従って自動的に移入されます。

図7-8に、ジオメトリ・セグメントを定義する方法を示します。

図7-8 ジオメトリ・セグメントの定義

LRS処理を進める前に、LRSセグメントを定義する(または、LRSセグメントがすでに存在している)必要があります。指定されたメジャーからの位置を求めるために、開始、終了および他の割り当てられたメジャーが存在する必要があります。メジャー値が割り当てられない場合は、中間の形状点のメジャー情報が自動的に移入されます。

7.5.2 ジオメトリ・セグメントの再定義

ジオメトリ・セグメントを再定義し、開始点と終了点の間で、すべての形状点の既存のメジャーを、自動計算されたメジャーに置き換えることができます。セグメントの再定義は、明示的に指定された1つ以上のメジャーにエラーが発生した場合や、メジャーを均等に割り当てなおす場合に有効です。

図7-9に、既存(以前)の指定されたメジャー値が均等ではないセグメントの再定義を示します。

図7-9 ジオメトリ・セグメントの再定義

図7-9に示す再定義後のセグメントでは、移入メジャーは、セグメントに沿って一定間隔になっています。

7.5.3 ジオメトリ・セグメントのクリップ

ジオメトリ・セグメントをクリップして(図7-10のaを参照)、既存のジオメトリ・セグメントから新しいジオメトリ・セグメントを作成できます。

図7-10 ジオメトリ・セグメントのクリップ、分割および連結

図7-10のaでは、セグメントがより大きいセグメントの一部から作成されます。新しいセグメントは独自の開始点および終了点を持ち、方向は元の大きいセグメントと同じです。

7.5.4 ジオメトリ・セグメントの分割

ジオメトリ・セグメントを分割して、2つの新しいジオメトリ・セグメントを作成できます(図7-10のbを参照)。新しい各セグメントの方向は、元のセグメントと同じです。

注意:
図7-10以降のいくつかの図にあるセグメント間の切れ目は、セグメントの分割や連結を示しています。それぞれの切れ目は、セグメントが2つあることを強調しています。ただし、2つのセグメント(図7-10のbおよびcのセグメント1およびセグメント2)は、実際には続いています。セグメントが続いているかどうかを判断するには、許容差(1.5.5項を参照)を考慮します。

7.5.5 ジオメトリ・セグメントの連結

2つのジオメトリ・セグメントを連結して、1つの新しいジオメトリ・セグメントを作成できます(図7-10のcを参照)。図7-10のcに示すジオメトリ・セグメントは続いていますが、空間的に連続していなくてもかまいません。(セグメントが空間的に続いていない場合、連結された結果は複数線ストリングになります。)2つ目のジオメトリ・セグメントのメジャーが移動するため、1つ目のセグメントの終了メジャーは、2つ目のセグメントの開始メジャーと同じになります。連結の結果のセグメントの方向は、元の2つのジオメトリと同じになります。

図7-10のクリップ、分割および連結処理でのメジャーの割当てを、図7-11に示します。メジャー情報およびセグメント方向は、一貫性が保持されます。処理の完了時に、自動的にメジャー情報とセグメントが割り当てられます。

図7-11 ジオメトリ・セグメント処理でのメジャーの割当て

図7-12に示すとおり、連結の結果できるジオメトリ・セグメントの方向は、必ず1つ目のセグメント(SDO_LRS.CONCATENATE_GEOM_SEGMENTSファンクションへのコールのgeom_segment1)の方向です。

図7-12 連結時のセグメント方向

SDO_LRS.CONCATENATE_GEOM_SEGMENTSファンクションを使用して2つの接続したセグメントを明示的に連結する他に、一括連結を実行できます。一括連結では、SDO_AGGR_LRS_CONCAT空間集計ファンクションを使用して、1つの列(レイヤー)に含まれるすべての接続したジオメトリ・セグメントを連結できます。(第20章のSDO_AGGR_LRS_CONCAT空間集計ファンクションの説明および例を参照。)

7.5.6 ジオメトリ・セグメントのスケール変更

ジオメトリ・セグメントに対して線形スケール変更処理を実行すると、新しいジオメトリ・セグメントを作成できます。図7-13に、ジオメトリ・セグメントのスケール変更におけるマッピング関係を示します。

図7-13 ジオメトリ・セグメントのスケール変更

通常、ジオメトリ・セグメントのスケール変更には、新しく作成したジオメトリ・セグメントのメジャーの再配置が含まれます。ただし、スケール変更係数が負の場合、メジャーがジオメトリ・セグメント方向(形状点の順序によって定義される)に増加するように、形状点の順序を逆にする必要があります。

スケール変更処理は、次の処理を任意に組み合せて実行できます。

- メジャー情報の変換(シフト)。(たとえば、同じ値をMsとMeに追加してM'sとM'eを取得。)

- メジャー情報の反転。(M's = Me、M'e = Ms、Mshift = 0にするなど。)

- メジャー情報の簡単なスケール変更。(Mshift = 0にするなど。)

これらの処理の例については、第25章のSDO_LRS.SCALE_GEOM_SEGMENT、SDO_LRS.TRANSLATE_MEASURE、SDO_LRS.REVERSE_GEOMETRYおよびSDO_LRS.REDEFINE_GEOM_SEGMENTサブプログラムの「使用上の注意」および「例」を参照してください。

7.5.7 ジオメトリ・セグメントのオフセット設定

ジオメトリ・セグメントに対してオフセットを設定すると、新しいジオメトリ・セグメントを作成できます。図7-14に、ジオメトリ・セグメントのオフセット設定におけるマッピング関係を示します。

図7-14 ジオメトリ・セグメントのオフセット設定

図7-14に示すオフセット設定では、結果のジオメトリ・セグメントが、元のセグメントの指定された開始および終了メジャーから5単位でオフセット設定されています。

詳細は、第25章のSDO_LRS.OFFSET_GEOM_SEGMENTファンクションの「使用上の注意」および「例」を参照してください。

7.5.8 ジオメトリ・セグメント上の点の位置の確認

ジオメトリ・セグメントでメジャーおよびオフセットで示された点の位置を検索できます(図7-15を参照)。

図7-15 メジャーおよびオフセットを持つセグメント上の点の位置

ジオメトリ・セグメント上の特定のメジャーには、必ず一意の位置があります。オフセットが与えられたときに、メジャーによって表現された点がジオメトリ・セグメントの形状点上にある場合、あいまいさが発生します(図7-16を参照)。

図7-16 オフセットで発生する位置参照のあいまいさ

図7-16に示すとおり、ジオメトリ・セグメント上の形状点のオフセット円弧は、すべての点が形状点から等しい最短距離にある円弧です。この結果、オフセット円弧上のすべての点は、メジャーとオフセットの同じ組合せで表されます。この1対多のマッピング問題を解決するために、オフセット円弧の中間点が戻されます。

7.5.9 ジオメトリ・セグメント上の点の投影

ジオメトリ・セグメントに対応する点の投影点を検索できます。投影する点は、セグメント上にあってもセグメント外にあってもかまいません。点がセグメント上にある場合は、点およびその投影点は同じです。

投影は、図7-15に示す点の位置確認の逆の処理です。点の位置確認と同様に、形状点のオフセット円弧上のすべての点が同じ投影点(形状点)、メジャーおよびオフセットを持ちます(図7-16を参照)。点に対して複数の投影点がある場合、開始点から最初の点が戻されます(図7-17の図の投影点1)。

図7-17 複数の投影点

7.5.10 LRSジオメトリの変換

標準の線ストリング・フォーマットからLRSフォーマットにジオメトリを変換できます。また、その逆も可能です。既存の線ストリング・データが大量にある場合、すべてのLRSセグメントを手動で作成するより、変換ファンクションを使用すると便利です。ただし、特定のアプリケーションでLRSセグメントを標準の線ストリングに変換する機能も提供しています。

ファンクションによって、次のものを変換できます。

- 個々の線ストリングまたは点
標準フォーマットからLRSフォーマットへの変換では、メジャー次元(デフォルトではM)が追加され、それぞれの点にメジャー情報が付けられます。LRSフォーマットから標準フォーマットへの変換では、メジャー次元およびメジャー情報が削除されます。どちらの場合も、USER_SDO_GEOM_METADATAビューの次元情報(DIMINFO)のメタデータには影響しません。

- レイヤー(列にあるすべてのジオメトリ)
標準フォーマットからLRSフォーマットへの変換では、メジャー次元(デフォルトではM)が追加されますが、それぞれの点にメジャー情報は付けられません。LRSフォーマットから標準フォーマットへの変換では、メジャー次元およびメジャー情報が削除されます。どちらの場合も、USER_SDO_GEOM_METADATAビューの次元情報(DIMINFO)のメタデータは、必要に応じて変更されます。

- 次元情報(DIMINFO)
USER_SDO_GEOM_METADATAビューの次元情報(DIMINFO)のメタデータは、必要に応じて変更されます。たとえば、XおよびY次元(SDO_DIM_ELEMENT)を持つ標準の次元配列をLRS次元配列に変換すると、M次元(SDO_DIM_ELEMENT)が追加されます。

図7-18に、SDO_LRS.CONVERT_TO_LRS_GEOMファンクションを使用して、標準線ストリングをLRS線ストリングに変換する場合のメジャー情報の追加を示します。図7-18では、メジャー次元値に下線が付いています。

図7-18 標準フォーマットからLRSフォーマットへの線ストリングの変換

点ジオメトリを変換すると、戻されるジオメトリのSDO_POINT属性(2.2.3項を参照)に次のように影響します。

- 標準の点をLRS点に変換すると、入力ジオメトリのSDO_POINT属性情報が結果のジオメトリのSDO_ELEM_INFOおよびSDO_ORDINATES属性(2.2.4項および2.2.5項を参照)の設定に使用され、結果のジオメトリのSDO_POINT属性がNULLに設定されます。

- LRS点を標準の点に変換すると、入力ジオメトリのSDO_ELEM_INFOおよびSDO_ORDINATES属性(2.2.4項および2.2.5項を参照)の情報が結果のジオメトリのSDO_POINT属性情報の設定に使用され、結果のジオメトリのSDO_ELEM_INFOおよびSDO_ORDINATES属性がNULLに設定されます。

変換ファンクションについては、第25章の表25-3を参照してください。各変換ファンクションのリファレンス情報については、第25章を参照してください。

7.6 LRSファンクションの許容差

多くのLRSファンクションでは、許容差または1つ以上の次元配列を指定する必要があります。そのため、メジャー次元以外のすべての次元に対して1つの許容差を指定するか、または次元配列でメジャー次元以外の各次元に関連付けられている許容差を使用するかを選択できます。許容差は、メジャー次元ではなく、データのジオメトリ部分にのみ適用されます。測地データの許容差の単位はmです。非測地データの場合、許容差の単位はデータに関連付けられた測定単位です。(許容差の詳細は、1.5.5項を参照。)

データと目的に合った許容差を使用しているかどうかを確認してください。LRSファンクションの結果が正しくない場合、許容差を小さくする必要がある場合があります。

クリップ操作(7.5.3項を参照)およびオフセット操作(7.5.7項を参照)では、戻されたセグメントに入力ジオメトリ・セグメントの(本来、戻されたセグメントの開始点または終了点になる点から)許容差内の形状点が生成された場合、その形状点は、戻されたセグメントの開始点または終了点として使用されます。これは、結果のジオメトリに重複する頂点が含まれないようにするためです。頂点が重複すると、ジオメトリが無効になります。たとえば、図7-19では、ジオメトリ・セグメント(非測地データ)に関連付けられる許容差が0.5であると想定されています。

図7-19 許容差の影響を受けるクリップ操作のセグメント

図7-19で、メジャー値0(開始点)と61.5の間のセグメントを戻すクリップ操作を要求し、メジャー値61.5と61.257に関連付けられた点の間の距離が許容差0.5未満である場合、戻されるセグメントの終了点は(35, 10, 61.257)になります。

7.7 LRSファンクションの例

この項では、LRSファンクションを使用する例を示します。この例では、この章で説明する概要および第25章で説明するファンクションを使用します。

図7-20の道路を使用して説明します。

図7-20 LRSの例: 高速道路

図7-20で、高速道路(Route 1)は点2,2で始まり、点5,14で終了し、図示されているパスに従います。また、6つの入口と出口の点(Exit 1からExit 6)があります。単純化するために、グラフの単位は1メジャー単位を表し、開始点から終了点までのメジャーは27です(Exit 5からExit 6のセグメントは、辺が3:4:5の直角三角形の斜辺)。

表7-1に、実際の高速道路のフィーチャ、およびそのフィーチャに対応するLRSの機能またはそのフィーチャを表現するためのLRSの機能を示します。

表7-1 高速道路のフィーチャとLRSの機能

高速道路のフィーチャ

LRSの機能

名前が付いたルート、道路、通り

LRSセグメントまたは線形フィーチャ(セグメントの論理セット)

マイルまたはkmの標識

メジャー

事故の連絡および位置の追跡

SDO_LRS.LOCATE_PTファンクション

建設区域(道路の一部)

SDO_LRS.CLIP_GEOM_SEGMENTファンクション

道路の拡張(開始地点または終了地点の追加)または連結(1つに重なる2つの道路の設計および変名)

SDO_LRS.CONCATENATE_GEOM_SEGMENTSファンクション

道路の改修または分割(名前が付いた1つの道路を名前が付いた2つの道路に分割)

SDO_LRS.SPLIT_GEOM_SEGMENTプロシージャ

道路の外にある地点(建物など)に最も近い道路上にある地点の検索

SDO_LRS.PROJECT_PTファンクション

道路沿いのガード・レールまたはフェンス

SDO_LRS.OFFSET_GEOM_SEGMENTファンクション

例7-2では、次の処理を行います。

- 図7-20に示すセグメントを格納する表を作成する

- 図7-20に示す高速道路の定義を表に挿入する

- 必要なメタデータをUSER_SDO_GEOM_METADATAビューに挿入する

- PL/SQLおよびSQL文を使用して、セグメントの定義およびセグメントに対する処理を行う

例7-2のSELECT文の出力結果を例7-3に示します。

例7-2 高速道路の例

-- Create a table for routes (highways).
CREATE TABLE lrs_routes (
route_id  NUMBER PRIMARY KEY,
route_name  VARCHAR2(32),
route_geometry  SDO_GEOMETRY);

-- Populate table with just one route for this example.
INSERT INTO lrs_routes VALUES(
1,
'Route1',
SDO_GEOMETRY(
3302,  -- line string, 3 dimensions: X,Y,M
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
SDO_ORDINATE_ARRAY(
2,2,0,   -- Start point - Exit1; 0 is measure from start.
2,4,2,   -- Exit2; 2 is measure from start.
8,4,8,   -- Exit3; 8 is measure from start.
12,4,12,  -- Exit4; 12 is measure from start.
12,10,NULL,  -- Not an exit; measure automatically calculated and filled.
8,10,22,  -- Exit5; 22 is measure from start.
5,14,27)  -- End point (Exit6); 27 is measure from start.
)
);

-- Update the Spatial metadata.
INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'lrs_routes',
'route_geometry',
SDO_DIM_ARRAY(   -- 20X20 grid
SDO_DIM_ELEMENT('X', 0, 20, 0.005),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005),
SDO_DIM_ELEMENT('M', 0, 20, 0.005) -- Measure dimension
),
NULL   -- SRID
);

-- Create the spatial index.
CREATE INDEX lrs_routes_idx ON lrs_routes(route_geometry)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

-- Test the LRS procedures.
DECLARE
geom_segment SDO_GEOMETRY;
line_string SDO_GEOMETRY;
dim_array SDO_DIM_ARRAY;
result_geom_1 SDO_GEOMETRY;
result_geom_2 SDO_GEOMETRY;
result_geom_3 SDO_GEOMETRY;

BEGIN

SELECT a.route_geometry into geom_segment FROM lrs_routes a
WHERE a.route_name = 'Route1';
SELECT m.diminfo into dim_array from
user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY';

-- Define the LRS segment for Route1. This will populate any null measures.
-- No need to specify start and end measures, because they are already defined
-- in the geometry.
SDO_LRS.DEFINE_GEOM_SEGMENT (geom_segment, dim_array);

SELECT a.route_geometry INTO line_string FROM lrs_routes a
WHERE a.route_name = 'Route1';

-- Split Route1 into two segments.
SDO_LRS.SPLIT_GEOM_SEGMENT(line_string,dim_array,5,result_geom_1,result_geom_2);

-- Concatenate the segments that were just split.
result_geom_3 := SDO_LRS.CONCATENATE_GEOM_SEGMENTS(result_geom_1, dim_array, result_geom_2, dim_array);

-- Update and insert geometries into table, to display later.
UPDATE lrs_routes a SET a.route_geometry = geom_segment
WHERE a.route_id = 1;

INSERT INTO lrs_routes VALUES(
11,
'result_geom_1',
result_geom_1
);
INSERT INTO lrs_routes VALUES(
12,
'result_geom_2',
result_geom_2
);
INSERT INTO lrs_routes VALUES(
13,
'result_geom_3',
result_geom_3
);

END;
/

-- First, display the data in the LRS table.
SELECT route_id, route_name, route_geometry FROM lrs_routes;

-- Are result_geom_1 and result_geom2 connected?
SELECT  SDO_LRS.CONNECTED_GEOM_SEGMENTS(a.route_geometry,
b.route_geometry, 0.005)
FROM lrs_routes a, lrs_routes b
WHERE a.route_id = 11 AND b.route_id = 12;

-- Is the Route1 segment valid?
SELECT  SDO_LRS.VALID_GEOM_SEGMENT(route_geometry)
FROM lrs_routes WHERE route_id = 1;

-- Is 50 a valid measure on Route1? (Should return FALSE; highest Route1 measure is 27.)
SELECT  SDO_LRS.VALID_MEASURE(route_geometry, 50)
FROM lrs_routes WHERE route_id = 1;

-- Is the Route1 segment defined?
SELECT  SDO_LRS.IS_GEOM_SEGMENT_DEFINED(route_geometry)
FROM lrs_routes WHERE route_id = 1;

-- How long is Route1?
SELECT  SDO_LRS.GEOM_SEGMENT_LENGTH(route_geometry)
FROM lrs_routes WHERE route_id = 1;

-- What is the start measure of Route1?
SELECT  SDO_LRS.GEOM_SEGMENT_START_MEASURE(route_geometry)
FROM lrs_routes WHERE route_id = 1;

-- What is the end measure of Route1?
SELECT  SDO_LRS.GEOM_SEGMENT_END_MEASURE(route_geometry)
FROM lrs_routes WHERE route_id = 1;

-- What is the start point of Route1?
SELECT  SDO_LRS.GEOM_SEGMENT_START_PT(route_geometry)
FROM lrs_routes WHERE route_id = 1;

-- What is the end point of Route1?
SELECT  SDO_LRS.GEOM_SEGMENT_END_PT(route_geometry)
FROM lrs_routes WHERE route_id = 1;

-- Translate (shift measure values) (+10).
-- First, display the original segment; then, translate.
SELECT a.route_geometry FROM lrs_routes a WHERE a.route_id = 1;
SELECT SDO_LRS.TRANSLATE_MEASURE(a.route_geometry, m.diminfo, 10)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

-- Redefine geometric segment to "convert" miles to kilometers
DECLARE
geom_segment SDO_GEOMETRY;
dim_array SDO_DIM_ARRAY;

BEGIN

SELECT a.route_geometry into geom_segment FROM lrs_routes a
WHERE a.route_name = 'Route1';
SELECT m.diminfo into dim_array from
user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY';

-- "Convert" mile measures to kilometers (27 * 1.609 = 43.443).
SDO_LRS.REDEFINE_GEOM_SEGMENT (geom_segment,
dim_array,
0, -- Zero starting measure: LRS segment starts at start of route.
43.443); -- End of LRS segment. 27 miles = 43.443 kilometers.

-- Update and insert geometries into table, to display later.
UPDATE lrs_routes a SET a.route_geometry = geom_segment
WHERE a.route_id = 1;

END;/
-- Display the redefined segment, with all measures "converted."
SELECT a.route_geometry FROM lrs_routes a WHERE a.route_id = 1;

-- Clip a piece of Route1.
SELECT  SDO_LRS.CLIP_GEOM_SEGMENT(route_geometry, 5, 10)
FROM lrs_routes WHERE route_id = 1;

-- Point (9,3,NULL) is off the road; should return (9,4,9).
SELECT  SDO_LRS.PROJECT_PT(route_geometry,
SDO_GEOMETRY(3301, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 1, 1),
SDO_ORDINATE_ARRAY(9, 3, NULL)) )
FROM lrs_routes WHERE route_id = 1;

-- Return the measure of the projected point.
SELECT  SDO_LRS.GET_MEASURE(
SDO_LRS.PROJECT_PT(a.route_geometry, m.diminfo,
SDO_GEOMETRY(3301, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 1, 1),
SDO_ORDINATE_ARRAY(9, 3, NULL)) ),
m.diminfo )
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

-- Is point (9,3,NULL) a valid LRS point? (Should return TRUE.)
SELECT  SDO_LRS.VALID_LRS_PT(
SDO_GEOMETRY(3301, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 1, 1),
SDO_ORDINATE_ARRAY(9, 3, NULL)),
m.diminfo)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

-- Locate the point on Route1 at measure 9, offset 0.
SELECT  SDO_LRS.LOCATE_PT(route_geometry, 9, 0)
FROM lrs_routes WHERE route_id = 1;

例7-3に、例7-2のSELECT文の出力結果を示します。

例7-3 SELECT文の出力例

SQL> -- First, display the data in the LRS table.
SQL> SELECT route_id, route_name, route_geometry FROM lrs_routes;

ROUTE_ID ROUTE_NAME
---------- --------------------------------
ROUTE_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDIN
--------------------------------------------------------------------------------
1 Route1
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 8, 4, 8, 12, 4, 12, 12, 10, 18, 8, 10, 22, 5, 14, 27))

11 result_geom_1
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 5, 4, 5))

12 result_geom_2

ROUTE_ID ROUTE_NAME
---------- --------------------------------
ROUTE_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDIN
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 4, 5, 8, 4, 8, 12, 4, 12, 12, 10, 18, 8, 10, 22, 5, 14, 27))

13 result_geom_3
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 5, 4, 5, 8, 4, 8, 12, 4, 12, 12, 10, 18, 8, 10, 22, 5, 14, 27)
)

SQL> -- Are result_geom_1 and result_geom2 connected?
SQL> SELECT  SDO_LRS.CONNECTED_GEOM_SEGMENTS(a.route_geometry,
2             b.route_geometry, 0.005)
3    FROM lrs_routes a, lrs_routes b
4    WHERE a.route_id = 11 AND b.route_id = 12;

SDO_LRS.CONNECTED_GEOM_SEGMENTS(A.ROUTE_GEOMETRY,B.ROUTE_GEOMETRY,0.005)
--------------------------------------------------------------------------------
TRUE

SQL> -- Is the Route1 segment valid?
SQL> SELECT  SDO_LRS.VALID_GEOM_SEGMENT(route_geometry)
2    FROM lrs_routes WHERE route_id = 1;

SDO_LRS.VALID_GEOM_SEGMENT(ROUTE_GEOMETRY)
--------------------------------------------------------------------------------
TRUE

SQL> -- Is 50 a valid measure on Route1? (Should return FALSE; highest Route1 measure is 27.)
SQL> SELECT  SDO_LRS.VALID_MEASURE(route_geometry, 50)
2    FROM lrs_routes WHERE route_id = 1;

SDO_LRS.VALID_MEASURE(ROUTE_GEOMETRY,50)
--------------------------------------------------------------------------------
FALSE

SQL> -- Is the Route1 segment defined?
SQL> SELECT  SDO_LRS.IS_GEOM_SEGMENT_DEFINED(route_geometry)
2    FROM lrs_routes WHERE route_id = 1;

SDO_LRS.IS_GEOM_SEGMENT_DEFINED(ROUTE_GEOMETRY)
--------------------------------------------------------------------------------
TRUE

SQL> -- How long is Route1?
SQL> SELECT  SDO_LRS.GEOM_SEGMENT_LENGTH(route_geometry)
2    FROM lrs_routes WHERE route_id = 1;

SDO_LRS.GEOM_SEGMENT_LENGTH(ROUTE_GEOMETRY)
-------------------------------------------
27

SQL> -- What is the start measure of Route1?
SQL> SELECT  SDO_LRS.GEOM_SEGMENT_START_MEASURE(route_geometry)
2    FROM lrs_routes WHERE route_id = 1;

SDO_LRS.GEOM_SEGMENT_START_MEASURE(ROUTE_GEOMETRY)
--------------------------------------------------
0

SQL> -- What is the end measure of Route1?
SQL> SELECT  SDO_LRS.GEOM_SEGMENT_END_MEASURE(route_geometry)
2    FROM lrs_routes WHERE route_id = 1;

SDO_LRS.GEOM_SEGMENT_END_MEASURE(ROUTE_GEOMETRY)
------------------------------------------------
27

SQL> -- What is the start point of Route1?
SQL> SELECT  SDO_LRS.GEOM_SEGMENT_START_PT(route_geometry)
2    FROM lrs_routes WHERE route_id = 1;

SDO_LRS.GEOM_SEGMENT_START_PT(ROUTE_GEOMETRY)(SDO_GTYPE, SDO_SRID, SDO_POINT(X,
--------------------------------------------------------------------------------
SDO_GEOMETRY(3301, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
2, 2, 0))

SQL> -- What is the end point of Route1?
SQL> SELECT  SDO_LRS.GEOM_SEGMENT_END_PT(route_geometry)
2    FROM lrs_routes WHERE route_id = 1;

SDO_LRS.GEOM_SEGMENT_END_PT(ROUTE_GEOMETRY)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y,
--------------------------------------------------------------------------------
SDO_GEOMETRY(3301, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
5, 14, 27))

SQL> -- Translate (shift measure values) (+10).
SQL> -- First, display the original segment; then, translate.
SQL> SELECT a.route_geometry FROM lrs_routes a WHERE a.route_id = 1;

ROUTE_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDIN
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 8, 4, 8, 12, 4, 12, 12, 10, 18, 8, 10, 22, 5, 14, 27))

SQL> SELECT SDO_LRS.TRANSLATE_MEASURE(a.route_geometry, m.diminfo, 10)
2    FROM lrs_routes a, user_sdo_geom_metadata m
3    WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
4   AND a.route_id = 1;

SDO_LRS.TRANSLATE_MEASURE(A.ROUTE_GEOMETRY,M.DIMINFO,10)(SDO_GTYPE, SDO_SRID, SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 10, 2, 4, 12, 8, 4, 18, 12, 4, 22, 12, 10, 28, 8, 10, 32, 5, 14, 37))

SQL> -- Redefine geometric segment to "convert" miles to kilometers
SQL> DECLARE
2  geom_segment SDO_GEOMETRY;
3  dim_array SDO_DIM_ARRAY;
4
5  BEGIN
6
7  SELECT a.route_geometry into geom_segment FROM lrs_routes a
8    WHERE a.route_name = 'Route1';
9  SELECT m.diminfo into dim_array from
10    user_sdo_geom_metadata m
11    WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY';
12
13  -- "Convert" mile measures to kilometers (27 * 1.609 = 43.443).
14  SDO_LRS.REDEFINE_GEOM_SEGMENT (geom_segment,
15    dim_array,
16    0, -- Zero starting measure: LRS segment starts at start of route.
17    43.443); -- End of LRS segment. 27 miles = 43.443 kilometers.
18
19  -- Update and insert geometries into table, to display later.
20  UPDATE lrs_routes a SET a.route_geometry = geom_segment
21     WHERE a.route_id = 1;
22
23  END;
24  /

PL/SQL procedure successfully completed.

SQL> -- Display the redefined segment, with all measures "converted."
SQL> SELECT a.route_geometry FROM lrs_routes a WHERE a.route_id = 1;

ROUTE_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDIN
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 3.218, 8, 4, 12.872, 12, 4, 19.308, 12, 10, 28.962, 8, 10, 35.398
, 5, 14, 43.443))

SQL> -- Clip a piece of Route1.
SQL> SELECT  SDO_LRS.CLIP_GEOM_SEGMENT(route_geometry, 5, 10)
2    FROM lrs_routes WHERE route_id = 1;

SDO_LRS.CLIP_GEOM_SEGMENT(ROUTE_GEOMETRY,5,10)(SDO_GTYPE, SDO_SRID, SDO_POINT(X,
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 4, 5, 8, 4, 8, 10, 4, 10))

SQL> -- Point (9,3,NULL) is off the road; should return (9,4,9).
SQL> SELECT  SDO_LRS.PROJECT_PT(route_geometry,
2    SDO_GEOMETRY(3301, NULL, NULL,
3    SDO_ELEM_INFO_ARRAY(1, 1, 1),
4    SDO_ORDINATE_ARRAY(9, 3, NULL)) )
5    FROM lrs_routes WHERE route_id = 1;

SDO_LRS.PROJECT_PT(ROUTE_GEOMETRY,SDO_GEOMETRY(3301,NULL,NULL,SDO_EL
--------------------------------------------------------------------------------
SDO_GEOMETRY(3301, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
9, 4, 9))

SQL> -- Return the measure of the projected point.
SQL> SELECT  SDO_LRS.GET_MEASURE(
2   SDO_LRS.PROJECT_PT(a.route_geometry, m.diminfo,
3    SDO_GEOMETRY(3301, NULL, NULL,
4    SDO_ELEM_INFO_ARRAY(1, 1, 1),
5    SDO_ORDINATE_ARRAY(9, 3, NULL)) ),
6   m.diminfo )
7   FROM lrs_routes a, user_sdo_geom_metadata m
8   WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
9      AND a.route_id = 1;

SDO_LRS.GET_MEASURE(SDO_LRS.PROJECT_PT(A.ROUTE_GEOMETRY,M.DIMINFO,SDO_GEOM
--------------------------------------------------------------------------------
9

SQL> -- Is point (9,3,NULL) a valid LRS point? (Should return TRUE.)
SQL> SELECT  SDO_LRS.VALID_LRS_PT(
2    SDO_GEOMETRY(3301, NULL, NULL,
3    SDO_ELEM_INFO_ARRAY(1, 1, 1),
4    SDO_ORDINATE_ARRAY(9, 3, NULL)),
5    m.diminfo)
6    FROM lrs_routes a, user_sdo_geom_metadata m
7    WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
8    AND a.route_id = 1;

SDO_LRS.VALID_LRS_PT(SDO_GEOMETRY(3301,NULL,NULL,SDO_ELEM_INFO_ARRAY
------------------------------------------------------------------------------
TRUE

SQL> -- Locate the point on Route1 at measure 9, offset 0.
SQL> SELECT  SDO_LRS.LOCATE_PT(route_geometry, 9, 0)
2    FROM lrs_routes WHERE route_id = 1;

SDO_LRS.LOCATE_PT(ROUTE_GEOMETRY,9,0)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), S
--------------------------------------------------------------------------------
SDO_GEOMETRY(3301, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
9, 4, 9))

8 空間分析およびマイニング

この章では、Oracle SpatialでサポートされるOracle Data Mining(ODM)アプリケーションの空間分析およびマイニングについて説明します。

注意:
この章で説明する機能を使用する場合は、Oracle Data Miningのドキュメントに記載されている主な概念および定義を理解しておく必要があります。

空間分析およびSDO_SAMパッケージのマイニングのファンクションおよびプロシージャのリファレンス情報については、第29章を参照してください。

注意:
SDO_SAMサブプログラムは2次元ジオメトリでのみサポートされています。これらは3次元ジオメトリではサポートされていません。

この章の内容は次のとおりです。

- 8.1項「空間情報およびデータ・マイニング・アプリケーション」

- 8.2項「空間のビニングによる地域パターンの検出」

- 8.3項「空間相関のマテリアライズ」

- 8.4項「コロケーション・マイニング」

- 8.5項「空間のクラスタ化」

- 8.6項「位置の予測」

8.1 空間情報およびデータ・マイニング・アプリケーション

ODMを使用すると、データベース内の隠れたナレッジを自動的に発見できます。この機能では、異なるデータ属性間の隠れた関連性の発見、一部のサンプルに基づいたデータの分類、およびクラスタ化による固有のパターンの識別が行われます。空間データをマテリアライズして、データ・マイニング・アプリケーションに含めることができます。そのため、ODMを使用すると、特定の区域(近隣、市または地域)内の住民に対する販売予測で、これらの区域の住民は特定のテレビ番組を見る可能性が高いこと、または特定の広告による勧誘に好意的に反応する可能性が高いことを発見できる場合があります。(住所は経度/緯度の点にジオコードされ、Oracle Spatialジオメトリ・オブジェクトに格納されます。)

多くのアプリケーションで、特定の位置に存在するデータは、近隣のデータの影響を受けます。たとえば、家の価値は、近隣の他の家の価値によって大きく左右されます。この現象は、空間相関(または近隣の影響)と呼ばれます(8.3項を参照)。Oracle Spatialの空間分析およびマイニング機能を使用すると、データ項目の位置属性を使用してデータを地域別にビニング(区分)したり(データを北、南、東および西の地域別に分類するなど)、近隣(各店舗から半径2マイル以内の顧客数など)の影響をマテリアライズしたり、同じ場所に存在するデータ項目(ビデオ・レンタル店やピザ・レストランなど)を識別して、空間相関を活用することができます。

空間データのマイニングを実行するには、テーマ・レイヤーを使用して、一連の空間データに対する空間条件および関係をマテリアライズします。各レイヤーには、公園やレクリエーション施設、デモグラフィックな収入データなど、特定の種類の空間データに関するデータ(特定の「テーマ」を持つデータ)が含まれています。空間のマテリアライズは、データ・マイニングを実行する前の前処理手順として実行するか、または空間マイニングの中間手順として実行できます(図8-1を参照)。

図8-1 空間マイニングおよびOracle Data Mining

図8-1では、次のことに注意してください。

- 空間データおよび非空間データを含む元のデータが、マテリアライズされたデータを生成するために処理されます。

- 元のデータ内の空間データが、マテリアライズされたデータを生成するために空間マイニング・ファンクションによって処理されます。この処理には、空間のビニング、近接性、コロケーション・マテリアライズなどの操作が含まれます。

- ODMエンジンが、マテリアライズされたデータ(空間および非空間)を処理して、マイニング結果を生成します。

空間情報を処理に加えることでメリットを得る可能性があるデータ・マイニング・アプリケーションの例を次に示します。

- ビジネス予測: 他のフランチャイズ店と同じ場所で営業する(ピザ・ハット・レストランとブロックバスター・ビデオ店が同じ場所で営業するなど)ことによって売上が増えるかどうかを判断します。

- 店舗予測: 大都市から50マイル以内で、消費税制度がない州内の、店舗の立地に適した場所を検索します。(消費税の支払いを回避するために50マイルを運転するのは遠すぎる可能性がありますが、半径50マイルの範囲内で消費税制度がない州の近くに、多くの顧客が住んでいる場合があります。)

- 病院予測: 近隣に住む患者の人口に基づいて、新しく病院を設立するのに最適な場所を特定します。

- 空間地域に基づいた分類またはパーソナライズ: 米国南東部に住む特定の年代または所得層の顧客が、ソフト・ロック音楽とハード・ロック音楽のどちらを好むかを判断します。

- 自動車保険: 任意の顧客の自宅または職場の住所が、事故や自動車盗難の発生率が高い地域内にあるかどうかを判断します。

- プロパティ分析: コロケーション・ルールを使用して、高速道路に近接していることと、家の価値または店舗の売上の間の隠れた関連性を発見します。

- プロパティ評価: 近隣に立っている類似の家の価値を調べて、差異と空間相関に基づいて家の価値を見積もります。

8.2 空間のビニングによる地域パターンの検出

空間のビニング(空間の区分)とは、位置の値を、地理区域に関連付けられた少数のグループに区分することです。位置をグループに割り当てるには、次のいずれかの方法を使用します。

- 経度/緯度座標を逆にジオコードして、郵便番号、市、州および国(米国の場合)で識別される住所を取得します。

- 空間ビン表を確認して、特定の位置がどのビンに属しているかを判断します。

次に、ODMの機能を区分された位置に適用して、興味深い地域パターンまたは相関ルールを識別できます。たとえば、地域Aの顧客は通常の炭酸飲料を好み、地域Bの顧客はダイエット炭酸飲料を好むことを発見する場合があります。

次のファンクションおよびプロシージャ(第29章を参照)は、空間ビニングに関連する操作を実行します。

- SDO_SAM.BIN_GEOMETRY

- SDO_SAM.BIN_LAYER

8.3 空間相関のマテリアライズ

空間相関(または近隣の影響)とは、ある地域に存在する特定のオブジェクトの位置が、そのオブジェクトの非空間属性に影響を及ぼす現象です。たとえば、任意の(ジオコード済で、空間属性が指定されている)住所に建っている家の価値(非空間属性)は、近隣の他の家の価値によって大きく左右されます。

データ・マイニング・アプリケーションで空間相関を使用するには、属性(列)をデータ・マイニング表に追加して、空間相関をマテリアライズします。適切な属性を追加するには、関連付けられたテーマ表を使用します。次に、ODMのファンクションを使用して、データ・マイニング表に対してマイニング・タスクを実行します。

次のファンクションおよびプロシージャ(第29章を参照)は、空間相関のマテリアライズに関連する操作を実行します。

- SDO_SAM.SIMPLIFY_GEOMETRY

- SDO_SAM.SIMPLIFY_LAYER

- SDO_SAM.AGGREGATES_FOR_GEOMETRY

- SDO_SAM.AGGREGATES_FOR_LAYER

8.4 コロケーション・マイニング

コロケーションとは、同じ位置または非常に近い位置に、複数の空間オブジェクトが存在することです。コロケーション・パターンは、非空間属性に関して空間データ・オブジェクト間の興味深い関連性を示す場合があります。たとえば、データ・マイニング・アプリケーションによって、特定のピザ・レストラン・チェーンのフランチャイズ店の売上が、ビデオ店と同じ場所で営業している店舗の方が、そうでない店舗より多いことが発見される場合があります。

次の2種類のコロケーション・マイニングがサポートされています。

- データ・マイニング表内の項目のコロケーション。この方法では、任意のデータ・レイヤーで、複数のフィーチャのコロケーションが識別されます。たとえば、捕食動物と被捕食動物が同じ場所に生息していたり、売上の多いピザ・レストランは売上の多いビデオ店と同じ場所で営業している可能性があります。参照フィーチャによる方法(1つのフィーチャを参照として、また他のフィーチャをテーマ属性として使用し、その参照フィーチャのすべての近隣フィーチャをマテリアライズする方法)またはバッファ・ベースの方法(指定したサイズのすべてのウィンドウ内に存在するすべての項目をマテリアライズする方法)を使用できます。

- テーマ・レイヤーとのコロケーション。この方法では、任意の複数のデータ・レイヤーで、複数のレイヤーにまたがるコロケーションが識別されます。たとえば、任意の湖レイヤーと植物レイヤーでは、湖が存在する場所に植物が多い可能性があります。データをマテリアライズし、分類と数値の空間関係をデータ・マイニング表に追加して、ODMの相関ルール・メカニズムを適用します。

次のファンクションおよびプロシージャ(第29章を参照)は、コロケーション・マイニングに関連する操作を実行します。

- SDO_SAM.COLOCATED_REFERENCE_FEATURES

- SDO_SAM.BIN_GEOMETRY

8.5 空間のクラスタ化

空間のクラスタ化を実行すると、データのレイヤーのクラスタ・ジオメトリが戻されます。空間のクラスタ化の例は、犯罪発生場所データのクラスタ化です。

SDO_SAM.SPATIAL_CLUSTERSファンクション(第29章を参照)は、空間のクラスタ化を実行します。このファンクションでは、レイヤーのジオメトリ列に空間Rツリー索引が作成されている必要があります。このファンクションは、一連のSDO_REGIONオブジェクトを戻します。このオブジェクトでは、ジオメトリ列によって各クラスタの境界が指定され、geometry_key値がNULLに設定されています。

ビン表内の戻された空間クラスタにSDO_SAM.BIN_GEOMETRYファンクションを使用すると、ジオメトリが属するクラスタを識別できます。

8.6 位置の予測

位置の予測を実行するには、テーマ・レイヤーを使用してレイヤーの集計を行い、集計結果の最大値を持つ位置を選択します。

次のファンクション(第29章を参照)は、位置の予測に関連する操作を実行します。

- SDO_SAM.AGGREGATES_FOR_GEOMETRY

- SDO_SAM.AGGREGATES_FOR_LAYER

- SDO_SAM.TILED_AGGREGATES

9 空間索引付け機能の拡張

この章では、ジオメトリ列以外のオブジェクトに対して空間索引を作成および使用する方法を説明します。他の章では、SDO_GEOMETRY型の単一列に格納された空間データの索引付けおよび問合せについて説明しています。この章では、次の操作を実行する方法を説明します。

- SDO_GEOMETRYオブジェクトをユーザー定義のオブジェクト型に埋め込み、その型のジオメトリ属性を索引付けする(9.1項を参照)

- ファンクションがSDO_GEOMETRYオブジェクトを戻すファンクション索引を作成および使用する(9.2項を参照)

この章で説明する方法は、経験および知識の豊富なアプリケーション開発者を対象としています。他の章で説明するSpatialの概念および定義を十分に理解している必要があります。また、関連するOracle Databaseの機能(ユーザー定義データ型やファンクション索引付けなど)についても十分に理解しているか、またはこれらの機能を習得できる必要もあります。

9.1 ユーザー定義型定義のSDO_GEOMETRYオブジェクト

SDO_GEOMETRY型は、ユーザー定義のデータ型定義に埋め込むことができます。その手順は、次に示すとおり、空間データ列にSDO_GEOMETRY型を使用する場合の手順に類似しています。

1. ユーザー定義のデータ型を作成します。

2. そのデータ型に基づいた列を含む表を作成します。

3. その表にデータを挿入します。

4. USER_SDO_GEOM_METADATAビューを更新します。

5. ジオメトリ属性に対して空間索引を作成します。

6. データに対して問合せを実行します。

たとえば、2.1項の例に示すコーラのマーケットの例に従って、マーケット名属性およびジオメトリ属性を単一の型に取り込むとします。まず、次に示すとおり、ユーザー定義のデータ型を作成します。この例では、MARKET_TYPEというオブジェクト型を作成します。

CREATE OR REPLACE TYPE market_type AS OBJECT
(name VARCHAR2(32), shape SDO_GEOMETRY);
/

そのユーザー定義型に基づいた列を含む表を作成します。次の例では、2.1項の例で使用されているCOLA_MARKETS表と同じ情報を含むCOLA_MARKETS_2という表を作成します。

CREATE TABLE cola_markets_2 (
mkt_id NUMBER PRIMARY KEY,
market MARKET_TYPE);

オブジェクト型名をコンストラクタとして使用して、その表にデータを挿入します。次に例を示します。

INSERT INTO cola_markets_2 VALUES(
1,
MARKET_TYPE('cola_a',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
-- define rectangle (lower left and upper right)
)
)
);

ドット表記法を使用して列名および空間属性を指定し、USER_SDO_GEOM_METADATAビューを更新します。次の例では、MARKET.SHAPEをこのメタデータ・ビューのCOLUMN_NAME(2.8.2項を参照)として指定します。

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'cola_markets_2',
'market.shape',
SDO_DIM_ARRAY(   -- 20X20 grid
SDO_DIM_ELEMENT('X', 0, 20, 0.005),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
),
NULL   -- SRID
);

ドット表記法を使用して列名および空間属性を指定し、空間索引を作成します。次に例を示します。

CREATE INDEX cola_spatial_idx_2
ON cola_markets_2(market.shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

ドット表記法を使用してユーザー定義型の属性を参照し、データに対する問合せを実行します。次の単純な問合せは、cola_aというコーラのマーケットに関連する情報を戻します。

SELECT c.mkt_id, c.market.name, c.market.shape
FROM cola_markets_2 c
WHERE c.market.name = 'cola_a';

次の問合せは、指定した問合せウィンドウ(左下の座標に(4,6)、右上の座標に(8,8)を持つ矩形)と空間的に相互作用するすべてのジオメトリに関連する情報を戻します。

SELECT c.mkt_id, c.market.name, c.market.shape
FROM cola_markets_2 c
WHERE SDO_RELATE(c.market.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8)),
'mask=anyinteract' = 'TRUE';

9.2 ファンクション索引のSDO_GEOMETRYオブジェクト

ファンクション空間索引を使用すると、ファンクションまたは式によって戻される(SDO_GEOMETRY型の)位置情報を使用した問合せが容易になります。この場合、空間索引は、ファンクションまたは式によって戻される事前計算値に基づいて作成されます。

ファンクション索引のメリット、オプション、要件の詳細および使用例については、次のマニュアルを参照してください。

- 『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』

- 『Oracle Database管理者ガイド』

ファンクション索引でのSDO_GEOMETRYオブジェクトの使用手順は次のとおりです。

1. SDO_GEOMETRYオブジェクトを戻すファンクションを作成します。
このファンクションは、DETERMINISTICとして宣言される必要があります。

2. 空間データ表が存在しない場合は、空間データ表を作成し、その表にデータを挿入します。

3. USER_SDO_GEOM_METADATAビューを更新します。

4. 空間索引を作成します。
ファンクション空間索引の場合、パラメータ数は32以下である必要があります。

5. データに対して問合せを実行します。

この項の後半では、ファンクション索引の2つの使用例を示します。どちらの例でも、SDO_GEOMETRYオブジェクトを戻すファンクションを作成し、そのファンクションに対して空間索引を作成しています。最初の例では、ファンクションへの入力パラメータは、標準のOracleデータ型(NUMBER)です。2つ目の例では、ファンクションへの入力は、ユーザー定義のオブジェクト型です。

9.2.1 例: 標準型を使用したファンクション

次の例では、ファンクション索引に使用されるファンクションへの入力パラメータは、標準の数値(経度および緯度)です。

ある点の経度および緯度を戻すファンクションを作成し、そのファンクションを空間索引で使用するとします。まず、次の例に示すとおり、ファンクションを作成します。この例では、GET_LONG_LAT_PTというファンクションを作成します。

-- Create a function to return a point geometry (SDO_GTYPE = 2001) with
-- input of 2 numbers: longitude and latitude (SDO_SRID = 8307, for
-- "Longitude / Latitude (WGS 84)",  probably the most widely used
--  coordinate system, and the one used for GPS devices.
-- Specify DETERMINISTIC for the function.

create or replace function get_long_lat_pt(longitude in number,
latitude in number)
return SDO_GEOMETRY deterministic is
begin
return sdo_geometry(2001, 8307,
sdo_point_type(longitude, latitude, NULL),NULL, NULL);
end;
/

空間データ表が存在しない場合は、LONG_LAT_TABLEという表を作成する次の例に示すとおり、空間データ表を作成し、その表にデータを追加します。

create table LONG_LAT_TABLE
(lon number, lat number, name varchar2(32));

insert into LONG_LAT_TABLE values (10,10, 'Place1');
insert into LONG_LAT_TABLE values (20,20, 'Place2');
insert into LONG_LAT_TABLE values (30,30, 'Place3');

ドット表記法を使用してスキーマ名およびファンクション名を指定し、USER_SDO_GEOM_METADATAビューを更新します。次の例では、SCOTT.GET_LONG_LAT_PT(LON,LAT)をこのメタデータ・ビューのCOLUMN_NAME (2.8.2項を参照)として指定します。

-- Set up the metadata entry for this table.
-- The column name sets up the function on top
-- of the two columns used in this function,
-- along with the owner of the function.
insert into user_sdo_geom_metadata values('LONG_LAT_TABLE',
'scott.get_long_lat_pt(lon,lat)',
sdo_dim_array(
sdo_dim_element('Longitude', -180, 180, 0.005),
sdo_dim_element('Latitude', -90, 90, 0.005)), 8307);

パラメータでファンクション名を指定して、空間索引を作成します。次に例を示します。

create index LONG_LAT_TABLE_IDX on
LONG_LAT_TABLE(get_long_lat_pt(lon,lat))
indextype is mdsys.spatial_index;

データに対して問合せを実行します。次の例では、SDO_FILTER演算子へのコールで前述のユーザー定義ファンクションを指定します。

select name from LONG_LAT_TABLE a
where sdo_filter(
get_long_lat_pt(a.lon,a.lat),
sdo_geometry(2001, 8307, sdo_point_type(10,10,NULL), NULL, NULL)
)='TRUE';

NAME
--------------------------------
Place1

9.2.2 例: ユーザー定義のオブジェクト型を使用したファンクション

次の例では、ファンクション索引に使用されるファンクションへの入力パラメータは、経度および緯度を含むユーザー定義型のオブジェクトです。

ある点の経度および緯度を戻すファンクションを作成し、そのファンクションに対して空間索引を作成するとします。まず、次の例に示すとおり、ユーザー定義データ型を作成します。この例では、LONG_LATというオブジェクト型およびそのメンバー・ファンクションGetGeometryを作成します。

create type long_lat as object (
longitude number,
latitude number,
member function GetGeometry(SELF in long_lat)
RETURN SDO_GEOMETRY DETERMINISTIC)
/

create or replace type body long_lat as
member function GetGeometry(self in long_lat)
return SDO_GEOMETRY is
begin
return sdo_geometry(2001, 8307,
sdo_point_type(longitude, latitude, NULL), NULL,NULL);
end;
end;
/

空間データ表が存在しない場合は、TEST_LONG_LATという表を作成する次の例に示すとおり、空間データ表を作成し、その表にデータを追加します。

create table test_long_lat
(location long_lat, name varchar2(32));

insert into test_long_lat values (long_lat(10,10), 'Place1');
insert into test_long_lat values (long_lat(20,20), 'Place2');
insert into test_long_lat values (long_lat(30,30), 'Place3');

ドット表記法を使用してスキーマ名、表名、ファンクション名およびパラメータ値を指定し、USER_SDO_GEOM_METADATAビューを更新します。次の例では、SCOTT.LONG_LAT.GetGeometry(LOCATION)をこのメタデータ・ビューのCOLUMN_NAME(2.8.2項を参照)として指定します。

insert into user_sdo_geom_metadata values('test_long_lat',
'scott.long_lat.GetGeometry(location)',
sdo_dim_array(
sdo_dim_element('Longitude', -180, 180, 0.005),
sdo_dim_element('Latitude', -90, 90, 0.005)), 8307);

ドット表記法を使用して列名およびファンクション名を指定し、空間索引を作成します。次に例を示します。

create index test_long_lat_idx on test_long_lat(location.GetGeometry())
indextype is mdsys.spatial_index;

データに対して問合せを実行します。次の問合せでは、点(10,10)と空間的に相互作用するジオメトリの名前を要求する1次フィルタ処理を実行します。

SELECT a.name FROM test_long_lat a
WHERE SDO_FILTER(a.location.GetGeometry(),
SDO_GEOMETRY(2001, 8307,
SDO_POINT_TYPE(10,10,NULL), NULL, NULL)
) = 'TRUE';

第II部

SpatialのWebサービス

このマニュアルは、次のように構成されています。

- 第I部では、Oracle Spatialの概念および使用方法について説明します。

- 第II部では、Oracle SpatialのWebサービスの概念および使用方法について説明します。

- 第III部では、Oracle Spatialの演算子、ファンクションおよびプロシージャに関するリファレンス情報について説明します。

- 第IV部では、補足情報(付録および用語集)を示します。

第II部に含まれる章は、次のとおりです。

- 第10章「SpatialのWebサービスの概要」

- 第11章「住所データのジオコーディング」

- 第12章「ビジネス・ディレクトリ(イエロー・ページ)のサポート」

- 第13章「ルーティング・エンジン」

- 第14章「OpenLSのサポート」

- 第15章「Web Feature Service(WFS)のサポート」

- 第16章「Catalog Services for the Web(CSW)のサポート」

- 第17章「SpatialのWebサービスのセキュリティに関する考慮事項」

10 SpatialのWebサービスの概要

この章では、Oracle SpatialでサポートされるWebサービスについて説明します。Webサービスを使用すると、Oracle Spatialアプリケーションの開発者は、アプリケーション・ユーザーに対してフィーチャ・データおよびメタデータをWeb経由で提供できます。

この章の内容は次のとおりです。

注意:
SpatialのWeb Feature Service (WFS)のサポートまたはCatalog Services for the Web (CSW)のサポートを使用している場合、および1つ以上のSYS.XMLTABLEINDEXの索引を使用して索引付けされた以前のリリースのデータがある場合は、アップグレード前に関連付けられた索引を削除し、アップグレード後に索引を再作成する必要があります。
詳細は、A.3項を参照してください。

- 10.1項「SpatialのWebサービスの種類」

- 10.2項「SpatialのWebサービスのユーザーの種類」

- 10.3項「SpatialのWebサービスのクライアントの設定」

- 10.4項「サンプルJavaクライアントのデモ・ファイル」

10.1 SpatialのWebサービスの種類

Oracle Spatialでは、次の種類のWebサービスが提供されます。

- ジオコーディング: ユーザーは、住所を空間位置(経度と緯度の座標)に関連付けることができます。ジオコーディングのサポートについては、第11章を参照してください。

- イエロー・ページ: ユーザーは位置との関係に基づいて、名前別またはカテゴリ別にビジネス情報を検索できます。イエロー・ページのサポートについては、第12章を参照してください。

- ルーティング: 1つまたは複数のルートについて道路情報や案内を提供します。ルーティングのサポートについては、第13章を参照してください。

- OpenLS: ジオコーディング、マッピング、ルーティングおよびイエロー・ページに対するOpen Location Services Initiative(OpenLS)仕様に基づいて、位置情報をベースにしたサービスを提供します。OpenLSのサポートについては、第14章を参照してください。

- Web Feature Services(WFS): ユーザーは、位置または非空間属性との関係に基づいて、フィーチャ(道路、川など)を検索できます。WFSのサポートについては、第15章を参照してください。

- Catalog Services for the Web (CSW): カタログ・サービスに対するOpen GIS Consortium仕様のOracle Spatialの実装を記述します。この仕様によると、カタログ・サービスは、データ、サービスおよび関連する情報オブジェクトについての記述情報(メタデータ)の集合をパブリッシュおよび検索する機能をサポートしています。CSWのサポートについては、第16章を参照してください。

Webサービスのセキュリティに関する考慮事項については、第17章を参照してください。

10.2 SpatialのWebサービスのユーザーの種類

一般的な業務では、SpatialのWebサービス・アプリケーションを実装するユーザーには、次のような種類のユーザーが含まれます。

- Webサービスのインフラストラクチャを設定する管理者。管理者は、データベース・ユーザーの作成、新規および既存のデータベース・ユーザーに対する権限とアクセス権の付与、複数のデータベース・ユーザーに影響するその他の操作などを行います。Web Feature Servicesでは、フィーチャ表の登録、フィーチャ・タイプのパブリッシュ、および特定のアカウントのロック解除を行います。
たとえば、管理者は、インフラストラクチャを設定して、道路や川などの空間フィーチャにアクセスできるようにします。

- 空間データおよびメタデータを作成および管理するアプリケーション開発者。開発者は、空間データ表を作成し、空間索引を作成して、行をUSER_SDO_GEOM_METADATAビューに挿入し、Spatialのファンクションおよびプロシージャを使用してアプリケーション・ロジックを実装します。
たとえば、アプリケーション開発者は、道路や川の表を作成し、アプリケーション・ロジックを実装することで、エンド・ユーザーが空間問合せ条件に基づいて道路や川を検索できるようにします。

- Webブラウザを使用してサービスにアクセスするエンド・ユーザー。
たとえば、エンド・ユーザーは、特定の川から1マイル以内にあるすべての道路、またはその川を横断するすべての道路などの検索を行います。

管理者の立場から見ると、アプリケーション開発者もエンド・ユーザーもすべてユーザーです。これは、それぞれのニーズに合わせてデータベース・ユーザーを作成する必要があるためです。アプリケーション開発者は、空間表を作成および管理し、Oracle Spatialのファンクションおよびプロシージャを使用するための十分な権限を持つユーザーとして、データベースに接続します。これに対し、エンド・ユーザーは、通常、データへの読取り専用アクセスや制限付きの書込みアクセスなど、制限されたアクセス権限を持つデータベース・ユーザーとして、データベースにアクセスします。

SpatialのWebサービスに関する章は、エンド・ユーザー向けではなく、管理者およびアプリケーション開発者を対象としています。

10.3 SpatialのWebサービスのクライアントの設定

SpatialのWebサービスを使用するには、DBAロールを持つ管理者として、次の項目を確認する必要があります。

- $ORACLE_HOME/md/jlib/sdows.earファイルがOC4Jインスタンスにデプロイされている。

- (sdows.earファイルのデプロイ先としてデフォルトの場所を受け入れた場合)必要なデータベース接続が<j2ee_home>/home/applications/sdows/META-INF/data-sources.xmlファイルに定義されている。このファイルでは、OpenLSやWFSなど、すべてのWebサービスで使用可能なデータベースの接続が定義されます。

次に、Webサービスの動作を制御する<j2ee_home>/home/applications/sdows/sdows/WEB-INF/conf/WSConfig.xmlファイルを調べて変更します。例10-1に、Oracleが提供しているWSConfig.xmlファイルを示します。このファイルは、ご使用のシステム環境に合わせて変更する必要があります。このファイルおよびその他のファイルの変更方法については、(10.4項「サンプルJavaクライアントのデモ・ファイル」に示す) wsclient.jarデモ・ファイルのReadme.txtファイルを参照してください。

例10-1 WSConfig.xmlファイル

<?xml version="1.0"?>
<!-- This is the configuration file for Oracle 11g Spatial WS. -->
<!-- Note: All paths are resolved relative to where the WEB-INF directory
is located, unless specified as an absolute path name.
-->

<WSConfig>

<!-- ****************************************************************** -->
<!-- ************************ Logging Settings ************************ -->
<!-- ****************************************************************** -->

<!-- Uncomment the following to modify logging. Possible values are:
log_level = "fatal"|"error"|"warn"|"info"|"debug"|"finest"
default: info) ;
log_thread_name = "true" | "false" ;
log_time = "true" | "false" ;
one or more log_output elements.
-->
<!--
<logging log_level="info" log_thread_name="false"
log_time="true">
<log_output name="System.err" />
<log_output name="log/ws.log" />
</logging>
-->

<!-- ****************************************************************** -->
<!-- ********************** WFS Cache Settings ************************ -->
<!-- ****************************************************************** -->

<!--
Uncomment the cached_feature_types tag to specify the list of feature types that are cached.
By default no feature types are cached.
-->
<!--
<cached_feature_types>
<feature_type ns="http://www.example.com/myns1" name="ROADS1" />
<feature_type ns="http://www.example.com/myns2" name="HIGHWAYS" />
</cached_feature_types>
-->

<!--
Uncomment the wfs_cache_sync_interval tag to specify the interval in
milliseconds in which the WFS Cache Synchronization thread will run.
Default is 10000 millisec.
-->
<!--
<wfs_cache_sync_interval>10000</wfs_cache_sync_interval>
-->

<!-- ****************************************************************** -->
<!-- ********************* WFS Parameters********************* -->
<!-- ****************************************************************** -->

<!--
Uncomment the wfs_admin_conn_name tag to specify the name of the connection in oc4j
data-sources.xml configuration file for the spatial_wfs_admin_usr.
Default value is jdbc/WFS_ADMIN_CONN_NAME.
-->
<!--
<wfs_admin_conn_name>jdbc/WFS_ADMIN_CONN_NAME</wfs_admin_conn_name>
-->

<!--
Uncomment the wfs_query_timeout tag to specify the query timeout value,
which is used, when server-side locking API is called.
The value of this tag can be a non-negative integer, and its unit is seconds.
Default value is 10 seconds.
-->
<!--
<wfs_query_timeout>10</wfs_query_timeout>
-->

<!--
Uncomment the wfs_lock_expiry tag to configure the default wfs lock expiry value,
which is the expiry time for wfs locks, if lock expiry value is not
explicitly specified in GetFeatureWithLock or LockFeature requests.
The value of this tag can be a non-negative integer, and its unit is minutes.
Default value is 4 minutes.
-->
<!--
<wfs_lock_expiry>4</wfs_lock_expiry>
-->

<!--
Uncomment the wfs_xsd_loc_url tag to specify the URL of WFS / GML 2.1.2 specification XSDs on your server.
This MUST be provided.
-->

<!--
<wfs_xsd_loc_url>http://machine:port/xsds/</wfs_xsd_loc_url>
-->

<!--
Uncomment the wfs_ex_xsd_loc_url tag to specify the URL of OGC Exception specification XSDs on your server.
WFS Exceptions are reports as per this XSD. If this tag is not provided then it will be initialized with
the value provided for wfs_xsd_loc_url (by default).
-->

<!--
<wfs_ex_xsd_loc_url>http://machine:port/xsds/</wfs_ex_xsd_loc_url>
-->

<!--
Uncomment the gml3_xsd_loc_url tag to specify the URL of GML 3.1.1 specification XSDs on your server.
This is needed ONLY when using GML3.1.1.
-->

<!--
<gml3_xsd_loc_url>http://machine:port/xsds/</gml3_xsd_loc_url>
-->

<!-- ****************************************************************** -->
<!-- ********************** CSW Cache Settings ************************ -->
<!-- ****************************************************************** -->

<!--
<cached_record_types>
<record_type ns="http://www.opengis.net/cat/csw" name="Record" />
</cached_record_types>
<csw_cache_sync_interval>10000</csw_cache_sync_interval>
<csw_cache_id>CSW_CACHE_ID</csw_cache_id>
-->

<!-- ****************************************************************** -->
<!-- ********************* CSW Parameters********************* -->
<!-- ****************************************************************** -->
<!--
<csw_admin_conn_name>CSW_ADMIN_CONN_NAME</csw_admin_conn_name>
-->

<!--
Uncomment the csw_xsd_loc_url tag to specify the URL of CSW 2.0.0 specification XSDs on your server.
-->

<!--
<csw_xsd_loc_url>http://machine:port/xsds/</csw_xsd_loc_url>
-->

<!--
Uncomment the csw_ex_xsd_loc_url tag to specify the URL of OWS Exception specification XSDs on your server.
CSW Exceptions are reports as per this XSD. If this tag is not provided then it will be initialized with
the value provided for csw_xsd_loc_url (by default).
This MUST be provided if you are running CSW.
-->
<!--
<csw_ex_xsd_loc_url>http://machine:port/xsds/</csw_ex_xsd_loc_url>
-->

<!-- ****************************************************************** -->
<!-- ********************* Guest and XML user parameters ************** -->
<!-- ****************************************************************** -->

<Handlers>
<OpenLS>
<JavaClass>           oracle.spatial.ws.openls.OpenLsHandler </JavaClass>
<Anonymous_xml_user>  SpatialWsXmlUser                       </Anonymous_xml_user>
<Proxy_management>
<Proxy_authentication/>

<!--
or
<Application_user_management/>
or
<Fixed_app_user/>
-->

</Proxy_management>
</OpenLS>

<WFS>
<JavaClass>           oracle.spatial.wfs.WFSHandler </JavaClass>
<Anonymous_xml_user>  SpatialWsXmlUser                       </Anonymous_xml_user>
<Proxy_management>    <Proxy_authentication/>                </Proxy_management>
</WFS>
<CSW>
<JavaClass>           oracle.spatial.csw.CSWHandler </JavaClass>
<Anonymous_xml_user>  SpatialWsXmlUser                       </Anonymous_xml_user>
<Proxy_management>    <Proxy_authentication/>                </Proxy_management>
</CSW>
<SpatialWS_Sdo_Request>
<JavaClass>           oracle.spatial.ws.svrproxy.SdoRequestHandler </JavaClass>
<Anonymous_xml_user>  SpatialWsXmlUser                       </Anonymous_xml_user>
<Proxy_management>    <Proxy_authentication/>                </Proxy_management>
</SpatialWS_Sdo_Request>
<SpatialWS_Sdo_Test_Request>
<JavaClass>           oracle.spatial.ws.svrproxy.SdoTestRequestHandler </JavaClass>
<Anonymous_xml_user>  SpatialWsXmlUser                       </Anonymous_xml_user>
<Proxy_management>    <Proxy_authentication/>                </Proxy_management>
</SpatialWS_Sdo_Test_Request>
<Network>
<JavaClass>           oracle.spatial.network.xml.NetworkWSHandler </JavaClass>
<Proxy_management>    <Fixed_app_user/>                      </Proxy_management>
</Network>
</Handlers>
</WSConfig>

また、ご使用の環境でサポートするWebサービスに応じて、特定のタスクを実行する必要があります。権限を作成し、データベース・ユーザーに付与する必要がある場合があります。さらに、特別なデータ(ジオコーディング用など)のダウンロードおよびロード、または構成ファイルの変更が必要な場合もあります。特定の要件については、個別のWebサービスに関する章を参照してください。

10.4 サンプルJavaクライアントのデモ・ファイル

SpatialのWebサービスをすぐに使用できるようにするために、Oracleでは、ソース・コードを含む.jarファイル(wsclient.jar)、およびサンプルJavaクライアントを設定するための関連ファイルが提供されています。このファイルを使用するには、次の手順を実行します。

1. Spatialのデモ・ディレクトリで、wsclient.jarを検索します。

2. 選択したディレクトリに、wsclient.jarを展開(解凍)します。
.jarファイルのすべてのファイルの最上位ディレクトリは、srcという名前になります。

3. srcディレクトリにあるReadme.txtファイルを参照し、その手順に従ってください。
Readme.txtファイルには、詳細な説明とガイドラインが記載されています。

11 住所データのジオコーディング

ジオコーディングとは、住所を空間位置(経度と緯度の座標)に関連付ける処理のことです。この章の内容は次のとおりです。

- 11.1項「ジオコーディングの概念」

- 11.2項「ジオコーディングのデータ型」

- 11.3項「ジオコーディング機能の使用」

- 11.4項「場所名からのジオコーディング」

- 11.5項「ジオコーディングのデータ構造」

- 11.7項「ジオコーディング・サービス(XML API)の使用」

11.1 ジオコーディングの概念

この項では、Spatialのジオコーディング機能を使用する前に理解しておく必要がある概念について説明します。

11.1.1 住所の表現

ジオコードする住所は、形式化された住所または形式化されていない住所のいずれかとして表現できます。

形式化された住所は、住所の様々な部分に対する一連の属性で記述されます。住所には、表11-1に示す属性の一部またはすべてを含めることができます。

表11-1 正式な住所表現の属性

住所の属性

説明

Name

場所の名前(オプション)。

Intersecting street

交差する通りの名前(オプション)。

Street

通りの住所(家やビルの番号を含む)、通りの名前、通りの種類(Street、Road、Blvdなど)および他の情報。

今回のリリースでは、通り名の最初の4文字がジオコーディング・データ内の通り名と一致しないと、一致する可能性がある通り名として認識されません。

Settlement

住所が属する最低レベルの行政区域。ほとんどの場合、これは市です。ヨーロッパの一部の国では、Settlementが大都市の一部の区域である可能性があります。この場合、その大都市はMunicipalityになります。

Municipality

Settlementより1つ上の行政区域。Municipalityは米国の住所には使用されません。ヨーロッパの国では、市にSettlementが含まれ、その市がMunicipalityになります。

Region

Municipality(存在する場合)より1つ上の行政区域、Municipalityが存在しない場合はSettlementより1つ上の行政区域。米国ではRegionは州ですが、他の一部の国ではRegionは県です。

Postal code

郵便番号(行政区域情報が提供されている場合はオプション)。米国では、郵便番号は5桁です。

Postal add-on code

郵便番号に付随する文字列。米国では通常、Postal add-on codeは「5-4」形式で指定される9桁の郵便番号の末尾4桁の番号を示します。

Country

国名またはISOの国コード。

形式化された住所は、SDO_GEO_ADDRデータ型を使用して指定されます(11.2.1項を参照)。

形式化されていない住所は、該当する国の住所形式に情報が含まれる行で記述されます。住所の行には、ジオコーディングに必要な情報を含める必要があります。また、ジオコーディングに必要ない情報(処理されていない住所内の一般的な情報)が含まれる場合もあります。形式化されていない住所は、文字列の配列として格納されます。たとえば、住所が「22 Monument Square」や「Concord, MA 01742」などの文字列で構成される場合があります。

形式化されていない住所は、SDO_KEYWORDARRAYデータ型を使用して指定されます(11.2.3項を参照)。

11.1.2 一致モード

ジオコーディング操作の一致モードは、入力された住所の属性が、ジオコーディングに使用されているデータとどの程度一致する必要があるかを決定します。入力された住所では、同じものが異なる方法で表現されていてもかまいません(Streetと短縮形のStなど)。また、小さい間違いが含まれてもかまいません(通りの住所と市の名前が正しく、その市にその通りの住所が1つしか存在しない場合に、郵便番号を間違えるなど)。

入力された住所とジオコーディングに使用されるデータが完全に一致しないと、ジオコーディングが実行されないように要求できます。または、一部の属性に対して、入力された住所にある程度の不一致または誤りが含まれている場合でもジオコーディングが実行されるように、要件を緩和することもできます。表11-2に、一致モードとその意味を示します。SDO_GEO_ADDRデータ型(11.2.1項を参照)のMatchMode属性、およびジオコーディングのファンクションまたはプロシージャのmatch_modeパラメータには、この表の値を使用します。

表11-2 ジオコーディング操作の一致モード

一致モード

説明

EXACT

入力された住所のすべての属性が、ジオコーディングに使用されるデータと一致する必要があります。ただし、家やビルの番号、通りのベース名、通りの種類、通りの接頭辞および通りの接尾辞のいずれもジオコーディング・データと一致しない場合、郵便番号、市や町の名前(Settlement)、州の名前の順で最初に一致した位置が戻されます。たとえば、通りの名前が正しくない場合でも有効な郵便番号が指定されている場合は、その郵便番号の位置が戻されます。

RELAX_STREET_TYPE

通りの種類が、ジオコーディングに使用されるデータと異なっていてもかまいません。たとえば、ジオコーディングに使用されるデータにMain Stが含まれている場合、Main Streetも一致します。同様に、該当する区域にMain BlvdおよびMainという名前の他の通りが存在しない場合は、Main Blvdも一致します。

RELAX_POI_NAME

対象点の名前が、ジオコーディングに使用されるデータと一致する必要がありません。たとえば、Jones State Park がジオコーディングに使用されるデータに含まれる場合、そのデータに類似した名前または他に一致する名前がなければ、Jones State Pk およびJones Park も一致します。

RELAX_HOUSE_NUMBER

家やビルの番号および通りの種類が、ジオコーディングに使用されるデータと異なっていてもかまいません。たとえば、123 Main St がジオコーディングに使用されるデータに含まれている場合、データに類似した名前または他に一致する名前がなければ、123 Main Lane および124 Main St も一致します。

RELAX_BASE_NAME

通りのベース名、家やビルの番号および通りの種類が、ジオコーディングに使用されるデータと異なっていてもかまいません。たとえば、Pleasant Valley という通りのベース名が、ジオコーディングに使用されるデータに含まれている場合、データに類似した名前または他に一致する名前がなければ、Pleasant Vale も一致します。

RELAX_POSTAL_CODE

郵便番号(提供されている場合)、通りのベース名、家やビルの番号および通りの種類が、ジオコーディングで使用されるデータと異なっていてもかまいません。

RELAX_BUILTUP_AREA

住所が、同じ郡内であれば、指定された市の外側であってもかまいません。このモードには、RELAX_POSTAL_CODEの説明も当てはまります。

RELAX_ALL

RELAX_BUILTUP_AREAと同じです。

DEFAULT

RELAX_POSTAL_CODEと同じです。

11.1.3 一致コード

一致コードは、入力された住所のどの属性がジオコーディングに使用されるデータと一致したかを示す番号です。一致コードは、出力されるSDO_GEO_ADDRオブジェクトのMatchCode属性に格納されます(11.2.1項を参照)。

表11-3に、一致コードのすべての値を示します。

表11-3 ジオコーディング操作の一致コード

一致コード

説明

1

完全に一致しています。市の名前、郵便番号、通りのベース名、通りの種類(該当する場合は、接尾辞または接頭辞(あるいはその両方)も含む)および家またはビルの番号が、ジオコーディングに使用されるデータと一致しています。

2

市の名前、郵便番号、通りのベース名、および家またはビルの番号がジオコーディングに使用されるデータと一致していますが、通りの種類、接尾辞または接頭辞が一致していません。

3

市の名前、郵便番号および通りのベース名がジオコーディングに使用されるデータと一致していますが、家またはビルの番号が一致していません。

4

市の名前および郵便番号がジオコーディングに使用されるデータと一致していますが、通りの住所が一致していません。

10

市の名前がジオコーディングに使用されるデータと一致していますが、郵便番号が一致していません。

11

郵便番号がジオコーディングに使用されているデータと一致していますが、市の名前が一致していません。

11.1.4 出力されたジオコード済住所のエラー・メッセージ

注意:
ErrorMessage属性(この項を参照)のかわりに、MatchVector属性(11.1.5項を参照)を使用することをお薦めします。

出力されたジオコード済住所では、SDO_GEO_ADDRオブジェクトのErrorMessage属性(11.2.1項を参照)に、ジオコーディングに使用されるデータと一致した住所の属性を示す文字列が含まれます。ジオコーディング操作の開始前、その文字列は値???????????281C??に設定されており、属性が一致すると、それを反映してその値が変更されます。

表11-4に、文字列内の文字位置、および各位置に対応する住所属性を示します。また、属性が一致した場合にその位置に設定される文字値も示します。

表11-4 ジオコードされた住所のエラー・メッセージの解釈

位置

属性

一致した場合の値

1-2

(将来使用するために予約済)

??

3

住所地点

X

4

POI名

O

5

家またはビルの番号

#

6

通りの接頭辞

E

7

通りのベース名

N

8

通りの接尾辞

U

9

通りの種類

T

10

補足情報

S

11

市街地または市

B

12-13

(予約されています)

(これらの位置にある値はすべて無視されます。)

14

地域

1

15

国

C

16

郵便番号

P

17

郵便付加番号

A

11.1.5 出力されたジオコード済住所の一致ベクトル

出力されたジオコード済住所では、SDO_GEO_ADDRオブジェクトのMatchVector属性(11.2.1項を参照)に、各住所の属性がジオコーディングに使用されるデータとどのように一致したかを示す文字列が含まれます。この属性では、ErrorMessage属性(11.1.4項を参照)に比べて、各住所の属性の一致ステータスに関して、より正確で詳細な情報が提供されます。ジオコーディング操作の開始前、その文字列は値?????????????????に設定されています。この文字列の各文字は、住所属性の一致ステータスを示しています。

表11-5に、文字列内の文字位置、および各位置に対応する住所属性を示します。次の表では、それぞれの文字位置の値が示す内容について説明します。

表11-5 ジオコードされた住所の一致ベクトルの解釈

位置

属性

1-2

(将来使用するために予約済)

3

住所地点

4

POI名

5

家またはビルの番号

6

通りの接頭辞

7

通りのベース名

8

通りの接尾辞

9

通りの種類

10

補足情報

11

市街地または市

14

地域

15

国

16

郵便番号

17

郵便付加番号

表11-5の各文字位置には、次の可能な数値のいずれかを含めることができます。

- 0: 入力属性がNULL以外で、NULL以外の値に一致します。

- 1: 入力属性がNULLで、NULL値に一致します。

- 2: 入力属性がNULL以外で、異なるNULL以外の値に置き換えられます。

- 3: 入力属性がNULL以外で、NULL値に置き換えられます。

- 4: 入力属性がNULLで、NULL以外の値に置き換えられます。

11.2 ジオコーディングのデータ型

この項では、ジオコーディングのファンクションおよびプロシージャ固有のデータ型について説明します。

11.2.1 SDO_GEO_ADDR型

SDO_GEO_ADDRオブジェクト型は、住所を記述するために使用されます。ジオコードされた住所がSDO_GCDRファンクションまたはSDO_GCDRプロシージャで出力された場合、SDO_GEO_ADDR型のオブジェクトとして格納されます。

表11-6に、SDO_GEO_ADDR型の属性を示します。属性が関連しない場合があることに注意してください。ジオコードされた住所の出力に使用される属性は、入力された住所の地理的な内容(特に国)によって異なります。

表11-6 SDO_GEO_ADDR型の属性

属性

データ型

説明

Id

NUMBER

(未使用。)

AddressLines

SDO_KEYWORDARRAY

住所の行。(SDO_KEYWORDARRAY型の詳細は、11.2.3項を参照。)

PlaceName

VARCHAR2(200)

対象点(POI)の名前。(たとえば、CALIFORNIA PACIFIC MEDICAL CTR)

StreetName

VARCHAR2(200)

通りの種類を含む通りの名前。(たとえば、MAIN ST)

IntersectStreet

VARCHAR2(200)

交差する通り。

SecUnit

VARCHAR2(200)

アパートやビルの番号などの補足情報。

Settlement

VARCHAR2(200)

住所が属する最低レベルの行政区域。(表11-1を参照。)

Municipality

VARCHAR2(200)

Settlementより1つ上の行政区域。(表11-1を参照。)

地域

VARCHAR2(200)

Municipality(存在する場合)より1つ上の行政区域。Municipalityが存在しない場合はSettlementより1つ上の行政区域 (表11-1を参照。)

国

VARCHAR2(100)

国名またはISOの国コード。

PostalCode

VARCHAR2(20)

郵便番号(行政区域情報が提供されている場合はオプション)。米国では、郵便番号は5桁です。

PostalAddOnCode

VARCHAR2(20)

郵便番号に付随する文字列。米国では通常、Postal add-on codeは「5-4」形式で指定される9桁の郵便番号の末尾4桁の番号を示します。

FullPostalCode

VARCHAR2(20)

郵便番号と郵便付加番号を含む完全な郵便番号。

POBox

VARCHAR2(100)

私書箱番号。

HouseNumber

VARCHAR2(100)

家またはビルの番号。(たとえば、123 MAIN STの123)

BaseName

VARCHAR2(200)

通りのベース名。(たとえば、123 MAIN STのMAIN)

StreetType

VARCHAR2(20)

通りの種類。(たとえば、123 MAIN STのST)

StreetTypeBefore

VARCHAR2(1)

(未使用。)

StreetTypeAttached

VARCHAR2(1)

(未使用。)

StreetPrefix

VARCHAR2(20)

通りの接頭辞。(たとえば、123 S MAIN STのS)

StreetSuffix

VARCHAR2(20)

通りの接尾辞。(たとえば、123 MAIN ST NEのNE)

Side

VARCHAR2(1)

道路セグメントをその方向に従って(つまり、道路セグメントの開始ノードから終了ノードに向かって)移動すると想定した場合に、家が建っている通りの側(左側はL、右側はR)。住居番号は、増加していくことも、減少していくこともあります。

Percent

NUMBER

0から1の数値(パーセント値を求めるには100を掛けます)で、道路セグメントの方向に従って通りを移動した距離を示します。

EdgeID

NUMBER

道路区画の端のID。

ErrorMessage

VARCHAR2(20)

エラー・メッセージ(11.1.4項を参照)。注意: ErrorMessage属性のかわりに、MatchVector属性を使用することをお薦めします。

MatchCode

NUMBER

一致コード(11.1.3項を参照)。

MatchMode

VARCHAR2(30)

一致モード(11.1.2項を参照)。

Longitude

NUMBER

経度値。

Latitude

NUMBER

緯度値。

MatchVector

VARCHAR2(20)

各住所の属性がジオコーディングに使用されるデータとどのように一致したかを示す文字列(11.1.5項を参照)。

SDO_GEO_ADDRオブジェクト全体を戻すか、またはドット表記法を使用して属性を指定できます。例11-1に、San Francisco市庁舎の住所をジオコードする文を示します。最初の文はSDO_GEO_ADDRオブジェクト全体を戻し、残りの文はいくつかの特定の属性を戻します。

例11-1 ジオコーディング、および住所オブジェクトと特定の属性の取得

SELECT SDO_GCDR.GEOCODE('SCOTT',
SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA  94102'),
'US', 'RELAX_BASE_NAME') FROM DUAL;

SDO_GCDR.GEOCODE('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','SANFRANCISCO
--------------------------------------------------------------------------------
SDO_GEO_ADDR(0, SDO_KEYWORDARRAY(), NULL, 'CARLTON B GOODLETT PL', NULL, NULL, '
SAN FRANCISCO', NULL, 'CA', 'US', '94102', NULL, '94102', NULL, '1', 'CARLTON B
GOODLETT', 'PL', 'F', 'F', NULL, NULL, 'L', .01, 23614360, '????#ENUT?B281CP?',
1, 'RELAX_BASE_NAME', -122.41815, 37.7784183, '????0101010??000?')

SELECT SDO_GCDR.GEOCODE('SCOTT',
SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA  94102'),
'US', 'RELAX_BASE_NAME').StreetType  FROM DUAL;

SDO_GCDR.GEOCODE('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','SANFRANCISCO
--------------------------------------------------------------------------------
PL

SELECT SDO_GCDR.GEOCODE('SCOTT',
SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA  94102'),
'US', 'RELAX_BASE_NAME').Side  RROM DUAL;

S
-
L

SELECT SDO_GCDR.GEOCODE('SCOTT',
SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA  94102'),
'US', 'RELAX_BASE_NAME').Percent  FROM DUAL;

SDO_GCDR.GEOCODE('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','SANFRANCISCO
--------------------------------------------------------------------------------
.01

SELECT SDO_GCDR.GEOCODE('SCOTT',
SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA  94102'),
'US', 'RELAX_BASE_NAME').EdgeID  FROM DUAL;

SDO_GCDR.GEOCODE('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','SANFRANCISCO
--------------------------------------------------------------------------------
23614360

SELECT SDO_GCDR.GEOCODE('SCOTT',
SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA  94102'),
'US', 'RELAX_BASE_NAME').MatchCode  FROM DUAL;

SDO_GCDR.GEOCODE('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','SANFRANCISCO
--------------------------------------------------------------------------------
1

SELECT SDO_GCDR.GEOCODE('SCOTT',
SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA  94102'),
'US', 'RELAX_BASE_NAME').MatchVector  FROM DUAL;

SDO_GCDR.GEOCODE('SC
--------------------
????0101010??000?

11.2.2 SDO_ADDR_ARRAY型

SDO_ADDR_ARRAY型は、住所のジオコード結果を格納するために使用されるSDO_GEO_ADDRオブジェクト(11.2.1項を参照)のVARRAYです。ジオコーディング操作の結果、複数の住所アドレスが一致すると、複数の住所オブジェクトが戻される可能性があります。

SDO_ADDR_ARRAY型は、次のとおり定義されます。

CREATE TYPE sdo_addr_array AS VARRAY(1000) OF sdo_geo_addr;

11.2.3 SDO_KEYWORDARRAY型

SDO_KEYWORDARRAY型は、形式化されていない住所の住所行を格納するために使用されるVARCHAR2文字列のVARRAYです。(形式化された住所と形式化されていない住所については、11.1.1項を参照してください。)

SDO_KEYWORDARRAY型は、次のとおり定義されます。

CREATE TYPE sdo_keywordarray AS VARRAY(10000) OF VARCHAR2(9000);

11.3 ジオコーディング機能の使用

Oracle Spatial and Graphのジオコーディング機能を使用するには、ジオコーディングのベンダーから提供されるデータを使用する必要があり、また、そのデータは、Oracle Spatial and Graphのジオコーディング機能でサポートされる形式である必要があります。ジオコーディングの詳細は、次のURLを参照してください。

http://www.oracle.com/technetwork/database/options/spatialandgraph/learnmore/sol-n-tech-idx-alt1-213053.html#geocoding

ジオコーディング・データを使用して住所をジオコードするには、SDO_GCDR PL/SQLパッケージ・サブプログラム(第23章を参照)を使用します。

- SDO_GCDR.GEOCODEファンクションは、形式化されていない住所をジオコードして、SDO_GEO_ADDRオブジェクトを戻します。

- SDO_GCDR.GEOCODE_ADDRファンクションは、SDO_GEO_ADDRオブジェクトの属性を使用して、入力された住所をジオコードし、最初に一致した住所をSDO_GEO_ADDRオブジェクトとして戻します。

- SDO_GCDR.GEOCODE_ADDR_ALLファンクションは、SDO_GEO_ADDRオブジェクトの属性を使用して、入力された住所をジオコードし、一致した住所をSDO_ADDR_ARRAYオブジェクトとして戻します。

- SDO_GCDR.GEOCODE_AS_GEOMETRYファンクションは、形式化されていない住所をジオコードして、SDO_GEOMETRYオブジェクトを戻します。

- SDO_GCDR.GEOCODE_ALLファンクションは、形式化されていない住所に関連付けられているすべての住所をジオコードし、結果をSDO_ADDR_ARRAYオブジェクト(住所オブジェクトの配列)として戻します。

- SDO_GCDR.REVERSE_GEOCODEファンクションは、空間ジオメトリ・オブジェクトと国で指定された場所を逆にジオコードし、結果をSDO_GEO_ADDRオブジェクトとして戻します。

11.4 場所名からのジオコーディング

場所の名前(対象点)はわかっていても、その位置の詳細情報がわからない場合は、例11-2に示すように、入力パラメータのplacenameとcountryからSDO_GEO_ADDRオブジェクトを作成するPL/SQLファンクションを作成できます。この例では、create_addr_from_placenameというファンクションが作成されます。この例のSELECT文は、create_addr_from_placenameファンクションで作成した住所を、SDO_GCDR.GEOCODE_ADDRファンクションを使用してジオコードしています。

例11-2 場所名と国からのジオコーディング

create or replace function create_addr_from_placename(
placename varchar2,
country varchar2)
return sdo_geo_addr
deterministic
as
addr sdo_geo_addr ;
begin
addr := sdo_geo_addr() ;
addr.country := country ;
addr.placename := placename ;
addr.matchmode := 'default' ;
return addr ;
end;
/

SELECT sdo_gcdr.geocode_addr('SCOTT',
create_addr_from_placename('CALIFORNIA PACIFIC MEDICAL CTR', 'US'))
FROM DUAL;

いくつかの位置情報(行政区域、郵便番号など)がわかっている場合、それらの情報を指定すると、より優れたパフォーマンスが得られます。例11-3には、追加のパラメータに対応するcreate_addr_from_placenameファンクションの別バージョンを示しています。このバージョンのファンクションをコールするには、placenameおよびcountryパラメータに実際の値を指定し、他の入力パラメータについては実際の値またはNULLを指定します。

例11-3 場所名、国および他のフィールドからのジオコーディング

create or replace function create_addr_from_placename(
placename varchar2,
city varchar2,
state varchar2,
postalcode varchar2,
country varchar2)
return sdo_geo_addr
deterministic
as
addr sdo_geo_addr ;
begin
addr := sdo_geo_addr() ;
addr.settlement := city ;
addr.region := state ;
addr.postalcode := postalcode ;
addr.country := country ;
addr.placename := placename ;
addr.matchmode := 'default' ;
return addr ;
end;
/

SELECT sdo_gcdr.geocode_addr('SCOTT',
create_addr_from_placename('CALIFORNIA PACIFIC MEDICAL CTR',
'san francisco', 'ca', null, 'US')) FROM DUAL;

11.5 ジオコーディングのデータ構造

Oracleでは、次の表を使用してジオコーディングを行います。

- GC_PARSER_PROFILES

- GC_PARSER_PROFILEAFS

- GC_COUNTRY_PROFILE

- GC_AREA_<接尾辞>

- GC_POSTAL_CODE_<接尾辞>

- GC_ROAD_SEGMENT_<接尾辞>

- GC_ROAD_<接尾辞>

- GC_POI_<接尾辞>

- GC_INTERSECTION_<接尾辞>

GC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表には、サポートされるすべての国の住所形式の定義が格納されています。これらの表は、内部の住所パーサーが住所フィールドに住所を解析する際に使用されます。この2つの表のデータは、データ・プロバイダまたはOracleから提供されます。(これらの表がデータ・プロバイダから提供されていない場合は、11.6項に示すようにインストールしてから移入を行う必要があります。)他の表には、データ・ベンダーから提供されるジオコーディング・データが格納されます。

ジオコーディング・データが含まれる表を所有する各ユーザー(SDO_GCDRサブプログラムをコールする際にusernameパラメータで指定可能なユーザー)は、GC_PARSER_PROFILES表、GC_PARSER_PROFILEAFS表およびGC_COUNTRY_PROFILE表をそれぞれ1つずつ所有している必要があります。このユーザーは、他の表(GC_xxx_<接尾辞>)については、複数のセットを所有できます。表名の末尾の接尾辞が同じ表のセットには、それぞれ1つの国のジオコーディング・データが格納されます。たとえば、次の表のセットを使用すると、米国のジオコーディング・データを格納できます。

- GC_AREA_US

- GC_POSTAL_CODE_US

- GC_ROAD_SEGMENT_US

- GC_ROAD_US

- GC_POI_US

- GC_INTERSECTION_US

1つの国のジオコーディング・データを、複数の表セットに格納することはできません。表の接尾辞は、データ・ベンダーによって定義され、GC_COUNTRY_PROFILE表のGC_TABLE_SUFFIX列に規定されています(11.5.3項を参照)。

これ以降の項では、ベンダーが提供する、ジオコーディング・データが格納される表について、表名のアルファベット順に説明します。

11.5.11項では、ジオコーディングにこれらの表を使用するために作成する必要のある索引について説明します。

11.5.1 GC_ADDRESS_POINT_<接尾辞>表と索引

GC_ADDRESS_POINT_<接尾辞>表(たとえば、GC_ADDRESS_POINT_US)には、表名接尾辞に関連付けられている国(または国のグループ)の住所の地理(経度、緯度)座標が格納されます。この表はジオコーディングにとって必須ではありません(ただし、点ベースのジオコーディングでは必須)が、この表を使用すると、ジオコーダはより正確な位置結果を生成します。スキーマで示されている場合は、自動的に使用されます。この表には、表に格納される住所ごとに行が1つ含まれ、表11-7に示す列があります。

表11-7 GC_ADDRESS_POINT_<接尾辞>表

表" title="GC_ADDRESS_POINT_<接尾辞>表" width="100%">

列名

データ型

説明

ADDRESS_POINT_ID

NUMBER(10)

住所地点のID番号。(必須)

ROAD_ID

NUMBER

住所地点に位置する道路のID番号。(必須)

ROAD_SEGMENT_ID

NUMBER(10)

住所地点に位置する道路の道路セグメントのID番号。(必須)

SIDE

VARCHAR2(1)

住所地点に位置する道路の側。可能な値はL(左側)またはR(右側)です。(必須)

LANG_CODE

VARCHAR2(3)

住所地点に関連付けられている言語の、3文字のISO各国語コード。(必須)地点

HOUSE_NUMBER

VARCHAR2(600 CHAR)

住所地点の住居番号(数字以外の文字を含むことも可能)。(必須)

PERCENT

NUMBER

道路セグメントの長さに対する住所点の位置の割合値。これは、セグメントの開始点から住所点までの距離を道路セグメントの長さで除算して求められます。(必須)。

ADDR_LONG

NUMBER(10)

住所地点の経度値。(必須)

ADDR_LAT

NUMBER(10)

住所地点の緯度値。(必須)

COUNTRY_CODE_2

VARCHAR2(2)

住所地点が属する国の2文字のISO国コード。(必須)

PARTITION_ID

NUMBER

ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須)

GC_ADDRESS_POINT_<接尾辞>表を使用する場合は、次の形式の文を使用して表に索引を作成する必要があります。

CREATE INDEX idx_<suffix>_addrpt_addr ON gc_address_point_<suffix> (road_segment_id, road_id, house_number, side);

11.5.2 GC_AREA_<接尾辞>表

GC_AREA_<接尾辞>表(たとえば、CG_AREA_US)には、その表名の接尾辞に関連付けられた国の管理領域情報が格納されます。この表には、管理領域ごとに行が1つ含まれ、表11-8に示す列があります。

表11-8 GC_AREA_<接尾辞>表

表" title="GC_AREA_<接尾辞>表" width="100%">

列名

データ型

説明

AREA_ID

NUMBER(10)

領域ID番号。(必須)

AREA_NAME

VARCHAR2(64)

領域名。(必須)

LANG_CODE

VARCHAR2(3)

領域に関連付けられている言語の、3文字のISO各国語コード。(必須)

ADMIN_LEVEL

NUMBER(1)

領域の管理階層レベル。(必須)

LEVEL1_AREA_ID

NUMBER(10)

領域が属するレベル1領域のID。管理階層のレベル1領域は国です。(必須)

LEVEL2_AREA_ID

NUMBER(10)

領域が属するレベル2領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(オプション)

LEVEL3_AREA_ID

NUMBER(10)

領域が属するレベル3領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(オプション)

LEVEL4_AREA_ID

NUMBER(10)

領域が属するレベル4領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(オプション)

LEVEL5_AREA_ID

NUMBER(10)

領域が属するレベル5領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(オプション)

LEVEL6_AREA_ID

NUMBER(10)

領域が属するレベル6領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(オプション)

LEVEL7_AREA_ID

NUMBER(10)

領域が属するレベル7領域のID(該当する場合)。この領域が属する管理階層のレベルごとに領域IDを指定する必要があります。(オプション)

CENTER_LONG

NUMBER

領域の中心の経度値。中心は、中心の経度および緯度の値に最も近い道路セグメントに設定されます。この2つの属性は、適切に設定することをお薦めします。これらの値が設定されていない場合、領域をジオコードして得られる経度および緯度の座標は、(0,0)になります。(オプション)

CENTER_LAT

NUMBER

領域の中心の緯度値。(CENTER_LONG列の説明を参照)。(オプション)

ROAD_SEGMENT_ID

NUMBER(10)

領域の中心が設定される道路セグメントのID。ジオコーダをOracle Spatialルーティング・エンジン(第13章を参照)と連携させるには、この値を正しく設定する必要があります(連携させる必要がない場合は、0 (ゼロ)以外の任意の値に設定できますが、NULLにはできません)。(必須)

POSTAL_CODE

VARCHAR2(16)

領域の中心の郵便番号。この属性は、正しく設定することをお薦めします。この値がNULLの場合、領域をジオコードした結果の郵便番号属性はNULLになります。(オプション)

COUNTRY_CODE_2

VARCHAR2(2)

領域が属する国の2文字のISO国コード。(必須)

PARTITION_ID

NUMBER

ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須)

REAL_NAME

VARCHAR2(64)

現地の言語で綴られた、領域の実際の名前。この列は、領域名が英語以外の場合に有効です。たとえば、MUNICHのドイツ語名はMÜNCHENです。MUNCHENと綴ることもできますが、REAL_NAMEの値は、MÜNCHENにする必要があります。ドイツ用の領域表では、MÜNCHENという名前とMUNCHENという名前の領域は同じ領域を指し、実際の名前は両方ともMÜNCHENです。領域名に英語以外の文字が含まれない場合は、AREA_NAMEと同じ名前をREAL_NAMEに設定してください。(必須)

IS_ALIAS

VARCHAR2(1)

この領域が、正式な管理領域として認められている領域の別名である場合はT、そうでない場合はFです。たとえば、Manhattanは正式に認められた管理領域ではありませんが、New York市の一部として一般に通用しています。このような場合、ManhattanはNew York Cityの別名です。(必須)

NUM_STREETS

NUMBER

この領域内の通りの番号。(オプション)

11.5.3 GC_COUNTRY_PROFILE表

GC_COUNTRY_PROFILE表には、ジオコーダで使用する国プロファイルの情報が格納されます。この情報には、行政区域の階層定義、言語、およびデータ表とそれらの索引によって使用される表名の接尾辞が含まれます。この表には、サポートされている国ごとに行が1つ含まれ、表11-9に示す列があります。

表11-9 GC_COUNTRY_PROFILE表

列名

データ型

説明

COUNTRY_NAME

VARCHAR2(60)

国名。(必須)

COUNTRY_CODE_3

VARCHAR2(3)

3文字のISO国コード。(必須)

COUNTRY_CODE_2

VARCHAR2(2)

2文字のISO国コード。(必須)

LANG_CODE_1

VARCHAR2(3)

3文字のISO各国語コード。一部の国では、言語が複数あることがあります(その場合は、LANG_CODE_2やその他のLANG_CODE_nなどの列にも値が入ります)。(必須)

LANG_CODE_2

VARCHAR2(3)

3文字のISO各国語コード。(オプション)

LANG_CODE_3

VARCHAR2(3)

3文字のISO各国語コード。(オプション)

LANG_CODE_4

VARCHAR2(3)

3文字のISO各国語コード。(オプション)

NUMBER_ADMIN_LEVELS

NUMBER(1)

管理階層レベルの数。1つの国には、1から7(最大から最小)の最大7つの管理レベルを設定できます。最高レベルの領域(国)は、レベル1です。米国の場合の管理階層は、レベル1が国、レベル2が州、レベル3が郡、レベル4が市です。(必須)

SETTLEMENT_LEVEL

NUMBER(1)

Settlementの管理階層レベル。これは、住所処理で使用する最下位の領域レベルです。米国の場合は市レベルで、ヨーロッパの場合は、通常、市の小区域(レベル5)です。(必須)

MUNICIPALITY_LEVEL

NUMBER(1)

Municipalityの管理階層レベル。これは、住所処理で使用する下から2番目の領域レベルです。米国の場合は郡(レベル3)で、ヨーロッパの場合は、通常、市(レベル4)です。(オプション)

REGION_LEVEL

NUMBER(1)

Regionの行政レベルで、Municipalityレベルより1つ上のレベルです。米国の場合、これは州または住所処理で使用する下から3番目の領域レベル(レベル2)で、ヨーロッパの場合、これは認められている国の小区域(レベル2またはレベル3)です。(オプション)

SETTLEMENT_IS_OPTIONAL

VARCHAR2(1)

住所データでSettlement情報がオプションの場合はT、オプションでない(必要な)場合はFです。(必須)

MUNICIPALITY_IS_OPTIONAL

VARCHAR2(1)

住所データでMunicipality情報がオプションの場合はT、オプションでない(必要な)場合はFです。(必須)

REGION_IS_OPTIONAL

VARCHAR2(1)

住所データでRegion情報がオプションの場合はT、オプションでない(必要な)場合はFです。(必須)

POSTCODE_IN_SETTLEMENT

VARCHAR(1)

各郵便番号が1つのSettlement領域内のみに含まれることが必要な場合はT、複数のSettlement領域にまたがる場合はFです。(必須)

SETTLEMENT_AS_CITY

VARCHAR(1)

市の名前によってMunicipalityとSettlementの両方が識別できる場合はT、Settlementのみが識別できる場合はFです。たとえば、イギリスではLondonを、Municipality領域の名前とSettlement領域の名前(LondonというMunicipality領域に含まれる)の両方に使用できます。ヨーロッパの一部の国(イギリス、ベルギーなど)の大都市では、このようなことがよくあります。(必須)

CACHED_ADMIN_AREA_LEVEL

NUMBER

(将来使用するために予約済。)

GC_TABLE_SUFFIX

VARCHAR2(5)

GC_*データ表の国を識別する表名の接尾辞。たとえば、GC_TABLE_SUFFIXの値がUSの場合、その国のジオコーディング・データを持つ表の名前の末尾は_US(たとえば、CG_AREA_US)になります。(必須)

CENTER_LONG

NUMBER

領域の中心の経度値。(オプション)

CENTER_LAT

NUMBER

領域の中心の緯度値。(オプション)

SEPARATE_PREFIX

VARCHAR2(1)

通りの名前の接頭辞が通りの名前とは別の語になる場合はT、通りの名前と同じ語に含まれる場合はFです。たとえば、米国での通りの住所が123 N Main Stの場合、接頭辞はNで、通りの名前Mainと別になっています。(オプション、現在Oracleでは非使用)

SEPARATE_SUFFIX

VARCHAR2(1)

通りの名前の接尾辞が通りの名前とは別の語になる場合はT、通りの名前と同じ語に含まれる場合はFです。たとえば、米国での通りの住所が123 Main St NWの場合、接尾辞はNWで、通りの名前Mainおよび通りの種類Stとは別になっています。(オプション、現在Oracleでは非使用)

SEPARATE_STYPE

VARCHAR2(1)

通りの種類が通りの名前とは別の語になる場合はT、通りの名前と同じ語に含まれる場合はFです。たとえば、ドイツでの通りの住所が123 Beethovenstrassの場合、種類はstrassで、通りの名前Beethovenと同じ語の中に含まれています。(オプション、現在Oracleでは非使用)

AREA_ID

NUMBER

現在、Oracleでは使用していません。(オプション)

VERSION

VARCHAR2(10)

データのバージョン。最初のバージョンは、1.0です。(必須)

11.5.4 GC_INTERSECTION_<接尾辞>表

GC_INTERSECTION_<接尾辞>表(たとえば、GC_INTERSECTION_US)には、その表名の接尾辞に関連付けられた国(または国のグループ)の道路の交差点の情報が格納されます。交差点とは、複数の道路が出会うまたは交差する場所のことです。この表に含まれる列を、表11-10に示します。

表11-10 GC_INTERSECTION_<接尾辞>表

表" title="GC_INTERSECTION_<接尾辞>表" width="100%">

列名

データ型

説明

ROAD_ID_1

NUMBER

交差点に位置する1つ目の道路のID番号。(必須)

ROAD_SEGMENT_ID_1

NUMBER

交差点に位置する1つ目の道路の道路セグメントのID番号。(必須)

ROAD_ID_2

NUMBER

交差点に位置する2つ目の道路のID番号。(必須)

ROAD_SEGMENT_ID_2

NUMBER

交差点に位置する2つ目の道路の道路セグメントのID番号。(必須)

INTS_LONG

NUMBER

交差点の経度値。(必須)

INTS_LAT

NUMBER

交差点の緯度値。(必須)

HOUSE_NUMBER

NUMBER

交差点の住居番号の先頭の数字の部分。(11.5.10項の表11-16の後に示す住居番号の説明を参照)。(必須)

HOUSE_NUMBER_2

VARCHAR2(10)

交差点の住居番号の2番目の部分。(11.5.10項の表11-16の後に示す住居番号の説明を参照)。(必須)

SIDE

VARCHAR2(1)

交差点にある家屋が位置する通りの側。可能な値はL(左側)またはR(右側)です。(必須)

COUNTRY_CODE_2

VARCHAR2(2)

交差点にある家屋が属する国の2文字のISO国コード。(必須)

PARTITION_ID

NUMBER

ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須)

11.5.5 GC_PARSER_PROFILES表

GC_PARSER_PROFILES表には、通常、住所で検出されたキーワードに関する情報が格納されます。ジオコーダではキーワードを使用して、住居番号、道路名、市の名前、州の名前、郵便番号などの住所フィールドを識別します。キーワードには、通りの種類(road、street、drive、avenueなど)または通りの接頭辞または接尾辞(north、south、east、westなど)を指定できます。この表に含まれる列を、表11-11に示します。

表11-11 GC_PARSER_PROFILES表

列名

データ型

説明

COUNTRY_CODE

VARCHAR2(2)

キーワードの国の2文字のISO国コード。(必須)

KEYWORDS

SDO_KEYWORDARRAY

特定の住所フィールドのキーワードの単一配列。配列には、同じ意味で使用できる単語や単語の集まりおよび短縮形を含めることができます(たとえば、United States of America、USAおよびUnited Statesはすべて米国を指します)。この配列の最初の単語は、キーワードの公式なフル・ネーム(ある場合)である必要があります。米国では、住所を解析する際に400を超えるキーワードが使用されます。次に、米国データ・セットからのキーワード配列およびキーワードのいくつかの例を示しますが、各行に格納されるのは単一のSDO_KEYWORDARRAYオブジェクトのみです。

SDO_KEYWORDARRAY( 'UNITED STATES OF AMERICA','US', 'USA', 'UNITED STATES', 'U.S.A.', 'U.S.')

SDO_KEYWORDARRAY('AVENUE','AV', 'AVE', 'AVEN', 'AVENU', 'AVN', 'AVNUE', 'AV.','AVE.')

SDO_KEYWORDARRAY('40TH', 'FORTIETH')

SDO_KEYWORDARRAY('NEW YORK','NY')

SDO_KEYWORDARRAY('LIBRARY')

OUTPUT_KEYWORD

VARCHAR2(2000)

住所フィールドを表すためにジオコーダ・データで使用されるキーワード。これは、キーワード配列で使用されるキーワードのいずれかと同じである必要があります。出力キーワードはジオコーディング・データ表に格納されている住所とユーザーの入力を一致させるために使用されます。たとえば、出力キーワードAVがGC_ROAD_US表の通りの種類Avenueに対して使用される場合、ユーザーがキーワード(AVENUE、AV、AVE、AVEN、AVENU、AVN、AVNUE、AV.、AVE.)のいずれかを含む住所を入力すると必ず、キーワードはデータベースで住所を検索しやすいように解釈され、出力キーワードAVと一致します。次に、出力キーワードのいくつかの例を示しますが、各行に格納されるのは単一の出力キーワードのみです。

US

AV

40TH

NY

LIBRARY

SECTION_LABEL

VARCHAR2(30)

KEYWORDS列およびOUTPUT_KEYWORD列に表示されるキーワードのタイプを識別するために使用されるラベル。複数の異なるセクション・ラベルがありますが、各行の単一のセクション・ラベルのみがキーワードのタイプを識別するのに使用されます。

COUNTRY_NAME: 国名を表すために使用されるキーワードを識別します。

LOCALITY_KEYWORD_DICTIONARY: 位置(市区町村、都道府県、州など)にある単語を標準化された形式の単語に置き換えるために使用されるキーワードを識別します。たとえば、SaintがStに置き換えられると、市の名前Saint ThomasおよびSt. ThomasはSt Thomasに標準化され、データベースに格納されます。

PLACE_NAME_KEYWORD: レストランやホテルなどの対象点(POI)の名前のキーワードを識別します。

REGION_LIST: NY、New York、NH、New Hampshireなど、地域の既知の名前であるキーワードを識別します。識別された地域は、住所処理で使用する下から3番目の領域レベルまたは3番目に小さい領域に属する行政区域である必要があります。米国の場合、これは州レベルです(最下位の領域レベルまたは最小の領域は市レベルです)。

SECOND_UNIT_KEYWORD: Floor、#、Suite、Apartmentなど、2番目の単位の説明で使用するキーワードを識別します。

STREET_KEYWORD_DICTIONARY: (40THやFortiethなど)通りの名前の通りの種類以外のキーワードを標準化された形式に置き換えるために使用するキーワードを識別します。

STREET_PREFIX_KEYWORD: South、North、West、Eastなど、通りの名前の接頭辞のキーワードを識別します。

STREET_TYPE_KEYWORD: Road、Street、Driveなど、通りの種類のキーワードを識別します。

IN_LINE_STREET_TYPE_KEYWORD: ドイツの通りの名前Steinstrasseのstrasseなど、通りの名前にアタッチされている通りの種類のキーワードを識別します。

POSITION

VARCHAR2(1)

通り名に対して相対的な、キーワードの位置。これは、キーワードを実際の通りの名前の前に配置する(P)か、後に配置する(F)か、またはその両方(B)かを示します。したがって、有効なエントリはP、FおよびBのみです。米国では、ほとんどの通りの種類のキーワードは通りの名前の後に続きます(たとえば、通りの種類がBlvdの場合はHollywood Blvd)。ただし、フランスでは、通りの種類のキーワードは通りの名前の前に配置されます(たとえば、通りの種類がAvenueの場合はAvenue De Paris)。

SEPARATENESS

VARCHAR2(1)

キーワードが通りの名前と別になるかどうかを示します。キーワードは分離できる場合と(S)分離できない(N)場合があります。したがって、有効なエントリはSおよびNのみです。米国では、すべての通りの種類のキーワードは通りの名前とは別の語になります(たとえば、通りの種類がBlvdの場合はHollywood Blvd)。ただし、ドイツでは、通りの種類のキーワードは通りの名前と別になりません(たとえば、通りの種類がstrasseの場合はAugustenstrasse)。

11.5.6 GC_PARSER_PROFILEAFS表

GC_PARSER_PROFILEAFS表には、住所形式のXML定義が格納されます。XML文字列では、特定の国の各住所形式を記述します。Oracle Geocoder 10g以前では、J2EEジオコーダはこの表のかわりにcountry_name.pprファイルを使用します。country_name.pprファイルの内容はADDRESS_FORMAT_STRING属性の内容と同じです。この表に含まれる列を、表11-12に示します。

表11-12 GC_PARSER_PROFILEAFS表

列名

データ型

説明

COUNTRY_CODE

VARCHAR2(2)

国の2文字のISO国コード。(必須)

ADDRESS_FORMAT_STRING

CLOB

COUNTRY_CODE列で指定した国の住所形式を記述するXML文字列。(例11-4では、米国の住所形式のXML定義を示し、11.5.6.1項では、米国の住所形式の定義で使用される要素について説明します。)

例11-4に、米国の住所形式のADDRESS_FORMAT_STRING定義を示します。

例11-4 米国の住所形式のXML定義

<address_format unit_separator="," replace_hyphen="true">
<address_line>
<place_name />
</address_line>
<address_line>
<street_address>
<house_number>
<format form="0*" effective="0-1" output="$" />
<format form="0*1*" effective="0-1" output="$">
<exception form="0*TH" />
<exception form="0*ST" />
<exception form="0*2ND" />
<exception form="0*3RD" />
</format>
<format form="0*10*" effective="0-1" output="$" />
<format form="0*-0*" effective="0-1" output="$" />
<format form="0*.0*" effective="0-1" output="$" />
<format form="0* 0*/0*" effective="0-1" output="$" />
</house_number>
<street_name>
<prefix />
<base_name />
<suffix />
<street_type />
<special_format>
<format form="1* HWY 0*" effective="7-8" addon_effective="0-1" addon_output="$ HWY"/>
<format form="1* HIGHWAY 0*" effective="11-12" addon_effective="0-1" addon_output="$ HWY"/>
<format form="1* HWY-0*" effective="7-8" addon_effective="0-1" addon_output="$ HWY"/>
<format form="1* HIGHWAY-0*" effective="11-12" addon_effective="0-1" addon_output="$ HWY"/>
<format form="HWY 0*" effective="4-5" addon_output="HWY" />
<format form="HIGHWAY 0*" effective="8-9" addon_output="HWY" />
<format form="ROUTE 0*" effective="6-7" addon_output="RT" />
<format form="I 0*" effective="2-3" addon_output="I" />
<format form="11 0*" effective="3-4" addon_effective="0-1" />
<format form="I0*" effective="1-2" addon_output="I" />
<format form="I-0*" effective="2-3" addon_output="I" />
<format form="11-0*" effective="3-4" addon_effective="0-1" />
<format form="ROUTE-0*" effective="6-7" addon_output="RT" />
<format form="US0*" effective="2-3" addon_output="US" />
<format form="HWY-0*" effective="2-3" addon_output="US" />
<format form="HIGHWAY-0*" effective="8-9" addon_output="HWY" />
</special_format>
</street_name>
<second_unit>
<special_format>
<format form="# 0*" effective="2-3" output="APT $" />
<format form="#0*" effective="1-2" output="APT $" />
</special_format>
</second_unit>
</street_address>
</address_line>
<address_line>
<po_box>
<format form="PO BOX 0*" effective="7-8" />
<format form="P.O. BOX 0*" effective="9-10" />
<format form="PO 0*" effective="3-4" />
<format form="P.O. 0*" effective="5-6" />
<format form="POBOX 0*" effective="6-7" />
</po_box>
</address_line>
<address_line>
<city optional="no" />
<region optional="no" order="1" />
<postal_code>
<format form="00000" effective="0-4" />
<format form="00000-0000" effective="0-4" addon_effective="6-9" />
<format form="00000 0000" effective="0-4" addon_effective="6-9" />
</postal_code>
</address_line>
</address_format>

11.5.6.1 ADDRESS_FORMAT_STRINGの説明

GC_PARSER_PROFILEAFS表のADDRESS_FORMAT_STRING列には、有効な住所における住所フィールドの形式とそれらの位置指定が記述されます。通常、住所は複数の住所行で記述されるため、住所形式文字列は住所行で編成されます。

住所パーサーは、GC_PARSER_PROFILES表に定義されている各住所フィールドのキーワード定義と組み合せて、XML住所形式で定義された形式の説明を使用し、入力された住所を解析して個々の住所フィールドを識別します。

<address_format>要素

<address_format>要素には、unit_separator属性とreplace_hyphen属性が含まれます。unit_separator属性は、格納されたデータのフィールドを区切るために使用されます。デフォルトでは、これはカンマ(unit_separator=",")です。replace_hyphen属性は、ユーザーの入力のすべてのハイフンを空白に置き換えるかどうかを指定します。デフォルトでは、trueに設定されます(replace_hyphen="true") (つまり、データ表のすべての名前にはハイフンのかわりに空白が含まれている必要があります)。

replace_hyphen="true"の場合、ハイフンを含むデータ表の行政区域の名前は、replace_hyphen="true"の場合のジオコーディング時に照合されません(ただし、ハイフンを含むこれらの区域名は、GC_AREA表のREAL_NAME列に配置され、ジオコード結果の行政区域の名前として戻すことができます)。ただし、ハイフンを含むGC_ROAD表のNAME列の道路名は、ジオコーディング時に照合されますが、照合のパフォーマンスの低下が予想されます。

<address_line>要素

XML住所形式文字列の各<address_line>要素は、住所行の形式を説明します。各<address_line>要素には、通りの住所、市、州(地域または都道府県)、郵便番号など、個々の住所フィールドを説明する1つ以上の子要素を指定できます。これらの住所フィールドの要素は、住所フィールドが有効な住所に表示される順序で表示されます。住所フィールドが必須の場合、住所フィールド要素のoptional属性は、"no"に設定されます。デフォルトでは、住所フィールドの要素はオプションです。

<format>要素

住居番号、特別な通りの名前、郵便箱および郵便番号の要素の形式の説明は、単一または複数の<format>要素で指定されます。各<format>要素は、特定の住所フィールドの有効なレイアウトおよび値の範囲を指定します。次の例では、特別な通りの名前を定義するために使用される形式について説明します。

<format
form="1* HWY 0*"
effective="7-8"
output="$"
addon_effective="0-1"
addon_output="$ HIGHWAY" />

form属性は、正規表現に類似した文字列を使用して形式を説明します(1は任意のアルファベット文字を表し、0は任意の数字を表し、2は任意のアルファベット文字または任意の数字を表します。1*はすべてアルファベット文字で構成される文字列を指定し、0*はすべて数字で構成される文字列を指定し、2*は数字とアルファベット文字の任意の組合せで構成される文字列を指定します)。他のすべてのシンボルはそれ自身を表します。

form属性によって指定されたパターンに一致するすべての文字列は、その(親)住所フィールドの有効な文字列とみなされます。こうした有効な文字列は、属性effectiveおよびaddon_effectiveによって指定されたセグメントに分割できます。effective属性は、住所文字列のより重要なプライマリの部分を指定し、addon_effective属性は、住所文字列のセカンダリの部分を指定します。

- effective属性は、form属性の終了記述子の開始位置および終了位置を使用して、完全なパターンのサブストリングを指定します。前述の例のeffective="7-8"では、(位置0から数えて)位置7で開始し位置8で終了するサブストリング(form属性の最後で、0*によって定義されたサブストリング)を取得します。

- addon_effective属性は、form属性の開始記述子の開始位置および終了位置を使用して、完全なパターンのサブストリングを指定します。前述の例のaddon_effective="0-1"では、(位置0から数えて)位置0で開始し位置1で終了するサブストリング(form属性の最初で、1*によって定義されたサブストリング)を取得します。

output属性およびaddon_output属性は、それぞれeffective属性およびaddon_effective属性によって指定されたセグメントの住所文字列の出力形式を指定します。これらの出力形式は、住所の照合時に使用されます。シンボル$は一致する文字列を表し、その他のシンボルはそれ自身を表します。前述の例は、次のとおりです。

- output="$"の$は、effective属性で一致したサブストリングを表します。

- addon_output="$ HIGHWAY"の$ HIGHWAYは、addon_effective属性で一致したサブストリングを表し、空白の後に単語HIGHWAYが続きます。

前述の例の<format>要素を使用すると、form="1* HWY 0*"の場合、入力文字列'STATE HWY 580'は、effective=580、output=580、addon_effective=STATEおよびaddon_output=STATE HIGHWAYとなります。

<format>要素には、<exception>要素を含めることもできます。<exception>要素は、有効な形式であるが、住所フィールドから除外する必要がある文字列を指定します。たとえば、有効な数値0*1*(任意の数字の次に任意のアルファベット文字が続く)を含む<house_number>要素で、<exception form="0*TH" />を指定した場合、数字を含む(または含まない)、THで終わる住居番号はすべて除外する必要があることを意味します。

11.5.7 GC_POI_<接尾辞>表

GC_POI_<接尾辞>表(たとえば、GC_POI_US)には、その表名の接尾辞に関連付けられた国(または国のグループ)の対象点(POI)情報が格納されます。POIには、空港、記念碑、公園などの機能が含まれます。この表には、対象点ごとに1つ以上の行が含まれます。たとえば、1つのPOIに関連付けられているSettlementが複数ある場合は、そのPOIに対して複数行を格納できます。GC_POI_<接尾辞>表に含まれる列を、表11-13に示します。

表11-13 GC_POI_<接尾辞>表

表" title="GC_POI_<接尾辞>表" width="100%">

列名

データ型

説明

POI_ID

NUMBER

POIのID番号。(必須)

POI_NAME

VARCHAR2(64)

POIの名前。(必須)

LANG_CODE

VARCHAR2(3)

POI名に使用する言語の、3文字のISO各国語コード。(必須)

FEATURE_CODE

NUMBER

POIのフィーチャ・コード(データ・ベンダーがカテゴリ別にPOIを分類している場合)。(オプション)

HOUSE_NUMBER

VARCHAR2(10)

POIの住居番号(数字以外の文字を含むことも可能)。(必須)

STREET_NAME

VARCHAR2(80)

POIの道路の名前。(必須)

SETTLEMENT_ID

NUMBER(10)

POIが属するSettlementのID番号。(POIがSettlementに関連付けられている場合は必須)

MUNICIPALITY_ID

NUMBER(10)

POIが属するMunicipalityのID番号。(POIがMunicipalityに関連付けられている場合は必須)

REGION_ID

NUMBER(10)

POIが属するRegionのID番号。(POIがRegionに関連付けられている場合は必須)

SETTLEMENT_NAME

VARCHAR2(64)

POIが属するSettlementの名前。(POIがSettlementに関連付けられている場合は必須)

MUNICIPALITY_NAME

VARCHAR2(64)

POIが属するMunicipalityの名前。(POIがMunicipalityに関連付けられている場合は必須)

REGION_NAME

VARCHAR2(64)

POIが属するRegionの名前。(POIがRegionに関連付けられている場合は必須)

POSTAL_CODE

VARCHAR2(16)

POIの郵便番号。(必須)

VANITY_CITY

VARCHAR2(35)

一般的にPOIに関連付けられている市の名前(その市が、POIが含まれる実際の市とは異なる場合)。たとえば、London Heathrow空港は、実際にはグレーター・ロンドンの一部のHayesという町にありますが、この空港は、一般的にLondonのみに関連付けられる傾向があります。このような場合、VANITY_CITYの値はLondonです。(オプション)

ROAD_SEGMENT_ID

NUMBER

POIが位置する道路セグメントのID。(必須)

SIDE

VARCHAR2(1)

POIが位置する通りの側。可能な値はL(左側)またはR(右側)です。(必須)

PERCENT

NUMBER

道路に対するPOIの位置の割合値。これは、通りセグメントの開始点からPOIまでの距離を通りセグメントの長さで除算して求められます。(必須)

TELEPHONE_NUMBER

VARCHAR2(20)

POIの電話番号。(オプション)

LOC_LONG

NUMBER

POIの経度値。(必須)

LOC_LAT

NUMBER

POIの緯度値。(必須)

COUNTRY_CODE_2

VARCHAR2(2)

POIが属する国の2文字のISO国コード。(必須)

PARTITION_ID

NUMBER

ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須)

11.5.8 GC_POSTAL_CODE_<接尾辞>表

郵便番号が住所形式で使用される場合、GC_POSTAL_CODE_<接尾辞>表(たとえば、GC_POSTAL_CODE_US)には、その表名の接尾辞に関連付けられた国(または国のグループ)の郵便番号情報が格納されます。この表には、郵便番号ごとに1つ以上の行が含まれます(1つの郵便番号に関連付けられているSettlementが複数ある場合は、その郵便番号に対して複数行を格納できます)。GC_POSTAL_CODE_<接尾辞>表に含まれる列を、表11-14に示します。

表11-14 GC_POSTAL_CODE_<接尾辞>表

表" title="GC_POSTAL_CODE_<接尾辞>表" width="100%">

列名

データ型

説明

POSTAL_CODE

VARCHAR2(16)

郵便番号の領域の郵便番号。(必須)

SETTLEMENT_NAME

VARCHAR2(64)

郵便番号が属するSettlementの名前。(郵便番号がSettlementに関連付けられている場合は必須)

MUNICIPALITY_NAME

VARCHAR2(64)

郵便番号が属するMunicipalityの名前。(郵便番号がMunicipalityに関連付けられている場合は必須)

REGION_NAME

VARCHAR2(64)

郵便番号が属するRegionの名前。(郵便番号がRegionに関連付けられている場合は必須)

LANG_CODE

VARCHAR2(3)

領域に関連付けられている言語の、3文字のISO各国語コード。(必須)

SETTLEMENT_ID

NUMBER(10)

郵便番号が属するSettlementのID番号。(郵便番号がSettlementに関連付けられている場合は必須)

MUNICIPALITY_ID

NUMBER(10)

郵便番号が属するMunicipalityのID番号。(郵便番号がMunicipalityに関連付けられている場合は必須)

REGION_ID

NUMBER(10)

郵便番号が属するRegionのID番号。(郵便番号がRegionに関連付けられている場合は必須)

CENTER_LONG

NUMBER

郵便番号の領域の中心の経度値。中心(経度、緯度)値は、中心に最も近い道路セグメントの開始点または終了点(どちらか近い方の点)に設定されます。CENTER_LONG値およびCENTER_LAT値は、正しく設定することをお薦めします。これらの値が設定されていない場合、領域をジオコードして得られる経度と緯度の値は、(0,0)になります。(オプション)

CENTER_LAT

NUMBER

領域の中心の緯度値。(CENTER_LONG列の説明を参照)。(オプション)

ROAD_SEGMENT_ID

NUMBER(10)

領域の中心が設定される道路セグメントのID。ジオコーダをOracle Spatialルーティング・エンジン(第13章を参照)と連携させるには、この値を正しく設定する必要があります(連携させる必要がない場合は、0 (ゼロ)以外の任意の値に設定できますが、NULLにはできません)。(必須)

COUNTRY_CODE_2

VARCHAR2(2)

領域が属する国の2文字のISO国コード。(必須)

PARTITION_ID

NUMBER

ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須)

NUM_STREETS

NUMBER

この郵便番号の領域内の通りの番号。(オプション)

11.5.9 GC_ROAD_<接尾辞>表

GC_ROAD_<接尾辞>表(たとえば、GC_ROAD_US)には、その表名の接尾辞に関連付けられた国の道路情報が格納されます。道路は、同じSettlement領域内の同じ名前の道路セグメントの集合であり、道路セグメントは11.5.10項で定義されています。GC_ROAD_<接尾辞>表には、道路ごとに1つ以上の行が含まれます。(たとえば、1つの道路に関連付けられているSettlementが複数ある場合は、その道路に対して複数行を格納できます。)GC_ROAD_<接尾辞>表に含まれる列を、表11-15に示します。

表11-15 GC_ROAD_<接尾辞>表

表" title="GC_ROAD_<接尾辞>表" width="100%">

列名

データ型

説明

ROAD_ID

NUMBER

道路のID番号。(必須)

SETTLEMENT_ID

NUMBER(10)

道路が属するSettlementのID番号。(道路がSettlementに関連付けられている場合は必須)

MUNICIPALITY_ID

NUMBER(10)

道路が属するMunicipalityのID番号。(道路がMunicipalityに関連付けられている場合は必須)

PARENT_AREA_ID

NUMBER(10)

道路が属するMunicipalityの親領域のID番号。(道路が親領域に関連付けられている場合は必須)

LANG_CODE

VARCHAR2(3)

道路名に使用する言語の、3文字のISO各国語コード。(必須)

NAME

VARCHAR2(64)

道路の名前。種類、接頭辞、接尾辞がある場合は、それらも含みます。たとえば、NAMEとしてN Main Stを指定できます。(必須)

BASE_NAME

VARCHAR2(64)

道路の名前。種類、接頭辞、接尾辞がある場合は、それらを除外した名前です。たとえば、NAMEがN Main Stの場合、BASE_NAMEはMainです。(必須)

PREFIX

VARCHAR2(32)

道路名の接頭辞。たとえば、NAMEがN Main Stの場合、PREFIXはNです。(道路名に接頭辞がある場合は必須)

SUFFIX

VARCHAR2(32)

道路名の接尾辞。たとえば、NAMEがMain St NWの場合、SUFFIXはNWです。(道路名に接尾辞がある場合は必須)

STYPE_BEFORE

VARCHAR2(32)

ベース名の前に記述される通りの種類。たとえば、NAMEがAvenue Victor Hugoの場合、STYPE_BEFOREはAvenue、BASE_NAMEはVictor Hugoです。(ベース名の前に道路の種類がある場合は必須)

STYPE_AFTER

VARCHAR2(32)

ベース名の後ろに記述される通りの種類。たとえば、NAMEがMain Stの場合、STYPE_AFTERはSt、BASE_NAMEはMainです。(ベース名の後ろに道路の種類がある場合は必須)

STYPE_ATTACHED

VARCHAR2(1)

通りの種類が通りの名前と同じ語に含まれる場合はT、通りの名前とは別の語になる場合はFです。たとえば、ドイツでの通りの住所が123 Beethovenstrassの場合、通りの種類はstrassで、通りの名前Beethovenと同じ語の中に含まれています。(必須)

START_HN

NUMBER(5)

道路上の最も小さい住居番号。指定した住居番号がこの値よりも小さい場合に戻されます。

CENTER_HN

NUMBER(5)

中心住居番号の先頭の数字の部分。中心住居番号とは、道路セグメントの中央(道路全体の中央)の開始点の左側にある住居番号です。(11.5.10項の表11-16の後に示す住居番号の説明を参照)。入力された住所で住居番号が指定されていない場合に戻されます。(必須)

END_HN

NUMBER(5)

道路上の最も大きい住居番号。指定した住居番号がこの値よりも大きい場合に戻されます。

START_HN_SIDE

VARCHAR2(1)

最も小さい住居番号の道路の一方の側(左側はL、右側はR)。

CENTER_HN_SIDE

VARCHAR2(1)

中心住居番号の道路の一方の側(左側はL、右側はR)。中心住居番号とは、道路セグメントの中央(道路全体の中央)の開始点の左側にある住居番号です。(11.5.10項の表11-16の後に示す住居番号の説明を参照)。(道路上に家がある場合は必須)

END_HN_SIDE

VARCHAR2(1)

最も大きい住居番号の道路の一方の側(左側はL、右側はR)。

START_LONG

NUMBER

最も小さい住居番号の経度値。

START_LAT

NUMBER

最も小さい住居番号の緯度値。

CENTER_LONG

NUMBER

中心住居番号の経度値。中心住居番号とは、道路セグメントの中央(道路全体の中央)の開始点の左側にある住居番号です。(11.5.10項の表11-16の後に示す住居番号の説明を参照)。(必須)

CENTER_LAT

NUMBER

中心住居番号の緯度値。(CENTER_LONG列の説明も参照。)(必須)

END_LONG

NUMBER

最も大きい住居番号の経度値。

END_LAT

NUMBER

最も大きい住居番号の緯度値。

START_ROAD_SEG_ID

NUMBER(5)

道路の開始点の道路セグメントのID番号。

CENTER_ROAD_SEG_ID

NUMBER(5)

道路の中心点の道路セグメントのID番号。(必須)

END_ROAD_SEG_ID

NUMBER(5)

道路の終了点の道路セグメントのID番号。

POSTAL_CODE

VARCHAR2(16)

道路の郵便番号。(必須)

COUNTRY_CODE_2

VARCHAR2(2)

道路が属する国の2文字のISO国コード。(必須)

PARTITION_ID

NUMBER

ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須)

CENTER_HN2

VARCHAR2(10)

中心住居番号の2番目の部分。(11.5.10項の表11-16の後に示す住居番号の説明を参照)。(必須)

11.5.10 GC_ROAD_SEGMENT_<接尾辞>表

GC_ROAD_SEGMENT_<接尾辞>表(たとえば、GC_ROAD_SEGMENT_US)には、その表名の接尾辞に関連付けられた国の道路セグメント情報が格納されます。道路セグメントとは、道路に沿った2つの連続する交差点の間にある道路の部分で、交差点とは、複数の道路が出会うまたは交差する場所のことです。また、道路セグメントは、道路の開始点(または終了点)と道路に沿った最も近い交差点の間にある道路の部分でもあり、道路に沿った交差点がない場合は、道路の全長になります。GC_ROAD_SEGMENT_<接尾辞>表には、道路セグメントごとに行が1つ含まれ、表11-16に示す列があります。

表11-16 GC_ROAD_SEGMENT_<接尾辞>表

表" title="GC_ROAD_SEGMENT_<接尾辞>表" width="100%">

列名

データ型

説明

ROAD_SEGMENT_ID

NUMBER

道路セグメントのID番号。(必須)

ROAD_ID

NUMBER

この道路セグメントが含まれる道路のID番号。(必須)

L_ADDR_FORMAT

VARCHAR2(1)

左側の住所形式。道路セグメントの左側に住居番号が1つ以上ある場合は、Nを指定します。ない場合は、NULLのままにしておきます。(必須)

R_ADDR_FORMAT

VARCHAR2(1)

右側の住所形式。道路セグメントの右側に住居番号が1つ以上ある場合は、Nを指定します。ない場合は、NULLのままにしておきます。(必須)

L_ADDR_SCHEME

VARCHAR2(1)

道路セグメントの左側の住居番号の付与方法。O (すべて奇数)、E (すべて偶数)またはM (奇数と偶数の混在)を指定します。(必須)

R_ADDR_SCHEME

VARCHAR2(1)

道路セグメントの右側の住居番号の付与方法。O (すべて奇数)、E (すべて偶数)またはM (奇数と偶数の混在)を指定します。(必須)

START_HN

NUMBER(5)

この道路セグメント上の最も小さい住居番号。(必須)

END_HN

NUMBER(5)

この道路セグメント上の最も大きい住居番号。(必須)

L_START_HN

NUMBER(5)

左側の開始住居番号の先頭の数字部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(必須)

L_END_HN

NUMBER(5)

左側の終了住居番号の先頭の数字部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(必須)

R_START_HN

NUMBER(5)

右側の開始住居番号の先頭の数字部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(必須)

R_END_HN

NUMBER(5)

右側の終了住居番号の先頭の数字部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(必須)

POSTAL_CODE

VARCHAR2(16)

道路セグメントの郵便番号。道路セグメントの左側と右側で郵便番号が異なる場合は、POSTAL_CODE列を除くすべての列の値と一致する道路セグメントの行を2つ作成します。(必須)

GEOMETRY

SDO_GEOMETRY

道路セグメントを表す空間ジオメトリ・オブジェクト。(必須)

COUNTRY_CODE_2

VARCHAR2(2)

道路セグメントが属する国の2文字のISO国コード。(必須)

PARTITION_ID

NUMBER

ジオコーダ・データを地理的な境界でパーティション化する際に使用されるパーティション・キー。データがパーティション化されていない場合は、値を1に設定します。(必須)

L_START_HN2

VARCHAR2(10)

左側の開始住居番号の2番目の部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(左側の開始住居番号に2番目の部分がある場合は必須)

L_END_HN2

VARCHAR2(10)

左側の終了住居番号の2番目の部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(左側の終了住居番号に2番目の部分がある場合は必須)

R_START_HN2

VARCHAR2(10)

右側の開始住居番号の2番目の部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(右側の開始住居番号に2番目の部分がある場合は必須)

R_END_HN2

VARCHAR2(10)

右側の終了住居番号の2番目の部分(この表の後ろに示す住居番号の説明を参照)。(この表の後ろに示す住居番号の説明を参照。)(右側の終了住居番号に2番目の部分がある場合は必須)

住居番号は、道路セグメントに沿った建物の位置を識別しやすくする住所の記述的な部分です。住居番号は、2つの要素(先頭の数字部分とそれ以外の2番目の部分)に分けられます。先頭の数字部分は、住居番号の文字列全体の最初から始まり、数字以外の最初の文字の直前で終了する(数字以外の文字がある場合)、住居番号の数字の部分です。住居番号に数字以外の文字が含まれる場合は、文字列の数字以外の最初の文字から最後の文字までが、住居番号の2番目の部分になります。たとえば、住居番号が123の場合は、先頭の数字部分は123で、2番目の部分はNULLですが、住居番号が123A23の場合は、先頭の数字部分は123で、2番目の部分はA23です。

開始住居番号とは、道路セグメントの開始点の住居番号のことで、道路セグメントの開始点とは、道路セグメント・ジオメトリの最初の形状点です。終了住居番号とは、道路セグメントの終了点の住居番号のことで、道路セグメントの終了点とは、道路セグメント・ジオメトリの最後の形状点です。左側と右側の開始住居番号は、左側と右側の終了住居番号より大きくてもかまいません。データ表の住居番号属性は、道路セグメントに沿った建物の位置を確認する際に、これらの規則に準拠します。

11.5.11 ジオコーディングを行うための表の索引

ベンダーから提供される表を使用してジオコーディングを行うには、多くの表で索引を作成する必要があり、これらの索引の名前は特定の要件に従う必要があります。

例11-5に、必要な索引を作成するCREATE INDEX文の形式を示します。各文では、<suffix>で示されているすべての接尾辞を適切な文字列と置き換える(たとえば、米国の場合はUSと置き換える)必要があることを除いて、例11-5に示すように、索引名、表名、列名、および列名の順序(複数の列に索引が付けられている場合)を使用する必要があります。この例の最初の索引は空間索引であることに注意してください。オプションで、他の有効なキーワードや句をCREATE INDEX文に含めることもできます。

例11-5 ジオコーディングを行うための表に必要な索引

CREATE INDEX idx_<suffix>_road_geom ON gc_road_segment_<suffix> (geometry) INDEXTYPE IS mdsys.spatial_index;
CREATE INDEX idx_<suffix>_road_seg_rid ON gc_road_segment_<suffix> (road_id, start_hn, end_hn);
CREATE INDEX idx_<suffix>_road_id ON gc_road_<suffix> (road_id);
CREATE INDEX idx_<suffix>_road_setbn ON gc_road_<suffix> (settlement_id, base_name);
CREATE INDEX idx_<suffix>_road_munbn ON gc_road_<suffix> (municipality_id, base_name);
CREATE INDEX idx_<suffix>_road_parbn ON gc_road_<suffix> (parent_area_id, country_code_2, base_name);
CREATE INDEX idx_<suffix>_road_setbnsd ON gc_road_<suffix> (settlement_id, soundex(base_name));
CREATE INDEX idx_<suffix>_road_munbnsd ON gc_road_<suffix> (municipality_id, soundex(base_name));
CREATE INDEX idx_<suffix>_road_parbnsd ON gc_road_<suffix> (parent_area_id, country_code_2, soundex(base_name));
CREATE INDEX idx_<suffix>_inters ON gc_intersection_<suffix> (country_code_2, road_id_1, road_id_2);
CREATE INDEX idx_<suffix>_area_name_id ON gc_area_<suffix> (country_code_2, area_name, admin_level);
CREATE INDEX idx_<suffix>_area_id_name ON gc_area_<suffix> (area_id, area_name, country_code_2);
CREATE INDEX idx_<suffix>_poi_name ON gc_poi_<suffix> (country_code_2, name);
CREATE INDEX idx_<suffix>_poi_setnm ON gc_poi_<suffix> (country_code_2, settlement_id, name);
CREATE INDEX idx_<suffix>_poi_ munnm ON gc_poi_<suffix> (country_code_2, municipality_id, name);
CREATE INDEX idx_<suffix>_poi_ regnm ON gc_poi_<suffix> (country_code_2, region_id, name);
CREATE INDEX idx_<suffix>_ postcode ON gc_postal_code_<suffix> (country_code_2, postal_code);
CREATE INDEX idx_<suffix>_addrpt_addr ON gc_address_point_<suffix> (road_segment_id, road_id, house_number, side);

11.6 プロファイル表のインストール

通常、Oracle Geocoderプロファイル表は、データ・プロバイダから提供されます。データ・プロバイダのプロファイル表が利用可能であれば、ジオコーディングにはそれを使用してください。ジオコーダ・スキーマを独自に作成するユーザーに対しては、OracleのサンプルのGC_COUNTRY_PROFILE表、GC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表が用意されています(ただし、このようなOracle提供のプロファイル表をインストールする必要があるのは、プロファイル表のデータ表が提供されていない場合のみです)。

Oracle提供の表には、一部の国のパーサー・プロファイルのみ含まれています。対象となる国(または国のグループ)のプロファイルが含まれていない場合は、手動で追加する必要があります(簡単な手法として、対象となる国と住所形式が似ている国のパーサー・プロファイルをコピーし、それらのプロファイルを必要に応じて編集することもできます)。必要なパーサー・プロファイルがOracle提供の表に含まれている場合は、それをそのまま使用するか、必要に応じて更新します。サンプルの国プロファイルが提供されていない場合は、独自に追加する必要があります。

Oracle提供のプロファイル表をインストールして問い合せるには、次の手順を実行します。

1. ジオコーダ・ユーザーとしてデータベースにログオンします。ジオコーダ・ユーザーは、ジオコーダ・スキーマがロードされるスキーマの所有者です。

2. SDO_GCDR.CREATE_PROFILE_TABLESプロシージャを実行して、GC_COUNTRY_PROFILE表、GC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表を作成します。

SQL> EXECUTE SDO_GCDR.CREATE_PROFILE_TABLES;

3. $ORACLE_HOME/md/admin/ディレクトリにあるsdogcprs.sqlスクリプトを使用して、GC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表にデータを挿入します。次に例を示します。

SQL> @$ORACLE_HOME/md/admin/sdogcprs.sql

4. プロファイル表を問い合せて、対象となる国のパーサー・プロファイルがあるかどうかを確認します。これを行うには、その国のコードが次の文の出力に含まれているかどうかを確認します。

SQL> SELECT DISTINCT(country_code) FROM gc_parser_profiles ORDER BY country_code;
SQL> SELECT DISTINCT(country_code) FROM gc_parser_profileafs ORDER BY country_code;

11.7 ジオコーディング・サービス(XML API)の使用

SQL APIの他に、Oracle Spatialではジオコーディング・サービスのXML APIも提供され、これを使用して住所をジオコードすることができます。Javaジオコーダ・アプリケーション・エンジンでは、Oracle Databaseに格納されたジオコーダ・データを問い合せることによって、住所の国際標準化、ジオコーディング、およびPOIの一致が行われます。未解析の住所のサポートにより、顧客アプリケーションに柔軟性と利便性が追加されます。

このジオコーディング・サービスは、Java 2 Enterprise Edition (J2EE)のWebアプリケーションとして実装され、WebLogic Server、Oracle Application ServerまたはスタンドアロンのOracle Application Server Containers for J2EE (OC4J)環境にデプロイできます。

- ジオコーディング・サービスがスタンドアロンのOC4Jにデプロイされる場合、ユーザー名はoc4jadminになり、パスワードは、OC4Jインスタンスをインストールした際に指定した管理者パスワードになります。

- ジオコーディング・サービスをOracle Application Server全体にデプロイする場合、ジオコーディング・サービスが実行されるOC4Jインスタンスにセキュリティ・ユーザーを作成し、そのセキュリティ・ユーザーをジオコーディング・サービスの組込みセキュリティ・ロールGC_ADMIN_ROLEにマップしておく必要があります。これらのタスクをEnterprise Managerを使用して完了すると、そのセキュリティ・ユーザーの名前とパスワードを使用して、ジオコーディング・サービス管理者としてログインできるようになります。

図11-1に、ジオコーディング・サービスを使用する基本的なアクション・フローを示します(クライアントは、リモートのジオコーディング・サービス・インスタンスを探してジオコーディング・リクエストを送信し、ジオコーディング・サービス・インスタンスから戻されたレスポンスを処理します)。

図11-1 Spatialジオコーディング・サービスを使用した基本的なアクション・フロー

次に、図11-1について説明します。

1. クライアントは、ジオコードする1つ以上の入力住所を含むXMLジオコーディング・リクエストを、HTTPプロトコルを使用してジオコーディング・サービスに送信します。

2. ジオコーディング・サービスは、入力リクエストを解析して、入力住所をデータベース内で検索します。

3. ジオコーディング・サービスは、ジオコードされた結果をXML形式で、HTTPプロトコルを使用してクライアントに送信します。

データベースにジオコーダ・スキーマをロードした後、それを使用する前にJ2EEジオコーダを構成する必要があります(11.7.1項を参照)。

11.7.1 J2EEジオコーダのデプロイおよび構成

J2EEジオコーダはジオコーディング・リクエストを処理し、レスポンスを生成します。このジオコーディング・サービスを有効にするには、Oracle WebLogic Server、Oracle Application Server (OracleAS)またはOracle Application Server Containers for J2EE (OC4J)のスタンドアロンのインストールを使用して、($ORACLE_HOME/md/jlibにある)geocoder.earファイルをデプロイする必要があります。ジオコーディング・サービスをデプロイおよび構成するには、次の手順を実行します。

1. Oracle WebLogic Server、Oracle Application ServerまたはOC4Jを使用して、ジオコーダをデプロイします。

- Oracle WebLogic Serverを使用する場合: $ORACLE_HOME/md/jlibディレクトリにあるgeocoder.earファイルを展開します。geocoder.earファイルの名前を変更し、その内容を../geocoder.earというディレクトリに展開します。現在$geocoder.ear/ directoryの下にあるweb.warファイルの名前を変更し、その内容を../web.warというサブディレクトリに展開します。したがって、ディレクトリ構造は$geocoder.ear/web.war/となります。
geocoder.earファイルとweb.warファイルを展開した後、$ORACLE_HOME/LIB/ディレクトリにあるxmlparserv2.jarファイルを$geocoder.ear/web.war/WEB-INF/lib/ディレクトリにコピーします。

geocoder.earファイルをデプロイするには、WLSコンソール(たとえば、http://<hostname>:7001/console)にログオンし、「デプロイメント」からgeocoder.earファイルをインストールして、デプロイメントの名前geocoderを受け入れ、指定した位置からデプロイメントにアクセスできるようにするためのオプションを選択します。

- Oracle Application ServerまたはOC4Jを使用する場合: OracleASまたはスタンドアロンのOC4J Application Server Control (たとえば、http://<hostname>:8888/em)を使用して、$ORACLE_HOME/md/jlib directoryにあるgeocoder.earファイルをデプロイします。geocoder.earファイルを既存のOC4Jインスタンスにデプロイすることも、ジオコーダ用に新しいOC4Jインスタンスを作成することもできます。どちらの場合も、デプロイメント時に「アプリケーション名」にgeocoderと入力します。

2. http://<hostname>:<port>/geocoderのURLを使用して、WebブラウザでOracle Geocoderのようこそページを起動します。ようこそページで、「管理」リンクを選択し、管理者(weblogicまたはoc4jadmin)のユーザー名およびパスワードを入力します。

注意:
WebLogic Serverを使用し、デフォルトのWebLogic管理者のユーザー名を使用していない場合は、$geocoder.ear/web.war/WEB-INF/ディレクトリにあるweblogic.xmlファイルを編集する必要があります。<principal-name>weblogic</principal-name>をWebLogic Server管理者のユーザー名に置換します(<principal-name>my_weblogic_admin</principal-name>など)。

3. ジオコーダ構成ファイル(geocodercfg.xml)を変更します。少なくとも1つの<geocoder>要素のコメントを解除し、その<geocoder>要素の<database>要素属性を、データベースの構成が反映されるように変更します。このファイルの詳細は、11.7.1.1項を参照してください。

4. ファイルに対する変更を保存し、ジオコーダを再起動します。
ようこそページが表示されない場合は、新しくデプロイされたジオコーディング・サービスが正常に起動されたことを確認してください。ジオコーディング・サービスは、Oracle Databaseリリース11.2以上のgeocoder.earファイルでWebLogic Server 10.3.1.0以上を実行しているか、Oracle 11g以上のgeocoder.earファイルでOracle ASまたはOC4J 10.1.3以上を実行していることを前提としています。

5. http://<hostname>:<port>/geocoderのURLのようこそページに移動し、国際的な住所の解析、ジオコーディング・デモおよびXMLジオコーディング・リクエスト・ページを実行することによって、データベース接続を確認します。(これらのデモには、米国のジオコーダ・データが必要です。)
例は、ジオコーディング・サービスの様々な機能を実例を使用して説明するために使用できます。例を使用することは、XML API (11.7.2項を参照)の学習に適しています。

11.7.1.1 geocodercfg.xmlファイルの構成

Spatialに付属するデフォルトのgeocodercfg.xmlファイルの<database>要素を編集して、ジオコーディング・データがロードされるデータベースとスキーマを指定する必要があります。

このファイルの各<geocoder>要素は、ジオコーダ・スキーマが存在するデータベースのジオコーダを定義します。<database>要素は、ジオコーダのデータベース接続を定義します。Oracle 11g以上では、データベース接続を定義する方法が2つあります(JDBCデータベース接続パラメータを提供する方法と、事前定義のコンテナ・データ・ソースのJNDI名(container_ds)を提供する方法です)。

例11-6に、<database>要素を定義する2つの異なる方法を示します。1つ目の定義ではJDBC接続を指定し、2つ目の定義では事前定義のコンテナ・データ・ソースのJNDI名を使用しています。

例11-6 <database>要素定義

<database name="gcdatabase"
host="gisserver.us.oracle.com"
port="1521"
sid="orcl"
mode="thin"
user="geocoder_us"
password="geocoder_us"
load_db_parser_profiles="true" />

<database container_ds="jdbc/gc_europe"
load_db_parser_profiles="true" />

<database>要素の属性は次のとおりです。

- nameは、データベース接続の記述名です(データベースへの接続には使用されません)。

- host、portおよびsidにより、データベースを識別します。

- modeにより、接続のために使用するJDBCドライバの種類を識別します。

- userおよびpasswordは、ジオコーディング・データが格納されているスキーマに対する、データベース・ユーザーのユーザー名とパスワードです。

- load_db_parser_profilesは、指定されたデータベース接続から住所パーサー・プロファイルをロードするかどうかを指定します。trueの場合、住所パーサー・プロファイルはジオコーダ・スキーマからロードされ、それ以外の場合は、パーサー・プロファイルは../applications/geocoder/web/WEB-INF/parser_profiles/<country-name>.ppr (たとえば、usa.ppr)にあるアプリケーションからロードされます。Oracle 11gより前は、パーサー・プロファイルはアプリケーションからのみロードされていました。このパラメータはtrueに設定する必要があります。

- container_dsは、事前定義のデータ・ソースのJNDI名を指定します。

11.7.2 ジオコーディング・リクエストのXMLスキーマ定義および例

ジオコーディング・リクエスト(HTTP GETまたはPOSTメソッド)の場合、そのリクエストには、xml_requestというパラメータがあり、その値は、リクエストのXML文書が含まれる文字列であると想定されます。入力XML文書には、ジオコードを行うために必要な入力住所が記述されます。1つのXMLリクエストには、1つ以上の入力住所を含めることができます。いくつかの国際化された住所形式は、入力住所の記述に使用できます。(また、入力XML APIでは、経度/緯度で通りの住所を指定する、逆ジオコードもサポートされています。)

ジオコーディング・リクエストのXMLスキーマ定義(XSD)は、次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Schema for an XML geocoding request that takes one or more input_locations and supports reverse geocoding using the input_location's attributes -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:complexType name="address_lineType">
<xsd:attribute name="value" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="address_listType">
<xsd:sequence>
<xsd:element name="input_location" type="input_locationType"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="gdf_formType">
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="street" type="xsd:string"/>
<xsd:attribute name="intersecting_street" type="xsd:string"/>
<xsd:attribute name="builtup_area" type="xsd:string"/>
<xsd:attribute name="order8_area" type="xsd:string"/>
<xsd:attribute name="order2_area" type="xsd:string"/>
<xsd:attribute name="order1_area" type="xsd:string"/>
<xsd:attribute name="country" type="xsd:string"/>
<xsd:attribute name="postal_code" type="xsd:string"/>
<xsd:attribute name="postal_addon_code" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="gen_formType">
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="street" type="xsd:string"/>
<xsd:attribute name="intersecting_street" type="xsd:string"/>
<xsd:attribute name="sub_area" type="xsd:string"/>
<xsd:attribute name="city" type="xsd:string"/>
<xsd:attribute name="region" type="xsd:string"/>
<xsd:attribute name="country" type="xsd:string"/>
<xsd:attribute name="postal_code" type="xsd:string"/>
<xsd:attribute name="postal_addon_code" type="xsd:string"/>
</xsd:complexType>
<xsd:element name="geocode_request">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="address_list" type="address_listType"/>
</xsd:sequence>
<xsd:attribute name="vendor" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="input_addressType">
<xsd:choice>
<xsd:element name="us_form1" type="us_form1Type"/>
<xsd:element name="us_form2" type="us_form2Type"/>
<xsd:element name="gdf_form" type="gdf_formType"/>
<xsd:element name="gen_form" type="gen_formType"/>
<xsd:element name="unformatted" type="unformattedType"/>
</xsd:choice>
<xsd:attribute name="match_mode" default="relax_postal_code">
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="exact"/>
<xsd:enumeration value="relax_street_type"/>
<xsd:enumeration value="relax_poi_name"/>
<xsd:enumeration value="relax_house_number"/>
<xsd:enumeration value="relax_base_name"/>
<xsd:enumeration value="relax_postal_code"/>
<xsd:enumeration value="relax_builtup_area"/>
<xsd:enumeration value="relax_all"/>
<xsd:enumeration value="DEFAULT"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
<xsd:complexType name="input_locationType">
<xsd:sequence>
<xsd:element name="input_address" type="input_addressType"
minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string"/>
<xsd:attribute name="country" type="xsd:string"/>
<xsd:attribute name="longitude" type="xsd:string"/>
<xsd:attribute name="latitude" type="xsd:string"/>
<xsd:attribute name="x" type="xsd:string"/>
<xsd:attribute name="y" type="xsd:string"/>
<xsd:attribute name="srid" type="xsd:string"/>
<xsd:attribute name="multimatch_number" type="xsd:string" default="1000"/>
</xsd:complexType>
<xsd:complexType name="unformattedType">
<xsd:sequence>
<xsd:element name="address_line" type="address_lineType"
maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="us_form1Type">
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="street" type="xsd:string"/>
<xsd:attribute name="intersecting_street" type="xsd:string"/>
<xsd:attribute name="lastline" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="us_form2Type">
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="street" type="xsd:string"/>
<xsd:attribute name="intersecting_street" type="xsd:string"/>
<xsd:attribute name="city" type="xsd:string"/>
<xsd:attribute name="state" type="xsd:string"/>
<xsd:attribute name="zip_code" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>

例11-7に、異なる住所形式および形式化されていない住所を使用した、3つの住所(2つの異なる実際の物理的な住所を示す)をジオコードするリクエストを示します。

例11-7 ジオコーディング・リクエスト(XML API)

<?xml version="1.0" encoding="UTF-8"?>
<geocode_request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../geocode_request.xsd">
<address_list>
<input_location id="1">
<input_address>
<us_form2 name="Oracle" street="500 Oracle Parkway" city="Redwood City"
state="CA" zip_code="94021"/>
</input_address>
</input_location>
<input_location id="2">
<input_address>
<gdf_form street="1 Oracle Drive" builtup_area="Nashua" order1_area="NH"
postal_code="03062" country="US"/>
</input_address>
</input_location>
<input_location id="3">
<input_address>
<gen_form street="1 Oracle Drive" city="Nashua" region="NH" postal_code="03062" country="US"/>
</input_address>
</input_location>
<input_location id="4">
<input_address>
<unformatted country="UNITED STATES">
<address_line value="Oracle NEDC"/>
<address_line value="1 Oracle drive "/>
<address_line value="Nashua "/>
<address_line value="NH"/>
</unformatted>
</input_address>
</input_location>
</address_list>
</geocode_request>

11.7.3 ジオコーディング・レスポンスのXMLスキーマ定義および例

ジオコーディング・レスポンスには、経度/緯度の点、一致コード、複数の一致の可能性と一致なしの表示、エラー・メッセージなど、1つ以上の標準化された住所が含まれます。

ジオコーディング・レスポンスのXMLスキーマ定義(XSD)は、次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Schema for an XML geocoding response -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:complexType name="geocodeType">
<xsd:sequence>
<xsd:element name="match" type="matchType" minOccurs="0"
maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="match_count" type="xsd:string"/>
</xsd:complexType>
<xsd:element name="geocode_response">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="geocode" type="geocodeType" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="matchType">
<xsd:sequence>
<xsd:element name="output_address" type="output_addressType"/>
</xsd:sequence>
<xsd:attribute name="sequence" type="xsd:string" use="required"/>
<xsd:attribute name="longitude" type="xsd:string" use="required"/>
<xsd:attribute name="latitude" type="xsd:string" use="required"/>
<xsd:attribute name="match_code" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="0"/>
<xsd:enumeration value="1"/>
<xsd:enumeration value="2"/>
<xsd:enumeration value="3"/>
<xsd:enumeration value="4"/>
<xsd:enumeration value="10"/>
<xsd:enumeration value="11"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="error_message" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="output_addressType">
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="house_number" type="xsd:string"/>
<xsd:attribute name="street" type="xsd:string"/>
<xsd:attribute name="builtup_area" type="xsd:string"/>
<xsd:attribute name="order1_area" type="xsd:string"/>
<xsd:attribute name="order8_area" type="xsd:string"/>
<xsd:attribute name="country" type="xsd:string"/>
<xsd:attribute name="postal_code" type="xsd:string"/>
<xsd:attribute name="postal_addon_code" type="xsd:string"/>
<xsd:attribute name="side" type="xsd:string"/>
<xsd:attribute name="percent" type="xsd:string"/>
<xsd:attribute name="edge_id" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>

例11-8に、11.7.2項の例11-7のリクエストに対するレスポンスを示します。

例11-8 ジオコーディング・レスポンス(XML API)

<?xml version="1.0" encoding="UTF-8"?>
<geocode_response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../geocode_response.xsd">
<geocode id="1" match_count="1">
<match sequence="0"
longitude="-122.26193971893862" latitude="37.53195483966782"
match_code="10" error_message="????#ENUT?B281C??">
<output_address name="" house_number="500" street="ORACLE PKY"
builtup_area="REDWOOD CITY" order1_area="CA" order8_area=""
country="US" postal_code="94065" postal_addon_code="" side="L"
percent="0.33166666666666667" edge_id="28503563"/>
</match>
</geocode>
<geocode id="2" match_count="1">
<match sequence="0"
longitude="-71.45937299307225" latitude="42.70784494226865"
match_code="1" error_message="????#ENUT?B281CP?">
<output_address name="" house_number="1" street="ORACLE DR"
builtup_area="NASHUA" order1_area="NH" order8_area=""
country="US" postal_code="03062" postal_addon_code="" side="L"
percent="0.01" edge_id="22325991"/>
</match>
</geocode>
<geocode id="3" match_count="1">
<match sequence="0"
longitude="-71.45937299307225" latitude="42.70784494226865"
match_code="1" error_message="????#ENUT?B281CP?">
<output_address name="" house_number="1" street="ORACLE DR"
builtup_area="NASHUA" order1_area="NH" order8_area=""
country="US" postal_code="03062" postal_addon_code="" side="L"
percent="0.01" edge_id="22325991"/>
</match>
</geocode>
<geocode id="4" match_count="1">
<match sequence="0"
longitude="-71.45937299307225" latitude="42.70784494226865"
match_code="1" error_message="????#ENUT?B281CP?">
<output_address name="" house_number="1" street="ORACLE DR"
builtup_area="NASHUA" order1_area="NH" order8_area=""
country="US" postal_code="03062" postal_addon_code="" side="L"
percent="0.01" edge_id="22325991"/>
</match>
</geocode>
</geocode_response>

12 ビジネス・ディレクトリ(イエロー・ページ)のサポート

この章では、OpenLSビジネス・ディレクトリ(イエロー・ページ(YP))・サービスに対するOracle Spatialのサポートについて説明します。この章の主な内容は次のとおりです。

- 12.1項「ビジネス・ディレクトリの概念」

- 12.2項「ビジネス・ディレクトリ機能の使用」

- 12.3項「ビジネス・ディレクトリのサポートのデータ構造」

12.1 ビジネス・ディレクトリの概念

ビジネス・ディレクトリ・サービスでは、指定した名前またはカテゴリに一致する、指定した地域内のビジネス情報のリストを提供します。

ビジネス・ディレクトリ・データは、これらのデータのサードパーティ・プロバイダから取得されます。これらのプロバイダでは、多くの場合、異なるビジネス・カテゴリを使用しています。また、使用している階層構造が異なる場合もあります。様々な方法で統一されているパターンは、ビジネス情報が主題と場所によって分類されていることです。場所の要素はよく知られており、たとえば米国の場合は、場所の特定に郵便番号または都市および州の組合せ、さらにオプションで具体的な住所を使用して検索を開始できます。

一方、ビジネス情報の分類は統一された方法では実施されていません。一部のプロバイダでは、単純なサブストリングの一致を使用してユーザーが選択したカテゴリのフラット・リストを提供しています。その他のプロバイダでは、3レベルまたは4レベルからなるサブカテゴリの階層構成を提供し、各レベルのファンアウト(1つのレベルにおける子カテゴリの最大数)は多くの場合20から50、場合によっては100以上になります。ユーザーは、デフォルトでは階層のルートから階層のトラバースを開始できます。また、階層内の適切な開始点と一致するキーワードを入力することもできます。このようなキーワードの一致では、単純なサブストリングの一致と比べて、より効率的な選択を行うことができます。

12.2 ビジネス・ディレクトリ機能の使用

Oracle Spatialのビジネス・ディレクトリ機能を使用するには、ビジネス・ディレクトリ(YP)のベンダーから提供されるデータを使用する必要があり、また、そのデータは、Oracle SpatialのOpenLSでサポートされる形式である必要があります(12.3.1項「OPENLS_DIR_BUSINESSES表」を参照)。

ユーザーのディレクトリ・サービス・リクエストを送信してレスポンスを戻すには、OpenLS WebサービスAPI(14.2項を参照)を使用する必要があります。ディレクトリ・サービスのリクエストとレスポンスに関する情報とその例については、14.3項を参照してください。

12.3 ビジネス・ディレクトリのサポートのデータ構造

ビジネス・ディレクトリ・データを取得し、適切なプロシージャを起動してこれらのデータをデータベースにロードした後、プロシージャによって、ビジネス・ディレクトリのサポートに使用する次の表(すべてMDSYSスキーマが所有)が移入されます。

- OPENLS_DIR_BUSINESSES

- OPENLS_DIR_BUSINESS_CHAINS

- OPENLS_DIR_CATEGORIES

- OPENLS_DIR_CATEGORIZATIONS

- OPENLS_DIR_CATEGORY_TYPES

- OPENLS_DIR_SYNONYMS

表によっては、一部の行で列にNULL値が設定されます。これは、情報がこのインスタンスでは適用されなかったか、またはデータのプロバイダが値を提供していなかったことが原因です。

以降の項では、これらの表について、表名のアルファベット順に説明します。

12.3.1 OPENLS_DIR_BUSINESSES表

OPENLS_DIR_BUSINESSES表には、各ビジネス(住所を持つ各ビジネス)に関する情報が格納されます。ビジネスが大きなビジネス・チェーンの一部である場合、CHAIN_ID列はOPENLS_DIR_BUSINESS_CHAINS表(12.3.2項を参照)のCHAIN_ID列への外部キーとなります。

OPENLS_DIR_BUSINESSES表には、ビジネスごとに行が1つ含まれ、表12-1に示す列があります。

表12-1 OPENLS_DIR_BUSINESSES表

表" title="OPENLS_DIR_BUSINESSES表" width="100%">

列名

データ型

説明

BUSINESS_ID

NUMBER

ビジネスのID番号。(必須)

BUSINESS_NAME

VARCHAR2(128)

領域名。(必須)

CHAIN_ID

NUMBER

ビジネスがチェーンの一部である場合の、(OPENLS_BIR_BUSINESS_CHAIN表での)ビジネス・チェーンのID番号。

DESCRIPTION

VARCHAR2(1024)

ビジネスの説明。

PHONE

VARCHAR2(64)

場所に対して適切な形式で示されている電話番号。

COUNTRY

VARCHAR2(64)

国のコードまたは名前。(必須)

COUNTRY_SUBDIVISION

VARCHAR2(128)

国の小区域(該当する場合)。

COUNTRY_SECONDARY_SUBDIVISION

VARCHAR2(128)

COUNTRY_SUBDIVISION内の小区域(該当する場合)。

MUNICIPALITY

VARCHAR2(128)

市町村の名前。

MUNICIPALITY_SUBDIVISION

VARCHAR2(128)

MUNICIPALITY内の小区域(該当する場合)。

POSTAL_CODE

VARCHAR2(32)

郵便番号(たとえば、米国およびカナダでは5桁の郵便番号)。(必須)

POSTAL_CODE_EXT

VARCHAR2(32)

郵便番号の拡張部分(5-4形式の郵便番号を使用する場合は、4桁の拡張部分)。

STREET

VARCHAR2(128)

通りの住所(家や部屋の番号も含む)。(必須)

INTERSECTING_STREET

VARCHAR2(128)

この住所でSTREETと交差する通りの名前(該当する場合)。

BUILDING

VARCHAR2(128)

この住所を含むビルの名前。

PARAMETERS

XMLTYPE

ビジネスに関する追加情報を説明するXML文書。

GEOM

SDO_GEOMETRY

ビジネスの住所を示す点ジオメトリ。

12.3.2 OPENLS_DIR_BUSINESS_CHAINS表

OPENLS_DIR_BUSINESS_CHAINS表には、各ビジネス・チェーンに関する情報が格納されます。ビジネス・チェーンは、複数の関連ビジネスを持つビジネスです。たとえば、レストラン・チェーンには、同じ名前で基本的に同じメニューを提供する複数のレストランがあります。ビジネスがビジネス・チェーンの一部である場合は、OPENLS_DIR_BUSINESSES表(12.3.1項を参照)内のそのビジネスに関する行に、OPENLS_DIR_BUSINESS_CHAINS表のCHAIN_ID列の値と一致するCHAIN_ID列値が含まれます。

OPENLS_DIR_BUSINESS_CHAINS表には、ビジネス・チェーンごとに行が1つ含まれ、表12-2に示す列があります。

表12-2 OPENLS_DIR_BUSINESS_CHAINS表

表" title="OPENLS_DIR_BUSINESS_CHAINS表" width="100%">

列名

データ型

説明

CHAIN_ID

NUMBER

ビジネス・チェーンのID番号。(必須)

CHAIN_NAME

VARCHAR2(128)

ビジネス・チェーンの名前。

12.3.3 OPENLS_DIR_CATEGORIES表

OPENLS_DIR_CATEGORIES表には、ビジネスの分類先となる各カテゴリに関する情報が格納されます。データ・プロバイダがカテゴリ階層を使用する場合、この表には、子カテゴリの親カテゴリを示すPARENT_ID列を使用して、階層のすべてのレベルでカテゴリに関する行が含まれます。たとえば、レストランというカテゴリは、複数の子カテゴリ(中華など)の親である可能性があります。

OPENLS_DIR_CATEGORIES表には、カテゴリごとに行が1つ含まれ、表12-3に示す列があります。

表12-3 OPENLS_DIR_CATEGORIES表

表" title="OPENLS_DIR_CATEGORIES表" width="100%">

列名

データ型

説明

CATEGORY_ID

VARCHAR2(32)

カテゴリのID文字列。(必須)

CATEGORY_TYPE_ID

NUMBER

カテゴリ・タイプのID番号。この値は、OPENLS_DIR_CATEGORY_TYPES表(12.3.5項を参照)のCATEGORY_TYPE_ID列の値と一致する必要があります。(必須)

CATEGORY_NAME

VARCHAR2(128)

カテゴリ名。(必須)

PARENT_ID

VARCHAR2(32)

このカテゴリの親カテゴリのCATEGORY_ID値(該当する場合)。

PARAMETERS

XMLTYPE

カテゴリに関する追加情報を説明するXML文書。

12.3.4 OPENLS_DIR_CATEGORIZATIONS表

OPENLS_DIR_CATEGORIZATIONS表には、ビジネスとカテゴリの関連付けに関する情報が格納されます。各ビジネスは複数のカテゴリに関連付けることができ、ビジネスのカテゴリは、相互に独立した状態、親子関係の状態、あるいはその両方の状態にすることができます。たとえば、書籍と音楽CDを販売している店舗は、書店、音楽およびその子カテゴリである楽器店のカテゴリに関連付けられる場合があります。このような場合は、この表のそのビジネスに対して行が3つ存在することになります。

OPENLS_DIR_CATEGORIZATIONS表には、ビジネスとカテゴリの関連付けごとに行が1つ含まれ、表12-4に示す列があります。

表12-4 OPENLS_DIR_CATEGORIZATIONS表

表" title="OPENLS_DIR_CATEGORIZATIONS表" width="100%">

列名

データ型

説明

BUSINESS_ID

NUMBER

ビジネスのID。この値は、OPENLS_DIR_BUSNESSES表(12.3.1項を参照)のBUSINESS_ID列の値と一致する必要があります。(必須)

CATEGORY_ID

VARCHAR2(32)

カテゴリのID文字列。CATEGORY_ID値とCATEGORY_TYPE_ID値は、OPENLS_DIR_CATEGORIES表(12.3.3項を参照)内の単一の行の対応する列値と一致する必要があります。(必須)

CATEGORY_TYPE_ID

NUMBER

カテゴリ・タイプのID番号。CATEGORY_ID値とCATEGORY_TYPE_ID値は、OPENLS_DIR_CATEGORIES表(12.3.3項を参照)内の単一の行の対応する列値と一致する必要があります。(必須)

CATEGORIZATION_TYPE

VARCHAR2(8)

EXPLICIT(デフォルト)またはIMPLICIT。

USER_SPECIFIC_CATEGORIZATION

VARCHAR2(32)

ユーザー指定の分類(該当する場合)。

PARAMETERS

XMLTYPE

ビジネスとカテゴリの関連付けに関する追加情報を説明するXML文書。

12.3.5 OPENLS_DIR_CATEGORY_TYPES表

OPENLS_DIR_CATEGORY_TYPES表には、カテゴリ・タイプに関する情報が格納されます。この表に含まれる列を、表12-5に示します。

表12-5 OPENLS_DIR_CATEGORY_TYPES表

表" title="OPENLS_DIR_CATEGORY_TYPES表" width="100%">

列名

データ型

説明

CATEGORY_TYPE_ID

NUMBER

カテゴリ・タイプのID番号。(必須)

CATEGORY_TYPE_NAME

VARCHAR2(128)

カテゴリ・タイプの名前。(必須)

PARAMETERS

XMLTYPE

カテゴリ・タイプに関する追加情報を説明するXML文書。

12.3.6 OPENLS_DIR_SYNONYMS表

OPENLS_DIR_SYNONYMS表には、カテゴリのシノニムに関する情報が格納されます。シノニムを作成すると、カテゴリに関連付けられる用語(文字列)の数を拡大して、ユーザーがより完全で意味のある検索結果を得られるようになります。

OPENLS_DIR_SYNONYMS表には、シノニムの定義ごとに行が1つ含まれ、表12-6に示す列があります。

表12-6 OPENLS_DIR_SYNONYMS表

表" title="OPENLS_DIR_SYNONYMS表" width="100%">

列名

データ型

説明

STANDARD_NAME

VARCHAR2(128)

カテゴリの標準名。ユーザーが入力する場合もあります。

CATEGORY

VARCHAR2(128)

カテゴリ名。OPENLS_DIR_CATEGORIES表(12.3.3項を参照)に表示されます。

AKA

VARCHAR2(128)

カテゴリの別名または代替名。(AKAは別名という意味のalso known asを表します。)

13 ルーティング・エンジン

Spatialのルーティング・エンジンを使用すると、次の情報を提供するXMLベースのWebサービスをホストできます。

- 個々のルート・リクエスト(出発地と目的地)の場合: 2点間のルート情報(運転距離、予想運転時間および運転方向)。

- 一括ルート・リクエスト(出発地が同じで目的地が異なる複数のルート)の場合: 各ルートのルート情報(運転距離、予想運転時間)。

いずれのリクエストの場合も、出発地および目的地は、住所、ジオコード結果または経度/緯度座標によって識別されます。

ルートには、シングルアドレス(出発地と目的地で構成)またはマルチアドレス(出発地、1つ以上の中間地および目的地で構成)を使用できます。

マルチアドレス・ルートについては、13.1項を参照してください。

ルーティング・エンジンは、Java 2 Enterprise Edition (J2EE)のWebアプリケーションとして実装され、Oracle Weblogic Server、Oracle Application ServerまたはスタンドアロンのOracle Application Server Containers for J2EE (OC4J)環境のいずれかにデプロイできます。

図13-1に、ルーティング・エンジンを使用する基本的なアクション・フローを示します。クライアントは、リモートのルーティング・エンジン・インスタンスを探してルート・リクエストを送信し、ルーティング・エンジン・インスタンスから戻されたルート・レスポンスを処理します。

図13-1 Spatialルーティング・エンジンを使用した基本的なアクション・フロー

この章の内容は次のとおりです。

- 13.1項「マルチアドレス・ルーティング」

- 13.2項「ルーティング・エンジンのデプロイおよび構成」

- 13.3項「ルーティング・エンジンのXML API」

- 13.4項「ルーティング・エンジンで使用されるデータ構造」

13.1 マルチアドレス・ルーティング

マルチアドレス・ルートには、出発地と目的地の他に、1つ以上の中間地が含まれます。そのため、マルチアドレス・ルートには、サブルートが含まれます(各サブルートは2点間のパスを含みます)。ルートまたはサブルートには、1つ以上のセグメントが含まれます(各セグメントは、ルートまたはサブルートに沿った2点間のパスを含みます)。

たとえば、職場から顧客Aまで運転し、次に顧客B、その次に顧客Cまで運転する必要があるとします。

- ルートには、職場が出発地、顧客AとBが中間地、そして顧客Cが目的地として含まれます。

- ルートには、(1)職場から顧客A、(2)顧客Aから顧客Bおよび(3)顧客Bから顧客Cという3つのサブルートが含まれます。

- 各サブルートには、複数のセグメントが含まれる場合があります(各セグメントは、特定の運転方向ステップに関連付けられます)。

マルチアドレス・ルートには、<start_location>要素、1つ以上の<location>要素および<end_location>要素が含まれます。これらの要素のサブルート関連属性のいくつか(return_subroutes、return_subroute_edge_ids、return_subroute_geometryなど)は、マルチアドレス・ルーティングのみに適用されます。これらの要素と属性については、13.3.2項を参照してください。

マルチアドレス・ルーティングでは、戻されるルートに、リクエストで指定したとおりの順序で場所が含まれます。マルチアドレス・ルーティングでは、場所の再配置によって、時間や距離に対してルートを最適化することはありません(具体的には、TSP (巡回セールスマン問題)計算を実行しません)。

13.2 ルーティング・エンジンのデプロイおよび構成

ルーティング・エンジンがルーティング・リクエストの処理およびレスポンスの生成を行うことができるようにするには、ルーティング・データ上にネットワーク(Oracle Databaseネットワーク・データ・モデルのネットワーク)を作成してから、Oracle WebLogic Server、Oracle Application ServerまたはOC4Jを使用してrouteserver.earファイルをデプロイする必要があります。ここでは、基本的な手順を示します。

ネットワークを作成するには、次の手順を実行します。

1. ルーティング・データを使用しているネットワークがすでに存在する場合は、作成するネットワーク内のすべての構造が確実にクリーンな状態になるように、そのネットワークを削除します。既存のネットワークを削除するには、次の形式の文を実行します。

EXECUTE SDO_ROUTER_PARTITION.DELETE_ROUTER_NETWORK('<log_file_name>', '<network_name>');

<log_file_name>は、削除されるネットワークを作成するためにSDO_ROUTER_PARTITION.DELETE_ROUTER_NETWORKのコールで指定されたログ・ファイルの名前です。

<network_name>は、削除されるネットワークの名前です。

次に例を示します。

EXECUTE SDO_ROUTER_PARTITION.DELETE_ROUTER_NETWORK('create_sf_net.log', 'ndm_sf_net');

2. 次の形式の文を実行して、ルーティング・データ用のネットワークを作成します。

EXECUTE SDO_ROUTER_PARTITION.CREATE_ROUTER_NETWORK('<log_file_name>', '<network_name>');

<log_file_name>は、このネットワークに使用するログ・ファイルの名前です。

<network_name>は、作成されるネットワークの名前です。

次に例を示します。

EXECUTE SDO_ROUTER_PARTITION.CREATE_ROUTER_NETWORK('create_sf_net.log', 'ndm_sf_net');

ログ・ファイルには、最初に次のようなメッセージが含まれています。

INFO: creating the Routeserver network: NDM_SF_NET
creating indexes
creating views
generating metadata

ルーティング・エンジンのデプロイおよび構成を行うには、次の手順を実行します。

1. 次の要素を、http-web-site.xmlまたはdefault-web-site.xmlファイルの<web-site>要素内に追加します。

<web-app application="routeserver"
name="web"
load-on-startup="true"
root="/routeserver"
max-inactivity-time="no shutdown"
shared="false" />

2. Oracle WebLogic Server、Oracle Application ServerまたはOC4Jを使用してルーティング・エンジンをデプロイします。

- Oracle WebLogic Serverを使用する場合: $ORACLE_HOME/md/jlibディレクトリのrouteserver.earファイルを解凍します。routeserver.earファイルの名前を変更し、その内容を../routeserver.earという名前のディレクトリに解凍します。$routeserver.ear/ディレクトリ下に表示されるようになったweb.warファイルの名前を変更し、その内容を../web.warという名前のサブディレクトリに解凍します。したがって、ディレクトリ構造は$routeserver.ear/web.war/となる必要があります。
routeserver.earファイルとweb.warファイルの解凍後、$ORACLE_HOME/LIB/ディレクトリのxmlparserv2.jarファイルを$routeserver.ear/web.war/WEB-INF/lib/ディレクトリにコピーします。

routeserver.earファイルをデプロイするには、WLSコンソール(http://<hostname>:7001/consoleなど)にログオンし、「デプロイメント」から、デプロイメントに対して名前routeserverを受け入れ、さらに指定した場所からデプロイメントにアクセスできるようにするオプションを選択して、routeserver.earファイルをインストールします。

- Oracle Application ServerまたはOC4Jを使用する場合: OracleASまたはスタンドアロンのOC4J Application Server Control (http://<hostname>:8888/emなど)を使用して、$ORACLE_HOME/md/jlibディレクトリのrouteserver.earファイルをデプロイします。既存のOC4Jインスタンスにrouteserver.earファイルをデプロイすることも、ルーティング・エンジン用に新しいOC4Jインスタンスを作成することもできます。どちらの場合も、デプロイ中に「アプリケーション名」にrouteserverと入力します。

3. URL http://<hostname>:<port>/routeserverを使用してWebブラウザでOracleのルーティング・エンジンのようこそページを表示します。ようこそページで、「管理」リンクを選択し、管理者(weblogicまたはoc4jadmin)のユーザー名およびパスワードを入力します。

注意:
WebLogic Serverを使用しているが、デフォルトのWebLogic管理者のユーザー名を使用していない場合は、$routeserver.ear/web.war/WEB-INF/ディレクトリにあるweblogic.xmlファイルを編集する必要があります。<principal-name>weblogic</principal-name>をWebLogic Server管理者のユーザー名に置換します(<principal-name>my_weblogic_admin</principal-name>など)。

4. 同時リクエストの最大数(max-http-connections)の値を10に制限します。たとえば、OC4Jの場合、次の要素を、server.xmlファイルの<application-server>要素内に追加します。

<max-http-connections value="10" />

Oracle Route Serverがjava.lang.OutOfMemoryErrorエラーを発生することなく、常に処理できる同時リクエスト数を制限することは重要です。

5. web.xmlファイルを構成し(13.2.1項を参照)、変更を保存します。

6. Oracle WebLogic ServerまたはOracle Application Serverにデプロイした場合は、ルーティング・エンジンを再起動します。
ようこそページが表示されない場合は、新しくデプロイされたルーティング・エンジン・サービスが正常に起動されたことを確認してください。ルーティング・エンジン・サービスは、Oracle Databaseリリース11.2以上のrouteserver.earファイルでWebLogic Server 10.3.1.0以上を実行しているか、Oracle 11g以上のrouteserver.earファイルでOracle ASまたはOC4J 10.1.3以上を実行していることを前提としています。

7. OC4Jインスタンスにデプロイした場合は、次のコマンド・オプションを使用してOC4Jを起動します。

-server
-Xms<HEAP_SIZE>
-Xmx<HEAP_SIZE>
-XX:NewSize=<YOUNG_GENERATION_SIZE>
-XX:MaxNewSize=<YOUNG_GENERATION_SIZE>
-Dsun.rmi.dgc.server.gcInterval=3600000
-Dsun.rmi.dgc.client.gcInterval=3600000
-verbose:gc  (optional)

<HEAP_SIZE>は、512MB以上である必要があります。推奨サイズは、1024MB (1GB)以上です。このメモリーは仮想メモリーではなく、物理メモリーであることに注意してください。

<YOUNG_GENERATION_SIZE>は、<HEAP_SIZE>値の1/4(25%)である必要があります。

-verbose:gcは、マイナーおよびメジャーのJavaガベージ・コレクションをすべて出力します。これらの統計を監視すると、メモリー・リソース計画に役立ちます。ガベージ・コレクションが頻繁に発生したり、数秒間にわたり継続する場合は、Java VMに物理メモリーをさらに割り当てる必要がある可能性があります。

注意:
Java VMに必要となるメモリー量は、主に2つのパラメータによって決定されます。1つは、server.xmlの<application-server>要素の<max-http-connections value="..." />要素、もう1つは、web.xmlのpartition_cache_size_limitパラメータです。

次のコマンドは、OC4Jを起動する例です。-configフラグは、OC4Jコマンドライン・パラメータであり、VMオプションではないことに注意してください。

c:\jdk1.5.0_06\bin\java -server
-Xms1024m
-Xmx1024m
-XX:NewSize=256m
-XX:MaxNewSize=256m
-Dsun.rmi.dgc.server.gcInterval=3600000
-Dsun.rmi.dgc.client.gcInterval=3600000
-verbose:gc
-jar c:\oc4j\j2ee\home\oc4j.jar
-config c:\oc4j\j2ee\home\config\server.xml

8. 次の書式でURLにアクセスし、デプロイメントを確認します。

http://<hostname>:<port>/routeserver

ようこそページが表示されます。また、OC4Jを起動したコンソール・ウィンドウには、Oracle Route Serverが正常に初期化されたことを示すメッセージが表示されます。

ようこそのメッセージが表示されない場合、ルート・サーバーは、ご使用の環境で適切に動作するように構成されていない可能性があります。このような場合は、<ROUTE_SERVER_HOME>/routeserver/web/WEB-INF/web.xmlファイルを編集して、ご使用の環境とプリファレンスを反映します。(web.xmlファイルは、routeserver.earファイル内にあり、OC4Jがこれを<ROUTE_SERVER_HOME>の下のルート・サーバー・ディレクトリ構造に展開するまでは表示されません。)編集が終了したら、ルーティング・エンジンまたはOC4Jを再起動して、デプロイメントを確認します。

9. 提示される例を参照します。http://<hostname>:<port>/routeserver/のページには、テスト・サンプルというセクションの下部にリンクがあります。これらの例では、Oracle Route Serverの様々な機能を実例を使用して説明します。これは、XML API(13.3項を参照)の学習に適しています。

13.2.1 web.xmlファイルの構成

多くの場合(特に、古いweb.xmlファイルの設定を使用する場合や、言語を指定したり長いID値を使用する場合)、Spatialに含まれているデフォルトのweb.xmlファイルの一部を変更する必要があります。編集または追加する必要があると考えられるパラメータを次に示します。

次のパラメータは、web.xmlファイル内で表示される順にグループ化されリストされています。web.xmlファイル内の説明的なコメントも参照してください。

Route Serverの初期化パラメータ:

- routeserver_schema_jdbc_connect_string: ルーティング・データを含むデータベースへの接続文字列。

- routeserver_schema_username: Oracleのルーティング・データにアクセスするために作成されたユーザーの名前。

- routeserver_schema_password: Oracleのルーティング・データにアクセスするために作成されたユーザーのパスワード。パスワードを不明瞭にするには、パスワード文字列の前に感嘆符(!)を配置します。この処理を行うと、パスワードが不明瞭化され、次にルーティング・エンジンを起動するとweb.xmlファイルが再書込みされます。

- routeserver_network_name: TBS???ルーティング・エンジンのネットワーク名。

- routeserver_schema_connection_cache_min_limit: ルーティング・エンジンによってキャッシュされるデータベース接続の最小数。

- routeserver_schema_connection_cache_max_limit: ルーティング・エンジンによってキャッシュされるデータベース接続の最大数。

Geocoderのパラメータ:

- geocoder_type: 使用されるジオコーダのタイプであり、httpclient (Javaサーブレットと対話するHTTPクライアント)、thinclient (Oracle Databaseジオコーダと対話するThinクライアント)またはnone (ジオコーダの提供なし)のいずれかを指定します。
geocoder_typeがthinclientであり、かつジオコーダとルーティング・エンジンが同じOC4Jコンテナ内にある場合は、データ・ソースを使用し、かつ接続プールの競合を回避するようにジオコーダを構成する必要があります。

このパラメータの値に応じて、web.xmlファイルのHTTPクライアントまたはThinクライアントのセクションの設定が確認され、必要に応じて編集されます。たとえば、thinclientを指定した場合、routeserver_schema_passwordパラメータを使用する場合と同じ方法でOracle Geocoderのパスワードを不明瞭化できます。

- geocoder_type = httpclientの場合に使用されるパラメータ: geocoder_http_url、geocoder_http_proxy_host、geocoder_http_proxy_port

- geocoder_type = thinclientの場合に使用されるパラメータ: geocoder_schema_host、geocoder_schema_port、geocoder_schema_sid、geocoder_schema_username、geocoder_schema_password、geocoder_schema_mode

ロギング・パラメータ:

- log_filename: ログ・ファイルの場所(相対または絶対)と名前。

- log_level: ログ・ファイルに書き込まれる情報のタイプ(および量)。情報量が最も少ないレベルから最も多いレベルの順に、FATAL、ERROR、WARN、INFO、DEBUGまたはFINEST (すべてのメッセージ)を指定します。

- log_thread_name: 各エントリを作成するスレッドの名前をログに含めるかどうか。

- log_time: 各エントリの時間を含めるかどうか。

道路を説明するパラメータ:

- max_speed_limit: 任意の道路セグメントの最大制限速度(m/s)。 (34m/sは、約122km/hまたは約75マイル/時間です。)

- local_road_threshold: マイル数(デフォルト値は25、最小値は10)。ソース・ノードと宛先ノード間の予想距離(マイル)がこの値以下である場合、地方道路はオプションとして考慮され、予想距離がこの値より大きい場合、地方道路は考慮されません。
このパラメータによって、短ルートのための最適化が有効になります。値を小さくすると、検索対象となるソリューション・セットのサイズが小さくなるため、ルーティング・エンジンのパフォーマンスを向上できます。ただし、ルーティング・エンジンは通行可能な地方道路のルートを考慮しないため、最適化されていない短ルートが生成される可能性があります。値を(デフォルト値の25より)大きくすると、地方道路を使用したより正確なルートを生成できます。ただし、検索対象のソリューション・セットのサイズが大きくなるため、ルーティング・エンジンのパフォーマンスが低下する可能性があります。

- highway_cost_multiplier: route_preferenceをlocalに設定してルートを計算するときに、高速道路の利点を下げる量。

- driving_side: 交通が右側通行の場合はR(デフォルト)、交通が左側通行の場合はL。

- language: 運転方向の生成に使用するデフォルトの言語。サポートされている言語は英語(デフォルト)、フランス語、ドイツ語、イタリア語およびスペイン語です。

- long_ids: TRUE(デフォルト)を指定すると、ID値の長さがINTEGERではなくLONGデータとして格納されます。FALSEを指定すると、ID値の長さがLONGではなくINTEGERデータとして格納されます。
リリース11.1より前のOracle Databaseを使用してパーティション化されているルーティング・データを使用する場合は、現行のリリースを使用してデータを再パーティション化するまで、long_idsパラメータ値をFALSEに設定する必要があります。

- distance_function_type: 測地座標系(緯度/経度のSRID 8307など)の場合はgeodetic、投影座標系の場合はeuclidean。

パーティション化パラメータ:

- partition_cache_size_limit: ネットワーク・パーティション・キャッシュで保持できるパーティションの最大数。パーティションがすでにキャッシュ内にある場合、ルーティング・エンジンはデータベースからパーティションをロードする必要がありません(ただし、この値の設定が高すぎると、メモリー不足のエラーが発生する場合があります)。

- partition_table_name: ネットワーク・パーティションを含むパーティション表の名前。(この表は、routeserver_schema_jdbc_connect_string、routeserver_schema_usernameおよびrouteserver_schema_passwordパラメータに関連付けられたスキーマ内にあると想定されています。)

13.3 ルーティング・エンジンのXML API

この項では、XML形式のルート・リクエストをルーティング・エンジンに送信する方法、およびルート・リクエスト(入力)とルート・レスポンス(出力)のXML Document Type Definition(DTD)について説明します。XMLは、構造化されたドキュメントをHTTPプロトコルで伝送する際に広く利用されています。HTTPリクエスト(GETまたはPOSTメソッド)を使用する場合、そのリクエストには、xml_requestというパラメータがあり、その値は、リクエストのXML文書が含まれる文字列であると想定されます。

ルーティング・エンジン・サーブレットへのリクエストの書式は、次のとおりです。

http://hostname:port/route-server-servlet-path?xml_request=xml-request

この書式のパラメータの意味は、次のとおりです。

- hostname: ルーティング・エンジンが実行されているサーバーのネットワーク・パスです。

- port: アプリケーション・サーバーがリスニングするポートです。

- route-server-servlet-path: ルーティング・エンジン・サーブレットのパスです(たとえば、routeserver/servlet/RouteServerServlet)。

- xml-request: URLエンコードされたXMLリクエストです。HTMLのGETまたはPOSTメソッドを使用して送信されます。

入力XMLは、すべてのリクエストで必要です。出力は、XML文書になります。

一括ルート・リクエストではなく単純なルート・リクエストの場合は、ルートIDを指定する必要があります。また、次の属性を1つ以上指定できます。

- route_preference: fastestまたはshortest(デフォルト)

- road_preference: highway(デフォルト)またはlocal

- return_driving_directions(運転方向を戻すかどうか): trueまたはfalse(デフォルト)

- return_hierarchical_directions(階層的な方向を戻すかどうか): trueまたはfalse(デフォルト)

- return_locations (ルートおよび任意のサブルートの出発地と目的地を戻す): true (デフォルト)またはfalse

- return_subroutes (サブルートを戻すかどうか): true (マルチアドレス・ルートの場合はデフォルト、シングルアドレス・ルートの場合は無視)またはfalse

- return_route_geometry(ルートの線ストリングの座標を戻すかどうか): trueまたはfalse(デフォルト)

- return_subroute_geometry (各サブルートの線ストリングの座標を戻すかどうか): trueまたはfalse (マルチアドレス・ルートの場合はデフォルト、シングルアドレス・ルートの場合は無視)

- return_segment_geometry(ルートのマヌーバごとに線ストリングの座標を戻すかどうか): trueまたはfalse(デフォルト)

- return_detailed_geometry: true(デフォルト。詳細なジオメトリを戻す)またはfalse(総合的なジオメトリを戻す)

- language: 運転方向の生成に使用する言語(ENGLISH、FRENCH、GERMAN、ITALIANまたはSPANISH)

- return_segment_edge_ids(ルートのマヌーバごとにエッジのエッジID値を戻すかどうか): trueまたはfalse(デフォルト)

- return_route_edge_ids(ルートのエッジのエッジID値を戻すかどうか): trueまたはfalse(デフォルト)

- return_subroute_edge_ids (各サブルートのエッジのエッジID値を戻すかどうか): trueまたはfalse (マルチアドレス・ルートの場合はデフォルト、シングルアドレス・ルートの場合は無視)

- distance_unit: kilometer、mile(デフォルト)またはmeter

- time_unit: hour、minute(デフォルト)またはsecond

- pre_geocoded_locations(出発地および目的地を、入力場所(住所指定または点)とジオコード済の場所のどちらで指定するか): true(ジオコード済の場所)またはfalse(デフォルト。入力場所)

一括ルート・リクエストの場合は、リクエストID、出発地、および1つ以上の目的地を指定する必要があります。ID属性は、場所ごとに必要です。一括ルート・リクエストでは、次の属性を1つ以上指定できます。

- route_preference: fastestまたはshortest(デフォルト)

- road_preference: highway(デフォルト)またはlocal

- distance_unit: kilometer、mile(デフォルト)またはmeter

- time_unit: hour、minute(デフォルト)またはsecond

- sort_by_distance(戻されるルートを、出発地から目的地までの距離で昇順にソートするかどうか): trueまたはfalse(デフォルト)

- cutoff_distance(出発地から目的地までの距離が、指定された距離以下のルートのみを戻す): (数値。デフォルトは制限なし)

- pre_geocoded_locations(出発地および目的地を、入力場所(住所指定または点)とジオコード済の場所のどちらで指定するか): true(ジオコード済の場所)またはfalse(デフォルト。入力場所)

この項にはさらに次の項があります。

- 13.3.1項「ルート・リクエストおよびルート・レスポンスの例」

- 13.3.2項「ルート・リクエストのDTD」

- 13.3.3項「ルート・レスポンスのDTD」

- 13.3.4項「一括ルート・リクエストおよび一括ルート・レスポンスの例」

- 13.3.5項「一括ルート・リクエストのDTD」

- 13.3.6項「一括ルート・レスポンスのDTD」

13.3.1 ルート・リクエストおよびルート・レスポンスの例

この項では、ルート・リクエストと、そのリクエストによって生成されるルート・レスポンスのXMLの例を示します。リクエストには、指定した住所、経度と緯度の座標により指定される点、またはジオコード済の場所を使用できます。使用可能な要素と属性のリファレンス情報は、リクエストについては13.3.2項を、レスポンスについては13.3.3項を参照してください。

例13-1は、住所を指定した2つのオフィス(Massachusetts州Waltham市とNew Hampshire州Nashua市)間の最速ルート(可能な場合は、高速道路を使用)のリクエストを示しています。このリクエストでは、セグメントごとの運転方向を要求し、距離の単位にはマイル、時間の単位には分を指定しています。

例13-1 指定した住所を使用した場合のルート・リクエスト

<?xml version="1.0" standalone="yes"?>
<route_request
id="8"
route_preference="fastest"
road_preference="highway"
return_driving_directions="true"
distance_unit="mile"
time_unit="minute">
<start_location>
<input_location id="1">
<input_address>
<us_form1
street="1000 Winter St"
lastline="Waltham, MA" />
</input_address>
</input_location></start_location>
<end_location>
<input_location id="2">
<input_address>
<us_form1
street="1 Oracle Dr"
lastline="Nashua, NH" />
</input_address>
</input_location>
</end_location>
</route_request>

例13-2に、例13-1のリクエストによって生成されたレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)

例13-2 指定した住所を使用した場合のルート・レスポンス

<?xml version="1.0" encoding="UTF-8" ?>
<route_response>
<route
id="8"
step_count="15"
distance="29.855655894643636"
distance_unit="mile"
time="34.41252848307292"
time_unit="minute">
<segment
sequence="1"
instruction="Start out on WINTER ST (Going North)"
distance="0.6715170911787637" time="1.1257004737854004"/>
<segment
sequence="2"
instruction="Turn SLIGHT RIGHT onto RAMP (Going Northwest)"
distance="0.05893317343308232"
time="0.09879287083943684"/>
<segment
sequence="3"
instruction="Turn RIGHT onto OLD COUNTY RD (Going Northeast)"
distance="0.6890481152276999"
time="1.6801289876302083"/>
<segment
sequence="4"
instruction="Turn RIGHT onto TRAPELO RD (Going Southeast)"
distance="1.0062739119153126"
time="1.686871592203776"/>
<segment
sequence="5"
instruction="Turn LEFT onto RAMP (Going North)"
distance="0.3364944434303735"
time="0.5640838623046875"/>
<segment
sequence="6"
instruction="Merge onto I-95/RT-128 (Going North)"
distance="4.775246959324318"
time="4.926156107584635"/>
<segment
sequence="7"
instruction="Continue on I-95/RT-128"
distance="0.0"
time="0.0"/>
<segment
sequence="8"
instruction="Stay STRAIGHT to go onto 32B/32A (Going East)"
distance="0.27138218577176415"
time="0.4549326578776042"/>
<segment
sequence="9"
instruction="Take EXIT 32A toward LOWELL"
distance="0.043764782242279254"
time="0.07336527506510417"/>
<segment
sequence="10"
instruction="Stay STRAIGHT to go onto RAMP (Going East)"
distance="0.2770620621155161"
time="0.4644541422526042"/>
<segment
sequence="11"
instruction="Turn LEFT onto US-3 (Going Northwest)"
distance="20.664632308107564"
time="21.317686971028646"/>
<segment
sequence="12"
instruction="Stay STRAIGHT to go onto EVERETT TPKE/US-3 (Going Northwest)"
distance="0.006080380444913938"
time="0.006272379557291667"/>
<segment
sequence="13"
instruction="Take EXIT 1 toward SO NASHUA"
distance="0.550406717982974"
time="0.9226765950520833"/>
<segment
sequence="14"
instruction="Turn LEFT onto SPIT BROOK RD (Going West)"
distance="0.5031617978313553"
time="1.0825419108072916"/>
<segment
sequence="15"
instruction="Turn RIGHT onto ORACLE DR (Going North)"
distance="0.0016526518707758954"
time="0.00886537532011668"/>
</route>
</route_response>

例13-3は、緯度/経度で指定した2点間の最速ルート(可能な場合は、高速道路を使用)のリクエストを示しています。このリクエストは、セグメントごとの運転方向を要求し、距離の単位にはメートル、時間の単位には秒を指定しています。(この2つの場所は、California州San Francisco市の、World Trade Centerと100 Flower通りに対応しています。)

例13-3 緯度/経度での点指定を使用した場合のルート・リクエスト

<?xml version="1.0" standalone="yes"?>
<route_request id="8"
route_preference="shortest"
road_preference="highway"
return_driving_directions="true"
distance_unit="meter"
time_unit="second"
return_route_geometry="true"
>
<start_location>
<input_location id="1" longitude="-122.39382" latitude="37.79518" />
</start_location>
<end_location>
<input_location id="2" longitude="-122.4054826" latitude="37.7423566" />
</end_location>
</route_request>

例13-4に、例13-3のリクエストによって生成されたレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)

例13-4 緯度/経度での点指定を使用した場合のルート・レスポンス

?xml version="1.0" encoding="UTF-8" ?>
<route_response>
<route id="8" step_count="11" distance="7196.72509765625" distance_unit="meter"
time="521.2236328125" time_unit="second">
<route_geometry>
<LineString>
<coordinates>
-122.39382,37.79518 -122.39382,37.79518 -122.39454,37.79601 -122.39467,37.79604
-122.39476,37.79604 -122.39484,37.79599 -122.39486,37.79591 -122.39484,37.79579
-122.39462,37.79539 -122.39425,37.79491 -122.39389,37.79462 -122.39338,37.79433
-122.39326,37.79424 -122.39275,37.79384 -122.39263,37.79371 -122.39174,37.79293
-122.39151,37.79274 -122.39142,37.79266 -122.3913,37.7925 -122.3912,37.79233
-122.39102,37.79184 -122.39093,37.79161 -122.39072,37.79128 -122.39049,37.79104
-122.39016,37.79076 -122.38878,37.78967 -122.38861,37.7895 -122.38839,37.7892
-122.38819,37.78877 -122.38813,37.78857 -122.38797,37.78783 -122.38796,37.78758
-122.38801,37.78709 -122.38819,37.78478 -122.38832,37.78477 -122.38841,37.78474
-122.38983,37.78361 -122.39127,37.78246 -122.39206,37.78184 -122.39261,37.78139
-122.39319,37.78094 -122.3943,37.7801 -122.39486,37.77968 -122.39534,37.7793
-122.39654,37.77833 -122.39876,37.77657 -122.39902,37.77639 -122.40033,37.77537
-122.40096,37.77483 -122.40151,37.7744 -122.40205,37.77396 -122.40226,37.7738
-122.40266,37.77349 -122.40321,37.77305 -122.40376,37.77262 -122.40543,37.77129
-122.40578,37.77101 -122.40599,37.77083 -122.40699,37.77006 -122.40767,37.76953
-122.40774,37.76947 -122.40781,37.7694 -122.40786,37.76932 -122.40788,37.76922
-122.40788,37.76913 -122.40786,37.76897 -122.40785,37.76883 -122.40779,37.76838
-122.40767,37.7671 -122.40756,37.76577 -122.40743,37.76449 -122.40734,37.76321
-122.40722,37.76193 -122.40709,37.76067 -122.40695,37.75937 -122.40678,37.75776
-122.4067,37.75684 -122.40663,37.75617 -122.40647,37.75458 -122.40644,37.75428
-122.40632,37.75299 -122.4062,37.75174 -122.40617,37.75138 -122.40614,37.75103
-122.40606,37.75066 -122.40565,37.74987 -122.40529,37.74937 -122.40518,37.74924
-122.40506,37.74913 -122.4045,37.74873 -122.4041,37.74845 -122.40393,37.74827
-122.40384,37.74815 -122.40378,37.74801 -122.40375,37.74785 -122.40381,37.74762
-122.40397,37.74719 -122.4043,37.74633 -122.40434,37.74618 -122.40434,37.74603
-122.40431,37.74594 -122.4042,37.74554 -122.40416,37.7453 -122.40417,37.74515
-122.40431,37.74464 -122.40445,37.74427 -122.40461,37.74393 -122.40479,37.74362
-122.40522,37.74304 -122.40482,37.74282 -122.40517,37.74233
-122.40545613036156,37.742431337836386
</coordinates>
</LineString>
</route_geometry>
<segment sequence="1" instruction="Start out on FERRY BLDG/FERRY
PLZ/HERB CAEN WAY/THE EMBARCADERO (Going Northwest)"
distance="111.84008026123047" time="6.990005016326904"/>
<segment sequence="2" instruction="Turn LEFT onto RAMP (Going
Southwest)" distance="51.30750274658203" time="4.664318561553955"/>
<segment sequence="3" instruction="Turn LEFT onto HERB CAEN
WAY/THE EMBARCADERO (Going Southeast)"
distance="902.3695068359375" time="56.39809036254883"/>
<segment sequence="4" instruction="Turn SLIGHT RIGHT onto THE
EMBARCADERO (Going Southeast)" distance="534.7628173828125"
time="33.42267608642578"/>
<segment sequence="5" instruction="Turn RIGHT onto BRANNAN ST
(Going Southwest)" distance="2454.0565185546875"
time="219.57013702392578"/>
<segment sequence="6" instruction="Turn SLIGHT LEFT onto POTRERO AVE
(Going South)" distance="2066.54541015625" time="129.15908813476562"/>
<segment sequence="7" instruction="Turn SLIGHT LEFT onto BAY SHORE
BLVD (Going Southeast)" distance="747.060546875"
time="46.6912841796875"/>
<segment sequence="8" instruction="Stay STRAIGHT to go onto BAY SHORE
BLVD/BAYSHORE BLVD (Going South)" distance="195.7578125"
time="12.23486328125"/>
<segment sequence="9" instruction="Turn LEFT onto OAKDALE AVE
(Going Southeast)" distance="42.8857421875" time="3.898712158203125"/>
<segment sequence="10" instruction="Turn RIGHT onto PATTERSON ST
(Going Southwest)" distance="62.525390625" time="5.68414306640625"/>
<segment sequence="11" instruction="Turn RIGHT onto FLOWER ST (Going
West)" distance="27.61372947692871" time="2.5103390216827393"/>
</route>
</route_response>

例13-5は、運転方向付きのルート・リクエストを示しています。出発地と目的地は、Massachusetts州Boston市内の約0.5マイル離れているジオコード済の場所です。

例13-5 ジオコード済の場所を使用した場合のルート・リクエスト

<?xml version="1.0" standalone="yes"?>
<route_request id="8"
route_preference="shortest"
road_preference="highway"
return_driving_directions="true"
distance_unit="mile"
time_unit="minute"
pre_geocoded_locations="true">
<start_location>
<pre_geocoded_location id="1">
<edge_id>22161661</edge_id>
<percent>.5</percent>
<side>L</side>
</pre_geocoded_location>
</start_location>
<end_location>
<pre_geocoded_location id="2">
<edge_id>22104391</edge_id>
<percent>.5</percent>
<side>R</side>
</pre_geocoded_location>
</end_location>
</route_request>

例13-6に、例13-5のリクエストに対するレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)

例13-6 ジオコード済の場所を使用した場合のルート・レスポンス

<?xml version="1.0" encoding="UTF-8" ?>
<route_response>
<route
id="8"
step_count="5"
distance="0.6193447379707987"
distance_unit="mile"
time="1.6662169138590495"
time_unit="minute">
<segment
sequence="1"
instruction="Start out on HUNTINGTON AVE (Going Southeast)"
distance="0.0059065276259536855"
time="0.01440208355585734"/>
<segment
sequence="2"
instruction="Turn LEFT onto AVENUE OF THE ARTS/HUNTINGTON AVE/RT-9 (Going Northeast)"              distance="0.020751234891437903"
time="0.050598426659901934"/>
<segment        sequence="3"
instruction="Turn RIGHT onto PUBLIC ALLEY 405 (Going Southeast)"
distance="0.053331456545578096"
time="0.286087703704834"/>
<segment        sequence="4"
instruction="Turn RIGHT onto ST BOTOLPH ST (Going Southwest)"
distance="0.028921701076542888"
time="0.07052075068155925"/>
<segment        sequence="5"
instruction="Turn RIGHT onto MASSACHUSETTS AVE (Going Northwest)"
distance="0.5104338249425094"
time="1.2446078459421794"/>
</route>
</route_response>

13.3.2 ルート・リクエストのDTD

次に、ルート・リクエストの完全なDTDを示します。DTDの主要な要素と属性については、後続の項で説明しています。

<?xml version="1.0" encoding="UTF-8"?>
<!-- geocoder.dtd includes gmlfeature.dtd. These define the
ELEMENTS input_address and those in Feature, FeatureMember,
and FeatureCollection that are used in geoFeature,
geoFeatureCollection, and geoFeatureMember.
-->
<!ENTITY % GEOCODERDTD SYSTEM "geocoder.dtd">
%GEOCODERDTD;

<!—
input_location: specify an input address to the geocoder
input_address: specify a location using a street address
Point: specify a location using its longitude/latitude

(The input_location, input_address and Point elements are defined in
geocoder.dtd. GeometryClasses is defined in gmlgeometry.dtd.)
-->
<!ELEMENT route_request (start_location, location*, end_location)>
<!ATTLIST route_request
vendor CDATA "Oracle"
id CDATA #REQUIRED
route_preference (FASTEST|SHORTEST) #IMPLIED
road_preference (HIGHWAY|LOCAL) #IMPLIED
return_driving_directions (TRUE|FALSE) #IMPLIED
return_hierarchival_driving_directions (TRUE|FALSE) #IMPLIED
return_locations (TRUE|FALSE) #IMPLIED
return_subroutes (TRUE|FALSE) #IMPLIED
return_route_geometry (TRUE|FALSE) #IMPLIED
return_subroute_geometry (TRUE|FALSE) #IMPLIED
return_segment_geometry (TRUE|FALSE) #IMPLIED
return_detailed_geometry (TRUE|FALSE) #IMPLIED
return_route_edge_ids (TRUE|FALSE) #IMPLIED
return_subroute_edge_ids (TRUE|FALSE) #IMPLIED
return_route_segment_ids (TRUE|FALSE) #IMPLIED
language (ENGLISH|FRENCH|GERMAN|ITALIAN|SPANISH) #IMPLIED
distance_unit (KM|MILE|METER) #IMPLIED
time_unit (HOUR|MINUTE|SECOND) #IMPLIED
pre_geocoded_locations (TRUE|FALSE) #IMPLIED>
driving_directions_detail (LOW|MEDIUM|HIGH) #IMPLIED

<!-- The following are alternatives for specifying the location. Use
input_location when you want to represent a location with a
street address (input_address) or longitude/latitude (Point).
If you have already geocoded the location,
you can use information from the geocoder response to
construct a pre_geocoded_location element.
The geocoder returns:
- An edge_id (integer that is the road segment identifier)
- A side ('L' or 'R' – left or right side)
- A percent (floating-point number 0.0 to 1.0 representing
the fraction of the length from the start of the road
segment to this location.
-->
<!ELEMENT pre_geocoded_location (edge_id, percent, side)>
<!ATTLIST pre_geocoded_location id CDATA #REQUIRED>

<!ELEMENT start_location (input_location|pre_geocoded_location|)>
<!ELEMENT location (input_location|pre_geocoded_location|)>
<!ELEMENT end_location (input_location|pre_geocoded_location|)>

13.3.2.1 route_request要素

<route_request>要素は、次のとおり定義されています。

<!ELEMENT route_request (start_location, location*, end_location)>

ルート・リクエストのルート要素には、常にroute_requestという名前が付けられます。

子要素の<start_location>は、住所指定、ジオコード済住所または経度/緯度座標として、ルートの出発地を示します。

子要素の<location>は、住所指定、ジオコード済住所または経度/緯度座標として、セグメントの場所を示します。<location>要素が存在しない場合はシングルアドレス・ルート、1つ以上の<location>要素が存在する場合はマルチアドレス・ルートです。

子要素の<end_location>は、住所指定、ジオコード済住所または経度/緯度座標として、ルートの目的地を示します。

ルート・リクエストでは、次のように指定します。

- <start_location>が住所指定または経度/緯度座標である場合、各<end_location>および<location>要素には住所指定または経度/緯度座標のいずれかを使用できますが、ジオコード済住所は使用できません。

- <start_location>がジオコード済住所である場合、<end_location>および任意の<location>指定にはジオコード済住所を使用する必要があります。

13.3.2.2 route_request属性

ルート要素の<route_request>には、複数の属性があります(そのほとんどはオプションです)。属性は、次のとおり定義されています。

<!ATTLIST route_request
vendor CDATA "Oracle"
id CDATA #REQUIRED
route_preference (FASTEST|SHORTEST) #IMPLIED
road_preference (HIGHWAY|LOCAL) #IMPLIED
return_driving_directions (TRUE|FALSE) #IMPLIED
return_hierarchival_driving_directions (TRUE|FALSE) #IMPLIED
return_locations (TRUE|FALSE) #IMPLIED
return_subroutes (TRUE|FALSE) #IMPLIED
return_route_geometry (TRUE|FALSE) #IMPLIED
return_subroute_geometry (TRUE|FALSE) #IMPLIED
return_segment_geometry (TRUE|FALSE) #IMPLIED
return_detailed_geometry (TRUE|FALSE) #IMPLIED
return_route_edge_ids (TRUE|FALSE) #IMPLIED
return_subroute_edge_ids (TRUE|FALSE) #IMPLIED
return_route_segment_ids (TRUE|FALSE) #IMPLIED
language (ENGLISH|FRENCH|GERMAN|ITALIAN|SPANISH) #IMPLIED
distance_unit (KM|MILE|METER) #IMPLIED
time_unit (HOUR|MINUTE|SECOND) #IMPLIED
pre_geocoded_locations (TRUE|FALSE) #IMPLIED>
driving_directions_detail (LOW|MEDIUM|HIGH) #IMPLIED

vendorはオプションの属性です。デフォルト値の場合は、Oracleがルーティング・プロバイダになります。

idは必須属性で、リクエストに関連付けるID番号を指定します。

route_preferenceはオプションの属性で、予想運転時間が最短のルート(FASTEST)と、運転距離が最短のルート(SHORTEST、デフォルト)のどちらを希望するのかを示します。

road_preferenceはオプションの属性で、道路の種類が選択できる場合に、高速道路を使用するルート(HIGHWAY、デフォルト)と、地方道路(LOCAL)を使用するルートのどちらを希望するのかを示します。

return_driving_directionsはオプションの属性で、ルートの運転方向が必要かどうかを示します。TRUEを指定すると運転方向が戻され、FALSE(デフォルト)を指定すると運転方向は戻されません。

return_hierarchical_driving_directionsはオプションの属性で、開いたり閉じたりすることができる階層でルートの運転方向を戻すかどうかを示します。TRUEを指定すると運転方向が開いたり閉じたりすることができる階層で戻され、FALSE(デフォルト)を指定すると運転方向が階層なしのリストで戻されます。

return_locationsはオプションの属性で、ルートおよび任意のサブルートの出発地と目的地を戻すかどうかを指定します。TRUE (デフォルト)を指定するとこれらの場所が戻され、FALSEを指定するとこれらの場所は戻されません。

return_subroutesはオプションの属性で、マルチアドレス・ルートのサブルートを戻すかどうかを指定します。TRUE (マルチアドレス・ルートの場合はデフォルト)を指定するとサブルートが戻され、FALSEを指定するとサブルートは戻されません。(シングルアドレス・ルートの場合、この属性は無視されます。)

return_route_geometryはオプションの属性で、ルートのマヌーバを表す各線ストリングの座標が必要かどうかを示します。TRUEを指定すると座標が戻され、FALSE(デフォルト)を指定すると座標は戻されません。

return_subroute_geometryはオプションの属性で、各サブルートのマヌーバを表す各線ストリングの座標が必要かどうかを示します。TRUEを指定すると座標が戻され、FALSE (マルチアドレス・ルートの場合はデフォルト)を指定すると座標は戻されません。(シングルアドレス・ルートの場合、この属性は無視されます。)

return_segment_geometryはオプションの属性で、ルートを表す線ストリングの座標が必要かどうかを示します。TRUEを指定すると座標が戻され、FALSE(デフォルト)を指定すると座標は戻されません。return_segment_geometryがTRUEの場合、return_route_geometry属性の値に関係なく、ルートの運転方向が戻されます。

return_detailed_geometryはオプションの属性で、戻されるジオメトリに含まれる詳細のレベルを示します。TRUE(デフォルト)は詳細なジオメトリを戻し、FALSEは総合的な(通常は座標の少ない)ジオメトリを戻します。

return_route_edge_idsはオプションの属性で、ルートのエッジのエッジID値が必要かどうかを示します。TRUEを指定するとエッジID値が戻され、FALSE(デフォルト)を指定するとエッジID値は戻されません。

return_subroute_edge_idsはオプションの属性で、サブルートのエッジのエッジID値が必要かどうかを示します。TRUEを指定するとエッジID値が戻され、FALSE (マルチアドレス・ルートの場合はデフォルト)を指定するとエッジID値は戻されません。(シングルアドレス・ルートの場合、この属性は無視されます。)

return_segment_edge_idsはオプションの属性で、ルートのすべてのマヌーバのエッジについてエッジID値が必要かどうかを示します。TRUEを指定するとエッジID値が戻され、FALSE(デフォルト)を指定するとエッジID値は戻されません。return_segment_edge_idsがTRUEの場合、return_route_edge_ids属性の値に関係なく、エッジID値が戻されます。

languageはオプションの属性で、運転方向の生成に使用するデフォルトの言語を上書きします。デフォルトの言語はweb.xmlファイルで設定されており、この属性を使用してリクエストごとにデフォルトを上書きできます。サポートされている属性値は、ENGLISH、FRENCH、GERMAN、ITALIANおよびSPANISHです。

distance_unitはオプションの属性で、戻される距離の値の測定単位を示します。有効な値は、KM(キロメートル)、MILE(マイル、デフォルト)およびMETER(メートル)です。

time_unitはオプションの属性で、戻される時間値の単位を示します。有効な値は、HOUR(時間)、MINUTE(分、デフォルト)およびSECOND(秒)です。

pre_geocoded_locationsはオプションの属性で、出発地と目的地の指定方法を示します。TRUEは、両方の場所が、<pre_geocoded_location>要素によって、ジオコード済の場所として指定されることを示します。FALSE (デフォルト)は、両方の場所が、<input_location>要素によって、住所として指定されることを示します。

driving_directions_detailはオプションの属性で、運転の案内における詳細レベルと個別のステップの数に影響を与えます。指定可能な値は、HIGH(最も詳細でステップ数が最も多い)、MEDIUM(デフォルト)およびLOW(最も大まかでステップ数が最も少ない)です。たとえば、LOWを指定すると、セグメントに右または左へのわずかなマヌーバが含まれている場合でも、1つのセグメントが1つのステップとして処理される場合があります。戻される運転方向の長さに対してこの属性の値が与える影響は、要素の正確な名前とマヌーバによって異なります。return_driving_directionsまたはreturn_hierarchical_driving_directionsに対してTRUEを指定しない場合、この属性は無視されます。

注意:
デフォルトの詳細レベルはOracle Databaseリリース11.1で変更され、以前と比べると大まかになりステップ数が減りました。driving_directions_detail属性が用意されていなかった以前のリリースと同じ詳細レベルが必要な場合は、driving_directions_detail属性にHIGHを指定します。

13.3.2.3 input_location要素

<input_location>要素は、Oracle Spatialのジオコーディング・リクエストDTD(11.7.2項を参照)に適した形式で、住所を指定します。入力場所は、<Point>要素または<input_address>要素のいずれかを使用して指定できます。13.3.1項の例13-1では、<input_location>要素とその子要素の<input_address>を使用して出発地と目的地の住所が指定されています。

<input_location>要素を使用する場合は、<route_request>要素のpre_geocoded_locations属性の値をFALSE(デフォルト)に設定する必要があります。リクエストでは<Point>要素と<input_address>要素を併用できます。

13.3.2.4 pre_geocoded_location要素

<pre_geocoded_location>要素は、その住所が通り(エッジ)に沿ってどれくらい離れているのか、また、通りのどちら側にあるのかを示す、ジオコード済の場所を指定します。13.3.1項の例13-5では、<pre_geocoded_location>要素を使用して出発地と目的地の住所が指定されています。

<pre_geocoded_location>要素を使用する場合は、<route_request>要素でpre_geocoded_locations="TRUE"を指定し、出発地と目的地の両方を<pre_geocoded_location>要素で指定する必要があります。

13.3.3 ルート・レスポンスのDTD

次に、ルート・レスポンスの完全なDTDを示します。

<?xml version="1.0" encoding="UTF-8"?>
<!-- route_response DTD includes the gmlgeometry DTD
as an external entity reference.
-->
<!ENTITY % GMLGEOMETRYDTD SYSTEM "gmlgeometry.dtd">
%GMLGEOMETRYDTD;

<!ELEMENT route_response (route | router_error)>

<!ELEMENT route (route_geometry?, segment+)>
<!ATTLIST route id CDATA #REQUIRED
step_count CDATA #IMPLIED
time CDATA #IMPLIED
distance CDATA #IMPLIED>

<!ELEMENT router_error EMPTY>
<!ATTLIST router_error
id CDATA #REQUIRED
error_code CDATA #IMPLIED
error_msg CDATA #IMPLIED>

<!ELEMENT route_geometry (LineString | MultiLineString)?>

<!ELEMENT route_edge_ids (EdgeIDs)?>

<!ELEMENT segment segment*, (LineString | MultiLineString)?>
<!ATTLIST segment sequence CDATA #REQUIRED
instruction CDATA #IMPLIED
time CDATA #IMPLIED
distance CDATA #IMPLIED>

<!ELEMENT segment_geometry (LineString | MultiLineString)?>

<!ELEMENT segment_edge_ids (EdgeIDs)?>

13.3.4 一括ルート・リクエストおよび一括ルート・レスポンスの例

この項では、一括ルート・リクエストと、そのリクエストによって生成されるルート・レスポンスのXMLの例を示します。1つのリクエストでは、指定した住所を使用しています。もう1つのリクエストでは、ジオコード済の場所を使用しています。使用可能な要素と属性のリファレンス情報は、リクエストについては13.3.5項を、レスポンスについては13.3.6項を参照してください。

例13-7では、指定した住所を使用する一括ルート・リクエストを示しています。このリクエストは、Massachusetts州Waltham市にあるオフィスと3つの目的地(New Hampshire州Nashua市のオラクル社のオフィス、Massachusetts州Concord町役場、およびBoston市庁舎)との間の最速ルート(可能な場合は高速道路を使用)を求めます。このリクエストでは、戻されるルートを、出発地と目的地の距離でソートするように要求しています。また、距離が35マイルを超えるルートは戻さないようにしています。

例13-7 指定した住所を使用した場合の一括ルート・リクエスト

<?xml version="1.0" standalone="yes"?>
<batch_route_request
id="8"
route_preference="fastest"
road_preference="highway"
return_driving_directions="false"
sort_by_distance = "true"
cutoff_distance="35"
distance_unit="mile"
time_unit="minute">
<start_location>
<input_location
id="1">
<input_address>
<us_form1
street="1000 Winter St"
lastline="Waltham, MA" />
</input_address>
</input_location>
</start_location>
<end_location>
<input_location id="10">
<input_address>
<us_form1
street="1 Oracle Dr"
lastline="Nashua, NH" />
</input_address>
</input_location>
</end_location>
<end_location>
<input_location
id="11">
<input_address>
<us_form1
street="22 Monument Sq"
lastline="Concord, MA" />
</input_address>
</input_location>
</end_location>
<end_location>
<input_location
id="12">
<input_address>
<us_form1
street="1 City Hall Plaza"
lastline="Boston, MA" />
</input_address>
</input_location>
</end_location>
</batch_route_request>

例13-8に、例13-7のリクエストによって生成されたレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)

例13-8 指定した住所を使用した場合の一括ルート・レスポンス

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<batch_route_response
id="8">
<route
id="11"
step_count="0"
distance="6.637544152543032"
distance_unit="mile"
time="10.53597412109375"
time_unit="minute" />
<route
id="12"
step_count="0"
distance="17.204805418116575"
distance_unit="mile"
time="24.47645467122396"
time_unit="minute" />
<route
id="10"
step_count="0"
distance="29.855655894643636"
distance_unit="mile"
time="34.41252848307292"
time_unit="minute" />
</batch_route_response>

例13-9は、ジオコード済の場所を使用する一括ルート・リクエストを示しています。このリクエストは、可能であれば高速道路を使用し、ある場所と他の3つの場所の間の最短ルートを求めます。距離にはマイル、時間には分を指定しています。このリクエストでは、戻されるルートを、出発地と目的地の距離でソートするように要求しています。また、距離が50マイルを超えるルートは戻さないようにしています。

例13-9 ジオコード済の場所を使用した場合の一括ルート・リクエスト

<?xml version="1.0" standalone="yes"?>
<batch_route_request id="8"
route_preference="shortest"
road_preference="highway"
return_driving_directions="false"
distance_unit="mile"
time_unit="minute"
pre_geocoded_locations="true"
cutoff_distance="50"
sort_by_distance="true">
<start_location>
<pre_geocoded_location id="1">
<edge_id>22161661</edge_id>
<percent>.5</percent>
<side>L</side>
</pre_geocoded_location>
</start_location>
<end_location>
<pre_geocoded_location id="2">
<edge_id>22104391</edge_id>
<percent>.5</percent>
<side>R</side>
</pre_geocoded_location>
</end_location>
<end_location>
<pre_geocoded_location id="3">
<edge_id>22160808</edge_id>
<percent>.5</percent>
<side>L</side>
</pre_geocoded_location>
</end_location>
<end_location>
<pre_geocoded_location id="4">
<edge_id>22325991</edge_id>
<percent>.5</percent>
<side>R</side>
</pre_geocoded_location>
</end_location>
</batch_route_request>

例13-10に、例13-9のリクエストに対するレスポンスを示します。3番目のルートは、指定したカットオフ距離の50マイルよりも長いため、2つのルートのみが戻されます。(出力は、読みやすくするために変更が加えられています。)

例13-10 ジオコード済の場所を使用した場合の一括ルート・レスポンス

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<batch_route_response
id="8">
<route
id="2"
step_count="0"
distance="0.6193447379707987"
distance_unit="mile"
time="1.6662169138590495"
time_unit="minute" />
<route
id="4"
step_count="0"
distance="41.342018851363946"
distance_unit="mile"
time="47.95714518229167"
time_unit="minute" />
</batch_route_response>

13.3.5 一括ルート・リクエストのDTD

次に、一括ルート・リクエストの完全なDTDを示します。DTDの主要な要素と属性については、後続の項で説明しています。

<!ENTITY % GEOCODERDTD SYSTEM "geocoder.dtd">
%GEOCODERDTD;
<!-- input_location element is defined in geocoder.dtd -->

<!ELEMENT batch_route_request (start_location, end_location+)>
<!ATTLIST batch_route_request
vendor CDATA "Oracle"
id CDATA #REQUIRED
route_preference (FASTEST | SHORTEST ) #IMPLIED
road_preference (HIGHWAY | LOCAL) #IMPLIED
distance_unit (KM | MILE | METER ) #IMPLIED
time_unit (HOUR | MINUTE | SECOND) #IMPLIED
sort_by_distance (TRUE | FALSE) #IMPLIED
cutoff_distance CDATA #IMPLIED>

<!-- The following are alternatives for specifying the location. Use
input_location when you want to represent a location with a
street address (input_address) or by longitude/latitude (Point).
If you have already geocoded the location,
you can use information from the geocoder response to
construct a pre_geocoded_location element.
The geocoder returns:
- an edge_id (integer that is the road segment identifier)
- a side ('L' or 'R' – left or right side)
- a percent (floating-point number 0.0 to 1.0 representing
the fraction of the length from the start of the road
segment to this location.
-->
<!ELEMENT pre_geocoded_location (edge_id, percent, side)>
<!ATTLIST pre_geocoded_location id CDATA #REQUIRED>

<!ELEMENT start_location (input_location|pre_geocoded_location)>
<!ELEMENT end_location (input_location|pre_geocoded_location)>
<!-- IMPORTANT VALIDITY CONSTRAINT: each of the input_location
elements that are children of end_location MUST contain
the id attribute.  Normally, the id attribute is optional.
If an id is not present, an exception will result.
Also, each id must be unique within a batch_route_request.
Otherwise, the request will yield unpredictable results.
-->

13.3.5.1 batch_route_request要素

<batch_route_request>要素は、次のとおり定義されています。

<!ELEMENT batch_route_request (start_location, end_location+)>

一括ルート・リクエストのルート要素には、常にbatch_route_requestという名前が付けられます。

子要素の<start_location>は、住所指定、ジオコード済住所または経度/緯度の点として、ルートの出発地を示します。

1つ以上ある子要素の<end_location>は、それぞれが、住所指定、ジオコード済住所または経度/緯度の点として、ルートの目的地を示します。

13.3.5.2 batch_route_request属性

ルート要素<batch_route_request>には、複数の属性があります(そのほとんどはオプションです)。属性は、次のとおり定義されています。

<!ATTLIST batch_route_request
vendor CDATA "Oracle"
id CDATA #REQUIRED
route_preference (FASTEST|SHORTEST) #IMPLIED
road_preference (HIGHWAY|LOCAL) #IMPLIED
distance_unit (KM|MILE|METER) #IMPLIED
time_unit (HOUR|MINUTE|SECOND) #IMPLIED
sort_by_distance (TRUE | FALSE) #IMPLIED
cutoff_distance CDATA #IMPLIED>
pre_geocoded_locations (TRUE|FALSE) #IMPLIED>

<batch_route_request>のほとんどの属性は、<route_request>の属性と同じ意味を持ちます(13.3.5.2項を参照)。また、sort_by_distance属性およびcutoff_distance属性は、単一ルートのリクエストには適用されません。

sort_by_distanceはオプションの属性で、戻されるルートを、出発地から目的地までの距離で昇順にソートするかどうかを示します。TRUEを指定すると距離でソートされたルートが戻され、FALSE(デフォルト)を指定するとソートは行われません。

cutoff_distanceはオプションの属性で、この属性を指定すると、出発地から目的地までの距離が、指定した距離以下のルートのみが戻されます。デフォルトでは、すべてのルートが戻されます。

注意:
距離がcutoff_distanceの指定値以下でも、レスポンスに<router_error>要素(13.3.6項を参照)を生成するようなルートは、レスポンスから除外され表示されません。

13.3.6 一括ルート・レスポンスのDTD

次に、一括ルート・レスポンスの完全なDTDを示します。

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT batch_route_response (route | route_error)+ >
<!ATTLIST batch_route_response id CDATA #REQUIRED>
<!ELEMENT route EMPTY>
<!ATTLIST route
id CDATA #REQUIRED
step_count CDATA #IMPLIED
distance CDATA #IMPLIED
distance_unit CDATA #IMPLIED
time CDATA #IMPLIED
time_unit CDATA #IMPLIED>
<!ELEMENT router_error EMPTY>
<!ATTLIST router_error
id CDATA #REQUIRED
error_code CDATA #IMPLIED
error_msg CDATA #IMPLIED>

13.4 ルーティング・エンジンで使用されるデータ構造

ルーティング・エンジンを使用する各データベース・ユーザーは、各自のスキーマに次の表を持っている必要があります。

- EDGE

- NODE

- PARTITION

- SIGN_POST

EDGE表およびNODE表には、ルーティング・エンジンで使用する街路ネットワークに関するエッジおよびノードの情報が格納されます。街路ネットワークの通りセグメント、交差点およびその他のエンティティを、エッジおよびノードを使用して表現する方法を理解するには、Oracle Spatialネットワーク・データ・モデル(『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照)を熟知している必要があります。

これ以降の項では、ルーティング・エンジンで使用する表について、表名のアルファベット順に説明します。

13.4.1 EDGE表

EDGE表には、街路ネットワークの方向付きエッジごとに1つの行が含まれます。それぞれの通りセグメント(2つのノード間の道路の一部)は、方向のないエッジで、EDGE表内の1つ以上の方向付きエッジに対応します。このEDGE表に含まれる列を、表13-1に示します。

表13-1 EDGE表

列名

データ型

説明

EDGE_ID

NUMBER

エッジID番号です。

START_NODE_ID

NUMBER

このエッジの開始ノードのノードID番号です。

END_NODE_ID

NUMBER

このエッジの終了ノードのノードID番号です。

PARTITION_ID

NUMBER

このエッジが含まれるネットワーク・パーティションのパーティションID番号です。

FUNC_CLASS

NUMBER

1から5の数字で表す道路機能クラスです。1は大規模で交通量が多い高速道路を示し、通常、数字が大きくなるに従って、規模、走行速度および交通量が小さくなります。クラス2の道路は安定した速度が維持され、クラス1の道路へのアクセスに使用されます。クラス3の道路は交通量が多く、クラス2の道路への接続に使用されます。クラス4の道路は、近隣の地区の間の輸送に使用されます(たとえば、交通量が多い市内の主要道など)。クラス5の道路は、その他のすべての道路です(たとえば、郊外の小規模な交通量の少ない通りなど)。

LENGTH

NUMBER

このエッジの長さ(m)です。

SPEED_LIMIT

NUMBER

このエッジに割り当てられた制限速度(m/s)です。

GEOMETRY

SDO_GEOMETRY

このエッジを表す線ストリング・ジオメトリです(座標は、開始ノードから終了ノードの順に並びます)。

NAME

VARCHAR2(128)

このエッジの名前です。

DIVIDER

VARCHAR2(1)

値がNの場合は、エッジが分割されていないことを示します。他の値は、分割されたエッジ上の回転を許容するかどうか、許容する場合はその場所および方法を示します。(現在のルーティング・エンジンでは、エッジが分割されているかどうかのみを考慮しています。)

13.4.2 NODE表

NODE表には、街路ネットワーク内の1つ以上のエッジの開始ノードまたは終了ノードごとに1つの行が含まれます。ノードは、ほとんどの場合、交差点(2つのエッジの交差部分)に対応しますが、交差点と無関係な場合もあります(たとえば、袋小路や行き止まりの通りの終点など)。このNODE表に含まれる列を、表13-2に示します。

表13-2 NODE表

列名

データ型

説明

NODE_ID

NUMBER

ノードID番号です。

GEOMETRY

SDO_GEOMETRY

このノードを表す点ジオメトリです。

PARTITION_ID

NUMBER

このノードが含まれるネットワーク・パーティションのパーティションID番号です。

13.4.3 PARTITION表

PARTITION表は、EDGE表とNODE表の内容に基づいて、Oracleによって生成されます。このPARTITION表に含まれる列を、表13-3に示します。

表13-3 PARTITION表

列名

データ型

説明

PARTITION_ID

NUMBER

パーティションID番号です。

SUBNETWORK

BLOB

このパーティションに含まれているネットワークの一部です。

NUM_NODES

NUMBER

このパーティションのノード数です。

NUM_NON_BOUNDARY_EDGES

NUMBER

このパーティション内のエッジであり、このパーティションに完全に含まれるエッジの数です。

NUM_OUTGOING_BOUNDARY_EDGES

NUMBER

このパーティション内のエッジであり、開始点がこのパーティションで、終了点が別のパーティションであるエッジの数です。(1つのエッジが2つを超えるパーティションにまたがることはできません。たとえば、あるパーティションを起点とするエッジが、2番目のパーティションを通過して3番目のパーティションで終了することはできません。)

NUM_INCOMING_BOUNDARY_EDGES

NUMBER

このパーティション内のエッジであり、開始点が別のパーティションで、終了点がこのパーティションであるエッジの数です。(1つのエッジが2つを超えるパーティションにまたがることはできません。たとえば、あるパーティションを起点とするエッジが、2番目のパーティションを通過して3番目のパーティションで終了することはできません。)

13.4.4 SIGN_POST表

SIGN_POST表には、運転方向の生成に使用する標識情報が格納されます。たとえば、ある標識は、US Route 3 South上のExit 33AがWinchesterに向かうことを示すことができます。SIGN_POSTの行は、高速道路の出口ランプの物理的な標識に対応させることができますが、必ずしも物理的な標識に対応させる必要はありません。SIGN_POST表に含まれる列を、表13-4に示します。

表13-4 SIGN_POST表

列名

データ型

説明

FROM_EDGE_ID

NUMBER

この標識が適用されるエッジのエッジID番号です(たとえば、出口ランプが含まれる通りセグメント)。

TO_EDGE_ID

NUMBER

この標識が指す先のエッジのエッジID番号です(たとえば、出口ランプの先にある通りセグメント)。

RAMP

VARCHAR2(64)

ランプのテキストです(たとえば、US-3 SOUTH)。

EXIT

VARCHAR2(8)

出口番号です(たとえば、33A)。

TOWARD

VARCHAR2(64)

出口の先にある場所を示すテキストです(たとえば、WINCHESTER)。

14 OpenLSのサポート

この章では、Open GeoSpatial Consortium(OGC)のOpen Location Services Initiative(OpenLS)バージョン1.0および1.1に基づいた、Webサービスに対するOracle Spatialのサポートについて説明します。OpenLSの説明については、ダウンロードおよびスキーマへのリンクを含むhttp://www.opengeospatial.org/standards/olsを参照してください。

この章の内容は次のとおりです。

- 14.1項「サポートされているOpenLSサービス」

- 14.2項「OpenLSのApplication Program Interface」

- 14.3項「OpenLSサービスのサポートおよび例」

注意:
OpenLSを使用する前に、第10章「SpatialのWebサービスの概要」で説明されている概念を理解し、その章での説明に従って必要な構成作業を実行しておく必要があります。

14.1 サポートされているOpenLSサービス

Spatialでは、次のOGC OpenLSサービスをサポートしています。

- ロケーション・ユーティリティ・サービス(ジオコーディング)

- プレゼンテーション・サービス(マッピング)

- ルート・サービス(運転方向)

- ディレクトリ・サービス(YP(イエロー・ページ))

Spatialでは、現在、OGC OpenLSのゲートウェイ・サービス(モバイル・ポジショニング)をサポートしていません。

ディレクトリ・サービス(YP (イエロー・ページ))を除き、すべてのサポートされているサービスについて、最初に特定の操作を実行する必要があり、この操作にはサードパーティ・データの取得およびロードと、SpatialのOpenLSサービスの基礎となるテクノロジの構成およびデプロイが含まれている場合もあります。表14-1に、SpatialのOpenLSサービスに加えて、要件および基礎となるテクノロジを説明している章またはマニュアルを示します。

表14-1 SpatialのOpenLSサービスの依存性

SpatialのOpenLSサービス

依存対象

参照先

ジオコーディング

ジオコーディングを行うメタデータとデータ

第11章「住所データのジオコーディング」

マッピング

Oracle MapViewer

Oracle Fusion Middleware for Oracle MapViewerユーザーズ・ガイド

運転方向

ルーティング・エンジン

第13章「ルーティング・エンジン」

ビジネス・ディレクトリ(YP(イエロー・ページ))

外部プロバイダからのデータ

第12章「ビジネス・ディレクトリ(イエロー・ページ)のサポート」

14.2 OpenLSのApplication Program Interface

SpatialのOpenLSサービスを使用する際に、WebサービスAPIとPL/SQL APIという2つのApplication Program Interface(API)が提供されます。

WebサービスAPIでは、Web Feature Services(第15章を参照)と同じSOAPエンベロープを使用します。WSS認証とプロキシ認証およびユーザー管理を使用して、認証と認可を有効にします。

WebサービスよりもPL/SQL APIの方が便利です。認証と認可は、OpenLSリクエストを送信して結果を戻すPL/SQLサブプログラムのコールに使用するデータベース接続を介して有効化されます。PL/SQL APIは、第27章で説明されているSDO_OLSパッケージで実装されます。

14.3 OpenLSサービスのサポートおよび例

この項では、ジオコーディング、マッピング、ルーティングおよびディレクトリ・サービス(YP)に対して提供されているサポートについて説明します。また、この項には、OpenLS WebサービスAPIのリクエストとレスポンスの例も示しています。

14.3.1 OpenLSのジオコーディング

OpenLSジオコーディングの<Request>要素には、GeocodeRequestまたはReverseGeocodeRequestの値が設定されたmethodName属性と、これに対応する<GeocodeRequest>または<ReverseGeocodeRequest>という名前の最上位レベルの要素が含まれます。

methodName属性値がGeocodeRequestである場合、<GeocodeRequest>要素には、自由形式の住所、通りの住所または交差点の住所を指定できる<Address>要素と、0(ゼロ)個以上の<Place>要素、またオプションで<PostalCode>要素が含まれます。<Address>要素には、必須属性countryCodeと複数のオプションの属性が含まれます。

methodName属性値がGeocodeRequestである場合、<ReverseGeocodeRequest>要素には、逆にジオコードする位置を指定する<Position>要素と、戻される情報(デフォルトは通りの住所)を指定するオプションの<ReverseGeocodePreference>要素が含まれます。

例14-1は、California州San Francisco市の2つの住所をジオコードするリクエストです。

例14-1 OpenLSのジオコーディング・リクエスト

<XLS
xmlns=http://www.opengis.net/xls
xmlns:gml=http://www.opengis.net/gml
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://www.opengis.net/xls …"
version="1.0">
<RequestHeader clientName="someName" clientPassword="password"/>
<Request
maximumResponses="10"
methodName="GeocodeRequest"
requestID="123"
version="1.0">
<GeocodeRequest>
<Address countryCode="US">
<StreetAddress>
<Building number="400"/>
<Street>Post Street</Street>
</StreetAddress>
<Place type="CountrySubdivision">CA</Place>
<Place type="Municipality">San Francisco</Place>
<PostalCode>94102</PostalCode>
</Address>
<Address countryCode="US">
<StreetAddress>
<Building number="233"/>
<Street>Winston Drive</Street>
</StreetAddress>
<Place type="CountrySubdivision">CA</Place>
<Place type="Municipality">San Francisco</Place>
<PostalCode>94132</PostalCode>
</Address>
</GeocodeRequest>
</Request>
</XLS>

例14-2は、例14-1のリクエストに対するレスポンスです。2つの住所に対して経度と緯度の座標が戻されます(最初に-122.4083257 37.788208、次に-122.4753965 37.7269066が戻されます)。

例14-2 OpenLSのジオコーディング・レスポンス

<xls:XLS
xmlns:xls=http://www.opengis.net/xls
xmlns:gml=http://www.opengis.net/gml
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
version="1.0">
<xls:ResponseHeader/>
<xls:Response requestID="123" version="1.0">
<xls:GeocodeResponse xmlns:xls="http://www.opengis.net/xls">
<xls:GeocodeResponseList
xmlns:xls=http://www.opengis.net/xls
numberOfGeocodedAddresses="1">
<xls:GeocodedAddress>
<gml:Point xmlns:gml="http://www.opengis.net/gml">
<gml:pos dimension="2" srsName="4326">-122.4083257 37.788208</gml:pos>
</gml:Point>
<xls:Address countryCode="US">
<xls:StreetAddress>
<xls:Building number="400"/>
<xls:Street>POST ST</xls:Street>
</xls:StreetAddress>
<xls:Place type="CountrySubdivision">CA</xls:Place>
<xls:Place type="Municipality">SAN FRANCISCO</xls:Place>
<xls:PostalCode>94102</xls:PostalCode>
</xls:Address>
</xls:GeocodedAddress>
</xls:GeocodeResponseList>
<xls:GeocodeResponseList
xmlns:xls=http://www.opengis.net/xls
numberOfGeocodedAddresses="1">
<xls:GeocodedAddress>
<gml:Point xmlns:gml="http://www.opengis.net/gml">
<gml:pos dimension="2" srsName="4326">-122.4753965 37.7269066</gml:pos>
</gml:Point>
<xls:Address countryCode="US">
<xls:StreetAddress>
<xls:Building number="233"/>
<xls:Street>WINSTON DR</xls:Street>
</xls:StreetAddress>
<xls:Place type="CountrySubdivision">CA</xls:Place>
<xls:Place type="Municipality">SAN FRANCISCO</xls:Place>
<xls:PostalCode>94132</xls:PostalCode>
</xls:Address>
</xls:GeocodedAddress>
</xls:GeocodeResponseList>
</xls:GeocodeResponse>
</xls:Response>
</xls:XLS>

14.3.2 OpenLSのマッピング

OpenLSマッピングの<Request>要素には、PortrayMapRequestの値が設定されたmethodName属性と、<PortrayMapRequest>という名前の最上位レベルの要素が含まれます。

<PortrayMapRequest>要素には、マップの中心点を含む、生成されるマップの出力を指定する<Output>要素が含まれます。

<PortrayMapRequest>要素には、MapViewerのベース・マップと1つ以上の主題を指定する<Basemap>要素、0(ゼロ)個以上の<Overlay>要素(各要素がベース・マップ上でオーバーレイされる情報を指定)を含めることができます。

例14-3は、マップ・イメージを描写するリクエストです。イメージは指定した経度/緯度の点を中心とし、ベース・マップと2つのMapViewerの主題を使用して、マップ上の3つの点を表します。

例14-3 OpenLSのマッピング・リクエスト

<XLS
xmlns=http://www.opengis.net/xls
xmlns:gml=http://www.opengis.net/gml
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://www.opengis.net/xls …"
version="1.1">
<RequestHeader clientName="someName" clientPassword="password"/>
<Request
maximumResponses="1"
methodName="PortrayMapRequest"
requestID="456"
version="1.1">
<PortrayMapRequest>
<Output
BGcolor="#a6cae0"
content="URL"
format="GIF_URL"
height="600"
transparent="false"
width="800">
<CenterContext SRS="8307">
<CenterPoint srsName="8307">
<gml:pos>-122.2615 37.5266</gml:pos>
</CenterPoint>
<Radius unit="M">50000</Radius>
</CenterContext>
</Output>
<Basemap filter="Include">
<Layer name="mvdemo.demo_map.THEME_DEMO_COUNTIES"/>
<Layer name="mvdemo.demo_map.THEME_DEMO_HIGHWAYS"/>
</Basemap>
<Overlay zorder="1">
<POI
ID="123"
description="description"
phoneNumber="1234"
POIName="Books at Post Str (point)">
<gml:Point srsName="4326">
<gml:pos>-122.4083257 37.788208</gml:pos>
</gml:Point>
</POI>
</Overlay>
<Overlay zorder="2">
<POI
ID="456"
description="description"
phoneNumber="1234"
POIName="Books at Winston Dr (address)">
<Address countryCode="US">
<StreetAddress>
<Building number="233"/>
<Street>Winston Drive</Street>
</StreetAddress>
<Place type="CountrySubdivision">CA</Place>
<Place type="CountrySecondarySubdivision"/>
<Place type="Municipality">San Francisco</Place>
<Place type="MunicipalitySubdivision"/>
<PostalCode>94132</PostalCode>
</Address>
</POI>
</Overlay>
<Overlay zorder="3">
<Position levelOfConf="1">
<gml:Point gid="a boat (point)" srsName="4326">
<gml:pos>-122.8053965 37.388208</gml:pos>
</gml:Point>
</Position>
</Overlay>
</PortrayMapRequest>
</Request>
</XLS>

例14-4は、例14-3のリクエストに対するレスポンスです。ただし、実際のレスポンスでは、<xls:URL>Actual URL replaced with constant string for test</xls:URL>の行にマップ・イメージの実際のURLが含まれます。

例14-4 OpenLSのマッピング・レスポンス

<xls:XLS
xmlns:xls=http://www.opengis.net/xls
xmlns:gml=http://www.opengis.net/gml
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://www.opengis.net/xls …"
version="1.1">
<xls:ResponseHeader/>
<xls:Response numberOfResponses="1" requestID="456" version="1.1">
<xls:PortrayMapResponse>
<xls:Map>
<xls:Content format="GIF_URL" height="600" width="800">
<xls:URL>Actual URL replaced with constant string for test</xls:URL>
</xls:Content>
<xls:BBoxContext srsName="4326">
<gml:pos>-122.86037685607968 37.07744235794024</gml:pos>
<gml:pos>-121.66262314392031 37.97575764205976</gml:pos>
</xls:BBoxContext>
</xls:Map>
</xls:PortrayMapResponse>
</xls:Response>
</xls:XLS>

14.3.3 OpenLSのルーティング

OpenLSルーティングの<Request>要素には、DetermineRouteRequestの値が設定されたmethodName属性と、<DetermineRouteRequest>という名前の最上位レベルの要素が含まれます。

<DetermineRouteRequest>要素には、ルート・プリファレンスとルートに含める点(およびオプションでルートで回避する点)を指定する<RoutePlan>要素が含まれます。点については少なくとも開始点と終了点を指定します。

また、<DetermineRouteRequest>要素には、ルートを表す線ストリング・ジオメトリを戻す<RouteGeometryRequest>要素、ルートのマップ・イメージをリクエストする<RouteMapRequest>要素およびルートの運転方向をリクエストする<RouteInstructionsRequest>要素が0(ゼロ)個以上含まれます。

例14-5は、Massachusetts州Cambridge市内の住所とNew Hampshire州Nashua市内の住所との間の最速ルートに対するルート・ジオメトリおよびマップ・イメージのリクエストです。

例14-5 OpenLSのルーティング・リクエスト

<XLS
xmlns=http://www.opengis.net/xls
xmlns:gml=http://www.opengis.net/gml
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://www.opengis.net/xls …"
version="1.1">
<RequestHeader clientName="someName" clientPassword="password"/>
<Request
maximumResponses="10"
methodName="DetermineRouteRequest"
requestID="12345"
version="1.0">
<DetermineRouteRequest>
<RoutePlan>
<RoutePreference>Fastest</RoutePreference>
<WayPointList>
<StartPoint>
<POI description="Borders" ID="1" phoneNumber="12345" POIName="Borders">
<Address countryCode="US">
<StreetAddress>
<Building number="100"/>
<Street>Cambridgeside Pl</Street>
</StreetAddress>
<Place type="CountrySubdivision">MA</Place>
<Place type="Municipality">Cambridge</Place>
<PostalCode>02141</PostalCode>
</Address>
</POI>
</StartPoint>
<EndPoint>
<Address countryCode="US">
<StreetAddress>
<Building number="1"/>
<Street>Oracle Dr</Street>
</StreetAddress>
<Place type="CountrySubdivision">New Hampshire</Place>
<Place type="Municipality">Nashua</Place>
<PostalCode>03062</PostalCode>
</Address>
</EndPoint>
</WayPointList>
<AvoidList/>
</RoutePlan>
<RouteGeometryRequest maxPoints="100" provideStartingPortion="true" scale="1">
<BoundingBox>
<gml:pos/>
<gml:pos/>
</BoundingBox>
</RouteGeometryRequest>
<RouteMapRequest>
<Output BGcolor="" format="" height="600" transparent="false" width="800"/>
</RouteMapRequest>
</DetermineRouteRequest>
</Request>
</XLS>

例14-6は、例14-5のリクエストに対するレスポンスの一部です。例14-6では、合計予想運転時間、合計距離、ルートを囲む最小境界矩形の左下および右上の経度/緯度座標、およびルートを表す線ジオメトリに沿った最初のいくつかの点の経度/緯度座標を示します。

例14-6 OpenLSのルーティング・レスポンス

<xls:XLS
xmlns:xls=http://www.opengis.net/xls
xmlns:gml=http://www.opengis.net/gml
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://www.opengis.net/xls …"
version="1.1">
<xls:ResponseHeader/>
<xls:Response numberOfResponses="1" requestID="12345" version="1.0">
<xls:DetermineRouteResponse>
<xls:RouteSummary>
<xls:TotalTime>P0DT0H42M26S</xls:TotalTime>
<xls:TotalDistance uom="M" value="61528.7"/>
<xls:BoundingBox srsName="4326">
<gml:pos dimension="2" srsName="4326">-71.45937289088023 42.36694</gml:pos>
<gml:pos dimension="2" srsName="4326">-71.06754 42.70824</gml:pos>
</xls:BoundingBox>
</xls:RouteSummary>
<xls:RouteGeometry>
<gml:LineString srsName="4326">
<gml:pos
xmlns:gml=http://www.opengis.net/gml
dimension="2"
srsName="4326">-71.07444,42.36792</gml:pos>
<gml:pos
xmlns:gml=http://www.opengis.net/gml
dimension="2"
srsName="4326">-71.07162,42.37082</gml:pos>
<gml:pos
xmlns:gml=http://www.opengis.net/gml
dimension="2"
srsName="4326">-71.06954,42.37333</gml:pos>
. . .

14.3.4 OpenLSのディレクトリ・サービス(YP)

OpenLSディレクトリ・サービスの<Request>要素には、DirectoryRequestの値が設定されたmethodName属性と、<DirectoryRequest>という名前の最上位レベルの要素が含まれます。

<DirectoryRequest>要素には、対象点(戻されるビジネス情報の距離の計算元となる中心点)の場所を指定する<POILocation>要素が含まれます。

また、<DirectoryRequest>要素には、1つ以上の<POIProperty>要素を指定する<POIProperties>要素が含まれ、各POIProperty要素にはプロパティを示すname属性およびプロパティの値を示すvalue属性が含まれます。name属性には、ID、POIName、PhoneNumber、Keyword、NAICS_type、NAICS_subType、NAICS_category、SIC_type、SIC_subType、SIC_category、SIC_codeまたはotherのうち任意の文字列を指定できます。

例14-7は、指定した2つのSIC (Standard Industrial Classification)コードのいずれかまたは両方を持つビジネスに関する情報のリクエストです。この例では、2つのSICコード(1234567890および1234567891)は架空のコードです。また、これらのコードは一部のテスト・データセットとともに使用されていますが、このデータセットでは、実際にはこれらのSICコードを持たないカテゴリ(Book storesおよびCafes & Cafeterias)に、これらのコードが適用されています。

例14-7 OpenLSのディレクトリ・サービス(YP)・リクエスト

<XLS
xmlns=http://www.opengis.net/xls
xmlns:gml=http://www.opengis.net/gml
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://www.opengis.net/xls …"
version="1.0">
<RequestHeader clientName="someName" clientPassword="password"/>
<Request
requestID="123"
maximumResponses="100"
version="1.1"
methodName="DirectoryRequest">
<DirectoryRequest>
<POILocation>
<Address countryCode="US">
</Address>
</POILocation>
<POIProperties>
<POIProperty name="SIC_code" value="1234567890"/>
<POIProperty name="SIC_code" value="1234567891"/>
</POIProperties>
</DirectoryRequest>
</Request>
</XLS>

例14-8は、例14-7のリクエストに対するレスポンスです。レスポンスには、特定のSICコードのいずれかまたは両方が適用されている2つのビジネスに関する情報が含まれます。

例14-8 OpenLSのディレクトリ・サービス(YP)・レスポンス

<xls:XLS
xmlns:xls=http://www.opengis.net/xls
xmlns:gml=http://www.opengis.net/gml
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
version="1.0">
<xls:ResponseHeader/>
<xls:Response requestID="123" version="1.1">
<DirectoryResponse xmlns="http://www.opengis.net/xls">
<xls:POIContext xmlns:xls="http://www.opengis.net/xls">
<xls:POI
ID="1"
POIName="Borders Books &amp; More"
phoneNumber="415-731-0665"
description="Books &amp; more">
<POIAttributeList xmlns="http://www.opengis.net/xls">
<xls:SIC
xmlns:xls=http://www.opengis.net/xls
category="Book stores"
code="1234567890"
subType=""
type=""/>
<xls:SIC
xmlns:xls=http://www.opengis.net/xls
category="Cafes &amp; Cafeterias"
code="1234567891"
subType="" type=""/>
</POIAttributeList>
<gml:Point xmlns:gml="http://www.opengis.net/gml">
<gml:pos dimension="2" srsName="4326">-122.4753965 37.7269066</gml:pos>
</gml:Point>
<xls:Address countryCode="US">
<xls:StreetAddress>
<xls:Building number="233"/>
<xls:Street>Winston Drive</xls:Street>
</xls:StreetAddress>
<xls:Place type="CountrySubdivision">CA</xls:Place>
<xls:Place type="CountrySecondarySubdivision"/>
<xls:Place type="Municipality">San Francisco</xls:Place>
<xls:Place type="MunicipalitySubdivision"/>
<xls:PostalCode>94132</xls:PostalCode>
</xls:Address>
</xls:POI>
</xls:POIContext>
<xls:POIContext xmlns:xls="http://www.opengis.net/xls">
<xls:POI
ID="2"
POIName="Borders Books &amp; More"
phoneNumber="415-399-1633"
description="Books &amp; more">
<POIAttributeList xmlns="http://www.opengis.net/xls">
<xls:SIC
xmlns:xls=http://www.opengis.net/xls
category="Book stores"
code="1234567890"
subType=""
type=""/>
<xls:SIC
xmlns:xls=http://www.opengis.net/xls
category="Cafes &amp; Cafeterias"
code="1234567891"
subType=""
type=""/>
</POIAttributeList>
<gml:Point xmlns:gml="http://www.opengis.net/gml">
<gml:pos dimension="2" srsName="4326">-122.4083257 37.788208</gml:pos>
</gml:Point>
<xls:Address countryCode="US">
<xls:StreetIntersection>
<xls:Street>Post St</xls:Street>
<xls:IntersectingStreet>Powell St</xls:IntersectingStreet>
</xls:StreetIntersection>
<xls:Place type="CountrySubdivision">CA</xls:Place>
<xls:Place type="CountrySecondarySubdivision"/>
<xls:Place type="Municipality">San Francisco</xls:Place>
<xls:Place type="MunicipalitySubdivision"/>
<xls:PostalCode>94102</xls:PostalCode>
</xls:Address>
</xls:POI>
</xls:POIContext>
</DirectoryResponse>
</xls:Response>
</xls:XLS>

15 Web Feature Service(WFS)のサポート

この章では、Oracle SpatialにおけるWeb Feature Service(WFS)のサポートについて説明します。この章の内容は次のとおりです。

- 15.1項「WFSエンジン」

- 15.2項「フィーチャ・タイプの管理」

- 15.3項「XMLのリクエストおよびレスポンス例」

- 15.4項「WFSの管理用のJava API」

- 15.5項「Oracle Workspace ManagerでのWFSの使用」

注意:
WFSを使用する前に、第10章「SpatialのWebサービスの概要」で説明されている概念を理解し、その章での説明に従って必要な構成作業を実行しておく必要があります。
以前のリリースの、1つ以上のSYS.XMLTABLEINDEX型の索引を使用して索引付けされたデータがある場合には、アップグレード後に索引をアップグレードして再作成する前に、関連する索引を削除する必要があります(A.3項を参照)。

15.1 WFSエンジン

この章では、Web Feature Serviceエンジンについて、クライアントとの関係およびデータベース・サーバーとの関係も含めて説明します。WFSはWebサービスとして実装され、WebLogic Server、Oracle Application ServerまたはスタンドアロンのOracle Application Server Containers for J2EE (OC4J)環境にデプロイできます。

WFSにはメタデータ層があります。この層では、WFSリクエストへの応答で必要とされるメタデータがデータベースに格納されます。メタデータには空間列が含まれており、Oracle Spatialインタフェースを使用して空間列の問合せおよび処理が可能です。メタデータには、フィーチャの非空間属性と空間属性の関連付け、およびWeb Feature Serviceからクライアントに提供されるサービスも格納されます。

図15-1に、WFSのアーキテクチャを示します。

図15-1 Web Feature Serviceのアーキテクチャ

次に、図15-1について説明します。

- WFSは、中間層の一部であり、WFSサーバーAPIおよびフィーチャ・キャッシュを含みます。

- WFSでは、SOAP/XML形式のWFSリクエストおよびレスポンスを使用して、Webサービス・クライアントと通信できます。

- WFSでは、データベースに対するJDBCコールを介して空間データおよびメタデータへのアクセスが実行されます。

- データベースには、WFSのメタデータとデータ、および管理操作用のPL/SQLパッケージとともにOracle Spatialが含まれます(第34章「SDO_WFS_PROCESSパッケージ(WFSの処理)」および第33章「SDO_WFS_LOCKパッケージ(WFS)」を参照)。

Webサービス・セキュリティ(WSS)は、セキュアなトランスポートを使用して実装されます。ユーザー識別子およびユーザー・ラベルはLDAPで管理され、中間層とWSSを組み合せて認証が行われます。Oracleのラベルベースのセキュリティは、フィーチャ・レベルでのユーザー権限の管理に使用されます。WSSの詳細は、第17章を参照してください。

15.2 フィーチャ・タイプの管理

WFSでは、リレーショナルおよびドキュメントベースのフィーチャ・タイプがサポートされます。

- リレーショナル・フィーチャ・タイプでは、データベース表のコンテンツがフィーチャ・インスタンスとして公開されます。リレーショナル・フィーチャ・タイプは、Oracle Spatialを使用して地理空間データを管理する場合や、Oracle Databaseを使用してその他のビジネス・データを管理する場合に適しています。Spatial WFS実装は、特にWebサービスを使用して実装されたサービス指向アーキテクチャ(SOA)・システムにおける、データへのアクセス方法を提供します。
リレーショナル・フィーチャ・タイプの管理には、PL/SQL Application Program Interface(API)を使用します。PL/SQLパッケージのSDO_WFS_LOCKおよびSDO_WFS_PROCESS(第33章および第34章をそれぞれ参照)は、リレーショナル・フィーチャ・タイプを管理できます。

- ドキュメントベース・フィーチャ・タイプでは、XMLスキーマベースのXMLコンテンツがフィーチャ・インスタンスとして公開されます。ドキュメントベース・フィーチャ・タイプは、メイン・データ・ソースとしてXMLを使用する場合や、そのようなデータでOracle Spatialを使用しない場合に適しています。このようなデータの場合、Spatial WFSの実装によって、ジオメトリのコンポーネントが抽出され、SDO_GEOMETRY型を使用して格納されます。残りのXMLコンポーネントはOracle XDBに格納され、これらのコンポーネントに対して適切なXMLIndex索引が作成されます。
ドキュメントベース・フィーチャ・タイプの管理には、Java API(15.4項を参照)を使用します。

これらのAPIを使用すると、次のような操作を実行できます。

- フィーチャ・タイプのパブリッシュ

- フィーチャ・タイプの削除(パブリッシュの解除)

- WFSメタデータおよびフィーチャ・タイプに対する権限の付与および取消し

- リレーショナル・フィーチャ・タイプの場合:フィーチャ表のロックの有効化およびロックの無効化(ドキュメントベース・フィーチャ・タイプではデフォルトでロックが有効化される)

15.2.1 機能のドキュメント

機能のドキュメントは、機能のインスタンスを記述したドキュメントです。このドキュメントには、フィーチャ・タイプ(道路、河川など)およびサポートされる操作(挿入、削除など)のタイプが指定されます。

機能のドキュメントは、GetCapabilitiesリクエストに対するレスポンスとしてWFSサーバーで生成されます。WFSサーバーでは機能テンプレートを使用します。フィーチャ・タイプおよび操作に関する情報がこのテンプレートに追加されて、機能のドキュメントが作成されます。

クライアントがHTTP GETメソッドを使用してこの機能のドキュメントにアクセスするには、次のようにSOAPインタフェースまたはXMLインタフェースのいずれかを使用します。

- SOAPインタフェースの場合は、oracle.spatial.ws.servlet.WFSServletを使用します。このサーブレットには、次の書式のアドレスでアクセスできます。

http://machine-name:port/SpatialWS-SpatialWS-context-root/wfsservlet?request=GetCapabilities&service=WFS&version=1.0.0

- XMLインタフェースの場合は、oracle.spatial.ws.servlet.WFSXMLServletを使用します。このサーブレットには、次の書式のアドレスでアクセスできます。

http://machine-name:port/SpatialWS-SpatialWS-context-root/xmlwfsservlet?request=GetCapabilities&service=WFS&version=1.0.0

次に、前述の書式について説明します。

- machine-nameは、アプリケーション・サーバーまたはOC4Jサーバーが実行されているシステムの名前です。

- portは、アプリケーション・サーバーまたはOC4Jサーバーが実行されているポートの番号です。

- SpatialWS-SpatialWS-context-rootは、SpatialのWebサービス・アプリケーションがマウントされるデフォルトのrootです。

- wfsservletは、oracle.spatial.ws.servlet.WFSServletに対するservlet-mapping url-patternです。web.xmlファイルにデフォルトで指定されます。

- xmlwfsservletは、oracle.spatial.ws.servlet.WFSXMLServletに対するservlet-mapping url-patternです。web.xmlファイルにデフォルトで指定されます。

15.3 XMLのリクエストおよびレスポンス例

この項では、次の各操作について、WFSエンジンへのフィーチャ・リクエストの一部と、各リクエストに対するレスポンスを示します。

- GetCapabilities

- DescribeFeatureType

- GetFeature

- GetFeatureWithLock

- LockFeature

- 次のトランザクション・タイプを指定するサブ要素を含むトランザクション

- Insert

- Update

- Delete

XMLリクエストとレスポンスの書式は、リレーショナルおよびドキュメントベースの両方のフィーチャ・タイプで同様のものが使用されます。この項のいくつかの例で、6.13項の例6-17で使用したCOLA_MARKETS_CS表に基づくリレーショナル・フィーチャを参照します。MKT_ID列には各フィーチャの一意の数値IDが含まれ、NAME列には各フィーチャの名前(cola_a、cola_b、cola_cまたはcola_d)が含まれ、SHAPE列には各フィーチャと関連付けられたジオメトリが含まれます。

例15-1は、指定した名前空間URLで、WFSという名前のWFSサーバーの機能を取得するリクエストです。このリクエストでは、機能のドキュメント(15.2.1項を参照)が戻されます。

例15-1 GetCapabilitiesリクエスト

<?xml version="1.0" ?>
<GetCapabilities
service="WFS"
version="1.0.0"
xmlns="http://www.opengis.net/wfs" />

例15-2は、例15-1のリクエストに対するレスポンスからの抜粋です。

例15-2 GetCapabilitiesのレスポンス

<WFS_Capabilities xmlns="http://www.opengis.net/wfs" version="1.0.0" xmlns:ogc="http://www.opengis.net/ogc" xmlns:myns="http://www.example.com/myns">
<Service>
<Name> Oracle WFS </Name>
<Title> Oracle Web Feature Service </Title>
<Abstract> Web Feature Service maintained by Oracle </Abstract>
<OnlineResource>http://localhost:8888/SpatialWS-SpatialWS-context-root/wfsservlet</OnlineResource>
</Service>
<Capability>
<Request>
<GetCapabilities>
<DCPType>
<HTTP>
<Get onlineResource="http://localhost:8888/SpatialWS-SpatialWS-context-root/wfsservlet"/>
</HTTP>
</DCPType>
<DCPType>
<HTTP>
<Post onlineResource="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort"/>
</HTTP>
</DCPType>
</GetCapabilities>
<DescribeFeatureType>
<SchemaDescriptionLanguage>
<XMLSCHEMA/>
</SchemaDescriptionLanguage>
<DCPType>
<HTTP>
<Post onlineResource="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort"/>
</HTTP>
</DCPType>
</DescribeFeatureType>
<GetFeature>
<ResultFormat>
<GML2/>
</ResultFormat>
<DCPType>
<HTTP>
<Post onlineResource="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort"/>
</HTTP>
</DCPType>
</GetFeature>
<GetFeatureWithLock>
<ResultFormat>
<GML2/>
</ResultFormat>
<DCPType>
<HTTP>
<Post onlineResource="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort"/>
</HTTP>
</DCPType>
</GetFeatureWithLock>
<Transaction>
<DCPType>
<HTTP>
<Post onlineResource="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort"/>
</HTTP>
</DCPType>
</Transaction>
<LockFeature>
<DCPType>
<HTTP>
<Post onlineResource="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort"/>
</HTTP>
</DCPType>
</LockFeature>
</Request>
</Capability>
<FeatureTypeList>
<Operations>
<Insert/>
<Update/>
<Delete/>
<Query/>
<Lock/>
</Operations>
<FeatureType xmlns:myns="http://www.example.com/myns">
<Name> myns:COLA</Name>
<Title> LIST OF COLA MARKETS </Title>
<SRS> SDO:8307</SRS>
</FeatureType><FeatureType xmlns:myns="http://www.example.com/myns">
<Name> myns:COLAVIEW1 </Name>
<Title> LIST OF COLA MARKET VIEW </Title>
<SRS> SDO:8307</SRS>
</FeatureType><FeatureType xmlns:wfs="http://www.opengis.net/wfs">
<Name xmlns:myns="http://www.example.com/myns1">myns:SampleFeature</Name>
<Title>SAMPLE FEATURE</Title>
<SRS>EPSG:32615</SRS>
</FeatureType></FeatureTypeList>
<ogc:Filter_Capabilities xmlns:ogc="http://www.opengis.net/ogc">
<ogc:Spatial_Capabilities>
<ogc:Spatial_Operators>
<ogc:BBOX/>
<ogc:Equals/>
<ogc:Disjoint/>
<ogc:Intersect/>
<ogc:Touches/>
<ogc:Crosses/>
<ogc:Within/>
<ogc:Contains/>
<ogc:Overlaps/>
<ogc:Beyond/>
<ogc:DWithin/>
</ogc:Spatial_Operators>
</ogc:Spatial_Capabilities>
<ogc:Scalar_Capabilities>
<ogc:Logical_Operators/>
<ogc:Comparison_Operators>
<ogc:Simple_Comparisons/>
<ogc:Like/>
<ogc:Between/>
<ogc:NullCheck/>
</ogc:Comparison_Operators>
<ogc:Arithmetic_Operators>
<ogc:Simple_Arithmetic/>
</ogc:Arithmetic_Operators>
</ogc:Scalar_Capabilities>
</ogc:Filter_Capabilities>
</WFS_Capabilities>

例15-3は、COLAという名前のフィーチャ・タイプを記述するリクエストです。

例15-3 DescribeFeatureTypeリクエスト

<?xml version="1.0" ?>
<wfs:DescribeFeatureType
service="WFS"
version="1.0.0"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:myns="http://www.example.com/myns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://www.opengis.net/wfs ../wfs/1.0.0/WFS-basic.xsd">
<wfs:TypeName>myns:COLA</wfs:TypeName>
</wfs:DescribeFeatureType>

例15-4は、例15-3のリクエストに対するレスポンスです。レスポンスはXMLスキーマ定義(XSD)です。

例15-4 DescribeFeatureTypeのレスポンス

<xsd:schema targetNamespace="http://www.example.com/myns" xmlns:wfs="http://www.opengis.net/wfs" xmlns:myns="http://www.example.com/myns" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" version="1.0.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.opengis.net/gml" schemaLocation="http://localhost:8888/examples/servlets/xsds/feature.xsd"/>
<xsd:element name="COLA" type="myns:COLAType" substitutionGroup="gml:_Feature"/>
<xsd:complexType name="COLAType">
<xsd:complexContent>
<xsd:extension base="gml:AbstractFeatureType">
<xsd:sequence>
<xsd:element name="MKT_ID" type="xsd:double"/>
<xsd:element name="NAME" nillable="true">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="32"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="SHAPE" type="gml:PolygonMemberType" nillable="true"/>
</xsd:sequence>
<xsd:attribute name="fid" type="xsd:double"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>

例15-5は、MKT_ID値が2より大きくNAME値がcola_cであるか、MKT_ID値が3より大きくNAME値がcola_dであるタイプCOLAのフィーチャのMKT_ID、NAMEおよびSHAPEプロパティを取得するリクエストです。

注意:
GetFeatureおよびGetFeatureWithLockでは<Query>要素および<PropertyName>要素を使用して選択するプロパティ名をリストしますが、問い合せるフィーチャ・タイプに含まれる任意の最上位レベルの要素を指定できます。その場合は、問合せへのレスポンスとして(ネストされた)コンテンツ全体が戻されます。深さが一定でないXPathは、<Query>要素の直下の<PropertyName>要素ではサポートされませんが<Query>要素の下の<Filter>要素に含まれる<PropertyName>要素ではサポートされます(例15-5および例15-7を参照)。

例15-5 GetFeatureリクエスト

<?xml version="1.0" ?>
<wfs:GetFeature
service="WFS"
version="1.0.0"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:myns="http://www.example.com/myns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs ../wfs/1.0.0/WFS-basic.xsd">
<wfs:Query typeName="myns:COLA">
<ogc:PropertyName>myns:MKT_ID</ogc:PropertyName>
<ogc:PropertyName>myns:NAME</ogc:PropertyName>
<ogc:PropertyName>myns:SHAPE</ogc:PropertyName>
<ogc:Filter>
<ogc:And>
<ogc:And>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName>myns:COLA/myns:MKT_ID</ogc:PropertyName>
<ogc:Literal> 2 </ogc:Literal>
</ogc:PropertyIsGreaterThan>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>myns:COLA/myns:NAME</ogc:PropertyName>
<ogc:Literal>cola_c</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:And>
<ogc:Or>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>myns:COLA/myns:MKT_ID</ogc:PropertyName>
<ogc:Literal>3</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>myns:COLA/myns:NAME</ogc:PropertyName>
<ogc:Literal>cola_d</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Or>
</ogc:And>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>

例15-6は、例15-5のリクエストに対するレスポンスです。

例15-6 GetFeatureのレスポンス

<?xml version = '1.0' encoding = 'UTF-8'?>
<wfs:FeatureCollection xsi:schemaLocation="http://www.example.com/myns http://localhost:8888/wfsservlet?featureTypeId=1 http://www.opengis.net/wfs ../wfs/1.0.0/WFS-basic.xsd" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<gml:boundedBy xmlns:gml="http://www.opengis.net/gml">
<gml:Box srsName="SDO:8307">
<gml:coordinates>3.0,3.0 6.0,5.0</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<gml:featureMember xmlns:gml="http://www.opengis.net/gml">
<myns:COLA fid="3" xmlns:myns="http://www.example.com/myns">
<myns:MKT_ID>3</myns:MKT_ID>
<myns:NAME>cola_c</myns:NAME>
<myns:SHAPE>
<gml:Polygon srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates decimal="." cs="," ts=" ">3.0,3.0 6.0,3.0
6.0,5.0 4.0,5.0 3.0,3.0 </gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</myns:SHAPE>
</myns:COLA>
</gml:featureMember>
</wfs:FeatureCollection>

例15-7は、MKT_ID値が2より大きく、NAME値がcola_cであるか、またはMKT_ID値が3であるタイプCOLAのフィーチャのMKT_ID、NAMEおよびSHAPEプロパティを取得し、そのフィーチャをロックするリクエストです。

例15-7 GetFeatureWithLockリクエスト

<?xml version="1.0" ?>
<wfs:GetFeatureWithLock
service="WFS"
version="1.0.0"
expiry="5"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:myns="http://www.example.com/myns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<wfs:Query typeName="myns:COLA">
<ogc:PropertyName>myns:MKT_ID</ogc:PropertyName>
<ogc:PropertyName>myns:NAME</ogc:PropertyName>
<ogc:PropertyName>myns:SHAPE</ogc:PropertyName>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>myns:COLA/myns:MKT_ID</ogc:PropertyName>
<ogc:Literal> 3 </ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeatureWithLock>

例15-8は、例15-7のリクエストに対するレスポンスです。

例15-8 GetFeatureWithLockのレスポンス

<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" lockId="1" xsi:schemaLocation="http://www.example.com/myns http://localhost:8888/SpatialWS-SpatialWS-context-root/wfsservlet?featureTypeId=1 " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<gml:boundedBy xmlns:gml="http://www.opengis.net/gml">
<gml:Box srsName="SDO:8307">
<gml:coordinates>3.0,3.0 6.0,5.0</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<gml:featureMember xmlns:gml="http://www.opengis.net/gml">
<myns:COLA xmlns:myns="http://www.example.com/myns" fid="3">
<myns:MKT_ID>3</myns:MKT_ID>
<myns:NAME>cola_c</myns:NAME>
<myns:SHAPE>
<gml:Polygon srsName="SDO:8307">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates decimal="." cs="," ts=" ">3.0,3.0 6.0,3.0 6.0,5.0 4.0,5.0 3.0,3.0 </gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</myns:SHAPE>
</myns:COLA>
</gml:featureMember>
</wfs:FeatureCollection>

例15-9は、MKT_ID値が2のフィーチャをロックするリクエストです。

例15-9 LockFeatureリクエスト

<?xml version="1.0" ?>
<wfs:LockFeature
service="WFS"
version="1.0.0"
expiry="5"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:myns="http://www.example.com/myns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<wfs:Lock typeName="myns:COLA">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>myns:COLA/myns:MKT_ID</ogc:PropertyName>
<ogc:Literal> 2 </ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Lock>
</wfs:LockFeature>

例15-10は、例15-9のリクエストに対するレスポンスです。

例15-10 LockFeatureのレスポンス

<wfs:WFS_LockFeatureResponse xmlns:wfs="http://www.opengis.net/wfs">
<wfs:LockId>2</wfs:LockId>
</wfs:WFS_LockFeatureResponse>

例15-11は、WFSという名前のWFSサービスに関連付けられた表に、MKT_IDが5でNAMEがcola_eのフィーチャを挿入するリクエストです。

例15-11 Insertリクエスト

<?xml version="1.0"?>
<wfs:Transaction version="1.0.0" handle="TX01" service="WFS" xmlns="http://www.e
xample.com/myns" xmlns:myns="http://www.example.com/myns" xmlns:gml="http://ww
w.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wfs="http://www.
opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<wfs:Insert handle="INSERT01" >
<myns:COLA fid="5" xmlns:myns="http://www.example.com/myns">
<myns:MKT_ID>5</myns:MKT_ID>
<myns:NAME>cola_e</myns:NAME>
<myns:SHAPE>
<gml:Polygon srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates decimal="." cs="," ts=" ">1.0,3.0 6.0,3.0 6.0,5.0 4.0,5.0 1.0,3.0 </gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</myns:SHAPE>
</myns:COLA>
</wfs:Insert>
</wfs:Transaction>

例15-12は、例15-11のリクエストに対するレスポンスです。

例15-12 Insertのレスポンス

<?xml version = '1.0' encoding = 'UTF-8'?>
<wfs:WFS_TransactionResponse version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs">
<wfs:InsertResult handle="INSERT01">
<ogc:FeatureId fid="5" xmlns:ogc="http://www.opengis.net/ogc"/>
</wfs:InsertResult>
<wfs:TransactionResult handle="TX01">
<wfs:Status>
<wfs:SUCCESS/>
</wfs:Status>
</wfs:TransactionResult>
</wfs:WFS_TransactionResponse>

例15-13は、WFSという名前のWFSサービスに関連付けられた表に含まれるフィーチャのうち、MKT_IDが2より大きく4より小さい、かつNAMEがNULL以外のフィーチャを更新するリクエストです。このリクエストには、指定したフィーチャのNAME値をcola_clに設定することが指定されています。

例15-13 Updateリクエスト

<?xml version="1.0"?>
<wfs:Transaction version="1.0.0" handle="TX01" service="WFS" xmlns="http://www.example.com/myns"
xmlns:myns="http://www.example.com/myns" xmlns:gml="http://www.opengis.net/gml"
xmlns:ogc="http://www.opengis.net/ogc" xmlns:wfs="http://www.
opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<wfs:Update handle="UPDATE1" typeName="myns:COLA" >
<wfs:Property>
<wfs:Name>myns:COLA/myns:NAME</wfs:Name>
<wfs:Value>cola_c1</wfs:Value>
</wfs:Property>
<ogc:Filter>
<ogc:And>
<ogc:And>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName>myns:COLA/myns:MKT_ID</ogc:PropertyName>
<ogc:Literal> 2 </ogc:Literal>
</ogc:PropertyIsGreaterThan>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>myns:COLA/myns:MKT_ID</ogc:PropertyName>
<ogc:Literal> 4 </ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
<ogc:Not>
<ogc:PropertyIsNull>
<ogc:PropertyName>myns:COLA/myns:NAME</ogc:PropertyName>
</ogc:PropertyIsNull>
</ogc:Not>
</ogc:And>
</ogc:Filter>
</wfs:Update>
</wfs:Transaction>

例15-14は、例15-13のリクエストに対するレスポンスです。

例15-14 Updateのレスポンス

<?xml version = '1.0' encoding = 'UTF-8'?>
<wfs:WFS_TransactionResponse version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs">
<wfs:TransactionResult handle="TX01">
<wfs:Status>
<wfs:SUCCESS/>
</wfs:Status>
</wfs:TransactionResult>
</wfs:WFS_TransactionResponse>

例15-15は、WFSという名前のWFSサービスに関連付けられた表に含まれるフィーチャのうち、MKT_IDが3より大きくNAMEがcola_eのフィーチャおよびNAMEがNULL以外のフィーチャを削除するリクエストです。

例15-15 Deleteリクエスト

<?xml version="1.0"?>
<wfs:Transaction version="1.0.0" handle="TX01" service="WFS" xmlns="http://www.example.com/myns"
xmlns:myns="http://www.example.com/myns" xmlns:gml="http://www.opengis.net/gml"
xmlns:ogc="http://www.opengis.net/ogc" xmlns:wfs="http://www.
opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<wfs:Delete handle="DELETE1" typeName="myns:COLA" >
<ogc:Filter>
<ogc:And>
<ogc:And>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName>myns:COLA/myns:MKT_ID</ogc:PropertyName>
<ogc:Literal> 3 </ogc:Literal>
</ogc:PropertyIsGreaterThan>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>myns:COLA/myns:NAME</ogc:PropertyName>
<ogc:Literal> cola_e </ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:And>
<ogc:Not>
<ogc:PropertyIsNull>
<ogc:PropertyName>myns:COLA/myns:NAME</ogc:PropertyName>
</ogc:PropertyIsNull>
</ogc:Not>
</ogc:And>
</ogc:Filter>
</wfs:Delete>
</wfs:Transaction>

例15-16は、例15-15のリクエストに対するレスポンスです。

例15-16 Deleteのレスポンス

<?xml version = '1.0' encoding = 'UTF-8'?>
<wfs:WFS_TransactionResponse version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs">
<wfs:TransactionResult handle="TX01">
<wfs:Status>
<wfs:SUCCESS/>
</wfs:Status>
</wfs:TransactionResult>
</wfs:WFS_TransactionResponse>

15.4 WFSの管理用のJava API

SDO_WFS_PROCESSおよびSDO_WFS_LOCKパッケージに含まれるPL/SQL APIに加え、Java APIを使用してフィーチャ・タイプのパブリッシュおよび削除を行ったり、フィーチャ・タイプおよびWFSメタデータ表へのアクセス権限の付与および取消しを行うことができます。

この項では、oracle.spatial.wfs.WFSAdminクラスに含まれる各メソッドについての基本的な参照情報を説明します。ここでは、メソッドをアルファベット順に記載しています。

15.4.1 createXMLTableIndexメソッド

createXMLTableIndexメソッドは、ドキュメントベース・フィーチャ・タイプのインスタンスにXDB.XMLINDEXの索引を作成するメソッドです。このメソッドの書式は次のとおりです。

public static void createXMLTableIndex(
OracleConnection conn,
String ftNSUrl,
String ftName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

ftNSUrlは、フィーチャ・タイプの名前空間のURLです。

ftNameは、フィーチャ・タイプの名前です。

15.4.2 dropFeatureTypeメソッド

dropFeatureTypeメソッドは、WFSリポジトリからフィーチャ・タイプを削除するメソッドです。このメソッドの書式は次のとおりです。

public static void dropFeatureType(
OracleConnection conn,
String ftNSUrl,
String ftName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

ftNSUrlは、フィーチャ・タイプの名前空間のURLです。

ftNameは、フィーチャ・タイプの名前です。

15.4.3 dropXMLTableIndexメソッド

dropXMLTableIndexメソッドは、ドキュメントベース・フィーチャ・タイプのインスタンスに対して作成されたXDB.XMLINDEX型の索引を削除するメソッドです。このメソッドの書式は次のとおりです。

public static void dropXMLTableIndex(
OracleConnection conn,
String ftNSUrl,
String ftName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

ftNSUrlは、フィーチャ・タイプの名前空間のURLです。

ftNameは、フィーチャ・タイプの名前です。

15.4.4 getIsXMLTableIndexCreatedメソッド

getIsXMLTableIndexCreatedメソッドは、ドキュメントベース・フィーチャ・タイプにXDB.XMLINDEX型の索引が作成されている場合はブール値TRUEを戻し、そのような索引が作成されていない場合はブール値FALSEを戻すメソッドです。このメソッドの書式は次のとおりです。

public static boolean getIsXMLTableIndexCreated(
OracleConnection conn,
String ftNSUrl,
String ftName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

ftNSUrlは、フィーチャ・タイプの名前空間のURLです。

ftNameは、フィーチャ・タイプの名前です。

15.4.5 grantFeatureTypeToUserメソッド

grantFeatureTypeToUserメソッドは、フィーチャ・タイプへのアクセス権限をデータベース・ユーザーに付与するメソッドです。このメソッドの書式は次のとおりです。

public static void grantFeatureTypeToUser(
OracleConnection conn,
String typeNS,
String typeName,
String usrName)  throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

typeNSは、フィーチャ・タイプの名前空間のURLです。

typeNameは、フィーチャ・タイプの名前です。

usrNameは、データベース・ユーザーの名前です。

15.4.6 grantMDAccessToUserメソッド

grantMDAccessToUserメソッドは、WFSメタデータへのアクセス権限をデータベース・ユーザーに付与するメソッドです。このメソッドの書式は次のとおりです。

public static void grantMDAccessToUser(
OracleConnection conn,
String usrName)  throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

usrNameは、データベース・ユーザーの名前です。

15.4.7 publishFeatureTypeメソッド

publishFeatureTypeメソッドは、ドキュメントベース・フィーチャ・タイプをパブリッシュするメソッドです。つまり、このメソッドによって、フィーチャ・タイプに関連するメタデータが登録されます。このメソッドの書式は次のとおりです。

public static void publishFeatureType(OracleConnection conn,
XMLType featureTypeMD) throws SQLException , WFSException;

public static void publishFeatureType(OracleConnection conn,
XMLType schemaDocXt,
XMLType featureDescXt,
ArrayList<String> docIdPaths,
String primarySpatialPath,
String featureMemberNS,
String featureMemberName,
String ftNSUrl,
String ftName,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> mandatoryPaths,
ArrayList<PathInfo> tsPaths,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS,
String srsNSAlias) throws SQLException;

public static void publishFeatureType(OracleConnection conn,
XMLType schemaDocXt,
XMLType featureDescXt,
ArrayList<String> docIdPaths,
String primarySpatialPath,
String featureMemberNS,
String featureMemberName,
String ftNSUrl,
String ftName,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> mandatoryPaths,
ArrayList<PathInfo> tsPaths,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS,
String srsNSAlias,
String ftXSDRefId) throws SQLException;

public static void publishFeatureType(OracleConnection conn,
XMLType schemaDocXt,
XMLType featureDescXt,
ArrayList<String> docIdPaths,
String primarySpatialPath,
String featureMemberNS,
String featureMemberName,
String ftNSUrl,
String ftName,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> mandatoryPaths,
ArrayList<PathInfo> tsPaths,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS,
String srsNSAlias,
String ftXSDRefId,
boolean genSpatialIndex,
boolean lockEnable) throws SQLException;

public static void publishFeatureType(OracleConnection conn,
XMLType schemaDocXt,
XMLType featureDescXt,
ArrayList<String> docIdPaths,
String primarySpatialPath,
String featureMemberNS,
String featureMemberName,
String ftNSUrl,
String ftName,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> mandatoryPaths,
ArrayList<PathInfo> tsPaths,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS,
String srsNSAlias,
String ftXSDRefId,
boolean genSpatialIndex,
boolean lockEnable,
ArrayList<PathInfo> numPaths,
ArrayList<PathInfo> idxPaths,
ArrayList<String[]> idxPathTypes,
boolean genXMLIndex) throws SQLException;

public static void publishFeatureType(OracleConnection conn,
XMLType schemaDocXt,
XMLType featureDescXt,
ArrayList<String> docIdPaths,
String primarySpatialPath,
String featureMemberNS,
String featureMemberName,
String ftNSUrl,
String ftName,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> mandatoryPaths,
ArrayList<PathInfo> tsPaths,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS,
String srsNSAlias,
String ftXSDRefId,
boolean genSpatialIndex,
boolean lockEnable,
ArrayList<PathInfo> numPaths,
ArrayList<PathInfo> idxPaths,
ArrayList<String[]> idxPathTypes,
boolean genXMLIndex,
String featureCollectionNS,
String featureCollectionName,
boolean isGML3) throws SQLException;

public static void publishFeatureType(OracleConnection conn,
XMLType schemaDocXt,
XMLType featureDescXt,
ArrayList<String> docIdPaths,
String primarySpatialPath,
String featureMemberNS,
String featureMemberName,
String ftNSUrl,
String ftName,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> mandatoryPaths,
ArrayList<PathInfo> tsPaths,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS,
String srsNSAlias,
String ftXSDRefId,
boolean genSpatialIndex,
boolean lockEnable,
ArrayList<PathInfo> numPaths,
ArrayList<PathInfo> idxPaths,
ArrayList<String[]> idxPathTypes,
boolean genXMLIndex,
String featureCollectionNS,
String featureCollectionName,
boolean isGML3,
CollectionPathInfo collPathInfo) throws SQLException;

public static void publishFeatureType(OracleConnection conn,
XMLType schemaDocXt,
XMLType featureDescXt,
ArrayList<String> docIdPaths,
String primarySpatialPath,
String featureMemberNS,
String featureMemberName,
String ftNSUrl,
String ftName,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> mandatoryPaths,
ArrayList<PathInfo> tsPaths,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS,
String srsNSAlias,
String ftXSDRefId,
boolean genSpatialIndex,
boolean lockEnable,
ArrayList<PathInfo> numPaths,
ArrayList<PathInfo> idxPaths,
ArrayList<String[]> idxPathTypes,
boolean genXMLIndex,
String featureCollectionNS,
String featureCollectionName,
boolean isGML3,
CollectionPathInfo collPathInfo,
boolean hasMultipleSRSNS) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

featureTypeMDは、フィーチャ・タイプのパス登録メタデータです。このメタデータは、wstype_md.xsdファイルで指定されているfeatureTypeMd要素定義に準拠する必要があります。フィーチャ・タイプのパス登録メタデータのXMLの例は、ft_metadata.xmlに用意されています。これらのファイルは、src/data/パスの下にあるws_client.jarデモ・ファイル(10.4項を参照)に含まれています。フィーチャ・タイプをパブリッシュする例の使用方法は、Readme.txtファイルを参照してください。このファイルはsrc/パスの下にあるws_client.jarに含まれています。

schemaDocXtは、フィーチャ・タイプのXMLスキーマ定義(XSD)です。

featureDescXtは、フィーチャ・タイプ記述のXMLスキーマ定義(XSD)で、Capabilitiesドキュメントに含められます。

docIdPathsは、ドキュメントIDパス要素のリストです。各要素はString型です。

primarySpatialPathは、結果に含まれる境界ボックスの計算に使用されるプライマリ空間パスです。

featureMemberNSは、フィーチャ・メンバーの名前空間です。

featureMemberNameは、フィーチャ・メンバーの名前です。

ftNSUrlは、フィーチャ・タイプの名前空間のURLです。

ftNameは、フィーチャ・タイプの名前です。

spatialPathsは、フィーチャ・タイプに含まれる空間パスのリストです。これは、oracle.spatial.ws.PathInfoクラス(15.4.7.1項を参照)のArrayListです。

mandatoryPathsは、フィーチャ・タイプに含まれる必須パスのリストです。これは、oracle.spatial.ws.PathInfoクラス(15.4.7.1項を参照)のArrayListです。

tsPathsは、フィーチャ・タイプに含まれる時間に関連したパスのリストです(date、dateTime、gYear、gMonth、gDay、gMonthDay、gYearMonthなど)。これは、oracle.spatial.ws.PathInfoクラス(15.4.7.1項を参照)のArrayListです。

sdoMetaInfoは、空間パスの空間メタデータ情報です。これは、oracle.spatial.ws.GeomMetaInfoクラス(15.4.7.1項を参照)のArrayListです。

srsNSは、空間パス内のデータと関連付けられた空間参照システム(座標系)のユーザー定義の名前空間です。この名前空間は(指定されている場合)、GetFeatureリクエストに対する回答として生成されるFeatureCollectionの<boundedBy>要素内のsrsName属性を生成するときにも使用されます。

srsNSAliasは、空間パス内のデータと関連付けられた空間参照システム(座標系)の名前空間の別名です。

ftXSDRefIdは、1つのXSDファイル内に複数のフィーチャ・タイプが定義されている場合は、グループ・フィーチャ・タイプのXMLスキーマ定義ファイル名(文字列)です。このパラメータは、グループXSD定義をWFSメタデータ内に格納する際に使用されると、その後、グループ・フィーチャ・タイプXSDファイル内にスキーマが定義されている複数のフィーチャ・タイプから参照されます。

genSpatialIndexは、ブール値です。TRUEの場合は、タイプの作成時に空間索引がフィーチャ・タイプ上に作成されます。FALSEの場合、空間索引の作成は行われません。

lockEnableは、ブール値です。TRUEの場合は、タイプの作成時にフィーチャ・タイプ表(このフィーチャ・タイプのインスタンスが格納されるシステム生成の基礎表)のロックが有効化されます。FALSEの場合は、フィーチャ・タイプ表のロックは有効化されません。lockEnableがTRUEの場合は、フィーチャ・タイプのWFSデータ表のWFSトランザクション・ロックが有効化されます。(このデータ表はフィーチャ・タイプのパブリッシュ時に自動生成されます。)

numPathsは、フィーチャ・タイプに含まれる数値(NUMBER、INTEGERなど)に関連するパスのリストです。これは、oracle.spatial.ws.PathInfoクラス(15.4.7.1項を参照)のArrayListです。

idxPathsは、索引パスのリストです。これは、XDB.XMLINDEX型の索引の作成時に、索引が作成されるパスのリストです。これは、oracle.spatial.ws.PathInfoクラス(15.4.7.1項を参照)のArrayListです。

idxPathTypesは、各索引パスの情報を指定します。このパスには、string[3]の次の各要素が含まれます。string[0]にはタイプ名、string[1]にはタイプの形式(長さのタイプなど)、string[2]には、Bツリー索引と一意索引のいずれを作成するか、または索引の作成を行わないかの指定(WFSAdmin.BTREE、WFSAdmin.UNIQUEまたはNULL)が含まれます。

genXMLIndexは、ブール値です。TRUEの場合は、タイプXDB.XMLINDEXの索引がドキュメントベースのフィーチャ・タイプ上に作成されます。FALSEの場合、タイプXDB.XMLINDEXの索引はドキュメントベースのフィーチャ・タイプ上に作成されません。現時点で索引を作成しないことを選択する場合でも、createXMLTableIndexメソッド(15.4.1項を参照)を使用して後から作成できます。

featureCollectionNSは、フィーチャ・コレクションの名前空間です。

featureCollectionNameは、フィーチャ・コレクションの名前です。

isGML3は、ブール値です。TRUEは、このフィーチャ・タイプのインスタンスに含まれるジオメトリがGML3.1.1に準拠していることを表します。FALSEは、このフィーチャ・タイプのインスタンスに含まれるジオメトリがGML 2.1.2に準拠していることを表します。

collPathInfoは、空間コレクションのパス情報です。

hasMultipleSRSNSは、ブール値です。TRUEは、このフィーチャ・タイプから複数のユーザー定義の空間参照システムの名前空間が参照されることを表します。FALSEは、このフィーチャ・タイプから複数のユーザー定義の空間参照システムの名前空間は参照されないことを表します。

15.4.7.1 publishFeatureTypeに関連するクラス

この項では、publishFeatureTypeメソッドのパラメータ定義で使用されるいくつかのクラスについて説明します。

oracle.spatial.ws.PathElementはPathElement名前空間およびPathElement名の2つのStringオブジェクトを含むJavaクラスです。このクラスには、getValue()メソッドが含まれ、このメソッドからは文字列形式のPathElementオブジェクトが戻されます。このクラスの書式は次のとおりです。

public class PathElement {
// Set namespace and name information for a PathElement.
public void set(String ns, String name);
//Get a string value for the PathElement object.
public String getValue() ;
}

oracle.spatial.ws.Pathは、パスを構成する順序付けされたPathElementオブジェクトのリストを含むJavaクラスです。たとえば、XPathがmyns:A/myns:Bである場合、myns:Aおよびmyns:BがPathElementオブジェクトということになります。このクラスには、getValue()メソッドが含まれ、このメソッドからは文字列形式のPathオブジェクトが戻されます。このクラスの書式は次のとおりです。

public class Path {
//Add a PathElement.
public void add(PathElement p) ;
//Get a string Value for the Path object.
public String getValue() ;
}

oracle.spatial.ws.PathInfoは、パスの関連付けおよびメタデータの情報など、パスまたはパスのリストに関する情報を含むコンテナ・クラスです。このクラスの書式は次のとおりです。

public class PathInfo {

// Set number of occurrences for the Path. Default value is 1. Number of
// occurrences > 1 in case of arrays.
public void setNumOfOccurrences(int i) ;

// Get number of occurrences for the Path.
public int getNumOfOccurrences();

// Add a path, in case PathInfo has multiple paths associated via a
// choice association
public void addPath(Path p) ;

// Add path type information. This is relevant for time-related Paths
// (for example, date, dateTime, gDay, gMonth, gYear, gMonthDay,
// gYearMonth, duration, or time).
public void addPathType(String t) ;

// Add a PathInfo type. This can be PathInfo.CHOICE or
// PathInfo.DEFAULT or PathInfo.COLLECTION.
// PathInfo.CHOICE - means that the list of paths  in this PathInfo are
// related to each other via choice association. For example, we may have
// a list of Spatial Paths, which are associated with one another via choice.
// So, only one of these path can occur in a feature instance/document.
// PathInfo.COLLECTION - means the list of paths in this PathInfo are part
// of a collection (currently spatial collections are
// supported) which will be indexed.
// Default value is PathInfo.DEFAULT for one Path or a finite array Paths.
//  @param t PathInfo type information. PathInfo.CHOICE or
// PathInfo.DEFAULT or PathInfo.COLLECTION
public void addPathInfoType(int t) ;

//  Returns a  string representation for PathInfo content.
public String getPathContent() ;

// Returns Path type information (for example, date, dateTime, gDay, gMonth,
// gYear, gMonthDay, gYearMonth, duration, or time).
public String getPathType() ;

// Returns a  string representation for PathInfo path content.
// param i The index of the path in the PathInfo whose path content needs to
// be returned
// @return a  string representation for PathInfo path content
public String getCollectionPathContent(int i);

// Returns number of paths in the PathInfo.
// @return number of paths in the PathInfo which is of type PathInfo.COLLECTION
// if PathInfo is not of type PathInfo.COLLECTION returns -1
public int getCollectionPathContentSize();
}

oracle.spatial.ws.CollectionPathInfoは、PathInfoオブジェクトのコレクションに関する情報を含むコンテナ・クラスです。このコレクションに含まれる各PathInfoオブジェクトは、索引付けされて検索対象になる空間パスのグループを表します。このクラスは、フィーチャ・タイプおよびレコード・タイプ内のコレクションをベースにした空間コンテンツを参照するパスの登録に使用されます。このクラスの書式は次のとおりです。

public class CollectionPathInfo {

/**
* Add a PathInfo.
* @param p PathInfo to be added
* @param g geometry related metadata for PathInfo to be added
*/
public void addPathInfo(PathInfo p, GeomMetaInfo g) ;

/**
* Get a PathInfo.
* @param i index of the PathInfo to be retrieved
*/
public PathInfo getPathInfo(int i) ;
/**
* Get geometry related metadata for a certain PathInfo.
* @param i index of the PathInfo whose geomMetaInfo is to be retrieved
*/
public GeomMetaInfo getGeomMetaInfo(int i) ;

/**
* Get all PathInfo objects in this CollectionPathInfo.
*/
public ArrayList<PathInfo> getPathInfos() ;
}

oracle.spatial.ws.GeomMetaInfoは、フィーチャ・タイプ内の空間パスに対応する次元関連の情報を含むクラスです。この情報には、次元名、下限および上限、許容差および座標系(SRID)が含まれます。このクラスの書式は次のとおりです。

public class GeomMetaInfo {

// Default constructor. Creates a GeomMetaInfo object with number of
// dimensions equal to 2.
public GeomMetaInfo() ;

// Creates a GeomMetaInfo object of a specified number of dimensions.
// Parameter numOfDimensions is the number of dimensions represented
// in the GeomMetaInfo object.
// Note: max number of dimensions supported is 4.
public GeomMetaInfo(int numOfDimensions)  throws
ArrayIndexOutOfBoundsException ;

//Set Dimension Name.
// Parameter index represents the dimension index which needs to be set.
// Parameter val is dimension name value.
public void setDimName(int index, String val) throws
ArrayIndexOutOfBoundsException ;

// Set Dimension Lower Bound.
// Parameter index represents the dimension index which needs to be set.
// Parameter val is dimension lower bound value.
public void setLB(int index, double val) throws
ArrayIndexOutOfBoundsException ;

// Set Dimension Upper Bound
// Parameter index represents the dimension index which needs to be set.
// Parameter val is dimension upper bound value
public void setUB(int index, double val) throws
ArrayIndexOutOfBoundsException ;

// Set Dimension tolerance value.
// Parameter index represents the dimension index which needs to be set.
// Parameter  val is dimension tolerance value.
public void setTolerance(int index, double val) throws
ArrayIndexOutOfBoundsException ;

// Set Coordinate Reference System Identifier
public void setSRID (int val) ;

// Get dimension Name.
// Parameter index represents the dimension index whose name needs to be
// returned. This method returns the dimension name for the given index.
public String getDimName(int index) throws
ArrayIndexOutOfBoundsException ;

// Get dimension lower bound.
// Parameter index represents the dimension index whose lower bound needs
//  to be returned.
// This method returns the lower bound for the given index.
public double getLB(int index) throws ArrayIndexOutOfBoundsException ;

// Get dimension upper bound.
// Parameter index represents the dimension index whose upper bound needs
// to be returned.
// This method returns the upper bound for the given index.
public double getUB(int index) throws ArrayIndexOutOfBoundsException ;

// Get dimension tolerance.
// Parameter index represents the dimension index whose tolerance needs
// to be returned.
// This method returns the tolerance value for the given index.
public double getTolerance(int index) throws
ArrayIndexOutOfBoundsException ;

// Get coordinate system (spatial reference system) identifier.
public int getSRID () ;

// Get number of dimensions represented by this GeomMetaInfo object.
public int getNumOfDimensions() ;

// Sets the spatial index dimension parameter. By default it is 2.
// return  Coordinate Reference System Identifier value
public int setSpatialIndexDimension(int d) ;

// Get the spatial index dimension parameter.
// return  number of dimensions
public int getSpatialIndexDimension() ;

// Sets the user spatial srs namespace refered by this GeomMetaInfo object.
// Needs to be specified if multiple srs namespace are refered within the same
//feature or record type.
public void setSRSNS(String s) ;

// Gets the user defined spatial srs namespace refered by this
// GeomMetaInfo object.
public String getSRSNS() ;

// Sets the user defined spatial srs namespace alias refered by this
// GeomMetaInfo object.
public void setSRSNSAlias (String s) ;

// Gets the user defined spatial srs namespace  alias refered by this
// GeomMetaInfo object.
public String getSRSNSAlias () ;
}

15.4.8 revokeFeatureTypeFromUserメソッド

revokeFeatureTypeFromUserメソッドは、フィーチャ・タイプへのアクセス権限をデータベース・ユーザーから取り消すメソッドです。このメソッドの書式は次のとおりです。

public static void revokeFeatureTypeFromUser(
OracleConnection conn,
String typeNS,
String typeName,
String usrName)  throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

typeNSは、フィーチャ・タイプの名前空間のURLです。

typeNameは、フィーチャ・タイプの名前です。

usrNameは、データベース・ユーザーの名前です。

15.4.9 revokeMDAccessFromUserメソッド

revokeMDAccessFromUserメソッドは、WFSメタデータへのアクセス権限をデータベース・ユーザーから取り消すメソッドです。このメソッドの書式は次のとおりです。

public static void revokeMDAccessFromUser(
OracleConnection conn,
String usrName)  throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

usrNameは、データベース・ユーザーの名前です。

15.4.10 setXMLTableIndexInfoメソッド

setXMLTableIndexInfoメソッドは、索引を作成するオプションを使用してドキュメントベース・フィーチャ・タイプのXMLTableIndex索引の情報を更新します。このメソッドの書式は次のとおりです。

注意:
XMLTableIndex索引がすでに存在する場合は、setXMLTableIndexInfoメソッドをコールする前に、(dropXMLTableIndexメソッドを使用して)索引を削除する必要があります。

public static void setXMLTableIndexInfo(OracleConnection conn,
String ftNSUrl,
String ftName,
ArrayList<PathInfo> idxPaths,
ArrayList<String[]> idxPathTypes,
boolean genXMLIndex) throws SQLException , WFSException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

ftNSUrlは、フィーチャ・タイプの名前空間のURLです。

ftNameは、フィーチャ・タイプの名前です。

idxPathsは、索引パスのリストです。これは、XDB.XMLINDEX型の索引の作成時に、索引が作成されるパスのリストです。これは、oracle.spatial.ws.PathInfoクラス(15.4.7.1項を参照)のArrayListです。

idxPathTypesは、各索引パスの情報を指定します。このパスには、string[3]の次の各要素が含まれます。string[0]にはタイプ名、string[1]にはタイプの形式(長さのタイプなど)、string[2]には、Bツリー索引と一意索引のいずれを作成するか、または索引の作成を行わないかの指定(WFSAdmin.BTREE、WFSAdmin.UNIQUEまたはNULL)が含まれます。

genXMLIndexは、ブール値です。TRUEの場合は、タイプXDB.XMLINDEXの索引がドキュメントベースのフィーチャ・タイプ上に作成されます。FALSEの場合、タイプXDB.XMLINDEXの索引はドキュメントベースのフィーチャ・タイプ上に作成されません。現時点で索引を作成しないことを選択する場合でも、createXMLTableIndexメソッド(15.4.1項を参照)を使用して後から作成できます。

15.5 Oracle Workspace ManagerでのWFSの使用

Oracle Workspace Managerを使用して、リレーショナル・フィーチャを持つWFS表をバージョン対応することができます。これを行うには、最初にSDO_WFS_LOCK.RegisterFeatureTableプロシージャを使用してWFS表を登録し、次にDBMS_WM.EnableVersioningプロシージャを実行する必要があります。(DBMS_WM PL/SQLパッケージの参照ドキュメントなど、Workspace Managerについては、『Oracle Database Workspace Manager開発者ガイド』を参照してください。)

作業領域を作成して、WFS-T (Web Feature Servicesトランザクション)インタフェースを使用することで、その作業領域に対してトランザクション型のWFS変更を実行できます。ただし、WFS-Tではなくインタフェースを使用するためには、データベース・トランザクションがWFS表で有効になるSQL*Plusセッションを使用する必要があります。これらのデータベース・トランザクションには、次のものが含まれます。

- WFS表での更新操作および削除操作

- 作業領域のメンテナンス操作(作業領域のリフレッシュ、マージなど)

WFS表でのデータベース・トランザクションを有効にするには、SDO_WFS_LOCK.EnableDBTxnsプロシージャ(第33章を参照)をコールします。このプロシージャを実行した後は、データベース・トランザクションがWFS表で許可されており、WFSのトランザクションの間、WFS-Tセマンティクスはセッションが終了するまで保持されます。

16 Catalog Services for the Web(CSW)のサポート

この章では、OpenGISコンソーシアム仕様のカタログ・サービスであるOracle Spatial実装について説明します。この仕様によると、カタログ・サービスは、データ、サービスおよび関連する情報オブジェクトについての記述情報(メタデータ)の集合をパブリッシュおよび検索する機能をサポートしています。カタログ内のメタデータは、ユーザーとソフトウェアの両方によって評価したり、詳細な処理を行う目的で、問合せや配置が可能なリソース特性を示します。カタログ・サービスは、情報コミュニティ内に登録された情報リソースの検索およびバインドをサポートする必要があります。

ここでは、Oracle Spatial実装をCatalog Services for the Web(CSW)と呼びます。

この章の内容は次のとおりです。

- 16.1項「CSWエンジンおよびアーキテクチャ」

- 16.2項「CSWのAPIおよび構成」

- 16.3項「XMLのリクエストおよびレスポンス例」

- 16.4項「CSWの管理用のJava API」

注意:
CSWを使用する前に、第10章「SpatialのWebサービスの概要」で説明されている概念を理解し、その章での説明に従って必要な構成作業を実行しておく必要があります。
以前のリリースの、1つ以上のSYS.XMLTABLEINDEX型の索引を使用して索引付けされたデータがある場合には、アップグレード後に索引をアップグレードして再作成する前に、関連する索引を削除する必要があります(A.3項を参照)。

16.1 CSWエンジンおよびアーキテクチャ

この章では、CSWについて、クライアントとの関係およびデータベース・サーバーとの関係も含めて説明します。CSWはWebサービスとして実装され、WebLogic Server、Oracle Application ServerまたはスタンドアロンのOracle Application Server Containers for J2EE (OC4J)環境にデプロイできます。

CSWにはメタデータ層があります。この層では、カタログ・リクエストへの応答で必要とされるメタデータがデータベースに格納されます。メタデータには空間列が含まれており、Oracle Spatialインタフェースを使用して空間列の問合せおよび処理が可能です。メタデータには、レコードの非空間属性と空間属性の関連付け、およびカタログ・サービスからクライアントに提供されるサービスも格納されます。

図16-1に、CSWのアーキテクチャを示します。

図16-1 CSWのアーキテクチャ

次に、図16-1について説明します。

- CSWは、Oracle Application Server中間層のコンテナの一部です。

- CSWでは、SOAP/XML形式のCSWリクエストおよびレスポンスを使用して、Webサービス・クライアントと通信できます。

- CSWでは、データベースに対するJDBCコールを介して空間データおよびメタデータへのアクセスが実行されます。

- データベースには、CSWのメタデータおよびデータとともにOracle Spatialが含まれます。

CSWセキュリティは、セキュアなトランスポートを使用して実装されます。ユーザーIDおよびユーザー・ラベルはLDAPで管理され、中間層とCSWセキュリティを組み合せて認証が行われます。Oracleのラベルベースのセキュリティは、レコード・レベルでのユーザー権限の管理に使用されます。

16.2 CSWのAPIおよび構成

CSWのAPIを使用すると、次のような操作を実行できます。

- レコード・タイプ・ドメインおよびレコード・ビューの変換に関する情報の指定

- レコード・タイプのパブリッシュ

- レコード・タイプの削除(パブリッシュの解除)

- CSWレコード・タイプに対する権限の付与および取消し

PL/SQL API(SDO_CSW_PROCESSパッケージ)は第22章、XMLリクエストおよびレスポンスの例は16.3項、Java APIは16.4項を参照してください。

16.2.1 機能のドキュメント

機能のドキュメントは、機能のインスタンスを記述したドキュメントです。このドキュメントには、レコード・タイプおよびサポートされる操作(挿入、削除など)のタイプが指定されます。

機能のドキュメントは、GetCapabilitiesリクエストに対するレスポンスとしてCSWサーバーにより生成されます。CSWサーバーでは機能テンプレートが使用されます。レコード・タイプおよび操作に関する情報がこのテンプレートに追加されて、機能のドキュメントが作成されます。

クライアントがHTTP GETメソッドを使用してこの機能のドキュメントにアクセスするには、次のようにSOAPインタフェースまたはXMLインタフェースのいずれかを使用します。

- SOAPインタフェースの場合は、oracle.spatial.ws.servlet.CSWServletを使用します。このサーブレットには、次の書式のアドレスでアクセスできます。

http:///machine-name:port/SpatialWS-SpatialWS-context-root/cswservlet?request=GetCapabilities&service=CSW&acceptversion=2.0.0&outputFormat=text/xml

- XMLインタフェースの場合は、oracle.spatial.ws.servlet.CSWXMLServletを使用します。このサーブレットには、次の書式のアドレスでアクセスできます。

http:///machine-name:port/SpatialWS-SpatialWS-context-root/xmlcswservlet?request=GetCapabilities&service=CSW&acceptversion=2.0.0&outputFormat=text/xml

次に、前述の書式について説明します。

- machine-nameは、アプリケーション・サーバーまたはOC4Jサーバーが実行されているシステムの名前です。

- portは、アプリケーション・サーバーまたはOC4Jサーバーが実行されているポートの番号です。

- SpatialWS-SpatialWS-context-rootは、SpatialのWebサービス・アプリケーションがマウントされるデフォルトのrootです。

- cswservletは、oracle.spatial.ws.servlet.CSWServletに対するservlet-mapping url-patternです。web.xmlファイルにデフォルトで指定されます。

- xmlcswservletは、oracle.spatial.ws.servlet.CSWXMLServletに対するservlet-mapping url-patternです。web.xmlファイルにデフォルトで指定されます。

16.2.2 空間パス抽出ファンクション(extractSDO)

GML形式ではない空間コンテンツをCSWで処理する必要がある場合は、その空間パス情報を抽出するためにextractSDOという名前のユーザー定義のファンクションを作成する必要があります。このファンクションは、GML以外の形式の空間コンテンツが使用され空間索引を作成する対象となるレコード・タイプごとに実装する必要があります。(レコード・タイプのすべての空間コンテンツがGML形式の場合、このファンクションは必要ありません。)

また、16.2.2.1項で説明されているとおりに、このファンクションを登録する必要があります。これにより、GML形式ではない空間パス・コンテンツを抽出する必要がある場合、Oracle Spatial CSWサーバーでは、このファンクションを検索および起動することができます。

extractSDOファンクションの書式は次のとおりです。

extractSDO(

xmlData IN XMLType,

srsNs IN VARCHAR2,

spPathsSRSNSList IN MDSYS.STRINGLISTLIST);

) RETURN MDSYS.SDO_GEOM_PATH_INFO;

パラメータ

xmlData

空間パス情報を抽出する必要のあるレコード・インスタンスのデータを指定します。

srsNs

フィーチャ・タイプの空間データと関連付けられた空間参照システム(座標系)のユーザー定義の名前空間を指定します。この名前空間は(指定されている場合)、GetFeatureリクエストに対する回答として生成されるFeatureCollectionの<boundedBy>要素内のsrsName属性を生成するときにも使用されます。

spPathsSRSNSList

異なる空間パスに関連付けられたユーザー定義の空間参照システム名前空間が1つのレコード・タイプに複数ある場合、このパラメータには、タイプの登録時に指定された異なる空間パスに対応する空間参照システム名前空間情報のリストを指定します。これはMDSYS.STRINGLISTLIST型のオブジェクトで、VARRAY(1000000) OF MDSYS.STRINGLISTとして定義されます。また、MDSYS.STRINGLIST型はVARRAY(1000000) OF VARCHAR2(4000)として定義されます。異なる空間列に関連付けられたユーザー定義の空間参照システム名前空間が、1つのレコードに複数存在しない場合は、このパラメータはNULLにする必要があります。

各MDSYS.STRINGLISTオブジェクトの最初の要素は空間参照システム名前空間で、2つ目の要素は空間参照システム名前空間の別名です(別名がある場合)。

使用上の注意

このファンクションではGML以外の空間コンテンツが解析され、MDSYS.SDO_GEOM_PATH_INFO型のオブジェクトが戻されます。このオブジェクト型の定義は次のとおりです。

(path     MDSYS.STRINGLIST,
geom     SDO_GEOMETRY,
arrindex NUMBER)

path属性には、抽出してgeom属性に格納する空間コンテンツのパスを指定します。これは、MDSYS.STRINGLIST型のオブジェクトで、VARRAY(1000000) OF VARCHAR2(4000)として定義されます。パス属性のパターンは、MDSYS.STRINGLIST('pe_namespace1','pe_name1', 'pe_namespace2','pe_name2',...);です。次に各項目について説明します。

- pe_namespace1は、1つ目のパス要素の名前空間です。

- pe_name1は、1つ目のパス要素の名前です。

- pe_namespace2は、2つ目のパス要素の名前空間です。

- pe_name2は、2つ目のパス要素の名前です。

- 同様に、残りの名前空間と名前の組合せを指定します。

パスに含まれる/typeNameNSAlias:typeName/pe_namespace1_Alias:pe_name1/pe_namespace2_Alias:pe_name2...は、空間コンテンツのXPathをGML以外の形式で表現したもので、ユーザー定義ファンクションextractSDOによって抽出されます。

- typeNameNSAliasは、レコード・タイプ名の名前空間の別名です。

- typeNameは、レコード・タイプのタイプ名です。

- pe_namespace1_Aliasは、名前空間pe_namespace1の別名です。

- pe_namespace2_Aliasは、名前空間pe_namespace2の別名です。

geom属性は、SDO_GEOMETRYオブジェクトとして抽出される(pathパラメータに対応する)空間コンテンツです。抽出されたジオメトリには、空間索引を使用して索引付けを行うことができます。

現在、arrindex属性は使用されていないため、1に設定する必要があります。(パスの配列索引として将来使用するために予約されています。)

16.2.2.1 extractSDOファンクションの登録および登録解除

extractSDOファンクションを作成した後は、GML形式ではないレコード・タイプに含まれる空間パス・コンテンツの処理に使用できるように、このファンクションを登録する必要があります。ファンクションを登録するには、SDO_CSW_PROCESS.InsertPluginMapプロシージャをコールします。次に例を示します。

BEGIN
SDO_CSW_PROCESS.insertPluginMap('http://www.opengis.net/cat/csw',
'Record', 'csw_admin_usr.csw_RT_1_package');
END;
/

GML形式でない空間パス・コンテンツの処理にextractSDOファンクションを使用する必要がなくなった場合は、SDO_CSW_PROCESS.DeletePluginMapプロシージャをコールしてこのファンクションの登録を解除できます。次に例を示します。

BEGIN
SDO_CSW_PROCESS.deletePluginMap('http://www.opengis.net/cat/csw',
'Record');
END;
/

16.3 XMLのリクエストおよびレスポンス例

この項では、次の各操作について、CSWエンジンへのレコード・リクエストの一部と、各リクエストに対するレスポンスを示します。

- GetCapabilities

- DescribeRecord

- GetRecords

- GetDomain

- GetRecordById

- 次のトランザクション・タイプを指定するサブ要素を含むトランザクション

- Insert

- Update

- Delete

例16-1は、指定した名前空間URLで、CSWという名前のCSWサーバーの機能を取得するリクエストです。このリクエストでは、機能のドキュメント(16.2.1項を参照)が戻されます。

例16-1 GetCapabilitiesリクエスト

<csw:GetCapabilities service="CSW" xmlns:csw="http://www.opengis.net/cat/csw" xmlns:ows="http://www.opengis.net/ows">
<ows:AcceptVersions>
<ows:Version>2.0.0</ows:Version>
</ows:AcceptVersions>
<ows:AcceptFormats>
<ows:OutputFormat>text/xml</ows:OutputFormat>
</ows:AcceptFormats>
</csw:GetCapabilities>

例16-2は、例16-1のリクエストに対するレスポンスからの抜粋です。

例16-2 GetCapabilitiesのレスポンス

<Capabilities xmlns="http://www.opengis.net/cat/csw" version="2.0.0" updateSequence="0" xmlns:ows="http://www.opengis.net/ows" xmlns:ogc="http://www.opengis.net/ogc" xmlns:csw="http://www.opengis.net/cat/csw" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ns0="http://www.opengis.net/cat/csw" xmlns:ns1="http://www.opengis.net/cat/csw">
<ows:ServiceIdentification xmlns:ows="http://www.opengis.net/ows">
<ows:ServiceType>CSW</ows:ServiceType>
<ows:ServiceTypeVersion>2.0.0</ows:ServiceTypeVersion>
<ows:Title>Company CSW</ows:Title>
<ows:Abstract>
A catalogue service that conforms to the HTTP protocol
binding of the OpenGIS Catalogue Service specification
version 2.0.0.
</ows:Abstract>
<ows:Keywords>
<ows:Keyword>CSW</ows:Keyword>
<ows:Keyword>Company Name</ows:Keyword>
<ows:Keyword>geospatial</ows:Keyword>
<ows:Keyword>catalogue</ows:Keyword>
</ows:Keywords>
<ows:Fees>NONE</ows:Fees>
<ows:AccessConstraints>NONE</ows:AccessConstraints>
</ows:ServiceIdentification>
<ows:ServiceProvider xmlns:ows="http://www.opengis.net/ows">
<ows:ProviderName>Company Name</ows:ProviderName>
<ows:ProviderSite ans1:href="http://www.oracle.com" xmlns:ans1="http://www.w3.org/1999/xlink"/>
<ows:ServiceContact>
<ows:IndividualName> Contact Person Name</ows:IndividualName>
<ows:PositionName>Staff</ows:PositionName>
<ows:ContactInfo>
<ows:Phone>
<ows:Voice>999-999-9999</ows:Voice>
<ows:Facsimile>999-999-9999</ows:Facsimile>
</ows:Phone>
<ows:Address>
<ows:DeliveryPoint>1 Street Name</ows:DeliveryPoint>
<ows:City>CityName</ows:City>
<ows:AdministrativeArea>StateName</ows:AdministrativeArea>
<ows:PostalCode>09999</ows:PostalCode>
<ows:Country>USA</ows:Country>
<ows:ElectronicMailAddress>
contact.person@example.com
</ows:ElectronicMailAddress>
</ows:Address>
<ows:OnlineResource ans1:href="mailto:contact.person@example.com" xmlns:ans1="http://www.w3.org/1999/xlink"/>
</ows:ContactInfo>
</ows:ServiceContact>
</ows:ServiceProvider>
<ows:OperationsMetadata xmlns:ows="http://www.opengis.net/ows">
<ows:Operation name="GetCapabilities">
<ows:DCP>
<ows:HTTP>
<ows:Get ans1:href="http://localhost:8888/SpatialWS-SpatialWS-context-root/cswservlet" xmlns:ans1="http://www.w3.org/1999/xlink"/>
<ows:Post ans1:href="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort" xmlns:ans1="http://www.w3.org/1999/xlink"/>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
<ows:Operation name="DescribeRecord">
<ows:DCP>
<ows:HTTP>
<ows:Post ans1:href="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort" xmlns:ans1="http://www.w3.org/1999/xlink"/>
</ows:HTTP>
</ows:DCP>
<ows:Parameter name="typeName"><ows:Value>ns0:SampleRecord</ows:Value><ows:Value>ns1:Record</ows:Value></ows:Parameter>
<ows:Parameter name="outputFormat">
<ows:Value>text/xml</ows:Value>
</ows:Parameter>
<ows:Parameter name="schemaLanguage">
<ows:Value>XMLSCHEMA</ows:Value>
</ows:Parameter>
</ows:Operation>
<ows:Operation name="GetRecords">
<ows:DCP>
<ows:HTTP>
<ows:Post ans1:href="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort" xmlns:ans1="http://www.w3.org/1999/xlink"/>
</ows:HTTP>
</ows:DCP>
<ows:Parameter name="TypeName"><ows:Value>ns0:SampleRecord</ows:Value><ows:Value>ns1:Record</ows:Value></ows:Parameter>
<ows:Parameter name="outputFormat">
<ows:Value>text/xml </ows:Value>
</ows:Parameter>
<ows:Parameter name="outputSchema">
<ows:Value>OGCCORE</ows:Value>
</ows:Parameter>
<ows:Parameter name="resultType">
<ows:Value>hits</ows:Value>
<ows:Value>results</ows:Value>
<ows:Value>validate</ows:Value>
</ows:Parameter>
<ows:Parameter name="ElementSetName">
<ows:Value>brief</ows:Value>
<ows:Value>summary</ows:Value>
<ows:Value>full</ows:Value>
</ows:Parameter>
<ows:Parameter name="CONSTRAINTLANGUAGE">
<ows:Value>Filter</ows:Value>
</ows:Parameter>
</ows:Operation>
<ows:Operation name="GetRecordById">
<ows:DCP>
<ows:HTTP>
<ows:Post ans1:href="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort" xmlns:ans1="http://www.w3.org/1999/xlink"/>
</ows:HTTP>
</ows:DCP>
<ows:Parameter name="ElementSetName">
<ows:Value>brief</ows:Value>
<ows:Value>summary</ows:Value>
<ows:Value>full</ows:Value>
</ows:Parameter>
</ows:Operation>
<ows:Operation name="GetDomain">
<ows:DCP>
<ows:HTTP>
<ows:Post ans1:href="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort" xmlns:ans1="http://www.w3.org/1999/xlink"/>
</ows:HTTP>
</ows:DCP>
<ows:Parameter name="ParameterName">
<ows:Value>GetRecords.resultType</ows:Value>
<ows:Value>GetRecords.outputFormat</ows:Value>
<ows:Value>GetRecords.outputRecType</ows:Value>
<ows:Value>GetRecords.typeNames</ows:Value>
<ows:Value>GetRecords.ElementSetName</ows:Value>
<ows:Value>GetRecords.ElementName</ows:Value>
<ows:Value>GetRecords.CONSTRAINTLANGUAGE</ows:Value>
<ows:Value>GetRecordById.ElementSetName</ows:Value>
<ows:Value>DescribeRecord.typeName</ows:Value>
<ows:Value>DescribeRecord.schemaLanguage</ows:Value>
</ows:Parameter>
</ows:Operation>
<ows:Operation name="Transaction">
<ows:DCP>
<ows:HTTP>
<ows:Post ans1:href="http://localhost:8888/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort" xmlns:ans1="http://www.w3.org/1999/xlink"/>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
<ows:Parameter name="service">
<ows:Value>CSW</ows:Value>
</ows:Parameter>
<ows:Parameter name="version">
<ows:Value>2.0.0</ows:Value>
</ows:Parameter>
<ows:ExtendedCapabilities>
<ogc:Filter_Capabilities xmlns:ogc="http://www.opengis.net/ogc">
<ogc:Spatial_Capabilities>
<ogc:Spatial_Operators>
<ogc:BBOX/>
<ogc:Equals/>
<ogc:Disjoint/>
<ogc:Intersect/>
<ogc:Touches/>
<ogc:Crosses/>
<ogc:Within/>
<ogc:Contains/>
<ogc:Overlaps/>
<ogc:Beyond/>
<ogc:DWithin/>
</ogc:Spatial_Operators>
</ogc:Spatial_Capabilities>
<ogc:Scalar_Capabilities>
<ogc:Logical_Operators/>
<ogc:Comparison_Operators>
<ogc:Simple_Comparisons/>
<ogc:Like/>
<ogc:Between/>
<ogc:NullCheck/>
</ogc:Comparison_Operators>
<ogc:Arithmetic_Operators>
<ogc:Simple_Arithmetic/>
</ogc:Arithmetic_Operators>
</ogc:Scalar_Capabilities>
</ogc:Filter_Capabilities>
</ows:ExtendedCapabilities>
</ows:OperationsMetadata>
</Capabilities>

例16-3は、指定した名前空間に対して、Recordというタイプ名のレコードを記述するリクエストです。

例16-3 DescribeRecordリクエスト

<csw:DescribeRecord service="CSW"
version="2.0.0"
xmlns:csw="http://www.opengis.net/cat/csw" >
<csw:TypeName targetNamespace="http://www.opengis.net/cat/csw">Record</csw:TypeName>
</csw:DescribeRecord>

例16-4は、例16-3のリクエストに対するレスポンスです。レスポンスはXMLスキーマ定義(XSD)です。各要素の説明は、レスポンス内の各<documentation>要素に含まれるコメントを参照してください。

例16-4 DescribeRecordのレスポンス

<xsd:schema targetNamespace="http://www.opengis.net/cat/csw" elementFormDefault="qualified" version="2.0.0" id="csw-record" xmlns:csw="http://www.opengis.net/cat/csw" xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:dct="http://www.purl.org/dc/terms/" xmlns:ows="http://www.opengis.net/ows" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:appinfo>
<dc:identifier xmlns:dc="http://www.purl.org/dc/elements/1.1/">
http://schemas.opengis.net/csw/2.0.0/record
</dc:identifier>
</xsd:appinfo>
<xsd:documentation xml:lang="en">
This schema defines the basic record types that are common to all CSW
implementations. An application profile may extend AbstractRecordType to
represent model-specific content.
</xsd:documentation>
</xsd:annotation>
<xsd:import namespace="http://www.purl.org/dc/terms/" schemaLocation="./recdcterms.xsd"/>
<xsd:import namespace="http://www.purl.org/dc/elements/1.1/" schemaLocation="./recdcmes.xsd"/>
<xsd:import namespace="http://www.opengis.net/ows" schemaLocation="./owsboundingbox.xsd"/>
<xsd:element name="AbstractRecord" type="csw:AbstractRecordType" abstract="true" id="AbstractRecord"/>
<xsd:complexType name="AbstractRecordType" abstract="true" id="AbstractRecordType"/>
<xsd:element name="DCMIRecord" type="csw:DCMIRecordType" substitutionGroup="csw:AbstractRecord"/>
<xsd:complexType name="DCMIRecordType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
This type encapsulates all of the standard DCMI metadata terms,
including the Dublin Core refinements; these terms may be mapped to the
profile-specific information model.
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="csw:AbstractRecordType">
<xsd:sequence>
<xsd:group ref="dct:DCMI-terms"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="BriefRecord" type="csw:BriefRecordType" substitutionGroup="csw:AbstractRecord"/>
<xsd:complexType name="BriefRecordType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
This type defines a brief representation of the common record format.
It extends AbstractRecordType to include only the dc:identifier and
dc:type properties.
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="csw:AbstractRecordType">
<xsd:sequence>
<xsd:element ref="dc:identifier"/>
<xsd:element ref="dc:type" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="SummaryRecord" type="csw:SummaryRecordType" substitutionGroup="csw:AbstractRecord"/>
<xsd:complexType name="SummaryRecordType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
This type defines a summary representation of the common record format.
It extends AbstractRecordType to include the core properties.
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="csw:AbstractRecordType">
<xsd:sequence>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="dc:identifier"/>
<xsd:element ref="dc:type"/>
<xsd:element ref="dc:title"/>
<xsd:element ref="dc:subject"/>
<xsd:element ref="dc:format"/>
<xsd:element ref="dc:relation"/>
<xsd:element ref="dct:modified"/>
<xsd:element ref="dct:abstract"/>
<xsd:element ref="dct:spatial"/>
</xsd:choice>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="Record" type="csw:RecordType" substitutionGroup="csw:AbstractRecord"/>
<xsd:complexType name="RecordType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
This type extends DCMIRecordType to add ows:BoundingBox; it may be used
to specify a bounding envelope for the catalogued resource.
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="csw:DCMIRecordType">
<xsd:sequence>
<xsd:element ref="ows:BoundingBox" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>

例16-5は、contributorがRajaであるレコードを取得するリクエストです。

注意:
Oracle Databaseリリース11.1のSpatial Catalog Serviceでは、GetRecordsリクエストの同期処理のみサポートされます。

例16-5 GetRecordsリクエスト

<?xml version="1.0" ?>
<csw:GetRecords
service="CSW"
version="2.0.0"
xmlns:csw="http://www.opengis.net/cat/csw"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:dc="http://www.purl.org/dc/elements/1.1/"
xmlns:dct="http://www.purl.org/dc/terms/"
outputFormat="text/xml"
resultType="results"
outputSchema="csw:Record">
<csw:Query typeNames="csw:Record">
<csw:ElementName>/csw:Record/dc:identifier</csw:ElementName>
<csw:ElementName>/csw:Record/dc:contributor</csw:ElementName>
<csw:Constraint version="2.0.0" >
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>/csw:Record/dc:contributor</ogc:PropertyName>
<ogc:Literal>Raja</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</csw:Constraint>
</csw:Query>
</csw:GetRecords>

例16-6は、例16-5のリクエストに対するレスポンスです。

例16-6 GetRecordsのレスポンス

<csw:GetRecordsResponse xmlns:csw="http://www.opengis.net/cat/csw" xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:dct="http://www.purl.org/dc/terms/" xsi:schemaLocation="http://www.opengis.net/cat/csw http://localhost:8888/SpatialWS-SpatialWS-context-root/cswservlet?recordTypeId=1 " version="2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<csw:RequestId>4</csw:RequestId>
<csw:SearchStatus status="complete"/>
<csw:SearchResults recordSchema="http://www.opengis.net/cat/csw" numberOfRecordsMatched="1" numberOfRecordsReturned="1" nextRecord="0" expires="2007-02-09T16:32:35.29Z">
<csw:Record xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:ows="http://www.opengis.net/ows" xmlns:dct="http://www.purl.org/dc/terms/">
<dc:contributor xmlns:dc="http://www.purl.org/dc/elements/1.1/" scheme="http://www.example.com">Raja</dc:contributor>
<dc:identifier xmlns:dc="http://www.purl.org/dc/elements/1.1/">REC-1</dc:identifier>
</csw:Record>
</csw:SearchResults>
</csw:GetRecordsResponse>

例16-7は、レコード・タイプに関連するドメイン情報を取得するリクエストです。

例16-7 GetDomainリクエスト

<csw:GetDomain service="CSW"
version="2.0.0"
xmlns:csw="http://www.opengis.net/cat/csw" >
<csw:ParameterName>GetRecords.resultType</csw:ParameterName>
</csw:GetDomain>

例16-8は、例16-7のリクエストに対するレスポンスです。

例16-8 GetDomainのレスポンス

<csw:GetDomainResponse xmlns:csw="http://www.opengis.net/cat/csw" xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:dct="http://www.purl.org/dc/terms/">
<csw:DomainValues type="csw:SampleRecord">
<csw:ParameterName>GetRecords.resultType</csw:ParameterName>
<csw:ListOfValues>
<csw:Value>hits</csw:Value>
<csw:Value>results</csw:Value>
<csw:Value>validate</csw:Value>
</csw:ListOfValues>
</csw:DomainValues>
<csw:DomainValues type="csw:Record">
<csw:ParameterName>GetRecords.resultType</csw:ParameterName>
<csw:ListOfValues>
<csw:Value>hits</csw:Value>
<csw:Value>results</csw:Value>
<csw:Value>validate</csw:Value>
</csw:ListOfValues>
</csw:DomainValues>
</csw:GetDomainResponse>

例16-9は、レコードIDの値がREC-1のレコードを取得するリクエストです。

例16-9 GetRecordByIdリクエスト

<?xml version="1.0" ?>
<csw:GetRecordById
service="CSW"
version="2.0.0"
xmlns:csw="http://www.opengis.net/cat/csw"
xmlns:ogc="http://www.opengis.net/ogc" >
<csw:Id> REC-1 </csw:Id>
<csw:ElementSetName>brief</csw:ElementSetName>
</csw:GetRecordById>

例16-10は、例16-9のリクエストに対するレスポンスです。

例16-10 GetRecordByIdのレスポンス

<csw:GetRecordByIdResponse xmlns:csw="http://www.opengis.net/cat/csw" xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:dct="http://www.purl.org/dc/terms/" xsi:schemaLocation="http://www.opengis.net/cat/csw http://localhost:8888/SpatialWS-SpatialWS-context-root/cswservlet?recordTypeId=2 http://www.opengis.net/cat/csw http://localhost:8888/SpatialWS-SpatialWS-context-root/cswservlet?recordTypeId=1 " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<csw:BriefRecord xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:ows="http://www.opengis.net/ows" xmlns:dct="http://www.purl.org/dc/terms/">
<dc:identifier xmlns:dc="http://www.purl.org/dc/elements/1.1/">REC-1</dc:identifier>
</csw:BriefRecord>
</csw:GetRecordByIdResponse>

例16-11は、contributorがJohnのレコードを挿入するリクエストです。このレコードのID値はREC-2で、指定した境界ボックス(左下および右上の座標で定義される最適化された四角形)の空間属性が含まれます。

例16-11 Insertリクエスト

<csw:Transaction service="CSW"
version="2.0.0"
xmlns:csw="http://www.opengis.net/cat/csw" >
<csw:Insert>
<Record xmlns="http://www.opengis.net/cat/csw" xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:dct="http://www.purl.org/dc/terms/" xmlns:ows="http://www.opengis.net/ows" >
<dc:contributor scheme="http://www.example.com">John</dc:contributor>
<dc:identifier >REC-2</dc:identifier>
<ows:WGS84BoundingBox crs="urn:opengis:crs:OGC:2:84" dimensions="2">
<ows:LowerCorner>12 12</ows:LowerCorner>
<ows:UpperCorner>102 102</ows:UpperCorner>
</ows:WGS84BoundingBox>
</Record>
</csw:Insert>
</csw:Transaction>

例16-12は、例16-11のリクエストに対するレスポンスです。

例16-12 Insertのレスポンス

<csw:TransactionResponse xmlns:csw="http://www.opengis.net/cat/csw" xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:dct="http://www.purl.org/dc/terms/" xsi:schemaLocation="http://www.opengis.net/cat/csw http://localhost:8888/SpatialWS-SpatialWS-context-root/cswservlet?recordTypeId=1 " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<csw:TransactionSummary>
<csw:totalInserted>1</csw:totalInserted>
</csw:TransactionSummary>
</csw:TransactionResponse>

例16-13は、現行のcontributor値がJohnであるレコードのcontributor値をJaneに更新するリクエストです(つまり、値をJohnからJaneに変更します)。

例16-13 Updateリクエスト

<csw:Transaction service="CSW"
version="2.0.0"
xmlns:csw="http://www.opengis.net/cat/csw"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:dc="http://www.purl.org/dc/elements/1.1/">
<csw:Update>
<csw:RecordProperty>
<csw:Name>/csw:Record/dc:contributor</csw:Name>
<csw:Value>Jane</csw:Value>
</csw:RecordProperty>

<csw:Constraint version="2.0.0">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>/csw:Record/dc:contributor</ogc:PropertyName>
<ogc:Literal>John</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</csw:Constraint>

</csw:Update>
</csw:Transaction>

例16-14は、例16-13のリクエストに対するレスポンスです。

例16-14 Updateのレスポンス

<csw:TransactionResponse xmlns:csw="http://www.opengis.net/cat/csw" xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:dct="http://www.purl.org/dc/terms/">
<csw:TransactionSummary>
<csw:totalUpdated>1</csw:totalUpdated>
</csw:TransactionSummary>
</csw:TransactionResponse>

例16-15は、contributor値がJaneであるレコードを削除するリクエストです。

例16-15 Deleteリクエスト

<csw:Transaction service="CSW"
version="2.0.0"
xmlns:csw="http://www.opengis.net/cat/csw"
xmlns:dc="http://www.purl.org/dc/elements/1.1/"
xmlns:ogc="http://www.opengis.net/ogc">
<csw:Delete typeName="csw:Record">
<csw:Constraint version="2.0.0">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>/csw:Record/dc:contributor</ogc:PropertyName>
<ogc:Literal>Jane</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</csw:Constraint>
</csw:Delete>
</csw:Transaction>

例16-16は、例16-15のリクエストに対するレスポンスです。

例16-16 Deleteのレスポンス

<csw:TransactionResponse xmlns:csw="http://www.opengis.net/cat/csw" xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:dct="http://www.purl.org/dc/terms/">
<csw:TransactionSummary>
<csw:totalDeleted>1</csw:totalDeleted>
</csw:TransactionSummary>
</csw:TransactionResponse>

16.4 CSWの管理用のJava API

SDO_CSW_PROCESSパッケージに含まれるPL/SQL APIに加え、Java APIを使用してレコード・タイプのパブリッシュおよび削除を行ったり、レコード・タイプおよびCSWメタデータ表へのアクセス権限の付与および取消しを行うことができます。

この項では、oracle.spatial.csw.CSWAdminクラスに含まれる各メソッドについての基本的な参照情報を説明します。ここでは、メソッドをアルファベット順に記載しています。

16.4.1 createXMLTableIndexメソッド

createXMLTableIndexメソッドは、レコード・タイプのインスタンスにXDB.XMLINDEX索引を作成するメソッドです。このメソッドの書式は次のとおりです。

public static void createXMLTableIndex(
OracleConnection conn,
String typeNS,
String typeName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

typeNSは、レコード・タイプの名前空間のURLです。

typeNameは、レコード・タイプの名前です。

16.4.2 deleteDomainInfoメソッド

deleteDomainInfoメソッドは、レコード・タイプに関連するドメイン情報を削除するメソッドです。このメソッドの書式は次のとおりです。

public static void deleteDomainInfo(
OracleConnection conn,
int recordTypeId,
String parameterName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

recordTypeIdは、レコード・タイプのIDです。

parameterNameは、削除するドメイン・パラメータの名前です。

16.4.3 deleteRecordViewMapメソッド

deleteRecordViewMapメソッドは、レコード・ビューの変換に関連する情報を削除するメソッドです。このメソッドの書式は次のとおりです。

public static void deleteRecordViewMap(
OracleConnection conn,
String recordTypeNS,
String viewSrcName,
String targetTypeName,
String  mapType) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

recordTypeNSは、レコード・タイプの名前空間のURLです。

viewSrcNameは、ソース・レコード・タイプの名前です。

targetTypeNameは、変換先レコード・タイプの名前です。

mapTypeは、マップ・タイプ(brief、summaryなど)です。

16.4.4 disableVersioningメソッド

disableVersioningメソッドは、レコード・タイプのバージョニングを無効にするメソッドです。このメソッドの書式は次のとおりです。

public static void disableVersioning(
OracleConnection conn,
String rtNSUrl,
String rtName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

rtNSUrlは、レコード・タイプの名前空間のURLです。

rtNameは、レコード・タイプの名前です。

16.4.5 dropRecordTypeメソッド

dropRecordTypeメソッドは、CSWリポジトリからレコード・タイプを削除するメソッドです。このメソッドの書式は次のとおりです。

public static void dropRecordType(
OracleConnection conn,
String rtNSUrl,
String rtName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

rtNSUrlは、レコード・タイプの名前空間のURLです。

rtNameは、レコード・タイプの名前です。

16.4.6 dropXMLTableIndexメソッド

dropXMLTableIndexメソッドは、レコード・タイプのインスタンスに対して作成されたXDB.XMLINDEX型の索引を削除するメソッドです。このメソッドの書式は次のとおりです。

public static void dropXMLTableIndex(
OracleConnection conn,
String typeNS,
String typeName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

typeNSは、レコード・タイプの名前空間のURLです。

typeNameは、レコード・タイプの名前です。

16.4.7 enableVersioningメソッド

enableVersioningメソッドは、レコード・タイプのバージョニングを有効にするメソッドです。このメソッドの書式は次のとおりです。

public static void enableVersioning(
OracleConnection conn,
String rtNSUrl,
String rtName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

rtNSUrlは、レコード・タイプの名前空間のURLです。

rtNameは、レコード・タイプの名前です。

16.4.8 getIsXMLTableIndexCreatedメソッド

getIsXMLTableIndexCreatedメソッドは、レコード・タイプにXDB.XMLINDEX型の索引が作成されている場合はブール値TRUEを戻し、そのような索引が作成されていない場合はブール値FALSEを戻すメソッドです。このメソッドの書式は次のとおりです。

public static boolean getIsXMLTableIndexCreated(
OracleConnection conn,
String typeNS,
String typeName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

typeNSは、レコード・タイプの名前空間のURLです。

typeNameは、レコード・タイプの名前です。

16.4.9 getRecordTypeIdメソッド

getRecordTypeIdメソッドは、指定した名前空間とレコード・タイプの組合せのレコード・タイプIDを戻すメソッドです。このメソッドの書式は次のとおりです。

public static boolean getIRecordTypeId(
OracleConnection conn,
String typeNamespace,
String typeName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

typeNamespaceは、レコード・タイプの名前空間のURLです。

typeNameは、レコード・タイプの名前です。

16.4.10 grantMDAccessToUserメソッド

grantMDAccessToUserメソッドは、CSWメタデータへのアクセス権限をデータベース・ユーザーに付与するメソッドです。このメソッドの書式は次のとおりです。

public static void grantMDAccessToUser(
OracleConnection conn,
String usrName)  throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

usrNameは、データベース・ユーザーの名前です。

16.4.11 grantRecordTypeToUserメソッド

grantRecordTypeToUserメソッドは、レコード・タイプへのアクセス権限をデータベース・ユーザーに付与するメソッドです。このメソッドの書式は次のとおりです。

public static void grantRecordTypeToUser(
OracleConnection conn,
String typeNS,
String typeName,
String usrName)  throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

typeNSは、レコード・タイプの名前空間のURLです。

typeNameは、レコード・タイプの名前です。

usrNameは、データベース・ユーザーの名前です。

16.4.12 publishRecordTypeメソッド

publishRecordTypeメソッドは、レコード・タイプをパブリッシュするメソッドです。つまり、このメソッドによって、レコード・タイプに関連するメタデータが登録されます。このメソッドの書式は次のとおりです。

public static void publishRecordType(OracleConnection conn,
XMLType recordTypeMD) throws SQLException , CSWException;

public static void publishRecordType(OracleConnection conn,
String typeNS,
String typeName,
ArrayList<String> idPaths,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> tsPaths,
XMLType schemaDoc,
XMLType briefXSLPattern,
XMLType summaryXSLPattern,
XMLType dcmiXSLPattern,
ArrayList<String> srsPaths,
String idExtractorType,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS, String srsNSAlias) throws SQLException ;

public static void publishRecordType(OracleConnection conn,
String typeNS,
String typeName,
ArrayList<String> idPaths,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> tsPaths,
XMLType schemaDoc,
XMLType briefXSLPattern,
XMLType summaryXSLPattern,
XMLType dcmiXSLPattern,
ArrayList<String> srsPaths,
String idExtractorType,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS, String srsNSAlias,
String rtXSDRefId,
boolean genSpatialIndex,
boolean setDomainInfo,
Hashtable<String, ArrayList<String>> domainInfo,
boolean setRecordViewMap,
ArrayList<ArrayList<Object>> recordViewMap) throws SQLException ;

public static void publishRecordType(OracleConnection conn,
String typeNS,
String typeName,
ArrayList<String> idPaths,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> tsPaths,
XMLType schemaDoc,
XMLType briefXSLPattern,
XMLType summaryXSLPattern,
XMLType dcmiXSLPattern,
ArrayList<String> srsPaths,
String idExtractorType,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS, String srsNSAlias,
String rtXSDRefId,
boolean genSpatialIndex,
boolean setDomainInfo,
Hashtable<String, ArrayList<String>> domainInfo,
boolean setRecordViewMap,
ArrayList<ArrayList<Object>> recordViewMap,
ArrayList<PathInfo> numPaths,
ArrayList<PathInfo> idxPaths,
ArrayList<String[]> idxPathTypes,
boolean genXMLIndex) throws SQLException ;

public static void publishRecordType(OracleConnection conn,
String typeNS,
String typeName,
ArrayList<String> idPaths,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> tsPaths,
XMLType schemaDoc,
XMLType briefXSLPattern,
XMLType summaryXSLPattern,
XMLType dcmiXSLPattern,
ArrayList<String> srsPaths,
String idExtractorType, ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS, String srsNSAlias,
String rtXSDRefId,
boolean genSpatialIndex,
boolean setDomainInfo,
Hashtable<String, ArrayList<String>> domainInfo,
boolean setRecordViewMap,
ArrayList<ArrayList<Object>> recordViewMap,
ArrayList<PathInfo> numPaths,
ArrayList<PathInfo> idxPaths,
ArrayList<String[]> idxPathTypes,
boolean genXMLIndex,
boolean isGML3) throws SQLException ;

public static void publishRecordType(OracleConnection conn,
String typeNS,
String typeName,
ArrayList<String> idPaths,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> tsPaths,
XMLType schemaDoc,
XMLType briefXSLPattern,
XMLType summaryXSLPattern,
XMLType dcmiXSLPattern,
ArrayList<String> srsPaths,
String idExtractorType,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS, String srsNSAlias,
String rtXSDRefId,
boolean genSpatialIndex,
boolean setDomainInfo,
Hashtable<String, ArrayList<String>> domainInfo,
boolean setRecordViewMap,
ArrayList<ArrayList<Object>> recordViewMap,
ArrayList<PathInfo> numPaths,
ArrayList<PathInfo> idxPaths,
ArrayList<String[]> idxPathTypes,
boolean genXMLIndex,
boolean isGML3,
CollectionPathInfo collPathInfo) throws SQLException;

public static void publishRecordType(OracleConnection conn,
String typeNS,
String typeName,
ArrayList<String> idPaths,
ArrayList<PathInfo> spatialPaths,
ArrayList<PathInfo> tsPaths,
XMLType schemaDoc,
XMLType briefXSLPattern,
XMLType summaryXSLPattern,
XMLType dcmiXSLPattern,
ArrayList<String> srsPaths,
String idExtractorType,
ArrayList<GeomMetaInfo> sdoMetaInfo,
String srsNS, String srsNSAlias,
String rtXSDRefId,
boolean genSpatialIndex,
boolean setDomainInfo,
Hashtable<String, ArrayList<String>> domainInfo,
boolean setRecordViewMap,
ArrayList<ArrayList<Object>> recordViewMap,
ArrayList<PathInfo> numPaths,
ArrayList<PathInfo> idxPaths,
ArrayList<String[]> idxPathTypes,
boolean genXMLIndex,
boolean isGML3,
CollectionPathInfo collPathInfo,
boolean hasMultipleSRSNS) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

recordTypeMDは、レコード・タイプ登録メタデータです。このメタデータは、wstype_md.xsdファイルに指定されたrecordTypeMd要素定義に準拠している必要があります。レコード・タイプのパス登録メタデータXMLの例は、rt_metadata1.xmlとrt_metadata2.xmlに用意されています。これらのファイルは、src/data/パスの下にあるws_client.jarデモ・ファイル(10.4項を参照)に含まれています。レコード・タイプをパブリッシュする例の使用方法は、Readme.txtファイルを参照してください。このファイルは、src/パスの下にあるws_client.jarに含まれています。

typeNSは、レコード・タイプの名前空間のURLです。

typeNameは、レコード・タイプの名前です。

idPathsは、レコードIDパス要素のリストです。各要素はString型です。

spatialPathsは、レコード・タイプに含まれる空間パスのリストです。これは、oracle.spatial.ws.PathInfoクラス(16.4.12.1項を参照)のArrayListです。

tsPathsは、レコード・タイプに含まれる時間に関連したパスのリストです(date、dateTime、gYear、gMonth、gDay、gMonthDay、gYearMonthなど)。これは、oracle.spatial.ws.PathInfoクラス(16.4.12.1項を参照)のArrayListです。

schemaDocは、レコード・タイプのXMLスキーマ定義(XSD)です。

briefXSLPatternは、レコード構造の形式をfullからbriefに変換するためのXSLTマッピングです。

summaryXSLPatternは、レコード構造の形式をsummaryからbriefに変換するためのXSLTマッピングです。

dcmiXSLPatternは、レコード構造の形式をdcmiからbriefに変換するためのXSLTマッピングです。

srsPathsは、空間参照システム情報を表すパスのリストです。

idExtractorTypeは、識別子の抽出方法(XPATH、USER_FUNCまたはNONE)に関する情報です。XPATHは、idPathsパラメータに指定したXPathを使用してレコード識別子が抽出されることを表します。USER_FUNCは、idPathsパラメータに指定したユーザー定義のファンクションが起動されることで、レコード・ドキュメント・インスタンス全体がそのファンクションに渡されてレコード識別子が抽出されることを表します。NONEは、レコード識別子がシステムによって生成されることを表します。

sdoMetaInfoは、空間パスの空間メタデータ情報です。これは、oracle.spatial.ws.GeomMetaInfoクラス(16.4.12.1項を参照)のArrayListです。

srsNSは、空間パス内のデータと関連付けられた空間参照システム(座標系)のユーザー定義の名前空間です。

srsNSAliasは、空間パス内のデータと関連付けられた空間参照システム(座標系)の名前空間の別名です。

rtXSDRefIdは、1つのXSDファイル内に複数のレコード・タイプが定義されている場合は、グループ・レコード・タイプのXMLスキーマ定義ファイル名(文字列)です。このパラメータは、グループXSD定義をCSWメタデータ内に格納する際に使用されると、その後、グループ・レコード・タイプXSDファイル内にスキーマが定義されている複数のレコード・タイプから参照されます。

genSpatialIndexは、ブール値です。TRUEの場合は、タイプの作成時に空間索引がレコード・タイプ上に作成されます。FALSEの場合、空間索引は作成されません。

setDomainInfoは、ブール値です。TRUEの場合は、このレコード・タイプのドメイン情報がタイプの作成時に設定されます。FALSEの場合、このレコード・タイプのドメイン情報は設定されません。

domainInfoは、ドメイン情報です。

setRecordViewMapは、ブール値です。TRUEの場合は、レコード・ビューの変換マップがタイプの作成時に設定されます。FALSEの場合、レコード・ビューの変換マップは設定されません。

recordViewMapは、レコード・ビューの変換マップ情報(briefからfull、summaryからfull、およびdcmiからfull)です。これはArrayList<ArrayList<Object>>型で、各ArrayList<Object>には、Object[0] = (String) recordTypeNS、Object[1] = (String) viewSrcName、Object[2] = (String) targetTypeName、Object[3]= (oracle.xdb.XMLType) mapInfo、Object[4] = (String) mapTypeが含まれます。

numPathsは、レコード・タイプに含まれる数値(NUMBER、INTEGERなど)に関連するパスのリストです。これは、oracle.spatial.ws.PathInfoクラス(16.4.12.1項を参照)のArrayListです。

idxPathsは、索引パスのリストです。これは、XDB.XMLINDEX型の索引の作成時に、索引が作成されるパスのリストです。これは、oracle.spatial.ws.PathInfoクラス(16.4.12.1項を参照)のArrayListです。

idxPathTypesは、各索引パスの情報を指定します。このパスには、string[3]の次の各要素が含まれます。string[0]にはタイプ名、string[1]にはタイプの形式(長さのタイプなど)、string[2]には、Bツリー索引と一意索引のいずれかを作成するか、または索引の作成を行わないかの指定(CSWAdmin.BTREE、CSWAdmin.UNIQUEまたはNULL)が含まれます。

genXMLIndexは、ブール値です。TRUEの場合は、XDB.XMLINDEX型の索引がドキュメントベース・レコード・タイプ上に作成されます。FALSEの場合は、XDB.XMLINDEX型の索引はドキュメントベース・レコード・タイプ上に作成されません。現時点で索引を作成しないことを選択する場合でも、createXMLTableIndexメソッド(16.4.1項を参照)を使用して後から作成できます。

isGML3は、ブール値です。TRUEは、このレコード・タイプのインスタンスに含まれるジオメトリがGML3.1.1に準拠していることを表します。FALSEは、このレコード・タイプのインスタンス内のジオメトリがGML 2.1.2に準拠していることを表します。

collPathInfoは、空間コレクションのパス情報です。

hasMultipleSRSNSは、ブール値です。TRUEは、このレコード・タイプから複数のユーザー定義の空間参照システムの名前空間が参照されることを表します。FALSEは、このレコード・タイプから複数のユーザー定義の空間参照システムの名前空間は参照されないことを表します。

16.4.12.1 publishRecordTypeに関連するクラス

この項では、publishRecordTypeメソッドのパラメータ定義で使用されるいくつかのクラスについて説明します。

oracle.spatial.ws.PathElementはPathElement名前空間およびPathElement名の2つのStringオブジェクトを含むJavaクラスです。このクラスには、getValue()メソッドが含まれ、このメソッドからは文字列形式のPathElementオブジェクトが戻されます。このクラスの書式は次のとおりです。

public class PathElement {
// Set namespace and name information for a PathElement.
public void set(String ns, String name);
//Get a string value for the PathElement object.
public String getValue() ;
}

oracle.spatial.ws.Pathは、パスを構成する順序付けされたPathElementオブジェクトのリストを含むJavaクラスです。たとえば、XPathがmyns:A/myns:Bである場合、myns:Aおよびmyns:BがPathElementオブジェクトということになります。このクラスには、getValue()メソッドが含まれ、このメソッドからは文字列形式のPathオブジェクトが戻されます。このクラスの書式は次のとおりです。

public class Path {
//Add a PathElement.
public void add(PathElement p) ;
//Get a string Value for the Path object.
public String getValue() ;
}

oracle.spatial.ws.PathInfoは、パスの関連付けおよびメタデータの情報など、パスまたはパスのリストに関する情報を含むコンテナ・クラスです。このクラスの書式は次のとおりです。

public class PathInfo {

// Set number of occurrences for the Path. Default value is 1. Number of
// occurrences > 1 in case of arrays.
public void setNumOfOccurrences(int i) ;

// Get number of occurrences for the Path.
public int getNumOfOccurrences();

// Add a path, in case PathInfo has multiple paths associated via a
// choice association
public void addPath(Path p) ;

// Add path type information. This is relevant for time-related Paths
// (for example, date, dateTime, gDay, gMonth, gYear, gMonthDay,
// gYearMonth, duration, or time).
public void addPathType(String t) ;

// Add a PathInfo type. This can be PathInfo.CHOICE or
// PathInfo.DEFAULT or PathInfo.COLLECTION.
// PathInfo.CHOICE - means that the list of paths  in this PathInfo are
// related to each other via choice association. For example, we may have
// a list of Spatial Paths, which are associated with one another via choice.
// So, only one of these path can occur in a feature instance/document.
// PathInfo.COLLECTION - means the list of paths in this PathInfo are part
// of a collection (currently spatial collections are
// supported) which will be indexed.
// Default value is PathInfo.DEFAULT for one Path or a finite array Paths.
//  @param t PathInfo type information. PathInfo.CHOICE or
// PathInfo.DEFAULT or PathInfo.COLLECTION
public void addPathInfoType(int t) ;

//  Returns a  string representation for PathInfo content.
public String getPathContent() ;

// Returns Path type information (for example, date, dateTime, gDay, gMonth,
// gYear, gMonthDay, gYearMonth, duration, or time).
public String getPathType() ;

// Returns a  string representation for PathInfo path content.
// param i The index of the path in the PathInfo whose path content needs to
// be returned
// @return a  string representation for PathInfo path content
public String getCollectionPathContent(int i);

// Returns number of paths in the PathInfo.
// @return number of paths in the PathInfo which is of type PathInfo.COLLECTION
// if PathInfo is not of type PathInfo.COLLECTION returns -1
public int getCollectionPathContentSize();
}

oracle.spatial.ws.CollectionPathInfoは、PathInfoオブジェクトのコレクションに関する情報を含むコンテナ・クラスです。このコレクションに含まれる各PathInfoオブジェクトは、索引付けされて検索対象になる空間パスのグループを表します。このクラスは、フィーチャ・タイプおよびレコード・タイプ内のコレクションをベースにした空間コンテンツを参照するパスの登録に使用されます。このクラスの書式は次のとおりです。

public class CollectionPathInfo {

/**
* Add a PathInfo.
* @param p PathInfo to be added
* @param g geometry related metadata for PathInfo to be added
*/
public void addPathInfo(PathInfo p, GeomMetaInfo g) ;

/**
* Get a PathInfo.
* @param i index of the PathInfo to be retrieved
*/
public PathInfo getPathInfo(int i) ;
/**
* Get geometry related metadata for a certain PathInfo.
* @param i index of the PathInfo whose geomMetaInfo is to be retrieved
*/
public GeomMetaInfo getGeomMetaInfo(int i) ;

/**
* Get all PathInfo objects in this CollectionPathInfo.
*/
public ArrayList<PathInfo> getPathInfos() ;
}

oracle.spatial.ws.GeomMetaInfoは、レコード・タイプ内の空間パスに対応する次元関連の情報を含むクラスです。この情報には、次元名、下限および上限、許容差および座標系(SRID)が含まれます。このクラスの書式は次のとおりです。

public class GeomMetaInfo {

// Default constructor. Creates a GeomMetaInfo object with number of
// dimensions equal to 2.
public GeomMetaInfo() ;

// Creates a GeomMetaInfo object of a specified number of dimensions.
// Parameter numOfDimensions is the number of dimensions represented
// in the GeomMetaInfo object.
// Note: max number of dimensions supported is 4.
public GeomMetaInfo(int numOfDimensions)  throws
ArrayIndexOutOfBoundsException ;

//Set Dimension Name.
// Parameter index represents the dimension index which needs to be set.
// Parameter val is dimension name value.
public void setDimName(int index, String val) throws
ArrayIndexOutOfBoundsException ;

// Set Dimension Lower Bound.
// Parameter index represents the dimension index which needs to be set.
// Parameter val is dimension lower bound value.
public void setLB(int index, double val) throws
ArrayIndexOutOfBoundsException ;

// Set Dimension Upper Bound
// Parameter index represents the dimension index which needs to be set.
// Parameter val is dimension upper bound value
public void setUB(int index, double val) throws
ArrayIndexOutOfBoundsException ;

// Set Dimension tolerance value.
// Parameter index represents the dimension index which needs to be set.
// Parameter  val is dimension tolerance value.
public void setTolerance(int index, double val) throws
ArrayIndexOutOfBoundsException ;

// Set Coordinate Reference System Identifier
public void setSRID (int val) ;

// Get dimension Name.
// Parameter index represents the dimension index whose name needs to be
// returned. This method returns the dimension name for the given index.
public String getDimName(int index) throws
ArrayIndexOutOfBoundsException ;

// Get dimension lower bound.
// Parameter index represents the dimension index whose lower bound needs
//  to be returned.
// This method returns the lower bound for the given index.
public double getLB(int index) throws ArrayIndexOutOfBoundsException ;

// Get dimension upper bound.
// Parameter index represents the dimension index whose upper bound needs
// to be returned.
// This method returns the upper bound for the given index.
public double getUB(int index) throws ArrayIndexOutOfBoundsException ;

// Get dimension tolerance.
// Parameter index represents the dimension index whose tolerance needs
// to be returned.
// This method returns the tolerance value for the given index.
public double getTolerance(int index) throws
ArrayIndexOutOfBoundsException ;

// Get coordinate system (spatial reference system) identifier.
public int getSRID () ;

// Get number of dimensions represented by this GeomMetaInfo object.
public int getNumOfDimensions() ;

// Sets the spatial index dimension parameter. By default it is 2.
// return  Coordinate Reference System Identifier value
public int setSpatialIndexDimension(int d) ;

// Get the spatial index dimension parameter.
// return  number of dimensions
public int getSpatialIndexDimension() ;

// Sets the user spatial srs namespace referred to by this GeomMetaInfo object.
// Needs to be specified if multiple srs namespace are referred to within
// the same feature or record type.
public void setSRSNS(String s) ;

// Gets the user defined spatial srs namespace referred to by
// this GeomMetaInfo object.
public String getSRSNS() ;

// Sets the user defined spatial srs namespace alias referred to
// by this GeomMetaInfo object.
public void setSRSNSAlias (String s) ;

// Gets the user defined spatial srs namespace  alias
// referred to by this  GeomMetaInfo object.
public String getSRSNSAlias () ;
}

16.4.13 registerTypePluginMapメソッド

registerTypePluginMapメソッドは、レコード・タイプの空間コンテンツの処理および抽出用プラグインを登録するメソッドです。このメソッドの書式は次のとおりです。

public static boolean registerTypePluginMap(
OracleConnection conn,
String typeNamespace,
String typeName,
String packageName) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

typeNSは、レコード・タイプの名前空間のURLです。

typeNameは、レコード・タイプの名前です。

packageNameは、プラグインで使用されるPL/SQLパッケージ・オブジェクトの名前です(scott.my_plugin_pkgなど)。

16.4.14 revokeMDAccessFromUserメソッド

revokeMDAccessFromUserメソッドは、CSWメタデータへのアクセス権限をデータベース・ユーザーから取り消すメソッドです。このメソッドの書式は次のとおりです。

public static void revokeMDAccessFromUser(
OracleConnection conn,
String usrName)  throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

usrNameは、データベース・ユーザーの名前です。

16.4.15 revokeRecordTypeFromUserメソッド

revokeRecordTypeFromUserメソッドは、レコード・タイプへのアクセス権限をデータベース・ユーザーから取り消すメソッドです。このメソッドの書式は次のとおりです。

public static void revokeRecordTypeFromUser(
OracleConnection conn,
String typeNS,
String typeName,
String usrName)  throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

typeNSは、レコード・タイプの名前空間のURLです。

typeNameは、レコード・タイプの名前です。

usrNameは、データベース・ユーザーの名前です。

16.4.16 setCapabilitiesInfoメソッド

setCapabilitiesInfoメソッドは、機能に関連する情報を移入するメソッドです。(機能のドキュメントについては、16.2.1項を参照してください。)このメソッドの書式は次のとおりです。

public static void setCapabilitiesInfo(OracleConnection conn,
XMLType capabilitiesTemplate) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

capabilitiesTemplateは、カタログ・サービスの機能のドキュメントです。

16.4.17 setDomainInfoメソッド

setDomainInfoメソッドは、レコード・タイプに関連するドメイン情報を設定するメソッドです。このメソッドの書式は次のとおりです。

public static void setDomainInfo(OracleConnection conn,
int recordTypeId,
String propertyName,
String parameterName,
ArrayList<String> values) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

recordTypeIdは、レコード・タイプのIDです。

propertyNameは、ドメイン・プロパティの名前です。

parameterNameは、ドメイン・パラメータの名前です。

valuesは、ドメイン・パラメータの値を指定します。

16.4.18 setRecordViewMapメソッド

setRecordViewMapメソッドは、レコード・ビューの変換(たとえば、BriefRecordからRecordなど)に関連する情報を移入するメソッドです。このメソッドの書式は次のとおりです。

public static void setRecordViewMap(OracleConnection conn,
String recordTypeNS,
String viewSrcName,
String targetTypeName,
oracle.xdb.XMLType mapInfo,
String  mapType) throws SQLException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

recordTypeNSは、レコード・タイプの名前空間のURLです。

viewSrcNameは、ソース・レコード・タイプの名前です。

targetTypeNameは、変換先レコード・タイプの名前です。

mapInfoは、マッピングのXSLT定義です。

mapTypeは、マップ・タイプ(brief、summaryなど)です。

16.4.19 setXMLTableIndexInfoメソッド

setXMLTableIndexInfoメソッドは、索引を作成するオプションを使用してレコード・タイプのXMLTableIndex索引情報を更新します。このメソッドの書式は次のとおりです。

注意:
XMLTableIndex索引がすでに存在する場合は、setXMLTableIndexInfoメソッドをコールする前に、(dropRecordTypeメソッドを使用して)索引を削除する必要があります。

public static void setXMLTableIndexInfo(OracleConnection conn,
String typeNS,
String ftName,
ArrayList<PathInfo> idxPaths,
ArrayList<String[]> idxPathTypes,
boolean genXMLIndex) throws SQLException , CSWException;

connは、DBAロールが付与されたユーザー用のOracle Database接続です。

typeNSは、レコード・タイプの名前空間のURLです。

ftNameは、レコード・タイプの名前です。

idxPathsは、索引パスのリストです。これは、XMLTABLEINDEX型の索引の作成時に、索引が作成されるパスのリストです。これは、oracle.spatial.ws.PathInfoクラス(16.4.12.1項を参照)のArrayListです。

idxPathTypesは、各索引パスの情報を指定します。このパスには、string[3]の次の各要素が含まれます。string[0]にはタイプ名、string[1]にはタイプの形式(長さのタイプなど)、string[2]には、Bツリー索引と一意索引のいずれかを作成するか、または索引の作成を行わないかの指定(CSWAdmin.BTREE、CSWAdmin.UNIQUEまたはNULL)が含まれます。

genXMLIndexは、ブール値です。TRUEの場合は、XDB.XMLINDEX型の索引がレコード・タイプ上に作成されます。FALSEの場合は、XDB.XMLINDEX型の索引はレコード・タイプ上に作成されません。現時点で索引を作成しないことを選択する場合でも、createXMLTableIndexメソッド(16.4.1項を参照)を使用して後から作成できます。

17 SpatialのWebサービスのセキュリティに関する考慮事項

SpatialのWebサービスを使用する場合は、できるだけセキュアな方法でデータベースに接続します。このような状況におけるセキュリティには、次のような考慮事項があります。

- 機密保護: 第三者がユーザーとサーバー間のメッセージを傍受および復号化することはできないという保証

- 認証性: 第三者が別のユーザーになりすましてサーバーに接続することはできないという保証

- 整合性: メッセージの変更を検出されずに、第三者がユーザーとサーバー間のメッセージを変更することはできないという保証

信頼性の高い方法で各ユーザーIDが認証された後に、ユーザーIDおよびIDに関連付けられた権限に基づいてデータおよび機能へのアクセスを制限する、柔軟かつファイングレインな認可が行われることもユーザーは期待します。しかし、現行の多くのXMLインタフェースおよびSOAPインタフェースは、このようなセキュリティ方式には十分に対応していません。

この章の内容は次のとおりです。

- 17.1項「ユーザー管理」

- 17.2項「アクセス制御およびバージョニング」

- 17.3項「Webサービスのセキュリティの構成」

- 17.4項「SpatialのWebサービス用のインタフェース」

SpatialのWebサービスのセキュリティに関連する説明およびサンプルは、wsclient.jarデモ・ファイル(10.4項を参照)も参照してください。

17.1 ユーザー管理

SpatialのWebサービスでは複数のユーザー管理方法が使用でき、管理者が外部ユーザー(SOAP/XMLリクエストを作成するユーザー)およびデータベース・ユーザーを管理する方法に加え、ユーザーの資格証明を制御する方法(これらのユーザーがアクセスできるデータおよびWebサービスの機能を制御する方法)に影響を与えます。

データベースの場合、ユーザーはデータベース/エンタープライズ・ユーザー(システムによる管理)またはアプリケーション・ユーザー(表で管理)のいずれかです。また、エンタープライズ・ユーザーのユーザー定義がOC4Jで共有されている場合があります。あるいは、OC4Jではデータベース・ユーザーとは別にLDAP管理のユーザー(既存のデータベース・ユーザーと同じ名前を使用しても、必ずしもそのデータベース・ユーザーと同じ認証は使用しないユーザーなど)が定義されている場合があります。

通常、ユーザーはSOAPリクエストの作成時に、ユーザー名Johnおよび認証secretなどを入力します。この例では、JohnはOC4Jユーザーであることが必要です。(管理者は、LDAP、LDAP/XMLおよび他の方法を使用して、OC4Jユーザーを管理できます。)

データベース内でのユーザー管理はアイデンティティ伝播(17.1.1項を参照)とリンクします。

17.1.1 データベースへのアイデンティティ伝播

OC4Jに含まれるSpatialWSサービスでは、いくつかのオプションのうち1つを使用してデータベースにユーザーIDが伝播されます。いずれのオプションもデータベースでのユーザー管理とリンクされているため、管理者はユーザーの認可および監査を柔軟に制御できます。使用可能なアイデンティティ伝播のオプションは、次のとおりです。

- プロキシ認証: JDBCを使用し、プロキシ・ユーザー経由でデータベース・ユーザーに接続します。たとえば、データベース・ユーザーJohnとOC4JユーザーJohnの設定が別でパスワードも異なる場合、ユーザーJohnがエンタープライズ・ユーザーとして設定され、OC4Jとデータベースで共有されている場合、またはデータベース・ユーザーJohnが、直接SQLで接続するのではなく、プロキシ認証を介して使用するように設定されている場合があります。

- アプリケーション・ユーザー管理: データベース・ユーザーを介するのではなく、データベース表でユーザーを管理することで、管理者はより柔軟な管理が可能になります。この方法では、仮想プライベート・データベース(17.2.1項を参照)を使用する場合に、SELECT USER FROM DUALと入力してユーザーIDを特定することができないため、かわりに次のようにシステム・コンテキストを問い合せる必要があります。

SELECT SYS_CONTEXT('APP_CTX', 'APP_USER_ID') FROM DUAL;

たとえば、データベース・ユーザーJohnとOC4JユーザーJohnの設定が別でパスワードも異なる場合、またはデータベース表でアプリケーション・ユーザーを共有するようにOC4Jが構成されている場合があります。

- 単一アプリケーション・ユーザー: データベースへの接続には単一アプリケーション・ユーザーを使用します。アプリケーションで特定のユーザーを識別する必要がなく、そのユーザーによるSpatialのWebサービスの使用が認可されているかぎり、この方法を使用できます。その場合、特定のユーザーは単一アプリケーション・ユーザーと同じ資格証明を使用し、そのユーザーの個別監査は行われません。

アイデンティティ伝播のオプションを指定するには、次のいずれかのサブ要素をWSConfig.xmlファイル(10.3項を参照)内の<Proxy_management>要素に挿入します。

- <Proxy_authentication/>: プロキシ認証を指定する場合

- <Application_user_management/>: アプリケーション・ユーザー管理を指定する場合

- <Fixed_app_user/>: 単一アプリケーション・ユーザーを使用する場合

17.1.2 キャッシュとユーザー管理

SpatialのWebサービス・フレームワーク内のハンドラでは、OC4Jでのキャッシュの使用を選択できます。たとえば、WFSではフィーチャ表がキャッシュされます。OC4Jのキャッシュは、仮想プライベート・データベース(VPD)の使用など、データベースに設定された認可制約に従う必要があります。データベースの認可フレームワーク全体をローカルに複製することは実用的ではないため、各問合せでは適用可能なデータベースの認可制約を確認する必要があります。

WFSの場合は、ID列以外に含まれる実際のデータ値を使用するのではなく、ID値のみを使用して問い合せる必要があることを意味します。たとえば、問合せにはSELECT col1, col2 FROM...のかわりにSELECT id FROM...を指定します。このような場合、実際のデータはすでにキャッシュされており、問合せでは行レベルの認可のみ確認されます。この方法には、通常、パフォーマンス上のメリットもあり、特に大きなデータ・レコードの場合に有効です(一般的に、空間データのデータ・レコードは大きいものです)。

ただし、この方法は列レベルのVPDを使用する一部の方式では機能しません。たとえば、ユーザーJohnは総合的なジオメトリのみ参照でき、ユーザーJaneは元の詳細なジオメトリを参照できるように、列レベルのVPDが構成されているとします。ユーザーは2人とも同じデータ・レコードにアクセスしますが、Johnに対してはジオメトリ列レベルが不明瞭に表示されます。この例は、ジオメトリの汎化を意味します。別の例では、不明瞭化によって許可されたユーザーのみに社会保険番号が表示され、それ以外のユーザーには不明瞭化された********* という値が表示される例があります。

Spatialのネットワーク・データ・モデルの場合、キャッシュ機能では認可制約の確認は行われません(これは、ネットワーク問合せパターンに関連するパフォーマンスが考慮されるためです)。したがって、ネットワーク・データ・モデルの場合は、アイデンティティ伝播の単一アプリケーション・ユーザー・オプション(17.1.1項を参照)を使用します。このオプションでは、ユーザーの認可を制御するための管理者の選択は制限されます。

17.2 アクセス制御およびバージョニング

管理者が一部の認可制約をOC4Jで実行するように構成できる場合でも、認可およびバージョニングはOC4Jではなくデータベースで基本的に実行されます。Oracle Databaseでは、仮想プライベート・データベース(VPD)の場合も同様に、選択、挿入および更新の各操作に対する一般的な権限を構成することができます。Workspace Managerの操作もサポートされます。

17.1.2項で説明されているとおり、OC4Jのキャッシュはデータベースの構成と一致している必要があります。ただし、キャッシュが一致していない場合は、単一アプリケーション・ユーザー・オプション(17.1.1項を参照)を使用する必要があります。これは、アプリケーションのすべての使用者が同一データを参照できても問題にならないためです。

17.2.1 仮想プライベート・データベース

注意:
OpenLSマッピング・サービスおよびルーティング・サービスは、仮想プライベート・データベース(VPD)または別の方式によるユーザー固有の認可(表に対するSELECT権限を特定のユーザーに付与するなど)を使用する場合は動作しません。

管理者は仮想プライベート・データベース(VPD)を実装してユーザーのアクセスを制限することができます。アイデンティティ伝播(17.1.1項を参照)にプロキシ認証またはアプリケーション・ユーザー管理が使用されている場合、SOAPリクエストは、各SOAPリクエストのWSSセクションでの指定どおりに、現行ユーザーに対するVPDポリシーのコンテキスト内で実行されます。

アイデンティティ伝播に単一アプリケーション・ユーザーが使用されている場合、SOAPリクエストは、汎用の単一ユーザーに対するコンテキスト内で実行され、すべてのSOAPリクエストはデータベースに対して基本的に匿名になります。(OC4JではSOAPメッセージのWSSセクションに含まれるユーザー名によって引き続きユーザーが認識されるため、監査用に構成することはできますが、データベースではユーザー名は認識されません。)

17.2.2 Workspace Manager

次の例のように<SdoRequest>要素に作業領域IDを指定することにより、任意のSOAPリクエストを作業領域のコンテキスト内で実行できます。

<mdsys:SdoRequest xmlns:mdsys="http://www.oracle.com/2006/mdsys"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<mdsys:SdoRequestHeader workspace_id="OlsWorkspace"/>
<mdsys:SdoRequestBody>
<XLS …>
</XLS>
</mdsys:SdoRequestBody>
</mdsys:SdoRequest>

wsclient.jarデモ・ファイル(10.4項を参照)内のsrc/oracle/spatial/ws/svrproxy/の下にあるoracle.spatial.ws.svrproxy.TestYPWithWorkspace.javaも参照してください。

17.3 Webサービスのセキュリティの構成

.earファイルをデプロイした後は、これを構成する必要があります。一般的な構成には次のファイルが含まれています。ただし、WSConfig.xmlファイルのWFS固有の部分など、サービス固有の設定は含まれません。

- data-sources.xml: Catalog、OpenLS、WFSなどの各サービスのデータベース接続が含まれます。次に例を示します。

<?xml version = '1.0' encoding = 'windows-1252'?>
. . .
<native-data-source
name="jdev-connection-NdmProxyConnection"
jndi-name="jdbc/NdmProxyConnectionCoreDS"
url="jdbc:oracle:thin:@server.com:port:sid"
user="usr"
password="password"
data-source-class="oracle.jdbc.pool.OracleDataSource"/>
. . .
</data-sources>

- WSConfig.xml: WFS固有のパラメータの他に、名前、実装およびユーザー管理の各ハンドラ定義が含まれます。次に例を示します。

<Handlers>
<OpenLS>
<JavaClass>oracle.spatial.ws.openls.OpenLsHandler</JavaClass>
<Anonymous_xml_user>SpatialWsXmlUser</Anonymous_xml_user>
<Proxy_management>
<Proxy_authentication/>
</Proxy_management>
</OpenLS>
. . .
<Network>
<JavaClass>oracle.spatial.network.xml.NetworkWSHandler</JavaClass>
<Proxy_management>
<Fixed_app_user/>
</Proxy_management>
</Network>
. . .
</Handlers>

data-sources.xmlファイルには、WFSなどの各サービス・ハンドラのデータベース接続が含まれます。次の3つの例は、ユーザー・アイデンティティ伝播の方法(17.1.1項を参照)に基づいています。

- プロキシ認証: 指定された接続ではプロキシ・ユーザーが参照されます(プロキシ・ユーザーは実際のSOAPユーザーとは異なります)。

- アプリケーション・ユーザー管理: 指定された接続では、システム・コンテキストが設定されたユーザーとして接続されているプロキシ・ユーザーが参照されます。

- 単一アプリケーション・ユーザー: 指定された接続では最終ユーザー(APP_USER)が参照されます。代理ユーザーの使用、システム・コンテキストの変更、異なるユーザーとしての再接続は行われません。

WSConfig.xmlファイルには、ハンドラの宣言部が含まれます。

- <JavaClass>: 最初のパラメータです。サービス・ハンドラの実装を指定します。このJavaクラスによってインタフェースoracle.spatial.ws.SpatialWSHandlerが実装されます。この実装クラスは、server.xmlファイルに指定された共有ライブラリ内でOC4Jに対して使用できます。次に例を示します。

<shared-library name="sdows" version="1.0">
<code-source path="*"/>
<import-shared-library name="oracle.xml"/>
<import-shared-library name="oracle.jdbc"/>
</shared-library>
. . .
</application-server>

管理者は、その共有ライブラリに対してSpatialWSの.earファイルへのアクセス権限を付与する必要があります。これは、次の例のようにapplication.xmlでグローバルに行うことができます。

<imported-shared-libraries>
. . .
<import-shared-library name="sdows"/>
</imported-shared-libraries>
</orion-application>

- <Anonymous_xml_user>: 2つ目のパラメータです。SOAPインタフェースとは反対に、データベースに単純な非SOAP XMLインタフェースを介したユーザーの接続IDを指定します。(詳細は、17.4.2項を参照。)

- <Proxy_management>: 3つ目のパラメータです。ユーザーIDをデータベースに伝播する方法を指定します。指定可能な値は<Proxy_authentication>、<Application_user_management>および<Fixed_app_user>です。ほとんどの場合<Proxy_authentication>を選択します。

また、.earファイルをデプロイおよび構成する場合は、『Oracle Containers for J2EE構成および管理ガイド』に記載されているJ2EEアプリケーション(EAR)のデプロイに関する記述に含まれるセキュリティに関連する情報と、OC4JのセキュアなWebサイトの構成に関する情報を必ず確認してください。

17.3.1 Spatialのサービス・ハンドラの追加

SpatialのWebサービスにはCSW、OpenLSおよびWFSのサポートがデフォルトで含まれています。ただし、必要な各ハンドラのインタフェースを実装およびデプロイすることにより、追加のサービス・ハンドラのサポートを追加することができます。

サービス・ハンドラのサポートを含めるには、インタフェースoracle.spatial.ws.SpatialWSHandlerを実装し、このインタフェースを.jarファイルにデプロイします。実装には、現行のリクエストがこのサービスを示しているかどうかを判断する次のファンクションが含まれます。

public boolean canHandle(Element request)

インタフェースをデプロイするには、次の操作を実行します。(手順は任意の順番で実行できます。)

1. OC4Jから.jarファイルにアクセスできるようにします。アクセスできるようにするには、管理者は新しい共有ライブラリを作成するか(server.xmlおよびapplication.xmlの更新方法は17.3項を参照)、または既存の共有ライブラリsdowsに.jarファイルを追加(短時間でできる方法)します。

2. WSConfig.xmlファイル内の<Handlers>要素でサービスを宣言します。このとき、実装クラス名も指定します。(OpenLSおよびネットワークでのハンドラの例は、17.3項を参照。)

3. data-sources.xmlファイル内の<native-data-source>要素でデータソースを宣言します。このとき、接続JNDI名も指定します。(jdbc/NdmProxyConnectionCoreDSの例は、17.3項を参照。)実装には、接続JNDI名を特定する次のファンクションが含まれます。

public String getConnectionJndiName()

この名前は、data-sources.xmlファイルで指定したJNDI名と一致する必要があります。

17.4 SpatialのWebサービス用のインタフェース

空間Webサービスには異なるインタフェースを介してアクセスできます。インタフェースにはそれぞれセキュリティ上の影響があります。すべてのサービスで、単純なXML (非SOAP)インタフェースと同様にSOAP/WSSインタフェースを使用できます。OpenLSの場合は、OpenLS実装自体がPL/SQLで記述されるため、PL/SQLインタフェースもあります。

17.4.1 SOAP/WSSインタフェース

SpatialのWebサービスへのアクセスでは、ほとんどの場合にSOAP/WSSインタフェースを選択することをお薦めします。このインタフェースは、WSSのエンドツーエンドのセキュリティを提供しており、他のWebサービスと統合できます。ただし、単純なXMLインタフェースも代替手段として使用できます(17.4.2項を参照)。

SOAP/WSSインタフェースのデフォルトURLの書式は、次のとおりです。

http://hostname:port/SpatialWS-SpatialWS-context-root/SpatialWSSoapHttpPort

17.4.2 XML(非SOAP)インタフェース

SpatialのWebサービスに、単純な非SOAP XMLインタフェースを使用することが適している場合があります。具体的に、このXMLインタフェースには次の利点があります。

- 既存のソフトウェアとの統合が容易です。たとえば、JMeter接続はSOAPよりもXMLサーブレットに対して容易に作成できます(特にWSSを使用している場合)。

- オーバーヘッドが少ないため、高いパフォーマンスが提供されます。SOAPの場合、WSSによる解析のオーバーヘッドと暗号化および署名のオーバーヘッドが追加されます。(ただし、SSL経由でXMLサービスにアクセスする場合はオーバーヘッドが減少します。)

非SOAP XMLインタフェースのデフォルトURLの書式は、次のとおりです。

http://hostname:port/SpatialWS-SpatialWS-context-root/SpatialWSXmlServlet

このXMLインタフェースは、ユーザーIDまたは認証を要求しないように設定されます。したがって、XMLリクエストの場合、SpatialWSサービスは、すべてのXMLユーザーに共通の汎用IDに基づいてデータベースに接続します。このIDはWSConfig.xmlファイルに<Anonymous_xml_user>として定義されています。

この方法は、WSConfig.xmlファイルで<fixed_app_user>オプションを使用する場合と同様、データベースが関係するかぎり、ユーザーはOC4Jによって匿名の状態で保持されます。つまり、OC4Jでは監査またはJAASベースの認可制約が引き続き実行できますが、データベース側でのユーザーの認可および監査は制限されます。ただし、非SOAP XMLインタフェースの場合、ユーザーはOC4Jに対しても匿名です。

17.4.3 PL/SQLインタフェース(OpenLSのみ)

OpenLSには、SOAPインタフェースおよび非SOAP XMLインタフェースの他に、PL/SQLインタフェースがあります。SQLを介して接続し、PL/SQL APIを直接使用する場合は、セキュリティに関する考慮事項が、SOAPおよび非SOAP XML APIに適用される場合と次のように異なります。

- ユーザーとデータベース間で接続が直接行われるため、プロキシ認証およびアプリケーション・ユーザー管理は不要です。

- OC4Jが関係しないため、OC4Jの認証、認可およびキャッシュは不要です。

17.4.4 インタフェース別のセキュリティ・レベル

PL/SQLインタフェースでは、環境が異なる場合でも、SOAPインタフェースと同じレベルのセキュリティが提供されます。ただし、非SOAP XMLインタフェースでは低いレベルの(安全性が低い)セキュリティが提供されます。これは、データベースに対してユーザーが匿名のまま(汎用APP_USER以外)保持されることが主な理由です。非SOAP XMLインタフェースでは、SSL、ユーザー認証およびユーザー認可を併用できるため、データベースへのアイデンティティ伝播が可能です。ただし、この方法は、単純なXMLインタフェース・オプションの選択という既知のメリットを上回る可能性があります。

非SOAP XMLインタフェースが不要なために使用不能にする場合は、次の書式のURLでサーブレットを非アクティブ化することができます。

http://hostname:port/SpatialWS-SpatialWS-context-root/SpatialWSXmlServlet

第III部

リファレンス情報

このマニュアルは、次のように構成されています。

- 第I部では、Oracle Spatialの概念および使用方法について説明します。

- 第II部では、Oracle SpatialのWebサービスの概念および使用方法について説明します。

- 第III部では、Oracle Spatialの演算子、ファンクションおよびプロシージャに関するリファレンス情報について説明します。

- 第IV部では、補足情報(付録および用語集)を示します。

第III部に含まれる章は、次のとおりです。

- 第18章「空間データを索引付けするためのSQL文」

- 第19章「空間演算子」

- 第20章「空間集計ファンクション」

- 第21章「SDO_CSパッケージ(座標系変換)」

- 第22章「SDO_CSW_PROCESSパッケージ(CSWの処理)」

- 第23章「SDO_GCDRパッケージ(ジオコーディング)」

- 第24章「SDO_GEOMパッケージ(ジオメトリ)」

- 第25章「SDO_LRSパッケージ(線形参照システム)」

- 第26章「SDO_MIGRATEパッケージ(アップグレード)」

- 第27章「SDO_OLSパッケージ(OpenLS)」

- 第28章「SDO_PC_PKGパッケージ(点群)」

- 第29章「SDO_SAMパッケージ(空間分析およびマイニング)」

- 第30章「SDO_TIN_PKGパッケージ(TIN)」

- 第31章「SDO_TUNEパッケージ(チューニング)」

- 第32章「SDO_UTILパッケージ(ユーティリティ)」

- 第33章「SDO_WFS_LOCKパッケージ(WFS)」

- 第34章「SDO_WFS_PROCESSパッケージ(WFSの処理)」

リファレンスの章に示す例を理解するには、第2章「空間データ型およびメタデータ」(特に2.2項「SDO_GEOMETRYオブジェクト型」)に示す概念およびデータ型の情報を理解しておく必要があります。

18 空間データを索引付けするためのSQL文

この章では、空間オブジェクト・データ型を使用して動作する場合に使用されるSQL文について説明します。表18-1に文を示します。

表18-1 空間索引付けに使用する文

文

説明

ALTER INDEX

空間索引固有のパラメータを変更します。

ALTER INDEX REBUILD

空間索引、またはパーティション索引の指定されたパーティションを再作成します。

ALTER INDEX RENAME TO

空間索引または空間索引のパーティションの名前を変更します。

CREATE INDEX

SDO_GEOMETRY型の列に空間索引を作成します。

DROP INDEX

空間索引を削除します。

この章では、空間索引にこれらのSQL文を使用する方法を説明します。文の完全なリファレンス情報については、『Oracle Database SQL言語リファレンス』を参照してください。

この章の項「キーワードおよびパラメータ」では、特定のキーワード・グループの先頭を太字のイタリック体で示し、その後にそのグループ固有のキーワードを列挙します。たとえば、INDEX_PARAMS は、索引に関するキーワード・グループの先頭です。

ALTER INDEX

説明

空間索引固有のパラメータを変更します。

構文

ALTER INDEX [schema.]index PARAMETERS ('index_params [physical_storage_params]' )

[{ NOPARALLEL | PARALLEL [ integer ] }] ;

キーワードおよびパラメータ

値

説明

INDEX_PARAMS

空間索引の特徴を変更します。

sdo_indx_dims

索引付けする次元数を指定します。たとえば、値に2を指定すると、最初の2次元にのみ索引付けします。実際の次元数以下の値を指定する必要があります。3次元ジオメトリに関連する使用方法の詳細は、1.11項を参照してください。データ型はNUMBERです。デフォルトは2です。

sdo_rtr_pctfree

索引の作成時は空にしておく、各索引ツリー・ノードのスロットの最小割合を指定します。空のスロットは、後で表に新しいデータを挿入したときにデータが書き込まれます。値は0から50の範囲です。デフォルト値はほとんどのアプリケーションに最適ですが、0はジオメトリ列が更新されない場合に使用してください。データ型はNUMBERです。デフォルトは10です。

PHYSICAL_STORAGE_PARAMS

空間索引のデータ表の変更で使用される記憶域パラメータを指定します。空間索引データ表は、指定された形式を使用した標準のOracle表です。CREATE TABLE文のSTORAGE句内で使用可能なすべての物理記憶域パラメータがサポートされているわけではありません。サポートされているサブセットのリストを次に示します。

tablespace

索引データ表が作成される表領域を指定します。このパラメータは、CREATE TABLE文のSTORAGE句内のTABLESPACEと同じです。

initial

このパラメータは、CREATE TABLE文のSTORAGE句内のINITIALと同じです。

next

このパラメータは、CREATE TABLE文のSTORAGE句内のNEXTと同じです。

minextents

このパラメータは、CREATE TABLE文のSTORAGE句内のMINEXTENTSと同じです。

maxextents

このパラメータは、CREATE TABLE文のSTORAGE句内のMAXEXTENTSと同じです。

pctincrease

このパラメータは、CREATE TABLE文のSTORAGE句内のPCTINCREASEと同じです。

{ NOPARALLEL | PARALLEL [ integer ] }

索引を使用する後続の問合せおよびDML操作にシリアル(NOPARALLEL)実行を使用するかパラレル(PARALLEL)実行を使用するかを制御します。パラレル実行の場合、並列度を示す整数値を指定できます。PARALLELキーワードの使用に適用されるガイドラインおよび制限事項については、CREATE INDEX文の「使用上の注意」を参照してください。デフォルトはNOPARALLELです。(整数値を指定せずにPARALLELを指定した場合、Oracle Databaseによって最適な並列度が計算されます。)

前提条件

- 索引タイプおよび索引の実装タイプに対する実行権限が必要です。

- 変更する空間索引が処理中ではないことが必要です。

使用上の注意

この文を使用して、既存の索引のパラメータを変更します。

使用可能なパラメータについては、CREATE INDEX文の「使用上の注意」を参照してください。

例

次の例では、BGIという名前の空間索引のパーティションIP2の表領域を変更します。

ALTER INDEX bgi MODIFY PARTITION ip2
PARAMETERS ('tablespace=TBS_3');

関連項目

- ALTER INDEX REBUILD

- ALTER INDEX RENAME TO

- CREATE INDEX

- 『Oracle Database SQL言語リファレンス』のALTER TABLE(パーティションをメンテナンスするための句)

ALTER INDEX REBUILD

構文

ALTER INDEX [schema.]index REBUILD

[PARAMETERS ('rebuild_params [physical_storage_params]' ) ]

[{ NOPARALLEL | PARALLEL [ integer ] }] ;

または

ALTER INDEX [schema.]index REBUILD ONLINE

[PARAMETERS ('rebuild_params [physical_storage_params]' ) ]

[{ NOPARALLEL | PARALLEL [ integer ] }] ;

または

ALTER INDEX [schema.]index REBUILD PARTITION partition

[PARAMETERS ('rebuild_params [physical_storage_params]' ) ];

説明

空間索引、またはパーティション索引の指定されたパーティションを再作成します。

キーワードおよびパラメータ

値

説明

REBUILD_PARAMS

空間索引の再作成に使用する索引パラメータを、コマンド文字列で指定します。

index_status=cleanup

オンラインの再作成操作(ALTER INDEX REBUILD ONLINE)では、以前のバージョンの索引に関連する表に対して削除操作を実行します。

layer_gtype

すべてのジオメトリが指定されたジオメトリ・タイプであることを確認します。この値は、2.2.1項に掲載した表2-1の「ジオメトリ・タイプ」列の値である必要があります(ただし、UNKNOWN_GEOMETRYを除く)。また、POINTを指定すると、点データの処理を最適化できます。データ型はVARCHAR2です。

sdo_dml_batch_size

コミット操作の後、更新のバッチごとに処理する索引更新の数を指定します。デフォルト値は1000です。たとえば、空間表に3500行を挿入し、その後コミット操作を実行すると、空間索引表に対する更新は、4つのバッチの挿入操作(1000、1000、1000および500)で実行されます。詳細は、CREATE INDEX文の「使用上の注意」を参照してください。データ型はNUMBERです。デフォルトは1000です。

sdo_indx_dims

索引付けする次元数を指定します。たとえば、値に2を指定すると、最初の2次元にのみ索引付けします。実際の次元数以下の値を指定する必要があります。3次元ジオメトリに関連する使用方法の詳細は、1.11項を参照してください。データ型はNUMBERです。デフォルトは2です。

sdo_rtr_pctfree

索引の作成時は空にしておく、各索引ツリー・ノードのスロットの最小割合を指定します。空のスロットは、後で表に新しいデータを挿入したときにデータが書き込まれます。値は0から50の範囲です。データ型はNUMBERです。デフォルトは10です。

PHYSICAL_STORAGE_PARAMS

空間索引のデータ表の再作成で使用される記憶域パラメータを指定します。空間索引データ表は、指定された形式を使用した標準のOracle表です。CREATE TABLE文のSTORAGE句内で使用可能なすべての物理記憶域パラメータがサポートされているわけではありません。サポートされているサブセットのリストを次に示します。

tablespace

索引データ表が作成される表領域を指定します。このパラメータは、CREATE TABLE文のSTORAGE句内のTABLESPACEと同じです。

initial

このパラメータは、CREATE TABLE文のSTORAGE句内のINITIALと同じです。

next

このパラメータは、CREATE TABLE文のSTORAGE句内のNEXTと同じです。

minextents

このパラメータは、CREATE TABLE文のSTORAGE句内のMINEXTENTSと同じです。

maxextents

このパラメータは、CREATE TABLE文のSTORAGE句内のMAXEXTENTSと同じです。

pctincrease

このパラメータは、CREATE TABLE文のSTORAGE句内のPCTINCREASEと同じです。

{ NOPARALLEL | PARALLEL [ integer ] }

索引の再作成および索引を使用する後続の問合せおよびDML操作にシリアル(NOPARALLEL)実行を使用するかパラレル(PARALLEL)実行を使用するかを制御します。パラレル実行の場合、並列度を示す整数値を指定できます。PARALLELキーワードの使用に適用されるガイドラインおよび制限事項については、CREATE INDEX文の「使用上の注意」を参照してください。デフォルトはNOPARALLELです。(整数値を指定せずにPARALLELを指定した場合、Oracle Databaseによって最適な並列度が計算されます。)

前提条件

- 索引タイプおよび索引の実装タイプに対する実行権限が必要です。

- 変更する空間索引が処理中ではないことが必要です。

使用上の注意

ALTER INDEX REBUILD 'rebuild_params'文は、指定されたパラメータを使用して、索引を再作成します。空間索引の作成とは、基になる表で空間索引付けされる列にある各行に対して索引データを作成し、その索引データを指定された形式で表に挿入することです。基になる表にあるすべての行は、索引データの挿入がコミットされる前に処理されます。これには、適切なロールバック・セグメント領域が必要です。

ONLINEキーワードは、索引をブロックせずに索引を再作成します。つまり、空間索引の再作成中、問合せはそれを使用することが可能です。ただし、再作成操作の間に発行されたすべての問合せが完了したら、SQL文を次の形式で入力し、古い索引情報(MDRT表内)を削除する必要があります。

ALTER INDEX [schema.]index REBUILD ONLINE PARAMETERS ('index_status=cleanup');

ONLINEキーワードの使用には次の制限事項が適用されます。

- 索引が再作成されている間、許可される操作は問合せのみです。索引の再作成中は、索引に影響を与える、挿入、更新および削除の操作はブロックされます。また、索引に影響を与える、挿入、更新または削除の操作を実行している間は、オンラインの再作成がブロックされます。

- 'sdo_non_leaf_tbl=TRUE'パラメータを使用して索引が作成されている場合、再作成操作にONLINEキーワードは使用できません。

- パーティション空間索引にONLINEキーワードは使用できません。

ALTER INDEX REBUILD文では、以前に指定した索引作成パラメータを使用できません。再作成する索引に対して、すべてのパラメータを指定する必要があります。

layer_gtypeキーワードを使用してレイヤー内のデータを1つのジオメトリ・タイプに制限する方法の詳細は、5.1.1項を参照してください。

パーティション化された空間索引の場合、再作成される各パーティションに対して個別のALTER INDEX REBUILD文を使用する必要があります。

ローカル・パーティション空間索引を使用する場合は、5.1.3.1項の手順に従います。

使用可能なパラメータおよびPARALLELキーワードの使用方法については、CREATE INDEX文の「使用上の注意」を参照してください。

例

次の例では、OLDINDEXを再作成し、索引データ表が作成される表領域を指定します。

ALTER INDEX oldindex REBUILD PARAMETERS('tablespace=TBS_3');

関連項目

- CREATE INDEX

- DROP INDEX

- 『Oracle Database SQL言語リファレンス』のALTER TABLEおよびALTER INDEX(パーティションをメンテナンスするための句)

ALTER INDEX RENAME TO

構文

ALTER INDEX [schema.]index RENAME TO <new_index_name>;

ALTER INDEX [schema.]index PARTITION partition RENAME TO <new_partition_name>;

説明

空間索引または空間索引のパーティションの名前を変更します。

キーワードおよびパラメータ

値

説明

new_index_name

索引の新しい名前を指定します。

new_partition_name

パーティションの新しい名前を指定します。

前提条件

- 索引タイプおよび索引の実装タイプに対する実行権限が必要です。

- 変更する空間索引が処理中ではないことが必要です。

使用上の注意

なし。

例

次の例では、OLDINDEXの名前をNEWINDEXに変更します。

ALTER INDEX oldindex RENAME TO newindex;

関連項目

- CREATE INDEX

- DROP INDEX

CREATE INDEX

構文

CREATE INDEX [schema.]index ON [schema.]table (column)

INDEXTYPE IS MDSYS.SPATIAL_INDEX

[PARAMETERS ('index_params [physical_storage_params]' )]

[{ NOPARALLEL | PARALLEL [ integer ] }] ;

説明

SDO_GEOMETRY型の列に空間索引を作成します。

キーワードおよびパラメータ

値

説明

INDEX_PARAMS

空間索引の特徴を指定します。

layer_gtype

すべてのジオメトリが指定されたジオメトリ・タイプであることを確認します。この値は、2.2.1項に掲載した表2-1の「ジオメトリ・タイプ」列の値である必要があります(ただし、UNKNOWN_GEOMETRYを除く)。また、POINTを指定すると、点データの処理を最適化できます。データ型はVARCHAR2です。

sdo_dml_batch_size

コミット操作の後、更新のバッチごとに処理する索引更新の数を指定します。デフォルト値は1000です。たとえば、空間表に3500行を挿入し、その後コミット操作を実行すると、空間索引表に対する更新は、4つのバッチの挿入操作(1000、1000、1000および500)で実行されます。詳細は、「使用上の注意」を参照してください。データ型はNUMBERです。デフォルトは1000です。

sdo_indx_dims

索引付けする次元数を指定します。たとえば、値に2を指定すると、最初の2次元にのみ索引付けします。実際の次元数以下の値を指定する必要があります。3次元ジオメトリに関連する使用方法の詳細は、1.11項を参照してください。データ型はNUMBERです。デフォルトは2です。

sdo_non_leaf_tbl

'sdo_non_leaf_tbl=TRUE'と指定すると、索引のリーフ・ノードに対する索引表(名前の形式はMDRT_...$)に加えて、非リーフ・ノードに対する個別の索引表(名前の形式はMDNT_...$)が作成されます。'sdo_non_leaf_tbl=FALSE'と指定すると、索引のリーフ・ノードと非リーフ・ノードの両方に対する1つの表(名前の形式はMDRT_...$)が作成されます。詳細は、「使用上の注意」を参照してください。データ型はVARCHAR2です。デフォルトはFALSEです。

sdo_rtr_pctfree

索引の作成時は空にしておく、各索引ツリー・ノードのスロットの最小割合を指定します。空のスロットは、後で表に新しいデータを挿入したときにデータが書き込まれます。値は0から50の範囲です。データ型はNUMBERです。デフォルトは10です。

PHYSICAL_STORAGE_PARAMS

空間索引のデータ表の作成で使用される記憶域パラメータを指定します。空間索引データ表は、指定された形式を使用した標準のOracle表です。CREATE TABLE文のSTORAGE句内で使用可能なすべての物理記憶域パラメータがサポートされているわけではありません。サポートされているサブセットのリストを次に示します。

tablespace

索引データ表が作成される表領域を指定します。このパラメータは、CREATE TABLE文のSTORAGE句内のTABLESPACEと同じです。

initial

このパラメータは、CREATE TABLE文のSTORAGE句内のINITIALと同じです。

next

このパラメータは、CREATE TABLE文のSTORAGE句内のNEXTと同じです。

minextents

このパラメータは、CREATE TABLE文のSTORAGE句内のMINEXTENTSと同じです。

maxextents

このパラメータは、CREATE TABLE文のSTORAGE句内のMAXEXTENTSと同じです。

pctincrease

このパラメータは、CREATE TABLE文のSTORAGE句内のPCTINCREASEと同じです。

work_tablespace

索引の作成に使用する一時表用の表領域を指定します。(空間Rツリー索引の作成にのみ適用されます。他の索引タイプには適用されません。)作業表領域を指定すると、索引表領域内の断片化は減りますが、最終的な索引の2倍のサイズの記憶域が必要になります(ただし、索引が作成された後はその作業表領域を削除または再使用できます)。

{ NOPARALLEL | PARALLEL [ integer ] }

索引の作成および索引を使用する後続の問合せおよびDML操作にシリアル(NOPARALLEL)実行を使用するかパラレル(PARALLEL)実行を使用するかを制御します。パラレル実行の場合、並列度を示す整数値を指定できます。パラレル索引の作成の詳細は、「使用上の注意」を参照してください。デフォルトはNOPARALLELです。(整数値を指定せずにPARALLELを指定した場合、Oracle Databaseによって最適な並列度が計算されます。)

前提条件

- 現行のSQL CREATE INDEXにあらかじめ必要なことはすべて適用しておきます。

- 索引タイプおよび索引の実装タイプに対する実行権限が必要です。

- USER_SDO_GEOM_METADATAビューには、次元および座標境界情報とともに、空間索引付けする表の列に対するエントリが含まれている必要があります。

使用上の注意

空間索引については、1.7項を参照してください。

空間索引を作成する前に、ロールバック・セグメントのサイズおよびSORT_AREA_SIZEパラメータの値が適切であることを確認する必要があります(5.1項を参照)。

線形参照システム(LRS)データにRツリー索引が使用され、LRSデータが4次元(3次元とM次元)を持つ場合、sdo_indx_dimsパラメータを3 (次元数から1を引いた数)に指定して、sdo_indx_dimsのデフォルト値2を上書きする必要があります。デフォルト値では、XおよびY次元のみが索引付けされます。たとえば、次元がX、Y、ZおよびMの場合に、X、YおよびZの各次元を索引付けし、メジャー(M)次元を索引付けしないようにするには、sdo_indx_dims=3を指定します。(メジャー次元を含むLRSデータ・モデルの詳細は、7.2項を参照。)

パーティション表には、パーティション化された空間索引を作成できます。メリットや制限事項など、パーティション化された空間索引の詳細は、5.1.3項を参照してください。

ローカル・パーティション空間索引を使用する場合は、5.1.3.1項の手順に従います。

索引構成表には空間索引を作成できません。

PARALLELキーワードを指定して、索引の作成をパラレル化できます。次に例を示します。

CREATE INDEX cola_spatial_idx ON cola_markets(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX PARALLEL;

PARALLELキーワードの使用の詳細は、『Oracle Database SQL言語リファレンス』のCREATE INDEX文の項に示すparallel_clauseの説明を参照してください。また、次の注意事項は、空間索引の作成または再作成(ALTER INDEX REBUILD文を使用)にPARALLELキーワードを使用する場合に適用されます。

- 索引の作成または再作成のパラレル実行によって得られるパフォーマンス・コストおよびメリットは、システムのリソースおよび負荷によって異なります。現在のCPUまたはディスク・コントローラの負荷が高い場合、PARALLELキーワードを指定することはできません。

- 点データなどの単純なジオメトリを持つ表で索引を作成または再作成するためにPARALLELを指定する場合、通常、複雑なジオメトリを持つ表の場合ほどパフォーマンスは向上しません。

通常の索引で使用可能なその他のオプション(ASC、DESCなど)は空間索引には使用できません。

空間索引の作成とは、基になる表で空間索引付けされる列にある各行に対して索引データを作成し、その索引データを指定された形式で表に挿入することです。基になる表にあるすべての行は、索引データの挿入がコミットされる前に処理されます。これには、適切なロールバック・セグメント領域が必要です。

このパラメータ句で表領域名を指定する場合、ユーザー(基になる表の所有者)には、その表領域に対する適切な権限が必要です。

layer_gtypeキーワードを使用してレイヤー内のデータを1つのジオメトリ・タイプに制限する方法の詳細は、5.1.1項を参照してください。

sdo_dml_batch_sizeパラメータを使用すると、Spatialは、システムのリソースを事前割当てすることにより、単一の索引更新を連続して実行するよりも効率的に複数の索引更新を実行できるため、アプリケーションのパフォーマンスが向上します(ただし、このメリットを活用するためには、各挿入操作の終了ごとに、またはsdo_dml_batch_size値以下の間隔でコミット操作を実行しないようにします)。10000 (1万)を超える値を指定すると、パフォーマンスのわずかな向上よりも、追加メモリーおよびその他の必要なリソースのコストの方が上回ってしまう可能性があるため、そのような値は指定しないことをお薦めします。

'sdo_non_leaf_tbl=TRUE'と指定すると、Rツリー表全体がKEEPバッファ・プールに入らない場合の、大規模データ・セットでの問合せのパフォーマンスが向上します。この場合、(たとえば、ALTER TABLEを使用してSTORAGE (BUFFER_POOL KEEP)を指定することで)OracleでMDNT_...$表をKEEPバッファ・プールにバッファする必要があります。パーティション索引の場合、すべてのパーティションに同じsdo_non_leaf_tbl値を使用する必要があります。tablespace以外のすべての物理記憶域パラメータは、MDRT_...$表にのみ適用されます。MDNT_...$表にはtablespaceパラメータ(指定した場合)のみが使用され、その他のすべての物理記憶域パラメータにはデフォルト値が使用されます。

ファンクション・ベースの空間索引を作成する場合、パラメータ数は32以下である必要があります。ファンクション・ベースの空間索引の使用方法については、9.2項を参照してください。

空間索引でのCREATE INDEX文が失敗したかどうかを判断するには、USER_INDEXESビューのDOMIDX_OPSTATUS列にFAILEDがあるかどうかを確認します。通常の索引で確認する(USER_INDEXESビューのSTATUS列にFAILEDがあるかどうか)場合とは異なります。

無効なジオメトリによって、CREATE INDEX文が正常に実行されなかった場合、その原因を示すエラー・メッセージとともに、無効なジオメトリのROWIDが戻されます。

その他の理由でCREATE INDEX文が正常に実行されなかった場合、不十分な状態で作成された索引と関連するメタデータを、DROP INDEX文を使用して削除する必要があります。DROP INDEXが実行できない場合は、FORCEパラメータを付けて再実行してください。

例

次の例では、COLA_SPATIAL_IDXという名前の空間Rツリー索引を作成します。

CREATE INDEX cola_spatial_idx ON cola_markets(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

関連項目

- ALTER INDEX

- DROP INDEX

DROP INDEX

構文

DROP INDEX [schema.]index [FORCE];

説明

空間索引を削除します。

キーワードおよびパラメータ

値

説明

FORCE

索引が処理中であることが明示されている場合、またはなんらかのエラー条件が発生している場合であっても、システム表から空間索引を削除します。

前提条件

索引タイプおよび索引の実装タイプに対する実行権限が必要です。

使用上の注意

CREATE INDEX文が失敗した後、データを削除するには、DROP INDEX索引名FORCEを使用します。

例

次の例では、索引が処理中またはエラーが発生した場合でも、OLDINDEXという名前の空間索引は強制的に削除されます。

DROP INDEX oldindex FORCE;

関連項目

- CREATE INDEX

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2014, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

19 空間演算子

この章では、空間オブジェクト・データ型で使用できる演算子について説明します。空間プロシージャと空間ファンクションとの違いなど、空間演算子の概要については、1.9項を参照してください。表19-1に、主な演算子を示します。

表19-1 主な空間演算子

演算子

説明

SDO_FILTER

指定されたジオメトリと相互作用するジオメトリを特定します。

SDO_JOIN

位相関係に基づいて空間結合を実行します。

SDO_NN

最も近くにあるジオメトリを特定します。

SDO_NN_DISTANCE

SDO_NN演算子によって戻されたオブジェクトの距離を戻します。

SDO_RELATE

2つのジオメトリが指定された方法で相互作用しているかどうかを判断します。(特定のマスク値操作用の簡易形式の代替演算子については、表19-2を参照してください。)

SDO_WITHIN_DISTANCE

2つのジオメトリ間の距離が、指定された距離内にあるかどうかを判断します。

表19-2に、特定のマスク・タイプのSDO_RELATE操作を実行する簡易形式の演算子を示します。

表19-2 SDO_RELATE操作用の簡易演算子

演算子

説明

SDO_ANYINTERACT

表内のジオメトリに、特定のジオメトリとのANYINTERACT位相関係があるかどうかを確認します。

SDO_CONTAINS

表内のジオメトリに、特定のジオメトリとのCONTAINS位相関係があるかどうかを確認します。

SDO_COVEREDBY

表内のジオメトリに、特定のジオメトリとのCOVEREDBY位相関係があるかどうかを確認します。

SDO_COVERS

表内のジオメトリに、特定のジオメトリとのCOVERS位相関係があるかどうかを確認します。

SDO_EQUAL

表内のジオメトリに、特定のジオメトリとのEQUAL位相関係があるかどうかを確認します。

SDO_INSIDE

表内のジオメトリに、特定のジオメトリとのINSIDE位相関係があるかどうかを確認します。

SDO_ON

表内のジオメトリに、特定のジオメトリとのON位相関係があるかどうかを確認します。

SDO_OVERLAPBDYDISJOINT

表内のジオメトリに、特定のジオメトリとのOVERLAPBDYDISJOINT位相関係があるかどうかを確認します。

SDO_OVERLAPBDYINTERSECT

表内のジオメトリに、特定のジオメトリとのOVERLAPBDYINTERSECT位相関係があるかどうかを確認します。

SDO_OVERLAPS

表内のジオメトリが特定のジオメトリと重なっているかどうか(OVERLAPBDYDISJOINTまたはOVERLAPBDYINTERSECT位相関係があるかどうか)を確認します。

SDO_TOUCH

表内のジオメトリに、特定のジオメトリとのTOUCH位相関係があるかどうかを確認します。

注意:
Spatial and Graphの演算子やサブプログラムに対する文字列(VARCHAR2)パラメータの中に数値がある場合は、ロケールにかかわらず、小数点にはピリオド(.)を使用する必要があります。例: 'distance=3.7'

この章では、これらの演算子のリファレンス情報をアルファベット順に説明します。

トポロジで演算子を使用する方法は、『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照してください。

SDO_ANYINTERACT

構文

SDO_ANYINTERACT(geometry1, geometry2);

説明

表内のジオメトリに、特定のジオメトリとのANYINTERACT位相関係があるかどうかを確認します。SDO_RELATE演算子に'mask=ANYINTERACT'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_ANYINTERACT(geometry1,geometry2) = 'TRUE'は、ANYINTERACT位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatialで使用される9交差モデルについては、1.8項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)とANYINTERACT関係を持つジオメトリを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_ANYINTERACT(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8))
) = 'TRUE';

MKT_ID NAME
---------- --------------------------------
2 cola_b
1 cola_a
4 cola_d

SDO_CONTAINS

構文

SDO_CONTAINS(geometry1, geometry2);

説明

表内のジオメトリに、特定のジオメトリとのCONTAINS位相関係があるかどうかを確認します。SDO_RELATE演算子に'mask=CONTAINS'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_CONTAINS(geometry1,geometry2) = 'TRUE'は、CONTAINS位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatialで使用される9交差モデルについては、1.8項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(2,2)、右上の座標が(4,6)の矩形)とCONTAINS関係を持つジオメトリを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)この例では、cola_aのみが問合せウィンドウ・ジオメトリを含んでいます。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_CONTAINS(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(2,2, 4,6))
) = 'TRUE';

MKT_ID NAME
---------- --------------------------------
1 cola_a

SDO_COVEREDBY

構文

SDO_COVEREDBY(geometry1, geometry2);

説明

表内のジオメトリに、特定のジオメトリとのCOVEREDBY位相関係があるかどうかを確認します。SDO_RELATE演算子に'mask=COVEREDBY'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_COVEREDBY(geometry1,geometry2) = 'TRUE'は、COVEREDBY位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatialで使用される9交差モデルについては、1.8項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(1,1)、右上の座標が(5,8)の矩形)とCOVEREDBY関係を持つジオメトリを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)この例では、cola_aのみが問合せウィンドウ・ジオメトリに覆われています。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_COVEREDBY(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(1,1, 5,8))
) = 'TRUE';

MKT_ID NAME
---------- --------------------------------
1 cola_a

SDO_COVERS

構文

SDO_COVERS(geometry1, geometry2);

説明

表内のジオメトリに、特定のジオメトリとのCOVERS位相関係があるかどうかを確認します。SDO_RELATE演算子に'mask=COVERS'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_COVERS(geometry1,geometry2) = 'TRUE'は、COVERS位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatialで使用される9交差モデルについては、1.8項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(1,1)、右上の座標が(4,6)の矩形)とCOVERS関係を持つジオメトリを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)この例では、cola_aのみが問合せウィンドウ・ジオメトリを覆っています。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_COVERS(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(1,1, 4,6))
) = 'TRUE';

MKT_ID NAME
---------- --------------------------------
1 cola_a

SDO_EQUAL

構文

SDO_EQUAL(geometry1, geometry2);

説明

表内のジオメトリに、特定のジオメトリとのEQUAL位相関係があるかどうかを確認します。SDO_RELATE演算子に'mask=EQUAL'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_EQUAL(geometry1,geometry2) = 'TRUE'は、EQUAL位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatialで使用される9交差モデルについては、1.8項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(1,1)、右上の座標が(5,7)の矩形)とEQUAL関係を持つジオメトリを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)この例では、cola_aのみが問合せウィンドウ・ジオメトリと同じ境界と内部を持っています。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_EQUAL(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(1,1, 5,7))
) = 'TRUE';

MKT_ID NAME
---------- --------------------------------
1 cola_a

SDO_FILTER

構文

SDO_FILTER(geometry1, geometry2, param);

説明

空間索引を使用して、指定されたオブジェクト(対象領域など)と空間的に作用するオブジェクトの集合を識別したり、指定した2つのオブジェクトが相互作用するかどうかを判別します。非接続でないオブジェクトは、空間的に相互作用します。

この演算子は、1次フィルタ処理のみ実行します。SDO_RELATE演算子によって実行される2次フィルタ処理によって、オブジェクトが空間的に相互作用するかどうかを特定できます。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

param

オプションで、min_resolutionキーワードまたはmax_resolutionキーワード(あるいはその両方)を指定します。データ型はVARCHAR2です。
min_resolutionキーワードに含まれるのは、ジオメトリのMBRのうち少なくとも1つの辺が指定値以上のジオメトリのみです。たとえば、min_resolution=10キーワードに含まれるのは、ジオメトリのMBRの幅または高さ(あるいはその両方)が10以上であるジオメトリのみです。(このキーワードは対象として過小なジオメトリを除外するために使用できます。)

max_resolutionキーワードに含まれるのは、ジオメトリのMBRのうち少なくとも1つの辺が指定値以下のジオメトリのみです。たとえば、max_resolution=10キーワードに含まれるのは、ジオメトリのMBRの幅または高さ(あるいはその両方)が10以下であるジオメトリのみです。(このキーワードは対象として過大なジオメトリを除外するために使用できます。)

戻り値

式SDO_FILTER(geometry1,geometry2) = 'TRUE'は、非接続以外のオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

SDO_FILTER演算子は、常にWHERE句で使用される必要があり、この演算子を含む条件式は、SDO_FILTER(arg1, arg2) = 'TRUE'形式である必要があります。

geometry2は表から取り出されるか、または一時的なSDO_GEOMETRYオブジェクト(バインド変数、SDO_GEOMETRYコンストラクタなど)となります。

- geometry2列が空間索引付けされていない場合、演算子は問合せウィンドウをメモリー内で索引付けするため、高いパフォーマンスを実現します。

- geometry2の2つ以上のジオメトリが演算子に渡される場合は、ORDEREDオプティマイザ・ヒントが指定されている必要があり、geometry2にある表をFROM句の最初に指定する必要があります。

geometry1およびgeometry2が異なる座標系に基づいている場合、geometry2は、6.10.1項で説明するとおり、操作を実行するため一時的にgeometry1の座標系に変換されます。

RLSの制限事項:
ファイングレイン・アクセス制御ポリシーの表またはビューへの追加に、DBMS_RLS.ADD_POLICYプロシージャが使用されていて、指定されたポリシー・ファンクションが空間演算子を使用する場合、その演算子はSDO_FILTERである必要があります。このコンテキストでは、他の空間演算子はサポートされていません。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)と相互作用するジオメトリを選択します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_FILTER(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8))
) = 'TRUE';

MKT_ID NAME
---------- --------------------------------
2 cola_b
1 cola_a
4 cola_d

次の例は前述の例と同じですが、ジオメトリのMBRのうち少なくとも1つの辺が4.1以上のジオメトリのみを含む、という点で異なります。この場合、cola_aおよびcola_bのみが戻されます。これは、これらのMBRには4.1以上の長さを持つ辺が少なくとも1つあるためです。円cola_dは、そのMBRの各辺の長さが4の四角形であるため、除外されます。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_FILTER(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8)),
'min_resolution=4.1'
) = 'TRUE';

MKT_ID NAME
---------- --------------------------------
2 cola_b
1 cola_a

次の例では、GEOMETRY列のオブジェクトが、GIDに1の値を持つQUERY_POLYS表のGEOMETRY列オブジェクトと空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。

SELECT A.gid
FROM Polygons A, query_polys B
WHERE B.gid = 1
AND SDO_FILTER(A.Geometry, B.Geometry) = 'TRUE';

次の例では、GEOMETRY列オブジェクトが、aGeom変数に格納されているジオメトリと空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。

Select A.Gid
FROM Polygons A
WHERE SDO_FILTER(A.Geometry, :aGeom) = 'TRUE';

次の例では、GEOMETRY列オブジェクトが、左下の座標に(x1,y1)、右上の座標に(x2, y2)を持つ、指定した矩形と空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。

Select A.Gid
FROM Polygons A
WHERE SDO_FILTER(A.Geometry, sdo_geometry(2003,NULL,NULL,
sdo_elem_info_array(1,1003,3),
sdo_ordinate_array(x1,y1,x2,y2))
) = 'TRUE';

次の例では、GEOMETRY列オブジェクトが、QUERY_POLYS表のGEOMETRY列オブジェクトに格納されているジオメトリと空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。この例では、ORDEREDオプティマイザ・ヒントを使用し、FROM句の最初にQUERY_POLYS(geometry2)表を指定します。これは、geometry2の複数のジオメトリが含まれるためです(「使用上の注意」を参照)。

SELECT /*+ ORDERED */
A.gid
FROM query_polys B, polygons A
WHERE SDO_FILTER(A.Geometry, B.Geometry) = 'TRUE';

関連項目

- SDO_RELATE

SDO_INSIDE

構文

SDO_INSIDE(geometry1, geometry2);

説明

表内のジオメトリに、特定のジオメトリとのINSIDE位相関係があるかどうかを確認します。SDO_RELATE演算子に'mask=INSIDE'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_INSIDE(geometry1,geometry2) = 'TRUE'は、INSIDE位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatialで使用される9交差モデルについては、1.8項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(5,6)、右上の座標が(12,12)の矩形)とINSIDE関係を持つジオメトリを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)この例では、cola_d (円)のみが問合せウィンドウ・ジオメトリの内部にあります。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_INSIDE(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(5,6, 12,12))
) = 'TRUE';

MKT_ID NAME
---------- --------------------------------
4 cola_d

SDO_JOIN

構文

SDO_JOIN(table_name1, column_name1, table_name2, column_name2, params, preserve_join_order, table1_partition, table2_partition) RETURN SDO_ROWIDSET;

説明

位相関係に基づいて空間結合を実行します。

キーワードおよびパラメータ

値

説明

table_name1

空間結合操作で使用される最初の表の名前を指定します。この表には、SDO_GEOMETRY型の列が含まれている必要があります。データ型はVARCHAR2です。

column_name1

table_name1内のSDO_GEOMETRY型の空間列の名前を指定します。空間Rツリー索引は、この列に定義する必要があります。データ型はVARCHAR2です。

table_name2

空間結合操作で使用される2つ目の表の名前を指定します。(table_name1と同じでも異なるものでもかまいません。table_name2がtable_name1と同じ場合は、この項の「自己結合の最適化」を参照してください。)この表には、SDO_GEOMETRY型の列が含まれている必要があります。データ型はVARCHAR2です。

column_name2

table_name2内のSDO_GEOMETRY型の空間列の名前を指定します。空間Rツリー索引は、この列に定義する必要があります。データ型はVARCHAR2です。

params

キーワードおよび値のオプションのパラメータ文字列です。mask=ANYINTERACTの場合にのみ利用できます。演算子の処理を指定します。使用可能なキーワードについては、「使用上の注意」の表19-3を参照してください。データ型はVARCHAR2です。デフォルトはNULLです。

preserve_join_order

演算子の処理中に結合順序が保持されることが保証されている場合に指定するオプションのパラメータです。この値が0 (デフォルト)の場合、表の順序は変更される場合があります。1の場合、表の順序は変更されません。データ型はNUMBERです。デフォルトは0 (ゼロ)です。

table1_partition

table_name1内の表パーティションの名前を指定します。表にパーティション空間索引がある場合は指定する必要があります。表にパーティション空間索引がない場合はNULLである必要があります。(パーティション空間索引の使用方法については、5.1.3項を参照。)データ型はVARCHAR2です。デフォルトはNULLです。

table2_partition

table_name2内の表パーティションの名前を指定します。表にパーティション空間索引がある場合は指定する必要があります。表にパーティション空間索引がない場合はNULLである必要があります。(パーティション空間索引の使用方法については、5.1.3項を参照。)データ型はVARCHAR2です。デフォルトはNULLです。

戻り値

SDO_JOINは、SDO_ROWIDSETのオブジェクトを戻します。このオブジェクトは、SDO_ROWIDPAIRのオブジェクトの表で構成されます。Oracle Spatialは、SDO_ROWIDSET型を次のとおり定義します。

CREATE TYPE sdo_rowidset as TABLE OF sdo_rowidpair;

また、SDO_ROWIDPAIRオブジェクト型を次のとおり定義します。

CREATE TYPE sdo_rowidpair AS OBJECT
(rowid1  VARCHAR2(24),
rowid2  VARCHAR2(24));

SDO_ROWIDPAIRの定義では、rowid1はtable_name1のROWIDを示し、rowid2はtable_name2のROWIDを示します。

使用上の注意

厳密には、SDO_JOINは演算子ではなくテーブル・ファンクションです。(テーブル・ファンクションについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。)ただし、使用方法が演算子に類似し、他のファンクションおよびプロシージャと同じパッケージに同梱されていないため、Spatial演算子の章で説明しています。

このテーブル・ファンクションは、全表結合を実行する必要がある場合に使用することをお薦めします。

column_name1およびcolumn_name2内のジオメトリのSRID(座標系)値および次元数は、すべて同じである必要があります。

パフォーマンスを向上させるには、/*+ ORDERED */オプティマイザ・ヒントを使用し、FROM句の最初にSDO_JOINテーブル・ファンクションを指定します。

表がバージョン対応(Workspace Manager機能を使用)である場合は、Workspace Managerにより作成された<table_name>_LT表を指定する必要があります。たとえば、COLA_MARKETS表がバージョン対応の場合、その表で空間結合の操作を行うには、SDO_JOINテーブル・ファンクションを使用して、COLA_MARKETS_LT(COLA_MARKETSではなく)を指定します。(ただし、その他すべてのSpatialのファンクション、プロシージャおよび演算子には、<table_name>_LT名は使用できません。)

表19-3に、paramsパラメータのキーワードを示します。

表19-3 SDO_JOIN演算子のparamsキーワード

キーワード

説明

mask

空間結合の位相関係を指定します。有効な値は、'mask=<value>'です。<value>は、SDO_RELATE演算子に有効な1つ以上のマスク値(TOUCH、OVERLAPBDYDISJOINT、OVERLAPBDYINTERSECT、EQUAL、INSIDE、COVEREDBY、CONTAINS、COVERS、ANYINTERACT、ON)か、またはMBR (フィルタレベルの近似処理)が交差するかどうかを確認するFILTERです。論理ブール演算子ORを使用して、'mask=inside+touch'のように複数のマスクを組み合せることができますが、FILTERは他のマスクと組み合せることはできません。

このパラメータがNULLであるか、または空の文字列を含む場合、mask=FILTERであるとみなされます。

距離

関係チェックが実行される前に許容差(1.5.5項を参照)に追加される距離値を数値で指定します。たとえば、許容差が10 mのときに'distance=100 unit=meter'を指定した場合、2つのオブジェクトが互いに110m以内にある場合は空間的に相互作用するとみなされます。distanceを指定してunitを指定しない場合、データに関連付けられた測定単位が使用されます。

unit

距離値に関連付ける測定単位を指定します('distance=100 unit=meter'など)。測定単位の指定の詳細は、2.10項を参照してください。unitを指定した場合、distanceも指定する必要があります。データ型はVARCHAR2です。デフォルトは、データに関連付けられた測定単位です。測地データの場合、デフォルトはmです。

SDO_JOINをコールする前に、セッション内で前のすべてのDML文をコミットする必要があります。コミットしない場合、「ORA-13236: R-treeの処理で内部エラーが発生しました: [SDO_Join in active txns not supported]」というエラーが戻されます。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

自己結合の最適化

自己結合(table_name1およびtable_name2が同じ表を指定)を実行する場合、自己結合を最適化することでパフォーマンスを向上できます。

マスク(ANYINTERACTなど)または距離を指定せずにSDO_JOINをコールすると、結合される2つのジオメトリ列の索引構造のみが比較されます。これで、相互に作用するジオメトリのペアを簡単に識別することができます。マスクまたは距離を指定してSDO_JOINをコールすると、相互に作用するジオメトリのペアを識別するために索引が使用された後、ジオメトリのペアが実際に相互作用しているかどうかを確認するためにジオメトリの座標も比較されます。座標の比較は、SDO_JOINの操作で最もコストの高い動作になります。

同じジオメトリ列をそれ自身と比較する自己結合では、各ジオメトリ・ペアが結果セットで2回戻されます。次に例を示します。

- ID値(1,2)を持つジオメトリ・ペアの場合、そのペア(2,1)も戻されます。SDO_JOINでは、同じジオメトリ・ペアの座標が、不要であるにもかかわらず、1回ではなく2回比較されます。

- 同じIDペアが2回戻されます。たとえば、50,000行を持つ表では、IDペア(1,1)が2回、IDペア(2,2)が2回というように戻されます。これも不要な動作です。

自己結合でSDO_JOINをコールする場合、ジオメトリ・ペアの重複する比較や、ペアのID値が同じ座標の比較を行わないことで、このような不要な動作を回避できます。この最適化は、1次フィルタに対してのみSDO_JOINを使用し、SDO_GEOM.RELATEファンクションをコールしてジオメトリ座標を比較します。次の文では、WHERE句の条件としてAND b.rowid < c.rowidを追加することで最適化を行っています。

SQL> set autotrace trace explain
SQL> SELECT /*+ ordered use_nl (a,b) use_nl (a,c) */ b.id, c.id
FROM TABLE(sdo_join('GEOD_STATES','GEOM','GEOD_STATES','GEOM')) a,
GEOD_STATES b,
GEOD_STATES c
WHERE a.rowid1 = b.rowid
AND a.rowid2 = c.rowid
AND b.rowid < c.rowid
AND SDO_GEOM.RELATE (b.geom, 'ANYINTERACT', c.geom, .05) = 'TRUE'

Execution Plan
----------------------------------------------------------
Plan hash value: 1412731386
---------------------------------------------------------------------------------------------------
| Id  | Operation                           | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                    |             |     1 |  1124 | 12787   (1)| 00:02:34 |
|   1 |  NESTED LOOPS                       |             |     1 |  1124 | 12787   (1)| 00:02:34 |
|   2 |   NESTED LOOPS                      |             |  4574 |  2514K|  8206   (1)| 00:01:39 |
|   3 |    COLLECTION ITERATOR PICKLER FETCH| SDO_JOIN    |       |       ||          |
|*  4 |    TABLE ACCESS BY USER ROWID       | GEOD_STATES |     1 |   561 |1   (0)| 00:00:01 |
|*  5 |   TABLE ACCESS BY USER ROWID        | GEOD_STATES |     1 |   561 |1   (0)| 00:00:01 |
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access(CHARTOROWID(VALUE(KOKBF$)))
5 - access(CHARTOROWID(VALUE(KOKBF$)))
filter("B".ROWID<"C".ROWID AND
"SDO_GEOM"."RELATE"("B"."GEOM",'ANYINTERACT',"C"."GEOM",.05)='TRUE')

SQL> set autotrace off

前述の例では、AND b.rowid < c.rowidは、WHERE句内でSDO_GEOM.RELATEのコールの前に記述することが重要です。これにより、SDO_GEOM.RELATEファンクションの起動による不要な動作を省略できます。この例では、ORDEREDおよびUSE_NLヒントを使用していること、および実行計画にTABLE ACCESS FULLまたはHASH JOINが含まれていないことに注意してください。

クロススキーマでのSDO_JOINの使用

空間表とその空間表に作成された空間索引の索引表の両方に対するSELECT権限を付与されている場合は、自分のスキーマにない索引付けされた表でSDO_JOINテーブル・ファンクションを起動できます。空間索引の索引表の名前を検索するには、USER_SDO_INDEX_METADATAビューでSDO_INDEX_TABLE列を問い合せます。たとえば、次の文では、COLA_MARKETS_IDX空間索引の索引表の名前が戻されます。

SELECT sdo_index_table FROM user_sdo_index_metadata
WHERE sdo_index_name = 'COLA_SPATIAL_IDX';

ユーザーAが空間表T1 (および索引表MDRT_F9AA$)を所有し、ユーザーBが空間表T2を所有し、T1とT2両方のジオメトリを結合する必要があるとします。また、両方の表でジオメトリ列の名前がGEOMETRYであるとします。

ユーザーAまたは適切な権限を付与されたユーザーが、ユーザーAとして接続し、次の文を実行する必要があります。

GRANT select on T1 to B;
GRANT select on MDRT_F9AA$ to B;

これで、ユーザーBが接続し、SDO_JOIN問合せを実行できます。次に例を示します。

SELECT COUNT(*) FROM
(SELECT * FROM
TABLE(SDO_JOIN('A.T1', 'GEOMETRY',
'B.T2', 'GEOMETRY',
'mask=anyinteract')) );

例

次の例では、COLA_MARKETS表をその表自体と結合し、各ジオメトリを調べてその表と空間的に相互作用する他のすべてのジオメトリを検索します。(例では、2.1項の定義およびデータを使用しています。)この例では、rowid1およびrowid2は、SDO_ROWIDPAIR型の定義内の属性名に対応しています。出力で、cola_d (図2-1の円)がそれ自体とのみ相互作用し、他のジオメトリとは相互作用していないことに注意してください。

SELECT /*+ ordered */ a.name, b.name
FROM TABLE(SDO_JOIN('COLA_MARKETS', 'SHAPE',
'COLA_MARKETS', 'SHAPE',
'mask=ANYINTERACT')) c,
cola_markets a,
cola_markets b
WHERE c.rowid1 = a.rowid AND c.rowid2 = b.rowid
ORDER BY a.name;

NAME                             NAME
-------------------------------- --------------------------------
cola_a                           cola_c
cola_a                           cola_b
cola_a                           cola_a
cola_b                           cola_c
cola_b                           cola_b
cola_b                           cola_a
cola_c                           cola_c
cola_c                           cola_b
cola_c                           cola_a
cola_d                           cola_d

10 rows selected.

関連項目

- SDO_RELATE

SDO_NN

構文

SDO_NN(geometry1, geometry2, param [, number]);

説明

空間索引で、最も近くにあるジオメトリを識別するために使用します。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。geometry1のジオメトリのうち、geometry2に最も近いジオメトリが戻されます。(geometry2は、バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

param

演算子の処理を指定します。表19-4に、使用可能なキーワードを示します。このパラメータを指定しない場合、演算子によって、すべての行がgeometry2からの距離の昇順で戻されます。データ型はVARCHAR2です。

number

SDO_NNへのコールにSDO_NN_DISTANCE補助演算子が含まれている場合、SDO_NN_DISTANCEへのコールに使用されている数と同じ数を指定します。データ型はNUMBERです。

表19-4に、paramパラメータのキーワードを示します。

表19-4 SDO_NN Paramパラメータのキーワード

キーワード

説明

距離

最も近くにあるものの検索を中止する、距離単位の数を指定します。unitキーワードも指定していない場合、デフォルトはデータに関連付けられた計測単位になります。データ型はNUMBERです。

例: 'distance=10 unit=mile'

sdo_batch_size

WHERE句を満たす結果の数を戻すためにSDO_NN式の評価を2回以上行う必要がある場合、一度に評価される行の数を指定します。Rツリー索引が使用される場合のみ使用可能です。sdo_batch_size=0を指定した場合(またはparamパラメータを完全に省略した場合)、結果セットのサイズに適したバッチ・サイズがSpatialによって計算されます。詳細は、「使用上の注意」および「例」を参照してください。データ型はNUMBERです。

例: 'sdo_batch_size=10'

sdo_num_res

sdo_batch_sizeが指定されていない場合、戻される結果(最も近くにあるもの)の数を指定します。sdo_batch_sizeが指定されている場合、このキーワードは無視され、かわりにROWNUM疑似列を使用して結果の数が制限されます。sdo_batch_sizeもsdo_num_resも指定されていない場合、これはsdo_batch_size=0を指定しているのと同じです。詳細は、「使用上の注意」および「例」を参照してください。データ型はNUMBERです。

例: 'sdo_num_res=5'

unit

SDO_NNへのコールにdistanceキーワードまたはSDO_NN_DISTANCE補助演算子が含まれている場合、測定単位(unit=およびMDSYS.SDO_DIST_UNITSのSDO_UNIT値を引用符で囲んだ文字列)を指定します。測定単位の指定の詳細は、2.10項を参照してください。データ型はVARCHAR2です。デフォルトは、データに関連付けられた測定単位です。測地データの場合、デフォルトはmです。

例: 'unit=KM'

戻り値

この演算子では、問合せでgeometry2の最も近くにある、sdo_num_resに指定した数のオブジェクトをgeometry1から戻します。2つのオブジェクトの近さを判断するには、各オブジェクトの領域上にある2点間の最短距離が使用されます。

使用上の注意

表に空間索引が含まれない場合、または索引の作成時に指定された次元数と問合せウィンドウの次元数が一致しない場合、この演算子は無効になります。

この演算子は、常にWHERE句で使用される必要があり、この演算子を含む条件式は、SDO_NN(arg1, arg2, '<some_parameter>') = 'TRUE'の形式である必要があります。

この演算子は、次の2つの方法で使用できます。

- レイヤーのすべてのジオメトリが候補である場合、sdo_num_resキーワードを使用して、戻されるジオメトリの数を指定します。
sdo_num_resキーワードは、近接性のみを考慮する場合に特に役立ちます(たとえば、銀行名に関係なく、最も近い3つの銀行など)。

- 表のジオメトリが、WHERE句で指定されたジオメトリより近くにある場合、sdo_batch_sizeキーワードを使用し、WHERE句(ROWNUM疑似列を含む)を使用して、戻されるジオメトリの数を制限します。
sdo_batch_sizeキーワードは、同じ表の1つ以上の列を、WHERE句の最も近くにある検索列として考慮する必要がある場合に特に役立ちます(たとえば、名前にMegaBankが含まれる最も近い3つの銀行など)。

sdo_batch_sizeキーワードの例のように、RESTAURANTS表に様々なタイプのレストランが含まれ、ホテルに最も近い2軒のイタリアン・レストラン(ただし、2マイル以内)を検索する必要があると想定します。問合せは次のようになります。

SELECT r.name FROM restaurants r WHERE
SDO_NN(r.geometry, :my_hotel,
'sdo_batch_size=10 distance=2 unit=mile') = 'TRUE'
AND r.cuisine = 'Italian' AND ROWNUM <=2;

この例では、CUISINEがItalianである場合、結果が3つ以上戻されないように制限するには、ROWNUM <=2句を指定する必要があります。ただし、この例でsdo_batch_sizeキーワードが指定されず、またsdo_num_res=2がROWNUM <=2のかわりに指定されている場合、CUISINE値に関係なく、2マイル以内にある最も近い2軒のレストランのみが考慮され、また、考慮される2つの行のCUISINE値がItalianでない場合、この問合せでは行が戻されない可能性があります。

sdo_batch_size値は、最も近くにあるものの問合せのパフォーマンスに影響する可能性があります。一般的なガイドラインとして、WHERE句を満たすと考えられる候補行の数を指定することをお薦めします。イタリアン・レストランに対する問合せの例では、ホテルに近いレストランの約20%がイタリアン・レストランであり、2軒のレストランを検索する場合は、sdo_batch_size値を10に指定すると、最適なパフォーマンスが得られます。一方、ホテルに近いレストランの約5%のみがイタリアン・レストランであり、2軒のレストランを検索する場合は、sdo_batch_size値を40に指定することをお薦めします。

sdo_batch_size=0を指定できます。この場合、結果セットのサイズに適したバッチ・サイズがSpatialによって計算されます。ただし、計算されたバッチ・サイズが最適ではない場合もあり、この計算によって処理オーバーヘッドが発生する場合もあります。問合せに対する適切なsdo_batch_size値を判断できる場合は、sdo_batch_size=0を指定した場合より高いパフォーマンスを得ることができます。

sdo_batch_sizeキーワードが指定されている場合、sdo_num_res値は無視されます。両方のキーワードを指定しないでください。

SDO_NNへのコールでSDO_NN_DISTANCE補助演算子を使用している場合のみ、numberパラメータを指定します。この章に示すSDO_NN_DISTANCE演算子の項を参照してください。

geometry2からの距離が等しい2つ以上のオブジェクトがgeometry1から戻される場合、ファンクションをコールするたびにどのオブジェクトでも戻される可能性があります。たとえば、item_a、item_bおよびitem_cがgeometry2に最も近く、かつ等しい距離にある場合、sdo_num_res=2を指定すると、これら3つのオブジェクトのうちの2つが戻されますが、3つのすべてのオブジェクトが、戻される2つのオブジェクトになる可能性があります。

SDO_NN演算子でパーティション化された空間索引(5.1.3項を参照)が使用される場合、問合せ条件に基づく候補行が含まれるパーティションごとに、要求された数のジオメトリが戻されます。たとえば、ある点に最も近い5軒のレストランを要求し、空間索引が4つのパーティションを持つ場合、この演算子によって最大20(5×4)のジオメトリが戻されます。この場合、ROWNUM疑似列(この場合はWHERE ROWNUM <=5)を使用して、5軒の最も近いレストランを戻す必要があります。

geometry1およびgeometry2が異なる座標系に基づいている場合、geometry2は、6.10.1項で説明するとおり、操作を実行するため一時的にgeometry1の座標系に変換されます。

SDO_NNでは空間結合をサポートしていません。

オプティマイザ・ヒントによって索引を強制的に使用しないかぎり、SDO_NN演算子が空間索引を使用しない場合があります。これは、結合を含む問合せを発行した場合に発生します。また、このような場合に、オプティマイザ・ヒントを使用しないと内部エラーが発生します。このようなエラーを防ぐには、問合せの複雑さに関係なく、常にオプティマイザ・ヒントが、SDO_NN演算子とともに空間索引を使用するように指定する必要があります。次に、COLA_MARKETS表で定義されたCOLA_SPATIAL_IDX索引を使用するように指定する問合せの例を示します。

SELECT /*+ INDEX(c cola_spatial_idx) */
c.mkt_id, c.name, ... FROM cola_markets c, ...;

ただし、WHERE句内の列の条件により、関連付けられた索引を持つgeometry1の表で非空間列が1つでも指定されている場合は、その索引にNO_INDEXヒントを指定して、その索引が使用されないようにする必要があります。たとえば、COLA_NAME_IDXという名前の索引がNAME列に定義されている場合は、次のとおり前述の例にヒントを指定する必要があります。

SELECT /*+ INDEX(c cola_spatial_idx) NO_INDEX(c cola_name_idx) */
c.mkt_id, c.name, ... FROM cola_markets c, ...;

(ただし、2.1項の例にはCOLA_NAME_IDXという名前の索引は含まれていないことに注意してください。)

SDO_NN演算子とsdo_num_resキーワードを使用して2つ以上の表を結合する場合、外部表にはLEADINGヒントを、ネステッド・ループ・ジョインを使用するためにUSE_NLヒントを、内部表(空間索引を持つ表)にはINDEXヒントを指定します。次に例を示します。

SELECT  /*+ LEADING(b) USE_NL(b a) INDEX(a cola_spatial_idx) */ a.gid
FROM cola_qry  b,  cola_markets  a
WHERE SDO_NN(a.shape, b.shape, 'sdo_num_res=1')='TRUE';

ただし、SDO_NN演算子、sdo_batch_sizeキーワードおよびROWNUM句を使用して2つ以上の表を結合する場合、最適なロジックの実装方法は、PL/SQLブロックを使用することになります。次に例を示します。

BEGIN
FOR item IN ( SELECT b.shape FROM cola_qry b)
LOOP
SELECT  /*+ INDEX(a cola_spatial_idx) */ a.gid INTO local_gid
FROM cola_markets  a
WHERE SDO_NN(a.shape, item.shape, 'sdo_batch_size=10')='TRUE'
and a.name like 'cola%' and ROWNUM <2;
END LOOP;
END;

オプティマイザ・ヒントの使用方法については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、COLA_MARKETS表のSHAPE列から、指定した点(10,7)に最も近い2つのオブジェクトを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)

SELECT /*+ INDEX(c cola_spatial_idx) */
c.mkt_id, c.name  FROM cola_markets c  WHERE SDO_NN(c.shape,
sdo_geometry(2001, NULL, sdo_point_type(10,7,NULL), NULL,
NULL),  'sdo_num_res=2') = 'TRUE';

MKT_ID NAME
---------- --------------------------------
2 cola_b
4 cola_d

次の例では、sdo_batch_sizeキーワードを使用して、COLA_MARKETS表のSHAPE列から、指定された点(10,7)に最も近い、NAME値が「cola_d」未満の2つのオブジェクト(ROWNUM <=2)を検索します。sdo_batch_sizeの3という値は、WHERE句の条件を満たすかどうかを判断する前に評価する必要がある、最も近いジオメトリの数の最適な推測値を表します。(例では、2.1項の定義およびデータを使用しています。)

SELECT /*+ INDEX(c cola_spatial_idx) */ c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_NN(c.shape,  sdo_geometry(2001, NULL,
sdo_point_type(10,7,NULL), NULL,  NULL),
'sdo_batch_size=3') = 'TRUE'
AND c.name < 'cola_d' AND ROWNUM <= 2;

MKT_ID NAME
---------- --------------------------------
2 cola_b
3 cola_c

SDO_NNのより複雑な例については、C.3項を参照してください。

関連項目

- SDO_NN_DISTANCE

SDO_NN_DISTANCE

構文

SDO_NN_DISTANCE(number);

説明

SDO_NN演算子によって戻されたオブジェクトの距離を戻します。SDO_NN演算子へのコール内のみで有効です。

キーワードおよびパラメータ

値

説明

number

SDO_NN演算子に渡された最後のパラメータと同じ数を指定します。データ型はNUMBERです。

戻り値

この演算子は、SDO_NN演算子によって戻されたオブジェクトの距離を戻します。2つのオブジェクトの近さを判断するには、各オブジェクトの領域上にある2点間の最短距離が使用されます。

使用上の注意

SDO_NN_DISTANCEは、SDO_NN演算子の補助演算子です。この補助演算子は、指定されたジオメトリと最も近くにあるオブジェクトの間の距離を戻します。この距離は、補助データとしてSDO_NN演算子に渡されます。(演算子での補助データの使用方法については、『Oracle Databaseデータ・カートリッジ開発者ガイド』のドメイン索引の章に示す補助データの項を参照してください。)

numberパラメータには任意の数を選択できます。ただし、SDO_NN演算子へのコールの最後のパラメータと一致させる必要があります。

距離値を格納および操作するには、バインド変数を使用します。

例

次の例では、COLA_MARKETS表のSHAPE列から、指定した点(10,7)に最も近い2つのオブジェクトを検索し、各オブジェクトと点の間の距離を戻します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)

SELECT   /*+ INDEX(c cola_spatial_idx) */
c.mkt_id, c.name, SDO_NN_DISTANCE(1) dist
FROM cola_markets c
WHERE SDO_NN(c.shape,  sdo_geometry(2001, NULL,
sdo_point_type(10,7,NULL), NULL,  NULL),
'sdo_num_res=2', 1) = 'TRUE' ORDER BY dist;

MKT_ID NAME                                   DIST
---------- -------------------------------- ----------
4 cola_d                           .828427125
2 cola_b                           2.23606798

この例では、次のことに注意してください。

- SDO_NN_DISTANCEのnumberパラメータに1が使用されます。また、SDO_NNの最後のパラメータ('sdo_num_res=2'の後)に1が指定されます。

- 列の別名distには、オブジェクトと点の間の距離が含まれます。(測地データの場合、距離の単位はmです。非測地データの場合、距離の単位はデータに関連付けられた単位です。)

次の例では、sdo_batch_sizeキーワードを使用して、様々な業種を含むYELLOW_PAGES表からホテルに最も近い2軒のイタリアン・レストランを選択します。

SELECT * FROM
(SELECT /*+ FIRST_ROWS */ y.name FROM YELLOW_PAGES  y
WHERE SDO_NN(y.geometry, :my_hotel, 'sdo_batch_size=100', 1) = 'TRUE'
AND y.business = 'Italian Restaurant'
ORDER BY SDO_NN_DISTANCE(1))
WHERE ROWNUM <=10;

前述の問合せでは、FIRST_ROWSヒントにより、空間索引にORDER BY操作をプッシュして、オプティマイザのパフォーマンスを向上できます。 :my_hotelは、バインド変数またはリテラル値のいずれかです。

FIRST_ROWSヒントは、ローカル・パーティション空間索引でも使用できます。前述の例では、YELLOW_PAGES表が名前でパーティション化されている場合、問合せは次のように実行されます。

1. パーティションごとに、10行が検出されるまで、空間索引を使用してORDER BY操作が処理されます。

2. すべてのパーティションが完了すると、前述の手順で検出されたすべての行がソートされ、上位10行が戻されます。

関連項目

- SDO_NN

SDO_ON

構文

SDO_ON(geometry1, geometry2);

説明

表内のジオメトリに、特定のジオメトリとのON位相関係があるかどうかを確認します。SDO_RELATE演算子に'mask=ON'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_ON(geometry1,geometry2) = 'TRUE'は、ON位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatialで使用される9交差モデルについては、1.8項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)とON関係を持つジオメトリを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)この例では、SHAPE列に線ストリング・ジオメトリが存在しないため、行が戻されません。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_ON(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8))
) = 'TRUE';

no rows selected

SDO_OVERLAPBDYDISJOINT

構文

SDO_OVERLAPBDYDISJOINT(geometry1, geometry2);

説明

表内のジオメトリに、特定のジオメトリとのOVERLAPBDYDISJOINT位相関係があるかどうかを確認します。SDO_RELATE演算子に'mask=OVERLAPBDYDISJOINT'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_OVERLAPBDYDISJOINT(geometry1,geometry2) = 'TRUE'は、OVERLAPBDYDISJOINT位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatialで使用される9交差モデルについては、1.8項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、線ストリング・ジオメトリ(ここでは、(0,6)から(2,6)の水平な線)とOVERLAPBDYDISJOINT関係があるジオメトリを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)この例では、cola_aのみが線ストリング・ジオメトリとOVERLAPBDYDISJOINT関係を持っています。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_OVERLAPBDYDISJOINT(c.shape,
SDO_GEOMETRY(2002, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(0,6, 2,6))
) = 'TRUE';

MKT_ID NAME
---------- --------------------------------
1 cola_a

SDO_OVERLAPBDYINTERSECT

構文

SDO_OVERLAPBDYINTERSECT(geometry1, geometry2);

説明

表内のジオメトリに、特定のジオメトリとのOVERLAPBDYINTERSECT位相関係があるかどうかを確認します。SDO_RELATE演算子に'mask=OVERLAPBDYINTERSECT'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_OVERLAPBDYINTERSECT(geometry1,geometry2) = 'TRUE'は、OVERLAPBDYINTERSECT位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatialで使用される9交差モデルについては、1.8項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)とOVERLAPBDYINTERSECT関係を持つジオメトリを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)この例では、cola_a、cola_bおよびcola_dが問合せウィンドウ・ジオメトリとOVERLAPBDYINTERSECT関係を持っています。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_OVERLAPBDYINTERSECT(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8))
) = 'TRUE';

MKT_ID NAME
---------- --------------------------------
2 cola_b
1 cola_a
4 cola_d

SDO_OVERLAPS

構文

SDO_OVERLAPS(geometry1, geometry2);

説明

表内のジオメトリが特定のジオメトリと重なっているかどうか(OVERLAPBDYDISJOINTまたはOVERLAPBDYINTERSECT位相関係があるかどうか)を確認します。SDO_RELATE演算子に'mask=OVERLAPBDYDISJOINT+OVERLAPBDYINTERSECT'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_OVERLAPS(geometry1,geometry2) = 'TRUE'は、OVERLAPBDYDISJOINTまたはOVERLAPBDYINTERSECT位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatialで使用される9交差モデルについては、1.8項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)と重なるジオメトリを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)この例では、SHAPE列内の3つのジオメトリが問合せウィンドウ・ジオメトリと重なります。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_OVERLAPS(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8))
) = 'TRUE';

MKT_ID NAME
---------- --------------------------------
2 cola_b
1 cola_a
4 cola_d

SDO_RELATE

構文

SDO_RELATE(geometry1, geometry2, param);

説明

(対象領域のような)指定されたオブジェクトと空間的に相互作用するオブジェクトの集合を識別したり、指定した2つのオブジェクトが相互作用するかどうかを判断します。

この演算子は、1次フィルタおよび2次フィルタ処理を実行します。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

param

maskキーワードを指定します。またオプションで、min_resolutionキーワードまたはmax_resolutionキーワード(あるいはその両方)を指定します。このパラメータのデータ型はVARCHAR2です。
maskキーワードは、位相関係を指定します。これは必須パラメータです。maskキーワードの有効な値は、TOUCH、OVERLAPBDYDISJOINT、OVERLAPBDYINTERSECT、EQUAL、INSIDE、COVEREDBY、CONTAINS、COVERS、ANYINTERACT、ONの9つの交差パターンの1つ以上の組合せです。論理ブール演算子ORを使用して、'mask=inside+touch'のように複数のマスクを組み合せることができますが、UNION ALLを使用する構文の方がパフォーマンスが向上する場合があります(「使用上の注意」を参照)。9つの交差関係パターンについては、1.8項を参照してください。

min_resolutionキーワードに含まれるのは、ジオメトリのMBRのうち少なくとも1つの辺が指定値以上のジオメトリのみです。たとえば、min_resolution=10キーワードに含まれるのは、ジオメトリのMBRの幅または高さ(あるいはその両方)が10以上であるジオメトリのみです。(このキーワードは対象として過小なジオメトリを除外するために使用できます。)

max_resolutionキーワードに含まれるのは、ジオメトリのMBRのうち少なくとも1つの辺が指定値以下のジオメトリのみです。たとえば、max_resolution=10キーワードに含まれるのは、ジオメトリのMBRの幅または高さ(あるいはその両方)が10以下であるジオメトリのみです。(このキーワードは対象として過大なジオメトリを除外するために使用できます。)

下位互換性のために、リリース1(10.1)より前のリリースでサポートされていた、paramパラメータのすべての追加キーワードも動作しますが、これらのキーワードは使用しないことをお薦めします。また、これらのキーワードは、この演算子の新しい使用方法ではサポートされません。

戻り値

式SDO_RELATE(geometry1,geometry2, 'mask = <some_mask_val>') = 'TRUE'は、<some_mask_val>で指定した位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

表に空間索引が含まれない場合、または索引の作成時に指定された次元数と問合せウィンドウの次元数が一致しない場合、この演算子は無効になります。

この演算子は、常にWHERE句で使用される必要があり、この演算子を含む条件式は、SDO_RELATE(arg1, arg2, 'mask = <some_mask_val>') = 'TRUE'の形式である必要があります。

geometry2は表から取り出されるか、または一時的なSDO_GEOMETRYオブジェクト(バインド変数、SDO_GEOMETRYコンストラクタなど)となります。

- geometry2列が空間索引付けされていない場合、演算子は問合せウィンドウをメモリー内で索引付けするため、高いパフォーマンスを実現します。

- geometry2の2つ以上のジオメトリが演算子に渡される場合は、ORDEREDオプティマイザ・ヒントが指定されている必要があり、geometry2にある表をFROM句の最初に指定する必要があります。

geometry1およびgeometry2が異なる座標系に基づいている場合、geometry2は、6.10.1項で説明するとおり、操作を実行するため一時的にgeometry1の座標系に変換されます。

SDO_GEOM.RELATEファンクションとは異なり、DISJOINTおよびDETERMINEマスクは、SDO_RELATE演算子との関係マスクで許可されていません。これは、SDO_RELATEが、相互作用する候補を空間索引を使用して検索するため、DISJOINTまたはDETERMINEを満たす情報が索引に存在しないためです。

論理ブール演算子ORを使用して、'mask=touch+coveredby'のように複数のマスクを組み合せることは可能ですが、空間問合せで各マスクを別々に指定し、UNION ALL構文を使用して結果を組み合せるとパフォーマンスが向上する場合があります。これは、マスクが同じSDO_RELATE演算子コールでグループ化されるのではなく、単一指定されるような場合に、Spatialが適用する内部最適化の結果です。(ただし、2つの例外として、inside+coveredbyおよびcontains+coversでは、UNION ALL構文よりも組合せのパフォーマンスが向上します。)たとえば、論理ブール演算子ORを使用して複数のマスクをグループ化する次の問合せについて考えてみます。

SELECT a.gid
FROM polygons a, query_polys B
WHERE B.gid = 1
AND SDO_RELATE(A.Geometry, B.Geometry,
'mask=touch+coveredby') = 'TRUE';

この問合せについて、次のように、単一マスクが指定されている複数のSDO_RELATE演算子コールの結果を、UNION ALLを使用して組み合せると、パフォーマンスが向上します。

SELECT a.gid
FROM polygons a, query_polys B
WHERE B.gid = 1
AND SDO_RELATE(A.Geometry, B.Geometry,
'mask=touch') = 'TRUE'
UNION ALL
SELECT a.gid
FROM polygons a, query_polys B
WHERE B.gid = 1
AND SDO_RELATE(A.Geometry, B.Geometry,
'mask=coveredby') = 'TRUE';

線と複数点ジオメトリ(点クラスタ内の複数の点)の関係には次のことを考慮してください。単一線と、3つの点で構成される複数点ジオメトリの例(SDO_GTYPE = 2005など)を想定します。

- 線と相互作用する点が1つもない場合、線と点クラスタの関係はDISJOINTです。

- 1つの点が線の内部に位置し、他の2つの点が非接続である場合、線と点クラスタの関係はOVERLAPBDYDISJOINTです。

- 1つの点が線の境界(線の開始点または終了点)に位置し、他の2つの点が非接続である場合、線と点クラスタの関係はTOUCHです。

- 1つの点が線の境界(線の開始点または終了点)に、もう1つの点が線の内部に位置し、残りの1つの点が非接続である場合、線と点クラスタの関係はOVERLAPBDYINTERSECTではなく、OVERLAPBDYDISJOINTです。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例はSDO_FILTER演算子の例に類似しています。ただし、これらの例では、(maskキーワードを使用して)相互作用の特定のタイプを識別し、空間的に相互作用しているかどうかも(概算ではなく)正確に判断します。

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)と相互作用するジオメトリを選択します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_RELATE(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8)),
'mask=anyinteract') = 'TRUE';

MKT_ID NAME
---------- --------------------------------
2 cola_b
1 cola_a
4 cola_d

次の例は前述の例と同じですが、ジオメトリのMBRのうち少なくとも1つの辺が4.1以上のジオメトリのみを含む、という点で異なります。この場合、cola_aおよびcola_bのみが戻されます。これは、これらのMBRには4.1以上の長さを持つ辺が少なくとも1つあるためです。円cola_dは、そのMBRの各辺の長さが4の四角形であるため、除外されます。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_RELATE(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8)),
'mask=anyinteract min_resolution=4.1') = 'TRUE';

MKT_ID NAME
---------- --------------------------------
2 cola_b
1 cola_a

次の例では、GEOMETRY列のオブジェクトが、GIDに1の値を持つQUERY_POLYS表のGEOMETRY列オブジェクトと空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。

SELECT A.gid
FROM Polygons A, query_polys B
WHERE B.gid = 1
AND SDO_RELATE(A.Geometry, B.Geometry,
'mask=ANYINTERACT') = 'TRUE';

次の例では、GEOMETRY列オブジェクトが、aGeom変数に格納されているジオメトリと空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。

SELECT A.Gid
FROM Polygons A
WHERE SDO_RELATE(A.Geometry, :aGeom, 'mask=ANYINTERACT') = 'TRUE';

次の例では、GEOMETRY列オブジェクトが、左下の座標に(x1,y1)、右上の座標に(x2, y2)を持つ指定した矩形と空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。

SELECT A.Gid
FROM Polygons A
WHERE SDO_RELATE(A.Geometry, sdo_geometry(2003,NULL,NULL,
sdo_elem_info_array(1,1003,3),
sdo_ordinate_array(x1,y1,x2,y2)),
'mask=ANYINTERACT') = 'TRUE';

次の例では、GEOMETRY列オブジェクトが、QUERY_POLYS表のGEOMETRY列オブジェクトに格納されているジオメトリと空間的に相互作用する場合に、POLYGONS表からGIDの値を検索します。この例では、ORDEREDオプティマイザ・ヒントを使用し、FROM句の最初にQUERY_POLYS (geometry2)表を指定します。これは、geometry2の複数のジオメトリが含まれるためです(「使用上の注意」を参照)。

SELECT /*+ ORDERED */
A.gid
FROM query_polys B, polygons A
WHERE SDO_RELATE(A.Geometry, B.Geometry, 'mask=ANYINTERACT') = 'TRUE';

関連項目

- SDO_FILTER

- SDO_JOIN

- SDO_WITHIN_DISTANCE

- SDO_GEOM.RELATEファンクション

SDO_TOUCH

構文

SDO_TOUCH(geometry1, geometry2);

説明

表内のジオメトリに、特定のジオメトリとのTOUCH位相関係があるかどうかを確認します。SDO_RELATE演算子に'mask=TOUCH'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_TOUCH(geometry1,geometry2) = 'TRUE'は、TOUCH位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatialで使用される9交差モデルについては、1.8項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(1,1)、右上の座標が(5,7)の矩形)とTOUCH関係を持つジオメトリを検索します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。)この例では、cola_bのみが問合せウィンドウ・ジオメトリとTOUCH関係を持っています。

SELECT c.mkt_id, c.name
FROM cola_markets c
WHERE SDO_TOUCH(c.shape,
SDO_GEOMETRY(2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(1,1, 5,7))
) = 'TRUE';
FROM cola_markets c

MKT_ID NAME
---------- --------------------------------
2 cola_b

SDO_WITHIN_DISTANCE

構文

SDO_WITHIN_DISTANCE(geometry1, aGeom, params);

説明

空間索引を使用して、対象領域または対象となる点など指定されたオブジェクトの、指定された距離内にある空間オブジェクトの集合を識別します。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。この列には、オブジェクト(aGeom)から指定した距離内にあると判断されたジオメトリ・オブジェクトが格納されます。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

aGeom

geometry1にあるジオメトリ・オブジェクトからの距離を調べるオブジェクトを指定します。(バインド変数を使用した)表のジオメトリか、または(SDO_GEOMETRYコンストラクタを使用した)ジオメトリの一時的なインスタンスを指定します。データ型はSDO_GEOMETRYです。

params

1つ以上のキーワード(値を含む)を引用符で囲んで、演算子の動作を判断する文字列を指定します。後続の項目(distance、max_resolution、min_resolution、querytypeおよびunit)は、paramsパラメータに使用可能なキーワードです。データ型はVARCHAR2です。

距離

距離値を指定します。座標系がジオメトリに関連付けられている場合、距離の単位は座標系に関連付けられた単位であると想定されます。これは必須キーワードです。データ型はNUMBERです。

max_resolution

ジオメトリのMBRのうち少なくとも1つの辺が指定値以下のジオメトリのみを含みます。たとえば、max_resolution=10キーワードに含まれるのは、ジオメトリのMBRの幅または高さ(あるいはその両方)が10以下であるジオメトリのみです。(このキーワードは対象として過大なジオメトリを除外するために使用できます。)

min_resolution

ジオメトリのMBRのうち少なくとも1つの辺が指定値以上のジオメトリのみを含みます。たとえば、min_resolution=10キーワードに含まれるのは、ジオメトリのMBRの幅または高さ(あるいはその両方)が10以上であるジオメトリのみです。(このキーワードは対象として過小なジオメトリを除外するために使用できます。)

querytype

'querytype=FILTER'を設定し、1次フィルタ処理のみを実行します。querytypeが指定されていない場合、1次フィルタ処理および2次フィルタ処理の両方が実行されます(デフォルト)。データ型はVARCHAR2です。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、たとえば'unit=KM')を指定します。測定単位の指定の詳細は、2.10項を参照してください。データ型はNUMBERです。デフォルトは、データに関連付けられた測定単位です。測地データの場合、デフォルトはmです。

戻り値

式SDO_WITHIN_DISTANCE(arg1, arg2, arg3) = 'TRUE'は、指定した距離内にあるオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

2つの拡張オブジェクト(たとえば、線やポリゴンなど、点のないオブジェクト)の距離は、それら2つのオブジェクト間の最短距離です。そのため、2つの隣接したポリゴン間の距離は0(ゼロ)です。

表に空間索引が含まれない場合、または索引の作成時に指定された次元数と問合せウィンドウの次元数が一致しない場合、この演算子は無効になります。

この演算子は、常にWHERE句で使用される必要があり、この演算子を含む条件は、次の形式である必要があります。

SDO_WITHIN_DISTANCE(arg1, arg2, 'distance = <some_dist_val>') = 'TRUE'

ジオメトリ列には、空間索引が作成されている必要があります。測地データの場合、空間索引がRツリー索引である必要があります。

SDO_WITHIN_DISTANCEは、空間結合でサポートされていません。SDO_WITHIN_DISTANCE演算子で空間結合を実行する方法については、5.2.1.3項を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、1.11項を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)から10距離以内のジオメトリを選択します。(例では、2.1項および図2-1に示す定義およびデータを使用しています。この場合、図中のすべてのジオメトリが戻されます。)

SELECT c.name FROM cola_markets c WHERE SDO_WITHIN_DISTANCE(c.shape,
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8)),
'distance=10') = 'TRUE';

NAME
--------------------------------
cola_b
cola_a
cola_c
cola_d

次の例は前述の例と同じですが、ジオメトリのMBRのうち少なくとも1つの辺が4.1以上のジオメトリのみを含む、という点で異なります。この場合、cola_aおよびcola_bのみが戻されます。これは、これらのMBRには4.1以上の長さを持つ辺が少なくとも1つあるためです。台形cola_cは、そのMBRの各辺の長さが3と2であるため除外されます。また円cola_dも、そのMBRの各辺の長さが4の四角形であるため除外されます。

SELECT c.name FROM cola_markets c WHERE SDO_WITHIN_DISTANCE(c.shape,
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3),
SDO_ORDINATE_ARRAY(4,6, 8,8)),
'distance=10 min_resolution=4.1') = 'TRUE';

NAME
--------------------------------
cola_b
cola_a

次の例では、GEOMETRY列オブジェクトが、aGeom変数に格納されているジオメトリの10距離単位内にある場合に、POLYGONS表からGIDの値を検索します。

SELECT A.GID    FROM POLYGONS A    WHERE      SDO_WITHIN_DISTANCE(A.Geometry, :aGeom, 'distance = 10') = 'TRUE';

次の例では、GEOMETRY列オブジェクトが、左下の座標に(x1,y1)、右上の座標に(x2, y2)を持つ指定した矩形の10距離単位内にある場合に、POLYGONS表からGIDの値を検索します。

SELECT A.GID    FROM POLYGONS A    WHERE      SDO_WITHIN_DISTANCE(A.Geometry, sdo_geometry(2003,NULL,NULL,                              sdo_elem_info_array(1,1003,3),                              sdo_ordinate_array(x1,y1,x2,y2)),                      'distance = 10') = 'TRUE';

次の例では、QUERY_POINTS表のGIDの値が1で、POLYGONS.GEOMETRYオブジェクトがQUERY_POINTS.GEOMETRYオブジェクトの10距離単位内にある場合に、POLYGONS表からGIDの値を検索します。

SELECT A.GID    FROM POLYGONS A, Query_Points B    WHERE B.GID = 1 AND      SDO_WITHIN_DISTANCE(A.Geometry, B.Geometry, 'distance = 10') = 'TRUE';

SDO_WITHIN_DISTANCEのより複雑な例については、C.2項を参照してください。

関連項目

- SDO_FILTER

- SDO_RELATE

20 空間集計ファンクション

この章では、表20-1に示す空間集計ファンクションのリファレンス情報および使用方法について説明します。

表20-1 空間集計ファンクション

メソッド

説明

SDO_AGGR_CENTROID

指定されたジオメトリ・オブジェクトの中心(重心)にあるジオメトリ・オブジェクトを戻します。

SDO_AGGR_CONCAT_LINES

指定された単一線または複数線のジオメトリを連結するジオメトリを戻します。

SDO_AGGR_CONVEXHULL

指定されたジオメトリ・オブジェクトの凸型部分であるジオメトリ・オブジェクトを戻します。

SDO_AGGR_LRS_CONCAT

指定されたLRSジオメトリ・オブジェクトを連結するLRSジオメトリ・オブジェクトを戻します。

SDO_AGGR_MBR

指定されたジオメトリの最小境界矩形を戻します。

SDO_AGGR_SET_UNION

SDO_GEOMETRYオブジェクトのVARRAYを入力として取り、配列のすべてのジオメトリ・オブジェクトの集計和集合を戻します。

SDO_AGGR_UNION

指定されたジオメトリ・オブジェクトで位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。

空間集計ファンクションの使用方法については、1.10項を参照してください。

これらのほとんどの集計ファンクションには、SDOAGGRTYPE型のパラメータ(1.10.1項を参照)を指定できます。

注意:
2次元と3次元の両方のジオメトリでサポートされているSDO_AGGR_MBR以外の空間集計ファンクションは、2次元ジオメトリでのみサポートされています。

SDO_AGGR_CENTROID

構文

SDO_AGGR_CENTROID(

AggregateGeometry SDOAGGRTYPE

) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリ・オブジェクトの中心(重心)にあるジオメトリ・オブジェクトを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(1.10.1項を参照)を指定します。

使用上の注意

このファンクションの動作は、ジオメトリ・オブジェクトがポリゴンのみで構成されるか、点のみで構成されるか、またはポリゴンと点が混在するかによって異なります。

- ジオメトリ・オブジェクトがポリゴンのみで構成される場合、すべてのオブジェクトの中心が戻されます。

- ジオメトリ・オブジェクトが点のみで構成される場合、すべてのオブジェクトの中心が戻されます。

- ジオメトリ・オブジェクトにポリゴンと点が混在する(1つ以上のポリゴンと1つ以上の点が含まれる)場合、点は無視され、すべてのポリゴンの中心が戻されます。

結果は、ジオメトリ・オブジェクトの各ポリゴンの面積によって重み付けされます。ジオメトリ・オブジェクトにポリゴンおよび点が混在する場合、中心の計算では点が使用されません。ジオメトリ・オブジェクトが点のみで構成される場合、それらの点は均等に重み付けされます。

SDO_GEOM.SDO_CENTROIDファンクションの詳細は、第24章を参照してください。

例

次の例では、COLA_MARKETS表のジオメトリ・オブジェクトの中心を戻します。(例では、2.1項の定義およびデータを使用しています。)

SELECT SDO_AGGR_CENTROID(SDOAGGRTYPE(shape, 0.005))
FROM cola_markets;

SDO_AGGR_CENTROID(SDOAGGRTYPE(SHAPE,0.005))(SDO_GTYPE, SDO_SRID, SDO_POINT
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(5.21295938, 5.00744233, NULL), NULL, NUL
L)

SDO_AGGR_CONCAT_LINES

構文

SDO_AGGR_CONCAT_LINES(

geom SDO_GEOMETRY

) RETURN SDO_GEOMETRY;

説明

指定された単一線または複数線のジオメトリを連結するジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

使用上の注意

各入力ジオメトリは、単一線または複数線の2次元ジオメトリ(SDO_GTYPE値が2002または2006)である必要があります。このファンクションは、LRSジオメトリではサポートされません。LRSジオメトリ・セグメントの集計連結を実行するには、SDO_AGGR_LRS_CONCAT空間集計ファンクションを使用します。

入力ジオメトリは、頂点が直線セグメントに連結している線ストリングである必要があります。円弧および複合線ストリングはサポートされていません。

いずれかの入力ジオメトリが複数線のジオメトリである場合は、ジオメトリの各要素は非接続である必要があります。非接続でない場合、このファンクションは不適切な結果を戻すことがあります。

連結される各ペアのジオメトリ間の位相関係は、DISJOINTまたはTOUCHである必要があります。位相関係がTOUCHの場合、ジオメトリは2つの終了点でのみ交差する必要があります。

SDO_UTIL.CONCAT_LINESファンクション(第32章を参照)を使用すると、2つの単一線または複数線のジオメトリを連結できます。

いずれかの入力ジオメトリが単一線または複数線のジオメトリではない場合、またはすべての入力ジオメトリが同じ座標系に基づいていない場合、例外が発生します。

例

次の例では、2つの線ジオメトリをCOLA_MARKETS表に挿入し、これらのジオメトリの集計連結を戻します。(例では、2.1項の定義およびデータを使用しています。)

-- First, insert two line geometries.
INSERT INTO cola_markets VALUES(1001, 'line_1', SDO_GEOMETRY(2002, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,2,1), SDO_ORDINATE_ARRAY(1,1, 5,1)));
INSERT INTO cola_markets VALUES(1002, 'line_2', SDO_GEOMETRY(2002, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,2,1), SDO_ORDINATE_ARRAY(5,1, 8,1)));
-- Perform aggregate concatenation of all line geometries in layer.
SELECT SDO_AGGR_CONCAT_LINES(c.shape) FROM cola_markets c
WHERE c.mkt_id > 1000;

SDO_AGGR_CONCAT_LINES(C.SHAPE)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
1, 1, 5, 1, 8, 1))

SDO_AGGR_CONVEXHULL

構文

SDO_AGGR_CONVEXHULL(

AggregateGeometry SDOAGGRTYPE

) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリ・オブジェクトの凸型部分であるジオメトリ・オブジェクトを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(1.10.1項を参照)を指定します。

使用上の注意

SDO_GEOM.SDO_CONVEXHULLファンクションの詳細は、第24章を参照してください。

例

次の例では、COLA_MARKETS表のジオメトリ・オブジェクトの凸型部分を戻します。(例では、2.1項の定義およびデータを使用しています。)

SELECT SDO_AGGR_CONVEXHULL(SDOAGGRTYPE(shape, 0.005))
FROM cola_markets;

SDO_AGGR_CONVEXHULL(SDOAGGRTYPE(SHAPE,0.005))(SDO_GTYPE, SDO_SRID, SDO_POI
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(8, 1, 10, 7, 10, 11, 8, 11, 6, 11, 1, 7, 1, 1, 8, 1))

SDO_AGGR_LRS_CONCAT

構文

SDO_AGGR_LRS_CONCAT(

AggregateGeometry SDOAGGRTYPE

) RETURN SDO_GEOMETRY;

説明

指定されたLRSジオメトリを連結するLRSジオメトリを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(1.10.1項を参照)を指定します。

使用上の注意

このファンクションは、任意の数のLRSジオメトリの集計連結を実行します。ジオメトリを連結する順序を制御する必要がある場合、NO_MERGEオプティマイザ・ヒントおよびORDER BY句を指定した副問合せを使用する必要があります。(例を参照。)

結果のセグメントの方向は、連結内の最初のジオメトリの方向と同じになります。

このファンクションは3D形式(SDO_AGGR_LRS_CONCAT_3D)が使用可能です。LRSファンクションの3D形式については、7.4項を参照してください。

Spatialの線形参照システムについては、第7章を参照してください。

例

次の例では、LRS_ROUTES表にLRSジオメトリを追加し、次に、表に含まれるLRSジオメトリを連結する2つの問合せを実行します。最初の問合せでは、連結の順序は制御されません。2番目の問合せで制御されます。2つのセグメントの方向が異なることに注意してください。連結(Route0)の最初のセグメントのメジャー値が降順であるため、2番目の問合せ結果のセグメントのメジャー値は降順です。(例では、7.7項の例の定義を使用しています。)

-- Add a segment with route_id less than 1 (here, zero).
INSERT INTO lrs_routes VALUES(
0,
'Route0',
SDO_GEOMETRY(
3302,  -- Line string; 3 dimensions (X,Y,M); 3rd is measure dimension.
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,2,1), -- One line string, straight segments
SDO_ORDINATE_ARRAY(
5,14,5,   -- Starting point - 5 is measure from start.
10,14,0)  -- Ending point - 0 measure (decreasing measure)
)
);

1 row created.

-- Concatenate all routes (no ordering specified).
SELECT SDO_AGGR_LRS_CONCAT(SDOAGGRTYPE(route_geometry, 0.005))
FROM lrs_routes;

SDO_AGGR_LRS_CONCAT(SDOAGGRTYPE(ROUTE_GEOMETRY,0.005))(SDO_GTYPE, SDO_SRID
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 8, 4, 8, 12, 4, 12, 12, 10, 18, 8, 10, 22, 5, 14, 27, 10, 14,
32))

-- Aggregate concatenation using subquery for ordering.
SELECT
SDO_AGGR_LRS_CONCAT(SDOAGGRTYPE(route_geometry, 0.005))
FROM (
SELECT /*+ NO_MERGE */ route_geometry
FROM lrs_routes
ORDER BY route_id);

SDO_AGGR_LRS_CONCAT(SDOAGGRTYPE(ROUTE_GEOMETRY,0.005))(SDO_GTYPE, SDO_SRID
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 32, 2, 4, 30, 8, 4, 24, 12, 4, 20, 12, 10, 14, 8, 10, 10, 5, 14, 5, 10, 14
, 0))

SDO_AGGR_MBR

構文

SDO_AGGR_MBR(

geom SDO_GEOMETRY

) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリの最小境界矩形(MBR)(ジオメトリを囲む最小の矩形)を戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

使用上の注意

このファンクションは、適切なMBRを作成できない場合はMBRジオメトリを戻しません。具体的には、次のとおりです。

- 入力ジオメトリがすべてNULLである場合、ファンクションはNULLのジオメトリを戻します。

- 入力ジオメトリ内のすべてのデータが1つの点上にある場合、ファンクションは点を戻します。

- 入力ジオメトリ内のすべてのデータが直線上に存在する複数の点である場合、ファンクションは2点線を戻します。

SDO_TUNE.EXTENT_OFファンクション(第31章を参照)も、ジオメトリのMBRを戻します。空間索引がジオメトリ列上に定義されている場合、SDO_TUNE.EXTENT_OFファンクションは、SDO_AGGR_MBRファンクションよりも高いパフォーマンスを示します。ただし、SDO_TUNE.EXTENT_OFは2次元ジオメトリに制限されるのに対し、SDO_AGGR_MBRファンクションにはその制限がありません。また、SDO_TUNE.EXTENT_OFファンクションは表内のすべてのジオメトリに対するエクステントを計算しますが、SDO_AGGR_MBRファンクションは、行のサブセット上での操作が可能です。

例

次の例では、COLA_MARKETS表のジオメトリ・オブジェクトの最小境界矩形を戻します。(例では、2.1項の定義およびデータを使用しています。)

SELECT SDO_AGGR_MBR(shape) FROM cola_markets;

SDO_AGGR_MBR(C.SHAPE)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(1, 1, 10, 11))

SDO_AGGR_SET_UNION

構文

SDO_AGGR_SET_UNION(

geometry SDO_GEOMETRY_ARRAY,

tol NUMBER

) RETURN SDO_GEOMETRY;

説明

SDO_GEOMETRYオブジェクトのVARRAYを入力として取り、配列のすべてのジオメトリ・オブジェクトの集計和集合を戻します。

パラメータ

geometry

SDO_GEOMETRY_ARRAYオブジェクト型のジオメトリ・オブジェクトの配列で、VARRAY OF SDO_GEOMETRYとして定義されます。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

SDO_AGGR_SET_UNIONは、SDO_AGG_UNIONよりパフォーマンスは高速になりますが柔軟性は低下するので、SDO_AGGR_SET_UNIONは、パフォーマンスが特に重要で、必要な機能を満たす場合にのみ使用を考えてください。

SDO_AGGR_UNIONは、SQLの集計ファンクションなので非常に柔軟であり、複雑なSQL GROUP BY句と使用できます。ただし、SDO_AGGR_SET_UNIONはSDO_AGGR_UNIONより格段に高速です。SDO_AGGR_SET_UNIONは、グループ化されるジオメトリがコレクション(SDO_GEOMETRYオブジェクトのVARRAY)に容易に集合できる場合に有効です。

SDO_AGGR_SET_UNION:

- 重なっているポリゴンのセットは集計できません。重なっているポリゴンの場合は、SDO_AGGR_UNIONを使用します。

- 接しているポリゴンも含めて重なっていないポリゴンのセットは効率的に集計できます。

- 重なっている場合でも線と点のセットを集計できます。

例

次の例では、ジオメトリ・セットを作成してSDO_AGGR_SET_UNIONに渡す汎用ルーチンが作成されます。このルーチンは入力として表名、列名および適用する条件(オプション)を受け取り、SDO_AGGR_SET_UNIONで使用可能なSDO_GEOMETRY_ARRAYを戻します。(例では、2.1項の定義およびデータを使用しています。)

CREATE OR REPLACE FUNCTION get_geom_set (table_name  VARCHAR2,
column_name VARCHAR2,
predicate   VARCHAR2 := NULL)
RETURN SDO_GEOMETRY_ARRAY DETERMINISTIC AS

type            cursor_type is REF CURSOR;
query_crs       cursor_type ;
g               SDO_GEOMETRY;
GeometryArr     SDO_GEOMETRY_ARRAY;
where_clause    VARCHAR2(2000);
BEGIN
IF predicate IS NULL
THEN
where_clause := NULL;
ELSE
where_clause := ' WHERE ';
END IF;

GeometryArr := SDO_GEOMETRY_ARRAY();
OPEN query_crs FOR ' SELECT ' || column_name ||
' FROM ' || table_name ||
where_clause || predicate;
LOOP
FETCH query_crs into g;
EXIT when query_crs%NOTFOUND ;
GeometryArr.extend;
GeometryArr(GeometryArr.count) := g;
END LOOP;
RETURN GeometryArr;
END;
/

SELECT sdo_aggr_set_union (get_geom_set ('COLA_MARKETS', 'SHAPE',
'name <> ''cola_c'''), .0005 ) FROM dual;

SDO_AGGR_SET_UNION(GET_GEOM_SET('COLA_MARKETS','SHAPE','NAME<>''COLA_C'''),.0005
--------------------------------------------------------------------------------
SDO_GEOMETRY(2007, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 2, 11, 1003, 1), SDO
_ORDINATE_ARRAY(8, 11, 6, 9, 8, 7, 10, 9, 8, 11, 1, 7, 1, 1, 5, 1, 8, 1, 8, 6, 5
, 7, 1, 7))

SDO_AGGR_UNION

構文

SDO_AGGR_UNION(

AggregateGeometry SDOAGGRTYPE

) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリ・オブジェクトで位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(1.10.1項を参照)を指定します。

使用上の注意

単一線ストリングまたは複数線ストリングのジオメトリをマージするには、SDO_AGGR_UNIONは使用せず、SDO_AGGR_CONCAT_LINES空間集計ファンクションを使用します。

SDO_GEOM.SDO_UNIONファンクションの詳細は、第24章を参照してください。

例

次の例では、cola_dを除くすべてのジオメトリ(この例では、cola_a、cola_bおよびcola_c)の和集合が戻されます。(例では、2.1項の定義およびデータを使用しています。)

SELECT SDO_AGGR_UNION(
SDOAGGRTYPE(c.shape, 0.005))
FROM cola_markets c
WHERE c.name <> 'cola_d';

SDO_AGGR_UNION(SDOAGGRTYPE(C.SHAPE,0.005))(SDO_GTYPE, SDO_SRID, SDO_POINT(
--------------------------------------------------------------------------------
SDO_GEOMETRY(2007, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 2, 11, 1003, 1), SDO
_ORDINATE_ARRAY(8, 11, 6, 9, 8, 7, 10, 9, 8, 11, 1, 7, 1, 1, 5, 1, 8, 1, 8, 6, 5
, 7, 1, 7))

SDO_AGGR_UNIONのより複雑な例については、C.4項を参照してください。

21 SDO_CSパッケージ(座標系変換)

MDSYS.SDO_CSパッケージには、座標系で使用するサブプログラムが含まれます。単一ジオメトリまたはジオメトリのレイヤー全体(表の指定した列に含まれるすべてのジオメトリ)で、明示的に座標変換を行うことができます。

この章で説明するサブプログラムを使用する場合は、座標系の概念を理解しておく必要があります(1.5.4項および第6章を参照)。

表21-1に、座標系変換サブプログラムを示します。

表21-1 座標系変換のサブプログラム

サブプログラム

説明

SDO_CS.ADD_PREFERENCE_FOR_OP

ソース座標系とターゲット座標系の間での操作のプリファレンスを追加します。

SDO_CS.CONVERT_NADCON_TO_XML

ASCII形式のNADCON(North American Datum Conversion)グリッドをOracle Spatial XML表現に変換します。

SDO_CS.CONVERT_NTV2_TO_XML

ASCII形式のNTv2(National Transformation Version 2)グリッドをOracle Spatial XML表現に変換します。

SDO_CS.CONVERT_XML_TO_NADCON

NADCON(North American Datum Conversion)グリッドのOracle Spatial XML表現をNADCON ASCII形式に変換します。

SDO_CS.CONVERT_XML_TO_NTV2

NTv2(National Transformation Version 2)グリッドのOracle Spatial XML表現をNTv2 ASCII形式に変換します。

SDO_CS.CREATE_CONCATENATED_OP

連結操作を作成します。

SDO_CS.CREATE_OBVIOUS_EPSG_RULES

特定の変換で適用するEPSGルールの基本セットを作成します。

SDO_CS.CREATE_PREF_CONCATENATED_OP

連結操作を作成し、変換計画に関連付け、システム全体または指定したユースケースのいずれかで優先させます。

SDO_CS.DELETE_ALL_EPSG_RULES

特定の変換で適用するEPSGルールの基本セットを削除します。

SDO_CS.DELETE_OP

連結操作を削除します。

SDO_CS.DETERMINE_CHAIN

システムのルール・セットに基づいて、座標参照系間の変換で使用する問合せの連鎖を戻します。

SDO_CS.DETERMINE_DEFAULT_CHAIN

座標参照系間の変換で使用するSRID値のデフォルトの連鎖を戻します。

SDO_CS.FIND_GEOG_CRS

指定した参照SRID値を持つ座標参照系と同じwell-knownテキスト(WKT)数値を持つ測地(地理)座標参照系のSRID値を戻します。

SDO_CS.FIND_PROJ_CRS

指定した参照SRID値を持つ座標参照系と同じwell-knownテキスト(WKT)数値を持つ投影座標参照系のSRID値を戻します。

SDO_CS.FIND_SRID

指定した情報に一致する座標系のSRID値を検索します。

SDO_CS.FROM_OGC_SIMPLEFEATURE_SRS

well-knownテキスト文字列をTOWGS84キーワードのないOpen Geospatial Consortiumのシンプル・フィーチャ形式からTOWGS84キーワードを含む形式に変換します。

SDO_CS.FROM_USNG

U.S. National Grid形式で表される点を空間点ジオメトリ・オブジェクトに変換します。

SDO_CS.GET_EPSG_DATA_VERSION

Spatialによって使用されるEPSGデータセットのバージョン番号を取得します。

SDO_CS.MAKE_2D

3次元のジオメトリを2次元のジオメトリに変換します。

SDO_CS.MAKE_3D

2次元のジオメトリを3次元のジオメトリに変換します。

SDO_CS.MAP_EPSG_SRID_TO_ORACLE

指定したEPSG SRID値に対応するOracle Spatial SRID値を戻します。

SDO_CS.MAP_ORACLE_SRID_TO_EPSG

指定したOracle Spatial SRID値に対応するEPSG SRID値を戻します。

SDO_CS.REVOKE_PREFERENCE_FOR_OP

ソース座標系とターゲット座標系の間での操作のプリファレンスを取り消します。

SDO_CS.TO_OGC_SIMPLEFEATURE_SRS

well-knownテキスト文字列を、TOWGS84キーワードを含むOpen Geospatial Consortiumのシンプル・フィーチャ形式からTOWGS84キーワードのない形式に変換します。

SDO_CS.TRANSFORM

座標系(SRIDまたは名前で指定)を使用してジオメトリ表現を変換します。

SDO_CS.TRANSFORM_LAYER

ジオメトリのレイヤー全体(表内の指定した列に含まれるすべてのジオメトリ)を変換します。

SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS

すべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

SDO_CS.UPDATE_WKTS_FOR_EPSG_CRS

指定したSRIDに関連付けられたEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUM

指定したデータに関連付けられたすべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

SDO_CS.UPDATE_WKTS_FOR_EPSG_ELLIPS

指定した楕円体に関連付けられたすべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

SDO_CS.UPDATE_WKTS_FOR_EPSG_OP

指定した座標変換操作に関連付けられたすべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

SDO_CS.UPDATE_WKTS_FOR_EPSG_PARAM

指定した座標変換操作と変換操作のパラメータに関連付けられたすべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

SDO_CS.UPDATE_WKTS_FOR_EPSG_PM

指定した本初子午線に関連付けられたすべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

SDO_CS.VALIDATE_WKT

指定されたSRIDに関連付けられたwell-knownテキスト(WKT)の説明を検査します。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

SDO_CS.ADD_PREFERENCE_FOR_OP

構文

SDO_CS.ADD_PREFERENCE_FOR_OP(

op_id IN NUMBER,

source_crs IN NUMBER DEFAULT NULL,

target_crs IN NUMBER DEFAULT NULL,

use_case IN VARCHAR2 DEFAULT NULL);

説明

ソース座標系とターゲット座標系の間での操作のプリファレンスを追加します。

パラメータ

op_id

操作のID番号を指定します。この値は、SDO_COORD_OPS表(6.7.8項を参照)のCOORD_OP_ID列の値である必要があります。

source_crs

ソース座標参照系のSRIDを指定します。この値は、NULLまたはSDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

target_crs

ターゲット座標参照系のSRIDを指定します。この値は、NULLまたはSDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

use_case

このプリファレンスに関連付けるユースケースの名前を指定します。この値は、NULLまたはSDO_PREFERRED_OPS_USER表(6.7.25項を参照)のUSE_CASE列の値である必要があります。

使用上の注意

use_caseがNULLの場合、この操作に関連付けられた変換計画はシステム全体のプリファレンスになり、行(逆の操作が存在する場合は2つの行)がSDO_PREFERRED_OPS_SYSTEM表(6.7.24項を参照)に追加されます。use_caseがNULL以外の場合、この操作に関連付けられた変換計画は指定したユースケースに関連するプリファレンスになり、行(逆の操作が存在する場合は2つの行)がSDO_PREFERRED_OPS_USER表(6.7.25項を参照)に追加されます。

連結操作を作成して、システム全体または指定したユースケースのいずれかで優先させるには、SDO_CS.CREATE_PREF_CONCATENATED_OP簡易プロシージャを使用します。

ソース座標系とターゲット座標系の間での操作のプリファレンスを取り消すには、SDO_CS.REVOKE_PREFERENCE_FOR_OPプロシージャを使用します。

例

次の例では、変換にユースケースuse_case_Bが指定されている場合に、SRID 4301からSRID 4326への変換で使用する操作19977のプリファレンスを追加します。

EXECUTE SDO_CS.ADD_PREFERENCE_FOR_OP(19977, 4301, 4326, 'use_case_B');

SDO_CS.CONVERT_NADCON_TO_XML

構文

SDO_CS.CONVERT_NADCON_TO_XML(

laa_clob IN CLOB,

loa_clob IN CLOB,

xml_grid OUT XMLTYPE );

説明

ASCII形式のNADCON(North American Datum Conversion)グリッドをOracle Spatial XML表現に変換します。

パラメータ

laa_clob

CLOBオブジェクトにあるNADCONグリッドの緯度の値を指定します。

loa_clob

CLOBオブジェクトにあるNADCONグリッドの経度の値を指定します。

xml_grid

NADCONグリッドのOracle Spatial XML表現を含む出力XML文書を指定します。

使用上の注意

Oracle Spatial XML表現をNADCONグリッドに変換するには、SDO_CS.CONVERT_XML_TO_NADCONプロシージャを使用します。

例

次の例では、ASCII形式のNADCONグリッドをOracle Spatial XML表現に変換し、結果として戻されるXML表現をNADCON ASCII表現に変換して、戻されるASCII表現を表示します。(出力の一部のみを示します。)

set lines 32000
set long 2000000000

DECLARE
laa       CLOB;
loa       CLOB;
xml       XMLTYPE;
laa_file  BFILE;
loa_file  BFILE;
BEGIN
laa_file := BFILENAME('MY_WORK_DIR', 'samplenadcon.laa');
loa_file := BFILENAME('MY_WORK_DIR', 'samplenadcon.loa');
DBMS_LOB.OPEN(laa_file, DBMS_LOB.LOB_READONLY);
DBMS_LOB.OPEN(loa_file, DBMS_LOB.LOB_READONLY);

DBMS_LOB.CREATETEMPORARY(laa, TRUE, DBMS_LOB.SESSION);
DBMS_LOB.CREATETEMPORARY(loa, TRUE, DBMS_LOB.SESSION);
DBMS_LOB.OPEN(laa, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.OPEN(loa, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.LOADFROMFILE(laa, laa_file, DBMS_LOB.LOBMAXSIZE);
DBMS_LOB.LOADFROMFILE(loa, loa_file, DBMS_LOB.LOBMAXSIZE);
DBMS_LOB.CLOSE(laa);
DBMS_LOB.CLOSE(loa);
DBMS_LOB.CLOSE(laa_file);
DBMS_LOB.CLOSE(loa_file);

SDO_CS.convert_NADCON_to_XML(laa, loa, xml);
SDO_CS.convert_XML_to_NADCON(xml, laa, loa);
DBMS_OUTPUT.PUT_LINE(SUBSTR(laa, 1, 32000));
DBMS_OUTPUT.PUT_LINE(SUBSTR(loa, 1, 32000));
END;
/
NADCON EXTRACTED REGION                                 NADGRD
33  49   1  -107.00000      .25000    25.00000      .25000      .00000
.006731     .006444     .006208     .006036     .005935     .005904
.005932     .006002     .006092     .006174     .006218     .006198
.006087     .005867     .005522     .005045     .004432     .003688
.002818     .001836     .000759    -.000385    -.001559    -.002704
. . .
NADCON EXTRACTED REGION                                 NADGRD
33  49   1  -107.00000      .25000    25.00000      .25000      .00000
.008509     .007147     .005756     .004331     .002879     .001410
-.000060    -.001507    -.002904    -.004222    -.005431    -.006498
-.007395    -.008095    -.008579    -.008832    -.008848    -.008632
-.008200    -.007577    -.006800    -.005911    -.004957    -.003974
. . .

SDO_CS.CONVERT_NTV2_TO_XML

構文

SDO_CS.CONVERT_NTV2_TO_XML(

ntv2_clob IN CLOB,

xml_grid OUT XMLTYPE );

説明

ASCII形式のNTv2(National Transformation Version 2)グリッドをOracle Spatial XML表現に変換します。

パラメータ

ntv2_clob

CLOBオブジェクトのNTv2グリッド値を指定します。

xml_grid

NTv2グリッドのOracle Spatial XML表現を含む出力XML文書を指定します。

使用上の注意

Oracle Spatial XML表現をNTv2グリッドに変換するには、SDO_CS.CONVERT_XML_TO_NTV2プロシージャを使用します。

例

次の例では、ASCII形式のNTv2グリッドをOracle Spatial XML表現に変換し、結果として戻されるXML表現をNTv2 ASCII表現に変換して、戻されるASCII表現を表示します。(出力の一部のみを示します。)

set lines 32000
set long 2000000000

DECLARE
ntv2      CLOB;
xml       XMLTYPE;
ntv2_file BFILE;
BEGIN
ntv2_file := BFILENAME('MY_WORK_DIR', 'samplentv2.gsa');
DBMS_LOB.OPEN(ntv2_file, DBMS_LOB.LOB_READONLY);

DBMS_LOB.CREATETEMPORARY(ntv2, TRUE, DBMS_LOB.SESSION);
DBMS_LOB.OPEN(ntv2, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.LOADFROMFILE(ntv2, ntv2_file, DBMS_LOB.LOBMAXSIZE);
DBMS_LOB.CLOSE(ntv2);
DBMS_LOB.CLOSE(ntv2_file);

SDO_CS.convert_NTv2_to_XML(ntv2, xml);
SDO_CS.convert_XML_to_NTv2(xml, ntv2);
DBMS_OUTPUT.PUT_LINE(SUBSTR(ntv2, 1, 32000));
END;
/
NUM_OREC 11
NUM_SREC 11
NUM_FILE  2
GS_TYPE SECONDS
VERSION NTv2.0
DATUM_F NAD27
DATUM_T NAD83
MAJOR_F  6378206.400
MINOR_F  6356583.800
MAJOR_T  6378137.000
MINOR_T  6356752.314
SUB_NAMEALbanff
PARENT  NONE
CREATED 95-06-29
UPDATED 95-07-04
S_LAT     183900.000000
N_LAT     184500.000000
E_LONG    415800.000000
W_LONG    416100.000000
LAT_INC       30.000000
LONG_INC      30.000000
GS_COUNT   231
0.084020  3.737300  0.005000  0.008000
0.083029  3.738740  0.017000  0.011000
0.082038  3.740180  0.029000  0.015000
. . .

SDO_CS.CONVERT_XML_TO_NADCON

構文

SDO_CS.CONVERT_XML_TO_NADCON(

xml_grid IN XMLTYPE,

laa_clob OUT CLOB,

loa_clob OUT CLOB);

説明

NADCON(North American Datum Conversion)グリッドのOracle Spatial XML表現をNADCON ASCII形式に変換します。

パラメータ

xml_grid

NADCONグリッドのOracle Spatial XML表現を含むXML文書を指定します。

laa_clob

NADCONグリッドの緯度の値を含む出力CLOBオブジェクトを指定します。

loa_clob

NADCONグリッドの経度の値を含む出力CLOBオブジェクトを指定します。

使用上の注意

ASCII形式のNADCONグリッドをOracle Spatial XML表現に変換するには、SDO_CS.CONVERT_NADCON_TO_XMLプロシージャを使用します。

例

次の例では、ASCII形式のNADCONグリッドをOracle Spatial XML表現に変換し、結果として戻されるXML表現をNADCON ASCII表現に変換して、戻されるASCII表現を表示します。(出力の一部のみを示します。)

set lines 32000
set long 2000000000

DECLARE
laa       CLOB;
loa       CLOB;
xml       XMLTYPE;
laa_file  BFILE;
loa_file  BFILE;
BEGIN
laa_file := BFILENAME('MY_WORK_DIR', 'samplenadcon.laa');
loa_file := BFILENAME('MY_WORK_DIR', 'samplenadcon.loa');
DBMS_LOB.OPEN(laa_file, DBMS_LOB.LOB_READONLY);
DBMS_LOB.OPEN(loa_file, DBMS_LOB.LOB_READONLY);

DBMS_LOB.CREATETEMPORARY(laa, TRUE, DBMS_LOB.SESSION);
DBMS_LOB.CREATETEMPORARY(loa, TRUE, DBMS_LOB.SESSION);
DBMS_LOB.OPEN(laa, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.OPEN(loa, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.LOADFROMFILE(laa, laa_file, DBMS_LOB.LOBMAXSIZE);
DBMS_LOB.LOADFROMFILE(loa, loa_file, DBMS_LOB.LOBMAXSIZE);
DBMS_LOB.CLOSE(laa);
DBMS_LOB.CLOSE(loa);
DBMS_LOB.CLOSE(laa_file);
DBMS_LOB.CLOSE(loa_file);

SDO_CS.convert_NADCON_to_XML(laa, loa, xml);
SDO_CS.convert_XML_to_NADCON(xml, laa, loa);
DBMS_OUTPUT.PUT_LINE(SUBSTR(laa, 1, 32000));
DBMS_OUTPUT.PUT_LINE(SUBSTR(loa, 1, 32000));
END;
/
NADCON EXTRACTED REGION                                 NADGRD
33  49   1  -107.00000      .25000    25.00000      .25000      .00000
.006731     .006444     .006208     .006036     .005935     .005904
.005932     .006002     .006092     .006174     .006218     .006198
.006087     .005867     .005522     .005045     .004432     .003688
.002818     .001836     .000759    -.000385    -.001559    -.002704
. . .
NADCON EXTRACTED REGION                                 NADGRD
33  49   1  -107.00000      .25000    25.00000      .25000      .00000
.008509     .007147     .005756     .004331     .002879     .001410
-.000060    -.001507    -.002904    -.004222    -.005431    -.006498
-.007395    -.008095    -.008579    -.008832    -.008848    -.008632
-.008200    -.007577    -.006800    -.005911    -.004957    -.003974
. . .

SDO_CS.CONVERT_XML_TO_NTV2

構文

SDO_CS.CONVERT_XML_TO_NTV2(

xml_grid IN XMLTYPE,

ntv2_clob OUT CLOB);

説明

NTv2(National Transformation Version 2)グリッドのOracle Spatial XML表現をNTv2 ASCII形式に変換します。

パラメータ

xml_grid

NTv2グリッドのOracle Spatial XML表現を含むXML文書を指定します。

ntv2_clob

NTv2グリッドの値を含む出力CLOBオブジェクトを指定します。

使用上の注意

ASCII形式のNTv2グリッドをOracle Spatial XML表現に変換するには、SDO_CS.CONVERT_NTV2_TO_XMLプロシージャを使用します。

例

次の例では、ASCII形式のNTv2グリッドをOracle Spatial XML表現に変換し、結果として戻されるXML表現をNTv2 ASCII表現に変換して、戻されるASCII表現を表示します。(出力の一部のみを示します。)

set lines 32000
set long 2000000000

DECLARE
ntv2      CLOB;
xml       XMLTYPE;
ntv2_file BFILE;
BEGIN
ntv2_file := BFILENAME('MY_WORK_DIR', 'samplentv2.gsa');
DBMS_LOB.OPEN(ntv2_file, DBMS_LOB.LOB_READONLY);

DBMS_LOB.CREATETEMPORARY(ntv2, TRUE, DBMS_LOB.SESSION);
DBMS_LOB.OPEN(ntv2, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.LOADFROMFILE(ntv2, ntv2_file, DBMS_LOB.LOBMAXSIZE);
DBMS_LOB.CLOSE(ntv2);
DBMS_LOB.CLOSE(ntv2_file);

SDO_CS.convert_NTv2_to_XML(ntv2, xml);
SDO_CS.convert_XML_to_NTv2(xml, ntv2);
DBMS_OUTPUT.PUT_LINE(SUBSTR(ntv2, 1, 32000));
END;
/
NUM_OREC 11
NUM_SREC 11
NUM_FILE  2
GS_TYPE SECONDS
VERSION NTv2.0
DATUM_F NAD27
DATUM_T NAD83
MAJOR_F  6378206.400
MINOR_F  6356583.800
MAJOR_T  6378137.000
MINOR_T  6356752.314
SUB_NAMEALbanff
PARENT  NONE
CREATED 95-06-29
UPDATED 95-07-04
S_LAT     183900.000000
N_LAT     184500.000000
E_LONG    415800.000000
W_LONG    416100.000000
LAT_INC       30.000000
LONG_INC      30.000000
GS_COUNT   231
0.084020  3.737300  0.005000  0.008000
0.083029  3.738740  0.017000  0.011000
0.082038  3.740180  0.029000  0.015000
. . .

SDO_CS.CREATE_CONCATENATED_OP

構文

SDO_CS.CREATE_CONCATENATED_OP(

op_id IN NUMBER,

op_name IN VARCHAR2,

use_plan IN TFM_PLAN);

説明

連結操作を作成します。

パラメータ

op_id

連結操作のID番号を指定します。

op_name

連結操作に関連付ける名前を指定します。

use_plan

変換計画を指定します。TFM_PLANオブジェクト型の詳細は、6.6項を参照してください。

使用上の注意

連結操作は、2つ以上の基本操作を連結(連鎖)したものです。

連結操作を作成して、システム全体または指定したユースケースのいずれかで優先させるには、SDO_CS.CREATE_PREF_CONCATENATED_OP簡易プロシージャを使用します。

例

次の例では、操作IDが2999で、CONCATENATED_OPERATION_2999という名前の連結操作を作成します。

DECLARE
BEGIN
SDO_CS.CREATE_CONCATENATED_OP(
2999,
'CONCATENATED_OPERATION_2999',
TFM_PLAN(SDO_TFM_CHAIN(4242, 19910, 24200, 1000000000, 24200)));
END;
/

SDO_CS.CREATE_OBVIOUS_EPSG_RULES

構文

SDO_CS.CREATE_OBVIOUS_EPSG_RULES(

use_case IN VARCHAR2 DEFAULT NULL);

説明

特定の変換で適用するEPSGルールの基本セットを作成します。

パラメータ

use_case

作成するEPSGルールのアプリケーションに関連付けるユースケースの名前を指定します。この値は、SDO_PREFERRED_OPS_USER表(6.7.25項を参照)のUSE_CASE列の値である必要があります。

使用上の注意

このプロシージャでは、特定の座標参照系間で実行する主要なEPSG定義の変換ルールを作成します。一部の座標参照系間の変換では、EPSGで適用するルールがすでに指定されている場合があります。また、座標参照系間の特定の変換で、EPSGルールがデフォルトのOracle Spatialルールと異なる場合があります。このような場合、このプロシージャを実行すると、EPSGルールが適用されます。このプロシージャを実行しない場合は、デフォルトのSpatialルールが使用されます。

このプロシージャでは、複数の行をSDO_PREFERRED_OPS_SYSTEM表(6.7.24項を参照)に挿入します。

このプロシージャで作成したEPSGルールを削除して、すべてのケースでデフォルトのSpatialルールを使用するようにするには、SDO_CS.DELETE_ALL_EPSG_RULESプロシージャを使用します。

例

次の例では、特定の変換で適用するEPSGルールの基本セットを作成します。

EXECUTE SDO_CS.CREATE_OBVIOUS_EPSG_RULES;

SDO_CS.CREATE_PREF_CONCATENATED_OP

構文

SDO_CS.CREATE_PREF_CONCATENATED_OP(

op_id IN NUMBER,

op_name IN VARCHAR2,

use_plan IN TFM_PLAN,

use_case IN VARCHAR2 DEFAULT NULL);

説明

連結操作を作成し、変換計画に関連付け、システム全体または指定したユースケースのいずれかで優先させます。

パラメータ

op_id

作成する連結操作のID番号を指定します。

op_name

連結操作に関連付ける名前を指定します。

use_plan

変換計画を指定します。TFM_PLANオブジェクト型の詳細は、6.6項を参照してください。

use_case

優先させるこの連結操作を適用するユースケースを指定します。この値は、NULLまたはSDO_PREFERRED_OPS_USER表(6.7.25項を参照)のUSE_CASE列の値である必要があります。

使用上の注意

この簡易プロシージャは、SDO_CS.CREATE_CONCATENATED_OPとSDO_CS.ADD_PREFERENCE_FOR_OPのプロシージャの操作を結合します。

連結操作は、2つ以上の基本操作を連結(連鎖)したものです。

use_caseがNULLの場合、この操作に関連付けられた変換計画はシステム全体のプリファレンスになり、行(逆の操作が存在する場合は2つの行)がSDO_PREFERRED_OPS_SYSTEM表(6.7.24項を参照)に追加されます。use_caseがNULL以外の場合、この操作に関連付けられた変換計画は指定したユースケースに関連するプリファレンスになり、行(逆の操作が存在する場合は2つの行)がSDO_PREFERRED_OPS_USER表(6.7.25項を参照)に追加されます。

システム全体または指定したユースケースのいずれでも優先させずに連結を作成するには、SDO_CS.CREATE_CONCATENATED_OPプロシージャを使用します。

連結操作を削除するには、SDO_CS.DELETE_OPプロシージャを使用します。

例

次の例では、操作IDが300で、MY_CONCATENATION_OPERATIONという名前の連結操作を作成し、この操作が使用される場合に、(use_caseがNULLのため)すべてのケースで、指定した変換計画をSpatialが使用するようにします。

DECLARE
BEGIN
SDO_CS.CREATE_PREF_CONCATENATED_OP(
300,
'MY_CONCATENATED_OPERATION',
TFM_PLAN(SDO_TFM_CHAIN(4242, 19910, 24200, 1000000000, 24200)),
NULL);
END;
/

SDO_CS.DELETE_ALL_EPSG_RULES

構文

SDO_CS.DELETE_ALL_EPSG_RULES(

use_case IN VARCHAR2 DEFAULT NULL);

説明

特定の変換で適用するEPSGルールの基本セットを削除します。

パラメータ

use_case

作成するEPSGルールのアプリケーションに関連付けるユースケースの名前を指定します。SDO_CS.CREATE_OBVIOUS_EPSG_RULESプロシージャがコールされた場合、use_caseパラメータ値(NULLまたは指定した値のいずれか)に使用した値と一致する必要があります。

使用上の注意

このプロシージャでは、SDO_CS.CREATE_OBVIOUS_EPSG_RULESプロシージャで以前に作成したEPSGルールを削除し、すべてのケースでデフォルトのSpatialルールを使用するようにします。(詳細は、SDO_CS.CREATE_OBVIOUS_EPSG_RULESプロシージャの「使用上の注意」を参照してください。)

use_caseがNULLの場合、このプロシージャはSDO_PREFERRED_OPS_SYSTEM表(6.7.24項を参照)からすべての行を削除します。use_caseがNULL以外の場合、このプロシージャはSDO_PREFERRED_OPS_USER表(6.7.25項を参照)から、指定したユースケースに関連付けられた行を削除します。

例

次の例では、特定の変換で適用するEPSGルールの基本セットを削除します。

EXECUTE SDO_CS.DELETE_ALL_EPSG_RULES;

SDO_CS.DELETE_OP

構文

SDO_CS.DELETE_OP(

op_id IN NUMBER);

説明

連結操作を削除します。

パラメータ

op_id

削除する操作のID番号を指定します。

使用上の注意

連結操作を作成して、システム全体または指定したユースケースのみで優先させるには、SDO_CS.CREATE_CONCATENATED_OPプロシージャを使用します。

例

次の例では、ID番号が300の操作を削除します。

EXECUTE SDO_CS.DELETE_OP(300);

SDO_CS.DETERMINE_CHAIN

構文

SDO_CS.DETERMINE_CHAIN(

transient_rule_set IN SDO_TRANSIENT_RULE_SET,

use_case IN VARCHAR2,

source_srid IN NUMBER,

target_srid IN NUMBER) RETURN TFM_PLAN;

説明

システムのルール・セットに基づいて、座標参照系間の変換で使用する問合せの連鎖を戻します。

パラメータ

transient_rule_set

変換で使用するルール・セットを指定します。NULL値を指定すると、Oracleシステムのルール・セットが使用されます。

use_case

問合せの連鎖を決定するユースケースを指定します。この値は、NULL値またはSDO_PREFERRED_OPS_USER表(6.7.25項を参照)のUSE_CASE列の値である必要があります。

source_srid

ソース座標参照系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

target_srid

ターゲット座標参照系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

使用上の注意

このファンクションは、TFM_PLAN型のオブジェクトを戻します(6.6項を参照)。

transient_rule_setパラメータはSDO_TRANSIENT_RULE_SET型で、次のように定義されています。

CREATE TYPE sdo_transient_rule_set AS OBJECT (
source_srid  NUMBER,
target_srid  NUMBER,
tfm          NUMBER);

例

次の例では、システムのルール・セットに基づいて問合せの連鎖を戻します。

SELECT MDSYS.SDO_CS.DETERMINE_CHAIN(NULL, NULL, 4804, 4257) FROM DUAL;

MDSYS.SDO_CS.DETERMINE_CHAIN(NULL,NULL,4804,4257)(THE_PLAN)
--------------------------------------------------------------------------------
TFM_PLAN(SDO_TFM_CHAIN(4804, -2, 4257))

次の例では、SRID 4804からSRID 4257への変換用に指定した連鎖を持つ、優先する連結操作(操作ID 300)を作成し、DETERMINE_CHAINファンクションをコールして異なる結果を戻します。(この例で作成した操作は実用的ではありません。参考用として作成されたものです。)

CALL SDO_CS.CREATE_PREF_CONCATENATED_OP(
300,
'CONCATENATED OPERATION',
TFM_PLAN(
SDO_TFM_CHAIN(
4804,
1000000001, 4804,
1000000002, 4804,
1000000001, 4804,
1000000001, 4804,
1000000002, 4804,
1000000002, 4804,
1000000001, 4804,
1000000001, 4804,
1000000001, 4804,
1000000002, 4804,
1000000002, 4804,
1000000002, 4257)),
NULL);

SELECT MDSYS.SDO_CS.DETERMINE_CHAIN(NULL, NULL, 4804, 4257) FROM DUAL;

MDSYS.SDO_CS.DETERMINE_CHAIN(NULL,NULL,4804,4257)(THE_PLAN)
--------------------------------------------------------------------------------
TFM_PLAN(SDO_TFM_CHAIN(4804, 300, 4257))

SDO_CS.DETERMINE_DEFAULT_CHAIN

構文

SDO_CS.DETERMINE_DEFAULT_CHAIN(

source_srid IN NUMBER,

target_srid IN NUMBER) RETURN SDO_SRID_CHAIN;

説明

座標参照系間の変換で使用するSRID値のデフォルトの連鎖を戻します。

パラメータ

source_srid

ソース座標参照系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

target_srid

ターゲット座標参照系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

使用上の注意

このファンクションは、VARRAY(1048576) OF NUMBERとして定義されるSDO_SRID_CHAIN型のオブジェクトを戻します。

例

次の例では、SRID 4804からSRID 4257への変換で使用するSRID値のデフォルトの連鎖を戻します。

SELECT MDSYS.SDO_CS.DETERMINE_DEFAULT_CHAIN(4804, 4257) FROM DUAL;

MDSYS.SDO_CS.DETERMINE_DEFAULT_CHAIN(4804,4257)
--------------------------------------------------------------------------------
SDO_SRID_CHAIN(NULL, 4804, 4257, NULL)

SDO_CS.FIND_GEOG_CRS

構文

SDO_CS.FIND_GEOG_CRS(

reference_srid IN NUMBER,

is_legacy IN VARCHAR2,

max_rel_num_difference IN NUMBER DEFAULT 0.000001) RETURN SDO_SRID_LIST;

説明

指定した参照SRID値を持つ座標参照系と同じwell-knownテキスト(WKT)数値を持つ測地(地理)座標参照系のSRID値を戻します。

パラメータ

reference_srid

同じWKT数値を持つ他のすべての測地座標参照系を検索する座標参照系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

is_legacy

TRUEは、SDO_COORD_REF_SYS表(6.7.9項を参照)のIS_LEGACY列の値がTRUEである測地座標参照系に結果を制限します。FALSEは、SDO_COORD_REF_SYS表のIS_LEGACY列の値がFALSEである測地座標参照系に結果を制限します。このパラメータにNULL値を指定すると、結果の判断時に、SDO_COORD_REF_SYS表のIS_LEGACY列の値は無視されます。

max_rel_num_difference

投影座標参照系を一致対象にする場合、WKT値がどの程度一致する必要があるかを示す数値を指定します。デフォルト値は0.000001です。WKT項目の各数値は、参照SRIDのWKT内の対応する値と比較されるか、このファンクションで指定するパラメータのリスト内の対応する値と比較されます。すべてのケースで差がmax_rel_num_differenceの値以下の場合は、この座標参照系のSRIDが結果に含まれます。

使用上の注意

このファンクションは、VARRAY(1048576) OF NUMBERとして定義されるSDO_SRID_LIST型のオブジェクトを戻します。

well-knownテキスト(WKT)形式の詳細は、6.8.1.1項を参照してください。

例

次の例では、is_legacyパラメータ値が結果に与える影響を示します。最初の例では、SRID値が8307の座標参照系と同じWKT数値を持つすべてのレガシー測地座標参照系のSRID値を戻します。

SELECT SDO_CS.FIND_GEOG_CRS(
8307,
'TRUE') FROM DUAL;

SDO_CS.FIND_GEOG_CRS(8307,'TRUE')
--------------------------------------------------------------------------------
SDO_SRID_LIST(8192, 8265, 8307, 8311, 8320, 524288, 2000002, 2000006, 2000012, 2
000015, 2000023, 2000028)

次の例では、SRID値が8307の座標参照系と同じWKT数値を持つすべての非レガシー測地座標参照系のSRID値を戻します。

SELECT SDO_CS.FIND_GEOG_CRS(
8307,
'FALSE') FROM DUAL;

SDO_CS.FIND_GEOG_CRS(8307,'FALSE')
--------------------------------------------------------------------------------
SDO_SRID_LIST(4019, 4030, 4031, 4032, 4033, 4041, 4121, 4122, 4126, 4130, 4133,
4140, 4141, 4148, 4151, 4152, 4163, 4166, 4167, 4170, 4171, 4172, 4173, 4176, 41
80, 4189, 4190, 4258, 4269, 4283, 4318, 4319, 4326, 4610, 4612, 4617, 4619, 4624
, 4627, 4640, 4659, 4661, 4667, 4669, 4670)

次の例では、SRID値が8307の座標参照系と同じWKT数値を持つすべての測地座標参照系(レガシーおよび非レガシー)のSRID値を戻します。

SELECT SDO_CS.FIND_GEOG_CRS(
8307,
NULL) FROM DUAL;

SDO_CS.FIND_GEOG_CRS(8307,NULL)
--------------------------------------------------------------------------------
SDO_SRID_LIST(4019, 4030, 4031, 4032, 4033, 4041, 4121, 4122, 4126, 4130, 4133,
4140, 4141, 4148, 4151, 4152, 4163, 4166, 4167, 4170, 4171, 4172, 4173, 4176, 41
80, 4189, 4190, 4258, 4269, 4283, 4318, 4319, 4326, 4610, 4612, 4617, 4619, 4624
, 4627, 4640, 4659, 4661, 4667, 4669, 4670, 8192, 8265, 8307, 8311, 8320, 524288
, 2000002, 2000006, 2000012, 2000015, 2000023, 2000028)

SDO_CS.FIND_PROJ_CRS

構文

SDO_CS.FIND_PROJ_CRS(

reference_srid IN NUMBER,

is_legacy IN VARCHAR2,

max_rel_num_difference IN NUMBER DEFAULT 0.000001) RETURN SDO_SRID_LIST;

説明

指定した参照SRID値を持つ座標参照系と同じwell-knownテキスト(WKT)数値を持つ投影座標参照系のSRID値を戻します。

パラメータ

reference_srid

同じWKT数値を持つ他のすべての投影座標参照系を検索する座標参照系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

is_legacy

TRUEは、SDO_COORD_REF_SYS表(6.7.9項を参照)のIS_LEGACY列の値がTRUEである投影座標参照系に結果を制限します。FALSEは、SDO_COORD_REF_SYS表のIS_LEGACY列の値がFALSEである投影座標参照系に結果を制限します。このパラメータにNULL値を指定すると、結果の判断時に、SDO_COORD_REF_SYS表のIS_LEGACY列の値は無視されます。

max_rel_num_difference

座標参照系を一致対象にする場合、WKT値がどの程度一致する必要があるかを示す数値を指定します。デフォルト値は0.000001です。WKT項目の各数値は、参照SRIDのWKT内の対応する値と比較されるか、このファンクションで指定するパラメータのリスト内の対応する値と比較されます。すべてのケースで差がmax_rel_num_differenceの値以下の場合は、この座標参照系のSRIDが結果に含まれます。

使用上の注意

このファンクションは、VARRAY(1048576) OF NUMBERとして定義されるSDO_SRID_LIST型のオブジェクトを戻します。

well-knownテキスト(WKT)形式の詳細は、6.8.1.1項を参照してください。

例

次の例では、is_legacyパラメータ値が結果に与える影響を示します。最初の例では、SRID値が2007の座標参照系と同じWKT数値を持つすべてのレガシー投影座標参照系のSRID値を戻します。検索条件に一致するレガシー投影座標参照系はないため、戻される結果リストは空になります。

SELECT SDO_CS.FIND_PROJ_CRS(
2007,
'TRUE') FROM DUAL;

SDO_CS.FIND_PROJ_CRS(2007,'TRUE')
--------------------------------------------------------------------------------
SDO_SRID_LIST()

次の例では、SRID値が2007の座標参照系と同じWKT数値を持つすべての非レガシー投影座標参照系のSRID値を戻します。

SELECT SDO_CS.FIND_PROJ_CRS(
2007,
'FALSE') FROM DUAL;

SDO_CS.FIND_PROJ_CRS(2007,'FALSE')
--------------------------------------------------------------------------------
SDO_SRID_LIST(2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 21291)

次の例では、SRID値が2007の座標参照系と同じWKT数値を持つすべての投影座標参照系(レガシーおよび非レガシー)のSRID値を戻します。戻される結果リストは、前述の例と同じになります。

SELECT SDO_CS.FIND_PROJ_CRS(
2007,
NULL) FROM DUAL;

SDO_CS.FIND_PROJ_CRS(2007,NULL)
--------------------------------------------------------------------------------
SDO_SRID_LIST(2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 21291)

SDO_CS.FIND_SRID

構文

SDO_CS.FIND_SRID(

srid OUT NUMBER,

epsg_srid_geog IN NUMBER DEFAULT NULL,

epsg_srid_proj IN NUMBER DEFAULT NULL,

datum_id IN NUMBER DEFAULT NULL,

pm_id IN NUMBER DEFAULT NULL,

proj_method_id IN NUMBER DEFAULT NULL,

coord_ref_sys_kind IN VARCHAR2 DEFAULT NULL,

semi_major_axis IN NUMBER DEFAULT NULL,

semi_minor_axis IN NUMBER DEFAULT NULL,

inv_flattening IN NUMBER DEFAULT NULL,

params IN EPSG_PARAMS DEFAULT NULL);

または

SDO_CS.FIND_SRID(

srid OUT NUMBER,

epsg_srid_geog IN NUMBER DEFAULT NULL,

epsg_srid_proj IN NUMBER DEFAULT NULL,

datum_id IN NUMBER DEFAULT NULL,

pm_id IN NUMBER DEFAULT NULL,

proj_method_id IN NUMBER DEFAULT NULL,

proj_op_id IN NUMBER DEFAULT NULL,

coord_ref_sys_kind IN VARCHAR2 DEFAULT NULL,

semi_major_axis IN NUMBER DEFAULT NULL,

semi_minor_axis IN NUMBER DEFAULT NULL,

inv_flattening IN NUMBER DEFAULT NULL,

params IN EPSG_PARAMS DEFAULT NULL,

max_rel_num_difference IN NUMBER DEFAULT 0.000001);

説明

指定した情報に一致する座標系のSRID値を検索します。

パラメータ

srid

出力パラメータ。SRID値(数値)またはNULL値を含みます(「使用上の注意」を参照)。

epsg_srid_geog

地理座標系のEPGS SRID値。coord_ref_sys_kindパラメータの値に応じて、地理SRID値を持つ座標系の存在を確認するか、またはこのSRID値を持つ座標系に基づく投影座標系のSRID値を検索します。

epsg_srid_proj

投影座標系のEPGS SRID値。

datum_id

データID値。coord_ref_sys_kindパラメータの値に応じて、このデータに基づく地理座標系または投影座標系のSRIDを検索します。

ellipsoid_id

楕円体のID値。coord_ref_sys_kindパラメータの値に応じて、この楕円体に基づく地理座標系または投影座標系のSRIDを検索します。

pm_id

本初子午線のID値。coord_ref_sys_kindパラメータの値に応じて、この本初子午線に基づく地理座標系または投影座標系のSRIDを検索します。

proj_method_id

投影方法のID値。この投影方法に基づく投影座標系のSRIDを検索します。

proj_op_id

投影操作のID値。この投影操作に基づく投影座標系のSRIDを検索します。投影操作は、特定の投影パラメータと組み合された投影方法です。

coord_ref_sys_kind

座標系の種類またはカテゴリ。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のCOORD_REF_SYS_KIND列の文字列値である必要があります。例: GEOGRAPHIC2DおよびPROJECTED

semi_major_axis

半長径のID値。coord_ref_sys_kindパラメータの値に応じて、この半長径に基づく地理座標系または投影座標系のSRIDを検索します。

semi_minor_axis

半短径のID値。coord_ref_sys_kindパラメータの値に応じて、この半短径に基づく地理座標系または投影座標系のSRIDを検索します。

inv_flattening

逆フラット化(単位は「unity」)。coord_ref_sys_kindパラメータの値に応じて、この逆フラット化に基づく地理座標系または投影座標系のSRIDを検索します。

params

投影パラメータ。このパラメータは、投影方法に基づきます。EPSG_PARAMSタイプはVARRAY(1048576) OF EPSG_PARAMとして定義され、EPSG_PARAMタイプは(id NUMBER, val NUMBER, uom NUMBER)として定義されます。次の例に示すように、この書式にはパラメータID、値、測定単位IDの属性が含まれます。

epsg_params(
epsg_param(8801,      0.0,    9102),
epsg_param(8802,      9.0,    9102),
epsg_param(8805,      0.9996, 9201),
epsg_param(8806, 500000.0,    9001),
epsg_param(8807,      0.0,    9001));

max_rel_num_difference

座標参照系を一致対象にする場合、WKT値がどの程度一致する必要があるかを示す数値を指定します。デフォルト値は0.000001です。WKT項目の各数値は、参照SRIDのWKT内の対応する値と比較されるか、このプロシージャで指定するパラメータのリスト内の対応する値と比較されます。すべてのケースで差がmax_rel_num_differenceの値以下の場合は、この座標参照系のSRIDが結果に含まれます。

使用上の注意

このプロシージャは、操作の結果をsrid出力パラメータに格納します。結果は、SRID値(数値)またはNULL値のいずれかです。

このプロシージャには、主に次の使用方法があります。

- 特定のSRID値を持つ座標系が存在するかどうかを確認します。この場合、epsg_srid_geog(地理座標系の場合)またはepsg_srid_proj(投影座標系の場合)に値を指定し、有効なPL/SQL文を作成するのに十分な数のパラメータを指定します。指定した値と結果のsridパラメータの値が同じ場合は、そのSRID値を持つ座標系が存在します。結果のsridパラメータの値がNULLの場合は、そのSRID値を持つ座標系は存在しません。

- 指定した情報に基づく座標系のSRID値を検索します。

入力パラメータで指定した基準に一致する座標系が複数ある場合も、sridパラメータには1つのSRID値のみが戻されます。この値は、一致している可能性のあるSRID値うちのいずれの値になる可能性もあり、同じ入力パラメータを指定して、後でこのプロシージャを実行しても、同じ値が得られる保証はありません。

例

次の例では、定義にデータID6267を使用する投影座標系のSRID値を検索します。

DECLARE
returned_srid  NUMBER;
BEGIN
SDO_CS.FIND_SRID (
srid               => returned_srid,
epsg_srid_geog     => null,
epsg_srid_proj     => null,
datum_id           => 6267,
ellips_id          => null,
pm_id              => null,
proj_method_id     => null,
proj_op_id         => null,
coord_ref_sys_kind => 'PROJECTED');
DBMS_OUTPUT.PUT_LINE('SRID = ' || returned_srid);
END;
/
SRID = 4267

SDO_CS.FROM_OGC_SIMPLEFEATURE_SRS

構文

SDO_CS.FROM_OGC_SIMPLEFEATURE_SRS(

wkt IN VARCHAR2) RETURN VARCHAR2;

説明

well-knownテキスト文字列をTOWGS84キーワードのないOpen Geospatial Consortiumのシンプル・フィーチャ形式からTOWGS84キーワードを含む形式に変換します。

パラメータ

wkt

well-knownテキスト文字列を指定します。

使用上の注意

well-knownテキスト文字列をTOWGS84キーワードを含むOpen Geospatial Consortiumのシンプル・フィーチャ形式からTOWGS84キーワードのない形式に変換するには、SDO_CS.TO_OGC_SIMPLEFEATURE_SRSファンクションを使用します。

例

次の例では、well-knownテキスト文字列をTOWGS84キーワードのないOpen Geospatial Consortiumのシンプル・フィーチャ形式からTOWGS84キーワードを含む形式に変換します。

SELECT sdo_cs.from_OGC_SimpleFeature_SRS('GEOGCS [ "Longitude / Latitude (DHDN)",
DATUM ["", SPHEROID ["Bessel 1841", 6377397.155, 299.1528128],
582.000000, 105.000000, 414.000000, -1.040000, -0.350000, 3.080000, 8.300000 ],
PRIMEM [ "Greenwich", 0.000000 ], UNIT ["Decimal Degree", 0.01745329251994330]]')
FROM DUAL;

MDSYS.SDO_CS.FROM_OGC_SIMPLEFEATURE_SRS('GEOGCS["LONGITUDE/LATITUDE(DHDN)",DATUM
--------------------------------------------------------------------------------
GEOGCS [ "Longitude / Latitude (DHDN)", DATUM ["", SPHEROID ["Bessel 1841", 6377
397.155, 299.1528128], TOWGS84[ 582.000000, 105.000000, 414.000000, -1.040000, -
0.350000, 3.080000, 8.300000]], PRIMEM [ "Greenwich", 0.000000 ], UNIT ["Decimal
Degree", 0.01745329251994330]]

SDO_CS.FROM_USNG

構文

SDO_CS.FROM_USNG(

usng IN VARCHAR2,

srid IN NUMBER,

datum IN VARCHAR2 DEFAULT 'NAD83') RETURN SDO_GEOMETRY;

説明

U.S. National Grid形式で表される点を空間点ジオメトリ・オブジェクトに変換します。

パラメータ

usng

well-knownテキスト文字列を指定します。

srid

変換に使用する座標系のSRID(戻されるジオメトリで使用するSRID)を指定します。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

datum

点のU.S. National Grid座標がベースとするデータの名前を指定します。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_NAME列の値またはNULLのいずれかである必要があります。デフォルト値はNAD83です。

使用上の注意

Oracle SpatialでサポートされるU.S. National Gridの詳細は、6.11項を参照してください。

空間点ジオメトリをU.S. National Grid形式で表される点に変換するには、SDO_CS.TO_USNGファンクションを使用します。

例

次の例では、U.S. National Grid形式で表される点を、経度/緯度座標の付いた空間ジオメトリの点オブジェクトに変換します。

-- Convert US National Grid point to SDO_GEMETRY point using SRID 4326
-- (WGS 84, longitude/latitude).
SELECT SDO_CS.FROM_USNG(
'18SUJ2348316806479498',
4326) FROM DUAL;

WGS84(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(-77.03524, 38.8894673, NULL), NULL, NULL)

SDO_CS.GET_EPSG_DATA_VERSION

構文

SDO_CS.GET_EPSG_DATA_VERSION() RETURN VARCHAR2;

説明

Spatialによって使用されるEPSGデータセットのバージョン番号を取得します。

パラメータ

なし。

使用上の注意

EPSGデータセットは、European Petroleum Survey Groupから提供されており、Microsoft Access 97データベース形式およびSQLスクリプトとして配布されています。

例

次の例では、Spatialによって使用されるEPSGデータセットのバージョン番号を取得します。

SELECT SDO_CS.GET_EPSG_DATA_VERSION FROM DUAL;

GET_EPSG_DATA_VERSION
-------------------------------------------------------------------------------
6.5

SDO_CS.MAKE_2D

構文

SDO_CS.MAKE_2D(

geom3d IN SDO_GEOMETRY,

target_srid IN NUMBER DEFAULT NULL) RETURN SDO_GEOMETRY;

説明

3次元のジオメトリを2次元のジオメトリに変換します。

パラメータ

geom3d

3次元のジオメトリ・オブジェクトを指定します。

target_srid

ターゲット座標参照系のSRIDを指定します。この値は、NULLまたはSDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

使用上の注意

このファンクションは、入力ジオメトリの各頂点から3番目の次元値(高さ)を削除した2次元のジオメトリ・オブジェクトを戻します。

3次元の座標参照系の詳細は、6.5項を参照してください。

例

次の例では、3番目の次元値(高さ)をすべて削除して、3次元のジオメトリを2次元のジオメトリに変換します。(この例では、SDO_CS.MAKE_3Dファンクションの例からの出力ジオメトリを入力ジオメトリとして使用します。)

SELECT SDO_CS.MAKE_2D(SDO_GEOMETRY(3003, 8307, NULL,
SDO_ELEM_INFO_ARRAY(1, 1003, 1),
SDO_ORDINATE_ARRAY(1, 1, 10, 5, 1, 10, 5, 7, 10, 1, 7, 10, 1, 1, 10)))
FROM DUAL;

SDO_CS.MAKE_2D(SDO_GEOMETRY(3003,8307,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(1, 1, 5, 1, 5, 7, 1, 7, 1, 1))

SDO_CS.MAKE_3D

構文

SDO_CS.MAKE_3D(

geom2d IN SDO_GEOMETRY,

height IN NUMBER DEFAULT 0,

target_srid IN NUMBER DEFAULT NULL) RETURN SDO_GEOMETRY;

説明

2次元のジオメトリを3次元のジオメトリに変換します。

パラメータ

geom2d

2次元のジオメトリ・オブジェクトを指定します。

height

戻されたジオメトリ内のすべての頂点に対して、3番目の次元で使用される高さの値を指定します。このパラメータがNULLであるか、または指定されていない場合は、すべての頂点に対して高さ0(ゼロ)が使用されます。

target_srid

ターゲット座標参照系のSRIDを指定します。この値は、NULLまたはSDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

使用上の注意

このファンクションを使用して、次元間での変換をシミュレートする方法については、6.5.4項を参照してください。

3次元の座標参照系の詳細は、6.5項を参照してください。

例

次の例では、cola_aの2次元ジオメトリを3次元ジオメトリに変換します。(例では、6.13項の例の定義を使用しています。)

SELECT SDO_CS.MAKE_3D(c.shape, 10, 8307) FROM cola_markets_cs c
WHERE c.name = 'cola_a';

SDO_CS.MAKE_3D(C.SHAPE,10,8307)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELE
--------------------------------------------------------------------------------
SDO_GEOMETRY(3003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(1, 1, 10, 5, 1, 10, 5, 7, 10, 1, 7, 10, 1, 1, 10))

SDO_CS.MAP_EPSG_SRID_TO_ORACLE

構文

SDO_CS.MAP_EPSG_SRID_TO_ORACLE(

epsg_srid IN NUMBER) RETURN NUMBER;

説明

指定したEPSG SRID値に対応するOracle Spatial SRID値を戻します。

パラメータ

epsg_srid

EPSG座標参照系のSRIDを指定します。EPSG座標参照系表のCOORD_REF_SYS_CODEフィールドに示されます。

使用上の注意

このファンクションは、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値に一致する値を戻します。

指定したOracle Spatial SRID値に対応するEPSG SRID値を戻すには、SDO_CS.MAP_ORACLE_SRID_TO_EPSGファンクションを使用します。

例

次の例では、EPSG SRID 23038に対応するOracle Spatial SRID値を戻します。

SELECT SDO_CS.MAP_EPSG_SRID_TO_ORACLE(23038) FROM DUAL;

SDO_CS.MAP_EPSG_SRID_TO_ORACLE(23038)
-------------------------------------
82361

SDO_CS.MAP_ORACLE_SRID_TO_EPSG

構文

SDO_CS.MAP_ORACLE_SRID_TO_EPSG(

legacy_srid IN NUMBER) RETURN NUMBER;

説明

指定したOracle Spatial SRID値に対応するEPSG SRID値を戻します。

パラメータ

legacy_srid

Oracle Spatial SRID値を指定します。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のLEGACY_CODE列の値と一致する必要があります。

使用上の注意

このファンクションは、EPSG座標参照系のSRIDを戻します。座標参照系のEPSG SRID値は、EPSG座標参照系表のCOORD_REF_SYS_CODEフィールドに示されます。

指定したEPSG SRID値に対応するOracle Spatial SRID値を戻すには、SDO_CS.MAP_EPSG_SRID_TO_ORACLEファンクションを使用します。

例

次の例では、Oracle Spatial SRID 82361に対応するEPSG SRID値を戻します。

SELECT SDO_CS.MAP_ORACLE_SRID_TO_EPSG(82361) FROM DUAL;

SDO_CS.MAP_ORACLE_SRID_TO_EPSG(82361)
-------------------------------------
23038

SDO_CS.REVOKE_PREFERENCE_FOR_OP

構文

SDO_CS.REVOKE_PREFERENCE_FOR_OP(

op_id IN NUMBER,

source_crs IN NUMBER DEFAULT NULL,

target_crs IN NUMBER DEFAULT NULL,

use_case IN VARCHAR2 DEFAULT NULL);

説明

ソース座標系とターゲット座標系の間での操作のプリファレンスを取り消します。

パラメータ

op_id

操作のID番号を指定します。この値は、SDO_CS.ADD_PREFERENCE_FOR_OPプロシージャへのコールで指定したop_id値と一致する必要があります。

source_crs

ソース座標参照系のSRIDを指定します。この値は、SDO_CS.ADD_PREFERENCE_FOR_OPプロシージャへのコールで指定したsource_crs、target_crsおよびuse_caseの組合せのsource_crs値と一致する必要があります。

target_crs

ターゲット座標参照系のSRIDを指定します。SDO_CS.ADD_PREFERENCE_FOR_OPプロシージャへのコールで指定したsource_crs、target_crsおよびuse_caseの組合せのtarget_crs値と一致する必要があります。

use_case

このプリファレンスに関連付けられたユースケースの名前を指定します。SDO_CS.ADD_PREFERENCE_FOR_OPプロシージャへのコールで指定したsource_crs、target_crsおよびuse_caseの組合せのuse_case値と一致する必要があります。

使用上の注意

このプロシージャは、SDO_CS.ADD_PREFERENCE_FOR_OPプロシージャの効果とは逆になります。

use_caseがNULLの場合、このプロシージャはSDO_PREFERRED_OPS_SYSTEM表(6.7.24項を参照)から1つ以上の行を削除します。use_caseがNULL以外の場合、このプロシージャはSDO_PREFERRED_OPS_USER表(6.7.25項を参照)から1つ以上の行を削除します。

例

次の例では、ユースケースuse_case_Bが変換の対象に指定されている場合に、SRID 4301からSRID 4326への変換で使用する操作ID 19777のプリファレンスを取り消します。

EXECUTE SDO_CS.REVOKE_PREFERENCE_FOR_OP(19977, 4301, 4326, 'use_case_B');

SDO_CS.TO_OGC_SIMPLEFEATURE_SRS

構文

SDO_CS.TO_OGC_SIMPLEFEATURE_SRS(

wkt IN VARCHAR2) RETURN VARCHAR2;

説明

well-knownテキスト文字列を、TOWGS84キーワードを含むOpen Geospatial Consortiumのシンプル・フィーチャ形式からTOWGS84キーワードのない形式に変換します。

パラメータ

wkt

well-knownテキスト文字列を指定します。

使用上の注意

well-knownテキスト文字列をTOWGS84キーワードのないOpen Geospatial Consortiumのシンプル・フィーチャ形式からTOWGS84キーワードを含む形式に変換するには、SDO_CS.FROM_OGC_SIMPLEFEATURE_SRSプロシージャを使用します。

例

次の例では、well-knownテキスト文字列をTOWGS84キーワードを含むOpen Geospatial Consortiumのシンプル・フィーチャ形式からTOWGS84キーワードのない形式に変換します。

SELECT sdo_cs.to_OGC_SimpleFeature_SRS('GEOGCS [ "Longitude / Latitude (DHDN)",
DATUM ["", SPHEROID ["Bessel 1841", 6377397.155, 299.1528128],
TOWGS84 [582.000000, 105.000000, 414.000000, -1.040000, -0.350000, 3.080000,
8.300000] ],
PRIMEM [ "Greenwich", 0.000000 ], UNIT ["Decimal Degree", 0.01745329251994330]]')
FROM DUAL;

MDSYS.SDO_CS.TO_OGC_SIMPLEFEATURE_SRS('GEOGCS["LONGITUDE/LATITUDE(DHDN)",DATUM["
--------------------------------------------------------------------------------
GEOGCS [ "Longitude / Latitude (DHDN)", DATUM ["", SPHEROID ["Bessel 1841", 6377
397.155, 299.1528128], 582.000000, 105.000000, 414.000000, -1.040000, -0.350000,
3.080000, 8.300000 ], PRIMEM [ "Greenwich", 0.000000 ], UNIT ["Decimal Degree",
0.01745329251994330]]

SDO_CS.TO_USNG

構文

SDO_CS.TO_USNG(

geom IN SDO_GEOMETRY,

accuracy_in_meters IN NUMBER,

datum IN VARCHAR2 DEFAULT 'NAD83') RETURN VARCHAR2;

説明

空間点ジオメトリ・オブジェクトをU.S. National Grid形式で表される点に変換します。

パラメータ

geom

表現をU.S. National Grid形式で表される点に変換する点ジオメトリを指定します。入力ジオメトリには、NULL以外の有効なSRID(SDO_COORD_REF_SYS表のSRID列の値)を指定する必要があります(6.7.9項を参照)。

accuracy_in_meters

点の位置の精度をm単位で指定します。負または正の方向に10の累乗単位で指定します(0.001、0.01、0.1、1、10、100、1000など)。これ以外の値を指定すると、Spatialによって内部調節されるため、結果が予想した値と異なることがあります。

datum

点のU.S. National Grid座標がベースとするデータの名前を指定します。NAD83またはNAD27のいずれかを指定する必要があります。デフォルト値はNAD83です。

使用上の注意

Oracle SpatialでサポートされるU.S. National Gridの詳細は、6.11項を参照してください。

accuracy_in_meters値は、戻されるU.S. National Grid文字列の精度を表すために使用される桁数に影響を与えます。たとえば、0.000001を指定すると、文字列の桁数は多くなりますが、データのソースによっては、この桁が実際の地理を正確に反映しないことがあります。次の例を考えてみます。UTMジオメトリからU.S. National Grid文字列を作成すると、不正確な変換は伴わないため、完全な精度が得られます。ただし、Lambert投影からU.S. National Grid形式への変換には、逆のLambert投影と前方UTM投影が伴うため、各投影が不正確になることがあります。戻されるU.S. National Grid文字列で1mm(0.001)の精度を求める場合は、この文字列にすべての桁が含まれますが、mmの桁の部分は正確な地理を反映しない可能性があります。

U.S. National Grid形式で表される点を空間点ジオメトリに変換するには、SDO_CS.FROM_USNGファンクションを使用します。

例

次の例では、経度/緯度座標の付いた空間ジオメトリの点オブジェクトを、0.001m(1mm)の精度を使用するU.S. National Grid形式で表される点に変換します。

-- Convert longitude/latitude (WGS 84) point to US National Grid.
SELECT SDO_CS.TO_USNG(
SDO_GEOMETRY(2001, 4326,
SDO_POINT_TYPE(-77.0352402158258, 38.8894673086544, NULL),
NULL, NULL),
0.001) FROM DUAL;

SDO_CS.TO_USNG(SDO_GEOMETRY(2001,4326,SDO_POINT_TYPE(-77.0352402158258,38.889467
--------------------------------------------------------------------------------
18SUJ2348316806479498

SDO_CS.TRANSFORM

構文

SDO_CS.TRANSFORM(

geom IN SDO_GEOMETRY,

to_srid IN NUMBER

) RETURN SDO_GEOMETRY;

または

SDO_CS.TRANSFORM(

geom IN SDO_GEOMETRY,

to_srname IN VARCHAR2

) RETURN SDO_GEOMETRY;

または

SDO_CS.TRANSFORM(

geom IN SDO_GEOMETRY,

use_case IN VARCHAR2,

to_srid IN NUMBER

) RETURN SDO_GEOMETRY;

または

SDO_CS.TRANSFORM(

geom IN SDO_GEOMETRY,

use_plan IN TFM_PLAN

) RETURN SDO_GEOMETRY;

説明

座標系(SRIDまたは名前で指定)を使用してジオメトリ表現を変換します。

変換にユースケースまたは変換計画を関連付けることもできます。

パラメータ

geom

他の座標系を使用して表現を変換するジオメトリを指定します。入力ジオメトリには、NULL以外の有効なSRID(SDO_COORD_REF_SYS表のSRID列の値)を指定する必要があります(6.7.9項を参照)。

to_srid

変換に使用する座標系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

to_srname

変換に使用する座標系の名前を指定します。この値は、SDO_COORD_REF_SYS表(6.7.9項を参照)のCOORD_REF_SYS_NAME列の正確に指定された値である必要があります。

use_case

この変換に関連付けるユースケースの名前を指定します。文字列USE_SPHERICALを指定すると、変換は楕円体の計算ではなく球体の計算を使用するので、対応するGoogle Mapsおよびその他のサード・パーティのツールは球体の計算に基づいた投影を使用することになります。ユースケースの詳細は、6.4項を参照してください。Google Mapsに関する考慮事項は6.12項を参照してください。

use_plan

変換計画を指定します。TFM_PLANオブジェクト型の詳細は、6.6項を参照してください。

使用上の注意

変換は、2つの異なる地形参照座標系間または2つの異なるローカル座標系間のみで実行できます。

使用する座標系の種類に関係なく、円および円弧の変換はサポートされていません。

geom、to_sridまたはto_srnameが無効な場合は例外が発生します。このファンクションに有効なgeomは、その定義にSDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値と一致するSRIDの値が含まれている必要があります。

例

次の例では、cola_cジオメトリを、SRID値8199を使用する表現に変換します。(例では、6.13項の例の定義を使用しています。)

-- Return the transformation of cola_c using to_srid 8199
-- ('Longitude / Latitude (Arc 1950)')
SELECT c.name, SDO_CS.TRANSFORM(c.shape, 8199)
FROM cola_markets_cs c WHERE c.name = 'cola_c';

NAME
--------------------------------
SDO_CS.TRANSFORM(C.SHAPE,8199)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM
--------------------------------------------------------------------------------
cola_c
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3.00074114, 3.00291482, 6.00067068, 3.00291287, 6.0006723, 5.00307625, 4.0007
1961, 5.00307838, 3.00074114, 3.00291482))

-- Same as preceding, but using to_srname parameter.
SELECT c.name, SDO_CS.TRANSFORM(c.shape, 'Longitude / Latitude (Arc 1950)')
FROM cola_markets_cs c  WHERE c.name = 'cola_c';

NAME
--------------------------------
SDO_CS.TRANSFORM(C.SHAPE,'LONGITUDE/LATITUDE(ARC1950)')(SDO_GTYPE, SDO_SRID, SDO
--------------------------------------------------------------------------------
cola_c
SDO_GEOMETRY(2003, 8199, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3.00074114, 3.00291482, 6.00067068, 3.00291287, 6.0006723, 5.00307625, 4.0007
1961, 5.00307838, 3.00074114, 3.00291482))

SDO_CS.TRANSFORM_LAYER

構文

SDO_CS.TRANSFORM_LAYER(

table_in IN VARCHAR2,

column_in IN VARCHAR2,

table_out IN VARCHAR2,

to_srid IN NUMBER);

または

SDO_CS.TRANSFORM_LAYER(

table_in IN VARCHAR2,

column_in IN VARCHAR2,

table_out IN VARCHAR2,

use_plan IN TFM_PLAN);

または

SDO_CS.TRANSFORM_LAYER(

table_in IN VARCHAR2,

column_in IN VARCHAR2,

table_out IN VARCHAR2,

use_case IN VARCHAR2,

to_srid IN NUMBER);

説明

ジオメトリのレイヤー全体(表内の指定した列に含まれるすべてのジオメトリ)を変換します。

パラメータ

table_in

ジオメトリを変換するレイヤー(column_in)を含む表を指定します。

column_in

変換するジオメトリを含む、table_inの列を指定します。

table_out

変換の結果作成される表で、変換結果を含みます。この表の形式については、「使用上の注意」を参照してください。

to_srid

変換に使用する座標系のSRIDを指定します。to_sridは、SDO_COORD_REF_SYS表(6.7.9項を参照)のSRID列の値である必要があります。

use_plan

変換計画を指定します。TFM_PLANオブジェクト型の詳細は、6.6項を参照してください。

use_case

変換を実行する際に変換ルールを適用するユースケースの名前を指定します。ユースケースの詳細は、6.4項を参照してください。

使用上の注意

変換は、2つの異なる地形参照座標系間または2つの異なるローカル座標系間のみで実行できます。

次の場合に例外が発生します。

- table_inが存在しない、または表にcolumn_inが存在しない場合

- column_inのジオメトリのSDO_SRID値がNULLまたは無効である場合

- table_outがすでに存在する場合

- to_sridが無効な場合

table_out表は、プロシージャによって作成され、変換したジオメトリごとに1行書き込まれます。この表には、表21-2に示す列があります。

表21-2 変換したレイヤーを格納する表

列名

データ型

説明

SDO_ROWID

ROWID

Oracle ROWID(行アドレス識別子)です。ROWIDデータ型については、『Oracle Database SQL言語リファレンス』を参照してください。

GEOMETRY

SDO_GEOMETRY

(to_sridパラメータで)指定した座標系に座標値を持つジオメトリ・オブジェクトです。

例

次の例では、COLA_MARKETS_CS表のshape列のジオメトリをSRID値8199を使用する表現に変換します。変換されたジオメトリは、新しく作成されたCOLA_MARKETS_CS_8199表に格納されます。(例では、6.13項の例の定義を使用しています。)

-- Transform the entire SHAPE layer and put results in the table
-- named cola_markets_cs_8199, which the procedure will create.
CALL SDO_CS.TRANSFORM_LAYER('COLA_MARKETS_CS','SHAPE','COLA_MARKETS_CS_8199',8199);

6.13項の例6-18は、COLA_MARKETS_CSおよびCOLA_MARKETS_CS_8199の両方の表のジオメトリ・オブジェクトの座標表示を含みます。

SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS

構文

SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS();

説明

すべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

パラメータ

なし。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、6.8.1.3項を参照してください。

例

次の例では、すべてのEPSG座標参照系のWKTの説明を更新します。

EXECUTE SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS;
Updating SRID 4001...
Updating SRID 4002...
Updating SRID 4003...
. . .
Updating SRID 69036405...
Updating SRID 69046405...

SDO_CS.UPDATE_WKTS_FOR_EPSG_CRS

構文

SDO_CS.UPDATE_WKTS_FOR_EPSG_CRS(

srid IN NUMBER);

説明

指定したSRIDに関連付けられたEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

パラメータ

srid

well-knownテキスト(WKT)の説明を更新する座標系のSRIDを指定します。指定する値のエントリは、SDO_COORD_REF_SYS表(6.7.9項を参照)に含まれている必要があります。

使用上の注意

このプロシージャは、指定したSRIDおよびすべての依存SRIDのWKTの説明を更新します。たとえば、SRID 4326 (WGS84測地座標系)の場合、この測地座標系を使用するすべてのEPSG座標系が更新されます。

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、6.8.1.3項を参照してください。

例

次の例では、SRID 4326に関連付けられたEPSG座標参照系のWKTの説明を更新します。

EXECUTE SDO_CS.UPDATE_WKTS_FOR_EPSG_CRS(4326);

SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUM

構文

SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUM(

datum_id IN NUMBER);

説明

指定したデータに関連付けられたすべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

パラメータ

datum_id

データのIDを指定します。この値は、SDO_DATUMS表(6.7.22項を参照)のDATUM_ID列の値と一致する必要があります。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、6.8.1.3項を参照してください。

例

次の例では、データ5100に関連付けられたすべてのEPSG座標参照系のWKTの説明を更新します。

EXECUTE SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUM(5100);
Updating SRID 5714...
Updating SRID 5715...

SDO_CS.UPDATE_WKTS_FOR_EPSG_ELLIPS

構文

SDO_CS.UPDATE_WKTS_FOR_EPSG_ELLIPS(

ellipsoid_id IN NUMBER);

説明

指定した楕円体に関連付けられたすべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

パラメータ

ellipsoid_id

楕円体のIDを指定します。この値は、SDO_ELLIPSOIDS表(6.7.23項を参照)のELLIPSOID_ID列の値と一致する必要があります。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、6.8.1.3項を参照してください。

例

次の例では、楕円体7100に関連付けられたすべてのEPSG座標参照系のWKTの説明を更新します。

EXECUTE SDO_CS.UPDATE_WKTS_FOR_EPSG_ELLIPS(7001);
Updating SRID 4001...
Updating SRID 4188...
Updating SRID 29901...
Updating SRID 61886405...
Updating SRID 4277...
Updating SRID 27700...
Updating SRID 62776405...
Updating SRID 4278...
Updating SRID 62786405...
Updating SRID 4279...
Updating SRID 62796405...

SDO_CS.UPDATE_WKTS_FOR_EPSG_OP

構文

SDO_CS.UPDATE_WKTS_FOR_EPSG_OP(

coord_op_id IN NUMBER);

説明

指定した座標変換操作に関連付けられたすべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

パラメータ

coord_op_id

座標変換操作のSRIDのIDを指定します。この値は、SDO_COORD_OP_PARAM_VALS表(6.7.5項を参照)のCOORD_OP_ID列の値と一致する必要があります。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、6.8.1.3項を参照してください。

例

次の例では、座標変換操作2000067に関連付けられたすべてのEPSG座標参照系のWKTの説明を更新します。

EXECUTE SDO_CS.UPDATE_WKTS_FOR_EPSG_OP(2000067);
Updating SRID 20000671...

SDO_CS.UPDATE_WKTS_FOR_EPSG_PARAM

構文

SDO_CS.UPDATE_WKTS_FOR_EPSG_PARAM(

coord_op_id IN NUMBER,

parameter_id IN NUMBER);

説明

指定した座標変換操作と変換操作のパラメータに関連付けられたすべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

パラメータ

coord_op_id

座標変換操作のSRIDのIDを指定します。この値は、SDO_COORD_OP_PARAM_VALS表(6.7.5項を参照)のCOORD_OP_ID列の値と一致する必要があります。

parameter_id

変換操作のパラメータのSRIDのIDを指定します。この値は、SDO_COORD_OP_PARAM_VALS表(6.7.5項を参照)のPARAMETER_ID列の値と一致する必要があります。COORD_OP_ID列の値は、coord_op_idパラメータ値と同じです。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、6.8.1.3項を参照してください。

例

次の例では、座標変換操作9601とパラメータ8602に関連付けられたすべてのEPSG座標参照系のWKTの説明を更新します。

EXECUTE SDO_CS.UPDATE_WKTS_FOR_EPSG_PARAM(9601, 8602);

SDO_CS.UPDATE_WKTS_FOR_EPSG_PM

構文

SDO_CS.UPDATE_WKTS_FOR_EPSG_PM(

prime_meridian_id IN NUMBER);

説明

指定した本初子午線に関連付けられたすべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

パラメータ

prime_meridian_id

本初子午線のIDを指定します。この値は、SDO_PRIME_MERIDIANS表(6.7.26項を参照)のPRIME_MERIDIAN_ID列の値と一致する必要があります。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、6.8.1.3項を参照してください。

例

次の例では、本初子午線8902に関連付けられたすべてのEPSG座標参照系のWKTの説明を更新します。

EXECUTE SDO_CS.UPDATE_WKTS_FOR_EPSG_PM(8902);
Updating SRID 4803...
Updating SRID 20790...
Updating SRID 20791...
Updating SRID 68036405...
Updating SRID 4904...
Updating SRID 2963...
Updating SRID 69046405...

SDO_CS.VALIDATE_WKT

構文

SDO_CS.VALIDATE_WKT(

srid IN NUMBER

) RETURN VARCHAR2;

説明

指定されたSRIDに関連付けられたwell-knownテキスト(WKT)の説明を検査します。

パラメータ

srid

well-knownテキスト(WKT)の説明を検査する座標系のSRIDを指定します。指定する値のエントリは、SDO_COORD_REF_SYS表(6.7.9項を参照)に含まれている必要があります。

使用上の注意

このファンクションは、WKTの説明が有効である場合は文字列「TRUE」を戻します。WKTの説明が無効である場合、このファンクションは「FALSE (<position-number>)」という形式の文字列を戻します。ここで、<position-number>は、WKTの説明内で、最初のエラーが発生した文字の位置の番号です。

WKTの説明が6.8.1.1項に示す要件を満たすかどうかが確認されます。

例

次の例では、SRID 81989000に関連付けられた座標系のWKTの説明を検査します。結果は、無効な状態の原因部分(無効な状態の最初の原因)がWKTの説明内の文字位置181から始まっていることを示しています。(SRID 81989000は、既定の座標系には関連付けられていません。これは、MDSYS.CS_SRS表のテスト・バージョンに挿入された意図的に無効な状態の座標系のためのものであり、Oracle Spatialに付属するMDSYS.CS_SRS表には含まれていません。)

SELECT SDO_CS.VALIDATE_WKT(81989000) FROM DUAL;

SDO_CS.VALIDATE_WKT(81989000)
--------------------------------------------------------------------------------
FALSE (181)

22 SDO_CSW_PROCESSパッケージ(CSWの処理)

MDSYS.SDO_CSW_PROCESSパッケージには、Catalog Services for the Web(CSW)のサポートに関連する各種処理操作を行うサブプログラムが含まれています。

この章で説明するサブプログラムを使用する場合は、Catalog Services for the Webの概念および使用方法を理解しておく必要があります(第16章を参照)。

表22-1にCSW処理のサブプログラムを示します。

表22-1 CSWの処理操作のサブプログラム

サブプログラム

説明

SDO_CSW_PROCESS.DeleteCapabilitiesInfo

SDO_CSW_PROCESS.InsertCapabilitiesInfoプロシージャによって設定されている機能情報を削除します。

SDO_CSW_PROCESS.DeleteDomainInfo

レコード・タイプに関連するドメイン情報を削除します。

SDO_CSW_PROCESS.DeletePluginMap

レコード・タイプの空間コンテンツの処理と抽出を行うプラグインを登録解除します。

SDO_CSW_PROCESS.DeleteRecordViewMap

レコード・ビューの変換に関連する情報を削除します。

SDO_CSW_PROCESS.GetRecordTypeId

(名前空間およびタイプ名で指定された)タイプのレコード・タイプIDを取得します。

SDO_CSW_PROCESS.InsertCapabilitiesInfo

機能テンプレート情報を挿入します。

SDO_CSW_PROCESS.InsertDomainInfo

レコード・タイプに関連するドメイン情報を挿入します。

SDO_CSW_PROCESS.InsertPluginMap

レコード・タイプの空間コンテンツの処理と抽出を行うプラグインを登録します。

SDO_CSW_PROCESS.InsertRecordViewMap

レコード・ビューの変換に関連する情報を挿入します。

SDO_CSW_PROCESS.InsertRtDataUpdated

データベースでレコード・タイプのデータが更新されたことを示す通知を挿入します。

SDO_CSW_PROCESS.InsertRtMDUpdated

データベースでレコード・タイプのメタデータが更新されたことを示す通知を挿入します。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

SDO_CSW_PROCESS.DeleteCapabilitiesInfo

構文

SDO_CSW_PROCESS.DeleteCapabilitiesInfo();

説明

SDO_CSW_PROCESS.InsertCapabilitiesInfoプロシージャによって設定されている機能情報を削除します。

パラメータ

なし。

使用上の注意

Catalog Services for the Webのサポートについては、第16章を参照してください。

例

次の例では、SDO_CSW_PROCESS.InsertCapabilitiesInfoプロシージャによって設定されている機能情報を削除します。

BEGIN
SDO_CSW_PROCESS.DeleteCapabilitiesInfo;
END;
/

SDO_CSW_PROCESS.DeleteDomainInfo

構文

SDO_CSW_PROCESS.DeleteDomainInfo(

recordTypeId IN NUMBER,

propertyName IN VARCHAR2,

parameterName IN VARCHAR2);

説明

レコード・タイプに関連するドメイン情報を削除します。

パラメータ

recordTypeId

レコード・タイプのIDを指定します。

propertyName

プロパティの名前を指定します。

parameterName

削除するドメイン・パラメータの名前を指定します。

使用上の注意

Catalog Services for the Webのサポートについては、第16章を参照してください。

例

次の例では、指定したレコード・タイプのresultTypeパラメータに関するドメイン情報を削除します。

DECLARE
rtId NUMBER;
BEGIN
rtId :=
sdo_csw_process.getRecordTypeId('http://www.opengis.net/cat/csw', 'Record');
sdo_csw_process.deleteDomainInfo(rtId, null, 'GetRecords.resultType');
END;
/

SDO_CSW_PROCESS.DeletePluginMap

構文

SDO_CSW_PROCESS.DeletePluginMap(

rtnsUrl IN VARCHAR2,

rtName IN VARCHAR2);

説明

レコード・タイプのGML形式以外の空間コンテンツの処理と抽出を行うプラグインを登録解除します。

パラメータ

rtnsUrl

レコード・タイプの名前空間のURL(Uniform Resource Locator)を指定します。

rtName

レコード・タイプの名前を指定します。

使用上の注意

プラグイン(extractSDOファンクションのユーザー定義の実装)を登録するには、SDO_CSW_PROCESS.InsertPluginMapプロシージャを使用します。

extractSDOファンクションの作成方法と使用方法については、16.2.2項を参照してください。

Catalog Services for the Webのサポートについては、第16章を参照してください。

例

次の例では、プラグインを登録解除します。

BEGIN
SDO_CSW_PROCESS.deletePluginMap('http://www.opengis.net/cat/csw',
'Record');
END;
/

SDO_CSW_PROCESS.DeleteRecordViewMap

構文

SDO_CSW_PROCESS.DeleteRecordViewMap(

recordTypeNs IN VARCHAR2,

viewSrcName IN VARCHAR2,

targetTypeName IN VARCHAR2);

説明

レコード・ビューの変換に関連する情報を削除します。

パラメータ

recordTypeNs

レコード・タイプの名前空間のURLを指定します。

viewSrcName

ソース・レコード・タイプの名前(BriefRecord、DCMIRecord、Record、SummaryRecordなど)を指定します。

targetTypeName

ターゲット・レコード・タイプの名前(BriefRecord、DCMIRecord、Record、SummaryRecordなど)を指定します。

使用上の注意

Catalog Services for the Webのサポートについては、第16章を参照してください。

例

次の例では、ソース・レコード・タイプBriefRecordおよびターゲット・レコード・タイプRecordからレコード・ビューの変換に関連する情報を削除します。

BEGIN
SDO_CSW_PROCESS.deleteRecordViewMap('http://www.opengis.net/cat/csw',
'BriefRecord',
'Record');
END;
/

SDO_CSW_PROCESS.GetRecordTypeId

構文

SDO_CSW_PROCESS.GetRecordTypeId(

rtnsUrl IN VARCHAR2,

rtName IN VARCHAR2) RETURN NUMBER;

説明

(名前空間およびタイプ名で指定された)タイプのレコード・タイプIDを取得します。

パラメータ

rtnsUrl

レコード・タイプの名前空間のURL(Uniform Resource Locator)を指定します。

rtName

レコード・タイプの名前を指定します。

使用上の注意

Catalog Services for the Webのサポートについては、第16章を参照してください。

例

次の例では、Recordという名前のレコード・タイプのレコード・タイプIDを取得します。

DECLARE
rtId NUMBER;
BEGIN
rtId := SDO_CSW_PROCESS.getRecordTypeId('http://www.opengis.net/cat/csw',
'Record');
END;
/

SDO_CSW_PROCESS.InsertCapabilitiesInfo

構文

SDO_CSW_PROCESS.InsertCapabilitiesInfo(

capabilitiesInfo IN XMLTYPE);

説明

機能テンプレート情報を挿入します。

パラメータ

capabilitiesInfo

機能のドキュメントを生成するために実行時に使用される、機能テンプレートのXML文書を指定します。

使用上の注意

機能のドキュメントは、実行時に、CSWメタデータのフィーチャ・タイプ情報を機能テンプレートとバインディングすることによって動的に生成されます。機能のドキュメントについては、16.2.1項を参照してください。

Catalog Services for the Webのサポートについては、第16章を参照してください。

例

次の例では、機能テンプレート情報を挿入します。

BEGIN
SDO_CSW_PROCESS.insertCapabilitiesInfo(
xmltype(bfilename('CSWUSERDIR', 'cswloadcapabilities.xml'),
nls_charset_id('AL32UTF8')));
END;
/

SDO_CSW_PROCESS.InsertDomainInfo

構文

SDO_CSW_PROCESS.InsertDomainInfo(

recordTypeId IN NUMBER,

propertyName IN VARCHAR2,

parameterName IN VARCHAR2,

pValue IN MDSYS.STRINGLIST);

説明

レコード・タイプに関連するドメイン情報を挿入します。

パラメータ

recordTypeId

レコード・タイプのIDを指定します。

propertyName

ドメイン・プロパティの名前を指定します。

parameterName

ドメイン・パラメータの名前を指定します。

pValue

parameterNameのパラメータ値を格納する文字列の配列を指定します。MDSYS.STRINGLIST型は、VARRAY(1000000) OF VARCHAR2(4000)として定義されます。

使用上の注意

Catalog Services for the Webのサポートについては、第16章を参照してください。

例

次の例では、Recordという名前のレコード・タイプのドメイン情報を挿入します。

DECLARE
rtId NUMBER;
BEGIN
rtId := SDO_CSW_PROCESS.getRecordTypeId(
'http://www.opengis.net/cat/csw', 'Record');
SDO_CSW_PROCESS.insertDomainInfo(rtId,
null,
'GetRecords.resultType',
MDSYS.STRINGLIST('hits', 'results', 'validate'));
END;
/

SDO_CSW_PROCESS.InsertPluginMap

構文

SDO_CSW_PROCESS.InsertPluginMap(

rtnsUrl IN VARCHAR2,

rtName IN VARCHAR2,

pluginPackageName IN VARCHAR2);

説明

レコード・タイプのGML形式以外の空間コンテンツの処理と抽出を行うプラグインを登録します。

パラメータ

rtnsUrl

レコード・タイプの名前空間のURL(Uniform Resource Locator)を指定します。

rtName

レコード・タイプの名前を指定します。

pluginPackageName

プラグインのPL/SQLパッケージ・オブジェクトの名前を指定します。

使用上の注意

プラグインには、extractSDOファンクションのユーザー定義の実装が含まれている必要があります。プラグインは、レコードがGML形式ではない場合に必要となります。extractSDOファンクションの作成方法と使用方法の詳細は、16.2.2項を参照してください。

プラグイン・パッケージ(pluginPackageNameパラメータ)に対するEXECUTEアクセス権限を、ユーザーMDSYSおよびCSW管理ユーザーに付与する必要があります。

Catalog Services for the Webのサポートについては、第16章を参照してください。

例

次の例では、プラグインを登録します。

BEGIN
SDO_CSW_PROCESS.insertPluginMap('http://www.opengis.net/cat/csw',
'Record', 'csw_admin_usr.csw_RT_1_package');
END;
/

SDO_CSW_PROCESS.InsertRecordViewMap

構文

SDO_CSW_PROCESS.InsertRecordViewMap(

recordTypeNs IN VARCHAR2,

viewSrcName IN VARCHAR2,

targetTypeName IN VARCHAR2,

mapInfo IN XMLTYPE,

mapType IN VARCHAR2);

説明

レコード・ビューの変換に関連する情報を挿入します。

パラメータ

recordTypeNs

レコード・タイプの名前空間のURLを指定します。

viewSrcName

ソース・レコード・タイプの名前(BriefRecord、DCMIRecord、Record、SummaryRecordなど)を指定します。

targetTypeName

ターゲット・レコード・タイプの名前(BriefRecord、DCMIRecord、Record、SummaryRecordなど)を指定します。

mapInfo

マッピングのXSLT定義を指定します。(BriefRecordタイプからRecordタイプへの変換については、この項の最後にある例のコメントを参照してください。)

mapType

マップ・タイプ(brief、summaryなど)を指定します。

使用上の注意

Catalog Services for the Webのサポートについては、第16章を参照してください。

例

次の例では、BriefRecordタイプからRecordタイプへの変換に関連する情報を挿入します。

create or replace directory CSWUSERDIR as 'dir_path_where_mapinfo.xsl_file_is_located' ;

/*
// Content of  mapinfo.xsl could be that which transforms
// all <csw:BriefRecord> node  to <csw:Record> node, where csw is
// the namespace alias for "http://www.opengis.net/cat/csw"

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:csw="http://www.opengis.net/cat/csw">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />

<xsl:template match="/">
<csw:Record xmlns:csw="http://www.opengis.net/cat/csw" xmlns:dc="http://www.purl.org/dc/elements/1.1/" xmlns:ows="http://www.opengis.net/ows" xmlns:dct="http://www.purl.org/dc/terms/">
<xsl:apply-templates select="@*|node()"/>
</csw:Record>
</xsl:template>

<xsl:template match="csw:BriefRecord">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>
*/

DECLARE
rtId NUMBER;
BEGIN
SDO_CSW_PROCESS.insertRecordViewMap('http://www.opengis.net/cat/csw',
'BriefRecord',
'Record',
xmltype(bfilename('CSWUSERDIR', 'mapinfo.xsl'), nls_charset_id('AL32UTF8')),
'brief');
END;
/

SDO_CSW_PROCESS.InsertRtDataUpdated

構文

SDO_CSW_PROCESS.InsertRtDataUpdated(

ns IN VARCHAR2,

name IN VARCHAR2,

updatedRowList IN ROWPOINTERLIST,

updateTs IN TIMESTAMP);

説明

データベースでレコード・タイプのデータが更新されたことを示す通知を挿入します。

パラメータ

ns

レコード・タイプの名前空間を指定します。

name

レコード・タイプの名前を指定します。

updatedRowList

更新された行の行IDのリストを指定します。

updateTS

データが更新された日時を示すタイムスタンプ値を指定します。

使用上の注意

このプロシージャは、CSWのキャッシュ・データを同期させるために使用します。これは、MDSYS.CSW_RECORD_TYPES$システム表に問合せを行います。

Catalog Services for the Webのサポートについては、第16章を参照してください。

例

次の例では、指定したレコード・タイプについて、特定の行IDに関連付けられている行のデータが更新されたことを示す通知を挿入します。

BEGIN
updatedRowIdList:= . . . -- list of rowIds that have been updated
--  in the table referred to by the dataPointer column of the
--  mdsys.CSW_Record_Types$ table for the row whose
--  typeNameNS column value is 'http://www.opengis.net/cat/csw' and
--  typeName column value is 'Record'
. . .
SDO_CSW_PROCESS.insertRtDataUpdated('http://www.opengis.net/cat/csw',
'Record',  updatedRowIdList, sysdate);
. . .
END;
/

SDO_CSW_PROCESS.InsertRtMDUpdated

構文

SDO_CSW_PROCESS.InsertRtMDUpdated(

ns IN VARCHAR2,

name IN VARCHAR2,

updateTs IN TIMESTAMP);

説明

データベースでレコード・タイプのメタデータが更新されたことを示す通知を挿入します。

パラメータ

ns

レコード・タイプの名前空間を指定します。

name

レコード・タイプの名前を指定します。

updateTS

メタデータが更新された日時を指定します。

使用上の注意

このプロシージャは、WFSのキャッシュ・メタデータを同期させるために使用します。

Catalog Services for the Webのサポートについては、第16章を参照してください。

例

次の例では、データベースでRecordレコード・タイプのメタデータが更新されたことを示す通知を挿入します。

BEGIN
SDO_CSW_PROCESS.insertRtMDUpdated('http://www.opengis.net/cat/csw',
'Record', sysdate);
END;

23 SDO_GCDRパッケージ(ジオコーディング)

MDSYS.SDO_GCDRパッケージには、住所データのジオコーディングを行うサブプログラムが含まれています。

この章で説明するサブプログラムを使用する場合は、ジオコーディングの概念および使用方法を理解しておく必要があります(第11章を参照)。

表23-1にジオコーディング・サブプログラムを示します。

表23-1 住所データのジオコーディングを行うサブプログラム

サブプログラム

説明

SDO_GCDR.CREATE_PROFILE_TABLES

コール元のスキーマにCG_COUNTRY_PROFILE表、GC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表を作成します。

SDO_GCDR.GEOCODE

形式化されていない住所をジオコードして、SDO_GEOR_ADDRオブジェクトを戻します。

SDO_GCDR.GEOCODE_ADDR

SDO_GEO_ADDRオブジェクトの属性を使用して、入力された住所をジオコードし、最初に一致した住所をSDO_GEO_ADDRオブジェクトとして戻します。

SDO_GCDR.GEOCODE_ADDR_ALL

SDO_GEO_ADDRオブジェクトの属性を使用して、入力された住所をジオコードし、一致する住所をSDO_ADDR_ARRAYオブジェクトとして戻します。

SDO_GCDR.GEOCODE_ALL

形式化されていない住所に関連付けられたすべての住所をジオコードして、結果をSDO_ADDR_ARRAYオブジェクトとして戻します。

SDO_GCDR.GEOCODE_AS_GEOMETRY

形式化されていない住所をジオコードして、SDO_GEOMETRYオブジェクトを戻します。

SDO_GCDR.REVERSE_GEOCODE

空間ジオメトリ・オブジェクトと国で指定した位置を逆にジオコードして、SDO_GEO_ADDRオブジェクトを戻します。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

SDO_GCDR.CREATE_PROFILE_TABLES

構文

SDO_GCDR.CREATE_PROFILE_TABLES;

説明

コール元のスキーマにCG_COUNTRY_PROFILE表、GC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表を作成します。

パラメータ

なし。

使用上の注意

このプロシージャは、ジオコーディング・データ・プロバイダがGC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表を提供していない場合にのみ使用します。詳細は、11.6項を参照してください。

例

次の例では、コール元のスキーマにGC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表を作成します。

EXECUTE SDO_GCDR.CREATE_PROFILE_TABLES;

SDO_GCDR.GEOCODE

構文

SDO_GCDR.GEOCODE(

username IN VARCHAR2,

addr_lines IN SDO_KEYWORDARRAY,

country IN VARCHAR2,

match_mode IN VARCHAR2

) RETURN SDO_GEO_ADDR;

説明

形式化されていない住所をジオコードして、結果をSDO_GEO_ADDRオブジェクトとして戻します。

パラメータ

username

ジオコーディングを行うデータを含む表を所有するユーザー名を指定します。

addr_lines

ジオコード対象の形式化されていない住所を表す文字列の配列を、引用符で囲んで指定します。SDO_KEYWORDARRAY型の詳細は、11.2.3項を参照してください。

country

国名またはISOの国コード。

match_mode

ジオコーディング操作の一致モードを指定します。一致モードの詳細は、11.1.2項を参照してください。

使用上の注意

このファンクションは、SDO_GEOR_ADDR型のオブジェクトを戻します(11.2.1項を参照)。実行する操作はSDO_GCDR.GEOCODE_AS_GEOMETRYファンクションと同じですが、そのファンクションはSDO_GEOMETRYオブジェクトを戻します。

例

次の例では、RELAX_BASE_NAME一致モードを使用して、California州San Francisco市の市庁舎の住所をジオコードします。この場合、この住所の緯度と経度の座標が、それぞれ-122.41815および37.7784183として戻されます。

SELECT SDO_GCDR.GEOCODE('SCOTT', SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl',
'San Francisco, CA  94102'), 'US', 'RELAX_BASE_NAME') FROM DUAL;

SDO_GCDR.GEOCODE('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','SANFRANCISCO
--------------------------------------------------------------------------------
SDO_GEO_ADDR(0, SDO_KEYWORDARRAY(), NULL, 'CARLTON B GOODLETT PL', NULL, NULL, '
SAN FRANCISCO', NULL, 'CA', 'US', '94102', NULL, '94102', NULL, '1', 'CARLTON B
GOODLETT', 'PL', 'F', 'F', NULL, NULL, 'L', .01, 23614360, '????#ENUT?B281CP?',
1, 'RELAX_BASE_NAME', -122.41815, 37.7784183, '????0101010??000?')

SDO_GCDR.GEOCODE_ADDR

構文

SDO_GCDR.GEOCODE_ADDR(

gc_username IN VARCHAR2,

address IN SDO_GEO_ADDR

) RETURN SDO_GEO_ADDR;

説明

SDO_GEO_ADDRオブジェクトの属性を使用して、入力された住所をジオコードし、最初に一致した住所をSDO_GEO_ADDRオブジェクトとして戻します。

パラメータ

gc_username

ジオコーディングを行うデータを含む表を所有するユーザー名を指定します。

address

1つ以上の属性セットを持つSDO_GEO_ADDRオブジェクトです。SDO_GEO_ADDR型の詳細は、11.2.1項を参照してください。

使用上の注意

このファンクションでは、入力SDO_GEO_ADDRオブジェクトで設定可能な属性を必要に応じて指定できます。このファンクションは最初に一致する住所を検索し、可能な属性セットをすべて持つSDO_GEO_ADDRオブジェクトを戻します。

形式化されていない住所行で指定した入力住所をジオコードするSDO_GCDR.GEOCODEファンクションとは異なり、SDO_GCDR.GEOCODE_ADDRファンクションは、SDO_GEO_ADDRオブジェクトで定義した個々の住所フィールドで指定した入力住所をジオコードします。形式化されていない住所行を使用する場合、入力された住所を解析して個々の住所フィールドに分解するために、ジオコーディング・ソフトウェアを使用する必要があります。通常、この処理は問題なく実行されますが、入力された住所が十分に形式化されていない場合は、不適切な結果が生成されることがあります。これに対し、入力された住所の一部をSDO_GEO_ADDRオブジェクトの属性として指定すると、ジオコーディング・エラーの発生を減少させ、適切な結果を生成することができます。

SDO_GCDR.GEOCODE_ADDRファンクションの例については、11.4項の例11-2および例11-3を参照してください。

SDO_GCDR.GEOCODE_ADDR_ALLファンクションも参照してください(実行する操作はこのファンクションと同じですが、複数の住所を戻すことができます)。

例

次の例では、CALIFORNIA PACIFIC MEDICAL CTRという名前の対象点のジオコード結果を戻します。ここでは、create_addr_from_placenameという名前のユーザー定義ファンクション(11.4項の例11-2で定義)を使用して入力SDO_GEO_ADDRオブジェクトを作成します。

SELECT sdo_gcdr.geocode_addr('SCOTT',
create_addr_from_placename('CALIFORNIA PACIFIC MEDICAL CTR', 'US'))
FROM DUAL;

SDO_GCDR.GEOCODE_ADDR('SCOTT',CREATE_ADDR_FROM_PLACENAME('CALIFORNIAPACIFICME
--------------------------------------------------------------------------------
SDO_GEO_ADDR(0, SDO_KEYWORDARRAY(), 'CALIFORNIA PACIFIC MEDICAL CTR-SF', 'BUCHAN
AN ST', NULL, NULL, 'SAN FRANCISCO', NULL, 'CA', 'US', '94115', NULL, '94115', N
ULL, '2333', NULL, NULL, 'F', 'F', NULL, NULL, 'L', 0, 23599031, '??????????B281
CP?', 4, 'DEFAULT', -122.43097, 37.79138, '????4141114??404?')

SDO_GCDR.GEOCODE_ADDR_ALL

構文

SDO_GCDR.GEOCODE_ADDR_ALL(

gc_username IN VARCHAR2,

address IN SDO_GEO_ADDR,

max_res_num IN NUMBER DEFAULT 4000

) RETURN SDO_ADDR_ARRAY;

説明

SDO_GEO_ADDRオブジェクトの属性を使用して、入力された住所をジオコードし、一致する住所をSDO_ADDR_ARRAYオブジェクトとして戻します(11.2.2項を参照)。

パラメータ

gc_username

ジオコーディングを行うデータを含む表を所有するユーザー名を指定します。

address

1つ以上の属性セットを持つSDO_GEO_ADDRオブジェクトです。SDO_GEO_ADDR型の詳細は、11.2.1項を参照してください。

max_res_num

SDO_ADDR_ARRAYオブジェクトで戻す結果の最大数を指定します。デフォルト値は4000です。

使用上の注意

このファンクションでは、入力SDO_GEO_ADDRオブジェクトで設定可能な属性を必要に応じて指定できます。このファンクションは一致する住所(最大4000またはmax_res_numパラメータで指定した上限まで)を検索し、SDO_ADDR_ARRAYオブジェクトを戻します。このオブジェクトでは、各ジオコード結果に可能な属性セットがすべて含まれます。

このファンクションは複数の住所を戻すことができますが、それ以外は、SDO_GCDR.GEOCODE_ADDRファンクションと同じ操作を実行します。詳細は、SDO_GCDR.GEOCODE_ADDRファンクションの「使用上の注意」を参照してください。

例

次の例では、CALIFORNIA PACIFIC MEDICAL CTRという名前の対象点のジオコード結果(最大3つ)を戻します。(ジオコーディング・データには、対象点に一致する住所が1つしか含まれないため、この場合に戻される結果は1つのみです。)ここでは、create_addr_from_placenameという名前のユーザー定義ファンクション(11.4項の例11-2で定義)を使用して入力SDO_GEO_ADDRオブジェクトを作成します。

SELECT sdo_gcdr.geocode_addr_all('SCOTT',
create_addr_from_placename('CALIFORNIA PACIFIC MEDICAL CTR', 'US'), 3)
FROM DUAL;

SDO_GCDR.GEOCODE_ADDR_ALL('SCOTT',CREATE_ADDR_FROM_PLACENAME('CALIFORNIAPACIF
--------------------------------------------------------------------------------
SDO_ADDR_ARRAY(SDO_GEO_ADDR(0, SDO_KEYWORDARRAY(), 'CALIFORNIA PACIFIC MEDICAL C
TR-SF', 'BUCHANAN ST', NULL, NULL, 'SAN FRANCISCO', NULL, 'CA', 'US', '94115', N
ULL, '94115', NULL, '2333', NULL, NULL, 'F', 'F', NULL, NULL, 'L', 0, 23599031,
'??????????B281CP?', 4, 'DEFAULT', -122.43097, 37.79138, '????4141114??404?'))

SDO_GCDR.GEOCODE_ALL

構文

SDO_GCDR.GEOCODE_ALL(

gc_username IN VARCHAR2,

addr_lines IN SDO_KEYWORDARRAY,

country IN VARCHAR2,

match_mode IN VARCHAR2

) RETURN SDO_ADDR_ARRAY;

説明

形式化されていない住所に関連付けられたすべての住所をジオコードして、結果をSDO_ADDR_ARRAYオブジェクトとして戻します。

パラメータ

gc_username

ジオコーディングを行うデータを含む表を所有するユーザー名を指定します。

addr_lines

ジオコード対象の形式化されていない住所を表す文字列の配列を、引用符で囲んで指定します。SDO_KEYWORDARRAY型の詳細は、11.2.3項を参照してください。

country

国名またはISOの国コード。

match_mode

ジオコーディング操作の一致モードを指定します。一致モードの詳細は、11.1.2項を参照してください。

使用上の注意

このファンクションは、SDO_ADDR_ARRAY型のオブジェクトを戻します(11.2.2項を参照)。実行する操作はSDO_GCDR.GEOCODEファンクションと同じですが、複数の住所に対する結果を戻すことができます。その場合、戻されるSDO_ADDR_ARRAYオブジェクトには、複数のSDO_GEO_ADDRオブジェクトが含まれます。アプリケーションの他の操作で住所を選択する必要がある場合、戻された各住所の情報を使用して、選択を簡単に行うことができます。

戻されるSDO_ADDR_ARRAY配列の各SDO_GEO_ADDRオブジェクトは、addr_linesパラメータの基準に一致する通りの各セグメントの中心点を示します。たとえば、大通りが2つの郵便番号の地区にまたがっている場合、または2つの別の郵便番号の地区内にそれぞれ大通りと呼ばれる通りがある場合に、このファンクションで大通り、都市および州を指定すると、戻されるSDO_ADDR_ARRAY配列には2つのSDO_GEO_ADDRオブジェクトが含まれます。各オブジェクトには、異なる郵便番号の地区にある大通りの中心点が反映されます。入力された住所に家または建物の番号が含まれていない場合、または存在しない番号が含まれている場合でも、各SDO_GEO_ADDRオブジェクトは家または建物の番号を示します。これは通りのセグメントの中心点に位置する家または建物の番号です。

例

次の例では、ジオコード結果の配列を戻します。各結果には、California州San Francisco市のClay通りを含むすべての郵便番号の地区について、その地区のClay通りの中心点が反映されます。結果の配列には4つのSDO_GEOR_ADDRオブジェクトが含まれます。各オブジェクトには、Clay通りを含む4つの地区の郵便番号(94108、94115、94118および94109)ごとに、Clay通りのセグメントの中心点に位置する家が反映されます。

SELECT SDO_GCDR.GEOCODE_ALL('SCOTT',
SDO_KEYWORDARRAY('Clay St', 'San Francisco, CA'),
'US', 'DEFAULT') FROM DUAL;

SDO_GCDR.GEOCODE_ALL('SCOTT',SDO_KEYWORDARRAY('CLAYST','SANFRANCISCO,CA'),'US
--------------------------------------------------------------------------------
SDO_ADDR_ARRAY(SDO_GEO_ADDR(1, SDO_KEYWORDARRAY(), NULL, 'CLAY ST', NULL, NULL,
'SAN FRANCISCO', NULL, 'CA', 'US', '94109', NULL, '94109', NULL, '1698', 'CLAY',
'ST', 'F', 'F', NULL, NULL, 'L', 0, 23600700, '????#ENUT?B281CP?', 1, 'DEFAULT'
, -122.42093, 37.79236, '????4101010??004?'), SDO_GEO_ADDR(1, SDO_KEYWORDARRAY()
, NULL, 'CLAY ST', NULL, NULL, 'SAN FRANCISCO', NULL, 'CA', 'US', '94111', NULL,
'94111', NULL, '398', 'CLAY', 'ST', 'F', 'F', NULL, NULL, 'L', 0, 23600678, '??
??#ENUT?B281CP?', 1, 'DEFAULT', -122.40027, 37.79499, '????4101010??004?'), SDO_
GEO_ADDR(1, SDO_KEYWORDARRAY(), NULL, 'CLAY ST', NULL, NULL, 'SAN FRANCISCO', NU
LL, 'CA', 'US', '94108', NULL, '94108', NULL, '978', 'CLAY', 'ST', 'F', 'F', NUL
L, NULL, 'L', 0, 23600689, '????#ENUT?B281CP?', 1, 'DEFAULT', -122.40904, 37.793
85, '????4101010??004?'), SDO_GEO_ADDR(1, SDO_KEYWORDARRAY(), NULL, 'CLAY ST', N
ULL, NULL, 'SAN FRANCISCO', NULL, 'CA', 'US', '94115', NULL, '94115', NULL, '279
8', 'CLAY', 'ST', 'F', 'F', NULL, NULL, 'L', 0, 23600709, '????#ENUT?B281CP?', 1
, 'DEFAULT', -122.43909, 37.79007, '????4101010??004?'), SDO_GEO_ADDR(1, SDO_KEY
WORDARRAY(), NULL, 'CLAY ST', NULL, NULL, 'SAN FRANCISCO', NULL, 'CA', 'US', '94
118', NULL, '94118', NULL, '3698', 'CLAY', 'ST', 'F', 'F', NULL, NULL, 'L', 0, 2
3600718, '????#ENUT?B281CP?', 1, 'DEFAULT', -122.45372, 37.78822, '????4101010??
004?'))

SDO_GCDR.GEOCODE_AS_GEOMETRY

構文

SDO_GCDR.GEOCODE_AS_GEOMETRY(

username IN VARCHAR2,

addr_lines IN SDO_KEYWORDARRAY,

country IN VARCHAR2

) RETURN SDO_GEOMETRY;

説明

形式化されていない住所をジオコードして、結果をSDO_GEOMETRYオブジェクトとして戻します。

パラメータ

username

ジオコーディングを行うデータを含む表を所有するユーザー名を指定します。

addr_lines

ジオコード対象の形式化されていない住所を表す文字列の配列を、引用符で囲んで指定します。SDO_KEYWORDARRAY型の詳細は、11.2.3項を参照してください。

country

国名またはISOの国コード。

使用上の注意

このファンクションは、SDO_GEOMETRY型のオブジェクトを戻します。実行する操作はSDO_GCDR.GEOCODEファンクションと同じですが、そのファンクションはSDO_GEOR_ADDRオブジェクトを戻します。

このファンクションでは、ジオコーディング操作の一致モードに'DEFAULT'を使用します。一致モードの詳細は、11.1.2項を参照してください。

例

次の例では、California州San Francisco市の市庁舎の住所をジオコードします。この場合に戻されるSDO_GEOMETRYオブジェクトでは、この住所の緯度と経度の座標がそれぞれ-122.41815および37.7784183となっています。

SELECT SDO_GCDR.GEOCODE_AS_GEOMETRY('SCOTT',
SDO_KEYWORDARRAY('1 Carlton B Goodlett Pl', 'San Francisco, CA  94102'),
'US') FROM DUAL;

SDO_GCDR.GEOCODE_AS_GEOMETRY('SCOTT',SDO_KEYWORDARRAY('1CARLTONBGOODLETTPL','
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(-122.41815, 37.7784183, NULL), NULL, NUL
L)

SDO_GCDR.REVERSE_GEOCODE

構文

SDO_GCDR.REVERSE_GEOCODE(

username IN VARCHAR2,

location IN SDO_GEOMETRY,

country IN VARCHAR2

) RETURN SDO_GEO_ADDR;

説明

空間ジオメトリ・オブジェクトと国で指定した位置を逆にジオコードし、結果をSDO_GEO_ADDRオブジェクトとして戻します。

パラメータ

username

ジオコーディングを行うデータを含む表を所有するユーザー名を指定します。

location

逆にジオコードする点の位置を指定するSDO_GEOMETRYオブジェクト。

country

国名またはISOの国コード。

使用上の注意

このファンクションは、SDO_GEOR_ADDR型のオブジェクトを戻します(11.2.1項を参照)。

表GC_ROAD_SEGMENT_<table-suffix>には、空間索引を作成する必要があります。

例

次の例では、経度と緯度の値が(-122.41815, 37.7784183)の点を逆にジオコードします。この例の場合、空間索引は、GC_ROAD_SEGMENT_US表のGEOMETRY列に作成されています。

SELECT SDO_GCDR.REVERSE_GEOCODE('SCOTT',
SDO_GEOMETRY(2001, 8307,
SDO_POINT_TYPE(-122.41815, 37.7784183, NULL), NULL, NULL),
'US') FROM DUAL;

SDO_GCDR.REVERSE_GEOCODE('SCOTT',SDO_GEOMETRY(2001,8307,SDO_POINT_TYPE(-122.4
--------------------------------------------------------------------------------
SDO_GEO_ADDR(0, SDO_KEYWORDARRAY(), NULL, 'POLK ST', NULL, NULL, 'SAN FRANCISCO'
, NULL, 'CA', 'US', '94102', NULL, '94102', NULL, '200', 'POLK', 'ST', 'F', 'F',
NULL, NULL, 'R', .00966633, 23614360, '', 1, 'DEFAULT', -122.41815, 37.7784177,
'????4141414??404?')

24 SDO_GEOMパッケージ(ジオメトリ)

この章では、SDO_GEOMパッケージに含まれているジオメトリ関連のPL/SQLサブプログラムについて説明します。これらのサブプログラムは、次のように分類されます。

- 2つのオブジェクト間の関係(TRUE/FALSE): RELATE、WITHIN_DISTANCE

- 妥当性チェック: VALIDATE_GEOMETRY_WITH_CONTEXT、VALIDATE_LAYER_WITH_CONTEXT

- 単一オブジェクトの処理: SDO_ALPHA_SHAPE、SDO_ARC_DENSIFY、SDO_AREA、SDO_BUFFER、SDO_CENTROID、SDO_CONVEXHULL、SDO_CONCAVEHULL、SDO_CONCAVEHULL_BOUNDARY、SDO_LENGTH、SDO_MAX_MBR_ORDINATE、SDO_MIN_MBR_ORDINATE、SDO_MBR、SDO_POINTONSURFACE、SDO_TRIANGULATE、SDO_VOLUME

- 2つのオブジェクトの処理: SDO_CLOSEST_POINTS、SDO_DISTANCE、SDO_DIFFERENCE、SDO_INTERSECTION、SDO_UNION、SDO_XOR

ジオメトリ・サブプログラムを表24-1に示します。その後、使用方法について説明します。

表24-1 ジオメトリ・サブプログラム

サブプログラム

説明

SDO_GEOM.RELATE

2つのオブジェクトの相互作用の関係を判断します。

SDO_GEOM.SDO_ALPHA_SHAPE

指定されたradius値に基づいて、入力ジオメトリのアルファ・シェイプ・ジオメトリを戻します。

SDO_GEOM.SDO_ARC_DENSIFY

各円弧を直線で構成される近似値に変更し、各円を円に近い一連の直線で構成されるポリゴンに変更します。

SDO_GEOM.SDO_AREA

2次元ポリゴンの面積を計算します。

SDO_GEOM.SDO_BUFFER

ジオメトリの周りまたは内部にバッファ・ポリゴンを生成します。

SDO_GEOM.SDO_CENTROID

ポリゴンの中心を戻します。

SDO_GEOM.SDO_CLOSEST_POINTS

2つのジオメトリ間の最短距離、および最短距離を示す点(各ジオメトリに1つ)を計算します。

SDO_GEOM.SDO_CONCAVEHULL

ジオメトリ・オブジェクトの凹型部分を表現するポリゴンタイプ・オブジェクトを戻します。

SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY

アルファ・シェイプではなく境界点に基づいて、ジオメトリ・オブジェクトの凹型部分を表現するポリゴンタイプ・オブジェクトを戻します。

SDO_GEOM.SDO_CONVEXHULL

ジオメトリ・オブジェクトの凸型部分を表現するポリゴンタイプ・オブジェクトを戻します。

SDO_GEOM.SDO_DIFFERENCE

2つのジオメトリ・オブジェクトで位相的に差(MINUS演算)となるジオメトリ・オブジェクトを戻します。

SDO_GEOM.SDO_DISTANCE

2つのジオメトリ・オブジェクト間の距離を計算します。

SDO_GEOM.SDO_INTERSECTION

2つのジオメトリ・オブジェクトで位相的に共通部分(AND演算)となるジオメトリ・オブジェクトを戻します。

SDO_GEOM.SDO_LENGTH

ジオメトリの周囲または長さを計算します。

SDO_GEOM.SDO_MAX_MBR_ORDINATE

ジオメトリ・オブジェクトの最小境界矩形の指定された縦座標(次元)の最大値を戻します。

SDO_GEOM.SDO_MBR

ジオメトリの最小境界矩形を戻します。

SDO_GEOM.SDO_MIN_MBR_ORDINATE

ジオメトリ・オブジェクトの最小境界矩形の指定された縦座標(次元)の最小値を戻します。

SDO_GEOM.SDO_POINTONSURFACE

ポリゴン上にある点を戻します。

SDO_GEOM.SDO_TRIANGULATE

入力ジオメトリのデローニ三角分割によって生成される三角形の集合を戻します。

SDO_GEOM.SDO_UNION

2つのジオメトリ・オブジェクトで位相的な結合部分(OR演算)となるジオメトリ・オブジェクトを戻します。

SDO_GEOM.SDO_VOLUME

3次元ソリッド・ジオメトリの容積を計算します。

SDO_GEOM.SDO_XOR

2つのジオメトリ・オブジェクトで位相的に排他的論理和(XOR演算)となるジオメトリ・オブジェクトを戻します。

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

ジオメトリが有効であるかを判断し、そのジオメトリが無効な場合、コンテキスト情報を戻します。

SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

列に格納されているすべてのジオメトリが有効かどうかを判断し、無効なジオメトリのコンテキスト情報を戻します。

SDO_GEOM.WITHIN_DISTANCE

2つのジオメトリ間の距離が、指定された距離内にあるかどうかを判断します。

ジオメトリ・サブプログラムの使用については、次の内容に注意してください。(各サブプログラムのリファレンス情報にある「使用上の注意」も参照してください。)

- 入力パラメータおよび処理の組合せによっては、NULL値が戻されます。この場合、ジオメトリは空です。たとえば、2つの非接続のジオメトリの交差部を問い合せた場合、NULL値が戻されます。

- ジオメトリ・ファンクション(たとえば、SDO_GEOM.RELATE)の入力パラメータにNULL値(空のジオメトリ)を指定すると、エラーが発生します。

- 一部の処理では、入力したジオメトリの1つまたは両方と、異なるタイプのジオメトリが戻される場合があります。たとえば、線と重なっているポリゴンとの交差部を問い合せた場合は線、2つの線の交差部を問い合せた場合は点、接している2つのポリゴンの交差部を問い合せた場合は線が戻されます。

- SDO_GEOMサブプログラムは、2次元のジオメトリに対してのみサポートされています。ただし、次に示すサブプログラム(2次元と3次元の両方のジオメトリがサポートされる)を除きます。

- (A)ANYINTERACTマスクまたは(B)INSIDEマスク(ソリッド・ジオメトリでのみ3次元がサポートされる)を使用するSDO_GEOM.RELATE

- SDO_GEOM.SDO_AREA

- SDO_GEOM.SDO_DISTANCE

- SDO_GEOM.SDO_LENGTH

- SDO_GEOM.SDO_MAX_MBR_ORDINATE

- SDO_GEOM.SDO_MBR

- SDO_GEOM.SDO_MIN_MBR_ORDINATE

- SDO_GEOM.SDO_VOLUME

- SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

- SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

- SDO_GEOM.WITHIN_DISTANCE

SDO_GEOM.RELATE

構文

SDO_GEOM.RELATE(

geom1 IN SDO_GEOMETRY,

dim1 IN SDO_DIM_ARRAY,

mask IN VARCHAR2,

geom2 IN SDO_GEOMETRY,

dim2 IN SDO_DIM_ARRAY

) RETURN VARCHAR2;

または

SDO_GEOM.RELATE(

geom1 IN SDO_GEOMETRY,

mask IN VARCHAR2,

geom2 IN SDO_GEOMETRY,

tol IN NUMBER

) RETURN VARCHAR2;

説明

2つのジオメトリ・オブジェクトの空間的関係を判断するために、2つのオブジェクトを検査します。

パラメータ

geom1

ジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

mask

チェックする関係のリストを指定します。「使用上の注意」にあるキーワードのリストを参照してください。

geom2

ジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

パフォーマンスを向上させるには、SDO_GEOM.RELATEファンクションを使用する必要がないかぎり、このファンクションのかわりにSDO_RELATE演算子またはその簡易演算子形式(第19章を参照)の1つを使用します。たとえば、SDO_RELATE演算子を使用する場合、DETERMINE maskキーワードは適用されません。演算子およびファンクションを使用する場合のパフォーマンスに関する注意点の詳細は、1.9項を参照してください。

SDO_GEOM.RELATEファンクションの戻り値には、次の種類があります。

- maskに1つ以上の関係が登録されている場合、ジオメトリ・ペアについて1つ以上の関係が真であれば、指定されたmask値を戻します。すべての関係が偽であれば、プロシージャはFALSEを戻します。

- maskのキーワードにDETERMINEを指定すると、ジオメトリ間の関係に最も一致する関係キーワードが1つ戻されます。

- maskのキーワードにANYINTERACTを指定すると、2つのジオメトリが非接続でなければ、TRUEが戻されます。

maskでは、次の関係について判断します。

- ANYINTERACT: 2つのオブジェクトが非接続ではない場合に、TRUEを戻します。

- CONTAINS: 第2オブジェクトが完全に第1オブジェクトの内部にあり、かつオブジェクト境界が接していない場合に、CONTAINSを戻します。そうでない場合は、FALSEを戻します。

- COVEREDBY: 第1オブジェクトが完全に第2オブジェクトの内部にあり、かつオブジェクト境界が1つ以上の点で接している場合に、COVEREDBYを戻します。そうでない場合は、FALSEを戻します。

- COVERS: 第2オブジェクトが完全に第1オブジェクトの内部にあり、かつ境界が1つ以上の位置で接している場合に、COVERSを戻します。そうでない場合は、FALSEを戻します。

- DISJOINT: 2つのオブジェクトが、境界または内部の点を共有していない場合に、DISJOINTを戻します。そうでない場合は、FALSEを戻します。

- EQUAL: オブジェクトの境界と内部(オブジェクト内のすべての穴を含む)のすべての点を2つのオブジェクトが共有している場合に、EQUALを戻します。そうでない場合はFALSEを戻します。

- INSIDE: 第1オブジェクトが完全に第2オブジェクトの内部にあり、かつオブジェクト境界が接していない場合に、INSIDEを戻します。そうでない場合は、FALSEを戻します。

- ON: 線(第1オブジェクト)の境界および内部が完全にポリゴン(第2オブジェクト)の境界上に存在する場合、ONを戻します。そうでない場合は、FALSEを戻します。

- OVERLAPBDYDISJOINT: 2つのオブジェクトは重なっているが、その境界が相互作用しない場合に、OVERLAPBDYDISJOINTを戻します。そうでない場合は、FALSEを戻します。

- OVERLAPBDYINTERSECT: 2つのオブジェクトが部分的に重なり、かつその境界が1つ以上の位置で交差する場合に、OVERLAPBDYINTERSECTを戻します。そうでない場合はFALSEを戻します。

- TOUCH: 2つのオブジェクトが1つの境界点を共有しているが、内部の点は共有していない場合に、TOUCHを戻します。そうでない場合はFALSEを戻します。

maskの値は、論理ブール演算子ORを使用して組み合せることができます。たとえば、ジオメトリ間の関係がINSIDEまたはTOUCHまたはINSIDEとTOUCHの両方である場合、「INSIDE + TOUCH」はINSIDE+TOUCHを戻し、ジオメトリ間の関係がINSIDEまたはTOUCHのいずれでもない場合、FALSEを戻します。

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、SHAPE列内の各ジオメトリとcola_bジオメトリとの関係を調べます。(例では、2.1項の定義およびデータを使用しています。出力は、読みやすくするために変更が加えられています。)

SELECT c.name,
SDO_GEOM.RELATE(c.shape, 'determine', c_b.shape, 0.005) relationship
FROM cola_markets c, cola_markets c_b WHERE c_b.name = 'cola_b';

NAME     RELATIONSHIP
---------------------------                                  cola_a   TOUCH
cola_b   EQUAL
cola_c   OVERLAPBDYINTERSECT
cola_d   DISJOINT

関連項目

- SDO_RELATE演算子

SDO_GEOM.SDO_ALPHA_SHAPE

構文

SDO_GEOM.SDO_ALPHA_SHAPE(

geom IN SDO_GEOMETRY,

tol IN NUMBER,

radius IN NUMBER DEFALT NULL,

flag IN BINARY_INTEGER DEFAULT 0

) RETURN SDO_GEOMETRY;

説明

指定されたradius値に基づいて、入力ジオメトリのアルファ・シェイプ・ジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

tol

許容差を指定します(1.5.5項を参照)。

radius

アルファ・シェイプの計算に使用する半径です。このパラメータがNULLの場合、アルファ・シェイプは入力ジオメトリの凸型です。

flag

孤立点およびエッジが含まれるかどうかを判断します(0 (ゼロ) (デフォルト)の場合、孤立点およびエッジが含まれるため、アルファ・シェイプが戻され、1の場合は、孤立点およびエッジが含まれないため、アルファ・シェイプのポリゴン部分のみが戻されます)。

使用上の注意

アルファ・シェイプは凸型を汎化したものです(http://biogeometry.duke.edu/software/alphashapes/を参照)。このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割およびアルファ・シェイプの計算にそれらを使用します。

radiusパラメータの値を指定する場合は、最初にradius出力パラメータを含む形式を使用して、SDO_GEOM.SDO_CONCAVEHULLファンクションをコールする必要があります。

geomが点タイプであるか、頂点の数が3未満であるか、または直線上に存在する複数の点である場合や、radiusが0 (ゼロ)より小さい場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。

例

次の例では、radiusパラメータのデフォルト値(NULL)が使用されるため、cola_cのアルファ・シェイプであり、cola_cの凸型部分でもあるジオメトリ・オブジェクトを戻します。(この簡単な例では、ポリゴンを入力ジオメトリとして使用しています(通常、このファンクションは、大量の点データで使用されます)。この例は、2.1項の定義およびデータを使用しています。)

SELECT c.name, SDO_GEOM.SDO_ALPHA_SHAPE(c.shape, 0.005)
FROM cola_markets c WHERE c.name = 'cola_c';

SDO_GEOM.SDO_ALPHA_SHAPE(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z),
--------------------------------------------------------------------------------
cola_c
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(4, 5, 3, 3, 6, 3, 6, 5, 4, 5))

関連項目

SDO_GEOM.SDO_CONCAVEHULL

SDO_GEOM.SDO_CONVEXHULL

SDO_GEOM.SDO_ARC_DENSIFY

構文

SDO_GEOM.SDO_ARC_DENSIFY(

geom IN SDO_GEOMETRY,

dim IN SDO_DIM_ARRAY

params IN VARCHAR2

) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_ARC_DENSIFY(

geom IN SDO_GEOMETRY,

tol IN NUMBER

params IN VARCHAR2

) RETURN SDO_GEOMETRY;

説明

入力ジオメトリの各円弧が直線で構成される円弧の近似値に変更され、各円が円に近い一連の直線で構成されるポリゴンに変更されるジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

許容差を指定します(1.5.5項を参照)。

params

円弧の許容差および単位値(オプション)を引用符で囲んだ文字列を指定します。書式および意味については、「使用上の注意」を参照してください。

使用上の注意

円または円弧を含むジオメトリが投影座標系にある場合、このファンクションを使用してこれらのジオメトリを通常のポリゴンに稠密化できます。その後、その直線行ポリゴン・ジオメトリをSpatialの操作に使用するか、またはこれらのジオメトリを投影座標系または測地座標系に変換できます。

paramsパラメータは、arc_toleranceキーワード、およびarc_tolerance値に関連付けられた測定単位を識別するunitキーワードを含むことができる、引用符で囲んだ文字列です。次に例を示します。

'arc_tolerance=0.05 unit=km'

arc_toleranceキーワードは、ジオメトリの各円弧について、円弧の表面と、円弧の開始点と終了点とを結ぶ直線の間の、垂直線の最大長を指定します。図24-1に、長さがA点とB点間の円弧のarc_tolerance値である線を示します。

図24-1 円弧の許容差

arc_toleranceキーワードの値は、ジオメトリに関連付けられた許容差より大きくする必要があります。(arc_toleranceのデフォルト値は、許容差の20倍です。)arc_toleranceキーワードの値を増やすと、結果のポリゴンの辺数が減少し、面積が小さくなります。arc_toleranceキーワードの値を減らすと、結果のポリゴンの辺数が増加し、面積が大きくなります(ただし、元のジオメトリより大きくなることはありません)。

unitキーワードを指定する場合、値はMDSYS.SDO_DIST_UNITS表のSDO_UNIT値('unit=KM'など)である必要があります。unitキーワードを指定しない場合、ジオメトリに関連付けられた測定単位が使用されます。測定単位の指定の詳細は、2.10項を参照してください。

例

次の例では、cola_dの円弧を稠密化した結果であるジオメトリ(円)を戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Arc densification of the circle cola_d
SELECT c.name, SDO_GEOM.SDO_ARC_DENSIFY(c.shape, m.diminfo,
'arc_tolerance=0.05')
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_d';

NAME
--------------------------------
SDO_GEOM.SDO_ARC_DENSIFY(C.SHAPE,M.DIMINFO,'ARC_TOLERANCE=0.05')(SDO_GTYPE, SDO_
--------------------------------------------------------------------------------
cola_d
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(8, 7, 8.76536686, 7.15224093, 9.41421356, 7.58578644, 9.84775907, 8.23463314,
10, 9, 9.84775907, 9.76536686, 9.41421356, 10.4142136, 8.76536686, 10.8477591,
8, 11, 7.23463314, 10.8477591, 6.58578644, 10.4142136, 6.15224093, 9.76536686, 6
, 9, 6.15224093, 8.23463314, 6.58578644, 7.58578644, 7.23463314, 7.15224093, 8,
7))

関連項目

- 6.2.5項「測地データでのその他の考慮点および要件」

SDO_GEOM.SDO_AREA

構文

SDO_GEOM.SDO_AREA(

geom IN SDO_GEOMETRY,

dim IN SDO_DIM_ARRAY

[, unit IN VARCHAR2]

) RETURN NUMBER;

または

SDO_GEOM.SDO_AREA(

geom IN SDO_GEOMETRY,

tol IN NUMBER

[, unit IN VARCHAR2]

) RETURN NUMBER;

説明

2次元ポリゴンの面積を戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

unit

測定単位(unit=およびMDSYS.SDO_AREA_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、たとえば'unit=SQ_KM')を指定します。測定単位の指定の詳細は、2.10項を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はm2です。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

このファンクションは、穴のあるポリゴンを含め、すべてのポリゴンに対して使用できます。

輪を形成するために閉じている線には、面積がありません。

例

次の例では、COLA_MARKETS表に格納されているジオメトリ・オブジェクトの面積を戻します。最初の文ではすべてのオブジェクトの面積を戻し、2番目の文ではcola_aの面積のみを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Return the areas of all cola markets.
SELECT name, SDO_GEOM.SDO_AREA(shape, 0.005) FROM cola_markets;

NAME                             SDO_GEOM.SDO_AREA(SHAPE,0.005)
-------------------------------- ------------------------------
cola_a                                                       24
cola_b                                                     16.5
cola_c                                                        5
cola_d                                               12.5663706

-- Return the area of just cola_a.
SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, 0.005) FROM cola_markets c
WHERE c.name = 'cola_a';

NAME                             SDO_GEOM.SDO_AREA(C.SHAPE,0.005)
-------------------------------- --------------------------------
cola_a                                                         24

関連項目

なし。

SDO_GEOM.SDO_BUFFER

構文

SDO_GEOM.SDO_BUFFER(

geom IN SDO_GEOMETRY,

dim IN SDO_DIM_ARRAY,

dist IN NUMBER

[, params IN VARCHAR2]

) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_BUFFER(

geom IN SDO_GEOMETRY,

dist IN NUMBER,

tol IN NUMBER

[, params IN VARCHAR2]

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの周りまたは内部にバッファ・ポリゴンを生成します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

dist

距離値を指定します。正の値の場合、ジオメトリの周りにバッファが生成されます。負の値の場合(ポリゴンにのみ有効)、ジオメトリの内部にバッファが生成されます。このパラメータの絶対値には、次元配列(dimパラメータ)またはtolパラメータに指定された許容差より大きい値を指定する必要があります。

tol

許容差を指定します(1.5.5項を参照)。

params

次のキーワードの1つまたは両方を含む、引用符で囲まれた文字列を指定します。

- unitおよびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値。distパラメータ値および円弧の許容差(arc_toleranceキーワードが指定されている場合)に関連付けられた測定単位を識別します。測定単位の指定の詳細は、2.10項を参照してください。

- arc_toleranceおよび円弧の許容差。arc_toleranceキーワードの詳細は、この章に示すSDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上の注意」を参照してください。

例: 'unit=km arc_tolerance=0.05'

入力ジオメトリが測地データで、arc_toleranceが指定されていない場合、デフォルト値は許容差に20を掛けた値になります。Spatialではarc_tolerance値を使用して、結果の計算時に円弧を稠密化します。入力ジオメトリがデカルト・データまたは投影データである場合、arc_toleranceは無効になるため、指定する必要はありません。

デカルト・ジオメトリまたは投影ジオメトリにこのパラメータが指定されていない場合、または測地ジオメトリに対してarc_toleranceキーワードが指定されているにもかかわらずunitキーワードが指定されていない場合、データに関連付けられている測定単位が使用されます。

使用上の注意

このファンクションは、バッファ・ポリゴンを表現するジオメトリ・オブジェクトを戻します。

このファンクションは、点、線またはポリゴンの周り、あるいはポリゴンの内部を丸めたバッファを作成します。空間内のバッファも丸められ、内側の境界からの距離は、外側の境界から外側のバッファまでの距離と同じです。図1-7を参照してください。

バッファ・ポリゴン・ジオメトリが投影座標系にある場合、円弧を含みます。このジオメトリを測地座標系に変換する場合は、SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用してジオメトリを最初に稠密化してから変換します。

入力ジオメトリに50を超える座標があり、かつ、バッファの幅が、連続する座標の間の間隔の二乗平均平方根の0.1% (0.001)未満の場合、元のジオメトリが変更されることなく戻されます。

測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。

測地データでは、このファンクションは比較的小さなジオメトリにのみ使用する必要があります。このようなジオメトリに対しては、内部計算に使用するローカル交差平面投影で重大なひずみやエラーが発生することはありません。これにより、線ストリングかポリゴンかに関係なく、ソース・ジオメトリの適用ドメインが、テキサス(米国)、フランスまたは満州(中国)のおよその領域に制限されます。

例

次の例では、cola_aの周りの1バッファを表現するポリゴンを戻します。戻されるポリゴンの角(たとえば、.292893219、.292893219)は、丸められています。(例では、2.1項の非測地定義およびデータを使用しています。)

-- Generate a buffer of 1 unit around a geometry.
SELECT c.name, SDO_GEOM.SDO_BUFFER(c.shape, m.diminfo, 1)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS'  AND m.column_name = 'SHAPE'
AND c.name = 'cola_a';

NAME
--------------------------------
SDO_GEOM.SDO_BUFFER(C.SHAPE,M.DIMINFO,1)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z)
--------------------------------------------------------------------------------
cola_a
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1005, 8, 1, 2, 2, 5, 2, 1,
7, 2, 2, 11, 2, 1, 13, 2, 2, 17, 2, 1, 19, 2, 2, 23, 2, 1), SDO_ORDINATE_ARRAY(
0, 1, .292893219, .292893219, 1, 0, 5, 0, 5.70710678, .292893219, 6, 1, 6, 7, 5.
70710678, 7.70710678, 5, 8, 1, 8, .292893219, 7.70710678, 0, 7, 0, 1))

次の例では、6.13項の測地定義およびデータを使用して、cola_aの周りの1バッファを表現するポリゴンを戻します。

-- Generate a buffer of 1 kilometer around a geometry.
SELECT c.name, SDO_GEOM.SDO_BUFFER(c.shape, m.diminfo, 1,
'unit=km arc_tolerance=0.05')
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS'
AND m.column_name = 'SHAPE' AND c.name = 'cola_a';

NAME
--------------------------------
SDO_GEOM.SDO_BUFFER(C.SHAPE,M.DIMINFO,1,'UNIT=KMARC_TOLERANCE=0.05')(SDO_GTYPE,
--------------------------------------------------------------------------------
cola_a
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(.991023822, 1.00002073, .992223711, .995486419, .99551726, .99217077, 1.00001
929, .990964898, 4.99998067, .990964929, 5.00448268, .9921708, 5.00777624, .9954
86449, 5.00897618, 1.00002076, 5.00904194, 6.99997941, 5.00784065, 7.00450033, 5
.00454112, 7.00781357, 5.00002479, 7.009034, .999975166, 7.00903403, .995458814,
7.00781359, .992159303, 7.00450036, .990958058, 6.99997944, .991023822, 1.00002
073))

関連項目

- SDO_GEOM.SDO_UNION

- SDO_GEOM.SDO_INTERSECTION

- SDO_GEOM.SDO_XOR

SDO_GEOM.SDO_CENTROID

構文

SDO_GEOM.SDO_CENTROID(

geom1 IN SDO_GEOMETRY,

dim1 IN SDO_DIM_ARRAY

) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_CENTROID(

geom1 IN SDO_GEOMETRY,

tol IN NUMBER

) RETURN SDO_GEOMETRY;

説明

ポリゴン、複数ポリゴン、点または点クラスタの中心にある点ジオメトリを戻します。(中心は、重心とも呼ばれます。)

複数のオブジェクトで構成される入力ジオメトリの場合、ジオメトリ・オブジェクトの各ポリゴンの面積によって結果が重み付けされます。ジオメトリ・オブジェクトにポリゴンおよび点が混在する場合、中心の計算では点が使用されません。ジオメトリ・オブジェクトが点のみで構成される場合、それらの点は均等に重み付けされます。

パラメータ

geom1

ジオメトリ・オブジェクトを指定します。

dim1

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

このファンクションは、geom1がポリゴン、複数ポリゴン、点または点クラスタではない場合、NULL値を戻します。これは、SDO_GEOMETRYオブジェクトのSDO_GTYPE値によって識別します。

geom1が点である場合、このファンクションは点(入力ジオメトリ)を戻します。

測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。

入力ジオメトリの形および複雑さによっては、戻された点が入力ジオメトリ上にない場合があります。

例

次の例では、cola_cの中心にあるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Return the centroid of a geometry.
SELECT c.name, SDO_GEOM.SDO_CENTROID(c.shape, m.diminfo)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_c';

NAME
--------------------------------
SDO_GEOM.SDO_CENTROID(C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z)
--------------------------------------------------------------------------------
cola_c
SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
4.73333333, 3.93333333))

関連項目

なし。

SDO_GEOM.SDO_CLOSEST_POINTS

構文

SDO_GEOM.SDO_CLOSEST_POINTS(

geom1 IN SDO_GEOMETRY,

geom2 IN SDO_GEOMETRY,

tolerance IN NUMBER,

unit IN VARCHAR2,

dist OUT NUMBER,

geoma OUT SDO_GEOMETRY,

geomb OUT SDO_GEOMETRY);

説明

2つのジオメトリ間の最短距離、および最短距離を示す点(各ジオメトリに1つ)を計算します。

パラメータ

geom1

ジオメトリ・オブジェクトを指定します。

geom2

ジオメトリ・オブジェクトを指定します。

tolerance

許容差を指定します(1.5.5項を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、2.10項を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。

dist

geom1とgeom2の間の最短距離を含む出力パラメータです。具体的には、geomaとgeombの間の距離を示します。

geoma

geom2の境界上の最近点に最も近いgeom1の境界上にある点ジオメトリ・オブジェクトを含む出力パラメータです。

geomb

geom1の境界上の最近点に最も近いgeom2の境界上にある点ジオメトリ・オブジェクトを含む出力パラメータです。

使用上の注意

このプロシージャでは、出力パラメータを使用して、計算された最短距離、および最短距離に関連付けられた各入力ジオメトリ上の点を格納します。

2点間の距離が0(ゼロ)の場合、出力ジオメトリ(geomaおよびgeomb)は、NULLです。

例

次の例では、ジオメトリcola_cとcola_d間の最短距離、および最短距離に関連付けられた各入力ジオメトリ上の1つの点を計算します。また、2つの出力点ジオメトリを表に挿入した後、これらの点ジオメトリを選択します。2つの入力ジオメトリ間の最短距離は2.47213595499958、cola_c上の最近点は(6,5)、cola_d上の最近点は(7.10557281, 7.21114562)になります。(例では、2.1項の定義およびデータを使用しています。)

DECLARE
cola_c_geom SDO_GEOMETRY;
cola_d_geom SDO_GEOMETRY;
dist NUMBER;
geoma SDO_GEOMETRY;
geomb SDO_GEOMETRY;

BEGIN

-- Populate geometry variables with cola market shapes.
SELECT c.shape into cola_c_geom FROM cola_markets c
WHERE c.name = 'cola_c';
SELECT c.shape into cola_d_geom FROM cola_markets c
WHERE c.name = 'cola_d';

SDO_GEOM.SDO_CLOSEST_POINTS(cola_c_geom, cola_d_geom, 0.005, NULL,
dist, geoma, geomb);

INSERT INTO cola_markets VALUES(9901, 'geoma', geoma);
INSERT INTO cola_markets VALUES(9902, 'geomb', geomb);

DBMS_OUTPUT.PUT_LINE('dist output parameter value = ' || dist);
END;
/
dist output parameter value = 2.47213595499958

PL/SQL procedure successfully completed.

SELECT c.shape FROM cola_markets c WHERE c.name = 'geoma';

SHAPE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
6, 5))

SELECT c.shape FROM cola_markets c WHERE c.name = 'geomb';

SHAPE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
7.10557281, 7.21114562))

関連項目

なし。

SDO_GEOM.SDO_CONCAVEHULL

構文

SDO_GEOM.SDO_CONCAVEHULL(

geom IN SDO_GEOMETRY,

tol IN NUMBER

) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_CONCAVEHULL(

geom IN SDO_GEOMETRY,

tol IN NUMBER,

radius OUT NUMBER

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの凹型部分を表現するポリゴンタイプ・オブジェクトを戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

tol

許容差を指定します(1.5.5項を参照)。

radius

凹型の計算時に(デローニ三角分割を使用して)内部的に作成される、三角形の外接円の半径を格納するための出力パラメータ。

使用上の注意

凹型は、点の集合などの入力ジオメトリの領域を表現するポリゴンです。複雑な入力ジオメトリでは、通常、凹型は凸型の領域よりも非常に小さくなっています。

このファンクションは、入力ジオメトリからすべての座標を取得し、それらを使用してデローニ三角分割を実行して、凹型を計算します。外部の輪のみを戻します。内部の輪は無視されます。

このファンクションでは、凹型の計算時にアルファ・シェイプを使用します。これに対し、SDO_GEOM.SDO_CONCAVEHULL_BOUNDARYファンクションでは、外側の境界点を使用します。

radiusパラメータを含む形式は、SDO_GEOM.SDO_ALPHA_SHAPEファンクションをコールする場合に役立つradius値を戻します。

geomが、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。

例

次の例では、cola_cの凹型部分のジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。

-- Return the concave hull of a polygon.
SELECT c.name, SDO_GEOM.SDO_CONCAVEHULL(c.shape, 0.005)
FROM cola_markets c WHERE c.name = 'cola_c';

NAME
--------------------------------
SDO_GEOM.SDO_CONCAVEHULL(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z),
--------------------------------------------------------------------------------
cola_c
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(6, 3, 6, 5, 4, 5, 3, 3, 6, 3))

関連項目

SDO_GEOM.SDO_ALPHA_SHAPE

SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY

SDO_GEOM.SDO_CONVEXHULL

SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY

構文

SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY(

geom IN SDO_GEOMETRY,

tol IN NUMBER,

length IN NUMBER DEFAULT NULL

) RETURN SDO_GEOMETRY;

説明

アルファ・シェイプではなく境界点に基づいて、ジオメトリ・オブジェクトの凹型部分を表現するポリゴンタイプ・オブジェクトを戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

tol

許容差を指定します(1.5.5項を参照)。

length

凹型のサイズを制御するための値(具体的には、凹型の最長エッジがlength値よりも短い場合は、凹型の計算が停止されます)。このため、length値が大きければ大きいほど、凹型も大きくなる可能性があります。このパラメータを指定しない場合、「使用上の注意」で説明するとおり、計算は続行されます。

使用上の注意

凹型は、点の集合などの入力ジオメトリの領域を表現するポリゴンです。複雑な入力ジオメトリでは、通常、凹型は凸型の領域よりも非常に小さくなっています。

SDO_GEOM.SDO_CONCAVEHULLファンクションと同様に、このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割の計算にそれらを使用します。ただしその後、凸型を計算し、境界エッジの長さに基づいて優先度キューにすべての境界エッジを入れ、(指定されたlengthパラメータ値によって停止されないかぎり、)形状が連結している単一のポリゴンであれば、1つずつエッジを削除します。1つのエッジが計算中に削除された場合、その三角形の他の2つのエッジが境界上にあります。

geomが、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。

例

次の例では、cola_cの凹型部分のジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Return the concave hull of a polygon.
SELECT c.name, SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY(c.shape, 0.005)
FROM cola_markets c WHERE c.name = 'cola_c';

NAME
--------------------------------
SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(
--------------------------------------------------------------------------------
cola_c
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(6, 3, 6, 5, 4, 5, 3, 3, 6, 3))

関連項目

SDO_GEOM.SDO_ALPHA_SHAPE

SDO_GEOM.SDO_CONCAVEHULL

SDO_GEOM.SDO_CONVEXHULL

SDO_GEOM.SDO_CONVEXHULL

構文

SDO_GEOM.SDO_CONVEXHULL(

geom1 IN SDO_GEOMETRY,

dim1 IN SDO_DIM_ARRAY

) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_CONVEXHULL(

geom1 IN SDO_GEOMETRY,

tol IN NUMBER

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの凸型部分を表現するポリゴンタイプ・オブジェクトを戻します。

パラメータ

geom1

ジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

凸型は、ジオメトリ・オブジェクトを完全に囲む単純な凸型のポリゴンです。Spatialでは、指定したオブジェクトを完全に囲む最小ポリゴンを作成する場合に、使用する直線の辺をできるだけ少なくします。凸型は、複雑なジオメトリ・オブジェクトの近似値を取る場合に便利です。

ジオメトリ(geom1)に円弧要素が含まれる場合、このファンクションは、各円弧要素の最小境界矩形(MBR)を計算し、これらのMBRを使用してジオメトリの凸型を計算します。ジオメトリ・オブジェクト(geom1)が円である場合、このファンクションは、円を囲む最小の矩形を戻します。

このファンクションは、geom1が点タイプであるか、頂点の数が3未満であるか、または直線上に存在する複数の点である場合、NULL値を戻します。

測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。

例

次の例では、cola_cの凸型部分のジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。ただし、ここでは、戻されるポリゴンが指定したポリゴンと同じ頂点を持ち、例としてはわかりにくくなっています。これは、指定したポリゴンが、単純な凸型のポリゴンであるためです。)

-- Return the convex hull of a polygon.
SELECT c.name, SDO_GEOM.SDO_CONVEXHULL(c.shape, m.diminfo)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_c';

NAME
--------------------------------
SDO_GEOM.SDO_CONVEXHULL(C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y,
--------------------------------------------------------------------------------
cola_c
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(6, 3, 6, 5, 4, 5, 3, 3, 6, 3))

関連項目

SDO_GEOM.SDO_CONCAVEHULL

SDO_GEOM.SDO_DIFFERENCE

構文

SDO_GEOM.SDO_DIFFERENCE(

geom1 IN SDO_GEOMETRY,

dim1 IN SDO_DIM_ARRAY,

geom2 IN SDO_GEOMETRY,

dim2 IN SDO_DIM_ARRAY

) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_DIFFERENCE(

geom1 IN SDO_GEOMETRY,

geom2 IN SDO_GEOMETRY,

tol IN NUMBER

) RETURN SDO_GEOMETRY;

説明

2つのジオメトリ・オブジェクトで位相的に差(MINUS演算)となるジオメトリ・オブジェクトを戻します。

パラメータ

geom1

ジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

geom2

ジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

図24-2のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_DIFFERENCEを使用した場合に戻されるポリゴンです。

図24-2 SDO_GEOM.SDO_DIFFERENCE

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_aとcola_cの位相的な差(MINUS演算)となるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Return the topological difference of two geometries.
SELECT SDO_GEOM.SDO_DIFFERENCE(c_a.shape, m.diminfo, c_c.shape, m.diminfo)
FROM cola_markets c_a, cola_markets c_c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c_a.name = 'cola_a' AND c_c.name = 'cola_c';

SDO_GEOM.SDO_DIFFERENCE(C_A.SHAPE,M.DIMINFO,C_C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(1, 7, 1, 1, 5, 1, 5, 3, 3, 3, 4, 5, 5, 5, 5, 7, 1, 7)

戻されたポリゴンのSDO_ORDINATE_ARRAYの開始および終了が、同一の点(1, 7)であることに注意してください。

関連項目

- SDO_GEOM.SDO_INTERSECTION

- SDO_GEOM.SDO_UNION

- SDO_GEOM.SDO_XOR

SDO_GEOM.SDO_DISTANCE

構文

SDO_GEOM.SDO_DISTANCE(

geom1 IN SDO_GEOMETRY,

dim1 IN SDO_DIM_ARRAY,

geom2 IN SDO_GEOMETRY,

dim2 IN SDO_DIM_ARRAY

[, unit IN VARCHAR2]

) RETURN NUMBER;

または

SDO_GEOM.SDO_DISTANCE(

geom1 IN SDO_GEOMETRY,

geom2 IN SDO_GEOMETRY,

tol IN NUMBER

[, unit IN VARCHAR2]

) RETURN NUMBER;

説明

2つのジオメトリ・オブジェクト間の距離を計算します。2つのジオメトリ・オブジェクト間の距離とは、それらのオブジェクトにある点またはセグメントのペアの最短距離です。

パラメータ

geom1

geom2からの距離を計算するジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

geom2

geom1からの距離を計算するジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、2.10項を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_bおよびcola_d間の最短距離が戻されます。(例では、2.1項の定義およびデータを使用しています。)

-- Return the distance between two geometries.
SELECT SDO_GEOM.SDO_DISTANCE(c_b.shape, c_d.shape, 0.005)
FROM cola_markets c_b, cola_markets c_d
WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';

SDO_GEOM.SDO_DISTANCE(C_B.SHAPE,C_D.SHAPE,0.005)
------------------------------------------------
.846049894

関連項目

- SDO_GEOM.WITHIN_DISTANCE

SDO_GEOM.SDO_INTERSECTION

構文

SDO_GEOM.SDO_INTERSECTION(

geom1 IN SDO_GEOMETRY,

dim1 IN SDO_DIM_ARRAY,

geom2 IN SDO_GEOMETRY,

dim2 IN SDO_DIM_ARRAY

) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_INTERSECTION(

geom1 IN SDO_GEOMETRY,

geom2 IN SDO_GEOMETRY,

tol IN NUMBER

) RETURN SDO_GEOMETRY;

説明

2つのジオメトリ・オブジェクトで位相的に共通部分(AND演算)となるジオメトリ・オブジェクトを戻します。

パラメータ

geom1

ジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

geom2

ジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

図24-3のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_INTERSECTIONを使用した場合に戻されるポリゴンです。

図24-3 SDO_GEOM.SDO_INTERSECTION

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_aとcola_cの位相的に共通部分(AND演算)となるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Return the topological intersection of two geometries.
SELECT SDO_GEOM.SDO_INTERSECTION(c_a.shape, c_c.shape, 0.005)
FROM cola_markets c_a, cola_markets c_c
WHERE c_a.name = 'cola_a' AND c_c.name = 'cola_c';

SDO_GEOM.SDO_INTERSECTION(C_A.SHAPE,C_C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_PO
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(4, 5, 3, 3, 5, 3, 5, 5, 4, 5))

戻されたポリゴンのSDO_ORDINATE_ARRAYの開始および終了が、同一の点(4,5)であることに注意してください。

関連項目

- SDO_GEOM.SDO_DIFFERENCE

- SDO_GEOM.SDO_UNION

- SDO_GEOM.SDO_XOR

SDO_GEOM.SDO_LENGTH

構文

SDO_GEOM.SDO_LENGTH(

geom IN SDO_GEOMETRY,

dim IN SDO_DIM_ARRAY

[, unit IN VARCHAR2]

[, count_shared_edges IN NUMBER]

) RETURN NUMBER;

または

SDO_GEOM.SDO_LENGTH(

geom IN SDO_GEOMETRY,

tol IN NUMBER

[, unit IN VARCHAR2]

[, count_shared_edges IN NUMBER]

) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの周囲または長さを戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

許容差を指定します(1.5.5項を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、2.10項を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

count_shared_edges

(3次元のジオメトリにのみ適用)入力ジオメトリに完全にまたは部分的に共有されているエッジが含まれている場合に、エッジの共有部分の長さを合計するタイミングを指定します。この値には、1(1回ごとに合計する)または2(2回ごとに合計する)を指定します。デフォルト値は1です。

このパラメータは、2次元の入力ジオメトリでは無視されます。

使用上の注意

指定したポリゴンに1つ以上の穴がある場合、外側の境界とすべての穴の周囲が計算されます。戻り値は、すべての周囲の合計です。

例

次の例では、COLA_MARKETS表に格納されているジオメトリ・オブジェクトのパラメータを戻します。最初の文ではすべてのオブジェクトの周囲を戻し、2番目の文ではcola_aの周囲のみを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Return the perimeters of all cola markets.
SELECT c.name, SDO_GEOM.SDO_LENGTH(c.shape, m.diminfo)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE';

NAME                             SDO_GEOM.SDO_LENGTH(C.SHAPE,M.DIMINFO)
-------------------------------- --------------------------------------
cola_a                                                               20
cola_b                                                       17.1622777
cola_c                                                       9.23606798
cola_d                                                       12.5663706

-- Return the perimeter of just cola_a.
SELECT c.name, SDO_GEOM.SDO_LENGTH(c.shape, m.diminfo)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_a';

NAME                             SDO_GEOM.SDO_LENGTH(C.SHAPE,M.DIMINFO)
-------------------------------- --------------------------------------
cola_a                                                               20

関連項目

なし。

SDO_GEOM.SDO_MAX_MBR_ORDINATE

構文

SDO_GEOM.SDO_MAX_MBR_ORDINATE(

geom IN SDO_GEOMETRY,

ordinate_pos IN NUMBER

) RETURN NUMBER;

または

SDO_GEOM.SDO_MAX_MBR_ORDINATE(

geom IN SDO_GEOMETRY,

dim IN SDO_DIM_ARRAY,

ordinate_pos IN NUMBER

) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの最小境界矩形の指定された縦座標(次元)の最大値を戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

ordinate_pos

ジオメトリ・オブジェクトの定義における縦座標(次元)の位置(第1の座標は1、第2の座標は2など)を指定します。たとえば、geomにXとYの2つの縦座標が指定されている場合、1はX座標値、2はY座標値を示します。

使用上の注意

なし。

例

次の例では、COLA_MARKETS表に含まれるcola_dジオメトリの最小境界矩形のX(第1)座標の最大値を戻します。(例では、2.1項の定義およびデータを使用しています。SDO_GEOM.SDO_MBRファンクションの例では、cola_dの最小境界矩形が戻されます。)

SELECT SDO_GEOM.SDO_MAX_MBR_ORDINATE(c.shape, m.diminfo, 1)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_d';

SDO_GEOM.SDO_MAX_MBR_ORDINATE(C.SHAPE,M.DIMINFO,1)
--------------------------------------------------
10

関連項目

- SDO_GEOM.SDO_MBR

- SDO_GEOM.SDO_MIN_MBR_ORDINATE

SDO_GEOM.SDO_MBR

構文

SDO_GEOM.SDO_MBR(

geom IN SDO_GEOMETRY

[, dim IN SDO_DIM_ARRAY]

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの最小境界矩形(ジオメトリを囲む最小の矩形)を戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、適切なMBRを作成できない場合はMBRジオメトリを戻しません。具体的には、次のとおりです。

- 入力ジオメトリがNULLである場合は、NULLのジオメトリを戻します。

- 入力ジオメトリが点である場合は、点を戻します。

- 入力ジオメトリが直線上に存在する複数の点である場合は、2点線を戻します。

- 入力ジオメトリに3つの次元が含まれていても、すべてのZ次元値が同じである場合は、3次元の線を戻します。

例

次の例では、COLA_MARKETS表のcola_dジオメトリの最小境界矩形を戻します。(例では、2.1項の定義およびデータを使用しています。cola_dは円であるため、この場合の最小境界矩形は正方形になります。)

-- Return the minimum bounding rectangle of cola_d (a circle).
SELECT SDO_GEOM.SDO_MBR(c.shape, m.diminfo)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_d';

SDO_GEOM.SDO_MBR(C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(6, 7, 10, 11))

関連項目

- SDO_GEOM.SDO_MAX_MBR_ORDINATE

- SDO_GEOM.SDO_MIN_MBR_ORDINATE

SDO_GEOM.SDO_MIN_MBR_ORDINATE

構文

SDO_GEOM.SDO_MIN_MBR_ORDINATE(

geom IN SDO_GEOMETRY,

ordinate_pos IN NUMBER

) RETURN NUMBER;

または

SDO_GEOM.SDO_MIN_MBR_ORDINATE(

geom IN SDO_GEOMETRY,

dim IN SDO_DIM_ARRAY,

ordinate_pos IN NUMBER

) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの最小境界矩形の指定された縦座標(次元)の最小値を戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

ordinate_pos

ジオメトリ・オブジェクトの定義における縦座標(次元)の位置(第1の座標は1、第2の座標は2など)を指定します。たとえば、geomにXとYの2つの縦座標が指定されている場合、1はX座標値、2はY座標値を示します。

使用上の注意

なし。

例

次の例では、COLA_MARKETS表に含まれるcola_dジオメトリの最小境界矩形のX(第1)座標の最小値を戻します。(例では、2.1項の定義およびデータを使用しています。SDO_GEOM.SDO_MBRファンクションの例では、cola_dの最小境界矩形が戻されます。)

SELECT SDO_GEOM.SDO_MIN_MBR_ORDINATE(c.shape, m.diminfo, 1)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_d';

SDO_GEOM.SDO_MIN_MBR_ORDINATE(C.SHAPE,M.DIMINFO,1)
--------------------------------------------------
6

関連項目

- SDO_GEOM.SDO_MAX_MBR_ORDINATE

- SDO_GEOM.SDO_MBR

SDO_GEOM.SDO_POINTONSURFACE

構文

SDO_GEOM.SDO_POINTONSURFACE(

geom1 IN SDO_GEOMETRY,

dim1 IN SDO_DIM_ARRAY

) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_POINTONSURFACE(

geom1 IN SDO_GEOMETRY,

tol IN NUMBER

) RETURN SDO_GEOMETRY;

説明

ポリゴンのジオメトリ・オブジェクト上にある点を戻します。

パラメータ

geom1

ポリゴンのジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

geom1上にある点を表現する、点のジオメトリ・オブジェクトを戻します。ただし、内部の点である保証はありません。(つまり、geom1の境界またはエッジ上であることもあります。)

ジオメトリ・オブジェクト上のどこにある点でも、戻り値になる可能性があります。戻される点に対して位置を指定することはできません。また、同じパラメータ値を指定してこのファンクションを複数回コールする場合、同じ点を戻す、または異なる点を戻す、という指定はできません。

ほとんどの場合、このファンクションは内部の点を戻すSDO_UTIL.INTERIOR_POINTファンクションと比較して有用性が低くなります。

例

次の例では、cola_a上にある点であるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Return a point on the surface of a geometry.
SELECT SDO_GEOM.SDO_POINTONSURFACE(c.shape, m.diminfo)
FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_a';

SDO_GEOM.SDO_POINTONSURFACE(C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO_POINT(X,
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
1, 1))

関連項目

なし。

SDO_GEOM.SDO_TRIANGULATE

構文

SDO_GEOM.SDO_TRIANGULATE(

geom IN SDO_GEOMETRY,

tol IN NUMBER

) RETURN SDO_GEOMETRY;

説明

入力ジオメトリのデローニ三角分割によって生成される三角形の要素を含むジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割の計算にそれらを使用して、各要素が三角形のジオメトリ・オブジェクトを戻します。

geomが、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。

例

次の例では、cola_cポリゴン・ジオメトリを構成する三角形の要素(この場合は2つ)で構成されるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。

-- Return triangles comprising a specified polygon.
SELECT c.name, SDO_GEOM.SDO_TRIANGULATE(c.shape, 0.005)
FROM cola_markets c WHERE c.name = 'cola_c';

NAME
--------------------------------
SDO_GEOM.SDO_TRIANGULATE(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z),
--------------------------------------------------------------------------------
cola_c
SDO_GEOMETRY(2007, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 9, 1003, 1), SDO_
ORDINATE_ARRAY(3, 3, 6, 3, 4, 5, 3, 3, 4, 5, 6, 3, 6, 5, 4, 5))

関連項目

SDO_GEOM.SDO_ALPHA_SHAPE

SDO_GEOM.SDO_UNION

構文

SDO_GEOM.SDO_UNION(

geom1 IN SDO_GEOMETRY,

dim1 IN SDO_DIM_ARRAY,

geom2 IN SDO_GEOMETRY,

dim2 IN SDO_DIM_ARRAY

) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_UNION(

geom1 IN SDO_GEOMETRY,

geom2 IN SDO_GEOMETRY,

tol IN NUMBER

) RETURN SDO_GEOMETRY;

説明

2つのジオメトリ・オブジェクトで位相的な結合部分(OR演算)となるジオメトリ・オブジェクトを戻します。

パラメータ

geom1

ジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

geom2

ジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

図24-4のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_UNIONを使用した場合に戻されるポリゴンです。

図24-4 SDO_GEOM.SDO_UNION

位相的な和集合操作を実行せずにジオメトリを他のジオメトリに追加でき、両方のジオメトリが非接続である場合は、SDO_UTIL.APPENDファンクション(第32章を参照)を使用する方がSDO_UNIONファンクションより高速です。

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_aとcola_cの位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Return the topological union of two geometries.
SELECT SDO_GEOM.SDO_UNION(c_a.shape, m.diminfo, c_c.shape, m.diminfo)
FROM cola_markets c_a, cola_markets c_c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c_a.name = 'cola_a' AND c_c.name = 'cola_c';

SDO_GEOM.SDO_UNION(C_A.SHAPE,M.DIMINFO,C_C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID,
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5, 5, 5, 7, 1, 7, 1, 1, 5, 1, 5, 3, 6, 3, 6, 5, 5, 5))

戻されたポリゴンのSDO_ORDINATE_ARRAYの開始および終了が、同一の点(5, 5)であることに注意してください。

関連項目

- SDO_GEOM.SDO_DIFFERENCE

- SDO_GEOM.SDO_INTERSECTION

- SDO_GEOM.SDO_XOR

SDO_GEOM.SDO_VOLUME

構文

SDO_GEOM.SDO_VOLUME(

geom IN SDO_GEOMETRY,

tol IN NUMBER

[, unit IN VARCHAR2]

) RETURN NUMBER;

説明

3次元ソリッドの容積を戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

tol

許容差を指定します(1.5.5項を参照)。

unit

測定単位(unit=および容積単位を引用符で囲んだ文字列で、'unit=CUBIC_FOOT'や'unit=CUBIC_METER'など)を指定します。容積単位のリストについては、次の問合せを入力します。

SELECT short_name FROM mdsys.sdo_units_of_measure WHERE unit_of_meas_type = 'volume';

測定単位の指定の詳細は、2.10項を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。

使用上の注意

このファンクションは、穴のあるソリッドを含め、すべてのソリッドに対して使用できます。

このファンクションは、測地データではサポートされません。

3次元ジオメトリのサポートの詳細は、1.11項を参照してください。

例

次の例では、ソリッド・ジオメトリ・オブジェクトの容積を戻します。

-- Return the volume of a solid geometry.
SELECT p.id, SDO_GEOM.SDO_VOLUME(p.geometry, 0.005) FROM polygons3d p
WHERE p.id = 12;

ID SDO_GEOM.SDO_VOLUME(P.GEOMETRY,0.005)
---------- -------------------------------------
12                                     6

関連項目

なし。

SDO_GEOM.SDO_XOR

構文

SDO_GEOM.SDO_XOR(

geom1 IN SDO_XOR,

dim1 IN SDO_DIM_ARRAY,

geom2 IN SDO_GEOMETRY,

dim2 IN SDO_DIM_ARRAY

) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_XOR(

geom1 IN SDO_GEOMETRY,

geom2 IN SDO_GEOMETRY,

tol IN NUMBER

) RETURN SDO_GEOMETRY;

説明

2つのジオメトリ・オブジェクトで位相的に排他的論理和(XOR演算)となるジオメトリ・オブジェクトを戻します。

パラメータ

geom1

ジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

geom2

ジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

図24-5のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_XORを使用した場合に戻されるポリゴンです。

図24-5 SDO_GEOM.SDO_XOR

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_aとcola_cの位相的な排他的論理和(XOR演算)となるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Return the topological symmetric difference of two geometries.
SELECT SDO_GEOM.SDO_XOR(c_a.shape, m.diminfo, c_c.shape, m.diminfo)
FROM cola_markets c_a, cola_markets c_c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c_a.name = 'cola_a' AND c_c.name = 'cola_c';

SDO_GEOM.SDO_XOR(C_A.SHAPE,M.DIMINFO,C_C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID, S
--------------------------------------------------------------------------------
SDO_GEOMETRY(2007, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 19, 1003, 1), SDO
_ORDINATE_ARRAY(1, 7, 1, 1, 5, 1, 5, 3, 3, 3, 4, 5, 5, 5, 5, 7, 1, 7, 5, 5, 5, 3
, 6, 3, 6, 5, 5, 5))

戻されるポリゴンは複数ポリゴン(SDO_GTYPE = 2007)であり、SDO_ORDINATE_ARRAYには、次の2つのポリゴンが記述されています。1つは(1, 7)で開始および終了し、もう1つは(5, 5)で開始および終了します。

関連項目

- SDO_GEOM.SDO_DIFFERENCE

- SDO_GEOM.SDO_INTERSECTION

- SDO_GEOM.SDO_UNION

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

構文

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(

theGeometry IN SDO_GEOMETRY,

theDimInfo IN SDO_DIM_ARRAY,

conditional IN VARCHAR2 DEFAULT 'TRUE' ,

flag10g IN VARCHAR2 DEFAULT 'FALSE'

) RETURN VARCHAR2;

または

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(

theGeometry IN SDO_GEOMETRY,

tolerance IN NUMBER,

conditional IN VARCHAR2 DEFAULT 'TRUE' ,

flag10g IN VARCHAR2 DEFAULT 'FALSE'

) RETURN VARCHAR2;

説明

ジオメトリ・タイプが有効であるかどうかの一貫性チェックを行い、ジオメトリが無効な場合、コンテキスト情報を戻します。このファンクションは、表から得られるジオメトリの表現を、要素定義と対比して確認します。

パラメータ

theGeometry

ジオメトリ・オブジェクトを指定します。

theDimInfo

theGeometryに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tolerance

許容差を指定します(1.5.5項を参照)。

conditional

条件付きのフラグを指定します(3次元の複合表面または複合ソリッドにのみ適用)。文字列値がTRUE (デフォルト)である場合、2つの外部の輪が同じ平面にあり、エッジを共有していると、検証は行われなくなります。文字列値がFALSEである場合、2つの外部の輪が同じ平面にあり、エッジを共有していても検証を行います。

flag10g

Oracle Database 10g互換性フラグ。文字列値がTRUEである場合、2次元ジオメトリに固有の検証のみが実行され、3次元固有の検証は実行されません。文字列値がFALSE(デフォルト)である場合は、ジオメトリに関連するすべての検証が実行されます。(flag10gパラメータの詳細は、「使用上の注意」を参照してください。)

使用上の注意

ジオメトリが有効な場合、TRUEを戻します。(ユーザー定義ジオメトリの場合、つまりSDO_GTYPE値が2000のジオメトリの場合は、文字列NULLを戻します。)

ジオメトリが無効な場合、次のいずれかを戻します。

- ジオメトリが無効である具体的な理由に基づいて発行されるOracleエラー・メッセージ番号。他の理由でジオメトリが無効になった場合はFALSE。

- エラーのコンテキスト(ジオメトリが無効になる原因となった座標、エッジまたは輪)。(この項の「エラーのコンテキスト: 詳細」を参照してください。)

ジオメトリ・タイプおよびジオメトリの一貫性チェックを行います。

ジオメトリ・タイプの一貫性について、次のことを確認します。

- SDO_GTYPEが有効であるか

- SDO_ETYPE値はSDO_GTYPEの値と一貫性があるか(たとえば、SDO_GTYPEが2003の場合、ジオメトリに1つ以上の要素タイプPOLYGONがあるか)

- SDO_ELEM_INFO_ARRAYに有効な3つの値があるか

ジオメトリの一貫性については、ジオメトリ・タイプについて次のことを確認します。

- ポリゴンに4つ以上の点があり、その点には、ポリゴンをクローズする点が含まれるか(クローズする点では、最後の点が最初の点と同じです。)

- ポリゴンが自己交差していないか

- 線またはポリゴンに同じ点がないか

- ポリゴンは正しく指定されているか(外部の輪の境界は反時計回り、内部の輪の境界は時計回り)

- ポリゴンの内部の輪とポリゴンの外部の輪の接点は1つ以下であるか

- 1つのポリゴンの外部の輪にポリゴンの内部の輪が2つ以上ある場合、それぞれのポリゴンの内部の輪とポリゴンの外部の輪の接点は1つ以下であるか

- 線ストリングに2つ以上の点があるか

- ポリゴンの輪の要素の定義に、1桁および4桁のSDO_ETYPE値が混在していないか

- 円弧上にある点が直線上にないか、または同じ点ではないか

- ジオメトリは(USER_SDO_GEOM_METADATAビューの)DIMINFO列の値で指定した範囲内にあるか

- LRSジオメトリ(第7章を参照)が3次元または4次元であり、(次元数に応じて、3つまたは4つの)有効なメジャー次元の位置を持つか

COLLECTIONタイプのジオメトリの場合、前述の確認の一部は実行されません。具体的には、COLLECTIONタイプのジオメトリのポリゴン要素に対して、内部の輪の確認およびポリゴン同士の重複の確認は行われません。

複数点ジオメトリの場合、このファンクションは、3次元ジオメトリでの重複する頂点を確認しますが、2次元ジオメトリについては確認しません。

3次元ジオメトリの場合は、このファンクションにより、1.11.5項に示す確認も行われます。

ジオメトリの一貫性チェックでは、ファンクションはジオメトリのtolerance値によって線が接しているかどうか、または点が同じであるかどうかを判断します。

toleranceを指定する場合、ジオメトリが、USER_SDO_GEOM_METADATAビューのDIMINFOフィールドに格納されている座標系の境界内に存在するかどうかを検査するためのチェックは行われません。このチェックを行う必要がある場合、theDimInfoを指定します。

flag10gパラメータ値をTRUEに設定すると、ジオメトリの次元に関係なく、Oracle Spatial Release 10.2の検証ロジックが使用されます。これは、リリース11.1より前の形式のジオメトリを含む3次元ジオメトリが、検証に合格できるようにする(この値を設定しない場合は失敗する)場合に有効です。たとえば、3次元の線に円弧が含まれている場合、その線は無効になりますが、flag10gをTRUEに設定することによって、このようなジオメトリが円弧を含むという理由だけで無効とみなされることを回避できます。(後で、円弧の稠密化などにより、現行のリリースの基準に従って、これらのジオメトリを有効にする必要があります。)

このファンクションは、SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTプロシージャのかわりにPL/SQLプロシージャで使用できます。詳細は、SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTの「使用上の注意」を参照してください。

エラーのコンテキスト: 詳細

ジオメトリが無効な場合、その結果には座標、要素、輪およびエッジの組合せについての情報が含まれる可能性があります。

- 座標: 1つの座標は、ジオメトリの1個の頂点を示します。2次元のジオメトリでは、1個の頂点は2つの数値(XとY、つまり経度と緯度)で示されます。3次元のジオメトリでは、1個の頂点は3つの数値で定義され、4次元のジオメトリでは4つの数値で定義されます。(SDO_UTIL.GETVERTICESファンクションを使用して、ジオメトリの座標を戻すことができます。)
13356(ジオメトリ内の隣接する点が冗長である)などのジオメトリ検査エラーが発生した場合は、エラーで示された座標よりも大きい座標を含むようにrownumで停止条件を指定して、SDO_UTIL.GETVERTICESファンクションをコールできます。出力に示された最後の2つの座標が、冗長である座標です。これらの座標は、まったく同一であるか、またはユーザー指定の許容差内にあるために同一の点であるとみなされます。冗長である座標は、SDO_UTIL.REMOVE_DUPLICATE_VERTICESファンクションを使用して削除できます。

- 要素: 1つの要素は、1個の点、1本の線ストリング、または0 (ゼロ)以上の対応する内部ポリゴンを含む1つの外部ポリゴンです。(つまり、ポリゴン要素には、1つの外部の輪と、その外部の輪に関連付けられた内部の輪すべてが含まれます。)ジオメトリが複数要素のジオメトリ(複数の点、複数の線、複数のポリゴンなど)である場合、1つ目の要素がElement 1、2つ目の要素がElement 2となり、以降同様に続きます。

- 輪: 輪は、ポリゴン要素でのみ使用されます。ポリゴンの外部の輪は、ポリゴン要素とみなされます。1つの外部の輪には、0 (ゼロ)個以上の内部の輪(穴)が含まれます。内部の輪には、それぞれ個別の名称が指定されますが、Ring 1は、外部ポリゴン自体を表します。たとえば、Element 1、Ring 1は、ジオメトリの1つ目の外部ポリゴンを示します。Element 1、Ring 2は、1つ目の外部ポリゴンの1つ目の内部ポリゴンを示し、Element 1、Ring 3は、2つ目の内部ポリゴンを示します。ジオメトリが複数のポリゴンである場合、2つ目の外部ポリゴンは、Element 2、Ring 1で表されます。2つ目の外部ポリゴンに関連付けられた内部ポリゴンがある場合、その1つ目の内部ポリゴンはElement 2、Ring 2で表されます。

- エッジ: 1つのエッジは、2つの座標間の1本の直線セグメントを示します。Edge 1は、座標1と座標2の間のセグメントを示し、Edge 2は、座標2と座標3の間の直線セグメントを示します(以降同様に続きます)。ジオメトリの検査でエッジのエラーが最も発生しやすいのは、自己交差ポリゴンを含むジオメトリです。(Open Geospatial Consortiumシンプル・フィーチャ仕様では、ポリゴンの自己交差は許可されていません。)このような場合、Oracleではエラー13349 (ポリゴンの境界が自己交差している)が報告され、自己交差の発生している要素、輪およびエッジの番号が示されます。
最適化された矩形の範囲が経度で119度を越えている場合にエラー13351(共有エッジ)が戻されても、この矩形に対する問合せには、正しい結果を戻すものもあります(6.2.4項を参照)。

例

次の例では、(意図的に無効な状態で作成された)cola_invalid_geomという名前のジオメトリを検査します。

-- Validate; provide context if invalid
SELECT c.name, SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(c.shape, 0.005)
FROM cola_markets c WHERE c.name = 'cola_invalid_geom';

NAME
--------------------------------
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(C.SHAPE,0.005)
--------------------------------------------------------------------------------
cola_invalid_geom
13349 [Element <1>] [Ring <1>][Edge <1>][Edge <3>]

この例の出力で、13349は、「ORA-13349: ポリゴンの境界が自己交差しています。」というエラーを示します。1つ目の要素の1つ目の輪に、交差しているエッジがあります。交差しているエッジは、Edge 1 (1番目の頂点と2番目の頂点)およびEdge 3 (3番目の頂点と4番目の頂点)です。

関連項目

- SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

構文

SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT(

geom_table IN VARCHAR2,

geom_column IN VARCHAR2,

result_table IN VARCHAR2

commit_interval IN NUMBER DEFAULT -1,

conditional IN VARCHAR2 DEFAULT 'TRUE' ,

flag10g IN VARCHAR2 DEFAULT 'FALSE');

説明

格納済のジオメトリがジオメトリ・オブジェクトに対して定義された規則に従っているかどうかを判断するためにジオメトリ列を検査し、無効なジオメトリに関するコンテキスト情報を戻します。

パラメータ

geom_table

空間ジオメトリ表を指定します。

geom_column

検査するジオメトリ・オブジェクト列を指定します。

result_table

検査結果を格納する結果表を指定します。無効なジオメトリの場合、result_tableに行が追加されます。無効なジオメトリが存在しない場合、結果がDONEである1つ以上(commit_interval値によって異なる)の行が追加されます。

commit_interval

Spatialが内部コミット操作を実行し、結果がDONEである行をresult_tableに書き込む(最後のコミット後に無効なジオメトリの行が書き込まれなかった場合)前に検査するジオメトリの数を指定します。commit_intervalを指定しない場合、検査時には内部コミット操作は実行されません。

commit_intervalオプションは、検査の実行中にresult_tableの内容を参照する必要がある場合に有効です。

conditional

条件付きのフラグを指定します(3次元の複合表面または複合ソリッドにのみ適用)。文字列値がTRUE (デフォルト)である場合、2つの外部の輪が同じ平面にあり、エッジを共有していると、検証は行われなくなります。文字列値がFALSEである場合、2つの外部の輪が同じ平面にあり、エッジを共有していても検証を行います。

flag10g

Oracle Database 10g互換性フラグ。文字列値がTRUEである場合、2次元ジオメトリに固有の検証のみが実行され、3次元固有の検証は実行されません。文字列値がFALSE(デフォルト)である場合は、ジオメトリに関連するすべての検証が実行されます。(flag10gパラメータの詳細は、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションの「使用上の注意」を参照してください。)

使用上の注意

このプロシージャは、結果表に検査の結果をロードします。

このプロシージャをコールする前に、空の結果表(result_tableパラメータに指定する表)を作成する必要があります。この結果表の形式は、(sdo_rowid ROWID, result VARCHAR2(2000))です。result_tableが空でない場合、プロシージャをコールする前に表を切り捨てる必要があり、これを行わない場合、プロシージャは列を表の既存のデータに追加します。

結果表には、それぞれの無効なジオメトリに1つの行が含まれます。ジオメトリが有効な場合、次の場合を除き、行は書き込まれません。

- commit_intervalが指定されていない場合(またはcommit_interval値がレイヤーのジオメトリの数より大きい場合)、無効なジオメトリが検出されないと、RESULT値がDONEである単一行が書き込まれます。

- commit_intervalが指定されている場合、ある内部コミットとその直前の内部コミット(または初回の内部コミットの検査の開始時)との間に無効なジオメトリが検出されないと、最後に検査されたジオメトリの主キーおよびRESULT値がDONEである単一行が書き込まれます。(最後の内部コミット操作後に無効なジオメトリが存在しない場合、結果がDONEである前の行がこの行に置換されます。)

無効なジオメトリの各行のSDO_ROWID列には、無効なジオメトリを含む行のROWID値が含まれます。また、RESULT列にはOracleエラー・メッセージ番号およびエラーのコンテキスト(ジオメトリが無効になった原因の座標、エッジまたは輪)が含まれます。エラー・メッセージを検索すると、失敗の原因の詳細を参照できます。

このプロシージャは、レイヤー(geom_column)の各ジオメトリについて次のことを確認します。

- SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションによって実行されるすべてのジオメトリ・タイプの一貫性チェックおよびジオメトリの一貫性チェック(SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションの「使用上の注意」を参照)

- ジオメトリのSRID値(座標系)がUSER_SDO_GEOM_METADATAビュー(2.8項を参照)のDIMINFO列で指定した値と同じか

例

次の例では、COLA_MARKETS表のSHAPE列に格納されているジオメトリ・オブジェクトを検査します。この例では、結果表の作成も含めて示しています。検査の実行前に、意図的に無効な状態で作成されているジオメトリが表に挿入されたと想定します。

-- Is a layer valid? (First, create the result table.)
CREATE TABLE val_results (sdo_rowid ROWID, result varchar2(1000));
-- (Next statement must be on one command line.)
CALL SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT('COLA_MARKETS','SHAPE','VAL_RESULTS');

Call completed.

SQL> SELECT * from val_results;

SDO_ROWID
------------------
RESULT
--------------------------------------------------------------------------------

Rows Processed <12>

AAABXNAABAAAK+YAAC
13349 [Element <1>] [Ring <1>][Edge <1>][Edge <3>]

関連項目

- SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

SDO_GEOM.WITHIN_DISTANCE

構文

SDO_GEOM.WITHIN_DISTANCE(

geom1 IN SDO_GEOMETRY,

dim1 IN SDO_DIM_ARRAY,

dist IN NUMBER,

geom2 IN SDO_GEOMETRY,

dim2 IN SDO_DIM_ARRAY

[, units IN VARCHAR2]

) RETURN VARCHAR2;

または

SDO_GEOM.WITHIN_DISTANCE(

geom1 IN SDO_GEOMETRY,

dist IN NUMBER,

geom2 IN SDO_GEOMETRY,

tol IN NUMBER

[, units IN VARCHAR2]

) RETURN VARCHAR2;

説明

2つの空間オブジェクトが、互いに指定された距離内にあるかどうかを判断します。

パラメータ

geom1

ジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

dist

距離値を指定します。

geom2

ジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

許容差を指定します(1.5.5項を参照)。

units

測定単位(unit=およびMDSYS.SDO_AREA_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、2.10項を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

使用上の注意

パフォーマンスを向上させるには、SDO_GEOM.WITHIN_DISTANCEファンクションのかわりにSDO_WITHIN_DISTANCE演算子(第19章を参照)を使用します。演算子およびファンクションを使用する場合のパフォーマンスに関する注意点の詳細は、1.9項を参照してください。

このファンクションは、オブジェクトの組合せが指定した距離内にある場合にTRUEを戻し、そうでない場合はFALSEを戻します。

領域のある2つのオブジェクト(たとえば、線やポリゴンなど、点以外のオブジェクト)の距離は、それら2つのオブジェクト間の最短距離です。そのため、2つの隣接したポリゴン間の距離はゼロです。

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_bとcola_d間の最短距離が1距離単位以内であるかどうかが検査されます。(例では、2.1項の定義およびデータを使用しています。)

-- Are two geometries within 1 unit of distance apart?
SELECT SDO_GEOM.WITHIN_DISTANCE(c_b.shape, m.diminfo, 1,
c_d.shape, m.diminfo)
FROM cola_markets c_b, cola_markets c_d, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c_b.name = 'cola_b' AND c_d.name = 'cola_d';

SDO_GEOM.WITHIN_DISTANCE(C_B.SHAPE,M.DIMINFO,1,C_D.SHAPE,M.DIMINFO)
--------------------------------------------------------------------------------
TRUE

関連項目

- SDO_GEOM.SDO_DISTANCE

25 SDO_LRSパッケージ(線形参照システム)

MDSYS.SDO_LRSパッケージには、線形参照要素の作成、変更、問合せおよび変換を行うサブプログラムが含まれています。これらのサブプログラムによって、データベースの状態が変更されることはありません。多くのLRSサブプログラムはファンクションです。

この章で説明するサブプログラムを使用するには、第7章で説明する線形参照システム(LRS)の概念を理解しておく必要があります。

表25-1に、ジオメトリ・セグメントの作成および編集に関連するサブプログラムを示します。

表25-1 ジオメトリ・セグメントの作成および編集サブプログラム

サブプログラム

説明

SDO_LRS.DEFINE_GEOM_SEGMENT

ジオメトリ・セグメントを定義します。

SDO_LRS.REDEFINE_GEOM_SEGMENT

ジオメトリ・セグメントのすべての形状点のメジャーを開始および終了メジャーに基づいて移入し、開始点と終了点の間で事前に割り当てられたメジャーを上書きします。

SDO_LRS.CLIP_GEOM_SEGMENT

ジオメトリ・セグメント(SDO_LRS.DYNAMIC_SEGMENTのシノニム)をクリップします。

SDO_LRS.DYNAMIC_SEGMENT

ジオメトリ・セグメント(SDO_LRS.CLIP_GEOM_SEGMENTのシノニム)をクリップします。

SDO_LRS.CONCATENATE_GEOM_SEGMENTS

2つのジオメトリ・セグメントを連結して1つのセグメントにします。

SDO_LRS.LRS_INTERSECTION

いずれか、または両方がLRSジオメトリである2つのジオメトリ・オブジェクトで位相的に共通部分(AND演算)となるLRSジオメトリ・オブジェクトを戻します。

SDO_LRS.OFFSET_GEOM_SEGMENT

ジオメトリ・セグメントから指定したオフセットにあるジオメトリ・セグメントを戻します。

SDO_LRS.SPLIT_GEOM_SEGMENT

ジオメトリ・セグメントを2つに分割します。

SDO_LRS.RESET_MEASURE

開始メジャーおよび終了メジャーを含むジオメトリ・セグメントのすべてのメジャーをNULL値に設定し、事前に割り当てられたメジャーを上書きします。

SDO_LRS.SCALE_GEOM_SEGMENT

ジオメトリ・セグメントをメジャーのスケール変更した結果のジオメトリ・オブジェクトを戻します。

SDO_LRS.SET_PT_MEASURE

指定された点のメジャー値を設定します。

SDO_LRS.REVERSE_MEASURE

ジオメトリ・セグメントのメジャー値を反転させて(方向は反転させない)、新しいジオメトリ・セグメントを戻します。

SDO_LRS.TRANSLATE_MEASURE

ジオメトリ・セグメントを変換して、新しいジオメトリ・セグメントを戻します(開始および終了メジャーを指定した値分シフトします)。

SDO_LRS.REVERSE_GEOMETRY

ジオメトリ・セグメントのメジャー値および方向を反転させて、新しいジオメトリ・セグメントを戻します。

表25-2に、ジオメトリ・セグメントの問合せに関連するサブプログラムを示します。

表25-2 ジオメトリ・セグメントの問合せおよび検査サブプログラム

サブプログラム

説明

SDO_LRS.VALID_GEOM_SEGMENT

ジオメトリ・セグメントが有効かどうかを確認します。

SDO_LRS.VALID_LRS_PT

LRS点が有効かどうかを確認します。

SDO_LRS.VALID_MEASURE

メジャーがジオメトリ・セグメントのメジャー範囲内かどうかを確認します。

SDO_LRS.CONNECTED_GEOM_SEGMENTS

2つのジオメトリ・セグメントが空間的に接続しているかどうかを確認します。

SDO_LRS.GEOM_SEGMENT_LENGTH

ジオメトリ・セグメントの長さを戻します。

SDO_LRS.GEOM_SEGMENT_START_PT

ジオメトリ・セグメントの開始点を戻します。

SDO_LRS.GEOM_SEGMENT_END_PT

ジオメトリ・セグメントの終了点を戻します。

SDO_LRS.GEOM_SEGMENT_START_MEASURE

ジオメトリ・セグメントの開始メジャーを戻します。

SDO_LRS.GEOM_SEGMENT_END_MEASURE

ジオメトリ・セグメントの終了メジャーを戻します。

SDO_LRS.GET_MEASURE

LRS点のメジャーを戻します。

SDO_LRS.GET_NEXT_SHAPE_PT

ジオメトリ・セグメント上の指定したメジャー値またはLRS点の次の形状点を戻します。

SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE

ジオメトリ・セグメント上の指定したメジャー値またはLRS点の次の形状点のメジャー値を戻します。

SDO_LRS.GET_PREV_SHAPE_PT

ジオメトリ・セグメント上の指定したメジャー値またはLRS点の前の形状点を戻します。

SDO_LRS.GET_PREV_SHAPE_PT_MEASURE

ジオメトリ・セグメント上の指定したメジャー値またはLRS点の前の形状点のメジャー値を戻します。

SDO_LRS.IS_GEOM_SEGMENT_DEFINED

LRSセグメントが正しく定義されているかどうかを確認します。

SDO_LRS.IS_MEASURE_DECREASING

メジャー値がLRSセグメントの方向に降順である(数値が減少している)かどうかを確認します。

SDO_LRS.IS_MEASURE_INCREASING

メジャー値がLRSセグメントの方向に昇順である(数値が増加している)かどうかを確認します。

SDO_LRS.IS_SHAPE_PT_MEASURE

指定したメジャー値がジオメトリ・セグメント上の形状点に関連付けられているかどうかを確認します。

SDO_LRS.MEASURE_RANGE

ジオメトリ・セグメントのメジャー範囲(開始メジャーと終了メジャーの差)を戻します。

SDO_LRS.MEASURE_TO_PERCENTAGE

ジオメトリ・セグメントのメジャー範囲に対する指定したメジャーの割合(0から100%)を戻します。

SDO_LRS.PERCENTAGE_TO_MEASURE

ジオメトリ・セグメントのメジャー範囲に対する、指定した割合(0から100%)のメジャー値を戻します。

SDO_LRS.LOCATE_PT

ジオメトリ・セグメントの開始位置から指定した距離にある点を戻します。

SDO_LRS.PROJECT_PT

指定した点の投影点を戻します。投影点はジオメトリ・セグメント上にあります。

SDO_LRS.FIND_LRS_DIM_POS

指定されたSDO_GEOMETRY列のSDO_DIM_ARRAY構造内におけるメジャー次元の位置を戻します。

SDO_LRS.FIND_MEASURE

指定した投影点に最も近いセグメント上の点のメジャーを戻します。

SDO_LRS.FIND_OFFSET

点とジオメトリ・セグメント間の符号付きオフセット(最短距離)を戻します。

SDO_LRS.VALIDATE_LRS_GEOMETRY

LRSジオメトリが有効かどうかを確認します。

表25-3に、ジオメトリ・セグメントの変換に関連するサブプログラムを示します。

表25-3 ジオメトリ・セグメントの変換サブプログラム

サブプログラム

説明

SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY

メジャー次元を作成して、標準の次元配列をLRS次元配列に変換します。

SDO_LRS.CONVERT_TO_LRS_GEOM

メジャー情報を追加して、標準のSDO_GEOMETRY線ストリングをLRSジオメトリ・セグメントに変換します。

SDO_LRS.CONVERT_TO_LRS_LAYER

SDO_GEOMETRY型列のすべてのジオメトリ・オブジェクトを、メジャー情報を持たない標準の線ストリング・ジオメトリからメジャー情報を持つLRSジオメトリ・セグメントに変換します。また、メタデータを更新します。

SDO_LRS.CONVERT_TO_STD_DIM_ARRAY

メジャー次元を削除して、LRS次元配列を標準の次元配列に変換します。

SDO_LRS.CONVERT_TO_STD_GEOM

メジャー情報を削除して、LRSジオメトリ・セグメントを標準のSDO_GEOMETRY線ストリングに変換します。

SDO_LRS.CONVERT_TO_STD_LAYER

SDO_GEOMETRY型列のすべてのジオメトリ・オブジェクトを、メジャー情報を持つLRSジオメトリ・セグメントからメジャー情報を持たない標準の線ストリング・ジオメトリに変換します。また、メタデータを更新します。

変換サブプログラムについては、7.5.10項を参照してください。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

SDO_LRS.CLIP_GEOM_SEGMENT

構文

SDO_LRS.CLIP_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

start_measure IN NUMBER,

end_measure IN NUMBER,

tolerance IN NUMBER DEFAULT 1.0e-8

) RETURN SDO_GEOMETRY;

または

SDO_LRS.CLIP_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

start_measure IN NUMBER,

end_measure IN NUMBER

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメントをクリップした結果のジオメトリ・オブジェクトを戻します。

注意:
SDO_LRS.CLIP_GEOM_SEGMENTおよびSDO_LRS.DYNAMIC_SEGMENTはシノニムであり、両方のファンクションのパラメータ、動作および戻り値は同じです。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

start_measure

ジオメトリ・セグメントの開始メジャーを指定します。

end_measure

ジオメトリ・セグメントの終了メジャーを指定します。

tolerance

許容差を指定します(1.5.5項および7.6項を参照)。デフォルト値は0.00000001です。

使用上の注意

geom_segment、start_measureまたはend_measureが無効な場合は例外が発生します。

ジオメトリ・セグメント上の任意の点を、start_measureおよびend_measureに指定できます。これらの点は、特定の順序に従う必要はありません。たとえば、start_measureとend_measureは、5と10、または10と5に指定できます。

結果のジオメトリ・セグメントの方向およびメジャーは保持されます(元のセグメントが反映されます)。

このファンクションは_3D 形式(SDO_LRS.CLIP_GEOM_SEGMENT_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

ジオメトリ・セグメントのクリップについては、7.5.3項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1をクリップして、メジャー5から10のセグメントを戻します。このセグメントは、建設区域を表します。(例では、7.7項の例の定義を使用しています。)

SELECT  SDO_LRS.CLIP_GEOM_SEGMENT(route_geometry, 5, 10)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.CLIP_GEOM_SEGMENT(ROUTE_GEOMETRY,5,10)(SDO_GTYPE, SDO_SRID, SDO_POINT(X,
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 4, 5, 8, 4, 8, 10, 4, 10))

SDO_LRS.CONCATENATE_GEOM_SEGMENTS

構文

SDO_LRS.CONCATENATE_GEOM_SEGMENTS(

geom_segment_1 IN SDO_GEOMETRY,

geom_segment_2 IN SDO_GEOMETRY,

tolerance IN NUMBER DEFAULT 1.0e-8

) RETURN SDO_GEOMETRY;

または

SDO_LRS.CONCATENATE_GEOM_SEGMENTS(

geom_segment_1 IN SDO_GEOMETRY,

dim_array_1 IN SDO_DIM_ARRAY,

geom_segment_2 IN SDO_GEOMETRY,

dim_array_2 IN SDO_DIM_ARRAY

) RETURN SDO_GEOMETRY;

説明

2つのジオメトリ・セグメントを連結した結果のジオメトリ・オブジェクトを戻します。

パラメータ

geom_segment_1

連結する1つ目のジオメトリ・セグメントを指定します。

dim_array_1

geom_segment_1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

geom_segment_2

連結する2つ目のジオメトリ・セグメントを指定します。

dim_array_2

geom_segment_2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tolerance

許容差を指定します(1.5.5項および7.6項を参照)。デフォルト値は0.00000001です。

使用上の注意

geom_segment_1またはgeom_segment_2に無効なジオメトリ・タイプまたは次元が含まれる場合、またはgeom_segment_1およびgeom_segment_2が異なる座標系に基づく場合、例外が発生します。

1つ目のジオメトリ・セグメントの方向は保持され、2つ目のセグメントのすべてのメジャーは、開始メジャーが1つ目のセグメントの終了メジャーと同じになるようにシフトされます。

geom_segment_1およびgeom_segment_2のジオメトリ・タイプは、単一または複数の線である必要があります。いずれもポリゴンは指定できません。

このファンクションは_3D 形式(SDO_LRS.CONCATENATE_GEOM_SEGMENTS_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

ジオメトリ・セグメントの連結については、7.5.5項を参照してください。

例

次の例では、ジオメトリ・セグメントを定義し、ジオメトリ・セグメントを2つのセグメントに分割した後、それらを連結します。(例では、7.7項の例の定義を使用しています。result_geom_1、result_geom_2およびresult_geom_3の定義は、例7-3で示します。)

DECLARE
geom_segment SDO_GEOMETRY;
line_string SDO_GEOMETRY;
dim_array SDO_DIM_ARRAY;
result_geom_1 SDO_GEOMETRY;
result_geom_2 SDO_GEOMETRY;
result_geom_3 SDO_GEOMETRY;

BEGIN

SELECT a.route_geometry into geom_segment FROM lrs_routes a
WHERE a.route_name = 'Route1';
SELECT m.diminfo into dim_array from
user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY';

-- Define the LRS segment for Route1.
SDO_LRS.DEFINE_GEOM_SEGMENT (geom_segment,
dim_array,
0,    -- Zero starting measure: LRS segment starts at start of route.
27);  -- End of LRS segment is at measure 27.

SELECT a.route_geometry INTO line_string FROM lrs_routes a
WHERE a.route_name = 'Route1';

-- Split Route1 into two segments.
SDO_LRS.SPLIT_GEOM_SEGMENT(line_string,dim_array,5,result_geom_1,result_geom_2);

-- Concatenate the segments that were just split.
result_geom_3 := SDO_LRS.CONCATENATE_GEOM_SEGMENTS(result_geom_1, dim_array, result_geom_2, dim_array);

-- Insert geometries into table, to display later.
INSERT INTO lrs_routes VALUES(
11,
'result_geom_1',
result_geom_1
);
INSERT INTO lrs_routes VALUES(
12,
'result_geom_2',
result_geom_2
);
INSERT INTO lrs_routes VALUES(
13,
'result_geom_3',
result_geom_3
);

END;
/

SDO_LRS.CONNECTED_GEOM_SEGMENTS

構文

SDO_LRS.CONNECTED_GEOM_SEGMENTS(

geom_segment_1 IN SDO_GEOMETRY,

geom_segment_2 IN SDO_GEOMETRY,

tolerance IN NUMBER DEFAULT 1.0e-8

) RETURN VARCHAR2;

または

SDO_LRS.CONNECTED_GEOM_SEGMENTS(

geom_segment_1 IN SDO_GEOMETRY,

dim_array_1 IN SDO_DIM_ARRAY,

geom_segment_2 IN SDO_GEOMETRY,

dim_array_2 IN SDO_DIM_ARRAY

) RETURN VARCHAR2;

説明

2つのジオメトリ・セグメントが空間的に接続しているかどうかを確認します。

パラメータ

geom_segment_1

確認する2つのジオメトリ・セグメントの1つ目を指定します。

dim_array_1

geom_segment_1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

geom_segment_2

確認する2つのジオメトリ・セグメントの2つ目を指定します。

dim_array_2

geom_segment_2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tolerance

許容差を指定します(1.5.5項および7.6項を参照)。デフォルト値は0.00000001です。

使用上の注意

このファンクションは、ジオメトリ・セグメントが空間的に接続している場合はTRUEを戻します。また、空間的に接続していない場合は、FALSEを戻します。

geom_segment_1またはgeom_segment_2に無効なジオメトリ・タイプまたは次元が含まれる場合、またはgeom_segment_1およびgeom_segment_2が異なる座標系に基づく場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.CONNECTED_GEOM_SEGMENTS_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、(分割操作の結果である)2つのジオメトリ・セグメントが空間的に接続しているかどうかを確認します。

-- Are result_geom_1 and result_geom2 connected?
SELECT  SDO_LRS.CONNECTED_GEOM_SEGMENTS(a.route_geometry,
b.route_geometry, 0.005)
FROM lrs_routes a, lrs_routes b
WHERE a.route_id = 11 AND b.route_id = 12;

SDO_LRS.CONNECTED_GEOM_SEGMENTS(A.ROUTE_GEOMETRY,B.ROUTE_GEOMETRY,0.005)
--------------------------------------------------------------------------------
TRUE

SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY

構文

SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY(

dim_array IN SDO_DIM_ARRAY

[, lower_bound IN NUMBER,

upper_bound IN NUMBER,

tolerance IN NUMBER]

) RETURN SDO_DIM_ARRAY;

または

SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY(

dim_array IN SDO_DIM_ARRAY,

dim_name IN VARCHAR2

[, lower_bound IN NUMBER,

upper_bound IN NUMBER,

tolerance IN NUMBER]

) RETURN SDO_DIM_ARRAY;

または

SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY(

dim_array IN SDO_DIM_ARRAY,

dim_name IN VARCHAR2,

dim_pos IN INTEGER

[, lower_bound IN NUMBER,

upper_bound IN NUMBER,

tolerance IN NUMBER]

) RETURN SDO_DIM_ARRAY;

説明

メジャー次元を作成して、標準の次元配列をLRS次元配列に変換します。

パラメータ

dim_array

変換するレイヤー(ジオメトリの列)に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

dim_name

メジャー次元の名前(特に指定がないかぎり、M)を指定します。

dim_pos

メジャー次元の位置(特に指定がないかぎり、SDO_DIM_ARRAY内の最後のSDO_DIM_ELEMENTオブジェクトの位置)を指定します。

lower_bound

メジャー次元の縦座標の下限(SDO_DIM_ELEMENT定義のSDO_LB値)を指定します。

upper_bound

メジャー次元の縦座標の上限(SDO_DIM_ELEMENT定義のSDO_UB値)を指定します。

tolerance

許容差を指定します(1.5.5項および7.6項を参照)。デフォルト値は0.00000001です。

使用上の注意

このファンクションは、メジャー次元を作成して、標準の次元配列をLRS次元配列に変換します。具体的には、SDO_DIM_ELEMENTオブジェクトを(他のdim_posを指定しないかぎり)次元配列のSDO_DIM_ARRAYにある現行のSDO_DIM_ELEMENTオブジェクトの最後に追加し、追加したSDO_DIM_ELEMENTのSDO_DIMNAME値を(他のdim_nameを指定しないかぎり)Mに設定します。upper_bound、lower_boundおよびtoleranceパラメータの値に従って、追加したSDO_DIM_ELEMENTの別の値を設定します。

dim_arrayがすでに次元情報を含む場合は、dim_arrayが戻されます。

このファンクションは_3D 形式(SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

変換ファンクションについては、7.5.10項を参照してください。

例

次の例では、LRS_ROUTES表の次元配列をLRSフォーマットに変換します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY(m.diminfo)
FROM user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY';

SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY(M.DIMINFO)(SDO_DIMNAME, SDO_LB, SDO_UB, SDO_TOL
--------------------------------------------------------------------------------
SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', 0, 20, .005), SDO_DIM_ELEMENT('Y', 0, 20, .00
5), SDO_DIM_ELEMENT('M', 0, 20, .005))

SDO_LRS.CONVERT_TO_LRS_GEOM

構文

SDO_LRS.CONVERT_TO_LRS_GEOM(

standard_geom IN SDO_GEOMETRY

[, start_measure IN NUMBER,

end_measure IN NUMBER]

) RETURN SDO_GEOMETRY;

または

SDO_LRS.CONVERT_TO_LRS_GEOM(

standard_geom IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY

[, start_measure IN NUMBER,

end_measure IN NUMBER]

) RETURN SDO_GEOMETRY;

または

SDO_LRS.CONVERT_TO_LRS_GEOM(

standard_geom IN SDO_GEOMETRY,

m_pos IN INTEGER

[, start_measure IN NUMBER,

end_measure IN NUMBER]

) RETURN SDO_GEOMETRY;

説明

メジャー情報を追加して、標準のSDO_GEOMETRY線ストリングをLRSジオメトリ・セグメントに変換します。

パラメータ

standard_geom

メジャー情報を持たない線ストリング・ジオメトリを指定します。

dim_array

standard_geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

m_pos

メジャー次元の位置を指定します。この値には、常に3または4を指定します。デフォルトでは、メジャー次元はSDO_DIM_ARRAYの最後の次元です。

start_measure

ジオメトリ・セグメントの開始点から線形フィーチャの開始点までの距離を指定します。デフォルト値は0(ゼロ)です。

end_measure

ジオメトリ・セグメントの終了点から線形フィーチャの開始点までの距離を指定します。デフォルトは地図上の長さです(地図上の長さが75で、メジャー単位がマイルの場合は75です)。

使用上の注意

このファンクションは、メジャー情報を持つLRSジオメトリ・セグメントおよびすべての形状点のメジャー情報を戻します。

standard_geomに無効なジオメトリ・タイプまたは次元が含まれるか、m_posが3から4の範囲外であるか、またはstart_measureまたはend_measureが範囲外の場合、例外が発生します。

このファンクションは_3D形式(SDO_LRS.CONVERT_TO_LRS_GEOM_3D)が使用可能です。ただし、SDO_LRS.CONVERT_TO_LRS_GEOM_3Dでは、m_posパラメータを使用できません。LRSファンクションの_3D 形式については、7.4項を参照してください。

変換ファンクションについては、7.5.10項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1をLRSフォーマットに変換します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.CONVERT_TO_LRS_GEOM(a.route_geometry, m.diminfo)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.CONVERT_TO_LRS_GEOM(A.ROUTE_GEOMETRY,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO
--------------------------------------------------------------------------------
SDO_GEOMETRY(3002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 8, 4, 8, 12, 4, 12, 12, 10, NULL, 8, 10, 22, 5, 14, 27))

SDO_LRS.CONVERT_TO_LRS_LAYER

構文

SDO_LRS.CONVERT_TO_LRS_LAYER(

table_name IN VARCHAR2,

column_name IN VARCHAR2

[, lower_bound IN NUMBER,

upper_bound IN NUMBER,

tolerance IN NUMBER]

) RETURN VARCHAR2;

または

SDO_LRS.CONVERT_TO_LRS_LAYER(

table_name IN VARCHAR2,

column_name IN VARCHAR2,

dim_name IN VARCHAR2,

dim_pos IN INTEGER

[, lower_bound IN NUMBER,

upper_bound IN NUMBER,

tolerance IN NUMBER]

) RETURN VARCHAR2;

説明

SDO_GEOMETRY型の列のすべてのジオメトリ・オブジェクト(レイヤー)を、メジャー情報を持たない標準の線ストリング・ジオメトリからメジャー情報を持つLRSジオメトリ・セグメントに変換します。また、USER_SDO_GEOM_METADATAビューのメタデータを更新します。

パラメータ

table_name

SDO_GEOMETRYオブジェクトを持つ列を含む表を指定します。

column_name

SDO_GEOMETRYオブジェクトを含むtable_nameの列を指定します。

dim_name

メジャー次元の名前を指定します。このパラメータがNULLである場合、Mが使用されます。

dim_pos

指定されたSDO_GEOMETRY列のSDO_DIM_ARRAY構造内におけるメジャー次元の位置を指定します。このパラメータがNULLである場合、最後の位置に対応する数が使用されます。

lower_bound

メジャー次元の縦座標の下限(SDO_DIM_ELEMENT定義のSDO_LB値)を指定します。

upper_bound

メジャー次元の縦座標の上限(SDO_DIM_ELEMENT定義のSDO_UB値)を指定します。

tolerance

許容差を指定します(1.5.5項および7.6項を参照)。デフォルト値は0.00000001です。

使用上の注意

このファンクションは、変換が正常に行われた場合、またはレイヤーがすでにメジャー情報を含む場合はTRUEを戻します。また、変換が失敗した場合は例外を戻します。

表の既存の次元情報が無効な場合は、例外が発生します。

メジャー値は、開始メジャー0(ゼロ)および地図上の長さを表す終了メジャーに基づいて割り当てられます。

column_nameにすでに空間索引が存在する場合、レイヤーの変換前にその索引を削除し、レイヤーの変換後に新しい索引を作成する必要があります。索引の削除および作成については、第18章に示すDROP INDEX文およびCREATE INDEX文の説明を参照してください。

このファンクションは_3D 形式(SDO_LRS.CONVERT_TO_LRS_LAYER_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

変換ファンクションについては、7.5.10項を参照してください。

例

次の例では、LRS_ROUTES表のROUTE_GEOMETRY列のジオメトリ・セグメントをLRSフォーマットに変換します。(例では、7.7項の例の定義を使用しています。)SELECT文は次元情報が追加されていることを示します(定義には、SDO_DIM_ELEMENT('M', NULL, NULL, NULL)が含まれます)。

BEGIN
IF (SDO_LRS.CONVERT_TO_LRS_LAYER('LRS_ROUTES', 'ROUTE_GEOMETRY') =  'TRUE')
THEN
DBMS_OUTPUT.PUT_LINE('Conversion from STD_LAYER to LRS_LAYER succeeded.');
ELSE
DBMS_OUTPUT.PUT_LINE('Conversion from STD_LAYER to LRS_LAYER failed.');
END IF;
END;
.
/
Conversion from STD_LAYER to LRS_LAYER succeeded.

PL/SQL procedure successfully completed.

SQL> SELECT diminfo FROM user_sdo_geom_metadata WHERE table_name = 'LRS_ROUTES' AND column_name = 'ROUTE_GEOMETRY';

DIMINFO(SDO_DIMNAME, SDO_LB, SDO_UB, SDO_TOLERANCE)
--------------------------------------------------------------------------------
SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', 0, 20, .005), SDO_DIM_ELEMENT('Y', 0, 20, .00
5), SDO_DIM_ELEMENT('M', NULL, NULL, NULL))

SDO_LRS.CONVERT_TO_STD_DIM_ARRAY

構文

SDO_LRS.CONVERT_TO_STD_DIM_ARRAY(

dim_array IN SDO_DIM_ARRAY

[, m_pos IN INTEGER]

) RETURN SDO_DIM_ARRAY;

説明

メジャー次元を削除して、LRS次元配列を標準の次元配列に変換します。

パラメータ

dim_array

変換するレイヤー(ジオメトリの列)に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

m_pos

メジャー次元の位置を指定します。この値には、常に3または4を指定します。デフォルトでは、メジャー次元はSDO_DIM_ARRAYの最後の次元です。

使用上の注意

このファンクションは、メジャー次元を削除して、LRS次元配列を標準の次元配列に変換します。具体的には、dim_arrayのSDO_DIM_ARRAYにある現行のSDO_DIM_ELEMENTオブジェクトの最後のSDO_DIM_ELEMENTオブジェクトを削除します。

m_posが無効な場合(3から4の範囲外の場合)、例外が発生します。

dim_arrayがすでに(次元情報を含まない)標準の次元配列である場合は、dim_arrayが戻されます。

このファンクションは_3D 形式(SDO_LRS.CONVERT_TO_STD_DIM_ARRAY_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

変換ファンクションについては、7.5.10項を参照してください。

例

次の例では、LRS_ROUTES表の次元配列を標準フォーマットに変換します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.CONVERT_TO_STD_DIM_ARRAY(m.diminfo)
FROM user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY';

SDO_LRS.CONVERT_TO_STD_DIM_ARRAY(M.DIMINFO)(SDO_DIMNAME, SDO_LB, SDO_UB, SDO_TOL
--------------------------------------------------------------------------------
SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', 0, 20, .005), SDO_DIM_ELEMENT('Y', 0, 20, .00
5))

SDO_LRS.CONVERT_TO_STD_GEOM

構文

SDO_LRS.CONVERT_TO_STD_GEOM(

lrs _geom IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN SDO_GEOMETRY;

説明

メジャー情報を削除して、LRSジオメトリ・セグメントを標準のSDO_GEOMETRY線ストリングに変換します。

パラメータ

lrs_geom

メジャー情報を含むLRSジオメトリを指定します。

dim_array

lrs_geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、すべてのメジャーの情報が削除されたSDO_GEOMETRYオブジェクトを戻します。

このファンクションは_3D 形式(SDO_LRS.CONVERT_TO_STD_GEOM_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

変換ファンクションについては、7.5.10項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1を標準フォーマットに変換します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.CONVERT_TO_STD_GEOM(a.route_geometry, m.diminfo)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.CONVERT_TO_STD_GEOM(A.ROUTE_GEOMETRY,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 2, 4, 8, 4, 12, 4, 12, 10, 8, 10, 5, 14))

SDO_LRS.CONVERT_TO_STD_LAYER

構文

SDO_LRS.CONVERT_TO_STD_LAYER(

table_name IN VARCHAR2,

column_name IN VARCHAR2

) RETURN VARCHAR2;

説明

SDO_GEOMETRY型の列のすべてのジオメトリ・オブジェクト(レイヤー)を、メジャー情報を持つLRSジオメトリ・セグメントからメジャー情報を持たない標準の線ストリング・ジオメトリに変換します。また、USER_SDO_GEOM_METADATAビューのメタデータを更新します。

パラメータ

table_name

SDO_GEOMETRYオブジェクトを持つ列を含む表を指定します。

column_name

SDO_GEOMETRYオブジェクトを含むtable_nameの列を指定します。

使用上の注意

このファンクションは、変換が正常に行われた場合、またはレイヤーがすでに標準のレイヤー(メジャー情報を持たないジオメトリを含む)の場合はTRUEを戻します。また、変換が失敗した場合は例外を戻します。

column_nameにすでに空間索引が存在する場合、レイヤーの変換前にその索引を削除し、レイヤーの変換後に新しい索引を作成する必要があります。索引の削除および作成については、第18章に示すDROP INDEX文およびCREATE INDEX文の説明を参照してください。

このファンクションは_3D 形式(SDO_LRS.CONVERT_TO_STD_LAYER_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

変換ファンクションについては、7.5.10項を参照してください。

例

次の例では、LRS_ROUTES表のROUTE_GEOMETRY列のジオメトリ・セグメントを標準フォーマットに変換します。(例では、7.7項の例の定義を使用しています。)SELECT文は次元情報が削除されたことを示します(定義には、SDO_DIM_ELEMENT('M', NULL, NULL, NULL)が含まれません)。

BEGIN
IF (SDO_LRS.CONVERT_TO_STD_LAYER('LRS_ROUTES', 'ROUTE_GEOMETRY') =  'TRUE')
THEN
DBMS_OUTPUT.PUT_LINE('Conversion from LRS_LAYER to STD_LAYER succeeded.');
ELSE
DBMS_OUTPUT.PUT_LINE('Conversion from LRS_LAYER to STD_LAYER failed.');
END IF;
END;
.
/
Conversion from LRS_LAYER to STD_LAYER succeeded.

PL/SQL procedure successfully completed.

SELECT diminfo FROM user_sdo_geom_metadata
WHERE table_name = 'LRS_ROUTES' AND column_name = 'ROUTE_GEOMETRY';

DIMINFO(SDO_DIMNAME, SDO_LB, SDO_UB, SDO_TOLERANCE)
--------------------------------------------------------------------------------
SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', 0, 20, .005), SDO_DIM_ELEMENT('Y', 0, 20, .00
5))

SDO_LRS.DEFINE_GEOM_SEGMENT

構文

SDO_LRS.DEFINE_GEOM_SEGMENT(

geom_segment IN OUT SDO_GEOMETRY

[, start_measure IN NUMBER,

end_measure IN NUMBER]);

または

SDO_LRS.DEFINE_GEOM_SEGMENT(

geom_segment IN OUT SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY

[, start_measure IN NUMBER,

end_measure IN NUMBER]);

説明

ジオメトリ・セグメントに開始および終了メジャーを割り当てることによってジオメトリ・セグメントを定義し、NULLのメジャーに値を割り当てます。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

start_measure

ジオメトリ・セグメントの開始点から線形フィーチャの開始点までの距離を指定します。デフォルトは、メジャー次元の既存の値(存在する場合)です。メジャー次元の値が存在しない場合、デフォルト値は0 (ゼロ)です。

end_measure

ジオメトリ・セグメントの終了点から線形フィーチャの開始点までの距離を指定します。デフォルトは、メジャー次元の既存の値(存在する場合)です。メジャー次元の値が存在しない場合、セグメントの地図上の長さです。

使用上の注意

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、またはstart_measureまたはend_measureが範囲外の場合、例外が発生します。

ジオメトリ・セグメントの割り当てられていないすべてのメジャーは、自動的に移入されます。

結果のジオメトリ・セグメント(geom_segment)をデータベースに格納するには、UPDATE文またはINSERT文を適切に実行する必要があります。

このプロシージャは_3D 形式(SDO_LRS.DEFINE_GEOM_SEGMENT_3D)が使用可能です。LRSファンクションおよびプロシージャの_3D 形式については、7.4項を参照してください。

ジオメトリ・セグメントの定義については、7.5.1項を参照してください。

例

次の例では、ジオメトリ・セグメントを定義し、ジオメトリ・セグメントを2つのセグメントに分割した後、それらを連結します。(例では、7.7項の例の定義を使用しています。result_geom_1、result_geom_2およびresult_geom_3の定義は、例7-3で示します。)

DECLARE
geom_segment SDO_GEOMETRY;
line_string SDO_GEOMETRY;
dim_array SDO_DIM_ARRAY;
result_geom_1 SDO_GEOMETRY;
result_geom_2 SDO_GEOMETRY;
result_geom_3 SDO_GEOMETRY;

BEGIN

SELECT a.route_geometry into geom_segment FROM lrs_routes a
WHERE a.route_name = 'Route1';
SELECT m.diminfo into dim_array from
user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY';

-- Define the LRS segment for Route1. This will populate any null measures.
SDO_LRS.DEFINE_GEOM_SEGMENT (geom_segment,
dim_array,
0,    -- Zero starting measure: LRS segment starts at start of route.
27);  -- End of LRS segment is at measure 27.

SELECT a.route_geometry INTO line_string FROM lrs_routes a
WHERE a.route_name = 'Route1';

-- Split Route1 into two segments.
SDO_LRS.SPLIT_GEOM_SEGMENT(line_string,dim_array,5,result_geom_1,result_geom_2);

-- Concatenate the segments that were just split.
result_geom_3 := SDO_LRS.CONCATENATE_GEOM_SEGMENTS(result_geom_1, dim_array, result_geom_2, dim_array);

-- Update and insert geometries into table, to display later.
UPDATE lrs_routes a SET a.route_geometry = geom_segment
WHERE a.route_id = 1;

INSERT INTO lrs_routes VALUES(
11,
'result_geom_1',
result_geom_1
);
INSERT INTO lrs_routes VALUES(
12,
'result_geom_2',
result_geom_2
);
INSERT INTO lrs_routes VALUES(
13,
'result_geom_3',
result_geom_3
);

END;
/

SDO_LRS.DYNAMIC_SEGMENT

構文

SDO_LRS.DYNAMIC_SEGMENT(

geom_segment IN SDO_GEOMETRY,

start_measure IN NUMBER,

end_measure IN NUMBER,

tolerance IN NUMBER DEFAULT 1.0e-8

) RETURN SDO_GEOMETRY;

または

SDO_LRS.DYNAMIC_SEGMENT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

start_measure IN NUMBER,

end_measure IN NUMBER

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメントをクリップした結果のジオメトリ・オブジェクトを戻します。

注意:
SDO_LRS.CLIP_GEOM_SEGMENTおよびSDO_LRS.DYNAMIC_SEGMENTはシノニムであり、両方のファンクションのパラメータ、動作および戻り値は同じです。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

start_measure

ジオメトリ・セグメントの開始メジャーを指定します。

end_measure

ジオメトリ・セグメントの終了メジャーを指定します。

tolerance

許容差を指定します(1.5.5項および7.6項を参照)。デフォルト値は0.00000001です。

使用上の注意

geom_segment、start_measureまたはend_measureが無効な場合は例外が発生します。

ジオメトリ・セグメントにクリップした結果の方向およびメジャーは保持されます。

ジオメトリ・セグメントのクリップについては、7.5.3項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1をクリップして、メジャー5から10のセグメントを戻します。このセグメントは、建設区域を表します。(例では、7.7項の例の定義を使用しています。)

SELECT  SDO_LRS.DYNAMIC_SEGMENT(route_geometry, 5, 10)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.DYNAMIC_SEGMENT(ROUTE_GEOMETRY,5,10)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 4, 5, 8, 4, 8, 10, 4, 10))

SDO_LRS.FIND_LRS_DIM_POS

構文

SDO_LRS.FIND_LRS_DIM_POS(

table_name IN VARCHAR2,

column_name IN VARCHAR2

) RETURN INTEGER;

説明

指定されたSDO_GEOMETRY列のSDO_DIM_ARRAY構造内におけるメジャー次元の位置を戻します。

パラメータ

table_name

SDO_GEOMETRYオブジェクトを持つ列を含む表を指定します。

column_name

SDO_GEOMETRYオブジェクトを含むtable_nameの列を指定します。

使用上の注意

なし。

例

次の例では、LRS_ROUTES表のROUTE_GEOMETRY列のジオメトリについて、SDO_DIM_ARRAY構造内におけるメジャー次元の位置を戻します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.FIND_LRS_DIM_POS('LRS_ROUTES', 'ROUTE_GEOMETRY') FROM DUAL;

SDO_LRS.FIND_LRS_DIM_POS('LRS_ROUTES','ROUTE_GEOMETRY')
-------------------------------------------------------
3

SDO_LRS.FIND_MEASURE

構文

SDO_LRS.FIND_MEASURE(

geom_segment IN SDO_GEOMETRY,

point IN SDO_GEOMETRY

) RETURN NUMBER;

または

SDO_LRS.FIND_MEASURE(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

point IN SDO_GEOMETRY

) RETURN NUMBER;

説明

指定した投影点に最も近いセグメント上の点のメジャーを戻します。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。このファンクションは、投影点に最も近いセグメント上の点のメジャーを戻します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

point

投影点を指定します。このファンクションは、投影点に最も近いgeom_segment上の点のメジャーを戻します。

使用上の注意

このファンクションは、投影点に最も近いgeom_segment上の点のメジャーを戻します。たとえば、投影点がショッピング・モールを表す場合、このファンクションは、高速道路の開始位置からショッピング・モールに最も近い高速道路上の地点までの距離を算出します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、またはgeom_segmentおよびpointが異なる座標系に基づく場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.FIND_MEASURE_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、点(10, 7)に最も近いジオメトリ・セグメントRoute 1上の点のメジャーを検索します。(例では、7.7項の例の定義を使用しています。)

-- Find measure for point on segment closest to 10,7.
-- Should return 15 (for point 12,7).
SELECT  SDO_LRS.FIND_MEASURE(a.route_geometry, m.diminfo,
SDO_GEOMETRY(3001, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 1, 1),
SDO_ORDINATE_ARRAY(10, 7, NULL)) )
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.FIND_MEASURE(A.ROUTE_GEOMETRY,M.DIMINFO,SDO_GEOMETRY(3001,NULL,NUL
--------------------------------------------------------------------------------
15

SDO_LRS.FIND_OFFSET

構文

SDO_LRS.FIND_OFFSET(

geom_segment IN SDO_GEOMETRY,

point IN SDO_GEOMETRY,

tolerance IN NUMBER DEFAULT 1.0e-8

) RETURN NUMBER;

または

SDO_LRS.FIND_OFFSET(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

point IN SDO_GEOMETRY

[, point_dim_array IN SDO_GEOMETRY]

) RETURN NUMBER;

説明

点とジオメトリ・セグメント間の符号付きオフセット(最短距離)を戻します。

パラメータ

geom_segment

pointからの距離を確認するジオメトリ・セグメントを指定します。

point

geom_segmentからの最短距離が戻される点を指定します。

tolerance

許容差を指定します(1.5.5項および7.6項を参照)。デフォルト値は0.00000001です。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

point_dim_array

pointに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、offset出力パラメータを指定したSDO_LRS.PROJECT_PTファンクション形式をコールします。ジオメトリ・セグメントおよび点情報を渡し、SDO_LRS.PROJECT_PT offsetパラメータ値を戻します。このため、ジオメトリ・セグメントからの点のオフセットを調べるには、このファンクションまたはoffsetパラメータを指定したSDO_LRS.PROJECT_PTファンクションを使用できます。

geom_segmentまたはpointに無効なジオメトリ・タイプまたは次元が含まれる場合、またはgeom_segmentおよびpointが異なる座標系に基づく場合、例外が発生します。

ジオメトリ・セグメントへのオフセットについては、7.1.5項を参照してください。

例

次の例では、点(9,3,NULL)の、ジオメトリ・セグメントRoute 1からのオフセットを戻します。(例では、7.7項の例の定義を使用しています。)7.7項の図7-20に示すとおり、点(9,3,NULL)はセグメントの右側にあるため、オフセットには負の値が含まれます(7.1.5項を参照)。点(9,3.NULL)は、セグメント上にある点(9,4,NULL)から1距離単位離れています。

-- Find the offset of point (9,3,NULL) from the road; should return -1.
SELECT  SDO_LRS.FIND_OFFSET(route_geometry,
SDO_GEOMETRY(3301, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 1, 1),
SDO_ORDINATE_ARRAY(9, 3, NULL)) )
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.FIND_OFFSET(ROUTE_GEOMETRY,SDO_GEOMETRY(3301,NULL,NULL,SDO_ELEM_INFO_ARR
--------------------------------------------------------------------------------
-1

SDO_LRS.GEOM_SEGMENT_END_MEASURE

構文

SDO_LRS.GEOM_SEGMENT_END_MEASURE(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN NUMBER;

説明

ジオメトリ・セグメントの終了メジャーを戻します。

パラメータ

geom_segment

終了メジャーを戻すジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、geom_segmentの終了メジャーを戻します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.GEOM_SEGMENT_END_MEASURE_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1の終了メジャーを戻します。(例では、7.7項の例の定義を使用しています。)

SELECT  SDO_LRS.GEOM_SEGMENT_END_MEASURE(route_geometry)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.GEOM_SEGMENT_END_MEASURE(ROUTE_GEOMETRY)
------------------------------------------------
27

SDO_LRS.GEOM_SEGMENT_END_PT

構文

SDO_LRS.GEOM_SEGMENT_END_PT(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメントの終了点を戻します。

パラメータ

geom_segment

終了点を戻すジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、geom_segmentの終了点を戻します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.GEOM_SEGMENT_END_PT_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1の終了点を戻します。(例では、7.7項の例の定義を使用しています。)

SELECT  SDO_LRS.GEOM_SEGMENT_END_PT(route_geometry)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.GEOM_SEGMENT_END_PT(ROUTE_GEOMETRY)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y,
--------------------------------------------------------------------------------
SDO_GEOMETRY(3301, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
5, 14, 27))

SDO_LRS.GEOM_SEGMENT_LENGTH

構文

SDO_LRS.GEOM_SEGMENT_LENGTH(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN NUMBER;

説明

ジオメトリ・セグメントの長さを戻します。

パラメータ

geom_segment

長さを算出するジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、geom_segmentの長さを戻します。長さはジオメトリの長さで、メジャー単位値の合計とは異なります。メジャー単位でのセグメントの長さを測るには、SDO_LRS.GEOM_SEGMENT_END_MEASURE操作の結果からSDO_LRS.GEOM_SEGMENT_START_MEASURE操作の結果を引きます。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.GEOM_SEGMENT_LENGTH_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1の長さを戻します。(例では、7.7項の例の定義を使用しています。)

SELECT  SDO_LRS.GEOM_SEGMENT_LENGTH(route_geometry)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.GEOM_SEGMENT_LENGTH(ROUTE_GEOMETRY)
-------------------------------------------
27

SDO_LRS.GEOM_SEGMENT_START_MEASURE

構文

SDO_LRS.GEOM_SEGMENT_START_MEASURE(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN NUMBER;

説明

ジオメトリ・セグメントの開始メジャーを戻します。

パラメータ

geom_segment

開始メジャーを戻すジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、geom_segmentの開始メジャーを戻します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.GEOM_SEGMENT_START_MEASURE_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1の開始メジャーを戻します。(例では、7.7項の例の定義を使用しています。)

SELECT  SDO_LRS.GEOM_SEGMENT_START_MEASURE(route_geometry)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.GEOM_SEGMENT_START_MEASURE(ROUTE_GEOMETRY)
--------------------------------------------------
0

SDO_LRS.GEOM_SEGMENT_START_PT

構文

SDO_LRS.GEOM_SEGMENT_START_PT(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメントの開始点を戻します。

パラメータ

geom_segment

開始点を戻すジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、geom_segmentの開始点を戻します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.GEOM_SEGMENT_START_PT_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1の開始点を戻します。(例では、7.7項の例の定義を使用しています。)

SELECT  SDO_LRS.GEOM_SEGMENT_START_PT(route_geometry)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.GEOM_SEGMENT_START_PT(ROUTE_GEOMETRY)(SDO_GTYPE, SDO_SRID, SDO_POINT(X,
--------------------------------------------------------------------------------
SDO_GEOMETRY(3301, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
2, 2, 0))

SDO_LRS.GET_MEASURE

構文

SDO_LRS.GET_MEASURE(

point IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN NUMBER;

説明

LRS点のメジャーを戻します。

パラメータ

point

メジャーを戻す点を指定します。

dim_array

pointに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、LRS点のメジャーを戻します。

pointが無効な場合、「invalid LRS point」例外が発生します。

このファンクションをSDO_LRS.PROJECT_PTと比較すると、このファンクションは、ジオメトリ・セグメント上にあるとはかぎらない点でも入力値として受け入れますが、戻すのはメジャー値ではなく、ジオメトリ・セグメント上の点です。SDO_LRS.GET_MEASUREファンクションを使用して、SDO_LRS.PROJECT_PTによって戻される投影点のメジャーを戻す例を次に示します。

このファンクションは_3D 形式(SDO_LRS.GET_MEASURE_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、投影点のメジャーを戻します。この場合、投影の結果できる点はセグメントの開始位置から9単位です。

SELECT SDO_LRS.GET_MEASURE(
SDO_LRS.PROJECT_PT(a.route_geometry, m.diminfo,
SDO_GEOMETRY(3001, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 1, 1),
SDO_ORDINATE_ARRAY(9, 3, NULL)) ),
m.diminfo )
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.GET_MEASURE(SDO_LRS.PROJECT_PT(A.ROUTE_GEOMETRY,M.DIMINFO,SDO_GEOM
--------------------------------------------------------------------------------
9

SDO_LRS.GET_NEXT_SHAPE_PT

構文

SDO_LRS.GET_NEXT_SHAPE_PT(

geom_segment IN SDO_GEOMETRY,

measure IN NUMBER

) RETURN SDO_GEOMETRY;

または

SDO_LRS.GET_NEXT_SHAPE_PT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER

) RETURN SDO_GEOMETRY;

または

SDO_LRS.GET_NEXT_SHAPE_PT(

geom_segment IN SDO_GEOMETRY,

point IN SDO_GEOMETRY

) RETURN SDO_GEOMETRY;

または

SDO_LRS.GET_NEXT_SHAPE_PT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

point IN SDO_GEOMETRY

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメント上の指定したメジャー値またはLRS点の次の形状点を戻します。

パラメータ

geom_segment

ジオメトリ・セグメントを指定します。

measure

ジオメトリ・セグメント上の次の形状点を戻すメジャー値を指定します。

point

次の形状点を戻す点を指定します。pointがgeom_segment上にない場合、指定した点に最も近いジオメトリ・セグメント上の点が計算され、その点の次の形状点が戻されます。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

measureまたはpointにジオメトリ・セグメントの終了点を指定した場合、NULL値が戻されます。

measureがgeom_segmentに有効な値ではない場合、またはpointが有効なLRS点ではない場合、例外が発生します。

このファンクションは、ジオメトリ・セグメント上の指定したメジャー値またはLRS点の前の形状点を戻すSDO_LRS.GET_PREV_SHAPE_PTと対照的です。

このファンクションは_3D 形式(SDO_LRS.GET_NEXT_SHAPE_PT_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1上のメジャー14の次にある形状点を戻します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.GET_NEXT_SHAPE_PT(a.route_geometry, 14)
FROM lrs_routes a WHERE a.route_id = 1;

SDO_LRS.GET_NEXT_SHAPE_PT(A.ROUTE_GEOMETRY,14)(SDO_GTYPE, SDO_SRID, SDO_POINT(X,
--------------------------------------------------------------------------------
SDO_GEOMETRY(3301, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
12, 10, 18))

SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE

構文

SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE(

geom_segment IN SDO_GEOMETRY,

measure IN NUMBER

) RETURN NUMBER;

または

SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER

) RETURN NUMBER;

または

SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE(

geom_segment IN SDO_GEOMETRY,

point IN SDO_GEOMETRY

) RETURN NUMBER;

または

SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

point IN SDO_GEOMETRY

) RETURN NUMBER;

説明

ジオメトリ・セグメント上の指定したメジャー値またはLRS点の次の形状点のメジャー値を戻します。

パラメータ

geom_segment

ジオメトリ・セグメントを指定します。

measure

ジオメトリ・セグメント上の次の形状点のメジャー値を戻すメジャー値を指定します。

point

次の形状点のメジャー値を戻す点を指定します。pointがgeom_segment上にない場合、指定した点に最も近いジオメトリ・セグメント上の点が計算され、その点の次の形状点のメジャー値が戻されます。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

measureまたはpointにジオメトリ・セグメントの終了点を指定した場合、NULL値が戻されます。

measureがgeom_segmentに有効な値ではない場合、またはpointが有効なLRS点ではない場合、例外が発生します。

このファンクションは、ジオメトリ・セグメント上の指定したメジャー値またはLRS点の前の形状点のメジャー値を戻すSDO_LRS.GET_PREV_SHAPE_PT_MEASUREと対照的です。

このファンクションは_3D 形式(SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1上のメジャー14の次にある形状点のメジャー値を戻します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE(a.route_geometry, 14)
FROM lrs_routes a WHERE a.route_id = 1;

SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE(A.ROUTE_GEOMETRY,14)
------------------------------------------------------
18

SDO_LRS.GET_PREV_SHAPE_PT

構文

SDO_LRS.GET_PREV_SHAPE_PT(

geom_segment IN SDO_GEOMETRY,

measure IN NUMBER

) RETURN SDO_GEOMETRY;

または

SDO_LRS.GET_PREV_SHAPE_PT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER

) RETURN SDO_GEOMETRY;

または

SDO_LRS.GET_PREV_SHAPE_PT(

geom_segment IN SDO_GEOMETRY,

point IN SDO_GEOMETRY

) RETURN SDO_GEOMETRY;

または

SDO_LRS.GET_PREV_SHAPE_PT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

point IN SDO_GEOMETRY

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメント上の指定したメジャー値またはLRS点の前の形状点を戻します。

パラメータ

geom_segment

ジオメトリ・セグメントを指定します。

measure

ジオメトリ・セグメント上の前の形状点を戻すメジャー値を指定します。

point

前の形状点を戻す点を指定します。pointがgeom_segment上にない場合、指定した点に最も近いジオメトリ・セグメント上の点が計算され、その点の前で最も近い形状点が戻されます。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

measureまたはpointにジオメトリ・セグメントの開始点を指定した場合、NULL値が戻されます。

measureがgeom_segmentに有効な値ではない場合、またはpointが有効なLRS点ではない場合、例外が発生します。

このファンクションは、ジオメトリ・セグメント上の指定したメジャー値またはLRS点の次の形状点を戻すSDO_LRS.GET_NEXT_SHAPE_PTと対照的です。

このファンクションは_3D 形式(SDO_LRS.GET_PREV_SHAPE_PT_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1上のメジャー14の前にあり、メジャー14に最も近い形状点を戻します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.GET_PREV_SHAPE_PT(a.route_geometry, 14)
FROM lrs_routes a WHERE a.route_id = 1;

SDO_LRS.GET_PREV_SHAPE_PT(A.ROUTE_GEOMETRY,14)(SDO_GTYPE, SDO_SRID, SDO_POINT(X,
--------------------------------------------------------------------------------
SDO_GEOMETRY(3301, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
12, 4, 12))

SDO_LRS.GET_PREV_SHAPE_PT_MEASURE

構文

SDO_LRS.GET_PREV_SHAPE_PT_MEASURE(

geom_segment IN SDO_GEOMETRY,

measure IN NUMBER

) RETURN NUMBER;

または

SDO_LRS.GET_PREV_SHAPE_PT_MEASURE(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER

) RETURN NUMBER;

または

SDO_LRS.GET_PREV_SHAPE_PT_MEASURE(

geom_segment IN SDO_GEOMETRY,

point IN SDO_GEOMETRY

) RETURN NUMBER;

または

SDO_LRS.GET_PREV_SHAPE_PT_MEASURE(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

point IN SDO_GEOMETRY

) RETURN NUMBER;

説明

ジオメトリ・セグメント上の指定したメジャー値またはLRS点の前の形状点のメジャー値を戻します。

パラメータ

geom_segment

ジオメトリ・セグメントを指定します。

measure

ジオメトリ・セグメント上の前の形状点のメジャー値を戻すメジャー値を指定します。

point

前の形状点のメジャー値を戻す点を指定します。pointがgeom_segment上にない場合、指定した点に最も近いジオメトリ・セグメント上の点が計算され、その点の前で最も近い形状点のメジャー値が戻されます。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

measureまたはpointにジオメトリ・セグメントの開始点を指定した場合、NULL値が戻されます。

measureがgeom_segmentに有効な値ではない場合、またはpointが有効なLRS点ではない場合、例外が発生します。

このファンクションは、ジオメトリ・セグメント上の指定したメジャー値またはLRS点の次の形状点のメジャー値を戻すSDO_LRS.GET_NEXT_SHAPE_PT_MEASUREと対照的です。

このファンクションは_3D 形式(SDO_LRS.GET_PREV_SHAPE_PT_MEASURE_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1上のメジャー14の前にあり、メジャー14に最も近い形状点のメジャー値を戻します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.GET_PREV_SHAPE_PT_MEASURE(a.route_geometry, 14)
FROM lrs_routes a WHERE a.route_id = 1;

SDO_LRS.GET_PREV_SHAPE_PT_MEASURE(A.ROUTE_GEOMETRY,14)
------------------------------------------------------
12

SDO_LRS.IS_GEOM_SEGMENT_DEFINED

構文

SDO_LRS.IS_GEOM_SEGMENT_DEFINED(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN VARCHAR2;

説明

LRSセグメントが正しく定義されているかどうかを確認します。

パラメータ

geom_segment

確認するジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、geom_segmentが正しく定義されている場合は、TRUEを戻します。また、geom_segmentが正しく定義されていない場合は、FALSEを戻します。

geom_segmentの開始および終了メジャーが定義されている必要があります(NULLは定義できません)。また、割り当てられたすべてのメジャーは、セグメントの方向に昇順または降順である必要があります。

このファンクションは_3D 形式(SDO_LRS.IS_GEOM_SEGMENT_DEFINED_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

SDO_LRS.VALID_GEOM_SEGMENTファンクションを参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1が定義されているかどうかを確認します。(例では、7.7項の例の定義を使用しています。)

SELECT  SDO_LRS.IS_GEOM_SEGMENT_DEFINED(route_geometry)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.IS_GEOM_SEGMENT_DEFINED(ROUTE_GEOMETRY)
--------------------------------------------------------------------------------
TRUE

SDO_LRS.IS_MEASURE_DECREASING

構文

SDO_LRS.IS_MEASURE_DECREASING(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN VARCHAR2;

説明

メジャー値がLRSセグメントの方向に降順である(数値が減少している)かどうかを確認します。

パラメータ

geom_segment

確認するジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、メジャー値がLRSセグメントの方向に降順である場合はTRUE、そうでない場合はFALSEを戻します。

geom_segmentの開始および終了メジャーが定義されている必要があります(NULLは定義できません)。

このファンクションは_3D 形式(SDO_LRS.IS_MEASURE_DECREASING_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

SDO_LRS.IS_MEASURE_INCREASINGファンクションを参照してください。

例

次の例では、メジャー値がジオメトリ・セグメントRoute 1の方向に降順であるかどうかを確認します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.IS_MEASURE_DECREASING(a.route_geometry, m.diminfo)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.IS_MEASURE_DECREASING(A.ROUTE_GEOMETRY,M.DIMINFO)
--------------------------------------------------------------------------------
FALSE

SDO_LRS.IS_MEASURE_INCREASING

構文

SDO_LRS.IS_MEASURE_INCREASING(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN VARCHAR2;

説明

メジャー値がLRSセグメントの方向に昇順である(数値が増加している)かどうかを確認します。

パラメータ

geom_segment

確認するジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、メジャー値がLRSセグメントの方向に昇順である場合はTRUE、そうでない場合はFALSEを戻します。

geom_segmentの開始および終了メジャーが定義されている必要があります(NULLは定義できません)。

このファンクションは_3D 形式(SDO_LRS.IS_MEASURE_INCREASING_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

SDO_LRS.IS_MEASURE_DECREASINGファンクションを参照してください。

例

次の例では、メジャー値がジオメトリ・セグメントRoute 1の方向に昇順であるかどうかを確認します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.IS_MEASURE_INCREASING(a.route_geometry, m.diminfo)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.IS_MEASURE_INCREASING(A.ROUTE_GEOMETRY,M.DIMINFO)
--------------------------------------------------------------------------------
TRUE

SDO_LRS.IS_SHAPE_PT_MEASURE

構文

SDO_LRS.IS_SHAPE_PT_MEASURE(

geom_segment IN SDO_GEOMETRY,

measure IN NUMBER

) RETURN VARCHAR2;

または

SDO_LRS.IS_SHAPE_PT_MEASURE(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER

) RETURN VARCHAR2;

説明

指定したメジャー値がジオメトリ・セグメント上の形状点に関連付けられているかどうかを確認します。

パラメータ

geom_segment

確認するジオメトリ・セグメントを指定します。

measure

形状点であるかどうかを確認するジオメトリ・セグメント上のメジャー値を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、指定したメジャー値が形状点に関連付けられている場合はTRUEを戻します。また、メジャー値が形状点に関連付けられていいない場合はFALSEを戻します。

measureがgeom_segmentに有効な値ではない場合は、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.IS_SHAPE_PT_MEASURE_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1上のメジャー14が形状点であるかどうかを確認します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.IS_SHAPE_PT_MEASURE(a.route_geometry, 14)
FROM lrs_routes a WHERE a.route_id = 1;

SDO_LRS.IS_SHAPE_PT_MEASURE(A.ROUTE_GEOMETRY,14)
--------------------------------------------------------------------------------
FALSE

SDO_LRS.LOCATE_PT

構文

SDO_LRS.LOCATE_PT(

geom_segment IN SDO_GEOMETRY,

measure IN NUMBER

[, offset IN NUMBER

) RETURN SDO_GEOMETRY;

または

SDO_LRS.LOCATE_PT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER

[, offset IN NUMBER]

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメントの開始位置から指定した距離にある点を戻します。

パラメータ

geom_segment

measureのメジャー範囲内にあるかどうかを確認するジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

measure

geom_segmentの開始点からメジャーまでの距離を指定します。

offset

geom_segmentの開始点からmeasure単位にある点からメジャーまでの垂直距離を指定します。デフォルト値は0(ゼロ)です(点はgeom_segment上にあります)。

使用上の注意

このファンクションは、参照点を戻します。たとえば、高速道路では、点で事故現場を表すために使用します。

offsetの測定単位は、geom_segmentに関連付けられた座標系の測定単位と同じです。測地データの場合、デフォルトの測定単位はmです。

WGS 84座標系を使用する測地データでは、このファンクションを使用して、点の経度および緯度座標またはセグメントからのオフセットを戻すことができます。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、または位置が範囲外の場合、例外が発生します。

このファンクションは_3D形式(SDO_LRS.LOCATE_PT_3D)が使用可能です。ただし、SDO_LRS.LOCATE_PT_3Dでは、offsetパラメータを使用できません。LRSファンクションの_3D 形式については、7.4項を参照してください。

ジオメトリ・セグメント上の点の位置の確認については、7.5.8項を参照してください。

例

次の例では、自動車事故データの表を作成し、メジャーが9でジオメトリ・セグメントRoute 1上に存在する点(オフセット0(ゼロ))における事故の記録を挿入して、そのデータを表示します。(事故の表は、意図的に単純化されています。例では、7.7項の例のルート定義を使用しています。)

-- Create a table for accidents.
CREATE TABLE accidents (
accident_id  NUMBER PRIMARY KEY,
route_id  NUMBER,
accident_geometry  SDO_GEOMETRY);

-- Insert an accident record.
DECLARE
geom_segment SDO_GEOMETRY;

BEGIN

SELECT  SDO_LRS.LOCATE_PT(a.route_geometry, 9, 0) into geom_segment
FROM lrs_routes a WHERE a.route_name = 'Route1';

INSERT INTO accidents VALUES(1, 1, geom_segment);

END;
/

SELECT * from accidents;

ACCIDENT_ID   ROUTE_ID
----------- ----------
ACCIDENT_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_OR
--------------------------------------------------------------------------------
1          1
SDO_GEOMETRY(3301, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
9, 4, 9))

SDO_LRS.LRS_INTERSECTION

構文

SDO_LRS.LRS_INTERSECTION(

geom_1 IN SDO_GEOMETRY,

dim_array_1 IN SDO_DIM_ARRAY,

geom_2 IN SDO_GEOMETRY,

dim_array_2 IN SDO_DIM_ARRAY

) RETURN SDO_GEOMETRY;

または

SDO_LRS.LRS_INTERSECTION(

geom_1 IN SDO_GEOMETRY,

geom_2 IN SDO_GEOMETRY,

tolerance IN NUMBER

) RETURN SDO_GEOMETRY;

説明

いずれか、または両方がLRSジオメトリである2つのジオメトリ・オブジェクトで位相的に共通部分(AND演算)となるLRSジオメトリ・オブジェクトを戻します。

パラメータ

geom_1

ジオメトリ・オブジェクトを指定します。

dim_array_1

geom_1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

geom_2

ジオメトリ・オブジェクトを指定します。

dim_array_2

geom_2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tolerance

許容差を指定します(1.5.5項を参照)。

使用上の注意

このファンクションは、基本的にSDO_GEOM.SDO_INTERSECTIONと同じ共通部分の操作を実行します(第24章を参照)。ただし、SDO_LRS.LRS_INTERSECTIONは、ジオメトリ関連の入力パラメータのいずれか、または両方がLRSジオメトリであるような、有効なLRSジオメトリ(点、線ストリングまたは複合線ストリング)を戻すように設計されています。(いずれの入力ジオメトリもLRSジオメトリではない場合、このファンクションは、SDO_GEOM.SDO_INTERSECTIONファンクションと同じように機能します。)

戻されるジオメトリは、LRS線ストリング、複数線ストリングまたは点ジオメトリであり、これにはメジャー次元情報が含まれます。メジャー値には、入力パラメータとして指定された1つ目のLRSジオメトリの値が反映されます。

入力パラメータとして指定される1つ目のLRSジオメトリは、ポリゴンではなく、線ストリング、複数線ストリングまたは点である必要があります。

LRS線ストリング(ジオメトリ・セグメント)が線ストリング(LRSまたは標準)と交差している場合、その結果はLRS点になります。LRS線ストリングがポリゴンと交差している場合、その結果はLRS線ストリングになります。

geom_1およびgeom_2が異なる座標系に基づく場合は、例外が発生します。

例

次の例は、(8,2)から(8,6)への垂直線が交差するLRSジオメトリ・セグメント(7.7項の図7-20を参照)を示しています。結果は、LRS点ジオメトリであり、メジャー値(8)は、geom_1ジオメトリにおけるその点(図7-20のExit 3として指定されている)のメジャーを反映しています。(例では、7.7項の例の定義を使用しています。)

-- Intersection of LRS segment and standard line segment
SELECT SDO_LRS.LRS_INTERSECTION(route_geometry,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(8,2, 8,6)), 0.005)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.LRS_INTERSECTION(ROUTE_GEOMETRY,SDO_GEOMETRY(2002,NULL,NULL,SDO_ELEM_INF
--------------------------------------------------------------------------------
SDO_GEOMETRY(3301, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
8, 4, 8))

次の例は、(12,2)から(12,6)への垂直線が交差するLRSジオメトリ・セグメント(7.7項の図7-20を参照)を示しています。結果は、LRS線ストリング・ジオメトリであり、メジャー値(12および14)は、geom_1ジオメトリにおける点(その1つ目の点は図7-20のExit 4として指定されている)のメジャーを反映しています。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.LRS_INTERSECTION(route_geometry,
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(12,2, 12,6)), 0.005)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.LRS_INTERSECTION(ROUTE_GEOMETRY,SDO_GEOMETRY(2002,NULL,NULL,SDO_ELEM_INF
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
12, 4, 12, 12, 6, 14))

SDO_LRS.MEASURE_RANGE

構文

SDO_LRS.MEASURE_RANGE(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN NUMBER;

説明

ジオメトリ・セグメントのメジャー範囲(開始メジャーと終了メジャーの差)を戻します。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、geom_segmentの終了メジャーからgeom_segmentの開始メジャーを引きます。

このファンクションは_3D 形式(SDO_LRS.MEASURE_RANGE_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1のメジャー範囲を戻します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.MEASURE_RANGE(route_geometry)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.MEASURE_RANGE(ROUTE_GEOMETRY)
-------------------------------------
27

SDO_LRS.MEASURE_TO_PERCENTAGE

構文

SDO_LRS.MEASURE_TO_PERCENTAGE(

geom_segment IN SDO_GEOMETRY,

measure IN NUMBER

) RETURN NUMBER;

または

SDO_LRS.MEASURE_TO_PERCENTAGE(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER

) RETURN NUMBER;

説明

ジオメトリ・セグメントのメジャー範囲に対する指定したメジャーの割合(0から100%)を戻します。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

measure

メジャー値を指定します。このファンクションは、メジャー範囲に対するメジャー値の割合を戻します。

使用上の注意

このファンクションは、指定したメジャーが表すメジャー範囲に対する割合を、0から100の数字で戻します。(メジャー範囲は終了メジャーから開始メジャーを引いた値です。)たとえば、geom_segmentのメジャー範囲が50でmeasureが20の場合、ファンクションは40を戻します(20/50 = 40%)。

このファンクションは、割合の値に対応するメジャーを戻すSDO_LRS.PERCENTAGE_TO_MEASUREファンクションとは逆に動作します。

geom_segmentまたはmeasureが無効な場合、例外が発生します。

例

次の例では、ジオメトリ・セグメントRoute 1のメジャー範囲に対する5の割合を戻します。(例では、7.7項の例の定義を使用しています。)このセグメントのメジャー範囲は27で、5は27の約18.5%です。

SELECT SDO_LRS.MEASURE_TO_PERCENTAGE(a.route_geometry, m.diminfo, 5)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.MEASURE_TO_PERCENTAGE(A.ROUTE_GEOMETRY,M.DIMINFO,5)
-----------------------------------------------------------
18.5185185

SDO_LRS.OFFSET_GEOM_SEGMENT

構文

SDO_LRS.OFFSET_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

start_measure IN NUMBER,

end_measure IN NUMBER,

offset IN NUMBER,

tolerance IN NUMBER DEFAULT 1.0e-8

[, unit IN VARCHAR2]

) RETURN SDO_GEOMETRY;

または

SDO_LRS.OFFSET_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

start_measure IN NUMBER,

end_measure IN NUMBER,

offset IN NUMBER

[, unit IN VARCHAR2]

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメントから指定したオフセットにあるジオメトリ・セグメントを戻します。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

start_measure

オフセットの操作を開始するgeom_segmentの開始メジャーを指定します。

end_measure

オフセットの操作を開始するgeom_segmentの終了メジャーを指定します。

offset

geom_segmentに沿った点からメジャーまでの垂直距離を指定します。正のオフセット値はgeom_segmentの左側、負のオフセット値はgeom_segmentの右側です。

tolerance

許容差を指定します(1.5.5項および7.6項を参照)。デフォルト値は0.00000001です。

unit

測定単位(次のキーワードの1つまたは両方を含む、引用符で囲まれた文字列)を指定します。

- unitおよびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値。測定単位の指定の詳細は、2.10項を参照してください。

- arc_toleranceおよび円弧の許容差。arc_toleranceキーワードの詳細は、第24章に示すSDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上の注意」を参照してください。

例: 'unit=km arc_tolerance=0.05'

入力ジオメトリが測地データの場合、このパラメータは必須です。また、arc_toleranceも指定する必要があります。入力ジオメトリがデカルト・データまたは投影データである場合、arc_toleranceは無効になるため、指定する必要はありません。

デカルト・ジオメトリまたは投影ジオメトリにこのパラメータが指定されていない場合、または測地ジオメトリに対してarc_toleranceキーワードが指定されているにもかかわらずunitキーワードが指定されていない場合、データに関連付けられている測定単位が使用されます。

使用上の注意

ジオメトリ・セグメント上の任意の点を、start_measureおよびend_measureに指定できます。これらの点は、特定の順序に従う必要はありません。たとえば、start_measureとend_measureは、5と10、または10と5に指定できます。

結果のジオメトリ・セグメントの方向およびメジャーは保持されます(元のセグメントが反映されます)。

geom_segmentのジオメトリ・タイプは、単一または複数の線である必要があります。たとえば、ポリゴンは指定できません。

geom_segment、start_measureまたはend_measureが無効な場合は例外が発生します。

例

次の例では、Route1のメジャー5から10のセグメントから左に2距離単位(正のオフセット2)の位置にあるジオメトリ・セグメントを戻します。戻されたセグメントのSDO_ORDINATE_ARRAYでは、Y値(6)が元のセグメントの該当する部分のY値(4)よりも2大きいことに注意してください。(例では、7.7項の例の定義を使用しています。)

-- Create a segment offset 2 to the left from measures 5 through 10.
-- First, display the original segment; then, offset.
SELECT a.route_geometry FROM lrs_routes a WHERE a.route_id = 1;

ROUTE_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDIN
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 8, 4, 8, 12, 4, 12, 12, 10, 18, 8, 10, 22, 5, 14, 27))

SELECT  SDO_LRS.OFFSET_GEOM_SEGMENT(a.route_geometry, m.diminfo, 5, 10, 2)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.OFFSET_GEOM_SEGMENT(A.ROUTE_GEOMETRY,M.DIMINFO,5,10,2)(SDO_GTYPE, SDO_SR
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 6, 5, 10, 6, 10))

SDO_LRS.PERCENTAGE_TO_MEASURE

構文

SDO_LRS.PERCENTAGE_TO_MEASURE(

geom_segment IN SDO_GEOMETRY,

percentage IN NUMBER

) RETURN NUMBER;

または

SDO_LRS.PERCENTAGE_TO_MEASURE(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

percentage IN NUMBER

) RETURN NUMBER;

説明

ジオメトリ・セグメントのメジャー範囲に対する、指定した割合(0から100%)のメジャー値を戻します。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

percentage

割合の値を指定します。0から100の範囲で指定する必要があります。このファンクションは、このメジャー範囲の割合に対応するメジャー値を戻します。

使用上の注意

このファンクションは、このメジャー範囲の指定した割合に対応するメジャー値を戻します。(メジャー範囲は終了メジャーから開始メジャーを引いた値です。)たとえば、geom_segmentのメジャー範囲が50でpercentageが40の場合、ファンクションは20を戻します(50の40%は20)。

このファンクションは、メジャーに対応する割合の値を戻すSDO_LRS.MEASURE_TO_PERCENTAGEファンクションとは逆に動作します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、またはpercentageが0から100の範囲外の場合、例外が発生します。

例

次の例では、ジオメトリ・セグメントRoute 1のメジャー範囲に対する50%のメジャーを戻します。(例では、7.7項の例の定義を使用しています。)このセグメントのメジャー範囲は27で、27の50%は13.5です。

SELECT SDO_LRS.PERCENTAGE_TO_MEASURE(a.route_geometry, m.diminfo, 50)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.PERCENTAGE_TO_MEASURE(A.ROUTE_GEOMETRY,M.DIMINFO,50)
------------------------------------------------------------
13.5

SDO_LRS.PROJECT_PT

構文

SDO_LRS.PROJECT_PT(

geom_segment IN SDO_GEOMETRY,

point IN SDO_GEOMETRY,

tolerance IN NUMBER DEFAULT 1.0e-8

[, offset OUT NUMBER]

) RETURN SDO_GEOMETRY;

または

SDO_LRS.PROJECT_PT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

point IN SDO_GEOMETRY

[, point_dim_array IN SDO_DIM_ARRAY]

) RETURN SDO_GEOMETRY;

または

SDO_LRS.PROJECT_PT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

point IN SDO_GEOMETRY,

point_dim_array IN SDO_DIM_ARRAY

[, offset OUT NUMBER]

) RETURN SDO_GEOMETRY;

説明

指定した点の投影点を戻します。投影点はジオメトリ・セグメント上にあります。

パラメータ

geom_segment

確認するジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

point

投影する点を指定します。

tolerance

許容差を指定します(1.5.5項および7.6項を参照)。デフォルト値は0.00000001です。

point_dim_array

pointに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

offset

点からジオメトリ・セグメントまでのオフセット(最短距離)を指定します。

使用上の注意

このファンクションは、指定した点(point)の投影点(メジャーを含む)を戻します。投影点はジオメトリ・セグメント上にあります。

複数の投影点が存在する場合は、開始点に最も近い投影点が戻されます。

出力パラメータoffsetを指定した場合、このファンクションによって、点とジオメトリ・セグメント間の符号付きオフセット(最短距離)が格納されます。ジオメトリ・セグメントへのオフセットについては、7.1.5項を参照してください。

geom_segmentまたはpointに無効なジオメトリ・タイプまたは次元が含まれる場合、またはgeom_segmentおよびpointが異なる座標系に基づく場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.PROJECT_PT_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

ジオメトリ・セグメントへの点の投影については、7.5.9項を参照してください。

例

次の例では、指定した点(9,3,NULL)に最も近いジオメトリ・セグメントRoute 1上の点(9,4,9)を戻します。(例では、7.7項の例の定義を使用しています。)

-- Point 9,3,NULL is off the road; should return 9,4,9.
SELECT  SDO_LRS.PROJECT_PT(route_geometry,
SDO_GEOMETRY(3301, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 1, 1),
SDO_ORDINATE_ARRAY(9, 3, NULL)) )
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.PROJECT_PT(ROUTE_GEOMETRY,SDO_GEOMETRY(3301,NULL,NULL,SDO_EL
--------------------------------------------------------------------------------
SDO_GEOMETRY(3301, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
9, 4, 9))

SDO_LRS.REDEFINE_GEOM_SEGMENT

構文

SDO_LRS.REDEFINE_GEOM_SEGMENT(

geom_segment IN OUT SDO_GEOMETRY

[, start_measure IN NUMBER,

end_measure IN NUMBER]);

または

SDO_LRS.REDEFINE_GEOM_SEGMENT(

geom_segment IN OUT SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY

[, start_measure IN NUMBER,

end_measure IN NUMBER]);

説明

ジオメトリ・セグメントの開始および終了メジャーに基づいてすべての形状点のメジャーを移入し、開始点と終了点の間で事前に割り当てられたメジャーを上書きします。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

start_measure

ジオメトリ・セグメントの開始点から線形フィーチャの開始点までの距離を指定します。デフォルトは、メジャー次元の既存の値(存在する場合)です。メジャー次元の値が存在しない場合、デフォルト値は0 (ゼロ)です。

end_measure

ジオメトリ・セグメントの終了点から線形フィーチャの開始点までの距離を指定します。デフォルトは、メジャー次元の既存の値(存在する場合)です。メジャー次元の値が存在しない場合、セグメントの地図上の長さです。

使用上の注意

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、またはstart_measureまたはend_measureが範囲外の場合、例外が発生します。

このプロシージャは_3D 形式(SDO_LRS.REDEFINE_GEOM_SEGMENT_3D)が使用可能です。LRSファンクションおよびプロシージャの_3D 形式については、7.4項を参照してください。

ジオメトリ・セグメントの再定義については、7.5.2項を参照してください。

例

次の例では、ジオメトリ・セグメントを再定義して、メジャー値のマイルをkmに効率的に変換します。(例では、7.7項の例の定義を使用しています。)

-- First, display the original segment; then, redefine.
SELECT a.route_geometry FROM lrs_routes a WHERE a.route_id = 1;

ROUTE_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDIN
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 8, 4, 8, 12, 4, 12, 12, 10, 18, 8, 10, 22, 5, 14, 27))

-- Redefine geometric segment to "convert" miles to kilometers.
DECLARE
geom_segment SDO_GEOMETRY;
dim_array SDO_DIM_ARRAY;

BEGIN

SELECT a.route_geometry into geom_segment FROM lrs_routes a
WHERE a.route_name = 'Route1';
SELECT m.diminfo into dim_array from
user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY';

-- "Convert" mile measures to kilometers (27 * 1.609 = 43.443).
SDO_LRS.REDEFINE_GEOM_SEGMENT (geom_segment,
dim_array,
0,    -- Zero starting measure: LRS segment starts at start of route.
43.443);  -- End of LRS segment. 27 miles = 43.443 kilometers.

-- Update and insert geometries into table, to display later.
UPDATE lrs_routes a SET a.route_geometry = geom_segment
WHERE a.route_id = 1;

END;
/

PL/SQL procedure successfully completed.

-- Display the redefined segment, with all measures "converted."
SELECT a.route_geometry FROM lrs_routes a WHERE a.route_id = 1;

ROUTE_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDIN
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 3.218, 8, 4, 12.872, 12, 4, 19.308, 12, 10, 28.962, 8, 10, 35.398
, 5, 14, 43.443))

SDO_LRS.RESET_MEASURE

構文

SDO_LRS.RESET_MEASURE(

geom_segment IN OUT SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]);

説明

開始メジャーおよび終了メジャーを含むジオメトリ・セグメントのすべてのメジャーをNULL値に設定し、事前に割り当てられたメジャーを上書きします。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

例

次の例では、ジオメトリ・セグメントのすべてのメジャーをNULL値に設定します。(例では、7.7項の例の定義を使用しています。)

-- First, display the original segment; then, redefine.
SELECT a.route_geometry FROM lrs_routes a WHERE a.route_id = 1;

ROUTE_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDIN
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 8, 4, 8, 12, 4, 12, 12, 10, 18, 8, 10, 22, 5, 14, 27))

-- Reset geometric segment measures.
DECLARE
geom_segment SDO_GEOMETRY;

BEGIN

SELECT a.route_geometry into geom_segment FROM lrs_routes a
WHERE a.route_name = 'Route1';

SDO_LRS.RESET_MEASURE (geom_segment);

-- Update and insert geometries into table, to display later.
UPDATE lrs_routes a SET a.route_geometry = geom_segment
WHERE a.route_id = 1;

END;
/

PL/SQL procedure successfully completed.

-- Display the segment, with all measures set to null.
SELECT a.route_geometry FROM lrs_routes a WHERE a.route_id = 1;

ROUTE_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDIN
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, NULL, 2, 4, NULL, 8, 4, NULL, 12, 4, NULL, 12, 10, NULL, 8, 10, NULL, 5, 1
4, NULL))

SDO_LRS.REVERSE_GEOMETRY

構文

SDO_LRS.REVERSE_GEOMETRY(

geom IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメントのメジャー値および方向を反転させて、新しいジオメトリ・セグメントを戻します。

パラメータ

geom

線形フィーチャの地図的表現を指定します。

dim_array

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、次の操作を実行します。

- geomのメジャー値を反転させます。
geomの開始メジャーは戻されたジオメトリ・セグメントの終了メジャーになり、geomの終了メジャーは戻されたジオメトリ・セグメントの開始メジャーになります。他のすべてのメジャーも適切に調整されます。

- geomの方向を反転させます。

ジオメトリ・セグメントのメジャー値のみを反転させる(方向は反転させない)SDO_LRS.REVERSE_MEASUREと比較してください。

非LRS線ストリング・ジオメトリの頂点を反転させるには、SDO_UTIL.REVERSE_LINESTRINGファンクション(第32章を参照)を使用します。

geomに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。ジオメトリ・タイプは単一または複数の線であり、次元数は3(2次元とメジャー次元)である必要があります。

このファンクションは_3D 形式(SDO_LRS.REVERSE_GEOMETRY_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1のメジャー値および方向を反転させます。(例では、7.7項の例の定義を使用しています。)

-- Reverse direction and measures (for example, to prepare for
-- concatenating with another road).
-- First, display the original segment; then, reverse.
SELECT a.route_geometry FROM lrs_routes a WHERE a.route_id = 1;

ROUTE_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDIN
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 8, 4, 8, 12, 4, 12, 12, 10, 18, 8, 10, 22, 5, 14, 27))

SELECT  SDO_LRS.REVERSE_GEOMETRY(a.route_geometry, m.diminfo)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.REVERSE_GEOMETRY(A.ROUTE_GEOMETRY,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO_PO
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 14, 27, 8, 10, 22, 12, 10, 18, 12, 4, 12, 8, 4, 8, 2, 4, 2, 2, 2, 0))

戻されたセグメントでは、M値(メジャー)が27から0の降順に並んでおり、セグメントの開始点および終了点のXおよびYの値は元のセグメントと反対になっている(元のセグメントでは2,2と5,14であるのに対し、戻されたセグメントでは5,14と2,2)ことに注意してください。

SDO_LRS.REVERSE_MEASURE

構文

SDO_LRS.REVERSE_MEASURE(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメントのメジャー値を反転させて(方向は反転させない)、新しいジオメトリ・セグメントを戻します。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、次の操作を実行します。

- geom_segmentのメジャー値を反転させます。
geom_segmentの開始メジャーは戻されたジオメトリ・セグメントの終了メジャーになり、geom_segmentの終了メジャーは戻されたジオメトリ・セグメントの開始メジャーになります。他のすべてのメジャーも適切に調整されます。

- geom_segmentの方向には影響しません。

ジオメトリ・セグメントの方向およびメジャー値の両方を反転させるSDO_LRS.REVERSE_GEOMETRYと比較してください。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.REVERSE_MEASURE_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

注意:
SDO_LRS.REVERSE_MEASUREファンクションの動作は、リリース8.1.7の後で変更されています。リリース8.1.7では、REVERSE_MEASUREによって、メジャーおよびセグメントの方向の両方が反転されます。後続のリリースでこれと同じ動作が必要な場合、SDO_LRS.REVERSE_GEOMETRYファンクションを使用する必要があります。

例

次の例では、ジオメトリ・セグメントRoute 1のメジャー値を反転させます(方向は反転させません)。(例では、7.7項の例の定義を使用しています。)

-- First, display the original segment; then, reverse.
SELECT a.route_geometry FROM lrs_routes a WHERE a.route_id = 1;

ROUTE_GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDIN
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 8, 4, 8, 12, 4, 12, 12, 10, 18, 8, 10, 22, 5, 14, 27))

SELECT SDO_LRS.REVERSE_MEASURE(a.route_geometry, m.diminfo)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.REVERSE_MEASURE(A.ROUTE_GEOMETRY,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO_POI
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 27, 2, 4, 25, 8, 4, 19, 12, 4, 15, 12, 10, 9, 8, 10, 5, 5, 14, 0))

戻されたセグメントでは、M値(メジャー)が27から0の降順に並んでいますが、セグメントの開始点および終了点のXおよびYの値は元のセグメントと同じ(2,2と5,14)であることに注意してください。

SDO_LRS.SCALE_GEOM_SEGMENT

構文

SDO_LRS.SCALE_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

start_measure IN NUMBER,

end_measure IN NUMBER,

shift_measure IN NUMBER,

tolerance IN NUMBER DEFAULT 1.0e-8

) RETURN SDO_GEOMETRY;

または

SDO_LRS.SCALE_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

start_measure IN NUMBER,

end_measure IN NUMBER,

shift_measure IN NUMBER,

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメントをメジャーのスケール変更した結果のジオメトリ・オブジェクトを戻します。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

start_measure

ジオメトリ・セグメントの開始メジャーを指定します。

end_measure

ジオメトリ・セグメントの終了メジャーを指定します。

shift_measure

初回のスケール変更後に、各メジャー値に追加される量を指定します。値が0(ゼロ)の場合は、何も追加されません(メジャー値のシフトはありません)。

tolerance

許容差を指定します(1.5.5項および7.6項を参照)。デフォルト値は0.00000001です。

使用上の注意

このファンクションは、次の操作を実行します。

1. 開始点のstart_measureから終了点のend_measureまでを使用し、それに応じた範囲でメジャー値を調整(スケール変更)することで、LRSジオメトリ・セグメントのメジャー値を再配布します。

2. shift_measureが0(ゼロ)でない場合は、shift_measureの値を追加して、手順1で計算された各メジャー値を変換(シフト)します。

このファンクションでの操作は、メジャー値の伸縮と呼ばれることがあります。このファンクションが影響を与えるのはメジャー値のみであり、ジオメトリのその他の座標は変更されません。

geom_segment、start_measureまたはend_measureが無効な場合は例外が発生します。

結果のジオメトリ・セグメントの方向は保持されます(元のセグメントが反映されます)。

ジオメトリ・セグメントのスケール変更については、7.5.6項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1がスケール変更され、開始メジャーと終了メジャーにそれぞれ100と200が指定され、シフト・メジャー値が10であるセグメントが戻されます。したがって、すべてのメジャー値は、開始メジャー値と終了メジャー値に準じてスケール変更された後に10が追加されます。つまり、この例では、戻されるジオメトリの開始点メジャーは110で、終了点メジャーは210になります。(例では、7.7項の例の定義を使用しています。)

SQL> SELECT  SDO_LRS.SCALE_GEOM_SEGMENT(route_geometry, 100, 200, 10)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.SCALE_GEOM_SEGMENT(ROUTE_GEOMETRY,100,200,10)(SDO_GTYPE, SDO_SRID, SDO_P
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 110, 2, 4, 117.407407, 8, 4, 139.62963, 12, 4, 154.444444, 12, 10, 176.666
667, 8, 10, 191.481481, 5, 14, 210))

SDO_LRS.SET_PT_MEASURE

構文

SDO_LRS.SET_PT_MEASURE(

geom_segment IN OUT SDO_GEOMETRY,

point IN SDO_GEOMETRY,

measure IN NUMBER) RETURN VARCHAR2;

または

SDO_LRS.SET_PT_MEASURE(

geom_segment IN OUT SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

point IN SDO_GEOMETRY,

pt_dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER) RETURN VARCHAR2;

または

SDO_LRS.SET_PT_MEASURE(

point IN OUT SDO_GEOMETRY,

measure IN NUMBER) RETURN VARCHAR2;

または

SDO_LRS.SET_PT_MEASURE(

point IN OUT SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER) RETURN VARCHAR2;

説明

指定された点のメジャー値を設定します。

パラメータ

geom_segment

点を含むジオメトリ・セグメントを指定します。

dim_array

geom_segment(2つ目の構文)またはpoint(4つ目の構文)に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

point

メジャー値を設定する点を指定します。

pt_dim_array

point(2つ目の構文)に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

measure

指定された点に割り当てられるメジャー値を指定します。

使用上の注意

このファンクションは、メジャー値が正しく設定されている場合はTRUE、メジャー値が設定されていない場合はFALSEを戻します。

geom_segmentおよびpointの両方が指定されている場合、このプロシージャの動作は、pointがgeom_segment上の形状点であるかどうかによって異なります。

- pointがgeom_segment上の形状点である場合、pointのメジャー値が設定されます。

- pointがgeom_segment上の形状点でない場合、pointに最も近いgeom_segment上の形状点が検出され、この形状点のメジャー値が設定されます。

このファンクションは_3D形式(SDO_LRS.SET_PT_MEASURE_3D)が使用可能です。ただし、SDO_LRS.SET_PT_MEASURE_3Dでは、geom_segmentパラメータを含む形式のみが使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

geom_segmentまたはpointが無効な場合、例外が発生します。

例

次の例では、点(8,10)のメジャー値を20に設定します。(例では、7.7項の例の定義を使用しています。)

-- Set the measure value of point 8,10 to 20 (originally 22).
DECLARE
geom_segment SDO_GEOMETRY;
dim_array SDO_DIM_ARRAY;
result VARCHAR2(32);

BEGIN

SELECT a.route_geometry into geom_segment FROM lrs_routes a
WHERE a.route_name = 'Route1';
SELECT m.diminfo into dim_array from
user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY';

-- Set the measure value of point 8,10 to 20 (originally 22).
result := SDO_LRS.SET_PT_MEASURE (geom_segment,
SDO_GEOMETRY(3301, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 1, 1),
SDO_ORDINATE_ARRAY(8, 10, 22)),
20);

-- Display the result.
DBMS_OUTPUT.PUT_LINE('Returned value = ' || result);

END;
/
Returned value = TRUE

PL/SQL procedure successfully completed.

SDO_LRS.SPLIT_GEOM_SEGMENT

構文

SDO_LRS.SPLIT_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

split_measure IN NUMBER,

segment_1 OUT SDO_GEOMETRY,

segment_2 OUT SDO_GEOMETRY);

または

SDO_LRS.SPLIT_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

split_measure IN NUMBER,

segment_1 OUT SDO_GEOMETRY,

segment_2 OUT SDO_GEOMETRY);

説明

ジオメトリ・セグメントを2つに分割します。

パラメータ

geom_segment

分割するジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

split_measure

ジオメトリ・セグメントの開始点から分割点までの距離を指定します。

segment_1

geom_segmentの開始点から分割点までの、1つ目のジオメトリ・セグメントを指定します。

segment_2

分割点からgeom_segmentの終了点までの、2つ目のジオメトリ・セグメントを指定します。

使用上の注意

geom_segmentまたはsplit_measureが無効な場合、例外が発生します。

ジオメトリ・セグメントを分割した結果の方向およびメジャーは保持されます。

このプロシージャは_3D 形式(SDO_LRS.SPLIT_GEOM_SEGMENT_3D)が使用可能です。LRSファンクションおよびプロシージャの_3D 形式については、7.4項を参照してください。

ジオメトリ・セグメントの分割については、7.5.4項を参照してください。

例

次の例では、ジオメトリ・セグメントを定義し、ジオメトリ・セグメントを2つのセグメントに分割した後、それらを連結します。(例では、7.7項の例の定義を使用しています。result_geom_1、result_geom_2およびresult_geom_3の定義は、例7-3で示します。)

DECLARE
geom_segment SDO_GEOMETRY;
line_string SDO_GEOMETRY;
dim_array SDO_DIM_ARRAY;
result_geom_1 SDO_GEOMETRY;
result_geom_2 SDO_GEOMETRY;
result_geom_3 SDO_GEOMETRY;

BEGIN

SELECT a.route_geometry into geom_segment FROM lrs_routes a
WHERE a.route_name = 'Route1';
SELECT m.diminfo into dim_array from
user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY';

-- Define the LRS segment for Route1.
SDO_LRS.DEFINE_GEOM_SEGMENT (geom_segment,
dim_array,
0,    -- Zero starting measure: LRS segment starts at start of route.
27);  -- End of LRS segment is at measure 27.

SELECT a.route_geometry INTO line_string FROM lrs_routes a
WHERE a.route_name = 'Route1';

-- Split Route1 into two segments.
SDO_LRS.SPLIT_GEOM_SEGMENT(line_string,dim_array,5,result_geom_1,result_geom_2);

-- Concatenate the segments that were just split.
result_geom_3 := SDO_LRS.CONCATENATE_GEOM_SEGMENTS(result_geom_1, dim_array, result_geom_2, dim_array);

-- Insert geometries into table, to display later.
INSERT INTO lrs_routes VALUES(
11,
'result_geom_1',
result_geom_1
);
INSERT INTO lrs_routes VALUES(
12,
'result_geom_2',
result_geom_2
);
INSERT INTO lrs_routes VALUES(
13,
'result_geom_3',
result_geom_3
);

END;
/

SDO_LRS.TRANSLATE_MEASURE

構文

SDO_LRS.TRANSLATE_MEASURE(

geom_segment IN SDO_GEOMETRY,

translate_m IN NUMBER

) RETURN SDO_GEOMETRY;

または

SDO_LRS.TRANSLATE_MEASURE(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

translate_m IN NUMBER

) RETURN SDO_GEOMETRY;

説明

ジオメトリ・セグメントを変換して、新しいジオメトリ・セグメントを戻します(開始および終了メジャーを指定した値分シフトします)。

パラメータ

geom_segment

線形フィーチャの地図的表現を指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

translate_m

ジオメトリ・セグメントの開始点から線形フィーチャの開始点までの距離を指定します。

使用上の注意

このファンクションは、geom_segmentの開始および終了メジャーにtranslate_mを追加します。たとえば、geom_segmentの開始メジャーが50、終了メジャーが100、translate_mが10の場合、戻されるジオメトリ・セグメントの開始メジャーは60、終了メジャーは110です(図25-1を参照)。

図25-1 ジオメトリ・セグメントの変換

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.TRANSLATE_MEASURE_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1を10変換(シフト)します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.TRANSLATE_MEASURE(a.route_geometry, m.diminfo, 10)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.TRANSLATE_MEASURE(A.ROUTE_GEOMETRY,M.DIMINFO,10)(SDO_GTYPE, SDO_SRID, SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(3002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 10, 2, 4, 12, 8, 4, 18, 12, 4, 22, 12, 10, 28, 8, 10, 32, 5, 14, 37))

SDO_LRS.VALID_GEOM_SEGMENT

構文

SDO_LRS.VALID_GEOM_SEGMENT(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN VARCHAR2;

説明

ジオメトリ・オブジェクトが有効なジオメトリ・セグメントかどうかを確認します。

パラメータ

geom_segment

有効かどうかを確認するジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、geom_segmentが有効な場合はTRUEを戻し、geom_segmentが無効な場合はFALSEを戻します。

メジャー情報は、Oracle SpatialメタデータのSDO_DIM_ARRAYの最後の要素に格納されていると想定されています。

このファンクションは、ジオメトリ・タイプおよびジオメトリ・セグメントの次元数のみ確認します。メジャー情報を詳しく検証するには、SDO_LRS.IS_GEOM_SEGMENT_DEFINEDファンクションを使用します。

このファンクションは_3D 形式(SDO_LRS.VALID_GEOM_SEGMENT_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1が有効であるかどうかを確認します。(例では、7.7項の例の定義を使用しています。)

SELECT  SDO_LRS.VALID_GEOM_SEGMENT(route_geometry)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.VALID_GEOM_SEGMENT(ROUTE_GEOMETRY)
--------------------------------------------------------------------------------
TRUE

SDO_LRS.VALID_LRS_PT

構文

SDO_LRS.VALID_LRS_PT(

point IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN VARCHAR2;

説明

LRS点が有効かどうかを確認します。

パラメータ

point

有効かどうかを確認する点を指定します。

dim_array

pointに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、pointが有効な場合はTRUEを戻します。また、pointが無効な場合は、FALSEを戻します。

pointがメジャー情報を持っているかどうかを確認します。また、点ジオメトリのジオメトリ・タイプおよび次元数についても確認します。

すべてのLRS点データは、SDO_ELEM_INFO_ARRAYおよびSDO_ORDINATE_ARRAYに格納する必要があり、その点のSDO_GEOMETRY定義のSDO_POINTフィールドには格納できません。

このファンクションは_3D 形式(SDO_LRS.VALID_LRS_PT_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、点(9,3,NULL)が有効なLRS点であるかどうかを確認します。(例では、7.7項の例の定義を使用しています。)

SELECT  SDO_LRS.VALID_LRS_PT(
SDO_GEOMETRY(3301, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 1, 1),
SDO_ORDINATE_ARRAY(9, 3, NULL)),
m.diminfo)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.VALID_LRS_PT(SDO_GEOMETRY(3301,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1,1),SDO_
--------------------------------------------------------------------------------
TRUE

SDO_LRS.VALID_MEASURE

構文

SDO_LRS.VALID_MEASURE(

geom_segment IN SDO_GEOMETRY,

measure IN NUMBER

) RETURN VARCHAR2;

または

SDO_LRS.VALID_MEASURE(

geom_segment IN SDO_GEOMETRY,

dim_array IN SDO_DIM_ARRAY,

measure IN NUMBER

) RETURN VARCHAR2;

説明

メジャーがジオメトリ・セグメントのメジャー範囲内かどうかを確認します。

パラメータ

geom_segment

measureのメジャー範囲内にあるかどうかを確認するジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

measure

geom_segmentのメジャー範囲内にあるかどうかを確認するメジャー値を指定します。

使用上の注意

このファンクションは、measureがgeom_segmentのメジャー範囲内にある場合は、TRUEを戻します。また、measureがgeom_segmentのメジャー範囲外にある場合は、FALSEを戻します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.VALID_MEASURE_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、50がRoute 1セグメント上で有効なメジャーであるかどうかを確認します。このセグメントのメジャー範囲は0から27であるため、このファンクションはFALSEを戻します。たとえば、長さが27マイルで1マイルごとにマークが付いた道路では、最後のマークは27マイルのマークであるため、50マイルのマークはありません。(例では、7.7項の例の定義を使用しています。)

SELECT  SDO_LRS.VALID_MEASURE(route_geometry, 50)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.VALID_MEASURE(ROUTE_GEOMETRY,50)
--------------------------------------------------------------------------------
FALSE

SDO_LRS.VALIDATE_LRS_GEOMETRY

構文

SDO_LRS.VALIDATE_LRS_GEOMETRY(

geom_segment IN SDO_GEOMETRY

[, dim_array IN SDO_DIM_ARRAY]

) RETURN VARCHAR2;

説明

LRSジオメトリが有効かどうかを確認します。

パラメータ

geom_segment

確認するジオメトリ・セグメントを指定します。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

このファンクションは、geom_segmentが有効な場合はTRUEを戻します。また、geom_segmentが無効な場合は次のエラーのいずれかを戻します。

- ORA-13331(LRSセグメントが無効です。)

- ORA-13335(LRS測定情報が定義されていません。)

このファンクションは_3D 形式(SDO_LRS.VALIDATE_LRS_GEOMETRY_3D)が使用可能です。LRSファンクションの_3D 形式については、7.4項を参照してください。

例

次の例では、Route 1セグメントが有効なLRSジオメトリであるかを確認します。(例では、7.7項の例の定義を使用しています。)

SELECT SDO_LRS.VALIDATE_LRS_GEOMETRY(a.route_geometry, m.diminfo)
FROM lrs_routes a, user_sdo_geom_metadata m
WHERE m.table_name = 'LRS_ROUTES' AND m.column_name = 'ROUTE_GEOMETRY'
AND a.route_id = 1;

SDO_LRS.VALIDATE_LRS_GEOMETRY(A.ROUTE_GEOMETRY,M.DIMINFO)
--------------------------------------------------------------------------------
TRUE

26 SDO_MIGRATEパッケージ(アップグレード)

この章で説明するSDO_MIGRATE.TO_CURRENTサブプログラムには、プロシージャとファンクションの両方のインタフェースがあります。プロシージャの場合、以前のリリースのSpatialから空間ジオメトリ表をアップグレードでき、また、ファンクションの場合は、単一のSDO_GEOMETRYオブジェクトをアップグレードできます。

このサブプログラムは、使用方法が非常に限定されています。「使用上の注意」を参照してください。

SDO_MIGRATE.TO_CURRENT

構文(オブジェクト・リレーショナル・モデル実装から今回のリリースへのアップグレード)

SDO_MIGRATE.TO_CURRENT(

tabname IN VARCHAR2

[, column_name IN VARCHAR2]);

または

SDO_MIGRATE.TO_CURRENT(

tabname IN VARCHAR2,

column_name IN VARCHAR2

[, commit_int IN NUMBER]);

構文(単一のオブジェクト・リレーショナル・モデル・ジオメトリから今回のリリースへのアップグレード)

SDO_MIGRATE.TO_CURRENT(

geom IN SDO_GEOMETRY,

dim IN SDO_DIM_ARRAY

) RETURN SDO_GEOMETRY;

構文(リレーショナル・モデル実装から今回のリリースへのアップグレード)

SDO_MIGRATE.TO_CURRENT(

layer IN VARCHAR2,

newtabname IN VARCHAR2,

gidcolumn IN VARCHAR2,

geocolname IN VARCHAR2,

layer_gtype IN VARCHAR2,

updateflag IN VARCHAR2);

説明

サポートされなくなったSpatialリレーショナル・モデル(リリース8.1.5以前)から現行のリリースにデータをアップグレードするか、またはアップグレードする必要のある1つ以上のオブジェクト・リレーショナル・モデル(リリース8.1.6以降)のジオメトリをアップグレードします(「使用上の注意」を参照)。プロシージャの場合、TO_CURRENTは、レイヤー全体(列内のすべてのジオメトリ)をアップグレードします。ファンクションの場合、TO_CURRENTは、SDO_GEOMETRY型の単一のジオメトリ・オブジェクトをアップグレードします。

レイヤーをアップグレードする場合、プロシージャの構文は、Spatialのリレーショナル・モデル(リリース8.1.5以下)からアップグレードするか、またはオブジェクト・リレーショナル・モデル(リリース8.1.6以上)からアップグレードするかによって異なります。適用されるモデルについては、「使用上の注意」を参照してください。

注意:
このプロシージャは2次元ジオメトリにのみ適用されます。これは3次元ジオメトリではサポートされていません。

パラメータ

tabname

ジオメトリ・オブジェクトが格納されている表を指定します。

column_name

ジオメトリ・オブジェクトを含むtabnameの列を指定します。column_nameが指定されていないか、またはNULLが指定されている場合は、ジオメトリ・オブジェクトを含む列がアップグレードされます。

commit_int

Spatialによって内部コミット操作が実行される前にアップグレードするジオメトリの数を指定します。commit_intを指定しない場合、アップグレード時に内部コミット操作が実行されません。

commit_int値を指定すると、この値を指定しない場合より小規模なロールバック・セグメントを使用できます。

geom

今回のリリースにアップグレードする単一のジオメトリ・オブジェクトを指定します。

dim

アップグレードするジオメトリ・オブジェクトの次元情報の配列を指定します。SDO_DIM_ARRAY型の詳細は、2.8.3項を参照してください。

layer

アップグレードするレイヤーの名前を指定します。

newtabname

データのアップグレード先となる新しい表の名前を指定します。

gidcolumn

古い表からGIDを格納する列名を指定します。

geocolname

ジオメトリ・オブジェクトを挿入する新しい表の列名を指定します。

layer_gtype

POINTまたはNOTPOINT(デフォルト)のいずれかを指定します。

アップグレードするレイヤーがすべて点データである場合、このパラメータをPOINTに設定すると、最適なパフォーマンスが得られます。それ以外の場合は、NOTPOINTを指定します。レイヤーに点以外のジオメトリが含まれる場合に、値をPOINTに設定すると、アップグレードによって無効なデータが生成される場合があります。

updateflag

UPDATEまたはINSERT(デフォルト)のいずれかを指定します。

既存の属性の表に移入するアップグレードの場合は、UPDATEを指定します。それ以外の場合は、INSERTを指定します。

オブジェクト・リレーショナル・モデル・レイヤー、および単一のジオメトリからアップグレードする場合の使用上の注意

このサブプログラムは、Oracle Spatialの通常のアップグレードを行う際には必要ありません。これは、空間データがサード・パーティのローダーを使用してロードされる場合で、結果のジオメトリの方向が誤っているかETYPE値やGTYPE値が無効な場合に必要になることがあります。空間データをロードおよび検証する際の推奨手順の一部としてこのサブプログラムを使用する方法については、4.3項を参照してください。

このサブプログラムによって、指定されたレイヤー内の指定のジオメトリ・オブジェクトまたはすべてのジオメトリ・オブジェクトがアップグレードされるため、SDO_GTYPE値およびSDO_ETYPE値は、今回のリリースの形式になります。

- 2.2.1項の表2-1に示す形式(DLTT)で、4桁のSDO_GTYPE値が作成されます。

- SDO_ETYPE値については、2.2.4項を参照してください。

ジオメトリは、先に外部の輪、次に内部の輪の順に順序付けされ、各座標は正しいローテーション(外部の輪は反時計回り、内部の輪は時計回り)で保存されます。

リレーショナル・モデルからアップグレードする場合の使用上の注意

Spatialのリレーショナル・モデル(リリース8.1.5以下)からアップグレードする場合、このプロシージャを使用する際には次を考慮してください。

- このプロシージャをコールする前に、新しい表を作成しておく必要があります。

- アップグレードするデータが測地の場合、許容差(<layername>_SDODIM表またはビュー内のSDO_TOLERANCE列の値)は、10進度(たとえば0.00000005)で表す必要があります。

- このプロシージャによって、ジオメトリがリレーショナル・モデルからオブジェクト・リレーショナル・モデルに変換されます。

- このプロシージャで、コミット操作が実行されます。

- アップグレード時に正常に実行されなかった操作がある場合、レイヤー内のすべてのデータについてアップグレードは行われません。

- layerには、基になるレイヤー名を_SDOGEOM接尾辞を付けずに指定します。

- アップグレード前のSDO_GIDは、gidcolumnに格納されます。

- 2.2.1項の表2-1に示す形式(DLTT)で、4桁のSDO_GTYPE値が作成されます。

- 2.2.4項に示す値を使用して、SDO_ETYPE値が作成されます。

- このプロシージャは、先に外部の輪、次に内部の輪の順になるようにジオメトリの順序付けを行い、正しいローテーション(外部の輪は反時計回り、内部の輪は時計回り)で各座標を保存します。

例

次の例では、ROADS表内のジオメトリ・オブジェクトの定義を、リリース8.1.5より上の形式から今回のリリースの形式へ変更します。

EXECUTE SDO_MIGRATE.TO_CURRENT('ROADS');

27 SDO_OLSパッケージ(OpenLS)

MDSYS.SDO_OLSパッケージには、SpatialのOpenLSをサポートするためのサブプログラムが含まれています。

この章で説明するサブプログラムを使用する場合は、OpenLSの概念および使用方法を理解しておく必要があります(第14章を参照)。

表27-1にOpenLSのサブプログラムを示します。

表27-1 OpenLSをサポートするサブプログラム

サブプログラム

説明

SDO_OLS.MakeOpenLSClobRequest

CLOBオブジェクトを使用してOpenLSリクエストを送信し、結果をCLOBオブジェクトとして戻します。

SDO_OLS.MakeOpenLSRequest

XMLTypeオブジェクトを使用してOpenLSリクエストを送信し、結果をXMLTypeオブジェクトとして戻します。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

SDO_OLS.MakeOpenLSClobRequest

構文

SDO_OLS.MakeOpenLSClobRequest(

request IN CLOB

) RETURN CLOB;

説明

CLOBオブジェクトを使用してOpenLSリクエストを送信し、結果をCLOBオブジェクトとして戻します。

パラメータ

request

CLOBオブジェクト形式のOpenLSリクエストを指定します。

使用上の注意

入力リクエストをXMLTypeオブジェクトとして指定してXMLTypeオブジェクトを戻すには、SDO_OLS.MakeOpenLSRequestファンクションを使用します。

OpenLSのサポートについては、第14章を参照してください。

例

次の例では、指定したカテゴリで(つまり、指定したSIC_code値を使用して)、指定した場所(経度: -122.4083257、緯度: 37.788208)に最も近いビジネス情報を要求します。

DECLARE
request CLOB;
result CLOB;
BEGIN
request := TO_CLOB(
'<?xml version="1.0" encoding="UTF-8"?>
<XLS xmlns="http://www.opengis.net/xls" xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
<RequestHeader clientName="someName" clientPassword="password"/>
<Request requestID="123" maximumResponses="100" version="1.1"
methodName="DirectoryRequest">
<DirectoryRequest>
<POILocation>
<Nearest nearestCriterion="Proximity">
<Position>
<gml:Point xmlns:gml="http://www.opengis.net/gml">
<gml:pos dimension="2" srsName="4326">-122.4083257 37.788208</gml:pos>
</gml:Point>
</Position>
</Nearest>
</POILocation>
<POIProperties>
<POIProperty name="SIC_code" value="1234567890"/>
</POIProperties>
</DirectoryRequest>
</Request>
</XLS>');

result := SDO_OLS.makeOpenLSClobRequest(request);

END;
/

SDO_OLS.MakeOpenLSRequest

構文

SDO_OLS.MakeOpenLSRequest(

request IN XMLTYPE

) RETURN XMLTYPE;

説明

XMLTypeオブジェクトを使用してOpenLSリクエストを送信し、結果をXMLTypeオブジェクトとして戻します。

パラメータ

request

XMLTypeオブジェクト形式のOpenLSリクエストを指定します。

使用上の注意

入力リクエストをCLOBとして指定してCLOBを戻すには、SDO_OLS.MakeOpenLSClobRequestファンクションを使用します。

OpenLSのサポートについては、第14章を参照してください。

例

次の例では、指定したカテゴリで(つまり、指定したSIC_code値を使用して)、指定した場所(経度: -122.4083257、緯度: 37.788208)に最も近いビジネス情報を要求します。

SELECT SDO_OLS.makeOpenLSRequest(XMLTYPE(
'<?xml version="1.0" encoding="UTF-8"?>
<XLS xmlns="http://www.opengis.net/xls" xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
<RequestHeader clientName="someName" clientPassword="password"/>
<Request requestID="123" maximumResponses="100" version="1.1"
methodName="DirectoryRequest">
<DirectoryRequest>
<POILocation>
<Nearest nearestCriterion="Proximity">
<Position>
<gml:Point xmlns:gml="http://www.opengis.net/gml">
<gml:pos dimension="2" srsName="4326">-122.4083257 37.788208</gml:pos>
</gml:Point>
</Position>
</Nearest>
</POILocation>
<POIProperties>
<POIProperty name="SIC_code" value="1234567890"/>
</POIProperties>
</DirectoryRequest>
</Request>
</XLS>')) "OpenLS Response" FROM DUAL;

28 SDO_PC_PKGパッケージ(点群)

この章では、表28-1に示す点群のサブプログラムについて説明します。

表28-1 点群のサブプログラム

サブプログラム

説明

SDO_PC_PKG.CLIP_PC

点群に対してクリップ操作を実行します。

SDO_PC_PKG.CREATE_PC

inptableパラメータで指定した点を使用して点群を作成します。

SDO_PC_PKG.DROP_DEPENDENCIES

点群ブロック表と指定した実表および列の間の依存性を削除します。

SDO_PC_PKG.INIT

点群を初期化します。

SDO_PC_PKG.TO_GEOMETRY

点群のすべてまたは一部を表すジオメトリ・オブジェクトを戻します。

このパッケージのサブプログラムを使用するには、点群を使用したソリッドのモデル化など、3次元のジオメトリに関する主な概念を理解しておく必要があります。3次元ジオメトリのサポートについては1.11項、点群を使用したソリッドのモデル化については1.11.2項、点群に関連するデータ型については2.6項を参照してください。

SDO_PC_PKG.CLIP_PC

構文

SDO_PC_PKG.CLIP_PC(

inp IN SDO_PC,

ind_dimqry IN SDO_GEOMETRY,

other_dimqry IN SDO_MBR,

qry_min_res IN NUMBER,

qry_max_res IN NUMBER,

blkno IN NUMBER DEFAULT NULL.

) RETURN SDO_PC_BLK_TYPE;

説明

点群に対してクリップ操作を実行します。

パラメータ

inp

クリップ操作を実行する点群を指定します。

ind_dimqry

点群の索引付けされた次元の問合せについて、戻されるオブジェクトを選択するウィンドウを指定します。通常、2次元ジオメトリの場合はポリゴン、3次元ジオメトリの場合は錐台となります。

other_dimqry

点群の索引付けされていない次元の問合せについて、戻されるオブジェクトを選択するウィンドウを指定します。通常、2次元ジオメトリの場合はポリゴン、3次元ジオメトリの場合は錐台となります。索引付けされていない次元とは、総次元には含まれているが、索引付けされていない次元です。索引次元および総次元の説明は、SDO_PC_PKG.INITファンクションのpc_tot_dimensionsパラメータの説明を参照してください。

SDO_MBR型は(LOWER_LEFT SDO_VPOINT_TYPE, UPPER_RIGHT SDO_VPOINT_TYPE)として定義され、SDO_V_POINT_TYPEはVARRAY(64) OF NUMBERとして定義されます。

qry_min_res

最小解像度の値を指定します。解像度がqry_min_res以上およびqry_max_res以下のqryのオブジェクトがクリップ操作により戻されます。

qry_max_res

最大解像度の値を指定します。解像度がqry_min_res以上およびqry_max_res以下のqryのオブジェクトがクリップ操作により戻されます。

blkid

クリップ操作によって戻されるオブジェクトを制限するブロックのブロックID番号を指定します。このパラメータがNULLの場合、他のパラメータを満たすすべてのオブジェクトが戻されます。

使用上の注意

このファンクションは、指定した問合せウィンドウ内にあり、かつパラメータによって指定されている他の要件を満たしている点群の点を戻します。一般に、このファンクションは点群に対して問合せを実行するために使用します。点群の問合せのパフォーマンスを最大にするには、ファンクションが操作に対して考慮する必要のあるオブジェクトの数を最小限にします。

SDO_PCおよびSDO_PC_BLK_TYPEデータ型については、2.6項を参照してください。

点群を使用してソリッドをモデル化する方法は、1.11.2項を参照してください。

例

次の例では、点群に対してクリップ操作を実行します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/PointCloud/plsql/にあるsdo_pc.sqlサンプル・プログラムから取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。

. . .
declare
inp  sdo_pc;
begin
select pc INTO inp  from base where rownum=1;
insert into restst
select * from
table(sdo_pc_pkg.clip_pc
(
inp,  -- Input point cloud object
sdo_geometry(2003, 8307, null,
sdo_elem_info_array(1, 1003, 3),
sdo_ordinate_array(-175.86157, -14.60521, 0,0)), -- Query
null, null, null));
end;
/
. . .

SDO_PC_PKG.CREATE_PC

構文

SDO_PC_PKG.CREATE_PC(

inp IN SDO_PC,

inptable IN VARCHAR2,

clstPcdataTbl IN VARCHAR2 DEFAULT NULL);

説明

inptableパラメータで指定した点を使用して点群を作成します。

パラメータ

inp

使用するSDO_PCオブジェクトを指定します。このオブジェクトは、SDO_PC_PKG.INITファンクションによって作成されている必要があります。

inptable

入力点群データを含む表またはビューの名前を指定します。この表またはビューには、次の列が含まれている必要があります。

- RID (VARCHAR2(24)): 各点の一意のID。

- VAL_D1 (NUMBER): 次元1の座標。

- VAL_D2 (NUMBER): 次元2の座標。

- . . .

- VAL_Dn (NUMBER): 次元nの座標。ここでのnは、最も数字の大きい次元です。nは、点群が初期化されたときのSDO_PC_PKG.INITファンクションへのコールに含まれていたpc_tot_dimensionsパラメータ値と一致している必要があります。

clstPcdataTbl

結果として生成された点データを格納する表の名前を指定します。値を指定しない場合、この表は作成されません。表の詳細は、「使用上の注意」を参照してください。

使用上の注意

点群の最初のいくつかの次元を索引付けすると、後でSDO_PC_PKG.CLIP_PCファンクションを使用して検索することができます。索引付けする次元の正確な数は、初期化された点群オブジェクト内の点群エクステントの次元(具体的にはinp.pc_extent.sdo_gtype/1000)によって決まります。

inptableパラメータにビュー名を指定すると、SELECT ROWID FROM <view-name>の問合せはエラーを戻すことはできません。

clstPcdataTblパラメータで表名を指定する場合は、指定する表が存在し、次の列が含まれている必要があります。

- PTN_ID (NUMBER)

- POINT_ID (NUMBER)

- RID (VARCHAR2(24)): 各点の一意のID。

- VAL_D1 (NUMBER): 次元1の座標。

- VAL_D2 (NUMBER): 次元2の座標。

- . . .

- VAL_Dn (NUMBER): 次元nの座標。ここでのnは、最も数字の大きい次元です。nは、点群が初期化されたときのSDO_PC_PKG.INITファンクションへのコールに含まれていたpc_tot_dimensionsパラメータ値と一致している必要があります。

clstPcdataTblパラメータの値が指定されている場合、このファンクションは、PTN_IDおよびPOINT_IDに対して適切な値を割り当て、他の属性のinptable表またはビューから値をコピーすることによって表にデータを挿入します。この表は索引構成表として作成できます。この表をアプリケーションで使用すると、索引次元で反映される次元以外の次元に関してSQL問合せを使用した検索を実行できます。(索引次元および総次元の説明は、SDO_PC_PKG.INITファンクションのpc_tot_dimensionsパラメータの説明を参照してください。)

SDO_PCおよびSDO_PC_BLK_TYPEデータ型については、2.6項を参照してください。

点群を使用してソリッドをモデル化する方法は、1.11.2項を参照してください。

例

次の例では点群を作成します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/PointCloud/plsql/にあるsdo_pc.sqlサンプル・プログラムから取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。

. . .
-- Create the blocks for the point cloud.
sdo_pc_pkg.create_pc(
pc,       -- Initialized PointCloud object
'INPTAB', -- Name of input table to ingest into the pointcloud
'RES'     -- Name of output table that stores the points (with ptn_id,pt_id)
);
. . .

SDO_PC_PKG.DROP_DEPENDENCIES

構文

SDO_PC_PKG.DROP_DEPENDENCIES(

basetable IN VARCHAR2,

col IN VARCHAR2);

説明

点群ブロック表と指定した実表および列の間の依存性を削除します。

パラメータ

basetable

点群の初期化時に(SDO_PC_PKG.INITファンクションのbasetableパラメータで)指定されていた実表の名前を指定します。

col

SDO_PC_PKG.INITファンクションのbasecolパラメータで指定されていた実表内の列の名前を指定します。

使用上の注意

このプロシージャは、点群ブロック表を切り捨て、ブロック表と実表および列の組合せの間の関連付けを削除します。

このプロシージャを実行した後は、点群ブロック表を削除したり、表を別の実表および列の組合せに関連付けることができます。詳細は、SDO_PC_PKG.INITファンクションの「使用上の注意」を参照してください。

例

次の例では、点群ブロック表と(それぞれがBASEとPCという名前の)実表および列の間の依存性を削除します。

. . .
declare
begin
mdsys.sdo_pc_pkg.drop_dependencies('BASE', 'PC');
end;
/

SDO_PC_PKG.GET_PT_IDS

構文

SDO_PC_PKG.GET_PT_IDS(

pts IN BLOB,

num_pts IN NUMBER,

pc_tot_dim IN NUMBER,

blk_domain IN SDO_ORGSCL_TYPE DEFAULT NULL,

) RETURN SDO_NUMBER_ARRAY;

説明

点群内のブロックにある点のブロックIDおよび点IDの値を戻します。

パラメータ

pts

点群ブロックを含むバイナリ・ラージ・オブジェクト(BLOB)を指定します。

num_pts

点群ブロック内の点の数を指定します。点群ブロックの場合、点の数は点群ブロック表のNUM_POINTS列に格納されます(2.6.1項の表2-7を参照)。

pc_tot_dim

点群ブロック内の点の次元数を指定します。

blk_domain

(現在は未使用。)

使用上の注意

このファンクションは、SDO_NUMBER_ARRAYオブジェクトを戻します。配列には数字の複数のペアが含まれ、各ペアは点のブロックIDと点IDを示します。このファンクションへの特定のコールについては、戻される配列内のすべての点に関連付けられているブロックID値が同じになります。SDO_NUMBER_ARRAY型は、VARRAY(1048576) OF NUMBERとして定義されます。

点群を使用してソリッドをモデル化する方法は、1.11.2項を参照してください。

例

次の例では、点群ブロック内の点のブロックIDおよび点IDの値を戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/PointCloud/plsql/にあるsdo_pc.sqlサンプル・プログラムから取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。

SELECT SDO_PC_PKG.GET_PT_IDS(
a.points,   -- LOB containing the points
a.num_points, -- # of points in the LOB
3 -- Total dimensionality of the points in the LOB
) FROM restst a WHERE num_points >0;

SDO_PC_PKG.INIT

構文

SDO_PC_PKG.INIT(

basetable IN VARCHAR2,

basecol IN VARCHAR2,

blktable IN VARCHAR2,

ptn_params IN VARCHAR2,

pc_extent IN SDO_GEOMETRY,

pc_tol IN NUMBER DEFAULT 0.0000000000005,

pc_tot_dimensions IN NUMBER DEFAULT 2,

pc_domain IN SDO_ORGSCL_TYPE DEFAULT NULL,

pc_val_attr_tables IN SDO_STRING_ARRAY DEFAULT NULL,

pc_other_attrs IN XMLTYPE DEFAULT NULL,

) RETURN SDO_PC;

説明

SDO_PCオブジェクトの作成により点群を初期化します。

パラメータ

basetable

SDO_PC型の列を含む実表の名前を指定します。

basecol

実表のSDO_PC型の列名を指定します。

blktable

点群のブロックを格納するために使用する、点群ブロック表の名前を指定します。この表は存在している必要があり、またCREATE TABLE <table-name> AS select * from mdsys.sdo_pc_blk_table;形式の文によって作成されている必要があります。

各点群ブロック表に関連付けることのできるbasetableとbasecolの組合せは1つのみです。

ptn_params

点群のパーティション化に関するパラメータを指定します。カンマで区切られたキーワードを引用符で囲んだ文字列で指定します。たとえば、'blk_capacity=1000,work_tablespace=my_work_ts'などです。このパラメータがNULLの場合、点群はパーティション化されません。使用可能なキーワードは、次のとおりです。

- blk_capacity=n: nは各パーティション内の最大行数です。デフォルト値は5000です。この値には、常に50より大きい数字を指定します。

- work_tablespace=x: xは、パーティション操作中に一時表を作成する表領域の名前です。

pc_extent

点群の空間エクステント(点群に含まれるすべてのオブジェクトを囲む最小境界オブジェクト)を表すSDO_GEOMETRYオブジェクトを指定します。このパラメータは、NULL以外である必要があります。

測地データの場合、このジオメトリは2つの次元を持つ必要があります。測地データ以外の場合は、最大で4つの次元を持つことができます。このジオメトリの次元は、pc_tot_dimensionsパラメータで使用できる最小値として使用されます(このパラメータの説明を参照)。

pc_tol

点群のオブジェクトの許容差を指定します。(空間許容差の詳細は、1.5.5項を参照してください。)このパラメータがNULLの場合、デフォルト値は0.0000000000005です。

pc_tot_dimensions

点群オブジェクトの総次元を指定する数字を指定します。点群ブロックの各点については、pc_tot_dimensions座標(値)が格納されます。

総次元は、pc_extentジオメトリの次元数である索引次元以上に指定する必要があります。総次元を索引次元より大きく指定すると、空間データと同じフェッチ操作で必要な非空間属性を取得できます。総次元の最大値は8です。このパラメータのデフォルト値は2です。

pc_domain

(現在は未使用。)

pc_val_attr_tables

点群の値属性表の名前を指定するSDO_STRING_ARRAYオブジェクト。このパラメータがNULLの場合、点群に関連付けられる値属性表はありません。SDO_STRING_ARRAY型は、VARRAY(1048576) OF VARCHAR2(32)として定義されます。

pc_other_attrs

点群のその他の属性を指定するXMLTYPEオブジェクトを指定します。このパラメータがNULLの場合、点群はその他の属性を持ちません。

使用上の注意

このファンクションを使用してSDO_PCオブジェクトを作成した後は、このオブジェクトをSDO_PC_PKG.CREATE_PCプロシージャへの入力として指定することにより点群を作成できます。

SDO_PCデータ型の詳細は、2.5項を参照してください。

点群を使用してソリッドをモデル化する方法は、1.11.2項を参照してください。

このファンクションを使用した後、blktable表は実表と同期された状態で維持されます。たとえば、実表から行を削除すると、その行の対応する点群オブジェクトのブロックもブロック表から削除され、実表が切り捨てられると、ブロック表も切り捨てられます。

ブロック表を削除できるのは、実表が削除された場合か、またはSDO_PC_PKG.DROP_DEPENDENCIESプロシージャが実行された場合のみです。

例

次の例では、SDO_PCオブジェクトを作成することによって点群を初期化し、オブジェクトのIDを表示します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/PointCloud/plsql/にあるsdo_pc.sqlサンプル・プログラムから取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。

. . .
declare
pc sdo_pc;
begin
-- Initialize the point cloud object.
pc := sdo_pc_pkg.init(
'BASE', -- Table that has the SDO_POINT_CLOUD column defined
'PC',   -- Column name of the SDO_POINT_CLOUD object
'BLKTAB', -- Table to store blocks of the point cloud
'blk_capacity=1000', -- max # of points per block
mdsys.sdo_geometry(2003, 8307, null,
mdsys.sdo_elem_info_array(1,1003,3),
mdsys.sdo_ordinate_array(-180, -90, 180, 90)),  -- Extent
0.5, -- Tolerance for point cloud
3, -- Total number of dimensions
null);
. . .

SDO_PC_PKG.TO_GEOMETRY

構文

SDO_PC_PKG.TO_GEOMETRY(

pts IN BLOB,

num_pts IN NUMBER,

tin_tot_dim IN NUMBER,

srid IN NUMBER DEFAULT NULL,

blk_domain IN SDO_ORGSCL_TYPE DEFAULT NULL

) RETURN SDO_GEOMETRY;

説明

点群のすべてまたは一部を表すジオメトリ・オブジェクトを戻します。

パラメータ

pts

点を含むBLOBを指定します。

num_pts

結果として生成されるジオメトリに含まれる点の最大数を指定します。

tin_tot_dim

データに定義する空間次元数を指定します。

srid

データに関連付けられた空間参照(座標系)IDを指定します。このパラメータがNULLの場合、SRID値はデータに関連付けられません。

blk_domain

(現在は未使用。)

使用上の注意

このファンクションは、ptsパラメータのすべての点ジオメトリを表す、単一の複数点のSDO_GEOMETRYオブジェクトを戻します。たとえば、点にクリップ操作の結果またはブロック全体の内容を反映することもできます。

点群を使用してソリッドをモデル化する方法は、1.11.2項を参照してください。

例

次の例では、点群を表す複数点の集合ジオメトリ・オブジェクトを戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/PointCloud/plsql/にあるsdo_pc.sqlサンプル・プログラムから取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。

. . .
-- Return points in blk_id of the point cloud as a multipoint collection.
select sdo_pc_pkg.to_geometry(
a.points,   -- point LOB
a.num_points, -- # of points in the LOB
3,  -- total dimensionality
8307 -- SRID
) from blktab a where blk_id=0;
. . .

29 SDO_SAMパッケージ(空間分析およびマイニング)

MDSYS.SDO_SAMパッケージには、空間分析およびデータ・マイニングのサブプログラムが含まれています。

この章で説明するサブプログラムを使用する場合は、空間分析およびデータ・マイニングの概念を理解しておく必要があります(第8章を参照)。

注意:
SDO_SAMサブプログラムは2次元ジオメトリでのみサポートされています。これらは3次元ジオメトリではサポートされていません。

表29-1に、空間分析およびマイニングのサブプログラムを示します。

表29-1 空間分析およびマイニングのサブプログラム

ファンクション

説明

SDO_SAM.AGGREGATES_FOR_GEOMETRY

ジオメトリのテーマ集計を行います。

SDO_SAM.AGGREGATES_FOR_LAYER

ジオメトリのレイヤーのテーマ集計を行います。

SDO_SAM.BIN_GEOMETRY

ジオメトリの交差部の最も多い四角形を計算します。

SDO_SAM.BIN_LAYER

データ・マイニング表の各位置(および対応する行)を空間ビンに割り当てます。

SDO_SAM.COLOCATED_REFERENCE_FEATURES

部分的な条件ベースの表の結合を実行し、結合の結果を表にマテリアライズします。

SDO_SAM.SIMPLIFY_GEOMETRY

ジオメトリを簡略化します。

SDO_SAM.SIMPLIFY_LAYER

ジオメトリのレイヤーを簡略化します。

SDO_SAM.SPATIAL_CLUSTERS

既存のRツリー索引を使用してクラスタを計算し、SDO_REGIONオブジェクトの集合を戻します。このオブジェクトでは、ジオメトリ列によって各クラスタの境界が指定され、geometry_key値がNULLに設定されています。

SDO_SAM.TILED_AGGREGATES

ドメインの集計を四角形処理します。四角形ごとに、テーマ表から交差するジオメトリを計算します。aggr_col_string列の値は、共通部分の面積に対して均等に重み付けされ、aggr_col_stringに従って集計されます。

SDO_SAM.TILED_BINS

2次元空間を四角形処理し、その四角形に対応するジオメトリを戻します。

この章では、空間分析およびマイニングのサブプログラムのリファレンス情報をアルファベット順に説明します。

SDO_SAM.AGGREGATES_FOR_GEOMETRY

構文

SDO_SAM.AGGREGATES_FOR_GEOMETRY(

theme_name IN VARCHAR2,

theme_colname IN VARCHAR2,

aggr_type_string IN VARCHAR2,

aggr_col_string IN VARCHAR2,

geom IN SDO_GEOMETRY,

dst_spec IN VARCHAR2 DEFAULT NULL

) RETURN NUMBER;

説明

ジオメトリのテーマ集計を行います。

パラメータ

theme_name

テーマ表の名前を指定します。

theme_colname

theme_nameのジオメトリ列の名前を指定します。

aggr_type_string

1つ以上の数値を受け入れ、1つの数値を算出するOracle SQLの集計ファンクションを指定します(SUM、MIN、MAX、AVGなど)。

aggr_col_string

集計値の計算を行うtheme_nameの列名を指定します(「使用上の注意」を参照)。たとえば、POPULATION列を指定します。

geom

ジオメトリ・オブジェクトを指定します。

dst_spec

距離バッファまたは考慮すべき最も近いジオメトリの数を指定する文字列を引用符で囲んで指定します。書式および意味については、「使用上の注意」を参照してください。

使用上の注意

特定のジオメトリについて、このファンクションはtheme_name表のジオメトリを識別して、共通部分の比率を検出し、指定された集計にその比率を掛けて、ジオメトリの集計を行います。具体的には、指定されたジオメトリと交差するtheme_name表のすべての行について、次のファンクションの値を戻します。

aggr_type_string(aggr_col_string * proportional_area_of_intersection(geometry, theme_name.theme_colname))

theme_colname列には、空間索引が定義されている必要があります。最適なパフォーマンスを得るには、この列に簡略化されたジオメトリを挿入します。

dst_specパラメータを指定する場合は、次のうちのいずれかを引用符で囲んで指定します。

- distanceキーワードおよびオプションでunitキーワード(距離値に関係付けられる測定単位)。これにより、ジオメトリの周りにバッファを指定します。たとえば、'distance=2 unit=km'は、入力ジオメトリの周りに2kmのバッファを指定します。dst_specを指定しない場合、バッファは使用されません。
unitキーワードを指定する場合、値はMDSYS.SDO_DIST_UNITS表のSDO_UNIT値('unit=km'など)である必要があります。unitキーワードを指定しない場合、ジオメトリに関連付けられた測定単位が使用されます。測定単位の指定の詳細は、2.10項を参照してください。

- sdo_num_resキーワード。これにより、考慮すべき最も近くにあるジオメトリの数を指定します(比率により求められる範囲は考慮しません)。たとえば、'sdo_num_res=5'は、指定した点に最も近い5都市の人口を要求する問合せに使用できます。

例

次の例では、指定した点ジオメトリを中心に、半径3マイルの領域でテーマ集計を行います。この例では、国内の人口分布が均一であると仮定して、様々な国の円の面積の割合に基づき、その領域内の総人口を計算します。

SELECT sdo_sam.aggregates_for_geometry(
'GEOD_COUNTIES', 'GEOM',
'sum', 'totpop',
SDO_GEOMETRY(2001, 8307,
SDO_POINT_TYPE(-73.943849, 40.6698,NULL),
NULL, NULL),
'distance=3 unit=mile')
FROM DUAL a ;

SDO_SAM.AGGREGATES_FOR_LAYER

構文

SDO_SAM.AGGREGATES_FOR_LAYER(

theme_name IN VARCHAR2,

theme_colname IN VARCHAR2,

aggr_type_string IN VARCHAR2,

aggr_col_string IN VARCHAR2,

tablename IN VARCHAR2,

colname IN VARCHAR2,

dst_spec IN VARCHAR2 DEFAULT NULL

) RETURN SDO_REGAGGRSET;

説明

ジオメトリのレイヤーのテーマ集計を行います。

パラメータ

theme_name

テーマ表の名前を指定します。

theme_colname

theme_nameのジオメトリ列の名前を指定します。

aggr_type_string

1つ以上の数値を受け入れ、1つの数値を算出するOracle SQLの集計ファンクションを指定します(SUM、MIN、MAX、AVGなど)。

aggr_col_string

集計値の計算を行うtheme_nameの列名を指定します(「使用上の注意」を参照)。たとえば、POPULATION列を指定します。

tablename

データ・マイニング表の名前を指定します。

colname

ジオメトリを格納するtablenameの列名を指定します。

dst_spec

距離バッファまたは考慮すべき最も近いジオメトリの数を指定する文字列を引用符で囲んで指定します。書式および意味については、この章に示すSDO_SAM.AGGREGATES_FOR_GEOMETRYファンクションの「使用上の注意」を参照してください。

使用上の注意

tablenameの各ジオメトリについて、このファンクションはtheme_name表のジオメトリを識別して、共通部分の比率を検出し、指定された集計にその比率を掛けて、tablenameの各ジオメトリの集計を行います。具体的には、theme_name表のすべての行について、次のファンクションの値を戻します。

aggr_type_string(aggr_col_string * proportional_area_of_intersection(geometry, theme_name.theme_colname))

このファンクションは、SDO_REGAGGRSET型のオブジェクトを戻します。SDO_REGAGGRSETオブジェクト型は、次のとおり定義されます。

TABLE OF SDO_REGAGGR

SDO_REGAGGRオブジェクト型は、次のとおり定義されます。

Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
REGION_ID                                          VARCHAR2(24)
GEOMETRY                                           MDSYS.SDO_GEOMETRY
AGGREGATE_VALUE                                    NUMBER

theme_colname列には、空間索引が定義されている必要があります。最適なパフォーマンスを得るには、この列に簡略化されたジオメトリを挿入します。

例

次の例では、TEST_TABという表のすべてのジオメトリについて、指定した点ジオメトリを中心に、半径3マイルの領域でテーマ集計を行います。この例では、国内の人口分布が均一であると仮定して、様々な国の円の面積の割合に基づき、各領域内の総人口を計算します。

SELECT a.aggregate_value FROM TABLE(sdo_sam.aggregates_for_layer(
'GEOD_COUNTIES', 'GEOM', 'SUM', TOTPOP', TEST_TAB', 'GEOM'
'distance=3 unit=mile')) a;

SDO_SAM.BIN_GEOMETRY

構文

SDO_SAM.BIN_GEOMETRY(

geom IN SDO_GEOMETRY,

tol IN SDO_DIM_ARRAY,

bin_tablename IN VARCHAR2,

bin_colname IN VARCHAR2

) RETURN NUMBER;

または

SDO_SAM.BIN_GEOMETRY(

geom IN SDO_GEOMETRY,

dim IN SDO_DIM_ARRAY,

bin_tablename IN VARCHAR2,

bin_colname IN VARCHAR2

) RETURN NUMBER;

説明

ジオメトリの交差部の最も多い四角形を計算します。

パラメータ

geom

ビンを計算するジオメトリを指定します。

tol

許容差を指定します(1.5.5項を参照)。

dim

ビンのジオメトリを格納する表の次元配列を指定します。

bin_tablename

ビンのジオメトリを格納する表の名前を指定します。

bin_colname

ビンのジオメトリを格納するbin_tablenameの列を指定します。

使用上の注意

このファンクションは、指定されたジオメトリと最も多く交差するビンを戻します。複数のビンが指定されたジオメトリの同じエクステントに交差する場合は、最小の面積を持つビンが戻されます。

指定されたbin_tablenameを使用して、データ・マイニング表のすべての行に対してこの操作を実行するには、SDO_SAM.BIN_LAYERプロシージャを使用します。

例

次の例では、指定したジオメトリのビンを計算します。

SELECT sdo_sam.bin_geometry(a.geometry, 0.0000005, 'BINTBL', 'GEOMETRY')
FROM poly_4pt a, user_sdo_geom_metadata b
WHERE b.table_name='POLY_4PT' AND a.gid=1;

SDO_SAM.BIN_GEOMETRY(A.GEOMETRY,0.0000005,'BINTBL','GEOMETRY')
--------------------------------------------------------------
43

1 row selected.

SDO_SAM.BIN_LAYER

構文

SDO_SAM.BIN_LAYER(

tablename IN VARCHAR2,

colname IN VARCHAR2,

bin_tablename IN VARCHAR2,

bin_colname IN VARCHAR2,

bin_id_colname IN VARCHAR2,

commit_interval IN NUMBER DEFAULT 20);

説明

データ・マイニング表の各位置(および対応する行)を空間ビンに割り当てます。

パラメータ

tablename

データ・マイニング表の名前を指定します。

colname

位置の座標を格納するtable_nameの列名を指定します。

bin_tablename

空間ビンの情報(2次元空間全体の事前計算)を含む表名を指定します。

bin_colname

ビンのジオメトリを格納するbin_tablenameの列を指定します。

bin_id_colname

ビンに追加する各ジオメトリのビンID値を格納するデータ・マイニング表の列名を指定します。(データ・マイニング表の影響を受けた各行は、bin_tablenameのビン・ジオメトリのID値で更新されます。)

commit_interval

Spatialによって内部コミット操作が実行される前に行うビン挿入操作の回数を指定します。commit_intervalを指定しない場合、コミットは挿入操作を20回行うたびに実行されます。

使用上の注意

このプロシージャは、bin_tablenameのビンを使用して、指定したレイヤーの各ジオメトリについて、交差部の最も多い四角形を計算します。各ジオメトリのビンID値は、bin_id_colnameに追加されます。

このプロシージャは、bin_tablenameで指定したデータ・マイニング表の各行に対して、SDO_SAM.BIN_GEOMETRYファンクションを使用する場合と同じ結果になります。

例

次の例では、POLY_4PT_TEMPデータ・マイニング表の各GEOMETRY列の位置および対応する行を空間ビンに割り当て、ビン表の挿入のたびに内部コミット操作を実行します。

CALL SDO_SAM.BIN_LAYER('POLY_4PT_TEMP', 'GEOMETRY', 'BINTBL', 'GEOMETRY', 'BIN_ID', 1);

SDO_SAM.COLOCATED_REFERENCE_FEATURES

構文

SDO_SAM.COLOCATED_REFERENCE_FEATURES(

theme_tablename IN VARCHAR2,

theme_colname IN VARCHAR2,

theme_predicate IN VARCHAR2,

tablename IN VARCHAR2,

colname IN VARCHAR2,

ref_predicate IN VARCHAR2,

dst_spec IN VARCHAR2,

result_tablename IN VARCHAR2,

commit_interval IN NUMBER DEFAULT 100);

説明

部分的な条件ベースの表の結合を実行し、結合の結果を表にマテリアライズします。

パラメータ

theme_tablename

tablenameを結合する表名を指定します。

theme_colname

theme_tablenameのジオメトリ列の名前を指定します。

theme_predicate

theme_tablenameに適用されるWHERE句の条件を指定します。

tablename

データ・マイニング表の名前を指定します。

colname

位置の座標を格納するtablenameの列名を指定します。

ref_predicate

tablenameに適用されるWHERE句の条件を指定します。これは単一表の条件('country_code=10'など)である必要があります。

dst_spec

ジオメトリの周りのバッファを、距離値および単位値(オプション)を含む文字列を引用符で囲んで指定します。書式および意味については、「使用上の注意」を参照してください。

result_tablename

マテリアライズした結合の結果を格納する表を指定します。(tid NUMBER, rid1 VARCHAR2(24), rid2 VARCHAR2(24))という定義の表を指定する必要があります。

commit_interval

Spatialによって内部コミット操作が実行される前に行う内部結合操作の回数を指定します。commit_intervalを指定しない場合、コミットは内部結合操作を100回行うたびに実行されます。

使用上の注意

このプロシージャは、条件ベースの結合操作によって戻されるROWIDの各組合せをマテリアライズして、result_tablenameのrid1、rid2列に格納します。tidは、各rid1値に対応して生成される一意の相互作用番号です。

dst_specパラメータは、distanceキーワードおよびオプションでunitキーワード(距離値に関連付けられた測定単位)を含み、引用符で囲んで指定します。これにより、ジオメトリの周りにバッファを指定します。たとえば、'distance=2 unit=km'は、入力ジオメトリの周りに2kmのバッファを指定します。dst_specを指定しない場合、バッファは使用されません。

unitキーワードを指定する場合、値はMDSYS.SDO_DIST_UNITS表のSDO_UNIT値('unit=KM'など)である必要があります。unitキーワードを指定しない場合、ジオメトリに関連付けられた測定単位が使用されます。測定単位の指定の詳細は、2.10項を参照してください。

例

次の例では、1990年の人口(POP90列の値)が120,000人を超え、州間高速道路からの距離(GEOD_INTERSTATES表のGEOM列)が20km以内である都市を識別します。結果はCOLOCATION_TABLEという表に格納され、内部操作を20回行うたびに内部コミット操作が実行されます。

EXECUTE SDO_SAM.COLOCATED_REFERENCE_FEATURES(
'geod_cities', 'location', 'pop90 > 120000',
'geod_interstates', 'geom', null,
'distance=20 unit=km', 'colocation_table', 20);

SDO_SAM.SIMPLIFY_GEOMETRY

構文

SDO_SAM.SIMPLIFY_GEOMETRY(

geom IN SDO_GEOMETRY,

dim IN SDO_DIM_ARRAY,

pct_area_change_limit IN NUMBER DEFAULT 2

) RETURN SDO_GEOMETRY;

または

SDO_SAM.SIMPLIFY_GEOMETRY(

geom IN SDO_GEOMETRY,

tol IN NUMBER,

pct_area_change_limit IN NUMBER DEFAULT 2

) RETURN SDO_GEOMETRY;

説明

ジオメトリを簡略化します。

パラメータ

geom

簡略化するジオメトリを指定します。

dim

簡略化するジオメトリの次元配列を指定します。

tol

許容差を指定します(1.5.5項を参照)。

pct_area_change_limit

簡略化の反復ごとに変更される面積の割合を指定します(「使用上の注意」を参照)。

使用上の注意

このファンクションは、SDO_UTIL.SIMPLIFYファンクション(第32章を参照)を適切なしきい値で内部適用することによって、ジオメトリの頂点の数を削減します。

頂点の数を削減すると、ジオメトリの面積が変更される場合があります。pct_area_change_limitパラメータで、ジオメトリを簡略化する際に変更される面積の許容差を指定します。通常は1から100の範囲です。デフォルト値(2)の場合、ジオメトリの面積は簡略化によって元のジオメトリから2%の範囲内で増減します。

例

次の例では、POLY_4PT_TEMP表のGEOMETRY列のジオメトリを簡略化します。

SELECT sdo_sam.simplify_geometry(a.geometry, 0.00000005)
FROM poly_4pt_temp a, user_sdo_geom_metadata b
WHERE b.table_name='POLY_4PT_TEMP' ;

SDO_SAM.SIMPLIFY_GEOMETRY(A.GEOMETRY,0.00000005)(ORIG_AREA, CUR_AREA, ORIG_LEN,
--------------------------------------------------------------------------------
SDO_SMPL_GEOMETRY(28108.5905, 28108.5905, 758.440118, 758.440118, SDO_GEOMETRY(2
003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(-122.4215,
37.7862, -122.422, 37.7869, -122.421, 37.789, -122.42, 37.7866, -122.4215, 37.78
62)))

SDO_SMPL_GEOMETRY(4105.33806, 4105.33806, 394.723053, 394.723053, SDO_GEOMETRY(2
003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(-122.4019,
37.8052, -122.4027, 37.8055, -122.4031, 37.806, -122.4012, 37.8052, -122.4019, 3
7.8052)))
.
.
.
50 rows selected.

SDO_SAM.SIMPLIFY_LAYER

構文

SDO_SAM.SIMPLIFY_LAYER(

theme_tablename IN VARCHAR2,

theme_colname IN VARCHAR2,

smpl_geom_colname IN VARCHAR2,

commit_interval IN NUMBER DEFAULT 10,

pct_area_change_limit IN NUMBER DEFAULT 2);

説明

ジオメトリのレイヤーを簡略化します。

パラメータ

theme_tablename

簡略化するジオメトリのレイヤーを含む表の名前を指定します。

theme_colname

簡略化するジオメトリを含むSDO_GEOMETRY型のtheme_tablenameの列を指定します。

smpl_geom_colname

このプロシージャによって簡略化されたジオメトリが配置される、SDO_GEOMETRY型のtheme_tablenameの列を指定します。

commit_interval

Spatialによって内部コミット操作が実行される前に簡略化するジオメトリの数を指定します。commit_intervalを指定しない場合、コミットは簡略化操作を10回行うたびに実行されます。

pct_area_change_limit

簡略化の反復ごとに変更される面積の割合を指定します(SDO_SAM.SIMPLIFY_GEOMETRYファンクションの「使用上の注意」を参照)。

使用上の注意

このプロシージャは、レイヤー内のすべてのジオメトリを簡略化します。実行する操作は、レイヤー内の各ジオメトリに対してSDO_SAM.SIMPLIFY_GEOMETRYファンクションをコールする場合と同じですが、このファンクションでは、簡略化された各ジオメトリは、コール元に戻されるのではなく、表内の別々の列に配置されます。SDO_SAM.SIMPLIFY_GEOMETRYファンクションの「使用上の注意」も参照してください。

例

次の例では、SMPL_GEOMという列をPOLY_4PT_TEMP表に追加して、POLY_4PT_TEMP表のGEOMETRY列のすべてのジオメトリを簡略化し、簡略化された各ジオメトリを対応する元のジオメトリと同じ行のSMPL_GEOM列に配置します。

ALTER TABLE poly_4pt_temp ADD (smpl_geom mdsys.sdo_geometry);

Table altered.

EXECUTE sdo_sam.simplify_layer('POLY_4PT_TEMP', 'GEOMETRY', 'SMPL_GEOM');

PL/SQL procedure successfully completed.

SDO_SAM.SPATIAL_CLUSTERS

構文

SDO_SAM.SPATIAL_CLUSTERS(

tablename IN VARCHAR2,

colname IN VARCHAR2,

max_clusters IN NUMBER,

allow_outliers IN VARCHAR2 DEFAULT 'TRUE',

tablepartition IN VARCHAR2 DEFAULT NULL

) RETURN SDO_REGIONSET;

説明

既存のRツリー索引を使用してクラスタを計算し、SDO_REGIONオブジェクトの集合を戻します。このオブジェクトでは、ジオメトリ列によって各クラスタの境界が指定され、geometry_key値がNULLに設定されています。

パラメータ

tablename

データ・マイニング表の名前を指定します。

colname

位置の座標を格納するtablenameの列名を指定します。

max_clusters

取得するクラスタの最大数を指定します。

allow_outliers

TRUE (デフォルト)を指定した場合、外れ値(独立したインスタンス)が空間クラスタに含まれます。FALSEを指定した場合、外れ値は空間クラスタには含まれません。(TRUEを指定すると、すべてのデータが許容されるため、クラスタは大きくなります。FALSEを指定すると、一部のデータが除外されるため、クラスタは小さくなります。)

tablepartition

tablenameのパーティション名を指定します。

使用上の注意

クラスタはtablenameの空間Rツリー索引を使用して計算されます。

例

次の例では、都市の位置を最大3つのクラスタにクラスタ化します。外れ値はクラスタに含めます。

SELECT * FROM
TABLE(sdo_sam.spatial_clusters('PROJ_CITIES', 'LOCATION', 3, 'TRUE'));

SDO_SAM.TILED_AGGREGATES

構文

SDO_SAM.TILED_AGGREGATES(

theme_name IN VARCHAR2,

theme_colname IN VARCHAR2,

aggr_type_string IN VARCHAR2,

aggr_col_string IN VARCHAR2,

tiling_level IN NUMBER DEFAULT NULL,

tiling_domain IN SDO_DIM_ARRAY DEFAULT NULL,

zero_agg_tiles IN NUMBER DEFAULT 0,

xdivs IN NUMBER DEFAULT NULL,

ydivs IN NUMBER DEFAULT NULL

) RETURN SDO_REGAGGRSET;

説明

ドメインの集計を四角形処理します。四角形ごとに、テーマ表から交差するジオメトリを計算します。aggr_col_string列の値は、共通部分の面積に対して均等に重み付けされ、aggr_col_stringに従って集計されます。

パラメータ

theme_name

テーマ情報(デモグラフィック情報など)を含む表を指定します。

theme_colname

ジオメトリ・オブジェクトを含むtheme_name表の列名を指定します。

aggr_type_string

1つ以上の数値を受け入れ、1つの数値を算出するOracle SQLの集計ファンクションを指定します(SUM、MIN、MAX、AVGなど)。

aggr_col_string

集計値の計算を行うtheme_name表の列名を指定します。たとえば、POPULATION列を指定します。

tiling_level

四角形の作成に使用するレベルを指定します。このパラメータを指定すると、各ディメンションのエクステントは、2^tiling_level個の要素に分割され、結果として最大で4×tiling_levelの四角形が作成されます。(このパラメータ、またはxdivsパラメータとydivsパラメータの組合せのいずれかを指定します。)

tiling_domain

四角形処理レベルのドメインを指定します。このパラメータを必要とせず、指定しない場合は、theme_name表に関連付けられたエクステントが使用されます。

zero_agg_tiles

集計値が0 (ゼロ)となる四角形を除外するために0 (ゼロ)を指定するか、またはすべての四角形を戻すために1を指定します。デフォルト値は0 (ゼロ)です。これにより、0 (ゼロ)以外の集計値を持つ四角形のみが戻されることになります。

xdivs

1つ目の次元のエクステントを何回分割するかを指定します(分割後の要素の合計数はxdivs + 1)。たとえば、xdivsを10に指定すると、1つ目の次元のエクステントは11の要素に分割されます。

ydivs

2つ目の次元のエクステントを何回分割するかを指定します(分割後の要素の合計数はydivs + 1)。たとえば、ydivsを10に指定すると、2つ目の次元のエクステントは11の要素に分割されます。

使用上の注意

このファンクションはSDO_SAM.AGGREGATES_FOR_LAYERに類似していますが、結果は四角形処理情報によって動的に生成されます。theme_name表の場合、四角形処理のドメインが決定されます。tiling_level値、またはxdivs値およびydivs値に基づいて、必要な四角形が生成されます。各四角形ジオメトリについて、テーマ集計が行われます(SDO_SAM.AGGREGATES_FOR_LAYERの「使用上の注意」を参照)。

tiling_levelパラメータ、またはxdivsパラメータとydivsパラメータの両方を指定する必要があります。これらの3つのパラメータをすべて指定した場合、tiling_levelパラメータは無視され、xdivsパラメータとydivsパラメータが使用されます。

xdivsパラメータとydivsパラメータを指定した場合、戻されるグリッド(四角形)の合計数は、(xdivs+1)×(ydivs+1)です。

このファンクションは、SDO_REGAGGRSET型のオブジェクトを戻します。SDO_REGAGGRSETオブジェクト型は、次のとおり定義されます。

TABLE OF SDO_REGAGGR

SDO_REGAGGRオブジェクト型は、次のとおり定義されます。

Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
REGION_ID                                          VARCHAR2(24)
GEOMETRY                                           MDSYS.SDO_GEOMETRY
AGGREGATE_VALUE                                    NUMBER

例

次の例では、各四角形と交差するPOLY_4PT_TEMP表の人口の行の合計を計算します。USER_SDO_GEOM_METADATAビューに格納されたPOLY_4PT_TEMP表のエクステントがドメインとして使用され、四角形処理レベルは2となります(この場合、ドメインは16の四角形に分割されます)。

SELECT a.geometry, a.aggregate_value
from TABLE(sdo_sam.tiled_aggregates('POLY_4PT_TEMP',
'GEOMETRY', 'SUM', 'POPULATION', 2)) a;

GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
AGGREGATE_VALUE
---------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(-180, -90, -90, -45))
.007150754

SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(-180, -45, -90, 0))
.034831005

SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(-180, 0, -90, 45))
7.73307783

SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(-90, -90, 0, -45))
.019498368

SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(-90, -45, 0, 0))
.939061456

SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(-90, 0, 0, 45))
1.26691592

SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(0, 0, 90, 45))
40

7 rows selected.

SDO_SAM.TILED_BINS

構文

SDO_SAM.TILED_BINS(

l1 IN NUMBER,

u1 IN NUMBER,

l2 IN NUMBER,

u2 IN NUMBER,

tiling_level IN NUMBER DEFAULT NULL,

srid IN NUMBER DEFAULT NULL,

xdivs IN NUMBER DEFAULT NULL,

ydivs IN NUMBER DEFAULT NULL

) RETURN SDO_REGIONSET;

説明

2次元空間を四角形処理し、その四角形に対応するジオメトリを戻します。

パラメータ

l1

最初の次元のエクステントの下限を指定します。

u1

最初の次元のエクステントの上限を指定します。

l2

第2の次元のエクステントの下限を指定します。

u2

第2の次元のエクステントの上限を指定します。

tiling_level

指定したエクステントの四角形処理に使用するレベルを指定します。このパラメータを指定すると、各ディメンションのエクステントは、2^tiling_level個の要素に分割され、結果として最大で4×tiling_levelの四角形が作成されます。(このパラメータ、またはxdivsパラメータとydivsパラメータの組合せのいずれかを指定します。)

srid

戻される四角形ジオメトリの座標系に含まれるSRID値を指定します。

xdivs

1つ目の次元のエクステントを何回分割するかを指定します(分割後の要素の合計数はxdivs + 1)。たとえば、xdivsを10に指定すると、1つ目の次元のエクステントは11の要素に分割されます。

ydivs

2つ目の次元のエクステントを何回分割するかを指定します(分割後の要素の合計数はydivs + 1)。たとえば、ydivsを10に指定すると、2つ目の次元のエクステントは11の要素に分割されます。

使用上の注意

tiling_levelパラメータ、またはxdivsパラメータとydivsパラメータの両方を指定する必要があります。これらの3つのパラメータをすべて指定した場合、tiling_levelパラメータは無視され、xdivsパラメータとydivsパラメータが使用されます。

xdivsパラメータとydivsパラメータを指定した場合、戻されるグリッド(四角形)の合計数は、(xdivs+1)×(ydivs+1)です。

このファンクションは、SDO_REGIONSET型のオブジェクトを戻します。SDO_REGIONSETオブジェクト型は、次のとおり定義されます。

TABLE OF SDO_REGION

SDO_REGIONオブジェクト型は、次のとおり定義されます。

Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ID                                                 NUMBER
GEOMETRY                                           MDSYS.SDO_GEOMETRY

例

次の例では、標準的な緯度と経度の座標系(SRID 8307)を使用して、四角形処理レベル1で地表面全体の四角形処理を行います。結果として戻されるSDO_REGIONSETオブジェクトには、4つのSDO_REGIONオブジェクト(四角形ごとに1つのオブジェクト)が含まれます。

SELECT * FROM TABLE(sdo_sam.tiled_bins(-180, 180, -90, 90, 1, 8307))
ORDER BY id;

ID
----------
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
0
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(-180, -90, 0, 0))

1
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(-180, 0, 0, 90))

2
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(0, -90, 180, 0))

3
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(0, 0, 180, 90))

4 rows selected.

30 SDO_TIN_PKGパッケージ(TIN)

この章では、表30-1に示すTriangulated Irregular Network(TIN)のサブプログラムについて説明します。

表30-1 TINのサブプログラム

サブプログラム

説明

SDO_TIN_PKG.CLIP_TIN

TINに対してクリップ操作を実行します。

SDO_TIN_PKG.CREATE_TIN

inptableパラメータで指定した点を使用してTINを作成します。

SDO_TIN_PKG.DROP_DEPENDENCIES

TINブロック表と指定した実表および列の間の依存性を削除します。

SDO_TIN_PKG.INIT

TINを初期化します。

SDO_TIN_PKG.TO_GEOMETRY

TINのすべてまたは一部を表すジオメトリ・オブジェクトを戻します。

このパッケージのサブプログラムを使用するには、Triangulated Irregular Network(TIN)を使用した表面のモデル化を含む、3次元のジオメトリに関する主な概念を理解しておく必要があります。3次元ジオメトリのサポートについては1.11項、TINを使用した表面のモデル化については1.11.1項、TINに関連するデータ型については2.5項を参照してください。

SDO_TIN_PKG.CLIP_TIN

構文

SDO_TIN_PKG.CLIP_TIN(

inp IN SDO_TIN,

qry IN SDO_GEOMETRY,

qry_min_res IN NUMBER,

qry_max_res IN NUMBER,

blkid IN NUMBER DEFAULT NULL

) RETURN SDO_TIN_BLK_TYPE;

説明

TINに対してクリップ操作を実行します。

パラメータ

inp

クリップ操作を実行するTINを指定します。

qry

戻されるオブジェクトを選択するウィンドウを指定します。通常、2次元ジオメトリの場合はポリゴン、3次元ジオメトリの場合は錐台となります。

qry_min_res

最小解像度の値を指定します。解像度がqry_min_res以上およびqry_max_res以下のqryのオブジェクトがクリップ操作により戻されます。

qry_max_res

最大解像度の値を指定します。解像度がqry_min_res以上およびqry_max_res以下のqryのオブジェクトがクリップ操作により戻されます。

blkid

クリップ操作によって戻されるオブジェクトを制限するブロックのブロックID番号を指定します。このパラメータがNULLの場合、他のパラメータを満たすすべてのオブジェクトが戻されます。

使用上の注意

このファンクションでは、指定した問合せウィンドウ内にあり、かつパラメータによって指定されている他の要件を満たしているTINの三角形を戻します。一般に、このファンクションはTINに対して問合せを実行するために使用します。TINの問合せのパフォーマンスを最大にするには、ファンクションが操作に対して考慮する必要のあるオブジェクトの数を最小限にします。

SDO_TINおよびSDO_TIN_BLK_TYPEデータ型については、2.5項を参照してください。

TINを使用して表面をモデル化する方法は、1.11.1項を参照してください。

例

次の例では、TINに対してクリップ操作を実行します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/TIN/plsql/にあるsdo_tin.sqlサンプル・プログラムから取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。

. . .
declare
inp  sdo_tin;
begin
select tin INTO inp  from base where rownum=1;
insert into restst
select * from
table(sdo_tin_pkg.clip_tin
(
inp,  -- Input TIN object
sdo_geometry(2003, null, null,
mdsys.sdo_elem_info_array(1, 1003, 3),
mdsys.sdo_ordinate_array(-74.1, -73.9, 39.99999,40.00001)), -- Query
null, null));
end;
. . .

SDO_TIN_PKG.CREATE_TIN

構文

SDO_TIN_PKG.CREATE_TIN(

inp IN SDO_TIN,

inptable IN VARCHAR2,

clstPcdataTbl IN VARCHAR2 DEFAULT NULL);

説明

inptableパラメータで指定した点を使用してTINを作成します。

パラメータ

inp

使用するSDO_TINオブジェクトを指定します。このオブジェクトは、SDO_TIN_PKG.INITファンクションによって作成されている必要があります。

inptable

入力TINデータを含む表またはビューの名前を指定します。この表またはビューには、次の列が含まれている必要があります。

- RID (VARCHAR2(24)): 各点の一意のID。

- VAL_D1 (NUMBER): 次元1の座標。

- VAL_D2 (NUMBER): 次元2の座標。

- . . .

- VAL_Dn (NUMBER): 次元nの座標。ここでのnは、最も数字の大きい次元です。nは、TINが初期化されたときのSDO_TIN_PKG.INITファンクションへのコールに含まれていたtin_tot_dimensionsパラメータ値と一致している必要があります。

clstPcdataTbl

結果として生成された点データを格納する表の名前を指定します。値を指定しない場合、この表は作成されません。表の詳細は、「使用上の注意」を参照してください。

使用上の注意

TINの最初のいくつかの次元を索引付けすると、後でSDO_TIN_PKG.CLIP_TINファンクションを使用して検索することができます。索引付けする次元の正確な数は、初期化されたTINオブジェクト内のTINエクステントの次元(具体的にはinp.tin_extent.sdo_gtype/1000)によって決まります。

inptableパラメータにビュー名を指定すると、SELECT ROWID FROM <view-name>の問合せはエラーを戻すことはできません。

clstPcdataTblパラメータで表名を指定する場合は、指定する表が存在し、次の列が含まれている必要があります。

- PTN_ID (NUMBER)

- POINT_ID (NUMBER)

- RID (VARCHAR2(24)): 各点の一意のID。

- VAL_D1 (NUMBER): 次元1の座標。

- VAL_D2 (NUMBER): 次元2の座標。

- . . .

- VAL_Dn (NUMBER): 次元nの座標。ここでのnは、最も数字の大きい次元です。nは、TINが初期化されたときのSDO_TIN_PKG.INITファンクションへのコールに含まれていたtin_tot_dimensionsパラメータ値と一致している必要があります。

clstPcdataTblパラメータの値が指定されている場合、このファンクションは、PTN_IDおよびPOINT_IDに対して適切な値を割り当て、他の属性のinptable表またはビューから値をコピーすることによって表にデータを挿入します。この表は索引構成表として作成できます。この表をアプリケーションで使用すると、索引次元で反映される次元以外の次元に関してSQL問合せを使用した検索を実行できます。(索引次元および総次元の説明は、SDO_TIN_PKG.INITファンクションのtin_tot_dimensionsパラメータの説明を参照してください。)

SDO_TINデータ型の詳細は、2.5項を参照してください。

TINを使用して表面をモデル化する方法は、1.11.1項を参照してください。

例

次の例ではTINを作成します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/TIN/plsql/にあるsdo_tin.sqlサンプル・プログラムから取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。

. . .
-- Create the blocks for the TIN.
sdo_tin_pkg.create_tin(
tin,       -- Initialized TIN object
'INPTAB', -- Name of input table to ingest into the pointcloud
'RES'     -- Name of output table that stores the points (with ptn_id,pt_id)
);
/
. . .

SDO_TIN_PKG.DROP_DEPENDENCIES

構文

SDO_TIN_PKG.DROP_DEPENDENCIES(

basetable IN VARCHAR2,

col IN VARCHAR2);

説明

TINブロック表と指定した実表および列の間の依存性を削除します。

パラメータ

basetable

TINの初期化時に(SDO_TIN_PKG.INITファンクションのbasetableパラメータで)指定されていた実表の名前を指定します。

col

SDO_TIN_PKG.INITファンクションのbasecolパラメータで指定されていた実表内の列名を指定します。

使用上の注意

このプロシージャは、TINブロック表を切り捨て、ブロック表と実表および列の組合せの間の関連付けを削除します。

このプロシージャを実行した後は、TINブロック表を削除したり、表を別の実表および列の組合せに関連付けることができます。詳細は、SDO_TIN_PKG.INITファンクションの「使用上の注意」を参照してください。

例

次の例では、TINブロック表と(それぞれがBASEとTINという名前の)実表および列の間の依存性を削除します。

. . .
declare
begin
mdsys.sdo_tin_pkg.drop_dependencies('BASE', 'TIN');
end;
/

SDO_TIN_PKG.INIT

構文

SDO_TIN_PKG.INIT(

basetable IN VARCHAR2,

basecol IN VARCHAR2,

blktable IN VARCHAR2,

ptn_params IN VARCHAR2,

tin_extent IN SDO_GEOMETRY,

tin_tol IN NUMBER DEFAULT 0.000000000000005,

tin_tot_dimensions IN NUMBER DEFAULT 2,

tin_domain IN SDO_ORGSCL_TYPE DEFAULT NULL,

tin_break_lines IN SDO_GEOMETRY DEFAULT NULL,

tin_stop_lines IN SDO_GEOMETRY DEFAULT NULL,

tin_void_rgns IN SDO_GEOMETRY DEFAULT NULL,

tin_val_attr_tables IN SDO_STRING_ARRAY DEFAULT NULL,

tin_other_attrs IN XMLTYPE DEFAULT NULL,

) RETURN SDO_TIN;

説明

SDO_TINオブジェクトの作成によりTINを初期化します。

パラメータ

basetable

SDO_TIN型の列を含む実表の名前を指定します。

basecol

実表のSDO_TIN型の列名を指定します。

blktable

TINのブロックを格納するために使用する、TINブロック表の名前を指定します。この表は存在している必要があり、またCREATE TABLE <table-name> AS select * from mdsys.sdo_tin_blk_table;形式の文によって作成されている必要があります。

各TINブロック表に関連付けることのできるbasetableとbasecolの組合せは1つのみです。

ptn_params

TINのパーティション化に関するパラメータを指定します。カンマで区切られたキーワードを引用符で囲んだ文字列として指定します。たとえば、'blk_capacity=1000,work_tablespace=my_work_ts'などです。このパラメータがNULLの場合、TINはパーティション化されません。使用可能なキーワードは、次のとおりです。

- blk_capacity=n: nは各パーティション内の最大行数です。デフォルト値は5000です。この値には、常に50より大きい数字を指定します。

- work_tablespace=x: xは、パーティション操作中に一時表を作成する表領域の名前です。

tin_extent

TINの空間エクステント(TINに含まれるすべてのオブジェクトを囲む最小境界オブジェクト)を表すSDO_GEOMETRYオブジェクトを指定します。このパラメータは、NULL以外である必要があります。

測地データの場合、このジオメトリは2つの次元を持つ必要があります。測地データ以外の場合は、最大で4つの次元を持つことができます。このジオメトリの次元は、tin_tot_dimensionsパラメータで使用できる最小値として使用されます(このパラメータの説明を参照)。

tin_tol

TIN内のオブジェクトの許容差。(空間許容差の詳細は、1.5.5項を参照してください。)このパラメータがNULLの場合、デフォルト値は0.0000000000005です。

tin_tot_dimensions

TINオブジェクトの総次元を指定する数字を指定します。TINブロックの各点については、tin_tot_dimensions座標(値)が格納されます。

総次元は、tin_extentジオメトリの次元数である索引次元以上に指定する必要があります。総次元を索引次元より大きく指定すると、空間データと同じフェッチ操作で必要な非空間属性を取得できます。総次元の最大値は8です。このパラメータのデフォルト値は2です。

tin_domain

(現在は未使用。)

tin_break_lines

(現在は未使用。)

tin_stop_lines

(現在は未使用。)

tin_void_rgns

(現在は未使用。)

tin_val_attr_tables

TINの値属性表の名前を指定するSDO_STRING_ARRAYオブジェクトを指定します。このパラメータがNULLの場合、TINに関連付けられる値属性表はありません。SDO_STRING_ARRAY型は、VARRAY(1048576) OF VARCHAR2(32)として定義されます。

tin_other_attrs

TINのその他の属性を指定するXMLTYPEオブジェクトを指定します。このパラメータがNULLの場合、TINはその他の属性を持ちません。

使用上の注意

このファンクションを使用してSDO_TINオブジェクトを作成した後は、このオブジェクトをSDO_TIN_PKG.CREATE_TINプロシージャへの入力として指定することでTINを作成できます。

SDO_TINデータ型の詳細は、2.5項を参照してください。

TINを使用して表面をモデル化する方法は、1.11.1項を参照してください。

例

次の例では、SDO_TINオブジェクトの作成によりTINを初期化します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/TIN/plsql/にあるsdo_tin.sqlサンプル・プログラムから取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。

declare
tin sdo_tin;
begin
-- Initialize the TIN object.
tin := sdo_tin_pkg.init(
'BASE', -- Table that has the SDO_TIN column defined
'TIN',   -- Column name of the SDO_TIN object
'BLKTAB', -- Table to store blocks of the TIN
'blk_capacity=1000', -- max # of points per block
mdsys.sdo_geometry(2003, null, null,
mdsys.sdo_elem_info_array(1,1003,3),
mdsys.sdo_ordinate_array(-180, -90, 180, 90)),  -- Extent
0.0000000005, -- Tolerance for TIN
3, -- Total number of dimensions
null);
. . .

SDO_TIN_PKG.TO_GEOMETRY

構文

SDO_TIN_PKG.TO_GEOMETRY(

pts IN BLOB,

trs IN BLOB,

num_pts IN NUMBER,

num_trs IN NUMBER,

tin_tot_dim IN NUMBER,

srid IN NUMBER DEFAULT NULL,

blk_domain IN SDO_ORGSCL_TYPE DEFAULT NULL

) RETURN SDO_GEOMETRY;

説明

TINのすべてまたは一部を表すジオメトリ・オブジェクトを戻します。

パラメータ

pts

点を含むBLOBを指定します。

trs

三角形を含むBLOBを指定します。

num_pts

結果として生成されるジオメトリに含まれる点の最大数を指定します。

num_pts

結果として生成されるジオメトリに含まれる三角形の最大数を指定します。

tin_tot_dim

データに定義する空間次元数を指定します。

srid

データに関連付けられた空間参照(座標系)IDを指定します。このパラメータがNULLの場合、SRID値はデータに関連付けられません。

blk_domain

(現在は未使用。)

使用上の注意

このファンクションは、ptsパラメータのすべての点ジオメトリおよびtrsパラメータのすべての三角形ジオメトリを表す、単一のSDO_GEOMETRY集合オブジェクトを戻します。たとえば、点および三角形にクリップ操作の結果またはブロック全体の内容を反映することもできます。

TINを使用して表面をモデル化する方法は、1.11.1項を参照してください。

例

次の例では、TINを表す複数点の集合ジオメトリ・オブジェクトを戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/examples/TIN/plsql/にあるsdo_tin.sqlサンプル・プログラムから取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。

. . .
-- Return points in blk_id of the TIN as a multipoint collection.
select sdo_tin_pkg.to_geometry(
a.points,   -- point LOB
a.triangles,   -- point LOB
a.num_points, -- # of points in the LOB
a.num_triangles, -- # of points in the LOB
2,  -- index dimensionality (gtype dim in extent in INIT)
3,  -- total dimensionality
null -- SRID
) from blktab a where blk_id=0;
. . .

31 SDO_TUNEパッケージ(チューニング)

この章では、表31-1に示すチューニング・サブプログラムについて説明します。

表31-1 チューニング・サブプログラム

サブプログラム

説明

SDO_TUNE.AVERAGE_MBR

レイヤー内のジオメトリに対する平均最小境界矩形を計算します。

SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE

Rツリー空間索引表に必要な最大サイズ(MB)を見積もります。

SDO_TUNE.EXTENT_OF

レイヤー内のデータの最小境界矩形を戻します。

SDO_TUNE.MIX_INFO

各ジオメトリ・タイプのパーセンテージなどのような、空間レイヤーに対するジオメトリ・タイプ情報を計算します。

SDO_TUNE.QUALITY_DEGRADATION

索引の品質の低下度、またはすべての索引表に対する索引の平均品質の低下度を戻したり、指定した索引表に対する品質の低下度を戻します。(非推奨)

SDO_TUNE.AVERAGE_MBR

構文

SDO_TUNE.AVERAGE_MBR(

table_name IN VARCHAR2,

column_name IN VARCHAR2,

width OUT NUMBER,

height OUT NUMBER);

説明

レイヤー内のジオメトリに対する平均最小境界矩形(MBR)を計算します。

パラメータ

table_name

空間ジオメトリ表を指定します。

column_name

平均最小境界矩形を計算するジオメトリ列を指定します。

width

平均最小境界矩形の幅が格納されます。

height

平均最小境界矩形の高さが格納されます。

使用上の注意

このプロシージャは、平均最小境界矩形の幅および高さを計算して、格納します。平均最小境界矩形は、空間ジオメトリ表内のすべてのジオメトリのXとYの最大値と最小値を追跡および記録することによって計算されます。

例

次の例では、COLA_MARKETS表のSHAPE列について最小境界矩形を計算します。

DECLARE
table_name  VARCHAR2(32) := 'COLA_MARKETS';
column_name  VARCHAR2(32) := 'SHAPE';
width  NUMBER;
height  NUMBER;
BEGIN
SDO_TUNE.AVERAGE_MBR(
table_name,
column_name,
width,
height);
DBMS_OUTPUT.PUT_LINE('Width = ' || width);
DBMS_OUTPUT.PUT_LINE('Height = ' || height);
END;
/
Width = 3.5
Height = 4.5

関連項目

SDO_AGGR_MBR空間集計ファンクション(第20章)

SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE

構文

SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE(

schemaname IN VARCHAR2,

tabname IN VARCHAR2,

colname IN VARCHAR2,

partname IN VARCHAR2 DEFAULT NULL

) RETURN NUMBER;

または

SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE(

number_of_geoms IN INTEGER,

db_block_size IN INTEGER,

sdo_rtr_pctfree IN INTEGER DEFAULT 10,

num_dimensions IN INTEGER DEFAULT 2,

is_geodetic IN INTEGER DEFAULT 0

) RETURN NUMBER;

説明

Rツリー空間索引表に必要な最大サイズ(MB)を見積もります。

パラメータ

schemaname

空間ジオメトリ表を所有するスキーマを指定します。

tabname

空間ジオメトリ表の名前を指定します。

colname

ジオメトリ列の名前を指定します。

partname

colnameで指定したジオメトリを含むパーティションの名前を指定します。このパラメータを指定した場合、指定したパーティション内のジオメトリのRツリー索引表に必要なサイズを見積もった値が戻されます。このパラメータを指定しない場合、colnameで指定したすべてのジオメトリのRツリー索引表に必要なサイズを見積もった値が戻されます。

number_of_geoms

空間ジオメトリ表内のジオメトリのおおまかな数を指定します。

db_block_size

データベース・ブロックのサイズをバイト単位で指定します。

sdo_rtr_pctfree

索引の作成時は空にしておく、各索引ツリー・ノードのスロットの最小割合です。空のスロットは、後で表に新しいデータを挿入したときにデータが書き込まれます。値は0から50の範囲です。デフォルト値(10)はほとんどのアプリケーションに最適ですが、0はジオメトリ列が更新されない場合に使用してください。

num_dimensions

索引付けする次元数を指定します。デフォルト値は2です。CREATE INDEX文でsdo_indx_dimsパラメータを指定する場合、num_dimensions値をsdo_indx_dims値と一致させる必要があります。

is_geodetic

空間索引を測地索引にするかどうかを指定します。1を指定した場合は測地索引となり、0(デフォルト)を指定した場合は非測地索引となります。

使用上の注意

このファンクションは、作成されるRツリー空間索引の空間索引表(2.9.2項を参照)に必要な最大サイズを見積もった値(MB)を戻します。戻される値は、索引作成後に必要な最大サイズ(MB)です。索引作成中は、一時表に十分な領域を確保するために、この値(MB)の約3倍の領域が表領域に必要となります。

このファンクションには、次の2つの形式があります。

- 文字列パラメータ(schemaname、tabname、colnameおよびオプションでpartname)を指定する形式: 空間ジオメトリ表がすでに存在する場合、索引作成前にそれ以上のジオメトリを追加しない場合、およびデフォルトのRツリー索引付けパラメータを使用する場合に使用します。

- 整数パラメータ(number_of_geoms、db_block_size、sdo_rtr_pctfree、num_dimensionsおよびis_geodetic)を指定する形式: 空間ジオメトリ表が存在しない場合、空間ジオメトリ表は存在するが、索引作成前にそれ以上のジオメトリを追加する場合、num_dimensions値が2(非測地データ)または3(測地データ)ではない場合、CREATE INDEX文のsdo_indx_dimsパラメータでデフォルト以外の値を指定する場合に使用します。

例

次の例では、索引のパラメータがnumber_of_geoms = 1000000(100万)、db_block_size = 2048、sdo_rtr_pctfree = 10、num_dimensions = 2およびis_geodetic = 0である場合に、空間索引表に必要な最大サイズ(MB)を見積もります。

SELECT SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE(1000000, 2048, 10, 2, 0) FROM DUAL;

SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE(1000000,2048,10,2,0)
-----------------------------------------------------
82

次の例では、SCOTTスキーマのCOLA_MARKETS表のSHAPE列の索引について、空間索引表に必要な最大サイズ(MB)を見積もります。この見積りは現在表内にあるジオメトリに基づきます。

SELECT SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE('SCOTT', 'COLA_MARKETS', 'SHAPE') FROM DUAL;

SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE('SCOTT','COLA_MARKETS','SHAPE')
---------------------------------------------------------------------
1

SDO_TUNE.EXTENT_OF

構文

SDO_TUNE.EXTENT_OF(

table_name IN VARCHAR2,

column_name IN VARCHAR2

) RETURN SDO_GEOMETRY;

説明

レイヤー内のすべてのジオメトリの最小境界矩形(MBR)を戻します。

パラメータ

table_name

空間ジオメトリ表を指定します。

column_name

最小境界矩形を戻すジオメトリ列を指定します。

使用上の注意

SDO_AGGR_MBRファンクションも、ジオメトリのMBRを戻します(第20章を参照)。空間索引がジオメトリ列上に定義されている場合、SDO_TUNE.EXTENT_OFファンクションは、SDO_AGGR_MBRファンクションよりも高いパフォーマンスを示します。ただし、SDO_TUNE.EXTENT_OFは2次元ジオメトリに制限されるのに対し、SDO_AGGR_MBRファンクションにはその制限がありません。また、SDO_TUNE.EXTENT_OFファンクションは表内のすべてのジオメトリに対するエクステントを計算しますが、SDO_AGGR_MBRファンクションは、行のサブセット上での操作が可能です。

空間索引が使用されている場合、このファンクションは、索引内に保存されているデータの最大エクステントを囲むMBRの近似値を戻します(データがその後削除されていた場合も同様です)。

例

次の例では、COLA_MARKETS表のSHAPE列のオブジェクトについて最小境界矩形を計算します。

SELECT SDO_TUNE.EXTENT_OF('COLA_MARKETS', 'SHAPE')
FROM DUAL;

SDO_TUNE.EXTENT_OF('COLA_MARKETS','SHAPE')(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y,
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARRAY(1, 1, 10, 11))

関連項目

SDO_AGGR_MBR集計ファンクション(第20章)

SDO_TUNE.AVERAGE_MBRプロシージャ

SDO_TUNE.MIX_INFO

構文

SDO_TUNE.MIX_INFO(

table_name IN VARCHAR2,

column_name IN VARCHAR2

[, total_geom OUT INTEGER,

point_geom OUT INTEGER,

curve_geom OUT INTEGER,

poly_geom OUT INTEGER,

complex_geom OUT INTEGER] );

説明

各ジオメトリ・タイプのパーセンテージなどのような、空間レイヤーに対するジオメトリ・タイプ情報を計算します。

パラメータ

table_name

空間ジオメトリ表を指定します。

column_name

ジオメトリ・タイプの情報を計算するジオメトリ・オブジェクト列を指定します。

total_geom

ジオメトリ・オブジェクトの合計数を戻します。

point_geom

点のジオメトリ・オブジェクトの数を戻します。

curve_geom

曲線のジオメトリ・オブジェクトの数を戻します。

poly_geom

ポリゴンのジオメトリ・オブジェクトの数を戻します。

complex_geom

複合ジオメトリ・オブジェクトの数を戻します。

使用上の注意

このプロシージャは、表に対するジオメトリ・タイプの情報を計算します。点、曲線ストリング、ポリゴンおよび複雑なジオメトリの数とともに、ジオメトリの合計数を計算します。

例

次の例では、COLA_MARKETS表のSHAPE列にあるジオメトリ・オブジェクトの混在についての情報を表示します。

CALL SDO_TUNE.MIX_INFO('COLA_MARKETS',  'SHAPE');
Total number of geometries: 4
Point geometries:        0  (0%)
Curvestring geometries:   0  (0%)
Polygon geometries:      4  (100%)
Complex geometries:      0  (0%)

SDO_TUNE.QUALITY_DEGRADATION

構文

SDO_TUNE.QUALITY_DEGRADATION(

schemaname IN VARCHAR2,

indexname IN VARCHAR2

) RETURN NUMBER;

または

SDO_TUNE.QUALITY_DEGRADATION(

schemaname IN VARCHAR2,

scaling IN VARCHAR2,

scaling IN VARCHAR2,

) RETURN NUMBER;

説明

索引の品質の低下度、またはすべての索引表に対する索引の平均品質の低下度を戻したり、指定した索引表に対する品質の低下度を戻します。

注意:
このファンクションは非推奨であり、将来のリリースでは説明が記載されなくなります。このファンクションを使用しないでください。空間索引では自己チューニングが行われるため、これは必要ありません。

パラメータ

schemaname

indexnameに指定された索引が含まれるスキーマの名前を指定します。

indexname

空間Rツリー索引の名前を指定します。

indextable

indexnameに指定された空間Rツリー索引に関連付けられた索引表の名前を指定します。

使用上の注意

このファンクションは非推奨であり、このマニュアルの将来のリリースには含まれません。空間索引では自己チューニングが行われるため、このファンクションを使用しないでください。このファンクションの使用に関するその他の注意事項は、このマニュアルの以前のリリースを参照してください。

品質低下度は、現在の索引を使用してある問合せの索引部分のI/O操作を実行するのにかかる時間が、索引を作成または前回再作成したときに同じ問合せの索引部分のI/O操作を実行するのに比べてどの程度時間がかかるかの概算を示す数値です。たとえば、通常の問合せの索引部分のI/O操作に、索引の作成または再作成時の2倍の時間がかかる場合、品質低下度は2になります。問合せ時間全体での品質低下度を正確に予測することは不可能ですが、品質が大幅に(2以上)低下すると、大規模なデータベース(数百万行が含まれるデータベースなど)に対する問合せのパフォーマンスに重大な影響を与えます。

ローカル・パーティション索引には、indextableパラメータを含む形式を使用する必要があります。つまり、対象のパーティションごとに品質低下度を計算する必要があります。

索引名は、xxx_SDO_INDEX_INFOビューおよびxxx_SDO_INDEX_METADATAビューで参照できます(2.9.1項を参照)。

Rツリーの品質および問合せのパフォーマンスへの影響の詳細およびガイドラインは、1.7.2項を参照してください。

例

次の例では、COLA_SPATIAL_IDX索引の品質低下度を戻します。この例では、品質はまったく低下していないため低下度は1となり、問合せの索引部分のI/O操作は通常、現在の索引を使用した場合も、当初のまたは以前の索引を使用した場合も同じになります。

SELECT SDO_TUNE.QUALITY_DEGRADATION('SCOTT', 'COLA_SPATIAL_IDX') FROM DUAL;

SDO_TUNE.QUALITY_DEGRADATION('SCOTT','COLA_SPATIAL_IDX')
--------------------------------------------------------
1

32 SDO_UTILパッケージ(ユーティリティ)

この章では、表32-1に示す空間ユーティリティ・サブプログラムについて説明します。

表32-1 空間ユーティリティ・サブプログラム

サブプログラム

説明

SDO_UTIL.AFFINETRANSFORMS

入力ジオメトリのアフィン変換を反映したジオメトリを戻します。

SDO_UTIL.APPEND

あるジオメトリを別のジオメトリに追加して、新しいジオメトリを作成します。

SDO_UTIL.BEARING_TILT_FOR_POINTS

開始点から終了点への方位と傾きを計算します。

SDO_UTIL.CIRCLE_POLYGON

指定された円に近似するか、または覆われるポリゴン・ジオメトリを戻します。

SDO_UTIL.CONCAT_LINES

2つの単一線または複数線の2次元ジオメトリを連結して、新しいジオメトリを作成します。

SDO_UTIL.CONVERT_UNIT

角度、面積または距離の測定単位を別の測定単位に変換します。

SDO_UTIL.ELLIPSE_POLYGON

指定された楕円に近似するか、または覆われるポリゴン・ジオメトリを戻します。

SDO_UTIL.EXTRACT

2次元の入力ジオメトリの特定の要素(およびオプションで輪)を表現する2次元のジオメトリを戻します。

SDO_UTIL.EXTRACT_ALL

2次元の入力ジオメトリのすべての要素およびサブ要素を、1つ以上のジオメトリの配列として戻します。

SDO_UTIL.EXTRACT3D

3次元の入力ジオメトリの特定のサブセットを表現する3次元のジオメトリを戻します。

SDO_UTIL.EXTRUDE

2次元の入力ポリゴン・ジオメトリから押し出された3次元のソリッド・ジオメトリを戻します。

SDO_UTIL.FROM_GML311GEOMETRY

Geography Markup Language(GML 3.1.1)フラグメントをSpatialのジオメトリ・オブジェクトに変換します。

SDO_UTIL.FROM_GMLGEOMETRY

Geography Markup Language(GML 2.0)フラグメントをSpatialのジオメトリ・オブジェクトに変換します。

SDO_UTIL.FROM_KMLGEOMETRY

KML (Keyhole Markup Language)ドキュメントをSpatialジオメトリ・オブジェクトに変換します。

SDO_UTIL.FROM_WKBGEOMETRY

well-knownバイナリ(WKB)形式のジオメトリをSpatialジオメトリ・オブジェクトに変換します。

SDO_UTIL.FROM_WKTGEOMETRY

well-knownテキスト(WKT)形式のジオメトリをSpatialジオメトリ・オブジェクトに変換します。

SDO_UTIL.GETNUMELEM

入力ジオメトリの要素の数を戻します。

SDO_UTIL.GETNUMVERTICES

入力ジオメトリの頂点の数を戻します。

SDO_UTIL.GETVERTICES

入力ジオメトリの頂点の座標を戻します。

SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS

別のデータベースに転送された表領域内のすべての空間索引を初期化します。

SDO_UTIL.INTERIOR_POINT

ポリゴンのジオメトリ・オブジェクト上の内部の点(境界またはエッジ上ではない)を戻します。

SDO_UTIL.POINT_AT_BEARING

開始点を基準として指定された距離および方位に存在する点ジオメトリを戻します。

SDO_UTIL.POLYGONTOLINE

ジオメトリ内のすべてのポリゴンタイプ要素を線タイプ要素に変換し、それに応じてSDO_GTYPE値を設定します。

SDO_UTIL.PREPARE_FOR_TTS

別のデータベースに転送する表領域を準備し、転送操作中に空間索引が保持されるようにします。

SDO_UTIL.RECTIFY_GEOMETRY

入力ジオメトリの特定の問題点を修正して、有効なジオメトリを戻します。

SDO_UTIL.REMOVE_DUPLICATE_VERTICES

重複する(冗長の)頂点をジオメトリから削除します。

SDO_UTIL.REVERSE_LINESTRING

線ストリング・ジオメトリを、その入力ジオメトリの頂点を逆順序にして戻します。

SDO_UTIL.SIMPLIFY

Douglas-Peuckerアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。

SDO_UTIL.TO_GML311GEOMETRY

Open GIS geometry.xsdスキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatialジオメトリ・オブジェクトをGeography Markup Language(GML 3.1.1)フラグメントに変換します。

SDO_UTIL.TO_GMLGEOMETRY

Open GIS geometry.xsdスキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatialジオメトリ・オブジェクトをGeography Markup Language(GML 2.0)フラグメントに変換します。

SDO_UTIL.TO_KMLGEOMETRY

Spatialジオメトリ・オブジェクトをKML (Keyhole Markup Language)ドキュメントに変換します。

SDO_UTIL.TO_WKBGEOMETRY

Spatialジオメトリ・オブジェクトをwell-knownバイナリ(WKB)形式に変換します。

SDO_UTIL.TO_WKTGEOMETRY

Spatialジオメトリ・オブジェクトをwell-knownテキスト(WKT)形式に変換します。

SDO_UTIL.VALIDATE_WKBGEOMETRY

標準well-knownバイナリ(WKB)形式の入力ジオメトリが有効かどうかを確認し、有効な場合は文字列TRUE、無効な場合は文字列FALSEを戻します。

SDO_UTIL.VALIDATE_WKTGEOMETRY

標準well-knownテキスト(WKT)形式のCLOB型またはVARCHAR2型の入力ジオメトリが有効かどうかを確認し、有効な場合は文字列TRUE、無効な場合は文字列FALSEを戻します。

SDO_UTIL.AFFINETRANSFORMS

構文

SDO_UTIL.AFFINETRANSFORMS(

geometry IN SDO_GEOMETRY,

scaling IN VARCHAR2,

tx IN NUMBER,

ty IN NUMBER,

ty IN NUMBER,

scaling IN VARCHAR2,

psc1 IN SDO_GEOMETRY

sx IN NUMBER,

sy IN NUMBER,

sz IN NUMBER,

rotation IN VARCHAR2,

p1 IN SDO_GEOMETRY,

line1 IN SDO_GEOMETRY,

angle IN NUMBER,

dir IN NUMBER,

shearing IN VARCHAR2

shxy IN NUMBER,

shyx IN NUMBER,

shxz IN NUMBER,

shzx IN NUMBER,

shyz IN NUMBER,

shzy IN NUMBER,

reflection IN VARCHAR2

pref IN SDO_GEOMETRY,

lineR IN SDO_GEOMETRY,

dirR IN NUMBER,

planeR IN VARCHAR2,

n IN SDO_NUMBER_ARRAY,

bigD IN SDO_NUMBER_ARRAY,

) RETURN SDO_GEOMETRY;

説明

入力ジオメトリのアフィン変換を反映したジオメトリを戻します。

パラメータ

geometry

アフィン変換を実行する入力ジオメトリを指定します。

translation

文字列値がTRUEである場合は移動が実行され、文字列値がFALSEの場合は移動が実行されません。このパラメータがTRUEである場合、点について(tx,ty)または(tx,ty,tz)分の移動が実行されます。

tx

移動のためのX軸値を指定します。

ty

移動のためのY軸値を指定します。

tz

移動のためのZ軸値を指定します。

scaling

文字列値がTRUEである場合はスケール変更が実行され、文字列値がFALSEの場合はスケール変更が実行されません。

psc1

スケール変更を実行する入力ジオメトリ上の点を指定します。scalingがTRUEである場合、このジオメトリは、ゼロ点(基点を基準にスケール変更するための0,0または0,0,0の縦座標を持つ点ジオメトリ)またはゼロ以外の位置(基点以外の点を基準にスケール変更するための縦座標を持つ点ジオメトリ)のいずれかである必要があります。scalingがFALSEである場合、psc1がNULL値になる場合があります。

sx

(psc1パラメータに指定した点か、基点を基準に)スケール変更するためのX軸値を指定します。

sy

(psc1パラメータに指定した点か、基点を基準に)スケール変更するためのY軸値を指定します。

sz

(psc1パラメータに指定した点か、基点を基準に)スケール変更するためのZ軸値を指定します。

rotation

文字列値がTRUEである場合は回転が実行され、文字列値がFALSEの場合は回転が実行されません。

2次元ジオメトリの場合、回転にはp1およびangleの値が使用されます。3次元ジオメトリの場合、回転にはangleおよびdirの値か、またはline1およびangleの値が使用されます。

p1

指定した点を基準に2次元ジオメトリ回転を行うための点を指定します。

line1

指定した軸を基準に回転を行うための線を指定します。

angle

指定した軸またはX、Y、Z軸を基準に回転を行うための角度回転パラメータ(ラジアン)を指定します。

dir

x(0)、y(1)またはz(2)軸回転のための回転パラメータを指定します。rotationパラメータ値がTRUEで、dirパラメータが使用されていない場合は、値として-1を指定します。

shearing

文字列値がTRUEである場合はせん断が実行され、文字列値がFALSEの場合はせん断が実行されません。

2次元ジオメトリの場合、せん断にはshxyおよびshyxのパラメータ値が使用されます。3次元ジオメトリの場合、せん断にはshxy、shyx、shxz、shzx、shyzおよびshzyのパラメータ値が使用されます。

shxy

Y軸方向に沿ってX座標値を基にせん断するための値を指定します。

shyx

X軸方向に沿ってY座標値を基にせん断するための値を指定します。

shxz

Z軸方向に沿ってX座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。

shzx

X軸方向に沿ってZ座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。

shyz

Z軸方向に沿ってY座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。

shzy

Y軸方向に沿ってZ座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。

reflection

文字列値がTRUEである場合は反転が実行され、文字列値がFALSEの場合は反転が実行されません。

2次元ジオメトリの反転の場合、軸を基準とする反転ではlineR値が、自己反転の中心点としてはpref値が使用されます。3次元のジオメトリの反転の場合、軸を基準とする反転ではlineR値が、yz面、xz面およびxy面を基準とする反転ではdirR値が、指定した面を基準とする反転ではplaneR、nおよびbigDの値が、自己反転の中心点としてはpref値が使用されます。

pref

反転を実行するときの中心点となる点を指定します。

lineR

反転を実行するときの基準となる線を指定します。

dirR

反転を実行するときの基準となる面を示す番号を指定します。0はyz面、1はxz面、2はxy面です。reflectionパラメータ値がTRUEで、dirRパラメータが使用されていない場合は、値として-1を指定します。

planeR

文字列値がTRUEである場合は任意の面を基準に反転が実行され、文字列値がFALSEの場合は任意の面を基準に反転が実行されません。

n

面の法線ベクトルを指定します。

bigD

3次元ジオメトリにおける面方程式のdelta値を指定します。

3次元ジオメトリの場合、bigD= deltaおよびn= (A,B,C)です(nは3次元空間の面の法線です)。つまり、面方程式は次のようになります。

Ax+By+Cz+bigD = 3DDotProd(n,anypointonplane)+bigD = 0

使用上の注意

アフィン変換は行列とベクトルの乗算であるため、その変換順序は重要です。

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションを使用して、結果のジオメトリを検証する必要があります。

例

次の例では、2次元ジオメトリに対してアフィン変換を実行します。

-- Polygon reflection in 2D about a specified line segment
SELECT SDO_UTIL.AFFINETRANSFORMS(
geometry => MDSYS.SDO_GEOMETRY(2003, NULL, NULL,
MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),
MDSYS.SDO_ORDINATE_ARRAY(
1.5,0,
2.5,1,
1.5,2,
0.5,2,
0.5,0,
1.5,0)),
translation => 'FALSE',
tx => 0.0,
ty => 0.0,
tz => 0.0,
scaling => 'FALSE',
psc1 => NULL,
sx => 0.0,
sy => 0.0,
sz => 0.0,
rotation => 'FALSE',
p1 => NULL,
line1 => NULL,
angle => 0.0,
dir => 0,
shearing => 'FALSE',
shxy => 0.0,
shyx => 0.0,
shxz => 0.0,
shzx => 0.0,
shyz => 0.0,
shzy => 0.0,
reflection => 'TRUE',
pref => NULL,
lineR => MDSYS.SDO_GEOMETRY(2002,0,NULL,
MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),
MDSYS.SDO_ORDINATE_ARRAY(2.5,0.0,2.5,2.0)),
dirR => -1,
planeR => 'FALSE',
n => NULL,
bigD => NULL
) FROM DUAL;

SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>MDSYS.SDO_GEOMETRY(2003,NULL,NULL,MDSYS.SDO_
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3.5, 0, 2.5, 1, 3.5, 2, 4.5, 2, 4.5, 0, 3.5, 0))

次の例では、3次元ジオメトリに対してアフィン変換を実行します。

-- Polygon reflection in 3D about a specified plane (z=1 plane in this example)
SELECT SDO_UTIL.AFFINETRANSFORMS(
geometry => MDSYS.SDO_GEOMETRY(3003, 0, NULL,
MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),
MDSYS.SDO_ORDINATE_ARRAY(
1.5,0,0,
2.5,1,0,
1.5,2,0,
0.5,2,0,
0.5,0,0,
1.5,0,0)),
translation => 'FALSE',
tx => 0.0,
ty => 0.0,
tz => 0.0,
scaling => 'FALSE',
psc1 => NULL,
sx => 0.0,
sy => 0.0,
sz => 0.0,
rotation => 'FALSE',
p1 => NULL,
line1 => NULL,
angle => 0.0,
dir => 0,
shearing => 'FALSE',
shxy => 0.0,
shyx => 0.0,
shxz => 0.0,
shzx => 0.0,
shyz => 0.0,
shzy => 0.0,
reflection => 'TRUE',
pref => NULL,
lineR => NULL,
dirR => -1,
planeR => 'TRUE',
n => SDO_NUMBER_ARRAY(0.0, 0.0, 1.0),
bigD => SDO_NUMBER_ARRAY(-1.0)
) FROM DUAL;

SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>MDSYS.SDO_GEOMETRY(3003,0,NULL,MDSYS.SDO_ELE
--------------------------------------------------------------------------------
SDO_GEOMETRY(3003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(1.5, 0, 2, 2.5, 1, 2, 1.5, 2, 2, .5, 2, 2, .5, 0, 2, 1.5, 0, 2))

関連項目

- SDO_UTIL.CONVERT_UNIT

- SDO_UTIL.POINT_AT_BEARING

SDO_UTIL.APPEND

構文

SDO_UTIL.APPEND(

geometry1 IN SDO_GEOMETRY,

geometry2 IN SDO_GEOMETRY

) RETURN SDO_GEOMETRY;

説明

あるジオメトリを別のジオメトリに追加して、新しいジオメトリを作成します。

パラメータ

geometry1

geometry2を追加するジオメトリ・オブジェクトを指定します。

geometry2

geometry1に追加するジオメトリ・オブジェクトを指定します。

使用上の注意

このファンクションは、空間的に相互作用しないジオメトリ(非接続のオブジェクト)にのみ使用する必要があります。入力ジオメトリが非接続でない場合、結果のジオメトリは無効になります。

このファンクションは和集合操作またはその他の計算ジオメトリ操作は行いません。和集合操作を実行するには、SDO_GEOM.SDO_UNIONファンクションを使用します(第24章を参照)。APPENDファンクションの方が、SDO_GEOM.SDO_UNIONファンクションよりも高速に実行されます。

結果のジオメトリのジオメトリ・タイプ(SDO_GTYPE値)には、入力ジオメトリおよび追加操作のタイプが反映されます。たとえば、入力ジオメトリが2次元ポリゴン(SDO_GTYPE = 2003)である場合、結果のジオメトリは2次元の複数ポリゴン(SDO_GTYPE = 2007)となります。

geometry1およびgeometry2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_aジオメトリおよびcola_cジオメトリを追加します。(例では、2.1項の定義およびデータを使用しています。)

SELECT SDO_UTIL.APPEND(c_a.shape, c_c.shape)
FROM cola_markets c_a, cola_markets c_c
WHERE c_a.name = 'cola_a' AND c_c.name = 'cola_c';

SDO_UTIL.APPEND(C_A.SHAPE,C_C.SHAPE)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2007, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3, 5, 1003, 1), SDO_
ORDINATE_ARRAY(1, 1, 5, 7, 3, 3, 6, 3, 6, 5, 4, 5, 3, 3))

関連項目

- SDO_GEOM.SDO_UNION(第24章)

SDO_UTIL.BEARING_TILT_FOR_POINTS

構文

SDO_UTIL.BEARING_TILT_FOR_POINTS(

start_point IN SDO_GEOMETRY,

end_point IN SDO_GEOMETRY,

tol IN NUMBER,

bearing OUT NUMBER,

tilt OUT NUMBER

) RETURN SDO_GEOMETRY;

説明

開始点から終了点への方位と傾きを計算します。

パラメータ

start_point

方位と傾きを計算するときの基点となる開始点ジオメトリ・オブジェクトを指定します。測地座標系に基づく点ジオメトリを指定する必要があります。

end_point

方位と傾きを計算するときに使用する終了点ジオメトリ・オブジェクトを指定します。start_pointと同じ測地座標系に基づく点ジオメトリを指定する必要があります。

tol

許容差を指定します(1.5.5項を参照)。

bearing

北を基準として時計回りに測定されるラジアンの数値を指定します。

tilt

法線を基準に測定されるラジアンの数値を指定します。

使用上の注意

入力する点ジオメトリは、同一の測地座標系に基づく必要があります。非測地座標系に基づく場合、出力される方位はNULL値になります。

傾きは、高さの値の差を点と点の距離で除算した結果の逆正接として計算されます(高さは距離計算から除外されます)。つまり、tilt = atan(height_difference/distance)となります。

ラジアンを10進度に変換したり、10進度をラジアンに変換するには、SDO_UTIL.CONVERT_UNITファンクションを使用します。開始点を基準として指定された距離および方位に存在する点ジオメトリを戻すには、SDO_UTIL.POINT_AT_BEARINGファンクションを使用します。

例

次の例では、2つの地点(経度/緯度で指定)の方位と傾きを計算します。開始点の標高は0 (ゼロ)で、終了点の標高は5000メートルです。この例で表示される方位と傾きの値はラジアンです。

DECLARE
bearing NUMBER;
tilt    NUMBER;
BEGIN
SDO_UTIL.BEARING_TILT_FOR_POINTS(
SDO_GEOMETRY(2001, 8307,
SDO_POINT_TYPE(-71.5, 43, 0), NULL, NULL), -- start_point
SDO_GEOMETRY(2001, 8307,
SDO_POINT_TYPE(-71, 43.5, 5000), NULL, NULL), -- end_point
0.05,  --tolerance
bearing,
tilt);
DBMS_OUTPUT.PUT_LINE('Bearing = ' || bearing);
DBMS_OUTPUT.PUT_LINE('Tilt = ' || tilt);
END;
/
Bearing = .628239101930666
Tilt = .0725397288678286910476298724869396973718

次の例は前述の例と同じですが、表示される方位と結果はラジアンではなく10進度です。

DECLARE
bearing NUMBER;
tilt    NUMBER;
BEGIN
SDO_UTIL.BEARING_TILT_FOR_POINTS(
SDO_GEOMETRY(2001, 8307,
SDO_POINT_TYPE(-71.5, 43, 0), NULL, NULL), -- start_point
SDO_GEOMETRY(2001, 8307,
SDO_POINT_TYPE(-71, 43.5, 5000), NULL, NULL), -- end_point
0.05,  --tolerance
bearing,
tilt);
DBMS_OUTPUT.PUT_LINE('Bearing in degrees = '
|| bearing * 180 / 3.1415926535897932384626433832795);
DBMS_OUTPUT.PUT_LINE('Tilt in degrees = '
|| tilt * 180 / 3.1415926535897932384626433832795);
END;
/
Bearing in degrees = 35.99544906571628894295547577999851892359
Tilt in degrees = 4.15622031114988533540349823511872120415

関連項目

- SDO_UTIL.CONVERT_UNIT

- SDO_UTIL.POINT_AT_BEARING

SDO_UTIL.CIRCLE_POLYGON

構文

SDO_UTIL.CIRCLE_POLYGON(

center_longitude IN NUMBER,

center_latitude IN NUMBER,

radius IN NUMBER,

arc_tolerance IN NUMBER

) RETURN SDO_GEOMETRY;

説明

指定された円に近似するか、または覆われるポリゴン・ジオメトリを戻します。

パラメータ

center_longitude

戻されるジオメトリの作成に使用する円の中心経度(度)を指定します。

center_latitude

戻されるジオメトリの作成に使用する円の中心緯度(度)を指定します。

radius

戻されるジオメトリの作成に使用する円の半径(m)を指定します。

arc_tolerance

ポリゴン・ジオメトリの作成に使用する数値を指定します。arc_toleranceパラメータ値の意味および使用上のガイドラインは、SDO_GEOM.SDO_ARC_DENSIFYファンクションのparamsパラメータ文字列のarc_toleranceキーワード値と同じです。ジオメトリに関連付けられた測定単位が、arc_toleranceパラメータ値に関連付けられます。(詳細は、第24章のSDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上の注意」を参照してください。)

使用上の注意

このファンクションを使用すると、真円が使用できない(Oracle Spatialの測地データで円が無効となる)場合に、指定された中心点の周囲に円状のポリゴンを作成できます。戻されるジオメトリのSDO_SRID値は8307となります(Longitude / Latitude (WGS 84))。

例

次の例では、Massachusetts州Concord市の中心に近い点の周囲に円状のポリゴンを戻します。ポリゴンの頂点の計算に使用されるradius値は100m、arc_tolerance値は5mです。

SELECT SDO_UTIL.CIRCLE_POLYGON(-71.34937, 42.46101, 100, 5)
FROM DUAL;

SDO_UTIL.CIRCLE_POLYGON(-71.34937,42.46101,100,5)(SDO_GTYPE, SDO_SRID, SDO_POINT
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(-71.34937, 42.4601107, -71.348653, 42.4602824, -71.348211, 42.4607321, -71.34
8211, 42.4612879, -71.348653, 42.4617376, -71.34937, 42.4619093, -71.350087, 42.
4617376, -71.350529, 42.4612879, -71.350529, 42.4607321, -71.350087, 42.4602824,
-71.34937, 42.4601107))

関連項目

- SDO_UTIL.ELLIPSE_POLYGON

SDO_UTIL.CONCAT_LINES

構文

SDO_UTIL.CONCAT_LINES(

geometry1 IN SDO_GEOMETRY,

geometry2 IN SDO_GEOMETRY

) RETURN SDO_GEOMETRY;

説明

2つの単一線または複数線の2次元ジオメトリを連結して、新しいジオメトリを作成します。

パラメータ

geometry1

連結操作に使用する最初のジオメトリ・オブジェクトを指定します。

geometry2

連結操作に使用する2つ目のジオメトリ・オブジェクトを指定します。

使用上の注意

各入力ジオメトリは、単一線または複数線の2次元ジオメトリ(SDO_GTYPE値が2002または2006)である必要があります。このファンクションは、LRSジオメトリではサポートされません。LRSジオメトリ・セグメントを連結するには、SDO_LRS.CONCATENATE_GEOM_SEGMENTSファンクションを使用します(第25章を参照)。

入力ジオメトリは、頂点が直線セグメントに連結している線ストリングである必要があります。円弧および複合線ストリングはサポートされていません。

入力ジオメトリが複数線ジオメトリの場合、ジオメトリの各要素は非接続であることが必要です。非接続でない場合、このファンクションは不適切な結果を戻すことがあります。

geometry1とgeometry2の位相関係は、DISJOINTまたはTOUCHである必要があり、位相関係がTOUCHの場合は、ジオメトリは2つの終了点でのみ交差する必要があります。

SDO_AGGR_CONCAT_LINES空間集計ファンクション(第20章を参照)を使用すると、単一線または複数線の複数の2次元ジオメトリを連結できます。

geometry1およびgeometry2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、2つの単一線ストリング・ジオメトリを連結します。

-- Concatenate two touching lines: one from (1,1) to (5,1) and the
-- other from (5,1) to (8,1).
SELECT SDO_UTIL.CONCAT_LINES(
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(1,1, 5,1)),
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(5,1, 8,1))
) FROM DUAL;

SDO_UTIL.CONCAT_LINES(SDO_GEOMETRY(2002,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,2,1),SDO
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
1, 1, 5, 1, 8, 1))

関連項目

- SDO_AGGR_CONCAT_LINES(第20章)

- SDO_LRS.CONCATENATE_GEOM_SEGMENTS(第25章)

SDO_UTIL.CONVERT_UNIT

構文

SDO_UTIL.CONVERT_UNIT(

ivalue IN NUMBER,

in_unit IN VARCHAR2,

out_unit IN VARCHAR2

) RETURN NUMBER;

説明

角度、面積または距離の測定単位を別の測定単位に変換します。

パラメータ

value

変換する単位の数値を指定します。たとえば、10進度単位の10をラジアンに変換するには、10を指定します。

in_unit

入力値の変換元のメジャー単位を指定します。MDSYS.SDO_ANGLE_UNITS表(6.8.2項を参照)、MDSYS.SDO_AREA_UNITS表(2.10項参照)またはMDSYS.SDO_DIST_UNITS表(2.10項を参照)のSDO_UNIT列の値を指定する必要があります。たとえば、10進度をラジアンに変換するには、Degreeを指定します。

out_unit

入力値の変換先のメジャー単位を指定します。in_unitに使用したのと同じ表のSDO_UNIT列の値であることが必要です。たとえば、10進度をラジアンに変換するには、Radianを指定します。

使用上の注意

数学的な内部操作の実行方法によっては、このファンクションは非常に高い精度では正確な値を戻さない場合があります(特に、内部操作に小さい数または無理数(piなど)が含まれる場合)。たとえば、10進度単位の1を10進分に変換すると、値は60.0000017になります。

例

次の例では、1ラジアンを10進度に変換します。

SQL> SELECT SDO_UTIL.CONVERT_UNIT(1, 'Radian', 'Degree') FROM DUAL;

SDO_UTIL.CONVERT_UNIT(1,'RADIAN','DEGREE')
------------------------------------------
57.2957796

関連項目

なし。

SDO_UTIL.DROP_WORK_TABLES

構文

SDO_UTIL.DROP_WORK_TABLES(

oidstr IN VARCHAR2);

説明

現行のスキーマから、点群またはTINの作成時に作成された一時(スクラッチ)表および一時(スクラッチ)ビューを削除します。

パラメータ

oidstr

16進数でオブジェクトのID文字列を指定します。スクラッチ表を削除する必要があることを示すエラー・メッセージで提供されている文字列を使用します。

使用上の注意

点群またはTINを作成する際に、スクラッチ表が前のSDO_PC_PKG.CREATE_PCまたはSDO_TIN_PKG.CREATE_TIN操作から引き続き存在している場合は、最初にそのスクラッチ表を削除する必要があることを示すエラー・メッセージが表示されます。これらのスクラッチ表を削除するには、SDO_UTIL.DROP_WORK_TABLESプロシージャを使用します。

このプロシージャは、'M%_<oidstr>$$%'に一致するすべての表とビューを削除します。

例

次の例では、前のエラー・メッセージで指定されているOID文字列を使用して、前のSDO_PC_PKG.CREATE_PCまたはSDO_TIN_PKG.CREATE_TIN操作からスクラッチ表を削除します。

EXECXUTE SDO_UTIL.DROP_WORK_TABLES('A1B2C3');

関連項目

- SDO_PC_PKG.CREATE_PC

- SDO_TIN_PKG.CREATE_TIN

SDO_UTIL.ELLIPSE_POLYGON

構文

SDO_UTIL.ELLIPSE_POLYGON(

center_longitude IN NUMBER,

center_latitude IN NUMBER,

semi_major_axis IN NUMBER,

semi_minor_axis IN NUMBER,

azimuth IN NUMBER,

arc_tolerance IN NUMBER

) RETURN SDO_GEOMETRY;

説明

指定された楕円に近似するか、または覆われるポリゴン・ジオメトリを戻します。

パラメータ

center_longitude

戻されるジオメトリの作成に使用する楕円の中心経度(度)を指定します。

center_latitude

戻されるジオメトリの作成に使用する楕円の中心緯度(度)を指定します。

semi_major_axis

戻されるジオメトリの作成に使用する楕円の半長径(m)を指定します。

semi_minor_axis

戻されるジオメトリの作成に使用する楕円の半短径(m)を指定します。

azimuth

戻されるジオメトリの作成に使用する楕円の方位角(北を基準として長径を時計回りに回転させた角度)を指定します。値は0から180の範囲である必要があります。戻されるジオメトリは指定した角度に回転されます。

arc_tolerance

ポリゴン・ジオメトリの作成に使用する数値を指定します。arc_toleranceパラメータ値の意味および使用上のガイドラインは、SDO_GEOM.SDO_ARC_DENSIFYファンクションのparamsパラメータ文字列のarc_toleranceキーワード値と同じです。ジオメトリに関連付けられた測定単位が、arc_toleranceパラメータ値に関連付けられます。(詳細は、第24章のSDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上の注意」を参照してください。)

使用上の注意

このファンクションを使用すると、楕円が使用できない(Oracle Spatialの測地データで楕円が無効となる)場合に、指定された中心点の周囲に楕円状のポリゴンを作成できます。戻されるジオメトリのSDO_SRID値は8307となります(Longitude / Latitude (WGS 84))。

例

次の例では、Massachusetts州Concord市の中心に近い点の周囲にある、東西方向(azimuth = 90)の楕円状のポリゴンを戻します。ポリゴンの頂点の計算に使用されるarc_tolerance値は5mです。

SELECT SDO_UTIL.ELLIPSE_POLYGON(-71.34937, 42.46101, 100, 50, 90, 5)
FROM DUAL;

SDO_UTIL.ELLIPSE_POLYGON(-71.34937,42.46101,100,50,90,5)(SDO_GTYPE, SDO_SRID, SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(-71.350589, 42.46101, -71.350168, 42.4606701, -71.349708, 42.460578, -71.3493
7, 42.4605603, -71.349032, 42.460578, -71.348572, 42.4606701, -71.348151, 42.461
01, -71.348572, 42.4613499, -71.349032, 42.461442, -71.34937, 42.4614597, -71.34
9708, 42.461442, -71.350168, 42.4613499, -71.350589, 42.46101))

関連項目

- SDO_UTIL.CIRCLE_POLYGON

SDO_UTIL.EXTRACT

構文

SDO_UTIL.EXTRACT(

geometry IN SDO_GEOMETRY,

element IN NUMBER,

ring IN NUMBER DEFAULT 0

) RETURN SDO_GEOMETRY;

説明

2次元の入力ジオメトリの特定の要素(およびオプションで輪)を表現する2次元のジオメトリを戻します。

パラメータ

geometry

戻されるジオメトリの抽出元のジオメトリを指定します。2次元のジオメトリを指定する必要があります。

要素

ジオメトリ内の要素の番号を指定します。1は1つ目の要素、2は2つ目の要素のようになります。1、2または3で終わるSDO_GTYPE値を持つジオメトリ(2.2.1項を参照)は、1つの要素を持ちます。4、5、6または7で終わるSDO_GTYPE値を持つジオメトリは、複数の要素を持つ可能性があります。たとえば、SDO_GTYPEが2007の複数ポリゴンには、3つの要素(ポリゴン)が含まれる場合があります。

輪

要素内のサブ要素(輪)の番号を指定します。1は1つ目のサブ要素、2は2つ目のサブ要素のようになります。このパラメータは、1つ以上の穴があるポリゴンのサブ要素または点クラスタのサブ要素を指定する場合にのみ有効です。

- 穴があるポリゴンの場合、1つ目のサブ要素は外部の輪、2つ目のサブ要素は1つ目の内部の輪、3つ目のサブ要素は2つ目の内部の輪のようになります。たとえば、2.7.2項の図2-4に示す穴のあるポリゴンでは、外部の輪がサブ要素1、内部の輪(穴)がサブ要素2になります。

- 点クラスタの場合、1つ目のサブ要素は点クラスタの1つ目の点、2つ目のサブ要素は点クラスタの2つ目の点のようになります。

デフォルト値は0(ゼロ)です。この場合、要素全体が抽出されます。

使用上の注意

このファンクションは、2次元のジオメトリにのみ適用されます。3次元のジオメトリについては、SDO_UTIL.EXTRACT3Dファンクションを使用します。

このファンクションは、複雑なジオメトリから特定の要素またはサブ要素を抽出する場合に有効です。たとえば、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションまたはSDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTプロシージャ(第24章を参照)によってジオメトリが無効であると識別された場合は、検査のために、EXTRACTファンクションを使用して、その無効なジオメトリを抽出できます。

1つ以上の穴のあるポリゴンの場合、抽出された内部の輪を表現するジオメトリは、戻されると方向が変更され、頂点が(内部の輪内では時計回りであったのに対して)反時計回りで表現されます。

geometryがNULLの場合、または0(ゼロ)で終わるSDO_GTYPE値を持つ場合、このファンクションはNULLのジオメトリを戻します。

geometryには、タイプが0(ゼロ)の要素を含めることはできません。タイプが0(ゼロ)の要素については、2.7.7項を参照してください。

このファンクションは、縦座標がNULL値のジオメトリでの使用は想定されていません。戻されるジオメトリでは、縦座標のNULL値は0(ゼロ)で置き換えられます。

elementまたはringがgeometryに対して無効な数である場合は、例外が発生します。

例

次の例では、cola_cジオメトリの1つ目(1つのみ)の要素を抽出します。(例では、2.1項の定義およびデータを使用しています。)

SELECT c.name, SDO_UTIL.EXTRACT(c.shape, 1)
FROM cola_markets c WHERE c.name = 'cola_c';

NAME
--------------------------------
SDO_UTIL.EXTRACT(C.SHAPE,1)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_IN
--------------------------------------------------------------------------------
cola_c
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3, 3, 6, 3, 6, 5, 4, 5, 3, 3))

次の例では、(2.7.2項の例2-7に示すINSERT文と同じ文を使用して)穴のあるポリゴンを挿入し、穴(2つ目のサブ要素)を表現するジオメトリを抽出します。入力ジオメトリの穴(2つ目のサブ要素)では頂点が時計回りで表現されているのに対し、EXTRACTファンクションによって戻されたジオメトリでは頂点が反時計回りで表現されていることに注意してください。

-- Insert polygon with hole.
INSERT INTO cola_markets VALUES(
10,
'polygon_with_hole',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1), -- polygon with hole
SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4,
7,5, 7,10, 10,10, 10,5, 7,5)
)
);

1 row created.

-- Extract the hole geometry (second subelement).
SELECT SDO_UTIL.EXTRACT(c.shape, 1, 2)
FROM cola_markets c WHERE c.name = 'polygon_with_hole';

SDO_UTIL.EXTRACT(C.SHAPE,1,2)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(7, 5, 10, 5, 10, 10, 7, 10, 7, 5))

関連項目

- SDO_UTIL.EXTRACT3D

- SDO_UTIL.GETVERTICES

- SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

- SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

SDO_UTIL.EXTRACT_ALL

構文

SDO_UTIL.EXTRACT_ALL(

geometry IN SDO_GEOMETRY,

flatten IN NUMBER DEFAULT 1

) RETURN SDO_GEOMETRY_ARRAY;

説明

2次元の入力ジオメトリのすべての要素およびサブ要素を、1つ以上のジオメトリの配列として戻します。VARRAY OF SDO_GEOMETRYとして定義されるSDO_GEOMETRY_ARRAY型のオブジェクトを戻します。

パラメータ

geometry

すべての要素とサブ要素の抽出元となるジオメトリを指定します。2次元のジオメトリを指定する必要があります。

flatten

外部の輪と1つ以上の内部の輪を含むジオメトリについて、輪を個別のジオメトリに「フラット化」するかどうかを示すフラグを指定します。

- 0 (ゼロ)を指定すると、要素ごとに1つのジオメトリが戻されますが、リングを個別のジオメトリにフラット化しません。(入力ジオメトリの各要素に対して1つのジオメトリが戻されることは変わりません。)

- 1 (デフォルト)またはその他のゼロ以外の値を指定すると、リングを個別のジオメトリにフラット化します。

たとえば、ポリゴンに外部の輪と内部の輪が1つずつ含まれる場合、0の値を指定すると、両方の輪を含む1つのジオメトリが戻され、1を指定すると、2つのジオメトリ(それぞれに1つの輪がジオメトリとして含まれる)が戻されます。

外部の輪と1つ以上の内部の輪を含まないジオメトリの場合、このパラメータは無視されます。

使用上の注意

このファンクションは、2次元のジオメトリにのみ適用されます。3次元のジオメトリについては、SDO_UTIL.EXTRACT3Dファンクションを使用します。

このファンクションを使用すると、ジオメトリに含まれる要素とサブ要素の数に関係なく、ジオメトリからすべての要素とサブ要素を抽出できます。1、2または3で終わるSDO_GTYPE値を持つジオメトリ(2.2.1項を参照)は、1つの要素を持ちます。4、5、6または7で終わるSDO_GTYPE値を持つジオメトリは、複数の要素を持つ可能性があります。たとえば、SDO_GTYPEが2007の複数ポリゴンには、3つの要素(ポリゴン)が含まれる場合があります。個々の要素を抽出するには、SDO_UTIL.EXTRACTファンクションをかわりに使用します。

1つ以上の穴のあるポリゴンで、flattenパラメータにデフォルト値が指定されている場合、抽出された内部の輪を表現するジオメトリは、戻されると方向が変更され、頂点が(内部の輪内では時計回りであったのに対して)反時計回りで表現されます。ただし、flattenパラメータ値が0である場合は、方向の変更は実行されません。

geometryがNULLの場合、または0(ゼロ)で終わるSDO_GTYPE値を持つ場合、このファンクションはNULLのジオメトリを戻します。

geometryには、タイプが0(ゼロ)の要素を含めることはできません。タイプが0(ゼロ)の要素については、2.7.7項を参照してください。

このファンクションは、縦座標がNULL値のジオメトリでの使用は想定されていません。戻されるジオメトリでは、縦座標のNULL値は0(ゼロ)で置き換えられます。

例

次の例では、cola_bジオメトリからすべての要素を抽出します。(例では、2.1項の定義およびデータを使用しています。)

SELECT * FROM TABLE(
SELECT SDO_UTIL.EXTRACT_ALL(c.shape)
FROM cola_markets c WHERE c.name = 'cola_b');

SDO_GTYPE   SDO_SRID
---------- ----------
SDO_POINT(X, Y, Z)
--------------------------------------------------------------------------------
SDO_ELEM_INFO
--------------------------------------------------------------------------------
SDO_ORDINATES
--------------------------------------------------------------------------------
2003

SDO_ELEM_INFO_ARRAY(1, 1003, 1)
SDO_ORDINATE_ARRAY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1)

次の例では、(2.7.2項の例2-7に示すINSERT文と同じ文を使用して)穴のあるポリゴンを挿入し、polygon_with_holeジオメトリからすべての要素とサブ要素を抽出します。flattenパラメータが指定されていないため、入力ジオメトリの穴(2つ目のサブ要素)では頂点が時計回りで表現されているのに対し、EXTRACT_ALLファンクションによって戻された2つ目のジオメトリでは、頂点が反時計回りで表現されていることに注意してください。

-- Insert polygon with hole.
INSERT INTO cola_markets VALUES(
10,
'polygon_with_hole',
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1), -- polygon with hole
SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4,
7,5, 7,10, 10,10, 10,5, 7,5)
)
);

1 row created.

-- Extract all, with default for flatten.
SELECT * FROM TABLE(
SELECT SDO_UTIL.EXTRACT_ALL(c.shape)
FROM cola_markets c WHERE c.name = 'polygon_with_hole');

SDO_GTYPE   SDO_SRID
---------- ----------
SDO_POINT(X, Y, Z)
--------------------------------------------------------------------------------
SDO_ELEM_INFO
--------------------------------------------------------------------------------
SDO_ORDINATES
--------------------------------------------------------------------------------
2003

SDO_ELEM_INFO_ARRAY(1, 1003, 1)
SDO_ORDINATE_ARRAY(2, 4, 4, 3, 10, 3, 13, 5, 13, 9, 11, 13, 5, 13, 2, 11, 2, 4)

SDO_GTYPE   SDO_SRID
---------- ----------
SDO_POINT(X, Y, Z)
--------------------------------------------------------------------------------
SDO_ELEM_INFO
--------------------------------------------------------------------------------
SDO_ORDINATES
--------------------------------------------------------------------------------
2003

SDO_ELEM_INFO_ARRAY(1, 1003, 1)
SDO_ORDINATE_ARRAY(7, 5, 10, 5, 10, 10, 7, 10, 7, 5)

次の例では、(前述の例で挿入された) polygon_with_holeジオメトリからすべての要素とサブ要素を抽出し、flattenパラメータ値を0 (ゼロ)として指定します。これにより、戻される配列には、入力ジオメトリと同じ1つのジオメトリが含まれます(つまり、EXTRACT_ALLファンクションによって戻されるジオメトリでは、穴(2つ目のサブ要素)の頂点は、入力ジオメトリでの場合と同様に時計回りです)。

-- Extract all, with flatten = 0.
SELECT * FROM TABLE(
SELECT SDO_UTIL.EXTRACT_ALL(c.shape, 0)
FROM cola_markets c WHERE c.name = 'polygon_with_hole');

SDO_GTYPE   SDO_SRID
---------- ----------
SDO_POINT(X, Y, Z)
--------------------------------------------------------------------------------
SDO_ELEM_INFO
--------------------------------------------------------------------------------
SDO_ORDINATES
--------------------------------------------------------------------------------
2003

SDO_ELEM_INFO_ARRAY(1, 1003, 1, 19, 2003, 1)
SDO_ORDINATE_ARRAY(2, 4, 4, 3, 10, 3, 13, 5, 13, 9, 11, 13, 5, 13, 2, 11, 2, 4,
7, 5, 7, 10, 10, 10, 10, 5, 7, 5)

SDO_GTYPE   SDO_SRID
---------- ----------
SDO_POINT(X, Y, Z)
--------------------------------------------------------------------------------
SDO_ELEM_INFO
--------------------------------------------------------------------------------
SDO_ORDINATES
--------------------------------------------------------------------------------

関連項目

- SDO_UTIL.EXTRACT

SDO_UTIL.EXTRACT3D

構文

SDO_UTIL.EXTRACT3D(

geometry IN SDO_GEOMETRY,

label IN VARCHAR2

) RETURN SDO_GEOMETRY;

説明

3次元の入力ジオメトリの特定のサブセットを表現する3次元のジオメトリを戻します。

パラメータ

geometry

戻されるジオメトリの抽出元のジオメトリを指定します。3次元のジオメトリを指定する必要があります。

label

戻されるサブセット・ジオメトリを示す数字をカンマで区切った文字列で指定します。各数字は、入力ジオメトリ内のジオメトリ項目の相対位置を示します。次にlabel文字列内の項目とその位置を示します。

- pointID: 点の番号

- edgeID: エッジの番号

- ringID: 輪の番号

- polygonID: ポリゴンの番号

- csurfID: 複合表面の番号

- solidID: ソリッドの番号

- multiID: マルチソリッドの番号

0 (ゼロ)の場合は項目が適用されません。また、適用されない末尾の項目は省略できます。たとえば、'0,2,1,4,1'では、点の番号は適用されず、1番目の複合表面の4番目のポリゴンで、1番目の輪の2番目のエッジを指定します。

使用上の注意

このファンクションは、3次元のジオメトリにのみ適用されます。2次元のジオメトリについては、SDO_UTIL.EXTRACTファンクションを使用します。

このファンクションは、oracle.spatial.geometry.ElementExtractor JavaクラスのgetElementByLabelメソッド(『Oracle Spatial Java API Reference』を参照)を使用します。

例

次の例では、指定した3次元のジオメトリから、入力ジオメトリの複合表面1、ポリゴン4、輪1、エッジ2で構成されたサブセット・ジオメトリを抽出します。

SELECT SDO_UTIL.EXTRACT3D(
SDO_GEOMETRY (3008,NULL,NULL ,
SDO_ELEM_INFO_ARRAY(
1,1007,1,
1,1006,6,
1,1003,1,
16,1003,1,
31,1003,1,
46,1003,1,
61,1003,1,
76,1003,1),
SDO_ORDINATE_ARRAY(
1.0,0.0,-1.0,
1.0,1.0,-1.0,
1.0,1.0,1.0,
1.0,0.0,1.0,
1.0,0.0,-1.0,
1.0,0.0,1.0,
0.0,0.0,1.0,
0.0,0.0,-1.0,
1.0,0.0,-1.0,
1.0,0.0,1.0,
0.0,1.0,1.0,
0.0,1.0,-1.0,
0.0,0.0,-1.0,
0.0,0.0,1.0,
0.0,1.0,1.0,
1.0,1.0,-1.0,
0.0,1.0,-1.0,
0.0,1.0,1.0,
1.0,1.0,1.0,
1.0,1.0,-1.0,
1.0,1.0,1.0,
0.0,1.0,1.0,
0.0,0.0,1.0,
1.0,0.0,1.0,
1.0,1.0,1.0,
1.0,1.0,-1.0,
1.0,0.0,-1.0,
0.0,0.0,-1.0,
0.0,1.0,-1.0,
1.0,1.0,-1.0
)
),
'0,2,1,4,1')
FROM DUAL;

SDO_UTIL.EXTRACT3D(SDO_GEOMETRY(3008,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1007,1,1,10
--------------------------------------------------------------------------------
SDO_GEOMETRY(3002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
0, 1, -1, 0, 1, 1))

関連項目

- SDO_UTIL.EXTRACT

SDO_UTIL.EXTRUDE

構文

SDO_UTIL.EXTRUDE(

geometry IN SDO_GEOMETRY,

grdheight IN SDO_NUMBER_ARRAY,

height IN SDO_NUMBER_ARRAY,

tol IN NUMBER,

optional3dSrid IN NUMBER DEFAULT NULL

) RETURN SDO_GEOMETRY;

説明

2次元の入力ポリゴン・ジオメトリから押し出された3次元のソリッド・ジオメトリを戻します。

パラメータ

geometry

押し出されるジオメトリを戻す場合に元となる2次元のポリゴン・ジオメトリを指定します。このジオメトリは、戻されるジオメトリの底面を形成します。

grdheight

ソリッドの底面でのZ(高さ)値のセットとして地上高を指定します。この配列内の数字には、入力ジオメトリの各頂点の底面におけるZ(高さ)値を指定する必要があります。

height

押し出されるジオメトリの高さの値を指定します。この配列内の数字には、grdheight配列の対応する各点の最上部におけるZ(高さ)値を指定する必要があります。たとえば、最初の頂点の底面における地上高が0で、その頂点の高さが10である場合、底面のその点においてソリッドは10単位分の高さまで拡張されます。

tol

許容差を指定します(1.5.5項を参照)。

optional3dSrid

戻されるジオメトリに割り当てられる3次元座標系(SRID)を指定します。このパラメータを指定しないときは、入力ジオメトリのSRID値に基づいて、自動的に3次元のSRID値が割り当てられます。

使用上の注意

入力ジオメトリは、2次元のポリゴン・ジオメトリで構成されるジオメトリである必要があります。

入力ジオメトリが複数の内部の輪を含むポリゴンである場合、このファンクションは、これらの内部の輪を1つの内部の輪へと内部的に結合し、元の外観をおおよそ表現する新しいジオメトリを作成してから、この新しいジオメトリに対して押出し処理を実行し、結果を戻します。

例

次の例では、2次元のポリゴン・ジオメトリから押し出したジオメトリを表現する3次元のソリッド・ジオメトリを戻します。

SELECT SDO_UTIL.EXTRUDE(
SDO_GEOMETRY(
2003,
null,
null,
SDO_ELEM_INFO_ARRAY(1,1003,1),
SDO_ORDINATE_ARRAY(5, 1,8,1,8,6,5,7,5,1)),
SDO_NUMBER_ARRAY(0,0,0,0,0),
SDO_NUMBER_ARRAY(5,10,10,5,5),
0.005) from dual;

SDO_UTIL.EXTRUDE(SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_O
--------------------------------------------------------------------------------
SDO_GEOMETRY(3008, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1007, 1, 1, 1006, 6, 1, 10
03, 1, 16, 1003, 1, 31, 1003, 1, 46, 1003, 1, 61, 1003, 1, 76, 1003, 1), SDO_ORD
INATE_ARRAY(5, 1, 0, 5, 7, 0, 8, 6, 0, 8, 1, 0, 5, 1, 0, 5, 1, 5, 8, 1, 10, 8, 6
, 10, 5, 7, 5, 5, 1, 5, 5, 1, 0, 8, 1, 0, 8, 1, 10, 5, 1, 5, 5, 1, 0, 8, 1, 0, 8
, 6, 0, 8, 6, 10, 8, 1, 10, 8, 1, 0, 8, 6, 0, 5, 7, 0, 5, 7, 5, 8, 6, 10, 8, 6,
0, 5, 7, 0, 5, 1, 0, 5, 1, 5, 5, 7, 5, 5, 7, 0))

次の例では、内部の輪を含む2次元のポリゴン・ジオメトリから押し出したジオメトリを表現する3次元の複合ソリッド・ジオメトリを戻します。

SELECT SDO_UTIL.EXTRUDE(
SDO_GEOMETRY(
2003,
null,
null,
SDO_ELEM_INFO_ARRAY(1, 1003, 1, 11, 2003, 1,
21, 2003,1, 31,2003,1, 41, 2003, 1),
SDO_ORDINATE_ARRAY(0,0, 8,0, 8,8, 0,8, 0,0,
1,3, 1,4, 2,4, 2,3, 1,3, 1,1, 1,2, 2,2, 2,1, 1,1,
1,6, 1,7, 2,7, 2,6, 1,6, 3,2, 3,4, 4,4, 4,2, 3,2)),
SDO_NUMBER_ARRAY(-1.0),
SDO_NUMBER_ARRAY(1.0),
0.0001) from dual;

SDO_UTIL.EXTRUDE(SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1,11,200
--------------------------------------------------------------------------------
SDO_GEOMETRY(3008, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1008, 4, 1, 1007, 1, 1, 10
06, 16, 1, 1003, 1, 46, 1003, 1, 91, 1003, 1, 106, 1003, 1, 121, 1003, 1, 136, 1
003, 1, 151, 1003, 1, 166, 1003, 1, 181, 1003, 1, 196, 1003, 1, 211, 1003, 1, 22
6, 1003, 1, 241, 1003, 1, 256, 1003, 1, 271, 1003, 1, 286, 1003, 1, 301, 1007, 1
, 301, 1006, 10, 301, 1003, 1, 328, 1003, 1, 355, 1003, 1, 370, 1003, 1, 385, 10
03, 1, 400, 1003, 1, 415, 1003, 1, 430, 1003, 1, 445, 1003, 1, 460, 1003, 1, 475
, 1007, 1, 475, 1006, 6, 475, 1003, 1, 490, 1003, 1, 505, 1003, 1, 520, 1003, 1,
535, 1003, 1, 550, 1003, 1, 565, 1007, 1, 565, 1006, 10, 565, 1003, 1, 592, 100
3, 1, 619, 1003, 1, 634, 1003, 1, 649, 1003, 1, 664, 1003, 1, 679, 1003, 1, 694,
1003, 1, 709, 1003, 1, 724, 1003, 1), SDO_ORDINATE_ARRAY(4, 0, -1, 4, 2, -1, 4,
4, -1, 3, 4, -1, 2, 4, -1, 2, 7, -1, 1, 7, -1, 1, 6, -1, 1, 4, -1, 1, 3, -1, 0,
3, -1, 0, 8, -1, 8, 8, -1, 8, 0, -1, 4, 0, -1, 4, 0, 1, 8, 0, 1, 8, 8, 1, 0, 8,
1, 0, 3, 1, 1, 3, 1, 1, 4, 1, 1, 6, 1, 1, 7, 1, 2, 7, 1, 2, 4, 1, 3, 4, 1, 4, 4
, 1, 4, 2, 1, 4, 0, 1, 4, 0, -1, 8, 0, -1, 8, 0, 1, 4, 0, 1, 4, 0, -1, 8, 0, -1,
8, 8, -1, 8, 8, 1, 8, 0, 1, 8, 0, -1, 8, 8, -1, 0, 8, -1, 0, 8, 1, 8, 8, 1, 8,
8, -1, 0, 8, -1, 0, 3, -1, 0, 3, 1, 0, 8, 1, 0, 8, -1, 0, 3, -1, 1, 3, -1, 1, 3,
1, 0, 3, 1, 0, 3, -1, 1, 3, -1, 1, 4, -1, 1, 4, 1, 1, 3, 1, 1, 3, -1, 1, 4, -1,
1, 6, -1, 1, 6, 1, 1, 4, 1, 1, 4, -1, 1, 6, -1, 1, 7, -1, 1, 7, 1, 1, 6, 1, 1,
6, -1, 1, 7, -1, 2, 7, -1, 2, 7, 1, 1, 7, 1, 1, 7, -1, 2, 7, -1, 2, 4, -1, 2, 4,
1, 2, 7, 1, 2, 7, -1, 2, 4, -1, 3, 4, -1, 3, 4, 1, 2, 4, 1, 2, 4, -1, 3, 4, -1,
4, 4, -1, 4, 4, 1, 3, 4, 1, 3, 4, -1, 4, 4, -1, 4, 2, -1, 4, 2, 1, 4, 4, 1, 4,
4, -1, 4, 2, -1, 4, 0, -1, 4, 0, 1, 4, 2, 1, 4, 2, -1, 0, 3, -1, 1, 3, -1, 1, 1,
-1, 2, 1, -1, 3, 2, -1, 4, 2, -1, 4, 0, -1, 0, 0, -1, 0, 3, -1, 0, 3, 1, 0, 0,
1, 4, 0, 1, 4, 2, 1, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 3, 1, 0, 3, 1, 0, 3, -1, 0, 0
, -1, 0, 0, 1, 0, 3, 1, 0, 3, -1, 0, 0, -1, 4, 0, -1, 4, 0, 1, 0, 0, 1, 0, 0, -1
, 4, 0, -1, 4, 2, -1, 4, 2, 1, 4, 0, 1, 4, 0, -1, 4, 2, -1, 3, 2, -1, 3, 2, 1, 4
, 2, 1, 4, 2, -1, 3, 2, -1, 2, 1, -1, 2, 1, 1, 3, 2, 1, 3, 2, -1, 2, 1, -1, 1, 1
, -1, 1, 1, 1, 2, 1, 1, 2, 1, -1, 1, 1, -1, 1, 3, -1, 1, 3, 1, 1, 1, 1, 1, 1, -1
, 1, 3, -1, 0, 3, -1, 0, 3, 1, 1, 3, 1, 1, 3, -1, 1, 6, -1, 2, 6, -1, 2, 4, -1,
1, 4, -1, 1, 6, -1, 1, 6, 1, 1, 4, 1, 2, 4, 1, 2, 6, 1, 1, 6, 1, 1, 6, -1, 1, 4,
-1, 1, 4, 1, 1, 6, 1, 1, 6, -1, 1, 4, -1, 2, 4, -1, 2, 4, 1, 1, 4, 1, 1, 4, -1,
2, 4, -1, 2, 6, -1, 2, 6, 1, 2, 4, 1, 2, 4, -1, 2, 6, -1, 1, 6, -1, 1, 6, 1, 2,
6, 1, 2, 6, -1, 1, 3, -1, 2, 3, -1, 2, 4, -1, 3, 4, -1, 3, 2, -1, 2, 1, -1, 2,
2, -1, 1, 2, -1, 1, 3, -1, 1, 3, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 3, 2, 1, 3, 4, 1,
2, 4, 1, 2, 3, 1, 1, 3, 1, 1, 3, -1, 1, 2, -1, 1, 2, 1, 1, 3, 1, 1, 3, -1, 1, 2
, -1, 2, 2, -1, 2, 2, 1, 1, 2, 1, 1, 2, -1, 2, 2, -1, 2, 1, -1, 2, 1, 1, 2, 2, 1
, 2, 2, -1, 2, 1, -1, 3, 2, -1, 3, 2, 1, 2, 1, 1, 2, 1, -1, 3, 2, -1, 3, 4, -1,
3, 4, 1, 3, 2, 1, 3, 2, -1, 3, 4, -1, 2, 4, -1, 2, 4, 1, 3, 4, 1, 3, 4, -1, 2, 4
, -1, 2, 3, -1, 2, 3, 1, 2, 4, 1, 2, 4, -1, 2, 3, -1, 1, 3, -1, 1, 3, 1, 2, 3, 1
, 2, 3, -1))

関連項目

なし。

SDO_UTIL.FROM_GML311GEOMETRY

構文

SDO_UTIL.FROM_GML311GEOMETRY(

geometry IN CLOB,

srsNamespace IN VARCHAR2 DEFAULT NULL

) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_GML311GEOMETRY(

geometry IN VARCHAR2,

srsNamespace IN VARCHAR2 DEFAULT NULL

) RETURN SDO_GEOMETRY;

説明

Geography Markup Language(GML 3.1.1)フラグメントをSpatialのジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、GMLバージョン3.1.1形式のジオメトリを指定します。

srsNamespace

(Oracleで使用するために予約されています。)

使用上の注意

入力ジオメトリは、Open GIS実装仕様に定義されたGMLバージョン3.1.1のジオメトリ・タイプを示す有効なGMLフラグメントである必要があります。

例

次の例では、GMLバージョン3.1.1形式への変換と逆変換を示します。(例では、2.1項の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
gmlgeom CLOB;
geom_result SDO_GEOMETRY;
geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';

-- To GML 3.1.1 geometry
gmlgeom := SDO_UTIL.TO_GML311GEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To GML 3.1.1 geometry result = ' || TO_CHAR(gmlgeom));

-- From GML 3.1.3 geometry
geom_result := SDO_UTIL.FROM_GML311GEOMETRY(gmlgeom);

END;
/
To GML 3.1.1 geometry result = <gml:Polygon srsName="SDO:"
xmlns:gml="http://www.opengis.net/gml"><gml:exterior><gml:LinearRing><gml:posLis
t srsDimension="2">5.0 1.0 8.0 1.0 8.0 6.0 5.0 7.0 5.0 1.0
</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>

PL/SQL procedure successfully completed.

関連項目

- SDO_UTIL.FROM_GMLGEOMETRY

- SDO_UTIL.TO_GML311GEOMETRY

- SDO_UTIL.TO_GMLGEOMETRY

SDO_UTIL.FROM_GMLGEOMETRY

構文

SDO_UTIL.FROM_GMLGEOMETRY(

geometry IN CLOB,

srsNamespace IN VARCHAR2 DEFAULT NULL

) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_GMLGEOMETRY(

geometry IN VARCHAR2,

srsNamespace IN VARCHAR2 DEFAULT NULL

) RETURN SDO_GEOMETRY;

説明

Geography Markup Language(GML 2.0)フラグメントをSpatialのジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、GMLバージョン2.0形式のジオメトリを指定します。

srsNamespace

(Oracleで使用するために予約されています。)

使用上の注意

入力ジオメトリは、Open GIS実装仕様に定義されたGMLバージョン2.0のジオメトリ・タイプを示す有効なGMLフラグメントである必要があります。

例

次の例では、GMLバージョン2.0形式への変換と逆変換を示します。(例では、2.1項の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
gmlgeom CLOB;
geom_result SDO_GEOMETRY;
geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';

-- To GML geometry
gmlgeom := SDO_UTIL.TO_GMLGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To GML geometry result = ' || TO_CHAR(gmlgeom));

-- From GML geometry
geom_result := SDO_UTIL.FROM_GMLGEOMETRY(gmlgeom);

END;
/
To GML geometry result = <gml:Polygon srsName="SDO:"
xmlns:gml="http://www.opengis.net/gml"><gml:outerBoundaryIs><gml:LinearRing><gml
:coordinates decimal="." cs="," ts=" ">5.0,1.0 8.0,1.0 8.0,6.0 5.0,7.0 5.0,1.0
</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>

PL/SQL procedure successfully completed.

関連項目

- SDO_UTIL.FROM_GML311GEOMETRY

- SDO_UTIL.TO_GML311GEOMETRY

- SDO_UTIL.TO_GMLGEOMETRY

SDO_UTIL.FROM_KMLGEOMETRY

構文

SDO_UTIL.FROM_KMLGEOMETRY(

geometry IN CLOB

) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_KMLGEOMETRY(

geometry IN VARCHAR2

) RETURN SDO_GEOMETRY;

説明

KML (Keyhole Markup Language)ドキュメントをSpatialジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、KML形式のCLOB型またはVARCHAR2型のジオメトリを指定します。

使用上の注意

入力ジオメトリは、KML 2.1仕様に準拠した有効なドキュメントである必要があります。

このファンクションは、KMLドキュメント全体ではなく、KMLジオメトリ・タグのみを処理します。

例

次の例では、KML形式への変換と逆変換を示します。(例では、2.1項の特にCOLA_MARKETS表のcola_cジオメトリについて、その定義およびデータを使用しています。)

-- Convert cola_c geometry to a KML document; convert that result to
-- a spatial geometry.
DECLARE
kmlgeom CLOB;
val_result VARCHAR2(5);
geom_result SDO_GEOMETRY;
geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_c';

-- To KML geometry
kmlgeom := SDO_UTIL.TO_KMLGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To KML geometry result = ' || TO_CHAR(kmlgeom));

-- From KML geometry
geom_result := SDO_UTIL.FROM_KMLGEOMETRY(kmlgeom);
-- Validate the returned geometry
val_result := SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(geom_result, 0.005);
DBMS_OUTPUT.PUT_LINE('Validation result = ' || val_result);

END;
/
To KML geometry result =
<Polygon><extrude>0</extrude><tessellate>0</tessellate><altitudeMode>relativeToG
round</altitudeMode><outerBoundaryIs><LinearRing><coordinates>3.0,3.0 6.0,3.0
6.0,5.0 4.0,5.0 3.0,3.0 </coordinates></LinearRing></outerBoundaryIs></Polygon>
Validation result = TRUE

関連項目

- SDO_UTIL.TO_KMLGEOMETRY

SDO_UTIL.FROM_WKBGEOMETRY

構文

SDO_UTIL.FROM_WKBGEOMETRY(

geometry IN BLOB

) RETURN SDO_GEOMETRY;

説明

well-knownバイナリ(WKB)形式のジオメトリをSpatialジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、WKB形式のジオメトリを指定します。

使用上の注意

入力ジオメトリの形式は、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownバイナリ(WKB)形式であることが必要です。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

SDO_GEOMETRYオブジェクトをWKB形式に変換するには、SDO_UTIL.TO_WKBGEOMETRYファンクションを使用します。

例

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、2.1項の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
wkbgeom BLOB;
wktgeom CLOB;
val_result VARCHAR2(5);
geom_result SDO_GEOMETRY;
geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';

-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));

-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);

-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);

END;/

To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE
WKT validation result = TRUE

関連項目

- SDO_UTIL.FROM_WKTGEOMETRY

- SDO_UTIL.TO_WKBGEOMETRY

- SDO_UTIL.TO_WKTGEOMETRY

- SDO_UTIL.VALIDATE_WKBGEOMETRY

- SDO_UTIL.VALIDATE_WKTGEOMETRY

SDO_UTIL.FROM_WKTGEOMETRY

構文

SDO_UTIL.FROM_WKTGEOMETRY(

geometry IN CLOB

) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_WKTGEOMETRY(

geometry IN VARCHAR2

) RETURN SDO_GEOMETRY;

説明

well-knownテキスト(WKT)形式のジオメトリをSpatialジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、WKT形式のジオメトリを指定します。

使用上の注意

入力ジオメトリの形式は、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownテキスト(WKT)形式であることが必要です。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

SDO_GEOMETRYオブジェクトをWKT形式のCLOBに変換するには、SDO_UTIL.TO_WKTGEOMETRYファンクションを使用します。(得られたCLOBは、SQLファンクションTO_CHARを使用して、VARCHAR2型に変換できます。)

例

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、2.1項の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
wkbgeom BLOB;
wktgeom CLOB;
val_result VARCHAR2(5);
geom_result SDO_GEOMETRY;
geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';

-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));

-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);

-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);

END;/

To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE
WKT validation result = TRUE

関連項目

- SDO_UTIL.FROM_WKBGEOMETRY

- SDO_UTIL.TO_WKBGEOMETRY

- SDO_UTIL.TO_WKTGEOMETRY

- SDO_UTIL.VALIDATE_WKBGEOMETRY

- SDO_UTIL.VALIDATE_WKTGEOMETRY

SDO_UTIL.GETNUMELEM

構文

SDO_UTIL.GETNUMELEM(

geometry IN SDO_GEOMETRY

) RETURN NUMBER;

説明

入力ジオメトリの要素の数を戻します。

パラメータ

geometry

要素の数を戻すジオメトリを指定します。

使用上の注意

なし。

例

次の例では、COLA_MARKETS表のSHAPE列にある各ジオメトリの要素の数を戻します。(例では、2.1項の定義およびデータを使用しています。)

SELECT c.name, SDO_UTIL.GETNUMELEM(c.shape)
FROM cola_markets c;

NAME                             SDO_UTIL.GETNUMELEM(C.SHAPE)
-------------------------------- ----------------------------
cola_a                                                      1
cola_b                                                      1
cola_c                                                      1
cola_d                                                      1

関連項目

- SDO_UTIL.GETNUMVERTICES

SDO_UTIL.GETNUMVERTICES

構文

SDO_UTIL.GETNUMVERTICES(

geometry IN SDO_GEOMETRY

) RETURN NUMBER;

説明

入力ジオメトリの頂点の数を戻します。

パラメータ

geometry

頂点の数を戻すジオメトリを指定します。

使用上の注意

なし。

例

次の例では、COLA_MARKETS表のSHAPE列にある各ジオメトリの頂点の数を戻します。(例では、2.1項の定義およびデータを使用しています。)

SELECT c.name, SDO_UTIL.GETNUMVERTICES(c.shape)
FROM cola_markets c;

NAME                             SDO_UTIL.GETNUMVERTICES(C.SHAPE)
-------------------------------- --------------------------------
cola_a                                                          2
cola_b                                                          5
cola_c                                                          5
cola_d                                                          3

関連項目

- SDO_UTIL.GETVERTICES

- SDO_UTIL.GETNUMELEM

SDO_UTIL.GETVERTICES

構文

SDO_UTIL.GETVERTICES(

geometry IN SDO_GEOMETRY

) RETURN VERTEX_SET_TYPE;

説明

入力ジオメトリの頂点の座標を戻します。

パラメータ

geometry

頂点の座標を戻すジオメトリを指定します。

使用上の注意

このファンクションは、MDSYS.VERTEX_SET_TYPEのオブジェクトを戻します(このオブジェクトは、MDSYS.VERTEX_TYPEのオブジェクトの表で構成されます)。Oracle Spatialでは、VERTEX_SET_TYPE型を次のように定義します。

CREATE TYPE vertex_set_type as TABLE OF vertex_type;

Oracle Spatialでは、VERTEX_TYPEオブジェクト型を次のように定義します。

CREATE TYPE vertex_type AS OBJECT
(x   NUMBER,
y   NUMBER,
z   NUMBER,
w   NUMBER,
v5  NUMBER,
v6  NUMBER,
v7  NUMBER,
v8  NUMBER,
v9  NUMBER,
v10 NUMBER,
v11 NUMBER,
id  NUMBER);

注意:
VERTEX_SET_TYPE型およびVERTEX_TYPE型は、Oracleでのみ使用されます。これらの型を、ユーザーが作成する列の定義やファンクションで使用しないでください。

このファンクションは、ジオメトリを無効にしている頂点を検出する場合に有効です。たとえば、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションまたはSDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTプロシージャ(第24章を参照)によってジオメトリが無効であると識別された場合は、GETVERTICESファンクションを使用して、頂点を表形式で参照できます。

例

次の例では、COLA_MARKETS表のSHAPE列にあるジオメトリの頂点のX座標、Y座標およびID値を戻します。(例では、2.1項の定義およびデータを使用しています。)

SELECT c.mkt_id, c.name, t.X, t.Y, t.id
FROM cola_markets c,
TABLE(SDO_UTIL.GETVERTICES(c.shape)) t
ORDER BY c.mkt_id, t.id;

MKT_ID NAME                                      X          Y         ID
---------- -------------------------------- ---------- ---------- ----------
1 cola_a                                    1          1          1
1 cola_a                                    5          7          2
2 cola_b                                    5          1          1
2 cola_b                                    8          1          2
2 cola_b                                    8          6          3
2 cola_b                                    5          7          4
2 cola_b                                    5          1          5
3 cola_c                                    3          3          1
3 cola_c                                    6          3          2
3 cola_c                                    6          5          3
3 cola_c                                    4          5          4
3 cola_c                                    3          3          5
4 cola_d                                    8          7          1
4 cola_d                                   10          9          2
4 cola_d                                    8         11          3

15 rows selected.

関連項目

- SDO_UTIL.EXTRACT

- SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

- SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

- SDO_UTIL.GETNUMVERTICES

SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS

構文

SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS;

説明

別のデータベースに転送された表領域内のすべての空間索引を初期化します。

パラメータ

なし。

使用上の注意

このプロシージャは、なんらかの空間索引を含む表領域にOracleトランスポータブル表領域機能を使用するためのサポートの一部です。このプロシージャを使用するのは、(A)リリース11.2より前のダンプ・ファイルのインポート操作が完了したとき、または(B)リリース11.2以上の異なるエンディアン・プラットフォームからのインポート操作が完了した後、のいずれかのみです。表領域に空間索引を持つ各ユーザーは、このプロシージャをコールする必要があります。

リリース11.2より前のダンプ・ファイルについては、SDO_UTIL.INITIALIZE_INDEXES_FOR_TTSプロシージャをコールした後、インポートされたトランスポータブル表領域にある各索引に対して次の書式の文を実行する必要があります。

ALTER INDEX spatial-index-from-imported-tts PARAMETERS ('CLEAR_TTS=TRUE');

トランスポータブル表領域および表領域を別のデータベースに転送する方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

例

リリース11.2より前のダンプ・ファイルをインポートした後に使用する次の例では、別のデータベースに転送された表領域内のすべての空間索引を初期化します。また、その2つの空間索引に必要なALTER INDEX文も示します。

CALL SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS;
ALTER INDEX xyz1_spatial_idx PARAMETERS ('CLEAR_TTS=TRUE');
ALTER INDEX xyz2_spatial_idx PARAMETERS ('CLEAR_TTS=TRUE');

次の例では、空間索引の所有者は、SELECT文が文字列Yを戻した場合のみ、SDO_UTIL.INITIALIZE_INDEXES_FOR_TTSプロシージャをコールして、リリース11.2の異なるエンディアン・プラットフォームから空間索引がインポートされたことを反映する必要があります。

SELECT DECODE(BITAND(sdo_index_version, 1024), 1024, 'Y', 'N') ENDIAN_FLAG
FROM user_sdo_index_metadata
WHERE sdo_index_name = :index_name;
-- If the result is 'Y', perform the next statement.
CALL SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS;
-- No ALTER INDEX statements are needed.

この例では、SELECT文が文字列Nを戻したときにSDO_UTIL.INITIALIZE_INDEXES_FOR_TTSプロシージャをコールした場合、エンディアンの変換を実行する必要がないため、このプロシージャは何も実行しません。

関連項目

なし。

SDO_UTIL.INTERIOR_POINT

構文

SDO_UTIL.INTERIOR_POINT(

geom IN SDO_GEOMETRY,

tol IN NUMBER DEFAULT 0.00000000005

) RETURN SDO_GEOMETRY;

説明

ポリゴンのジオメトリ・オブジェクト上の内部の点(境界またはエッジ上ではない)を戻します。

パラメータ

geom

ポリゴンのジオメトリ・オブジェクトを指定します。ジオメトリのSDO_GTYPE値は2003または2007である必要があります。(SDO_GTYPE値の詳細は、2.2.1項を参照。)

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

このファンクションは、geom上の境界またはエッジ上ではなく内部の点を表現する、点のジオメトリ・オブジェクトを戻します。ジオメトリ・オブジェクト上のどの内部の点でも戻り値になる可能性がありますが、同じ geomおよびtolのパラメータ値を指定してこのファンクションを複数回コールしても同じ点が戻されます。

戻される点と元のジオメトリの関係はINSIDEです。これは、'mask=inside'を含めてSDO_RELATE演算子を使用することで確認できます。

ほとんどの場合、このファンクションは内部の点を戻す保証のないSDO_GEOM.SDO_POINTONSURFACEファンクションと比較して有用性が高くなります。

例

次の例では、cola_a上の内部の点であるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Return an interior point on the surface of a geometry.
SELECT SDO_UTIL.INTERIOR_POINT(c.shape, 0.005)
FROM cola_markets c
WHERE c.name = 'cola_a';

SDO_UTIL.INTERIOR_POINT(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z),
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(2.75, 2.875, NULL), NULL, NULL)

関連項目

なし。

SDO_UTIL.POINT_AT_BEARING

構文

SDO_UTIL.POINT_AT_BEARING(

start_point IN SDO_GEOMETRY,

bearing IN NUMBER,

distance IN NUMBER

) RETURN SDO_GEOMETRY;

説明

開始点を基準として指定された距離および方位に存在する点ジオメトリを戻します。

パラメータ

start_point

必要な点を配置するために、指定された方位の距離計算の開始点となる点ジオメトリ・オブジェクトを指定します。測地座標系に基づく点ジオメトリを指定する必要があります。

bearing

北を基準として時計回りに測定されるラジアンの数値を指定します。-piからpiか、または0から2×piの範囲で指定する必要があります。(いずれの表記でも指定できます。)

distance

start_pointから初期の方位方向への計算の終了点までの数値(m)を指定します。地球の円周の半分より小さい値を指定する必要があります。

使用上の注意

入力する点ジオメトリは、測地座標系に基づく必要があります。非測地座標系に基づく場合、このファンクションはNULL値を戻します。

10進度をラジアンに変換したり、m単位ではない距離をm単位に変換するには、SDO_UTIL.CONVERT_UNITファンクションを使用します。開始点から終了点への方位と傾きを計算するには、SDO_UTIL.BEARING_TILT_FOR_POINTSプロシージャを使用できます。

例

次の例では、経度と緯度の座標が (-72, 43) である点から、1ラジアンの方位方向100kmの位置にある点を戻します。

SELECT SDO_UTIL.POINT_AT_BEARING(
SDO_GEOMETRY(2001, 8307,
SDO_POINT_TYPE(-72, 43, NULL), NULL, NULL),
1,  -- 1 radian (57.296 degrees clockwise from North)
100000 -- 100 kilometers
) FROM DUAL;

SDO_UTIL.POINT_AT_BEARING(SDO_GEOMETRY(2001,8307,SDO_POINT_TYPE(-72,43,NULL),NUL
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
-70.957053, 43.4811935))

関連項目

- SDO_UTIL.BEARING_TILT_FOR_POINTS

- SDO_UTIL.CONVERT_UNIT

SDO_UTIL.POLYGONTOLINE

構文

SDO_UTIL.POLYGONTOLINE(

geometry IN SDO_GEOMETRY

) RETURN SDO_GEOMETRY;

説明

ジオメトリ内のすべてのポリゴンタイプ要素を線タイプ要素に変換し、それに応じてSDO_GTYPE値を設定します。

パラメータ

geometry

変換するジオメトリを指定します。

使用上の注意

戻される各線タイプ要素の頂点の順序は、関連付けられたポリゴンタイプ要素の頂点の順序と同じです。また、各線タイプ・セグメントの開始点および終了点は同じ点になります。

入力ジオメトリが線の場合、入力ジオメトリが戻されます。

例

次の例では、cola_b (2.1項の図2-1と例2-1を参照)と同じジオメトリである入力ポリゴン・ジオメトリを、線ストリング・ジオメトリに変換します。戻されるジオメトリでは、SDO_GTYPE値(2002)は2次元のLINEジオメトリを示します。SDO_ELEM_INFO配列のSDO_ETYPE値(2)およびSDO_INTERPRETATION値(1)は、頂点が直線セグメントにより接続されている線ストリングを示します。

SELECT SDO_UTIL.POLYGONTOLINE(
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
)
) FROM DUAL;

SDO_UTIL.POLYGONTOLINE(SDO_GEOMETRY(2003,--TWO-DIMENSIONALPOLYGONNULL,NULL,SDO_E
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 1, 8, 1, 8, 6, 5, 7, 5, 1))

関連項目

なし。

SDO_UTIL.PREPARE_FOR_TTS

構文

SDO_UTIL.PREPARE_FOR_TTS(

table_space IN VARCHAR2);

説明

(非推奨の機能。以前の使用方法は、「別のデータベースに転送する表領域を準備し、転送操作中に空間索引が保持されるようにします。」でした)

パラメータ

TABLE_SPACE

転送する表領域を指定します。空間表を含む表領域を指定する必要があります。パーティション化された表の場合、いずれかのパーティションの表領域を指定する必要があります。

使用上の注意

Oracle Database リリース11.2で有効なこのプロシージャは、非推奨となっています。トランスポータブル表領域のエクスポート操作を実行する前に、PREPARE_FOR_TTSプロシージャをコールする必要はありません。

トランスポータブル表領域および表領域を別のデータベースに転送する方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

例

なし。

関連項目

- SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS

SDO_UTIL.RECTIFY_GEOMETRY

構文

SDO_UTIL.RECTIFY_GEOMETRY(

geometry IN SDO_GEOMETRY,

tolerance IN NUMBER

) RETURN SDO_GEOMETRY;

説明

入力ジオメトリの特定の問題点を修正して、有効なジオメトリを戻します。

パラメータ

geometry

修正可能な問題を確認するジオメトリを指定します。

tolerance

許容差を指定します(1.5.5項を参照)。

使用上の注意

このファンクションは、ジオメトリを無効とする次の問題点があるかどうかを確認し、問題点を修正したジオメトリを戻します。

- 重複する頂点

- 自分自身と交わるポリゴン境界

- 方向が無効な、ポリゴンの外部または内部の輪(両方の輪の向きが無効な場合も含む)

入力ジオメトリが無効となる理由が他にある場合、このファンクションは例外を発生します。

入力ジオメトリが有効な場合、このファンクションは、入力ジオメトリと同じジオメトリを戻します。

空間データをロードおよび検証する際の推奨手順の一部としてこのファンクションを使用する方法については、4.3項を参照してください。

このファンクションは、ジオメトリの簡略化プロセスの一部として、SDO_UTIL.SIMPLIFYファンクションによって内部的に使用されます。

例

次の例では、cola_bジオメトリをチェックして、修正可能な問題点があるかどうかを確認します。(ここでは、ジオメトリが有効なため、入力ジオメトリが戻ります。この例は、2.1項の定義およびデータを使用しています。)

SELECT SDO_UTIL.RECTIFY_GEOMETRY(shape, 0.005)
FROM COLA_MARKETS c WHERE c.name = 'cola_b';

SDO_UTIL.RECTIFY_GEOMETRY(SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z),
--------------------------------------------------------------------------------
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_UTIL.RECTIFY_GEOMETRY

SDO_UTIL.REMOVE_DUPLICATE_VERTICES

構文

SDO_UTIL.REMOVE_DUPLICATE_VERTICES

geometry IN SDO_GEOMETRY,

tolerance IN NUMBER

) RETURN SDO_GEOMETRY;

説明

重複する(冗長の)頂点をジオメトリから削除します。

パラメータ

geometry

重複する頂点を削除するジオメトリを指定します。

tolerance

許容差を指定します(1.5.5項を参照)。

使用上の注意

ジオメトリの2つの連続する頂点が、ジオメトリに関連付けられた許容差以内である場合、そのジオメトリは無効とみなされます。この場合、Spatialのジオメトリ検証ファンクションが、エラーORA-13356を戻します。REMOVE_DUPLICATE_VERTICESファンクションを使用すると、このような無効なジオメトリを有効なジオメトリに変更できます。

また、このファンクションによってポリゴンが閉じられ、輪の最初の頂点が最後の頂点と等しくなります。

このファンクションは、点ジオメトリ(方向付きの点を含む)ではサポートされません。

入力ジオメトリに重複する頂点が存在しない場合、入力ジオメトリが戻されます。

例

次の例では、cola_b(2.1項の図2-1および例2-1を参照)と同じジオメトリである入力ジオメトリから、重複する頂点を削除します。ただし、この例で使用するジオメトリは、2つ目の頂点(8,1)と同じ点である3つ目の頂点を追加することによって、意図的に無効な状態で作成されています。

SELECT SDO_UTIL.REMOVE_DUPLICATE_VERTICES(
SDO_GEOMETRY(
2003,  -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(5,1, 8,1, 8,1, 8,6, 5,7, 5,1) -- 2nd and 3rd points
-- are duplicates.
),
0.005 -- tolerance value
) FROM DUAL;

SDO_UTIL.REMOVE_DUPLICATE_VERTICES(SDO_GEOMETRY(2003,--TWO-DIMENSIONALPOLYGONNUL
--------------------------------------------------------------------------------
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_UTIL.REVERSE_LINESTRING

構文

SDO_UTIL.REVERSE_LINESTRING(

geometry IN SDO_GEOMETRY

) RETURN SDO_GEOMETRY;

説明

線ストリング・ジオメトリを、その入力ジオメトリの頂点を逆順序にして戻します。

パラメータ

geometry

出力ジオメトリで頂点を反転させる線ストリング・ジオメトリを指定します。入力ジオメトリのSDO_GTYPE値は2002である必要があります。(SDO_GTYPE値の詳細は、2.2.1項を参照。)

使用上の注意

入力ジオメトリのSDO_GTYPE値は2002である必要があるため、このファンクションを使用してLRSジオメトリを反転することはできません。LRSジオメトリを反転するには、SDO_LRS.REVERSE_GEOMETRYファンクションを使用します(第25章を参照)。

例

次の例では、入力ジオメトリの頂点を反転させた線ストリング・ジオメトリを戻します。

SELECT SDO_UTIL.REVERSE_LINESTRING(
SDO_GEOMETRY(2002, 8307, NULL, SDO_ELEM_INFO_ARRAY(1,2,1),
SDO_ORDINATE_ARRAY(-72,43, -71.5,43.5, -71,42, -70,40))
) FROM DUAL;

SDO_UTIL.REVERSE_LINESTRING(SDO_GEOMETRY(2002,8307,NULL,SDO_ELEM_INFO_ARRAY(1,2,
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
-70, 40, -71, 42, -71.5, 43.5, -72, 43))

関連項目

- SDO_LRS.REVERSE_GEOMETRY(第25章)

SDO_UTIL.SIMPLIFY

構文

SDO_UTIL.SIMPLIFY(

geometry IN SDO_GEOMETRY,

threshold IN NUMBER

tolerance IN NUMBER DEFAULT 0.0000005

) RETURN SDO_GEOMETRY;

説明

Douglas-Peuckerアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。

パラメータ

geometry

簡略化するジオメトリを指定します。

threshold

ジオメトリの簡略化に使用するしきい値を指定します。正の数字を指定する必要があります。(0 (ゼロ)を指定した場合、入力ジオメトリが戻されます。)入力ジオメトリが測地ジオメトリである場合、値はm単位になります。非測地ジオメトリである場合、値はデータに関連付けられた単位の数値になります。

しきい値が小さくなると、戻されるジオメトリは入力ジオメトリにより近くなり、しきい値が大きくなると、戻されるジオメトリの点は少なくなります。詳細は、「使用上の注意」を参照してください。

tolerance

許容差を指定します(1.5.5項を参照)。この値は、threshold以下にする必要があります。パフォーマンスを向上させるには、thresholdと同じ値を指定しないでください。値を指定しない場合のデフォルト値は、0.0000005です。

使用上の注意

このファンクションでは他に、円弧から線ストリングへの変換、重複している頂点の削除、およびポリゴンのエッジの重複の修正も行われます。このファンクションで問題が修正させるのは、有効なジオメトリが確実に戻されるように、簡略化プロセスの最後でSDO_UTIL.RECTIFY_GEOMETRYファンクションを内部的にコールする場合があるためです。

このファンクションは、元のジオメトリよりも解像度の低いジオメトリが必要な場合に有効です。たとえば、川筋または行政的境界の多数のカーブをディスプレイの解像度で表示できない場合、ジオメトリを簡略化して主なカーブのみを表示させると、パフォーマンスが向上する場合があります。

3次元以上のジオメトリにこのファンクションを使用する場合、最初の2次元のみが問合せ処理で使用され、戻されるジオメトリの最初の2次元のみが有効とみなされます。たとえば、戻されるLRSジオメトリのメジャー値が、そのジオメトリの実際のメジャーを反映しない場合があります。この場合、アプリケーションの要件によって、簡略化操作の後でいくつかのオプションを選択する場合があります(新しいメジャー値の無視、新しいLRSジオメトリの再定義よるメジャー値のリセットなど)。

このファンクションで使用されるDouglas-Peuckerアルゴリズムの詳細は、地図作成法に関する書籍および参考資料を参照してください。(これらのドキュメントでは、しきい値のかわりに許容差という用語が使用される場合もありますが、Oracle Spatialの許容差とは意味が異なります。)

戻されるジオメトリは、ジオメトリの定義およびしきい値に応じてポリゴン、線または点となります。適用される考慮点は次のとおりです。

- •ジオメトリに関連付けられたしきい値が十分に大きい場合、ポリゴンを線または点に、線を点に簡略化できます。たとえば、細長い矩形の平行な2長辺間の距離がしきい値よりも小さい場合、その矩形は線に簡略化されます。線の開始点と終了点の間の距離がしきい値よりも小さい場合、その線は点に簡略化されます。

- 穴のあるポリゴンで、外部の輪または内部の輪(穴)が線または点に簡略化される場合、内部の輪は結果のジオメトリには存在しなくなります(結果のジオメトリには含まれません)。

- 入力ジオメトリの位相特性は、簡略化後には保持されない場合があります。集合ジオメトリの場合は、個々の要素が重ならないようにするため、要素の数が増えることがあります。どのような場合でも、このファンクションが無効なジオメトリを戻すことはありません。

例

次の例では、7.7項の図7-20に示す道路を簡略化します。しきい値(6)は入力ジオメトリに対して十分に大きいため、結果のLRS線ストリングには、開始点、終了点および (12, 4,12) の3つの点のみが含まれます。このファンクションは2次元のみを考慮するため、戻されるジオメトリのメジャー値は無効になります。

SELECT SDO_UTIL.SIMPLIFY(
SDO_GEOMETRY(
3302,  -- line string, 3 dimensions (X,Y,M), 3rd is linear ref. dimension
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
SDO_ORDINATE_ARRAY(
2,2,0,   -- Starting point - Exit1; 0 is measure from start.
2,4,2,   -- Exit2; 2 is measure from start.
8,4,8,   -- Exit3; 8 is measure from start.
12,4,12,  -- Exit4; 12 is measure from start.
12,10,NULL,  -- Not an exit; measure automatically calculated and filled.
8,10,22,  -- Exit5; 22 is measure from start.
5,14,27)  -- Ending point (Exit6); 27 is measure from start.
),
6, -- threshold value for geometry simplification
0.5  -- tolerance
) FROM DUAL;

SDO_UTIL.SIMPLIFY(SDO_GEOMETRY(3302,--LINESTRING,3DIMENSIONS(X,Y,M),3RDISLINEARR
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 12, 4, 12, 5, 14, 27))

図32-1に、この例の結果を示します。図32-1では、黒い太実線が結果のジオメトリを示し、開始点と終了点の間の薄い色の細実線が入力ジオメトリを示しています。また、終端に矢印の付いた細い破線は、セグメントの方向を示しています。

図32-1 ジオメトリの簡略化

関連項目

SDO_UTIL.RECTIFY_GEOMETRY

SDO_UTIL.TO_GML311GEOMETRY

構文

SDO_UTIL.TO_GML311GEOMETRY(

geometry IN SDO_GEOMETRY

) RETURN CLOB;

説明

Open GIS geometry.xsdスキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatialジオメトリ・オブジェクトをGeography Markup Language(GMLバージョン3.1.1)フラグメントに変換します。

パラメータ

geometry

GMLバージョン3.1.1のフラグメントを戻すジオメトリを指定します。

使用上の注意

このファンクションは、円、円弧を含むジオメトリ、LRSジオメトリ、またはSDO_ETYPE値が0(タイプ0(ゼロ)要素)であるジオメトリは変換しません。これらを指定した場合、空のCLOBが戻されます。

このファンクションは、Open GIS実装仕様に定義されたいくつかのGMLジオメトリ・タイプに基づいて、入力ジオメトリをGMLバージョン3.1.1のフラグメントに変換します。

ポリゴンの定義には、Oracle9i以降のリリースのSpatialの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(ETYPE=1003)、次に0 (ゼロ)個以上の内側の境界要素が格納されます(ETYPE=2003)。穴のあるポリゴンでは、外側の境界をSDO_ORDINATES定義によって先に格納し、次に内側の境界の座標を格納する必要があります。

LRSジオメトリは、TO_GMLGEOMETRYファンクションに渡す前に、(SDO_LRS.CONVERT_TO_STD_GEOMファンクションまたはSDO_LRS.CONVERT_TO_STD_LAYERファンクションを使用して)標準ジオメトリに変換しておく必要があります。(CONVERT_TO_STD_GEOMファンクションとTO_GMLGEOMETRYファンクションを併用する例については、「例」を参照してください。)

円弧または円は、TO_GMLGEOMETRYファンクションに渡す前に、(SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用して)稠密化しておくか、または(SDO_GEOM.SDO_BUFFERファンクションを使用して)ポリゴンとして表現しておく必要があります。(SDO_ARC_DENSIFYファンクションとTO_GMLGEOMETRYファンクションを併用する例については、「例」を参照してください。)

ラベル点は廃棄されます。したがって、ジオメトリがSDO_POINT、SDO_ELEM_INFOおよびSDO_ORDINATESフィールドに値を持つ場合、SDO_POINTはGMLフラグメントに出力されません。

SDO_SRID値は、srsName="SDO:<srid>"の形式で出力されます。たとえば、"SDO:8307"はSDO_SRID値が8307であることを示し、"SDO:"はSDO_SRID値がNULLであることを示します。SDO_SRID値の妥当性または一貫性チェックは行われません。たとえば、値がMDSYS.CS_SRS表に存在するかどうか、またはUSER_SDO_GEOM_METADATAビューのレイヤーのSRID値と競合するかどうかの確認は行われません。

NLS_NUMERIC_CHARACTERS設定で小数点文字に','(カンマ)が指定されている場合でも、座標は常に、<coordinates>タグ、decimal='.'、cs=','(座標セパレータにカンマ)、およびts=' '(組セパレータに空白)を使用して出力されます。

GML出力の形式は整えられないため、タグの改行またはインデントは行われません。SQL*Plusで戻されるCLOBの内容を確認するには、TO_CHAR()ファンクションを使用するか、またはSQL*PlusパラメータのLONGを適切な値に設定してください(SET LONG 40000など)。形式を整えてGMLを出力するか、またはSQLXやOracle XML DBファンクション(XMLELEMENTなど)でTO_GMLGEOMETRYの戻り値を使用するには、XMLTYPE (clobval CLOB)コンストラクタを使用してください。

例

次の例では、COLA_MARKETS表のcola_bジオメトリについてGMLバージョン3.1.1のフラグメントを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Convert cola_b geometry to GML 3.1.1 fragment.
SELECT TO_CHAR(SDO_UTIL.TO_GML311GEOMETRY(shape)) AS Gml311Geometry
FROM COLA_MARKETS c WHERE c.name = 'cola_b';

GML311GEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml"><gml:exterior
><gml:LinearRing><gml:posList srsDimension="2">5.0 1.0 8.0 1.0 8.0 6.0 5.0 7.0 5
.0 1.0 </gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>

次の例では、COLA_MARKETS表のcola_dジオメトリの円弧を稠密化したGMLバージョン3.1.1のフラグメントを戻します。(例では、2.1項の定義およびデータを使用しています。)

SET LONG 40000
SELECT XMLTYPE(SDO_UTIL.TO_GML311GEOMETRY(
SDO_GEOM.SDO_ARC_DENSIFY(c.shape, m.diminfo, 'arc_tolerance=0.05')))
AS Gml311Geometry FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_d';

GML311GEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">
<gml:exterior>
<gml:LinearRing>
<gml:posList srsDimension="2">8.0 7.0 8.76536686473018 7.15224093497743 9.
4142135623731 7.58578643762691 9.84775906502257 8.23463313526982 10.0 9.0 9.8477
5906502257 9.76536686473018 9.4142135623731 10.4142135623731 8.76536686473018 10
.8477590650226 8.0 11.0 7.23463313526982 10.8477590650226 6.58578643762691 10.41
42135623731 6.15224093497743 9.76536686473018 6.0 9.0 6.15224093497743 8.2346331
3526982 6.58578643762691 7.5857864376269 7.23463313526982 7.15224093497743 8.0 7
.0 </gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>

次の例では、LRSジオメトリを標準ジオメトリに変換して、そのジオメトリのGMLバージョン3.1.1のフラグメントを戻します。(例では、7.7項の定義およびデータを使用しています。)

SET LONG 40000
-- Convert LRS grometry to standard geometry before using TO_GML311GEOMETRY.
SELECT XMLTYPE(SDO_UTIL.TO_GML311GEOMETRY(
SDO_LRS.CONVERT_TO_STD_GEOM(route_geometry)))
AS Gml311Geometry FROM lrs_routes a WHERE a.route_id = 1;

GML311GEOMETRY
--------------------------------------------------------------------------------
<gml:Curve srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">
<gml:segments>
<gml:LineStringSegment>
<gml:posList srsDimension="2">2.0 2.0 2.0 4.0 8.0 4.0 12.0 4.0 12.0 10.0 8
.0 10.0 5.0 14.0 </gml:posList>
</gml:LineStringSegment>
</gml:segments>
</gml:Curve>

次の例では、様々なジオメトリ・タイプのGMLバージョン3.1.1のフラグメントを戻します。

-- Point geometry with coordinates in SDO_ORDINATES. Note the
--    coordinates in the GML are (10.0 10.0) and the values in the
--    SDO_POINT field are discarded.
SELECT TO_CHAR(
SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2001, 8307,
sdo_point_type(-80, 70, null),
sdo_elem_info_array(1,1,1), sdo_ordinate_array(10, 10)))
)
AS Gml311Geometry FROM DUAL;

GML311GEOMETRY
--------------------------------------------------------------------------------
<gml:Point srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml:posLis
t srsDimension="2">10.0 10.0 </gml:posList></gml:Point>

-- Multipolygon
SET LONG 40000
SELECT SDO_UTIL.TO_GML311GEOMETRY(
sdo_geometry(2007, 8307, null,
sdo_elem_info_array(1,1003,1, 13,1003,1, 23,1003,3),
sdo_ordinate_array(10.10,10.20, 20.50,20.10, 30.30,30.30, 40.10,40.10,
30.50, 30.20, 10.10, 10.20,
5,5, 5,6, 6,6, 6,5, 5,5, 7,7, 8,8 ))
)
AS Gml311Geometry FROM DUAL;

GML311GEOMETRY
--------------------------------------------------------------------------------
<gml:MultiSurface srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml
:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimens
ion="2">10.1 10.2 20.5 20.1 30.3 30.3 40.1 40.1 30.5 30.2 10.1 10.2 </gml:posLis
t></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember><gml:surface
Member><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">
5.0 5.0 5.0 6.0 6.0 6.0 6.0 5.0 5.0 5.0 </gml:posList></gml:LinearRing></gml:ext
erior></gml:Polygon></gml:surfaceMember><gml:surfaceMember><gml:Polygon><gml:ext
erior><gml:LinearRing><gml:posList srsDimension="2">7.0 7.0 8.0 7.0 8.0 8.0 7.0
8.0 7.0 7.0 </gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:su
rfaceMember></gml:MultiSurface>

SET LONG 80
-- Rectangle (geodetic)
SELECT TO_CHAR(
SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2003, 8307, null,
sdo_elem_info_array(1,1003,3),
sdo_ordinate_array(10.10,10.10, 20.10,20.10 )))
)
AS Gml311Geometry FROM DUAL;

GML311GEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml:exte
rior><gml:LinearRing><gml:posList srsDimension="2">10.1 10.1 20.1 10.1 20.1 20.1
10.1 20.1 10.1 10.1 </gml:posList></gml:LinearRing></gml:exterior></gml:Polygon
>

-- Polygon with holes
SELECT TO_CHAR(
SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2003, 262152, null,
sdo_elem_info_array(1,1003,3, 5, 2003, 1, 13, 2003, 1),
sdo_ordinate_array(10.10,10.20, 40.50, 41.10, 30.30, 30.30, 30.30,
40.10, 40.10, 40.10, 30.30, 30.30, 5, 5, 5, 6, 6, 6, 6, 5, 5, 5 )))
)
AS Gml311Geometry FROM DUAL;

GML311GEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:262152" xmlns:gml="http://www.opengis.net/gml"><gml:ex
terior><gml:LinearRing><gml:posList srsDimension="2">10.1 10.2 40.5 10.2 40.5 41
.1 10.1 41.1 10.1 10.2 </gml:posList></gml:LinearRing></gml:exterior><gml:interi
or><gml:LinearRing><gml:posList srsDimension="2">30.3 30.3 30.3 40.1 40.1 40.1 3
0.3 30.3 </gml:posList></gml:LinearRing></gml:interior><gml:interior><gml:Linear
Ring><gml:posList srsDimension="2">5.0 5.0 5.0 6.0 6.0 6.0 6.0 5.0 5.0 5.0 </gml
:posList></gml:LinearRing></gml:interior></gml:Polygon>

-- Creating an XMLTYPE from the GML fragment. Also useful for "pretty
--  printing" the GML output.
SET LONG 40000
SELECT XMLTYPE(
SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2003, 262152, null,
sdo_elem_info_array(1,1003,1, 11, 2003, 1, 21, 2003, 1),
sdo_ordinate_array(10.10,10.20, 40.50,10.2, 40.5,41.10, 10.1,41.1,
10.10, 10.20, 30.30,30.30, 30.30, 40.10, 40.10, 40.10, 40.10, 30.30,
30.30, 30.30, 5, 5, 5, 6, 6, 6, 6, 5, 5, 5 )))
)
AS Gml311Geometry FROM DUAL;

GML311GEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:262152" xmlns:gml="http://www.opengis.net/gml">
<gml:exterior>
<gml:LinearRing>
<gml:posList srsDimension="2">10.1 10.2 40.5 10.2 40.5 41.1 10.1 41.1 10.1
10.2 </gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing>
<gml:posList srsDimension="2">30.3 30.3 30.3 40.1 40.1 40.1 40.1 30.3 30.3
30.3 </gml:posList>

GML311GEOMETRY
--------------------------------------------------------------------------------
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing>
<gml:posList srsDimension="2">5.0 5.0 5.0 6.0 6.0 6.0 6.0 5.0 5.0 5.0 </gm
l:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>

関連項目

SDO_UTIL.TO_GMLGEOMETRY

SDO_UTIL.TO_GMLGEOMETRY

構文

SDO_UTIL.TO_GMLGEOMETRY(

geometry IN SDO_GEOMETRY

) RETURN CLOB;

説明

Open GIS geometry.xsdスキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatialジオメトリ・オブジェクトをGeography Markup Language(GML 2.0)フラグメントに変換します。

パラメータ

geometry

GMLフラグメントを戻すジオメトリを指定します。

使用上の注意

このファンクションは、円、円弧を含むジオメトリ、LRSジオメトリ、またはSDO_ETYPE値が0(タイプ0(ゼロ)要素)であるジオメトリは変換しません。これらを指定した場合、空のCLOBが戻されます。

このファンクションは、Open GIS実装仕様に定義されたいくつかのGMLジオメトリ・タイプに基づいて、入力ジオメトリをGMLフラグメントに変換します。

ポリゴンの定義には、Oracle9i以降のリリースのSpatialの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(ETYPE=1003)、次に0 (ゼロ)個以上の内側の境界要素が格納されます(ETYPE=2003)。穴のあるポリゴンでは、外側の境界をSDO_ORDINATES定義によって先に格納し、次に内側の境界の座標を格納する必要があります。

LRSジオメトリは、TO_GMLGEOMETRYファンクションに渡す前に、(SDO_LRS.CONVERT_TO_STD_GEOMファンクションまたはSDO_LRS.CONVERT_TO_STD_LAYERファンクションを使用して)標準ジオメトリに変換しておく必要があります。(CONVERT_TO_STD_GEOMファンクションとTO_GMLGEOMETRYファンクションを併用する例については、「例」を参照してください。)

円弧または円は、TO_GMLGEOMETRYファンクションに渡す前に、(SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用して)稠密化しておくか、または(SDO_GEOM.SDO_BUFFERファンクションを使用して)ポリゴンとして表現しておく必要があります。(SDO_ARC_DENSIFYファンクションとTO_GMLGEOMETRYファンクションを併用する例については、「例」を参照してください。)

ラベル点は廃棄されます。したがって、ジオメトリがSDO_POINT、SDO_ELEM_INFOおよびSDO_ORDINATESフィールドに値を持つ場合、SDO_POINTはGMLフラグメントに出力されません。

SDO_SRID値は、srsName="SDO:<srid>"の形式で出力されます。たとえば、"SDO:8307"はSDO_SRID値が8307であることを示し、"SDO:"はSDO_SRID値がNULLであることを示します。SDO_SRID値の妥当性または一貫性チェックは行われません。たとえば、値がMDSYS.CS_SRS表に存在するかどうか、またはUSER_SDO_GEOM_METADATAビューのレイヤーのSRID値と競合するかどうかの確認は行われません。

NLS_NUMERIC_CHARACTERS設定で小数点文字に','(カンマ)が指定されている場合でも、座標は常に、<coordinates>タグ、decimal='.'、cs=','(座標セパレータにカンマ)、およびts=' '(組セパレータに空白)を使用して出力されます。

GML出力の形式は整えられないため、タグの改行またはインデントは行われません。SQL*Plusで戻されるCLOBの内容を確認するには、TO_CHAR()ファンクションを使用するか、またはSQL*PlusパラメータのLONGを適切な値に設定してください(SET LONG 40000など)。形式を整えてGMLを出力するか、またはSQLXやOracle XML DBファンクション(XMLELEMENTなど)でTO_GMLGEOMETRYの戻り値を使用するには、XMLTYPE (clobval CLOB)コンストラクタを使用してください。

例

次の例では、COLA_MARKETS表のcola_bジオメトリのGMLフラグメントを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- Convert cola_b geometry to GML fragment.
SELECT TO_CHAR(SDO_UTIL.TO_GMLGEOMETRY(shape)) AS GmlGeometry
FROM COLA_MARKETS c WHERE c.name = 'cola_b';

GMLGEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml"><gml:outerBou
ndaryIs><gml:LinearRing><gml:coordinates decimal="." cs="," ts=" ">5,1 8,1 8,6 5
,7 5,1 </gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>

次の例では、COLA_MARKETS表のcola_dジオメトリの円弧を稠密化したGMLフラグメントを戻します。(例では、2.1項の定義およびデータを使用しています。)

SET LONG 40000
SELECT XMLTYPE(SDO_UTIL.TO_GMLGEOMETRY(
SDO_GEOM.SDO_ARC_DENSIFY(c.shape, m.diminfo, 'arc_tolerance=0.05')))
AS GmlGeometry FROM cola_markets c, user_sdo_geom_metadata m
WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE'
AND c.name = 'cola_d';

GMLGEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml"><gml:outerBou
ndaryIs><gml:LinearRing><gml:coordinates decimal="." cs="," ts=" ">8,7 8.7653668
6473018,7.15224093497743 9.4142135623731,7.58578643762691 9.84775906502257,8.234
63313526982 10,9 9.84775906502257,9.76536686473018 9.4142135623731,10.4142135623
731 8.76536686473018,10.8477590650226 8,11 7.23463313526982,10.8477590650226 6.5
8578643762691,10.4142135623731 6.15224093497743,9.76536686473018 6,9 6.152240934
97743,8.23463313526982 6.58578643762691,7.5857864376269 7.23463313526982,7.15224
093497743 8,7 </gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Pol
ygon>

次の例では、LRSジオメトリを標準ジオメトリに変換して、そのジオメトリのGMLフラグメントを戻します。(例では、7.7項の定義およびデータを使用しています。)

SET LONG 40000
-- Convert LRS geometry to standard geometry before using TO_GMLGEOMETRY.
SELECT XMLTYPE(SDO_UTIL.TO_GMLGEOMETRY(
SDO_LRS.CONVERT_TO_STD_GEOM(route_geometry)))
AS GmlGeometry FROM lrs_routes a WHERE a.route_id = 1;

GMLGEOMETRY
--------------------------------------------------------------------------------
<gml:LineString srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">
<gml:coordinates decimal="." cs="," ts=" ">2,2 2,4 8,4 12,4 12,10 8,10 5,14 </
gml:coordinates>
</gml:LineString>

次の例では、様々なジオメトリ・タイプのGMLフラグメントを戻します。

-- Point geometry with coordinates in SDO_ORDINATES. Note the
-- coordinates in the GML are (10,10) and the values in the
-- SDO_POINT field are discarded.
SELECT TO_CHAR(
SDO_UTIL.TO_GMLGEOMETRY(sdo_geometry(2001, 8307,
sdo_point_type(-80, 70, null),
sdo_elem_info_array(1,1,1), sdo_ordinate_array(10, 10)))
)
AS GmlGeometry FROM DUAL;

GMLGEOMETRY
--------------------------------------------------------------------------------
<gml:Point srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml:coordi
nates decimal="." cs="," ts=" ">10,10 </gml:coordinates></gml:Point>

-- Multipolygon
SET LONG 40000
SELECT SDO_UTIL.TO_GMLGEOMETRY(
sdo_geometry(2007, 8307, null,
sdo_elem_info_array(1,1003,1, 13,1003,1, 23,1003,3),
sdo_ordinate_array(10.10,10.20, 20.50,20.10, 30.30,30.30, 40.10,40.10,
30.50, 30.20, 10.10, 10.20,
5,5, 5,6, 6,6, 6,5, 5,5, 7,7, 8,8 ))
)
AS GmlGeometry FROM DUAL;

GMLGEOMETRY
--------------------------------------------------------------------------------
<gml:MultiPolygon srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml
:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinate
s decimal="." cs="," ts=" ">10.1,10.2 20.5,20.1 30.3,30.3 40.1,40.1 30.5,30.2 10
.1,10.2 </gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon><
/gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:Lin
earRing><gml:coordinates decimal="." cs="," ts=" ">5.0,5.0 5.0,6.0 6.0,6.0 6.0,5
.0 5.0,5.0 </gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygo
n></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:
LinearRing><gml:coordinates decimal="." cs="," ts=" ">7.0,7.0 8.0,7.0 8.0,8.0 7.
0,8.0 7.0,7.0 </gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Pol
ygon></gml:polygonMember></gml:MultiPolygon>

SQL> SET LONG 80

-- Rectangle (geodetic)
SELECT TO_CHAR(
SDO_UTIL.TO_GMLGEOMETRY(sdo_geometry(2003, 8307, null,
sdo_elem_info_array(1,1003,3),
sdo_ordinate_array(10.10,10.10, 20.10,20.10 )))
)
AS GmlGeometry FROM DUAL;

GMLGEOMETRY
--------------------------------------------------------------------------------
<gml:Box srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml:coordina
tes decimal="." cs="," ts=" ">10.1,10.1 20.1,20.1 </gml:coordinates></gml:Box>

-- Polygon with holes
SELECT TO_CHAR(
SDO_UTIL.TO_GMLGEOMETRY(sdo_geometry(2003, 262152, null,
sdo_elem_info_array(1,1003,3, 5, 2003, 1, 13, 2003, 1),
sdo_ordinate_array(10.10,10.20, 40.50, 41.10, 30.30, 30.30, 30.30,
40.10, 40.10, 40.10, 30.30, 30.30, 5, 5, 5, 6, 6, 6, 6, 5, 5, 5 )))
)
AS GmlGeometry FROM DUAL;

GMLGEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:262152" xmlns:gml="http://www.opengis.net/gml"><gml:ou
terBoundaryIs><gml:LinearRing><gml:coordinates decimal="." cs="," ts=" ">10.1,10
.2, 40.5,10.2, 40.5,41.1, 10.1,41.1, 10.1,10.2 </gml:coordinates></gml:LinearRin
g></gml:outerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates de
cimal="." cs="," ts=" ">30.3,30.3 30.3,40.1 40.1,40.1 30.3,30.3 </gml:coordinate
s></gml:LinearRing></gml:innerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><g
ml:coordinates decimal="." cs="," ts=" ">5,5 5,6 6,6 6,5 5,5 </gml:coordinates><
/gml:LinearRing></gml:innerBoundaryIs></gml:Polygon>

-- Creating an XMLTYPE from the GML fragment. Also useful for "pretty
-- printing" the GML output.
SET LONG 40000
SELECT XMLTYPE(
SDO_UTIL.TO_GMLGEOMETRY(sdo_geometry(2003, 262152, null,
sdo_elem_info_array(1,1003,1, 11, 2003, 1, 21, 2003, 1),
sdo_ordinate_array(10.10,10.20, 40.50,10.2, 40.5,41.10, 10.1,41.1,
10.10, 10.20, 30.30,30.30, 30.30, 40.10, 40.10, 40.10, 40.10, 30.30,
30.30, 30.30, 5, 5, 5, 6, 6, 6, 6, 5, 5, 5 )))
)
AS GmlGeometry FROM DUAL;

GMLGEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:262152" xmlns:gml="http://www.opengis.net/gml"><gml:ou
terBoundaryIs><gml:LinearRing><gml:coordinates decimal="." cs="," ts=" ">10.1,10
.2 40.5,10.2 40.5,41.1 10.1,41.1 10.1,10.2 </gml:coordinates></gml:LinearRing></
gml:outerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates decima
l="." cs="," ts=" ">30.3,30.3 30.3,40.1 40.1,40.1 40.1,30.3 30.3,30.3 </gml:coor
dinates></gml:LinearRing></gml:innerBoundaryIs><gml:innerBoundaryIs><gml:LinearR
ing><gml:coordinates decimal="." cs="," ts=" ">5,5 5,6 6,6 6,5 5,5 </gml:coordin
ates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon>

次の例では、TO_GMLGEOMETRYファンクションと、Oracle XML DB XMLTYPEデータ型、XMLELEMENTファンクションおよびXMLFORESTファンクションを併用します。

SELECT xmlelement("State", xmlattributes(
'http://www.opengis.net/gml' as "xmlns:gml"),
xmlforest(state as "Name", totpop as "Population",
xmltype(sdo_util.to_gmlgeometry(geom)) as "gml:geometryProperty"))
AS theXMLElements FROM states WHERE state_abrv in ('DE', 'UT');

THEXMLELEMENTS
--------------------------------------------------------------------------------
<State xmlns:gml="http://www.opengis.net/gml">
<Name>Delaware</Name>
<Population>666168</Population>
<gml:geometryProperty>
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates decimal="." cs="," ts=" ">-75.788704,39.721699 -75.78
8704,39.6479 -75.767014,39.377106 -75.76033,39.296497 -75.756294,39.24585 -75.74
8016,39.143196 -75.722961,38.829895 -75.707695,38.635166 -75.701912,38.560619 -7
5.693871,38.460011 -75.500336,38.454002 -75.341614,38.451855 -75.049339,38.45165
3 -75.053841,38.538429 -75.06015,38.605465 -75.063263,38.611275 -75.065308,38.62
949 -75.065887,38.660919 -75.078697,38.732403 -75.082527,38.772045 -75.091667,38
.801208 -75.094185,38.803699 -75.097572,38.802986 -75.094116,38.793579 -75.09926
6,38.78756 -75.123619,38.781784 -75.137962,38.782703 -75.18692,38.803772 -75.215
019,38.831547 -75.23735,38.849014 -75.260498,38.875 -75.305908,38.914673 -75.316
399,38.930309 -75.317284,38.93676 -75.312851,38.945576 -75.312859,38.945618 -75.
31205,38.967804 -75.31778,38.986012 -75.341431,39.021233 -75.369606,39.041359 -7
5.389229,39.051422 -75.40181,39.06702 -75.401306,39.097713 -75.411369,39.148029
-75.407845,39.175201 -75.396271,39.187778 -75.39225,39.203377 -75.40181,39.23104
9 -75.402817,39.253189 -75.409355,39.264759 -75.434006,39.290424 -75.439041,39.3
13065 -75.453125,39.317093 -75.457657,39.326653 -75.469231,39.330677 -75.486336,
39.341743 -75.494888,39.354324 -75.504448,39.357346 -75.51284,39.366291 -75.5129
24,39.366482 -75.523773,39.392052 -75.538651,39.415707 -75.56749,39.436436 -75.5
9137,39.463696 -75.592941,39.471806 -75.590019,39.488026 -75.587311,39.496136 -7
5.5774,39.508076 -75.554192,39.506947 -75.528442,39.498005 -75.530373,39.510303
-75.527145,39.531326 -75.52803,39.535168 -75.53437,39.540592 -75.519386,39.55528
6 -75.512291,39.567505 -75.515587,39.580639 -75.528046,39.584 -75.538269,39.5935
67 -75.554016,39.601727 -75.560143,39.622578 -75.556602,39.6348 -75.549599,39.63
7699 -75.542397,39.645901 -75.535507,39.647099 -75.514999,39.668499 -75.507523,3
9.69685 -75.496597,39.701302 -75.488914,39.714722 -75.477997,39.714901 -75.47550
2,39.733501 -75.467972,39.746975 -75.463707,39.761101 -75.448494,39.773857 -75.4
38301,39.783298 -75.405701,39.796101 -75.415405,39.801678 -75.454102,39.820202 -
75.499199,39.833199 -75.539703,39.8381 -75.5802,39.838417 -75.594017,39.837345 -
75.596107,39.837044 -75.639488,39.82893 -75.680145,39.813839 -75.71096,39.796352
-75.739716,39.772881 -75.760689,39.74712 -75.774101,39.721699 -75.788704,39.721
699 </gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</gml:geometryProperty>
</State>

<State xmlns:gml="http://www.opengis.net/gml">
<Name>Utah</Name>
<Population>1722850</Population>
<gml:geometryProperty>
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates decimal="." cs="," ts=" ">-114.040871,41.993805 -114.
038803,41.884899 -114.041306,41 -114.04586,40.116997 -114.046295,39.906101 -114.
046898,39.542801 -114.049026,38.67741 -114.049339,38.572968 -114.049095,38.14864
-114.0476,37.80946 -114.05098,37.746284 -114.051666,37.604805 -114.052025,37.10
3989 -114.049797,37.000423 -113.484375,37 -112.898598,37.000401 -112.539604,37.0
00683 -112,37.000977 -111.412048,37.001514 -111.133018,37.00079 -110.75,37.00320
1 -110.5,37.004265 -110.469505,36.998001 -110,36.997967 -109.044571,36.999088 -1
09.045143,37.375 -109.042824,37.484692 -109.040848,37.881176 -109.041405,38.1530
27 -109.041107,38.1647 -109.059402,38.275501 -109.059296,38.5 -109.058868,38.719
906 -109.051765,39 -109.050095,39.366699 -109.050697,39.4977 -109.050499,39.6605
-109.050156,40.222694 -109.047577,40.653641 -109.0494,41.000702 -109.2313,41.00
2102 -109.534233,40.998184 -110,40.997398 -110.047768,40.997696 -110.5,40.994801
-111.045982,40.998013 -111.045815,41.251774 -111.045097,41.579899 -111.045944,4
2.001633 -111.506493,41.999588 -112.108742,41.997677 -112.16317,41.996784 -112.1
72562,41.996643 -112.192184,42.001244 -113,41.998314 -113.875,41.988091 -114.040
871,41.993805 </gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</gml:geometryProperty>
</State>

関連項目

SDO_UTIL.TO_GML311GEOMETRY

SDO_UTIL.TO_KMLGEOMETRY

構文

SDO_UTIL.TO_KMLGEOMETRY(

geometry IN SDO_GEOMETRY

) RETURN CLOB;

説明

Spatialジオメトリ・オブジェクトをKML (Keyhole Markup Language)ドキュメントに変換します。

パラメータ

geometry

KMLドキュメントを戻すジオメトリを指定します。

使用上の注意

このファンクションは、円、円弧を含むジオメトリ、LRSジオメトリ、またはSDO_ETYPE値が0(タイプ0(ゼロ)要素)であるジオメトリは変換しません。これらを指定した場合、空のCLOBが戻されます。

ポリゴンの定義には、Oracle9i以降のリリースのSpatialの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(ETYPE=1003)、次に0 (ゼロ)個以上の内側の境界要素が格納されます(ETYPE=2003)。穴のあるポリゴンでは、外側の境界をSDO_ORDINATES定義によって先に格納し、次に内側の境界の座標を格納する必要があります。

LRSジオメトリは、TO_KMLGEOMETRYファンクションに渡す前に、(SDO_LRS.CONVERT_TO_STD_GEOMファンクションまたはSDO_LRS.CONVERT_TO_STD_LAYERファンクションを使用して)標準ジオメトリに変換しておく必要があります。

円弧または円は、TO_KMLGEOMETRYファンクションに渡す前に、(SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用して)稠密化しておくか、または(SDO_GEOM.SDO_BUFFERファンクションを使用して)ポリゴンとして表現しておく必要があります。

ラベル点は廃棄されます。したがって、ジオメトリがSDO_POINT、SDO_ELEM_INFOおよびSDO_ORDINATESフィールドに値を持つ場合、SDO_POINTはKMLドキュメントに出力されません。

KML 2.1ではソリッドがサポートされていないため、ソリッド・ジオメトリは、KML MultiGeometryオブジェクトに変換されます。その後、MultiGeometryに対してSDO_UTIL.FROM_KMLGEOMETRYファンクションを使用した場合、結果としてOracle Spatialソリッド・ジオメトリは生成されません(つまり、SDO_GTYPE値は、SOLIDまたはMULTISOLIDのジオメトリ・タイプを反映しません)。

KML出力の形式は整えられないため、タグの改行またはインデントは行われません。SQL*Plusで戻されるCLOBの内容を確認するには、TO_CHAR()ファンクションを使用するか、またはSQL*PlusパラメータのLONGを適切な値に設定してください(SET LONG 2000など)。形式を整えてGMLを出力するか、またはSQLXやOracle XML DBファンクション(XMLELEMENTなど)でTO_KMLGEOMETRYの戻り値を使用するには、XMLTYPE (clobval CLOB)コンストラクタを使用してください。

例

次の例では、KML形式への変換と逆変換を示します。(例では、2.1項の特にCOLA_MARKETS表のcola_cジオメトリについて、その定義およびデータを使用しています。)

-- Convert cola_c geometry to a KML document; convert that result to
-- a spatial geometry.
set long 2000;
DECLARE
kmlgeom CLOB;
val_result VARCHAR2(5);
geom_result SDO_GEOMETRY;
geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_c';

-- To KML geometry
kmlgeom := SDO_UTIL.TO_KMLGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To KML geometry result = ' || TO_CHAR(kmlgeom));

-- From KML geometry
geom_result := SDO_UTIL.FROM_KMLGEOMETRY(kmlgeom);
-- Validate the returned geometry.
val_result := SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(geom_result, 0.005);
DBMS_OUTPUT.PUT_LINE('Validation result = ' || val_result);

END;
/
To KML geometry result =
<Polygon><extrude>0</extrude><tessellate>0</tessellate><altitudeMode>relativeToG
round</altitudeMode><outerBoundaryIs><LinearRing><coordinates>3.0,3.0 6.0,3.0
6.0,5.0 4.0,5.0 3.0,3.0 </coordinates></LinearRing></outerBoundaryIs></Polygon>
Validation result = TRUE

関連項目

- SDO_UTIL.FROM_KMLGEOMETRY

SDO_UTIL.TO_WKBGEOMETRY

構文

SDO_UTIL.TO_WKBGEOMETRY(

geometry IN SDO_GEOMETRY

) RETURN BLOB;

説明

Spatialジオメトリ・オブジェクトをwell-knownバイナリ(WKB)形式に変換します。

パラメータ

geometry

WKB形式に変換するSDO_GEOMETRYオブジェクトを指定します。

使用上の注意

入力ジオメトリは、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownバイナリ(WKB)形式に変換されます。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

WKB形式のジオメトリをSDO_GEOMETRYオブジェクトに変換するには、SDO_UTIL.FROM_WKBGEOMETRYファンクションを使用します。

例

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、2.1項の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
wkbgeom BLOB;
wktgeom CLOB;
val_result VARCHAR2(5);
geom_result SDO_GEOMETRY;
geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';

-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));

-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);

-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);

END;/

To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE
WKT validation result = TRUE

関連項目

- SDO_UTIL.FROM_WKBGEOMETRY

- SDO_UTIL.FROM_WKTGEOMETRY

- SDO_UTIL.TO_WKTGEOMETRY

- SDO_UTIL.VALIDATE_WKBGEOMETRY

- SDO_UTIL.VALIDATE_WKTGEOMETRY

SDO_UTIL.TO_WKTGEOMETRY

構文

SDO_UTIL.TO_WKTGEOMETRY(

geometry IN SDO_GEOMETRY

) RETURN CLOB;

説明

Spatialジオメトリ・オブジェクトをwell-knownテキスト(WKT)形式に変換します。

パラメータ

geometry

WKT形式に変換するSDO_GEOMETRYオブジェクトを指定します。

使用上の注意

入力ジオメトリは、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownテキスト(WKT)形式に変換されます。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

WKT形式のジオメトリをSDO_GEOMETRYオブジェクトに変換するには、SDO_UTIL.FROM_WKTGEOMETRYファンクションを使用します。

例

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、2.1項の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
wkbgeom BLOB;
wktgeom CLOB;
val_result VARCHAR2(5);
geom_result SDO_GEOMETRY;
geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';

-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));

-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);

-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);

END;/

To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE
WKT validation result = TRUE

関連項目

- SDO_UTIL.FROM_WKBGEOMETRY

- SDO_UTIL.FROM_WKTGEOMETRY

- SDO_UTIL.TO_WKBGEOMETRY

- SDO_UTIL.VALIDATE_WKBGEOMETRY

- SDO_UTIL.VALIDATE_WKTGEOMETRY

SDO_UTIL.VALIDATE_WKBGEOMETRY

構文

SDO_UTIL.VALIDATE_WKBGEOMETRY(

geometry IN BLOB

) RETURN VARCHAR2;

説明

標準well-knownバイナリ(WKB)形式の入力ジオメトリが有効かどうかを確認し、有効な場合は文字列TRUE、無効な場合は文字列FALSEを戻します。

パラメータ

geometry

有効かどうかを確認するWKB形式のジオメトリを指定します。

使用上の注意

入力ジオメトリが有効であるためには、その形式が、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownバイナリ(WKB)形式であることが必要です。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

well-knownテキスト(WKT)形式のジオメトリが有効かどうかを確認するには、SDO_UTIL.VALIDATE_WKTGEOMETRYファンクションを使用します。

例

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、2.1項の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
wkbgeom BLOB;
wktgeom CLOB;
val_result VARCHAR2(5);
geom_result SDO_GEOMETRY;
geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';

-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));

-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);

-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);

END;/

To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE
WKT validation result = TRUE

関連項目

- SDO_UTIL.FROM_WKBGEOMETRY

- SDO_UTIL.FROM_WKTGEOMETRY

- SDO_UTIL.TO_WKBGEOMETRY

- SDO_UTIL.TO_WKTGEOMETRY

- SDO_UTIL.VALIDATE_WKTGEOMETRY

SDO_UTIL.VALIDATE_WKTGEOMETRY

構文

SDO_UTIL.VALIDATE_WKTGEOMETRY(

geometry IN CLOB

) RETURN VARCHAR2;

または

SDO_UTIL.VALIDATE_WKTGEOMETRY(

geometry IN VARCHAR2

) RETURN VARCHAR2;

説明

標準well-knownテキスト(WKT)形式のCLOB型またはVARCHAR2型の入力ジオメトリが有効かどうかを確認し、有効な場合は文字列TRUE、無効な場合は文字列FALSEを戻します。

パラメータ

geometry

有効かどうかを確認するWKT形式のジオメトリを指定します。

使用上の注意

入力ジオメトリが有効であるためには、その形式が、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownテキスト(WKT)形式であることが必要です。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

well-knownバイナリ(WKB)形式のジオメトリが有効かどうかを確認するには、SDO_UTIL.VALIDATE_WKBGEOMETRYファンクションを使用します。

例

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、2.1項の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
wkbgeom BLOB;
wktgeom CLOB;
val_result VARCHAR2(5);
geom_result SDO_GEOMETRY;
geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';

-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));

-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);

-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);

END;/

To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE
WKT validation result = TRUE

関連項目

- SDO_UTIL.FROM_WKBGEOMETRY

- SDO_UTIL.FROM_WKTGEOMETRY

- SDO_UTIL.TO_WKBGEOMETRY

- SDO_UTIL.TO_WKTGEOMETRY

- SDO_UTIL.VALIDATE_WKBGEOMETRY

33 SDO_WFS_LOCKパッケージ(WFS)

MDSYS.SDO_WFS_LOCKパッケージには、フィーチャ表の登録と登録解除を行うためにWFSをサポートするサブプログラムが含まれています。フィーチャ表を登録するとWFSトランザクション・ロッキングに対して表が有効になり、フィーチャ表を登録解除するとWFSトランザクション・ロッキングに対して表が無効になります。

この章で説明するサブプログラムを使用する場合は、Web Feature Services(WFS)の概念および使用方法を理解しておく必要があります(第15章を参照)。

表33-1にWFSをサポートするサブプログラムを示します。

表33-1 WFSをサポートするサブプログラム

サブプログラム

説明

SDO_WFS_LOCK.EnableDBTxns

WFS表に対してデータベース・トランザクションを有効にします。

SDO_WFS_LOCK.RegisterFeatureTable

フィーチャ表を登録します(WFSトランザクション・ロッキングに対してフィーチャ表を有効にします)。

SDO_WFS_LOCK.UnRegisterFeatureTable

フィーチャ表を登録解除します(WFSトランザクション・ロッキングに対してフィーチャ表を無効にします)。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

SDO_WFS_LOCK.EnableDBTxns

構文

SDO_WFS_LOCK.EnableDBTxns();

説明

WFS表に対してデータベース・トランザクションを有効にします。

パラメータ

なし。

使用上の注意

このプロシージャは、セッションの終わりまで、WFS表に対するデータベース・トランザクションに課せられるWFS-T標準の制限を上書きするため、現行のセッションIDを使用する任意のトランザクションが、WFS表に対して更新および削除操作を行うことができます。Oracle Databaseトリガーは引き続き、現行のトランザクションが行の変更を許可される前にWFSのロックをチェックするので、WFSトランザクションが行をロックしている場合、トリガーは操作の実行を許可しません。ただし、現行の行に対するWFSのロックが存在しない場合、トリガーは現行のトランザクションによる行の変更を許可します。

Oracle Workspace Managerを使用してWFS表をバージョン対応にしている場合(15.5項を参照)は、このプロシージャをコールして特定の操作を実行する必要があります。ただし、WFS表でWorkspace Managerを使用していない場合でも、このプロシージャを使用することはできます。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、現行のセッションの残りの期間中、WFS表に対するデータベース・トランザクションを有効にします。

BEGIN
SDO_WFS_LOCK.enableDBTxns;
END;
/

SDO_WFS_LOCK.RegisterFeatureTable

構文

SDO_WFS_LOCK.RegisterFeatureTable(

username IN VARCHAR2,

tablename IN VARCHAR2);

説明

フィーチャ表を登録します(WFSトランザクション・ロッキングに対してフィーチャ表を有効にします)。

パラメータ

username

登録するフィーチャ表を所有するデータベース・ユーザーの名前を指定します。

tablename

登録するフィーチャ表の名前を指定します。

使用上の注意

このプロシージャによって、WFSトランザクションのセマンティクスを実装するために必要な制約がフィーチャ表に確実に関連付けられます。

Web Feature Servicesのサポートについては、第15章を参照してください。

バージョンに対応していない表を登録解除するには、SDO_WFS_LOCK.UnRegisterFeatureTableプロシージャを使用します。

例

次の例では、ユーザーWFS_REL_USERが所有するCOLA_MARKETS_CSという名前のフィーチャ表を登録します。

BEGIN
SDO_WFS_LOCK.registerFeatureTable('wfs_rel_user', 'cola_markets_cs');
END;
/

SDO_WFS_LOCK.UnRegisterFeatureTable

構文

SDO_WFS_LOCK.UnRegisterFeatureTable(

username IN VARCHAR2,

tablename IN VARCHAR2);

説明

フィーチャ表を登録解除します(WFSトランザクション・ロッキングに対してフィーチャ表を無効にします)。

パラメータ

username

登録解除するフィーチャ表を所有するデータベース・ユーザーの名前を指定します。

tablename

登録解除するフィーチャ表の名前を指定します。

使用上の注意

このプロシージャは、フィーチャ表に対して、WFSトランザクションのセマンティクスを実装するための制約を無効にします。

フィーチャ表は、SDO_WFS_LOCK.RegisterFeatureTableプロシージャへのコールで登録されている必要があります。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、ユーザーWFS_REL_USERが所有するCOLA_MARKETS_CSという名前のフィーチャ表を登録解除します。

BEGIN
SDO_WFS_LOCK.unRegisterFeatureTable('wfs_rel_user', 'cola_markets_cs');
END;
/

34 SDO_WFS_PROCESSパッケージ(WFSの処理)

MDSYS.SDO_WFS_PROCESSパッケージには、Web Feature Servicesのサポートに関連する各種処理操作を行うサブプログラムが含まれています。

この章で説明するサブプログラムを使用する場合は、Web Feature Servicesの概念および使用方法を理解しておく必要があります(第15章を参照)。

表34-1にWFS処理のサブプログラムを示します。

表34-1 WFSの処理操作のサブプログラム

サブプログラム

説明

SDO_WFS_PROCESS.DropFeatureType

指定したフィーチャ・タイプを削除します。

SDO_WFS_PROCESS.DropFeatureTypes

指定した名前空間内のすべてのフィーチャ・タイプを削除します。

SDO_WFS_PROCESS.GenCollectionProcs

コレクションベースの列(例: VARRAYまたはネストされた表)を含むリレーショナル・フィーチャ・タイプのヘルパー・プロシージャを生成します。

SDO_WFS_PROCESS.GetFeatureTypeId

指定したフィーチャ・タイプのフィーチャ・タイプIDを取得します。

SDO_WFS_PROCESS.GrantFeatureTypeToUser

フィーチャ・タイプへのアクセス権限をデータベース・ユーザーに付与します。

SDO_WFS_PROCESS.GrantMDAccessToUser

WFSメタデータ表へのアクセス権限をデータベース・ユーザーに付与します。

SDO_WFS_PROCESS.InsertCapabilitiesInfo

機能テンプレート情報を挿入します。

SDO_WFS_PROCESS.InsertFtDataUpdated

データベースで1つ以上のフィーチャ・インスタンスのデータが更新されたことを示す通知を挿入します。

SDO_WFS_PROCESS.InsertFtMDUpdated

データベースでフィーチャ・タイプのメタデータが更新されたことを示す通知を挿入します。

SDO_WFS_PROCESS.PopulateFeatureTypeXMLInfo

XMLType列を持つリレーショナル・フィーチャ・タイプのメタデータを移入します。

SDO_WFS_PROCESS.PublishFeatureType

フィーチャ・タイプをパブリッシュします(フィーチャ・タイプに関連するメタデータを登録します)。

SDO_WFS_PROCESS.RegisterMTableView

フィーチャ・インスタンスとしての複数表ビュー・コンテンツのパブリッシュを有効にします。

SDO_WFS_PROCESS.RevokeFeatureTypeFromUser

フィーチャ・タイプへのアクセス権限をデータベース・ユーザーから取り消します。

SDO_WFS_PROCESS.RevokeMDAccessFromUser

WFSメタデータ表へのアクセス権限をデータベース・ユーザーから取り消します。

SDO_WFS_PROCESS.UnRegisterMTableView

フィーチャ・インスタンスとしての複数表ビュー・コンテンツのパブリッシュを無効にします。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

SDO_WFS_PROCESS.DropFeatureType

構文

SDO_WFS_PROCESS.DropFeatureType(

ftnsUrl IN VARCHAR2,

ftName IN VARCHAR2);

説明

指定したフィーチャ・タイプを削除します。

パラメータ

ftnsUrl

フィーチャ・タイプの名前空間のURL(Uniform Resource Locator)を指定します。

ftName

フィーチャ・タイプの名前を指定します。

使用上の注意

複数表ビューからのコンテンツを持つフィーチャ・タイプを削除する場合は、SDO_WFS_PROCESS.DropFeatureTypeプロシージャをコールする前に、SDO_WFS_PROCESS.UnRegisterMTableViewプロシージャをコールする必要があります。

名前空間内のすべてのフィーチャ・タイプを削除する場合は、SDO_WFS_PROCESS.DropFeatureTypesプロシージャを使用できます。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、指定した名前空間にあるCOLAというフィーチャ・タイプを削除します。

BEGIN
SDO_WFS_PROCESS.dropFeatureType('http://www.example.com/myns','COLA');
END;
/

SDO_WFS_PROCESS.DropFeatureTypes

構文

SDO_WFS_PROCESS.DropFeatureTypes(

ftnsUrl IN VARCHAR2);

説明

指定した名前空間内のすべてのフィーチャ・タイプを削除します。

パラメータ

ftnsUrl

名前空間のURL(Uniform Resource Locator)を指定します。

使用上の注意

名前空間内の単一のフィーチャ・タイプを削除する場合は、SDO_WFS_PROCESS.DropFeatureTypeプロシージャを使用します。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、指定した名前空間内のすべてのフィーチャ・タイプを削除します。

BEGIN
SDO_WFS_PROCESS.dropFeatureTypes('http://www.example.com/myns');
END;
/

SDO_WFS_PROCESS.GenCollectionProcs

構文

SDO_WFS_PROCESS.GenCollectionProcs();

説明

コレクションベースの列(例: VARRAYまたはネストされた表)を含むリレーショナル・フィーチャ・タイプのヘルパー・プロシージャを生成します。

パラメータ

なし。

使用上の注意

フィーチャ表にコレクションベースの列(例: VARRAYまたはネストされた表)で定義されたフィーチャが含まれている場合は、このプロシージャを使用します。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、コレクションベースの列を持つリレーショナル・フィーチャ・タイプのヘルパー・プロシージャを生成します。

BEGIN
SDO_WFS_PROCESS.GenCollectionProcs;
END;
/

SDO_WFS_PROCESS.GetFeatureTypeId

構文

SDO_WFS_PROCESS.GetFeatureTypeId(

ftnsUrl IN VARCHAR2,

ftName IN VARCHAR2) RETURN NUMBER;

説明

指定したフィーチャ・タイプのフィーチャ・タイプIDを取得します。

パラメータ

ftnsUrl

フィーチャ・タイプの名前空間のURL(Uniform Resource Locator)を指定します。

ftName

フィーチャ・タイプの名前を指定します。

使用上の注意

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、COLAというフィーチャ・タイプのフィーチャ・タイプIDを取得します。

DECLARE
ftid number;
BEGIN
ftId := SDO_WFS_PROCESS.GetFeatureTypeId('http://www.example.com/myns','COLA');
END;
/

SDO_WFS_PROCESS.GrantFeatureTypeToUser

構文

SDO_WFS_PROCESS.GrantFeatureTypeToUser(

ftnsUrl IN VARCHAR2,

ftName IN VARCHAR2,

userName IN VARCHAR2);

説明

フィーチャ・タイプへのアクセス権限をデータベース・ユーザーに付与します。

パラメータ

ftnsUrl

フィーチャ・タイプの名前空間のURL(Uniform Resource Locator)を指定します。

ftName

フィーチャ・タイプの名前を指定します。

userName

データベース・ユーザーの名前を指定します。

使用上の注意

フィーチャ・タイプへのアクセス権限をデータベース・ユーザーから取り消すには、SDO_WFS_PROCESS.RevokeFeatureTypeFromUserプロシージャを使用します。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、COLAというフィーチャ・タイプへのアクセス権限をユーザーSMITHに付与します。

BEGIN
SDO_WFS_PROCESS.GrantFeatureTypeToUser('http://www.example.com/myns','COLA',
'SMITH');
END;
/

SDO_WFS_PROCESS.GrantMDAccessToUser

構文

SDO_WFS_PROCESS.GrantMDAccessToUser(

userName IN VARCHAR2);

説明

Web Feature Serviceメタデータ表へのアクセス権限をデータベース・ユーザーに付与します。

パラメータ

userName

データベース・ユーザーの名前を指定します。

使用上の注意

このプロシージャをコールするには、DBAロールを持つユーザーとしてデータベースに接続する必要があります。

Web Feature Serviceメタデータ表へのアクセス権限をデータベース・ユーザーから取り消すには、SDO_WFS_PROCESS.RevokeMDAccessFromUserプロシージャを使用します。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、Web Feature Serviceメタデータ表へのアクセス権限をWFS_REL_USERというデータベース・ユーザーに付与します。

BEGIN
SDO_WFS_PROCESS.GrantMDAccessToUser('WFS_REL_USER');
END;
/

SDO_WFS_PROCESS.InsertCapabilitiesInfo

構文

SDO_WFS_PROCESS.InsertCapabilitiesInfo(

capabilitiesInfo IN XMLTYPE);

説明

機能テンプレート情報を挿入します。

パラメータ

capabilitiesInfo

機能のドキュメントを生成するために実行時に使用される、機能テンプレートのXML文書を指定します。

使用上の注意

機能のドキュメントは、実行時に、WFSメタデータのフィーチャ・タイプ情報を機能テンプレートとバインディングすることによって動的に生成されます。機能のドキュメントについては、15.2.1項を参照してください。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、機能テンプレート情報を挿入します。

BEGIN
SDO_WFS_PROCESS.insertCapabilitiesInfo(
xmltype(bfilename('WFSUSERDIR', 'capabilitiesTemplate.xml'),
nls_charset_id('AL32UTF8')));
END
/

SDO_WFS_PROCESS.InsertFtDataUpdated

構文

SDO_WFS_PROCESS.InsertFtDataUpdated(

ns IN VARCHAR2,

name IN VARCHAR2,

updatedRowList IN ROWPOINTERLIST,

updateTs IN TIMESTAMP);

説明

データベースで1つ以上のフィーチャ・インスタンスのデータが更新されたことを示す通知を挿入します。

パラメータ

ns

フィーチャ・タイプの名前空間を指定します。

name

フィーチャ・タイプの名前を指定します。

updatedRowList

更新されたフィーチャ・インスタンスのROWIDを指定します。

updateTS

データが更新された日時を指定します。

使用上の注意

このプロシージャは、WFSのキャッシュ・データを同期させるために使用します。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、COLA_MARKETS_CS表内の特定のROWIDと関連付けられたフィーチャ・インスタンスのデータがデータベースで更新されたことを示す通知を挿入します。

. . .
begin
updatedRowIdList:= . . . -- list of rowIds of the
--          WFS_REL_USER.COLA_MARKETS_CS table
--          that have been updated.
. . .
SDO_WFS_PROCESS.InsertFtDataUpdated(
'http://www.example.com/myns','COLA', updatedRowIdList, sysdate);
. . .
end;
/

SDO_WFS_PROCESS.InsertFtMDUpdated

構文

SDO_WFS_PROCESS.InsertFtMDUpdated(

ns IN VARCHAR2,

name IN VARCHAR2,

updateTs IN TIMESTAMP);

説明

データベースでフィーチャ・タイプのメタデータが更新されたことを示す通知を挿入します。

パラメータ

ns

フィーチャ・タイプの名前空間を指定します。

name

フィーチャ・タイプの名前を指定します。

updateTS

メタデータが更新された日時を指定します。

使用上の注意

このプロシージャは、WFSのキャッシュ・メタデータを同期させるために使用します。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、データベースでCOLAフィーチャ・タイプのメタデータが更新されたことを示す通知を挿入します。

begin
SDO_WFS_PROCESS.InsertFtMDUpdated(
'http://www.example.com/myns','COLA', sysdate);
end;
/

SDO_WFS_PROCESS.PopulateFeatureTypeXMLInfo

構文

SDO_WFS_PROCESS.PopulateFeatureTypeXMLInfo(

xmlColTypeXsd IN XMLTYPE,

fTypeId IN NUMBER,

columnName IN VARCHAR2,

objPathInfo IN MDSYS.STRINGLIST);

説明

XMLType列を持つリレーショナル・フィーチャ・タイプのメタデータを移入します。

パラメータ

xmlColTypeXsd

XMLType列を持つリレーショナル・フィーチャ・タイプのスキーマ定義を指定します。

fTypeId

XMLType列を持つリレーショナル・フィーチャ・タイプのIDを指定します。

columnName

フィーチャ表内のXMLType列の名前を指定します。

objPathInfo

パス情報を指定します。MDSYS.STRINGLIST型は、VARRAY(1000000) OF VARCHAR2(4000)として定義されます。

使用上の注意

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、ROADS.xsd内のXMLスキーマ定義で示され、DATACOLという名前のXMLType列に格納されているリレーショナル・フィーチャ・タイプのメタデータを移入します。

BEGIN
SDO_WFS_PROCESS.populateFeatureTypeXMLInfo(
xmltype(bfilename('WFSUSERDIR', 'ROADS.xsd'), nls_charset_id('AL32UTF8')),
1,
'DATACOL',
mdsys.StringList('METADATA'));
END;
/

SDO_WFS_PROCESS.PublishFeatureType

構文

SDO_WFS_PROCESS.PublishFeatureType(

dataSrc IN VARCHAR2,

ftNsUrl IN VARCHAR2,

ftName IN VARCHAR2,

ftNsAlias IN VARCHAR2,

featureDesc IN XMLTYPE,

schemaLocation IN VARCHAR2,

pkeyCol IN VARCHAR2,

columnInfo IN MDSYS.STRINGLIST,

pSpatialCol IN VARCHAR2,

featureMemberNs IN VARCHAR2,

featureMemberName IN VARCHAR2,

srsNs IN VARCHAR2,

srsNsAlias IN VARCHAR2,

mandatoryColumnInfo IN MDSYS.STRINGLIST);

または

SDO_WFS_PROCESS.PublishFeatureType(

dataSrc IN VARCHAR2,

ftNsUrl IN VARCHAR2,

ftName IN VARCHAR2,

ftNsAlias IN VARCHAR2,

featureDesc IN XMLTYPE,

schemaLocation IN VARCHAR2,

pkeyCol IN VARCHAR2,

columnInfo IN MDSYS.STRINGLIST,

pSpatialCol IN VARCHAR2,

featureMemberNs IN VARCHAR2,

featureMemberName IN VARCHAR2,

srsNs IN VARCHAR2,

srsNsAlias IN VARCHAR2,

viewTableName IN VARCHAR2,

viewTablepkeyCol IN VARCHAR2,

mandatoryColumnInfo IN MDSYS.STRINGLIST);

または

SDO_WFS_PROCESS.PublishFeatureType(

dataSrc IN VARCHAR2,

ftNsUrl IN VARCHAR2,

ftName IN VARCHAR2,

ftNsAlias IN VARCHAR2,

featureDesc IN XMLTYPE,

schemaLocation IN VARCHAR2,

pkeyCol IN VARCHAR2,

columnInfo IN MDSYS.STRINGLIST,

pSpatialCol IN VARCHAR2,

featureMemberNs IN VARCHAR2,

featureMemberName IN VARCHAR2,

srsNs IN VARCHAR2,

srsNsAlias IN VARCHAR2,

featureCollectionNs IN VARCHAR2,

featureCollectionName IN VARCHAR2,

isGML3 IN VARCHAR2,

formattedKeyCols IN MDSYS.STRINGLIST,

viewTableName IN VARCHAR2,

viewTablepkeyCol IN VARCHAR2,

viewTableFmtKeyCols IN VARCHAR2,

mandatoryColumnInfo IN MDSYS.STRINGLIST);

説明

フィーチャ・タイプをパブリッシュします(フィーチャ・タイプに関連するメタデータを登録します)。

パラメータ

dataSrc

空間フィーチャを含むフィーチャ表またはビューの名前を指定します。schema-name.table-nameまたはschema-name.view-nameの書式で指定する必要があります。つまり、表の所有者であるデータベース・ユーザーの名前が含まれている必要があります。

ftNsUrl

フィーチャ・タイプの名前空間のURL(Uniform Resource Locator)を指定します。

ftName

フィーチャ・タイプの名前を指定します。

ftNsAlias

フィーチャ・タイプの名前空間の別名を指定します。

featureDesc

機能のドキュメントにXMLTYPE型のドキュメントとしてレポートされるフィーチャ・タイプの説明を指定します。

schemaLocation

フィーチャ・タイプXSD内のxsi:schemaLocation属性の移入に使用する文字列を指定します。このパラメータがNULLの場合、文字列が自動生成されます。

pkeyCol

dataSrcで識別されるフィーチャ表またはビューの主キー列を指定します。フィーチャ・タイプ表またはビューの主キーが複数列の場合は、主キーに含まれる各列をセミコロンで区切ります。例: 'COL1;COL2'

columnInfo

dataSrcで識別されるフィーチャ表内の各空間列(SDO_GEOMETRY型)に関連付けられたタイプの文字列を、MDSYS.STRINGLIST型のオブジェクトで指定します(例: WFS 1.0.nの場合、MDSYS.STRINGLIST('<GEOM_COL1_GEOMETRYTYPE>PolygonMemberType', '<GEOM_COL2_GEOMETRYTYPE>PointMemberType')など)。

columnInfoパラメータで指定される空間列については、「使用上の注意」を参照してください。

pSpatialCol

フィーチャ表内のSDO_GEOMETRY型の空間列を指定します。

featureMemberNs

フィーチャ・コレクション内のフィーチャ・インスタンスが含まれるフィーチャ・メンバー要素の名前空間を指定します。このパラメータがNULLである場合、デフォルトはhttp://www.opengis.net/gmlです。

featureMemberName

フィーチャ・コレクション内のフィーチャ・インスタンスが含まれるフィーチャ・メンバー要素の名前を指定します。このパラメータがNULLの場合、デフォルトはfeatureMemberです。

srsNs

フィーチャ・タイプの空間データと関連付けられた空間参照システム(座標系)のユーザー定義の名前空間を指定します。この名前空間は(指定されている場合)、GetFeatureリクエストに対する回答として生成されるFeatureCollectionの<boundedBy>要素内のsrsName属性を生成するときにも使用されます。

srsNsAlias

フィーチャ・タイプの空間データと関連付けられた空間参照システム(座標系)の名前空間の名前空間別名を指定します。

featureCollectionNs

このフィーチャ・タイプのインスタンスが出現する可能性のあるWFSフィーチャ・コレクションの名前空間を指定します。

featureCollectionName

このフィーチャ・タイプのインスタンスが出現する可能性のあるWFSフィーチャ・コレクションの名前を指定します。

isGML3

文字列値を指定します。Yは、このフィーチャ・タイプのインスタンスに含まれるジオメトリがGML3.1.1に準拠していることを表します。Nは、このフィーチャ・タイプのインスタンスに含まれるジオメトリがGML 2.1.2に準拠していることを表します。

formattedKeyCols

主キー列(複数列の主キーの場合は複数列)の内容を文字列書式で表現したものを指定します。たとえば、ROAD_IDがNUMBER型の主キー列である場合は、MDSYS.STRINGLIST('to_char(ROAD_ID)')と指定します。MDSYS.STRINGLIST型のコンストラクタ内で複数の文字列を指定する場合は、各文字列をカンマで区切ります。書式化された文字列の主キー列のリストは、pkeyColパラメータに主キー列が指定された同じ順番で指定する必要があります。

viewTableName

フィーチャ・タイプが、基になる単一の表に基づいてビューに定義される場合は、基になる表の名前を指定します。パブリッシュされるフィーチャ・タイプは、dataSrcパラメータ(user-name.view-name)で指定したビューに基づきます。フィーチャ・タイプが表(または複数表ビュー)に基づいている場合は、viewTableNameパラメータには値を入力しないでください。

viewTablepkeyCol

フィーチャ・タイプが、基になる単一の表に基づいてビューに定義される場合は、viewTableNameパラメータで指定した表の主キー列を指定します。

viewTableFmtKeyCols

フィーチャ・タイプが単一の表に定義されたビューに基づき、そのビューに1つ以上の書式化された主キー列がある場合は、このパラメータには基になる表に含まれる主キー列を書式化された文字列で表現したものを指定します。各列は、ビューに含まれる書式化された文字列の主キー列(formattedkeyColsパラメータで指定)に対応します。たとえば、ROAD_IDがNUMBER型の主キー列である場合は、MDSYS.STRINGLIST('to_char(ROAD_ID)')と指定します。MDSYS.STRINGLIST型のコンストラクタ内で複数の文字列を指定する場合は、各文字列をカンマで区切ります。

フィーチャ・タイプが単一表ビューに基づいていない場合、または単一表ビューに基づいているがフィーチャ・タイプに書式化済の主キー列がない場合は、このパラメータをNULLにする必要があります。

mandatoryColumnInfo

リクエストした列に関係なく、GetFeatureリクエストで戻される必要のある列のリストを指定します。(リクエストした列は必ず戻されます。)このパラメータを省略した場合は、すべての列が必須になります(すべての列が戻されます)。ただし、このパラメータにNULLを指定した場合、必須の列はありません(リクエストした列のみ戻されます)。列名を指定するには、MDSYS.STRINGLIST型のコンストラクタを使用して、MDSYS.STRINGLIST('COL1', 'COL2', 'COL5')のように指定します。

使用上の注意

columnInfoパラメータでは、フィーチャ・タイプのインスタンス表内のSDO_GEOMETRY型の各列に、columnInfoパラメータで指定された正しい関連する文字列値(文字列値の順序は表の定義内の空間列の順序と同じ)が含まれている必要があります。

WFS 1.0.nの場合、たとえば、フィーチャ・タイプのインスタンス表内にあるSHAPEという名前の1つのSDO_GEOMETRY列にポリゴン・ジオメトリが含まれている場合、columnInfo値はSHAPE_GEOMETRYTYPE>PolygonMemberTypeとなる必要があります。表34-2に、WFSバージョン1.0.nでのジオメトリ・タイプとこれらのタイプに関連付けられた必須のcolumnInfoパラメータ値を示します。(<column-name>を列の名前に置換します。)

表34-2 ジオメトリ・タイプとcolumnInfoパラメータ値(WFS 1.0.n)

ジオメトリ・タイプ

columnInfoパラメータ値

ポリゴンまたは面

<column-name>_GEOMETRYTYPE>PolygonMemberType

複数のポリゴンまたは複数面

<column-name>_GEOMETRYTYPE>MultiPolygonMemberType

点

<column-name>_GEOMETRYTYPE>PointMemberType

複数点

<column-name>_GEOMETRYTYPE>MultiPointMemberType

線または曲線

<column-name>_GEOMETRYTYPE>CurveMemberType

複数線または複数曲線

<column-name>_GEOMETRYTYPE>MultiCurveMemberType

ソリッド

<column-name>_GEOMETRYTYPE>SolidMemberType

マルチソリッド

<column-name>_GEOMETRYTYPE>MultiSolidMemberType

コレクション

<column-name>_GEOMETRYTYPE>GeometryMemberType

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、COLAという名前のフィーチャ・タイプのメタデータを、SHAPEという列に格納されているポリゴン・ジオメトリに登録します。(WFS 1.0.nの使用を想定しています。)

DECLARE
columnInfo MDSYS.StringList := MDSYS.StringList('SHAPE_GEOMETRYTYPE>PolygonMemberType');
BEGIN
SDO_WFS_PROCESS.publishFeatureType(
'WFS_USER.COLA_MARKETS_VIEW',
'http://www.example.com/myns',
'COLA',
'myns',
xmltype(bfilename('WFSUSERDIR', 'featuredesct.xml'), nls_charset_id('AL32UTF8')),
null, 'MKT_ID', columnInfo, 'SHAPE', null, null, null, null);
END;
/

SDO_WFS_PROCESS.RegisterMTableView

構文

SDO_WFS_PROCESS.RegisterMTableView(

ftNsUrl IN VARCHAR2,

ftName IN VARCHAR2,

viewTableList IN MDSYS.STRINGLIST,

viewTablePkeyColList IN MDSYS.STRINGLIST,

tablePkeyColList IN MDSYS.STRINGLIST);

または

SDO_WFS_PROCESS.RegisterMTableView(

ftNsUrl IN VARCHAR2,

ftName IN VARCHAR2,

viewTableList IN MDSYS.STRINGLIST,

viewTablePkeyColList IN MDSYS.STRINGLIST,

formattedViewTableColList IN MDSYS.STRINGLISTLIST,

tablePkeyColList IN MDSYS.STRINGLIST);

説明

フィーチャ・インスタンスとしての複数表ビュー・コンテンツのパブリッシュを有効にします。

パラメータ

ftNsUrl

フィーチャ・タイプの名前空間のURL(Uniform Resource Locator)を指定します。

ftName

フィーチャ・タイプの名前を指定します。

viewTableList

ビューに含まれる表のリストを指定します。表名を指定するには、MDSYS.STRINGLIST型のコンストラクタを使用して、MDSYS.STRINGLIST('MYUSER.ROADS', 'MYUSER.ROADS_DESC')のように指定します。

viewTablePkeyColList

ビュー内の表の主キー列に対応するビュー列のリストを、viewTableListに表を指定した順序に従って指定します。列名を指定するには、MDSYS.STRINGLIST型のコンストラクタを使用してMDSYS.STRINGLIST('ROAD_ID', 'ROAD_ID')のように指定します。この例では、ROADS表およびROAD_DESC表の両方に、ROAD_IDが主キーとして含まれています。

複数列主キーの表の列に対応する列がビューに含まれる場合は、主キーに含まれる各列をセミコロンで区切ります。例: 'COL1;COL2'

formattedViewTableColList

ビュー内の書式化された文字列の主キー列に対応した、書式化された文字列表の主キー列のリストを、viewTableListに表を指定した順序に従って指定します。列名を指定するには、MDSYS.STRINGLIST型のコンストラクタを使用して、MDSYS.STRINGLISTLIST(MDSYS.STRINGLIST('to_char(ROAD_ID)'), MDSYS.STRINGLIST('to_char(ROAD_ID)'))のように指定します。

各表に対して書式化された文字列の主キー列のリストは、tablePkeyColListパラメータで指定した各表の主キー列と同じ順番で指定する必要があります。

tablePkeyColList

表の主キー列のリストを、viewTableListに表を指定した順序に従って指定します。各表の主キー列は、viewTablePkeyColListパラメータに指定したビューのキー列の順序で指定する必要があります。列名を指定するには、MDSYS.STRINGLIST型のコンストラクタを使用して、MDSYS.STRINGLIST('ROAD_ID', 'ROAD_ID')のように指定します。

表の主キーが複数列の場合は、主キーに含まれる各列をセミコロンで区切ります。例: 'COL1;COL2'

使用上の注意

複数表ビューのコンテンツをフィーチャ・インスタンスとしてパブリッシュする必要がある場合は、SDO_WFS_PROCESS.PublishFeatureTypeプロシージャをコールした後に、このプロシージャをコールする必要があります。

フィーチャ・インスタンスとしての複数表ビュー・コンテンツのパブリッシュを無効にする場合は、SDO_WFS_PROCESS.UnRegisterMTableViewプロシージャを使用します。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では2つのフィーチャ表を作成し、これらの表に基づいてビューを作成します。続いて、フィーチャ・タイプをパブリッシュし、ビューのコンテンツのパブリッシュを有効するために複数表ビューを登録します。

CREATE TABLE cola_markets_cs (
mkt_id NUMBER PRIMARY KEY,
name VARCHAR2(32),
shape MDSYS.SDO_GEOMETRY);

CREATE TABLE cola_markets_cs_details (
mkt_id NUMBER PRIMARY KEY,
description VARCHAR2(400));

create view cola_markets_view as select t1.mkt_id, t1.name, t1.shape,
t2.description from
cola_markets_cs t1, cola_markets_cs_details t2
where t1.mkt_id = t2.mkt_id;

DECLARE
cm MDSYS.StringList := MDSYS.StringList('PolygonMemberType');
BEGIN
SDO_WFS_PROCESS.publishFeatureType(
'WFS_USER.COLA_MARKETS_VIEW',
'http://www.example.com/myns',
'COLA',
'myns',
xmltype(bfilename('WFSUSERDIR', 'featuredesct.xml'), nls_charset_id('AL32UTF8')),
null, 'MKT_ID', cm, 'SHAPE', null, null, null, null);
END;
/

BEGIN
SDO_WFS_PROCESS.registerMTableView('http://www.example.com/myns',
'COLA', mdsys.StringList('WFS_USER.COLA_MARKETS_CS',
'WFS_USER.COLA_MARKETS_CS_DETAILS'),
mdsys.StringList('MKT_ID', 'MKT_ID'), -- view keys per table
mdsys.StringList('MKT_ID', 'MKT_ID'));-- corresponding table keys
END;
/

SDO_WFS_PROCESS.RevokeFeatureTypeFromUser

構文

SDO_WFS_PROCESS.RevokeFeatureTypeFromUser(

ftnsUrl IN VARCHAR2,

ftName IN VARCHAR2,

userName IN VARCHAR2);

説明

フィーチャ・タイプへのアクセス権限をデータベース・ユーザーから取り消します。

パラメータ

ftnsUrl

フィーチャ・タイプの名前空間のURL(Uniform Resource Locator)を指定します。

ftName

フィーチャ・タイプの名前を指定します。

userName

データベース・ユーザーの名前を指定します。

使用上の注意

フィーチャ・タイプへのアクセス権限をデータベース・ユーザーに付与する場合は、SDO_WFS_PROCESS.GrantFeatureTypeToUserプロシージャを使用します。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、COLAというフィーチャ・タイプへのアクセス権限をユーザーSMITHから取り消します。

BEGIN
SDO_WFS_PROCESS.RevokeFeatureTypeFromUser('http://www.example.com/myns','COLA',
'SMITH');
END;
/

SDO_WFS_PROCESS.RevokeMDAccessFromUser

構文

SDO_WFS_PROCESS.RevokeMDAccessFromUser(

userName IN VARCHAR2);

説明

Web Feature Serviceメタデータ表へのアクセス権限をデータベース・ユーザーから取り消します。

パラメータ

userName

データベース・ユーザーの名前を指定します。

使用上の注意

このプロシージャをコールするには、DBAロールを持つユーザーとしてデータベースに接続する必要があります。

Web Feature Serviceメタデータ表へのアクセス権限をデータベース・ユーザーに付与する場合は、SDO_WFS_PROCESS.GrantMDAccessToUserプロシージャを使用します。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、Web Feature Serviceメタデータ表へのアクセス権限をWFS_REL_USERというデータベース・ユーザーから取り消します。

BEGIN
SDO_WFS_PROCESS.RevokeMDAccessToUser('WFS_REL_USER');
END;
/

SDO_WFS_PROCESS.UnRegisterMTableView

構文

SDO_WFS_PROCESS.UnRegisterMTableView(

ftNsUrl IN VARCHAR2,

ftName IN VARCHAR2);

説明

フィーチャ・インスタンスとしての複数表ビュー・コンテンツのパブリッシュを無効にします。

パラメータ

ftNsUrl

フィーチャ・タイプの名前空間のURL(Uniform Resource Locator)を指定します。

ftName

フィーチャ・タイプの名前を指定します。

使用上の注意

フィーチャ・インスタンスとしての複数表ビューのコンテンツのパブリッシュを有効にするには、事前にSDO_WFS_PROCESS.RegisterMTableViewプロシージャがコールされている必要があります。

複数表ビューからのコンテンツを持つフィーチャ・タイプを削除する場合は、SDO_WFS_PROCESS.DropFeatureTypeプロシージャをコールする前に、このプロシージャをコールする必要があります。

Web Feature Servicesのサポートについては、第15章を参照してください。

例

次の例では、複数表ビューの登録を解除し、ビューのコンテンツのパブリッシュを無効にします。

DECLARE
BEGIN
SDO_WFS_PROCESS.unRegisterMTableView('http://www.example.com/myns', 'COLA');
END;
/

第IV部

補足情報

このマニュアルは、次のように構成されています。

- 第I部では、Oracle Spatialの概念および使用方法について説明します。

- 第II部では、Oracle SpatialのWebサービスの概念および使用方法について説明します。

- 第III部では、Oracle Spatialの演算子、ファンクションおよびプロシージャに関するリファレンス情報について説明します。

- 第IV部では、補足情報(付録および用語集)を示します。

第IV部に含まれる付録および用語集は、次のとおりです。

- 付録A「インストール、移行、互換性およびアップグレード」

- 付録B「Oracle Locator」

- 付録C「複雑な空間問合せの例」

- 付録D「SpatialへのESRIシェープファイルのロード」

- 用語集

A インストール、移行、互換性およびアップグレード

Oracle Database 11g にアップグレードする場合、Oracle Spatialは操作の一部として自動的にアップグレードされます。アップグレード手順については、『Oracle Databaseアップグレード・ガイド』を参照してください。

SpatialをOracle Databaseの以前のリリースにダウングレードする場合、『Oracle Databaseアップグレード・ガイド』に記載されている、Oracle Databaseの以前のリリースへのダウングレード手順を参照してください。

データベース間で空間データを移行する必要がある場合は、A.1項を参照してください。

Oracle Spatial GeoRasterを使用する場合は、A.2項を参照してください。

SpatialのWeb Feature Service (WFS)のサポートまたはCatalog Services for the Web (CSW)のサポートを使用している場合、および1つ以上のSYS.XMLTABLEINDEXの索引を使用して索引付けされた以前のリリースのデータがある場合は、A.3項を参照してください。

1,048,576より大きい縦座標のジオメトリをサポートする必要がある場合は、A.4項を参照してください。

A.1 データベース間での空間データの移行

空間データの移行とは、Oracle Database間でのOracle Spatial and Graphジオメトリ・オブジェクトの移動またはコピーのことを言います。(データベースでは、同じまたは異なるリリース番号のOracle Databaseを使用できます。)

データベース・リンク、エクスポート/インポート、Oracle Data Pumpまたはトランスポート可能な表領域を使用して空間データを移行する場合、MDSYSスキーマがすでに移行先のデータベースに存在している必要があります。

限定された状況では、SDO_MIGRATE.TO_CURRENTサブプログラム(第26章を参照)を使用しなければならい場合もあります。詳細は、そのサブプログラムの「使用上の注意」を参照してください。

A.2 インストールまたはアップグレード後にGeoRasterが正しく動作するための確認事項

Oracle SpatialのGeoRaster機能を使用するには、Oracle XML DB Repositoryを適切にインストールする必要があります。(通常、Oracle Spatialをインストールする前に、Oracle XML DB Repositoryがインストールされていることを確認する必要があります。)

(アップグレード時のように)Oracle SpatialはインストールされていてもOracle XML DB Repositoryがインストールされていない場合は、Oracle XML DB Repositoryをインストールし、関連するGeoRaster PL/SQLパッケージをリロードする必要があります。この場合には、次の手順を実行します。

1. Oracle XML DB Repositoryをインストールします。
Oracle XML DB Repositoryのインストールおよびアンインストールの手順については、『Oracle XML DB開発者ガイド』を参照してください。

2. $ORACLE_HOME/md/adminディレクトリに移動します。

3. SYS AS SYSDBAとしてデータベースに接続します。

4. 次のSQL文を入力します。

ALTER SESSION SET CURRENT_SCHEMA=MDSYS;
@prvtgrs.plb
@sdogrxml.sql

A.3 アップグレード前およびアップグレード後に行う索引のメンテナンス(WFSおよびCSW)

リリース11.2では、SYS.XMLTABLEINDEX索引タイプは非推奨となっています。このため、SpatialのWFSおよびCSWのcreateXMLTableIndexメソッドでは、以前のリリースでのSYS.XMLTABLEINDEX型のかわりにXDB.XMLINDEX型の索引が作成されます。ただし、1つ以上のSYS.XMLTABLEINDEXの索引を使用して索引付けされた以前のリリースのデータがある場合は、次のようにして、アップグレードする前に関連付けられた索引を削除し、アップグレードした後に索引を再作成する必要があります。

1. Oracle Databaseリリース11.1を使用し、dropXMLTableIndexメソッド(アプリケーションに応じて、oracle.spatial.csw.CSWAdminまたはoracle.spatial.wfs.WFSAdminのいずれか適切な方)をコールして関連付けられた索引を削除します。

2. データベースをリリース11.1からリリース11.2にアップグレードします。

3. Oracle Databaseリリース11.2を使用し、createXMLTableIndexメソッド(アプリケーションに応じて、oracle.spatial.csw.CSWAdminまたはoracle.spatial.wfs.WFSAdminのいずれか適切な方)をコールして、手順1で削除した索引を作成します。

SpatialのWeb Feature Service (WFS)のサポートの詳細は、第15章を参照してください(特に、次の項を参照してください)。

- createXMLTableIndexメソッド(15.4.1項)

- dropXMLTableIndexメソッド(15.4.3項)

- getIsXMLTableIndexCreatedメソッド(15.4.4項)

- publishFeatureTypeメソッドのgenXMLIndexパラメータおよびidxPathsパラメータ(15.4.7項)

- setXMLTableIndexInfoメソッド(15.4.10項)

SpatialのCatalog Services for the Web (CSW)のサポートの詳細は、第16章を参照してください(特に、次の項を参照してください)。

- createXMLTableIndexメソッド(16.4.1項)

- dropXMLTableIndexメソッド(16.4.6項)

- getIsXMLTableIndexCreatedメソッド(16.4.8項)

- publishRecordTypeメソッドのgenXMLIndexパラメータおよびidxPathsパラメータ(16.4.12項)

- setXMLTableIndexInfoメソッド(16.4.19項)

A.4 非常に大きなジオメトリをサポートするための縦座標配列のサイズの増大

1,048,576より大きい縦座標のジオメトリをサポートする必要がある場合は、この項の説明に従う必要があります。ただし、これにより、多くの追加作業(スクリプトの実行や既存の空間データの移行)、データベースのダウンタイム、およびいくつかの考慮事項と制限事項が発生します。したがって、必要がないかぎり、この項の操作は実行しないようにしてください。

最大10Mの縦座標のジオメトリをサポートするために縦座標配列のサイズを増やすには、次の手順を実行します。

1. 空間表やOracle SpatialまたはLocatorの機能を使用しているユーザーがいないことを確認します。

2. SYSDBA権限を持つSYSユーザー(SYS AS SYSDBA)としてデータベースに接続し、プロンプトが表示されたらSYSアカウントのパスワードを入力します。

3. 次の文を入力します。

- Linuxの場合: @$ORACLE_HOME/md/admin/sdoupggeom.sql

- Windowsの場合: @%ORACLE_HOME%\md\admin\sdoupggeom.sql

sdoupggeom.sqlスクリプトの操作のうちの1つは、新しいSDO_ORDINATE_ARRAY定義を反映するために、すべての空間データを自動的に移行することです。このスクリプトは完了までに時間がかかることがあり、必要な時間は、データベースに存在する空間データの量によって変わります。

これらの手順を実行した後、次の考慮事項および制限事項が適用されます。

- 古いSDO_ORDINATE_ARRAY定義で作成された既存のトランスポータブル表領域はどれも機能しません。

- エクスポート・ファイルが、古いSDO_ORDINATE_ARRAY定義を持つデータベース上で従来のエクスポート・ユーティリティを使用して作成された場合、および新しいSDO_ORDINATE_ARRAY定義を使用しているデータベースにそのファイルをインポートする必要がある場合は、次の例のように、従来のインポート・ユーティリティでTOID_NOVALIDATEフラグを指定する必要があります。

imp scott/<password> file=states.dmp tables=states TOID_NOVALIDATE=MDSYS.SDO_GEOMETRY,MDSYS.SDO_ORDINATE_ARRAY,MDSYS.SDO_ELEM_INFO_ARRAY

- また、sdoupggeom.sqlをソース・データベースで実行した後に、Oracle Data Pumpを使用してデータをインポートする場合、インポート操作の後に、sdoupggeom.sqlをターゲット(移行先)データベースで実行する必要もあります。

B Oracle Locator

Oracle Locator(Locatorともいう)は、Oracle Database 11g Standard Editionの機能です。Locatorは、Oracle Spatialで使用可能な主要な機能およびサービスを提供します。通常、インターネットおよびワイヤレス・サービス・ベースのアプリケーションおよびパートナ・ベースのGISソリューションをサポートするために必要な、重要な機能を提供します。Locatorは、複雑な空間データ管理が必要な地理情報システム(GIS)アプリケーションのためのソリューションとして設計されていません。線形参照、高度なSpatialファンクション、Spatial Webサービスなどの機能が必要な場合は、LocatorではなくOracle Spatialを使用します。

Spatialと同様に、Locatorは、エンド・ユーザー・アプリケーションではなく、アプリケーション開発者向けの一連の空間機能として設計されています。

Locatorは、Oracle DatabaseのStandard Edition One、Standard EditionおよびEnterprise Editionと、Oracle Database XE (Express Edition)で使用できます。Spatialは、Oracle Database 11g Enterprise Editionのみで使用可能な別ライセンスのオプションです。Spatialには、Locatorのすべての機能に加えて、Locatorでは使用できない機能も含まれています。

Locatorで使用可能な機能のみを使用する必要がある場合は、B.1項「LocatorまたはSpatialの手動によるインストールおよび削除」を参照してください。SpatialおよびLocatorに関するライセンス情報は、『Oracle Databaseライセンス情報』を参照してください。

Locatorがインストールされているかどうかは、Oracle Multimediaが正しく適切にインストールされたかどうかによります。Oracle Multimediaは、Oracle Database 11g とともにインストールされ構成されますが、必要に応じて、手動でインストールすることもできます(『Oracle Multimediaユーザーズ・ガイド』を参照)。Locatorは、Oracle Multimediaのインストール時にインストールされます。

通常Locatorには、Spatialの一部のサブプログラム(ファンクションおよびプロシージャ)とともに、Oracle Spatialのデータ型、演算子および索引付け機能が含まれます。Locatorに含まれる機能は次のとおりです。

- すべてのタイプのジオメトリを記述およびサポートするオブジェクト型(SDO_GEOMETRY)

- ジオメトリ・データに空間索引を作成するための空間索引付け機能

- 空間索引を使用して空間問合せを実行する空間演算子(第19章を参照)

- ほとんどのジオメトリ・ファンクションおよび空間集計ファンクション(表B-1を参照)

- ジオメトリおよびレイヤーの変換における座標系のサポート(第21章のSDO_CS.TRANSFORMファンクションおよびSDO_CS.TRANSFORM_LAYERプロシージャを参照)

- チューニングのためのサブプログラム(第31章のSDO_TUNEパッケージを参照)

- Spatialのユーティリティ・ファンクション(第32章のSDO_UTILパッケージを参照)

- Spatial Java APIのoracle.spatial.geometry(sdoapi.jar)パッケージおよびoracle.spatial.util(sdoutil.jar)パッケージのクラス(『Oracle Spatial Java API Reference』を参照)

空間の概念、SDO_GEOMETRYオブジェクト型、SQL Multimedia型の注釈テキストのサポート、および空間データの索引付けとロードの詳細は、このマニュアルの第1章から第5章を参照してください。Locatorでサポートされている機能のリファレンス情報および使用方法は、表B-1に示す章または項を参照してください。

表B-1 LocatorでサポートされているSpatial関連の機能

機能

参照先

空間演算子(厳密にはテーブル・ファンクションですが、演算子とともに説明するSDO_JOINも含む)。

第19章

SDO_GEOM.RELATE、SDO_GEOM.SDO_DIFFERENCE、SDO_GEOM.SDO_INTERSECTION、SDO_GEOM.SDO_UNION、SDO_GEOM.SDO_VOLUME、SDO_GEOM.SDO_XORを除くすべてのSDO_GEOMサブプログラム

第24章

SDO_AGGR_SET_UNIONおよびSDO_AGGR_UNIONを除く空間集計ファンクション

第20章

座標系変換サブプログラム(SDO_CS package)

第21章

演算子のコールに対する暗黙的な座標系の変換(このコールでは、問合せされたレイヤーの座標系にウィンドウを変換する必要あり)

第19章

ファンクション・ベースの空間索引付け。

9.2項

空間索引での表のパーティション化のサポート(パーティションおよびその索引の分割、マージおよび交換を含む)。

5.1.3項および5.1.4項

測地データのサポート。

6.2項および6.8項

索引を作成、変更、削除するためのSQL文。

第18章

パラレル空間索引作成(PARALLELキーワードを指定したALTER INDEX REBUILDおよびCREATE INDEX文)(リリース2(9.2)の新機能)。

第18章

SDO_GEOMETRYオブジェクト型のメソッド。

2.3項

SQL Multimedia空間型(ST_xxx型)

第3章

同等のOracle Spatialの機能がLocatorでサポートされているSQL Multimediaファンクション(ST_xxxファンクション)

3.2項

注釈テキスト

3.5項

以前のリリースのSpatialから今回のリリースへデータをアップグレードするパッケージ(SDO_MIGRATE)。

第26章

チューニング・サブプログラム(SDO_TUNEパッケージ)

第31章

Spatialのユーティリティ・ファンクション(SDO_UTILパッケージ)。

第32章

Spatial Java APIのoracle.spatial.geometry(sdoapi.jar)パッケージおよびoracle.spatial.util(sdoutil.jar)パッケージのクラス

『Oracle Spatial Java API Reference』

オブジェクトのレプリケーション。

『Oracle Databaseアドバンスト・レプリケーション』

表B-2に、LocatorでサポートされていないSpatialの機能、およびこのマニュアルや他のマニュアルでそれらの機能の詳細を記載している章を示します。

表B-2 LocatorでサポートされていないSpatialの機能

機能

参照先

次のSDO_GEOMパッケージ・サブプログラム: SDO_GEOM.RELATE、SDO_GEOM.SDO_DIFFERENCE、SDO_GEOM.SDO_INTERSECTION、SDO_GEOM.SDO_UNION、SDO_GEOM.SDO_VOLUME、SDO_GEOM.SDO_XOR

第24章

SDO_AGGR_UNION空間集計ファンクション

第20章

線形参照システム(LRS)のサポート

第7章(概念および使用方法)および第25章(リファレンス情報)

3次元のジオメトリ・サポート: Locatorでは、3D空間索引、3D演算子および3Dデータのサブプログラムは使用できません。

1.11項(3Dの概念および使用方法)

空間分析およびマイニング・サブプログラム(SDO_SAMパッケージ)

第29章

OpenLSのサポート(ジオコーディング、マッピング、ビジネス・ディレクトリ(イエロー・ページ)および運転方向(ルーティング・)サービスのサポートを含む。)

第14章「OpenLSのサポート」および第27章「SDO_OLSパッケージ(OpenLS)」。参照:

- 第11章「住所データのジオコーディング」および第23章「SDO_GCDRパッケージ(ジオコーディング)」

- 第12章「ビジネス・ディレクトリ(イエロー・ページ)のサポート」

- 第13章「ルーティング・エンジン」

Web Feature Service(WFS)サポート(SDO_WFS_PROCESSおよびSDO_WFS_LOCKパッケージ)

第15章(概念および使用方法)、第34章および第33章(リファレンス情報)

Catalog Services for the Web(CSW)のサポート(SDO_CSW_PROCESSパッケージ)

第16章(概念および使用方法)および第22章(リファレンス情報)

Triangulated Irregular Network(TIN)、点群(PC)データ型および関連サブプログラム

1.11項(概念および使用方法)、第30章(SDO_TIN_PKGリファレンス情報)および第28章(SDO_PC_PKGリファレンス情報)

GeoRasterのサポート

『Oracle Spatial GeoRaster開発者ガイド』

トポロジ・データ・モデル

『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』

ネットワーク・データ・モデル

『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』

Spatial Java APIのoracle.spatial.geometry (sdoapi.jar)パッケージおよびoracle.spatial.util (sdoutil.jar)パッケージ以外のパッケージのクラス

『Oracle Spatial Java API Reference』

Locatorは、Oracle Database 11gのStandard EditionとEnterprise Editionの両方で使用できますが、Locatorの一部の機能には、Standard Editionでは使用できないか、または使用が制限されているデータベース機能が必要です。表B-3に、Locatorのこれらの機能の一部およびその可用性を示します。

表B-3 Standard EditionまたはEnterprise Editionでの機能の可用性

機能

Standard/Enterprise Editionでの可用性

パラレル空間索引作成

Enterprise Editionでのみサポートされます。

SDO_GEOMETRYオブジェクトのマルチマスター・レプリケーション

Enterprise Editionでのみサポートされます。(SDO_GEOMETRYオブジェクトの単一のマスター・ビューまたはマテリアライズド・ビューのレプリケーションは、Standard EditionおよびEnterprise Editionの両方でサポートされます。詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。)

パーティション化された空間索引

Enterprise EditionではPartitioning Optionが必要です。Standard Editionではサポートされません。

B.1 LocatorまたはSpatialの手動によるインストールおよび削除

Spatialをインストールしたり、LocatorではなくSpatialに固有の機能を使用するには、Spatialのライセンス要件を満たす必要があります。SpatialおよびLocatorに関するライセンス情報は、『Oracle Databaseライセンス情報』を参照してください。

注意:
Oracle MultimediaをOracle Databaseとともにインストールして構成する場合は、Oracle Locatorもインストールされます。

LocatorおよびSpatialに関連する特定のインストールおよび削除操作を実行するために、次のスクリプトを使用できます。

- mddins.sqlは、Spatialを手動で削除し、Locatorのみを残します(したがって、Locatorのみがインストールされている状態です)。これにより、Locatorで使用可能な機能のみを使用することができ、Spatialでのみ使用可能な機能は使用できなくなります。

- mdinst.sqlは、Spatialを手動でインストールするため、SpatialおよびLocatorで使用可能なすべての機能を使用できます。

Locatorの機能のみを使用する必要があるにもかかわらず、Spatialがすでにインストールされている場合は、mddins.sqlスクリプトを次のように実行します。

1. Oracle Multimediaがインストールされていることを確認します。

2. SYSDBA権限を持つSYSユーザー(SYS AS SYSDBA)としてデータベースに接続し、プロンプトが表示されたらSYSアカウントのパスワードを入力します。

3. SQL*Plusを起動し、次の文を入力します。

- Linuxの場合: @$ORACLE_HOME/md/admin/mddins.sql

- Windowsの場合: @%ORACLE_HOME%\md\admin\mddins.sql

Spatialを使用できる必要がある場合は、mdinst.sqlスクリプトを次のように実行します。

1. SYSDBA権限を持つSYSユーザー(SYS AS SYSDBA)としてデータベースに接続し、プロンプトが表示されたらSYSアカウントのパスワードを入力します。

2. SQL*Plusを起動し、次の文を入力します。

- Linuxの場合: @$ORACLE_HOME/md/admin/mdinst.sql

- Windowsの場合: @%ORACLE_HOME%\md\admin\mdinst.sql

C 複雑な空間問合せの例

この付録では、第III部「リファレンス情報」のリファレンスの章に示した例より複雑な問合せの例について説明します。SDO_WITHIN_DISTANCE、SDO_NNなど、Spatialアプリケーションで頻繁に使用される演算子を中心に説明します。

この付録の内容は、Spatialユーザーのサポートおよびトレーニングを行うオラクル社の担当者からの情報に基づいています。Oracle Spatialトレーニング・コースでは、ここで示す例の多くに加えて、さらに他の例および説明を提供しています。

この付録に示す例を使用する前に、第I部「概念および使用方法」および第III部「リファレンス情報」に示した関連する演算子またはファンクションの使用方法およびリファレンス情報を理解してください。

この付録の内容は次のとおりです。

- C.1項「例で使用する表」

- C.2項「SDO_WITHIN_DISTANCEの例」

- C.3項「SDO_NNの例」

- C.4項「SDO_AGGR_UNIONの例」

C.1 例で使用する表

この付録の例では、GEOD_CITIES、GEOD_COUNTIESおよびGEOD_INTERSTATESという表を使用します。これらの表は次のとおり定義されています。

CREATE TABLE GEOD_CITIES(
LOCATION     SDO_GEOMETRY,
CITY         VARCHAR2(42),
STATE_ABRV   VARCHAR2(2),
POP90        NUMBER,
RANK90       NUMBER);

CREATE TABLE GEOD_COUNTIES(
COUNTY_NAME   VARCHAR2(40),
STATE_ABRV    VARCHAR2(2),
GEOM          SDO_GEOMETRY);

CREATE TABLE GEOD_INTERSTATES(
HIGHWAY   VARCHAR2(35),
GEOM      SDO_GEOMETRY);

C.2 SDO_WITHIN_DISTANCEの例

SDO_WITHIN_DISTANCE演算子は、指定されたオブジェクトから指定された距離内に存在する一連の空間オブジェクトを識別します。距離には、近似値または正確な値を指定できます。querytype=FILTERを指定すると、1次フィルタ処理のみが実行されるため、距離は近似値になります。指定しない場合は、1次と2次の両方のフィルタ処理が実行されるため、距離は正確な値になります。

例C-1では、州間高速道路I170から15マイル以内に存在するすべての都市を検索します。

例C-1 高速道路から一定距離内に存在するすべての都市の検索

SELECT /*+ ORDERED */ c.city
FROM geod_interstates i, geod_cities c
WHERE i.highway = 'I170'
AND sdo_within_distance (
c.location, i.geom,
'distance=15 unit=mile') = 'TRUE';

例C-1では、指定した高速道路(i.highway = 'I170')から15マイル以内('distance=15 unit=mile')に存在するすべての都市を検索します。デフォルトでは、結果は正確な値となります(querytypeパラメータを使用せず、問合せを1次フィルタ処理に制限しなかったため)。この例のWHERE句の内容は次のとおりです。

- i.highwayはINTERSTATES表のHIGHWAY列で、I170はHIGHWAY列の値です。

- c.locationでは、検索列(geometry1)を指定します。これは、GEOD_CITIES表のLOCATION列です。

- i.geomでは、問合せウィンドウ(aGeom)を指定します。これは、GEOD_INTERSTATES表の、HIGHWAY列に値I170が含まれている行のGEOM列にある空間ジオメトリです。

例C-2では、Tampa市から15マイル以内に存在するすべての州間高速道路を検索します。

例C-2 都市から一定距離内に存在するすべての高速道路の検索

SELECT /*+ ORDERED */ i.highway
FROM geod_cities c, geod_interstates i
WHERE c.city = 'Tampa'
AND sdo_within_distance (
i.geom, c.location,
'distance=15 unit=mile') = 'TRUE';

例C-2では、指定した都市(c.city = 'Tampa')から15マイル以内('distance=15 unit=mile')に存在するすべての高速道路を検索します。デフォルトでは、結果は正確な値となります(querytypeパラメータを使用せず、問合せを1次フィルタ処理に制限しなかったため)。この例のWHERE句の内容は次のとおりです。

- c.cityはGEOD_CITIES表のCITY列で、TampaはCITY列の値です。

- i.geomでは、検索列(geometry1)を指定します。これは、GEOD_INTERSTATES表のGEOM列です。

- c.locationでは、問合せウィンドウ(aGeom)を指定します。これは、GEOD_CITIES表の、CITY列に値Tampaが含まれている行のLOCATION列にある空間ジオメトリです。

C.3 SDO_NNの例

SDO_NN演算子は、あるジオメトリから最も近くに存在するジオメトリを特定します。ORDER BY句にSDO_NN_DISTANCE補助演算子を指定して結果を昇順で戻す場合を除き、戻される結果の順序を指定することはできません。オプションのパラメータを指定しない場合、最も近くに存在する1つのジオメトリが戻されます。

オプションのsdo_num_resキーワードを指定すると、最も近くに存在するジオメトリをいくつ要求するかを指定できますが、WHERE句内の他の条件は評価されません。たとえば、交差点から最も近い5つの銀行を検索する場合を考えてみます。ここで、名前がCHASEという銀行だけを検索するとします。最も近い5つの銀行の中にCHASEという銀行がない場合、sdo_num_res=5を指定しても、SDO_NNは行を戻しません。これは、sdo_num_resキーワードは近接性のみを考慮し、WHERE句の条件は無視するためです。

オプションのsdo_batch_sizeキーワードを指定すると、sdo_num_resの指定は無視され、SDO_NNは、WHERE句に指定された数を満たすまでジオメトリを距離順に戻し続けます。WHERE句でbank_name = 'CHASE' AND rownum < 6と指定すると、bank_name = 'CHASE'を満たす最も近い5つの銀行が戻されます。

SDO_NN_DISTANCEは、SDO_NN演算子の補助演算子です。この演算子は、SDO_NN演算子によって戻されたオブジェクトの距離を戻します。SDO_NNへのコール内のみで有効です。

例C-3では、州間高速道路I170に最も近い5都市と、高速道路からそれらの各都市までの距離(マイル)を距離順に戻します。

例C-3 高速道路に最も近い都市の検索

SELECT /*+ ORDERED */
c.city,
sdo_nn_distance (1) distance_in_miles
FROM geod_interstates i,
geod_cities c
WHERE i.highway = 'I170'
AND sdo_nn(c.location, i.geom,
'sdo_num_res=5 unit=mile', 1) = 'TRUE'
ORDER BY distance_in_miles;

例C-3では/*+ ORDERED*/オプティマイザ・ヒントが使用されているため、GEOD_INTERSTATES.HIGHWAY列に索引を作成することが重要です。この例の問合せでは、このヒントによって、最も近いジオメトリの検索が試行される前に、強制的に高速道路I170が検索されます。この例のWHERE句の内容は次のとおりです。

- i.highwayはGEOD_INTERSTATES表のHIGHWAY列で、I170はHIGHWAY列の値です。

- c.locationでは、検索列(geometry1)を指定します。これは、GEOD_CITIES表のLOCATION列です。

- i.geomでは、問合せウィンドウ(geometry2)を指定します。これは、GEOD_INTERSTATES表の、HIGHWAY列に値I170が含まれている行のGEOM列にある空間ジオメトリです。

- sdo_num_res=5では、検索する最も近いジオメトリの数を指定します。

- unit=mileでは、SDO_NN_DISTANCE補助演算子によって戻される距離の計測単位を指定します。

- sdo_nn_distance (1)および'sdo_num_res=5 unit=mile', 1の1は、SDO_NNのコールとSDO_NN_DISTANCEのコールを関連付けるnumberパラメータ値です。

例C-3では、WHERE句で得られる結果が、ORDER BY distance_in_milesによって距離(マイル)の順に戻されます。

例C-3の文によって、次の出力結果が得られます(読みやすくするために若干変更が加えられています)。

CITY                    DISTANCE_IN_MILES
----------------------  ------------------------------
St Louis                  5.36297295
Springfield              78.7997464
Peoria                  141.478022
Evansville              158.22422
Springfield             188.508631

例C-4では、例C-3の検索を拡張して、1990年の人口が特定数を超える都市を戻すように結果を制限しています。ここでは、1990年の人口が30万人を超える州間高速道路I170に最も近い5都市、各都市の1990年の人口、および高速道路からそれらの各都市までの距離(マイル)を距離順に戻します。

例C-4 高速道路に最も近く、指定の人口を超える都市の検索

SELECT /*+ ORDERED  NO_INDEX(c pop90_idx) */
c.city, pop90,
sdo_nn_distance (1) distance_in_miles
FROM geod_interstates i,
geod_cities c
WHERE i.highway = 'I170'
AND sdo_nn(c.location, i.geom,
'sdo_batch_size=10 unit=mile', 1) = 'TRUE'
AND c.pop90 > 300000
AND rownum < 6
ORDER BY distance_in_miles;

例C-4ではORDEREDオプティマイザ・ヒントが使用されているため、GEOD_INTERSTATES.HIGHWAY列に索引を作成することが重要です。この例の問合せでは、このヒントによって、最も近いジオメトリの検索が試行される前に、強制的に高速道路I170が検索されます。

正確な結果を得るために、SDO_NN検索列(geometry1)と同じ表の列のすべての非空間索引を無効にします。この例では、NO_INDEX(c pop90_idx)オプティマイザ・ヒントによってPOP90列の非空間索引を無効にします。

この例のWHERE句の内容は次のとおりです。

- sdo_batch_size=10では、ジオメトリが継続的に戻され(距離順に、一度に10ジオメトリずつ)、WHERE句の他の条件を満たしているかどうかが確認されます。

- c.pop90 > 300000では、POP90列の値が300000より大きい行に結果が制限されます。

- rownum < 6では、戻される結果の数が5に制限されます。

例C-4では、WHERE句で得られる結果が、ORDER BY distance_in_milesによって距離(マイル)の順に戻されます。

例C-4の文によって、次の出力結果が得られます(読みやすくするために若干変更が加えられています)。

CITY               POP90    DISTANCE_IN_MILES
-----------------  -------  ---------------------
St Louis            396685     5.36297295
Kansas City         435146   227.404883
Indianapolis        741952   234.708666
Memphis             610337   244.202072
Chicago            2783726   253.547961

関連項目:
5.1.3項「パーティション空間索引の使用」の例5-1「パーティション空間索引を使用したSDO_NN問合せ」

C.4 SDO_AGGR_UNIONの例

多くの行を集計する場合、単一のSDO_AGGR_UNION集計ファンクションの実行に時間がかかることがあります。これは、SDO_AGGR_UNIONが、渡された最初の2つのジオメトリを集計し、その結果と次のジオメトリを集計し、さらにその結果と次のジオメトリを集計するという処理を行うためです。この実行に最終的に時間がかかるようになる理由は、結果としてのジオメトリが短時間に多くの頂点で構成されるようになってしまい、後続の集計すべてに、この非常に複雑なジオメトリが含まれるためです。

多くの行を集計する際により良いパフォーマンスを得るには、集計をグループに分割し、各グループのジオメトリ数が常に50以下になるようにします。例C-5は、次の内容を示しています。

- 集計するジオメトリ(この場合、米国カリフォルニア州、オレゴン州およびワシントン州の郵便番号ジオメトリ)には、50のグループがいくつ必要か(2の累乗)を決定するためのSELECT文が最初に必要です。このようなジオメトリが5000ある場合、POWERファンクションの結果は128になり、これを次のSELECT文の最も内側のGROUP BY句に使用する必要があります。

- 1つのSELECT文で、複数のネストされた集計とGROUP BY句を使用します。最高のパフォーマンスを得るには、GROUP BY句で2の累乗値をスキップしながら、2に到達するようにします。この例の句では、128、32、8および2を使用しますが、64、16または4は使用しません。

例C-5 行が多数ある場合のグルーピングを使用した集計和集合

-- Determine how many groupings of 50 are needed. Assume 5000 rows in
-- all. 5000/50 = 100; and 128 is the next higher power of 2.
SELECT POWER(2, CEIL( LOG(2, COUNT(*)/50)))
FROM ZIP_CODES z
WHERE z.state_code IN ('CA', 'OR', 'WA');

-- Perform the aggregate union operation, using 128 in the
-- innermost GROUP BY clause.
SELECT sdo_aggr_union(sdoaggrtype(aggr_geom,0.5)) aggr_geom
FROM
(SELECT sdo_aggr_union(sdoaggrtype(aggr_geom,0.5)) aggr_geom
FROM
(SELECT sdo_aggr_union(sdoaggrtype(aggr_geom,0.5)) aggr_geom
FROM
(SELECT sdo_aggr_union(sdoaggrtype(aggr_geom,0.5)) aggr_geom
FROM
(SELECT sdo_aggr_union(mdsys.sdoaggrtype(geom,0.5)) aggr_geom
FROM ZIP_CODES z
WHERE z.state_code IN ('CA', 'OR', 'WA')
GROUP BY mod(rownum,128))
GROUP BY mod (rownum, 32))
GROUP BY mod (rownum, 8))
GROUP BY mod (rownum, 2)
);

D SpatialへのESRIシェープファイルのロード

Javaシェープファイル・コンバータは、Oracle SpatialおよびLocatorで使用するために、ESRIシェープファイルをOracle Database表に変換します。シェープファイル・コンバータは、Oracle SpatialのJavaベースのシェープファイル・クラスであるAdapterShapefileJGeomとSampleShapefileToJGeomFeatureを使用して、シェープファイルを直接データベース表にロードします(属性列にはOracleと同等の.dbfデータ型を、ジオメトリ列にはSDO_GEOMETRYデータ型を使用します)。

シェープファイルをデータベースにロードするには、この付録で説明するとおりにコンバータを使用します。(Adapterクラスを使用して、シェープファイルをSDO_GEOMETRYデータ型またはJGeometryデータ型に変換する独自のアプリケーションとインタフェースを作成することもできますが、この処理は、このマニュアルの範囲を超えています。シェープファイル関連のクラスについては、Oracle SpatialのJava APIリファレンスを参照してください。)

シェープファイル・コンバータを使用するには、次が必要です。

- OracleユーティリティおよびJDBCライブラリ(ojdbc14.jarまたはojdbc5.jar、sdoutl.jarおよびsdoapi.jar)

- 変換する1つ以上のESRIシェープファイル(.shpファイル、.shxファイルおよび.dbfファイル)

D.1 シェープファイル・コンバータの使用方法

シェープファイル・コンバータの構文を次に示します。(コマンドはすべて1行に入力します。)

> java -cp [ORACLE_HOME]/jdbc/lib/ojdbc5.jar:[ORACLE_HOME]/md/jlib/sdoutl.jar:[ORACLE_HOME]/md/jlib/sdoapi.jar oracle.spatial.util.SampleShapefileToJGeomFeature -h db_host -p db_port -s db_sid -u db_username -d db_password -t db_table -f shapefile_name [-i table_id_column_name][-r srid][-g db_geometry_column][-x max_x,min_x][-y max_y,min_y][-o tolerance]

パラメータ

-h: 既存のOracle Databaseがあるホスト・マシン

-p: ホスト・マシンのポート(1521など)

-s: ホスト・マシンのSID (データベース名)

-u: データベース・ユーザー

-d: データベース・ユーザーのパスワード

-t: 変換済シェープファイルの表名

-f: 入力シェープファイルのファイル名(拡張子の有無を問わない)

-i: 一意の数値IDの列名(必要な場合)

-r: 座標系の有効なOracle SRID (不明の場合は0を使用)

-g: 優先させるSDO_GEOMETRY列名

-x: X次元の境界(不明の場合は-180,180を使用)

-y: Y次元の境界(不明の場合は-90,90を使用)

-o: メタデータのロード許容差フィールド(xおよびy) (指定しない場合、許容差フィールドは0.05)

-a: 既存の表へのシェープファイル・データの追加

-n: -iパラメータで指定した列の開始ID

-c: コミット間隔(デフォルトでは、1000回の変換ごとおよび最後にコミットが発生)

-v: Println間隔(デフォルトでは、10回の変換ごとに表示)

D.2 シェープファイル・コンバータの例

次の例では、シェープファイル・コンバータを使用して、shapesという名前のファイルを、geomという名前のSDO_GEOMETRY列を含むshapesという名前の表に変換します。経度/緯度(WGS 84)座標系のSRIDが使用されます(8307)。

Linuxの例

> setenv clpath $ORACLE_HOME/jdbc/lib/ojdbc5.jar:$ORACLE_HOME/md/jlib/sdoutl.jar:$ORACLE_HOME/md/jlib/sdoapi.jar
> java -cp $clpath oracle.spatial.util.SampleShapefileToJGeomFeature -h gis01 -p 1521 -s orcl -u scott -d <password-for-scott> -t shapes -f shapes.shp -r 8307 -g geom

Windowsの例

> java -classpath %ORACLE_HOME%\jdbc\lib\ojdbc5.jar;%ORACLE_HOME%\md\jlib\sdoutl.jar;%ORACLE_HOME%\md\jlib\sdoapi.jar oracle.spatial.util.SampleShapefileToJGeomFeature -h gis01 -p 1521 -s orcl -u scott -d <password-for-scott> -t shapes -f shapes.shp -r 8307 -g geom

用語集

領域

次元空間の範囲または区域。

属性

点、線および領域などの地理的フィーチャの特性を定義する記述情報。

属性データ

多次元データについての追加記述情報(たとえば、クラス、または橋や道路などのフィーチャ)を規定する非次元データ。

バッチ・ジオコーディング

1つの表から多数のレコードを同時にジオコードする操作。「ジオコーディング」も参照。

境界

1. 次元範囲の下限および上限。数値によって表現されます。

2. ポリゴンのアウトラインを表現する線。

デカルト座標系

n次元空間内の1点の位置を、点から基準面までの距離によって定義する座標系。距離は、任意の基準面と交差する平面に対して平行に測定されます。「座標系」も参照。

コロケーション

複数の空間オブジェクトが同じ位置または非常に近い位置に存在することです。

CONTAINS

1つのオブジェクトが他のオブジェクトを包含し、内部のオブジェクトが外部のオブジェクトのどの境界にも接していない幾何学的関係。外部オブジェクトは内部オブジェクトを含む。「INSIDE」も参照。

凸型

対応付けられたジオメトリ・オブジェクトを完全に囲む単純な凸状のポリゴン。

座標

n次元座標系内の1点を一意的に定義する一連の値。

座標参照系

Oracle Spatialのドキュメントでは「座標系」と同義。座標参照系という用語は、European Petroleum Survey Group (EPSG)で広く使用されている。

座標系

n次元空間内の1点の位置を一意的に定義するための基準系。空間参照システム。「デカルト座標系」、「測地座標」、「投影座標」および「ローカル座標」も参照。

COVER

1つのオブジェクトが他のオブジェクトを包含し、内部のオブジェクトが外部のオブジェクトの境界に1つ以上の位置で接する幾何学的関係。

データ・ディクショナリ

データについての情報のリポジトリ。データ・ディクショナリには、データベース内のすべてのオブジェクトについてのリレーショナル情報が格納されます。

データ変換

「変換」を参照。

次元データ

1つ以上の次元コンポーネントを持ち、複数の値によって記述されるデータ。

方向

LRSジオメトリ・セグメントの方向は、開始点から終了点で表されます。ジオメトリ・セグメントの点の数は、常にセグメント方向に増加します。

DISJOINT

2つのオブジェクトがどのような方法でも相互作用しない幾何学的関係。2つの非接続のオブジェクトは、それぞれのジオメトリの要素または部分を共有しない。

要素

ジオメトリの基本的構成単位(点、線ストリングまたはポリゴン)。

EQUAL

2つのオブジェクトが同一の幾何学図形を表現するとみなされる幾何学的関係。2つのオブジェクトは同数の点で構成される必要がありますが、2つのオブジェクトのジオメトリを定義する点の順序は異なってもかまいません(時計回りまたは反時計回り)。

エクステント

地図の境界を示す矩形。そのサイズは最小および最大地図座標値によって決定されます。

フィーチャ

空間データベース内にある一連の固有の特性を持つオブジェクト。

ジオコーディング

住所データの表を規格化された住所、位置およびその他のデータに変換するプロセス。「バッチ・ジオコーディング」も参照。

測地座標

角度を持つ座標(経度および緯度)であり、球体の極点の座標と密接に関連している。また、地球上の特定の測地データに関連付けて定義される。地理座標ともいう。

測地データ

通常、部分的または全体的に地球の表面に近似した回転する扁平楕円体によって地球の形を表現し、測地座標系の参照として機能します。

地理座標

「測地座標」を参照。

地理情報システム(GIS)

空間データの取得、変換、格納、検索、分析および表示のために使用されるコンピュータ化されたデータベース管理システム。

地理的参照データ

「時空間データ」を参照。

ジオメトリ・セグメント(LRSセグメント)

開始点および終了点の開始メジャーおよび終了メジャーを含むLRS要素。セグメント上の他の点のメジャーを含むことも可能です。

ジオメトリ

座標空間における空間フィーチャの形を幾何学的に表現します。ジオメトリは、直線セグメントまたは円弧を結合した頂点を順番につなげたものです。

地理参照データ

「時空間データ」を参照。

GIS

「地理情報システム(GIS)」を参照。

格子

仮想的な格子の結節点に配置された点で構成されるデータ構造。結節点の間隔は、水平および垂直の両方向で一定です。

穴

内部の1つの区画を否定するポリゴンのサブ要素。たとえば、建築予定地の地図を表すポリゴンの内部に、湖を表す内部ポリゴンがあれば、これが穴になります。

同種

点、線、リージョンなど、1種類のフィーチャ・タイプで構成される空間データ。

高次空間データ

数学用語で、標準のX、YおよびZの値で構成される3次元以上の空間。多次元データともいいます。

索引

格納された情報へ高速かつ効率的にアクセスするために使用されるデータベース・オブジェクト。

INSIDE

1つのオブジェクトが他の大きいオブジェクトに囲まれ、内部のオブジェクトが外部のオブジェクトの境界に接しない幾何学的関係。小さいオブジェクトは大きいオブジェクトの内部にある。「CONTAINS」も参照。

キー

格納された情報へのアクセスを取得するために使用されるデータベース内のフィールド。

緯度

地表面上の1点の南北方向の位置。その点における地表面に対する法線と、赤道面の間の角度として定義されます。

レイヤー

同じ属性セットを持つ異種のジオメトリの集合。ジオメトリ列に格納されます。

線

一連の点によって表現される、または2つの座標点間に存在すると推論されるジオメトリ・オブジェクト。

線ストリング

線セグメントを定義する2点のペアの、1つ以上の集合。「複数線ストリング」」も参照。

線形フィーチャ

線形セグメントの論理セットとして扱われる空間オブジェクト。

ローカル座標

非地球(非地理参照)座標系のデカルト座標。

経度

地表面上の1点の東西方向の位置。基準子午面と、任意の1点を通過する子午面の間の角度として定義されます。

LRS点

線形メジャー情報を持つジオメトリ・セグメント上の点。「ジオメトリ・セグメント(LRSセグメント)」も参照。

メジャー

ジオメトリ・セグメントの開始点(値が増加する場合)または終了点(値が減少する場合)から測定された点までの(LRSメジャー次元の)線形距離。

メジャー範囲

ジオメトリ・セグメントの開始および終了点のメジャー値。

最小境界矩形(MBR)

1つまたは複数のジオメトリを囲む最小の矩形。

多次元データ

「高次空間データ」を参照。

複数線ストリング

接続されていない複数の線ストリング要素で構成されるジオメトリ・オブジェクト。たとえば、公園によって途切れている通り(Central Parkによって途切れているNew York市の6番街)などです。「線ストリング」を参照。

複数のポリゴン

輪をポリゴンによって分類し、各ポリゴンの最初の輪を外部の輪とする必要のあるポリゴンの集合ジオメトリ。

近隣の影響

「空間相関」を参照。

オフセット

ジオメトリ・セグメントに沿った点とジオメトリ・セグメント間の垂直距離。点がセグメント方向の左側にある場合、オフセット値は正、右側にある場合は負です。また、点がジオメトリ・セグメント上にある場合、オフセットは0(ゼロ)です。

方向付きの点

点の位置と仮想の終了点の位置を示す座標を含む特殊タイプの点ジオメトリ。点でのシンボルの回転や点からのラベルの引き出しに使用する方向ベクトルを表すことができます。

ポリゴン

面積および周囲の長さが0ではなく均一な特性を持つ閉じた境界リージョンを表現する空間オブジェクトを指す、1つのクラス。

1次フィルタ

候補レコードを高速に選択した後で、その結果セットを2次フィルタに渡す操作。1次フィルタでは、ジオメトリの近似値を比較して計算の複雑さを軽減させるため、これは低コスト化のためのフィルタであるといえます。1次フィルタでは、ジオメトリの近似値を比較するため、完全一致の結果セットのスーパーセットが戻されます。「2次フィルタ」および「2層問合せモデル」」も参照。

投影座標

地表の点を平面に数学的にマップした結果である平面的なデカルト座標。このような数学的マッピングは、それぞれ異なる目的に使用されます。

投影

指定した点の最短距離にあるLRSジオメトリ・セグメント上の点。

近接性

オブジェクト間の距離の大きさ。

問合せ

データベースから情報を取り出す基準となる一連の条件または質問。

問合せウィンドウ

空間情報および関連属性の取出しが実行される領域。

RDBMS

「リレーショナル・データベース管理システム」(RDBMS)」を参照。

再帰型

指定された条件が満たされるまで継続的に実行されるプロセス、ファンクションまたはルーチン。

リージョン

多次元空間の範囲または領域。

リレーショナル・データベース管理システム(RDBMS)

共有データの格納と検索用に設計されたコンピュータ・プログラム。リレーショナル・システムでは、同一の列のセットを持つ1つ以上の行で構成される表にデータが格納されます。Oracle Databaseは、オブジェクト・リレーショナル・データベース管理システムの1つです。その他のタイプのデータベース・システムは、階層型またはネットワーク型データベース・システムに分類されます。

解析数

データの細分化レベルの数値。

スケール

地図、写真またはイメージ上の距離の、その距離に対応する地表面上のイメージに対する(すべて同一の単位で表現された)比率。

2次フィルタ

1次フィルタの結果であるジオメトリを完全一致幾何学計算によって処理する操作。2次フィルタによって、空間問合せに対する完全一致の回答が得られます。2次フィルタ処理は、計算が複雑であるという点では高コストですが、データ・セット全体ではなく、1次フィルタから渡された結果セットのみに限定して処理されます。「1次フィルタ」および「2層問合せモデル」も参照。

形状点

LRSセグメントの作成時に指定される点で、メジャー情報が割り当てられます。

ソート

項目の順序および優先順位を判断するキーに基づいて項目の集合を配列する操作。

空間

n次元データの数学的概念を指すために使用される総称的用語。

空間のビニング

位置の値を、地理区域に関連付けられた少数のグループに区分するプロセス。空間の区分ともいう。

空間相関

ある地域に存在する特定のオブジェクトの位置が、そのオブジェクトの非空間属性に影響を及ぼす現象。近隣の影響ともいう。

空間データ

n次元空間内の位置によって参照されるデータ。空間データの位置は、複数の値によって記述されます。「高次空間データ」も参照。

空間データ・モデル

空間的コンテキストでのオブジェクトの配置状態のモデル。

空間データ構造

空間情報の格納およびその操作を容易にするために設計されたデータ構造体を指す、1つのクラス。

空間データベース

位置によって索引付けされた情報を格納するデータベース。

空間の区分

「空間のビニング」を参照。

空間結合

レイヤーと別のレイヤーの各ジオメトリを比較する問合せ。空間クロス積と比較可能です。

空間問合せ

一定の基準を持つ問合せ。選択されたフィーチャはこの基準の位置条件を満たす必要があります。

空間参照システム

「座標系」を参照。

時空間データ

次元の1つとして時間または位置(あるいはその両方)のコンポーネントを持つデータ。地理的参照データまたは地形参照データともいいます。

SQL*Loader

書式化されたデータを空間表にロードするためのユーティリティ。

許容差

2つの点が一致しない場合でも、(たとえば、丸めの誤差の調整のために)2点が同一の点とみなされる最大距離。許容差には、0(ゼロ)より大きい正の数字を指定する必要があります。値の重要度は、空間データが測地座標系に関連付けられているかどうかによって異なります。

TOUCH

2つのオブジェクトが境界上で共通の1点を共有しますが、その内部は交差部を持たない幾何学関係。

変換

ある座標系から別の座標系への座標の変換。座標系が地理参照座標系である場合、変換はデータ変換を伴う場合があります。データ変換は、ある測地データから別の測地データへ測地座標を変換します。通常、参照する楕円体の形、方向および中心が変化します。

2層問合せモデル

Spatialで使用される空間問合せおよび空間結合を解決する問合せモデル。問合せを解決するには、固有のフィルタ処理(1次フィルタ処理および2次フィルタ処理)が実行されます。両方の処理が実行されると、完全一致の結果セットが戻されます。「1次フィルタ」および「2次フィルタ」も参照。

索引
A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z

数字

0

タイプ0(ゼロ)要素, 2.7.7

3D

LRSファンクションの形式, 7.4

測地データでの非サポート, 6.10.2

空間オブジェクト, 1.11

ソリッド, 1.11.2

表面, 1.11.1

A

ADD_PREFERENCE_FOR_OPプロシージャ, 21

住所

ジオコーディングのための表現, 11.1.1

アフィン変換

入力ジオメトリ, 32

AFFINETRANSFORMSプロシージャ, 32 集計ファンクション

説明, 1.10

リファレンス情報, 20

SDO_AGGR_CENTROID, 20

SDO_AGGR_CONCAT_LINES, 20

SDO_AGGR_CONVEXHULL, 20

SDO_AGGR_LRS_CONCAT, 20

SDO_AGGR_MBR, 20

SDO_AGGR_SET_UNION, 20

SDO_AGGR_UNION, 20

SDOAGGRTYPEオブジェクト型, 1.10.1

AGGREGATES_FOR_GEOMETRYファンクション, 29 AGGREGATES_FOR_LAYERファンクション, 29 別名, 6.7.2 ALL_ANNOTATION_TEXT_METADATAビュー, 3.5.2 ALL_SDO_GEOM_METADATAビュー, 2.8 ALL_SDO_INDEX_INFOビュー, 2.9.1.1 ALL_SDO_INDEX_METADATAビュー, 2.9.1.2 アルファ・シェイプ

SDO_ALPHA_SHAPEファンクション, 24

ALTER INDEX文, 18

REBUILD句, 18

RENAME TO句, 18

角度単位, 6.8.2 注釈テキスト, 3.5 ANYINTERACT

SDO_ANYINTERACT演算子, 19

位相関係, 1.8

APPENDファンクション, 32 アプリケーションのサイズ(ハードウェア)要件, 1.20 アプリケーション・ユーザーの管理

アイデンティティ伝播のオプション, 17.1.1

円弧

稠密化, 24

測地データまたは変換での非サポート, 6.2.5

領域, 24 面積単位, 6.8.3 平均最小境界矩形, 31 AVERAGE_MBRプロシージャ, 31

B

一括ルート・リクエスト, 13.3.5.1

DTD, 13.3.5

例, 13.3.4

一括ルート・レスポンス

DTD, 13.3.6

例, 13.3.4

batch_route_request要素, 13.3.5.1 方位

点, 32

点から点への傾き, 32

BEARING_TILT_FOR_POINTSプロシージャ, 32 BIN_GEOMETRYファンクション, 29 BIN_LAYERプロシージャ, 29 ビニング

空間, 8.2

ビン

割当て, 29

計算, 29

四角形処理, 29

境界

領域, 1.8

線ストリング, 1.8

複数線ストリング, 1.8

ポリゴン, 1.8

境界矩形

最小, 31

ボックス

最適化, 2.2.4

British Grid Transformation OSTN02/OSGM02, 6.9.7 バッファ領域, 24 空間データのバルク・ロード, 4.1 ビジネス・ディレクトリ(YP)

データ要件およびプロバイダ, 12.2

データ構造, 12.3

OpenLSサービスのサポートおよび例, 14.3.4

Spatialのサポート, 12

C

C言語

例(OCIを使用), 1.22

デカルト座標, 1.5.4, 6.1.2 地図上のテキスト(注釈テキスト), 3.5 重心(中心), 24 中心

SDO_AGGR_CENTROID集計ファンクション, 20

SDO_CENTROIDファンクション, 24

円

近似するポリゴンの作成, 32

測地データまたは投影での非サポート, 6.2.5

タイプ, 2.2.4

CIRCLE_POLYGONファンクション, 32 CLIP_GEOM_SEGMENTファンクション, 25 CLIP_PCファンクション, 28 CLIP_TINプロシージャ, 30 クリップ

ジオメトリ・セグメント, 7.5.3

最近点

SDO_CLOSEST_POINTSプロシージャ, 24

COLOCATED_REFERENCE_FEATURESプロシージャ, 29 コロケーション・マイニング, 8.4 列名

空間列名の制限事項, 2.8.2

USER_SDO_GEOM_METADATAのCOLUMN_NAME, 2.8.2 互換性, A 複雑な例

問合せ, C

複合要素, 2.2.4 複合線ストリング, 2.2.4, 2.7.3 複合ポリゴン, 2.2.4 CONCAT_LINESファンクション, 32 CONCATENATE_GEOM_SEGMENTSファンクション, 25 連結

ジオメトリ・セグメント, 7.5.5

単一線または複数線のジオメトリ, 20

LRSジオメトリ, 7.5.5, 20

凹型

SDO_CONCAVEHULLファンクション, 24

SDO_CONCAVEHULL_BOUNDARYファンクション, 24

CONNECTED_GEOM_SEGMENTSファンクション, 25 一貫性

ジオメトリ・タイプが有効であるかどうかのチェック, 24

特定のジオメトリ・タイプへのデータの制約, 5.1.1 コンストラクタ

SDO_GEOMETRYオブジェクト型, 2.4

CONTAINS

SDO_CONTAINS演算子, 19

位相関係, 1.8

CONVERSION_FACTOR列

SDO_ANGLE_UNITS表, 6.8.2

SDO_AREA_UNITS表, 6.8.3

SDO_DIST_UNITS表, 6.8.5

CONVERT_NADCON_TO_XMLプロシージャ, 21 CONVERT_NTV2_TO_XMLプロシージャ, 21 CONVERT_TO_LRS_DIM_ARRAYファンクション, 25 CONVERT_TO_LRS_GEOMファンクション, 25 CONVERT_TO_LRS_LAYERファンクション, 25 CONVERT_TO_STD_DIM_ARRAYファンクション, 25 CONVERT_TO_STD_GEOMファンクション, 25 CONVERT_TO_STD_LAYERファンクション, 25 CONVERT_UNITファンクション, 32 CONVERT_XML_TO_NADCONプロシージャ, 21 CONVERT_XML_TO_NTV2プロシージャ, 21 変換

ジオメトリ・セグメント

概要, 7.5.10

サブプログラム, 25

凸型

SDO_AGGR_CONVEXHULL集計ファンクション, 20

SDO_CONVEXHULLファンクション, 24

座標次元

ST_CoordDimメソッド, 2.3

座標参照系

「座標系」を参照

座標系, 1.5.4

概念および使用方法, 6

Oracleの提供するデータ構造, 6.7

例, 6.13

ローカル, 6.3

サブプログラムのリファレンス情報, 21

測定単位のサポート, 2.10

ユーザー定義, 6.9

座標

デカルト, 1.5.4, 6.1.2

測地, 1.5.4, 6.1.3, 6.2

地理, 1.5.4, 6.1.3

ローカル, 1.5.4, 6.1.5

投影, 1.5.4, 6.1.4

COVEREDBY

SDO_COVEREDBY演算子, 19

位相関係, 1.8

COVERS

SDO_COVERS演算子, 19

位相関係, 1.8

空間アプリケーションのCPU要件, 1.20 CREATE INDEX文, 18 CREATE_CONCATENATED_OPプロシージャ, 21 CREATE_OBVIOUS_EPSG_RULESプロシージャ, 21 CREATE_PCプロシージャ, 28 CREATE_PREF_CONCATENATED_OPプロシージャ, 21 CREATE_PROFILE_TABLESプロシージャ, 23 CREATE_TINプロシージャ, 30 XMLTableIndexメソッドの作成, 15.4.1, 16.4.1 作成

ジオメトリ・セグメント

サブプログラム, 25

クロススキーマの索引作成, 5.1.2 CS_SRS表, 6.8.1 今回のリリース

空間データのアップグレード, 26

cutoff_distance属性

一括ルート・リクエスト, 13.3.5.2

D

データ・マイニング

空間

コロケーション・マイニング, 8.4

概念および使用方法, 8

ファンクションのリファレンス情報, 29

データ・モデル, 1.5

LRS, 7.2

データ型

ジオコーディング, 11.2

空間, 2

データベース・リンク

空間索引が表で定義されている場合の非サポート, 5.2

data-sources.xmlファイル, 10.3 データ

測地, 1.5.4, 6.1.6

MDSYS.SDO_DATUMS_OLD_FORMAT表, 6.8.4

MDSYS.SDO_DATUMS_OLD_SNAPSHOT表, 6.8.4

変換, 6.1.7

dblink

空間索引が表で定義されている場合の非サポート, 5.2

DEFINE_GEOM_SEGMENTプロシージャ, 25 定義

ジオメトリ・セグメント, 7.5.1

DELETE_ALL_EPSG_RULESプロシージャ, 21 DELETE_OPプロシージャ, 21 DeleteCapabilitiesInfoプロシージャ, 22 deleteDomainInfoメソッド, 16.4.2 DeleteDomainInfoプロシージャ, 22 DeletePluginMapプロシージャ, 22 deleteRecordViewMapメソッド, 16.4.3 DeleteRecordViewMapプロシージャ, 22 デモ・ファイル

SpatialのWebサービス, 10.4

円弧の稠密化, 24 詳細なルート・ジオメトリ

ルート・リクエスト, 13.3.2.2

DETERMINE_CHAINファンクション, 21 DETERMINE_DEFAULT_CHAINファンクション, 21 差

SDO_GEOM.SDO_DIFFERENCEファンクション, 24

次元(SDO_GTYPE), 2.2.1, 2.2.1

Get_Dimsメソッド, 2.3

Get_LRS_Dimメソッド, 2.3

USER_SDO_GEOM_METADATAのDIMINFO, 2.8.3 ジオメトリ・セグメント方向, 7.1.3

連結結果, 7.5.5

disableVersioningメソッド, 16.4.4 区分(ビニング)

空間, 8.2

「bins」も参照

DISJOINT

位相関係, 1.8

空間アプリケーションのディスク領域要件, 1.20 距離

SDO_NN_DISTANCE補助演算子, 19

WITHIN_DISTANCEファンクション, 24

距離単位, 6.8.5 distance_unit属性

ルート・リクエスト, 13.3.2.2

分散トランザクション

空間索引の一貫性を確保する要件, 5.1.6

ドキュメントベース・フィーチャ・タイプ(WFS), 15.2 ドメイン情報(CSW)

削除, 16.4.2

ドメイン(CSW)

情報の設定, 16.4.17

ジオメトリの簡略化に使用するDouglas-Peuckerアルゴリズム, 32 ダウングレード

Oracle Spatialを以前のリリースのOracle Databaseにダウングレード, A

運転方向

ルート・リクエスト, 13.3.2.2

driving_directions_detail属性

ルート・リクエスト, 13.3.2.2

DROP INDEX文, 18 DROP_DEPENDENCIESプロシージャ, 28, 30 DROP_WORK_TABLESプロシージャ, 32 dropFeatureTypeメソッド, 15.4.2 DropFeatureTypeプロシージャ, 34 DropFeatureTypesプロシージャ, 34 dropRecordTypeメソッド, 16.4.5 dropXMLTableIndexメソッド, 15.4.3, 16.4.6 重複する頂点

削除, 32

動的問合せウィンドウ, 5.2.1 DYNAMIC_SEGMENTファンクション, 25

E

.earファイル

SpatialのWebサービスの構成, 17.3

エッジID値

ルート・リクエストのサブルート, 13.3.2.2

ルート・リクエスト, 13.3.2.2, 13.3.2.2

EDGE表

ルーティング・エンジンの使用, 13.4.1

編集

ジオメトリ・セグメント

サブプログラム, 25

ELEM_INFO(SDO_ELEM_INFO属性), 2.2.4 要素, 1.5.1

ジオメトリからの抽出, 32, 32

戻されるジオメトリの要素の番号, 32

戻されるジオメトリの頂点の数, 32

楕円

近似するポリゴンの作成, 32

ELLIPSE_POLYGONファンクション, 32 楕円体高, 6.2.3, 6.5.1 楕円体

MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表, 6.8.6

MDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT表, 6.8.6

ユーザー定義型へのSDO_GEOMETRYオブジェクトの埋込み, 9.1 EnableDBTxnsプロシージャ, 33 enableVersioningメソッド, 16.4.7 ルートの目的地, 13.3.2.1 エンティティ関連(E-R)ダイアグラム

EPSGの表, 6.7.28

EPSG

エンティティ関連(E-R)ダイアグラム, 6.4

表名からOracle Spatial名へのマッピング, 6.7.28

Oracle SRIDのマッピング, 21

SRIDのOracle SRIDへのマッピング, 21

モデルとSpatialでの使用, 6.4

Spatialで使用されるデータセットのバージョン番号, 21

EQUAL

SDO_EQUAL演算子, 19

位相関係, 1.8

E-R(エンティティ関連ダイアグラム)

EPSGの表, 6.7.28

エラー・メッセージ

ジオコーディング, 11.1.4

空間, 1.21

ESRIシェープファイル

空間へのロード, D

ESTIMATE_RTREE_INDEX_SIZEファンクション, 31 ETYPE(SDO_ETYPE値), 2.2.4, 2.2.4 European Petroleum Survey Group

「EPSG」を参照

例

一括ルート・リクエストおよび一括ルート・レスポンス, 13.3.4

C, 1.22

複雑な問合せ, C

座標系, 6.13

空間データの作成, 索引付けおよび問合せ, 2.1

Spatialの例のディレクトリ, 1.22

線形参照システム(LRS), 7.7

様々なジオメトリ・タイプ(作成), 2.7

OCI(Oracle Call Interface), 1.22

PL/SQL, 1.22

ルート・リクエストおよびルート・レスポンス, 13.3.1

ジオコード済の場所を使用した場合のルート・リクエスト, 13.3.1

ジオコード済の場所を使用した場合のルート・レスポンス, 13.3.1

SQL, 1.22

索引を含むパーティションの交換, 5.1.4 エクスポート・ユーティリティ

空間索引および空間データ, 5.1.5

EXTENT_OFファンクション, 31 ポリゴンの外部の輪, 2.2.4, 2.2.4, 2.7.2, 2.7.2 外側のソリッド, 2.2.4 EXTRACTファンクション, 32 EXTRACT_ALLファンクション, 32 EXTRACT3Dファンクション, 32 extractSDOファンクション, 16.2.2 EXTRUDEファンクション, 32 押出し

作成, 32

F

フィーチャ・タイプ

削除, 15.4.2

ユーザーへのアクセス権限の付与, 15.4.5

パブリッシュ, 15.4.7

ユーザーからのアクセス権限の取消し, 15.4.8

フィーチャ

線形, 7.1.10

FILTER

SDO_FILTER演算子, 19

SDO_JOINのFILTERマスク値, 19 FIND_GEOG_CRSファンクション, 21 FIND_LRS_DIM_POSファンクション, 25 FIND_MEASUREファンクション, 25 FIND_OFFSETファンクション, 25 FIND_PROJ_CRSファンクション, 21 FIND_SRIDプロシージャ, 21 形式化された住所, 11.1.1 FROM_GML311GEOMETRYファンクション, 32 FROM_GMLGEOMETRYファンクション, 32 FROM_KMLGEOMETRYファンクション, 32 FROM_OGC_SIMPLEFEATURE_SRSファンクション, 21 FROM_USNGファンクション, 21 FROM_WKBGEOMETRYファンクション, 32 FROM_WKTGEOMETRYファンクション, 32 錐台, 1.11.2 ファンクション索引

SDO_GEOMETRYオブジェクト, 9.2

ファンクション

空間集計, 20

近似処理による測地データでのサポート, 6.10.3

G

GC_ADDRESS_POINT_<接頭辞>表, 11.5.1

GC_AREA_<接尾辞>表, 11.5.2

GC_COUNTRY_PROFILE表, 11.5.3

GC_INTERSECTION_<接尾辞>表, 11.5.4

GC_PARSER_PROFILEAFS表, 11.5.6

GC_PARSER_PROFILES表, 11.5.5

GC_POI_<接尾辞>表, 11.5.7

GC_POSTAL_CODE_<接尾辞>表, 11.5.8

GC_ROAD_<接尾辞>表, 11.5.9

GC_ROAD_SEGMENT_<接尾辞>表, 11.5.10

GenCollectionProcsプロシージャ, 34

GEOCODEファンクション, 23

GEOCODE_ADDRファンクション, 23

GEOCODE_ADDR_ALLファンクション, 23

GEOCODE_ALLファンクション, 23

GEOCODE_AS_GEOMETRYファンクション, 23

ジオコーディング, 1.12

概念, 11.1

データ要件, 11.3

データ型, 11.2

エラー・メッセージ, 11.1.4

場所名から, 11.4

ジオコーディングの表に必要な索引, 11.5.11

一致コード, 11.1.3

一致モード, 11.1.2

逆, 23

サブプログラムのリファレンス情報, 23

使用方法, 11

ジオコーディング・リクエスト

DTD, 11.7.2

ジオコーディング・レスポンス

DTD, 11.7.3

測地座標, 1.5.4, 6.1.3

円弧および円の非サポート, 6.2.5

近似処理によってサポートされるファンクション, 6.10.3

サポート, 6.2

測地データ, 1.5.4, 6.1.6 測地MBR, 6.2.4 地理座標

「測地座標」を参照

Geography Markup Language(GML)

ジオメトリの変換, 32, 32

GEOM_SEGMENT_END_MEASUREファンクション, 25 GEOM_SEGMENT_END_PTファンクション, 25 GEOM_SEGMENT_LENGTHファンクション, 25 GEOM_SEGMENT_START_MEASUREファンクション, 25 GEOM_SEGMENT_START_PTファンクション, 25 ジオメトリ・セグメント

クリップ, 7.5.3

連結, 7.5.5

集計, 7.5.5, 20

変換(概要), 7.5.10 変換(サブプログラム), 25 作成(サブプログラム), 25 定義付け, 7.5.1 定義, 7.1.1 方向, 7.1.3 連結時の方向, 7.5.5 編集(サブプログラム), 25 点の位置の確認, 7.5.8 オフセット設定, 7.5.7 投影点, 7.5.9 問合せ(サブプログラム), 25 再定義, 7.5.2 スケール変更, 7.5.6 分割, 7.5.4 ジオメトリ・サブプログラム

リファレンス情報, 24

ジオメトリ・タイプ, 1.4

データの制約, 5.1.1

Get_GTypeメソッド, 2.3

SDO_GTYPE, 2.2.1

GeoRaster

アップグレード後の確認と操作, A.2

gerRecordTypeIdメソッド, 16.4.9 Get_Dimsメソッド, 2.3 GET_EPSG_DATA_VERSIONファンクション, 21 Get_GTypeメソッド, 2.3 Get_LRS_Dimメソッド, 2.3 GET_MEASUREファンクション, 25 GET_NEXT_SHAPE_PTファンクション, 25 GET_NEXT_SHAPE_PT_MEASUREファンクション, 25 GET_PREV_SHAPE_PTファンクション, 25 GET_PREV_SHAPE_PT_MEASUREファンクション, 25 GET_PT_IDSファンクション, 28 Get_WKBメソッド, 2.3 Get_WKTメソッド, 2.3 GetFeatureTypeIdファンクション, 34 getIsXMLTableIndexCreatedメソッド, 15.4.4, 16.4.8 GETNUMELEMファンクション, 32 GETNUMVERTICESファンクション, 32 GetRecordTypeIdファンクション, 22 GETVERTICESファンクション, 32 GML(Geography Markup Language)

ジオメトリの変換, 32, 32

Google Maps

空間アプリケーションの使用に関する考慮事項, 6.12

grantFeatureTypeToUserメソッド, 15.4.5 GrantFeatureTypeToUserプロシージャ, 34 grantMDAccessToUserメソッド, 15.4.6, 16.4.10 GrantMDAccessToUserプロシージャ, 34 grantRecordTypeToUserメソッド, 16.4.11 重力に関係する高さ, 6.5.2 GTYPE(SDO_GTYPE属性), 2.2.1

特定のジオメトリ・タイプへのデータの制約, 5.1.1

Get_Dimsメソッド, 2.3

Get_GTypeメソッド, 2.3

GET_LRS_Dimメソッド, 2.3

H

空間アプリケーションのハードウェア要件, 1.20

高さ

楕円形, 6.5.1

楕円体と非楕円体, 6.2.3

重力に関係する高さ, 6.5.2

階層的な運転方向

ルート・リクエスト, 13.3.2.2

I

id属性

ルート・リクエスト, 13.3.2.2

アイデンティティ伝播

アプリケーション・ユーザーの管理, 17.1.1

プロキシ認証, 17.1.1

単一アプリケーション・ユーザー, 17.1.1

SpatialのWebサービス, 17.1.1

インポート・ユーティリティ

空間索引および空間データ, 5.1.5

索引

分散トランザクションと空間索引の一貫性, 5.1.6

索引

作成, 5.1

クロススキーマ, 5.1.2

パラレル実行, 18

空間索引の説明, 1.7 空間索引付け機能の拡張, 9 SDO_GEOMETRYオブジエクトでのファンクション索引, 9.2 パーティション, 5.1.3

索引を含むパーティションの交換, 5.1.4

再作成, 18

パラレル実行, 18, 18

Rツリー

説明, 1.7.1

作成前の要件, 5.1.7

サイズ(Rツリー), 31 索引構成表

空間索引を作成できない表, 2.8.1, 18

INITファンクション, 28, 30 INITIALIZE_INDEXES_FOR_TTSプロシージャ, 32 input_location要素, 13.3.2.3 InsertCapabilitiesInfoプロシージャ, 22, 34 InsertDomainInfoプロシージャ, 22 InsertFtDataUpdatedプロシージャ, 34 InsertFtMDUpdatedプロシージャ, 34 空間データの挿入

PL/SQL, 4.2

InsertPluginMapプロシージャ, 22 InsertRecordViewMapプロシージャ, 22 InsertRtDataUpdatedプロシージャ, 22 InsertRtMDUpdatedプロシージャ, 22 INSIDE

SDO_INSIDE演算子, 19

位相関係, 1.8

インストール, A

LocatorのOracle Multimedia要件, B

INTEPRETATION(SDO_INTERPRETATION値), 2.2.4 相互作用

ANYINTERACT, 1.8

内部

領域, 1.8

ポリゴンの内部の輪, 2.2.4, 2.2.4, 2.7.2, 2.7.2 内側のソリッド, 2.2.4 INTERIOR_POINTファンクション, 32 ISO(国際標準化機構)

標準への空間の準拠, 1.16

共通部分, 24, 25 共通部分

GC_INTERSECTION_<接尾辞>表, 11.5.4

逆フラット化, 6.7.23, 6.8.6 IS_GEOM_SEGMENT_DEFINEDファンクション, 25 IS_MEASURE_DECREASINGファンクション, 25 IS_MEASURE_INCREASINGファンクション, 25 IS_SHAPE_PT_MEASUREファンクション, 25 ISO(国際標準化機構)

標準への空間の準拠, 1.16

J

SpatialのJava Application Programming Interface(API), 1.13

WFS管理, 15.4, 16.4

結合

SDO_JOIN演算子, 19

K

Keyhole Markup Language (KML)

FROM_KMLGEOMETRYファンクション, 32

TO_KMLGEOMETRYファンクション, 32

KML

FROM_KMLGEOMETRYファンクション, 32

TO_KMLGEOMETRYファンクション, 32

L

言語属性

ルート・リクエスト, 13.3.2.2

レイヤー, 1.5.3

変換, 21

コンテキストの検査, 24

layer_gtype

特定のジオメトリ・タイプへのデータの制約, 5.1.1

長さ

SDO_LENGTHファンクション, 24

線

ポリゴンの変換, 32

データ, 1.5.1

長さ, 24

線ストリング

境界, 1.8

複合, 2.2.4, 2.7.3

反転, 32

自己交差, 1.4

線形フィーチャ, 7.1.10 線形メジャー, 7.1.4 線形参照システム(LRS)

ファンクションの3D形式, 7.4

測地データでの非サポート, 6.10.2

概念および使用方法, 7 データ・モデル, 7.2 例, 7.7 Get_LRS_Dimメソッド, 2.3 XおよびY次元に対する索引付けの制限, 7.3 LRS点, 7.1.9 セグメント, 7.1.1 サブプログラムのリファレンス情報, 25 LRSファンクションの許容差, 7.6 空間データのロード, 4 ローカル座標系, 6.3 ローカル座標, 1.5.4, 6.1.5 LOCALパーティション化

空間索引, 5.1.3

LOCATE_PTファンクション, 25 ルート・セグメントの位置, 13.3.2.1 位置の予測, 8.6 Locator, B

手動インストール, B.1

LRS

「線形参照システム(LRS)」を参照

LRS点, 7.1.9 LRS_INTERSECTIONファンクション, 25

M

MAKE_3Dファンクション, 21, 21

MakeOpenLSClobRequestファンクション, 27

MakeOpenLSRequestファンクション, 27

投影図

MDSYS.SDO_PROJECTIONS_OLD_FORMAT表, 6.8.7

MDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT表, 6.8.7

MAP_EPSG_SRID_TO_ORACLEファンクション, 21 MAP_ORACLE_SRID_TO_EPSGファンクション, 21 一致コード, 11.1.3 一致モード, 11.1.2 一致ベクトル(MatchVector属性)

ジオコーディング, 11.1.5

max-corner値

3次元の矩形, 1.11.3

MBR

「最小境界矩形(MBR)」を参照

MDDATAアカウントおよびスキーマ, 1.14 mddins.sqlスクリプト, B.1 mdinst.sqlスクリプト, B.1 MDSYSスキーマ, 1.1

移行時に移行先データベースに存在することが必要, A.1

MDSYS.CS_SRS表, 6.8.1 MDSYS.MOVE_SDOプロシージャ, 1.19 MDSYS.SDO_ANGLE_UNITS表, 6.8.2 MDSYS.SDO_AREA_UNITSビュー, 6.8.3 MDSYS.SDO_CSパッケージ, 21 MDSYS.SDO_DATUMS_OLD_FORMAT表, 6.8.4 MDSYS.SDO_DATUMS_OLD_SNAPSHOT表, 6.8.4 MDSYS.SDO_DIST_UNITSビュー, 6.8.5 MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表, 6.8.6 MDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT表, 6.8.6 MDSYS.SDO_GCDRパッケージ, 23 MDSYS.SDO_GEOM_PATH_INFO型, 16.2.2 MDSYS.SDO_OLSパッケージ, 27 MDSYS.SDO_PROJECTIONS_OLD_FORMAT表, 6.8.7 MDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT表, 6.8.7 MDSYS.SDO_SAMパッケージ, 29 MDSYS.SDO_WFS_LOCKパッケージ, 33 MDSYS.SDO_WFS_PROCESSパッケージ, 22, 34 平均海水面(MSL), 6.2.3.1 メジャー, 7.1.4

移入, 7.1.6

再設定, 25

反転, 25

複数線ストリングおよび穴があるポリゴン, 7.1.11

メジャー範囲, 7.1.7 MEASURE_RANGEファンクション, 25 MEASURE_TO_PERCENTAGEファンクション, 25 メッセージ

Spatialのエラー・メッセージ, 1.21

メソッド

SDO_GEOMETRYオブジェクト型, 2.3

移行, A.1

(「アップグレード」も参照)

min-corner値

3次元の矩形, 1.11.3

最小境界矩形(MBR)

AVERAGE_MBRプロシージャ, 31

EXTENT_OFファンクション, 31

測地, 6.2.4

SDO_AGGR_MBR集計ファンクション, 20

SDO_MAX_MBR_ORDINATEファンクション, 24

SDO_MBRファンクション, 24

SDO_MIN_MBR_ORDINATEファンクション, 24

マイニング

「データ・マイニング」を参照

MIX_INFOプロシージャ, 31 MOVE_SDOプロシージャ, 1.19 MSL(平均海水面), 6.2.3.1 マルチアドレス・ルーティング, 13.1 複数線ストリング

境界, 1.8

LRSメジャー値, 7.1.11

マルチマスター・レプリケーション

SDO_GEOMETRYオブジェクト, B

複数のポリゴン, 2.7.2

N

NaC座標参照系, 6.10.4

NADCONグリッド

Spatial XML形式からNADCON形式への変換, 21

Spatial XML形式への変換, 21

名前の競合

SQL Multimediaの実装による回避, 3.4

名前付けに関する注意事項

Spatialの表名および列名, 2.8

最も近くにあるジオメトリ

SDO_NN演算子, 19

SDO_NN_DISTANCE演算子, 19

近隣の影響, 8.3 NODE表

ルーティング・エンジンの使用, 13.4.2

非楕円体高, 6.2.3 法線ベクトル, 1.11.5 NTv2グリッド

Spatial XML形式からNTv2形式への変換, 21

Spatial XML形式への変換, 21

O

オブジェクト型

SDO_GEOMETRYオブジェクトの埋込み, 9.1, 9.2.2

OCG(Open Geospatial Consortium)シンプル・フィーチャへの準拠, 1.16 OCI(Oracle Call Interface)の例, 1.22 ODM

「Oracle Data Mining (ODM)」を参照

オフセット, 7.1.5

FIND_OFFSETファンクション, 25

OFFSET_GEOM_SEGMENTファンクション, 25 オフセット設定

ジオメトリ・セグメント, 7.5.7

OGC_XおよびOGC_Yファンクションの名前, 1.16 ON

SDO_ON演算子, 19

位相関係, 1.8

Open Geospatial Consortium(OCG)シンプル・フィーチャへの準拠, 1.16 OpenLS

サブプログラムのリファレンス情報, 27

OPENLS_DIR_BUSINESS_CHAINS表, 12.3.2 OPENLS_DIR_BUSINESSES表, 12.3.1 OPENLS_DIR_CATEGORIES表, 12.3.3 OPENLS_DIR_CATEGORIZATIONS表, 12.3.4 OPENLS_DIR_CATEGORY_TYPES表, 12.3.5 OPENLS_DIR_SYNONYMS表, 12.3.6 演算子

ORDEREDオプティマイザ・ヒント, 1.9

SDO_FILTER, 19

SDO_JOIN, 19

概要, 1.9 パフォーマンスに関するガイドライン, 1.9 SDO_ANYINTERACT, 19 SDO_CONTAINS, 19 SDO_COVEREDBY, 19 SDO_COVERS, 19 SDO_EQUAL, 19 SDO_FILTER, 19 SDO_INSIDE, 19 SDO_JOIN, 19 SDO_NN, 19 SDO_NN_DISTANCE, 19 SDO_ON, 19 SDO_OVERLAPBDYDISJOINT, 19 SDO_OVERLAPBDYINTERSECT, 19 SDO_OVERLAPS, 19 SDO_RELATE, 19 SDO_TOUCH, 19 SDO_WITHIN_DISTANCE, 19 最適化されたボックス, 2.2.4 最適化された矩形, 2.2.4

3次元, 1.11.3

空間演算子を使用したオプティマイザ・ヒント(ORDERED), 1.9

SDO_FILTER, 19

SDO_JOIN, 19

Oracle Call Interface(OCI)の例, 1.22 Oracle Data Mining(ODM)

空間分析およびマイニングの情報, 8

Oracle Database 10g

Spatialのアップグレード, A

Oracle Locator

「Locator」を参照

Oracle Multimedia

Locatorに必要な適切なインストール, B

Oracle Workspace Manager

WFSでの使用, 15.5

空間演算子を使用したORDEREDオプティマイザ・ヒント, 1.9

SDO_FILTER, 19

SDO_JOIN, 19

Ordnance Surveyグリッド変換, 6.9.7 方向付きの点

図および例, 2.7.6

海抜高度, 6.5.2 OSTN02/OSGM02グリッド変換, 6.9.7 OVERLAPBDYDISJOINT

SDO_OVERLAPBDYDISJOINT演算子, 19

位相関係, 1.8

OVERLAPBDYINTERSECT

SDO_OVERLAPBDYINTERSECT演算子, 19

位相関係, 1.8

OVERLAPS

SDO_OVERLAPS演算子, 19

P

索引の作成および再作成のパラレル実行, 18, 18, 18

パーサー・プロファイル

GC_PARSER_PROFILEAFS表, 11.5.6

GC_PARSER_PROFILES表, 11.5.5

PARTITION表

ルーティング・エンジンの使用, 13.4.3

パーティション化された空間索引, 5.1.3

パーティションの交換, 5.1.4

PERCENTAGE_TO_MEASUREファンクション, 25 パフォーマンスおよびチューニングの情報, 1.15

空間演算子, 1.9

PL/SQLおよびSQLの例, 1.22 プラグイン

レコード・タイプの登録, 16.4.13

点

データ, 1.5.1

点のみのジオメトリの図および例, 2.7.5

ポリゴン上の内部, 32

ジオメトリ・セグメントでの位置, 7.5.8

LRS, 7.1.9

ポリゴン上, 24

方向付きの点, 2.7.6

ジオメトリ・セグメント上の投影, 7.1.8, 7.5.9

形状, 7.1.2

点群

クリップ, 28

ジオメトリへの変換, 28

依存性の削除, 28

点IDの取得, 28

初期化, 28

ソリッドのモデル化, 1.11.2

サブプログラム, 28

対象点(POI)

GC_POI_<接尾辞>表, 11.5.7

POINT_AT_BEARINGファンクション, 32 ポリシー

SDO_FILTERに関連するRLSの制限事項, 19

ポリゴン

面積, 24

境界, 1.8

バッファ, 24

中心, 24

複合, 2.2.4

外部および内部の輪, 2.2.4, 2.2.4, 2.7.2, 2.7.2

内部の点, 32

領域にある点, 24

自己交差の非サポート, 1.4

自己交差ポリゴン, 24

穴のあるポリゴン(LRSメジャー値), 7.1.11

ポリゴンの集合, 2.7.2 ポリゴン・データ, 1.5.1 POLYGONTOLINEファンクション, 32 PopulateFeatureTypeXMLInfoプロシージャ, 34 移入

メジャー, 7.1.6

pre_geocoded_location要素, 13.3.2.4 pre_geocoded_locations属性

ルート・リクエスト, 13.3.2.2

PREPARE_FOR_TTSプロシージャ, 32 1次フィルタ, 1.6, 5.2.1.1, 5.2.1.2 基本タイプ, 1.4 今回のリリースの問題点, 6.10 PROJECT_PTファンクション, 25 投影座標, 1.5.4, 6.1.4 投影, 7.1.8, 7.5.9

MDSYS.SDO_PROJECTIONS_OLD_FORMAT表, 6.8.7

MDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT表, 6.8.7

PROJECT_PTファンクション, 25

プロキシ認証

アイデンティティ伝播のオプション, 17.1.1

publishFeatureTypeメソッド, 15.4.7 PublishFeatureTypeプロシージャ, 34 publishRecordTypeメソッド, 16.4.12

Q

品質

Rツリー, 1.7.2

QUALITY_DEGRADATIONファンクション(非推奨), 31 問合せ, 5.2.1 Spatialの問合せモデル, 1.6 問合せウィンドウ, 5.2.1 ジオメトリ・セグメントの問合せ

サブプログラム, 25

R

範囲

メジャー, 7.1.7

READMEファイル

Spatial, GeoRaster, トポロジおよびネットワーク・データ・モデル, 1.23

再作成

空間索引, 18

レコード・タイプ

削除, 16.4.5

IDの取得, 16.4.9

ユーザーへのアクセス権限の付与, 16.4.11

パブリッシュ, 16.4.12

プラグインの登録, 16.4.13

ユーザーからのアクセス権限の取消し, 16.4.15

機能情報の設定, 16.4.16

レコード・ビューのマップ

削除, 16.4.3

レコード・ビューのマップ(設定), 16.4.18 矩形

最小境界, 31

3次元の最適化, 1.11.3

タイプ, 2.2.4

ジオメトリの修正, 32 RECTIFY_GEOMETRYファンクション, 32 REDEFINE_GEOM_SEGMENTプロシージャ, 25 再定義

ジオメトリ・セグメント, 7.5.2

RegisterFeatureTableプロシージャ, 33 RegisterMTableViewプロシージャ, 34 registerTypePluginMapメソッド, 16.4.13 RELATEファンクション, 24

「SDO_RELATE演算子」を参照

リレーショナル・フィーチャ・タイプ(WFS), 15.2 リリース番号(Spatial)

取得, 1.17

REMOVE_DUPLICATE_VERTICESファンクション, 32 レプリケーション

マルチマスター, B

オブジェクト, B

RESET_MEASUREプロシージャ, 25 今回のリリースの制限事項, 6.10 return_detailed_geometry属性

ルート・リクエスト, 13.3.2.2

return_driving_directions属性

ルート・リクエスト, 13.3.2.2

return_hierarchical_driving_directions属性

ルート・リクエスト, 13.3.2.2

return_locations属性

ルート・リクエスト, 13.3.2.2

return_route_edge_ids属性

ルート・リクエスト, 13.3.2.2, 13.3.2.2

return_route_geometry属性

一括ルート・リクエスト, 13.3.5.2

ルート・リクエスト, 13.3.2.2

return_segment_geometry属性

一括ルート・リクエスト, 13.3.5.2

ルート・リクエスト, 13.3.2.2

return_subroute_edge_ids属性

ルート・リクエスト, 13.3.2.2

return_subroute_geometry属性

ルート・リクエスト, 13.3.2.2

return_subroutes属性

ルート・リクエスト, 13.3.2.2

逆ジオコード, 23 REVERSE_GEOCODEファンクション, 23 REVERSE_GEOMETRYファンクション, 25 REVERSE_LINESTRINGファンクション, 32 REVERSE_MEASUREファンクション, 25 REVOKE_PREFERENCE_FOR_OPプロシージャ, 21 revokeFeatureTypeFromUserメソッド, 15.4.8 RevokeFeatureTypeFromUserプロシージャ, 34 RevokeMDAccessFromUserプロシージャ, 34 revokeMDAccessToUserメソッド, 15.4.9, 16.4.14 revokeRecordTypeFromUserメソッド, 16.4.15 輪

ポリゴンの外部および内部, 2.2.4

ジオメトリからの抽出, 32, 32

RLS

ファイングレイン・アクセス制御ポリシーおよびSDO_FILTERに関する制限事項, 19

道路セグメント

GC_ROAD_SEGMENT_<接尾辞>表, 11.5.10

road_preference属性

一括ルート・リクエスト, 13.3.5.2

ルート・リクエスト, 13.3.2.2

道路

GC_ROAD_<接尾辞>表, 11.5.9

ロールバック・セグメント

Rツリー索引の作成, 5.1.7

ルート・ジオメトリ

ルート・リクエスト, 13.3.2.2

ルート・リクエスト, 13.3.2.1

DTD, 13.3.2

例, 13.3.1

ジオコード済の場所, 13.3.1

input_location要素, 13.3.2.3 pre_geocoded_location要素, 13.3.2.4 ルート・レスポンス

DTD, 13.3.3

例, 13.3.1

ジオコード済の場所, 13.3.1

route_preference属性

ルート・リクエスト, 13.3.2.2

route_request要素, 13.3.2.1 ルーティング・エンジン

構成, 13.2

使用されるデータ構造, 13.4

デプロイ, 13.2

マルチアドレス・ルーティング, 13.1

概要, 13

XML API, 13.3

Rツリー索引

索引付け処理の説明, 1.7.1

再作成, 18

作成前の要件, 5.1.7

順序オブジェクト, 2.9.3

Rツリーの品質, 1.7.2

S

SCALE_GEOM_SEGMENTファンクション, 25

スケール変更

ジオメトリ・セグメント, 7.5.6

スキーマ

他のスキーマの表での索引作成, 5.1.2

他のスキーマの表でのSDO_JOINの起動, 19

SDO_ADDR_ARRAYデータ型, 11.2.2 SDO_AGGR_CENTROID集計ファンクション, 20 SDO_AGGR_CONCAT_LINES集計ファンクション, 20 SDO_AGGR_CONVEXHULL集計ファンクション, 20 SDO_AGGR_LRS_CONCAT集計ファンクション, 20 SDO_AGGR_MBR集計ファンクション, 20 SDO_AGGR_SET_UNION集計ファンクション, 20 SDO_AGGR_UNION集計ファンクション, 20

複雑な例, C.4

SDO_ALPHA_SHAPEファンクション, 24 SDO_ANGLE_UNITS表, 6.8.2 SDO_ANYINTERACT演算子, 19 SDO_ARC_DENSIFYファンクション, 24 SDO_AREAファンクション, 24 SDO_AREA_UNITSビュー, 6.8.3 SDO_BUFFERファンクション, 24 SDO_CENTROIDファンクション, 24 SDO_CLOSEST_POINTSプロシージャ, 24 SDO_CONCAVEHULLファンクション, 24 SDO_CONCAVEHULL_BOUNDARYファンクション, 24 SDO_CONTAINS演算子, 19 SDO_CONVEXHULLファンクション, 24 SDO_COORD_AXES表, 6.7.1 SDO_COORD_AXIS_NAMES表, 6.7.2 SDO_COORD_OP_METHODS表, 6.7.3 SDO_COORD_OP_PARAM_USE表, 6.7.4 SDO_COORD_OP_PARAM_VALS表, 6.7.5 SDO_COORD_OP_PARAMS表, 6.7.6 SDO_COORD_OP_PATHS表, 6.7.7 SDO_COORD_OPS表, 6.7.8 SDO_COORD_REF_SYS表, 6.7.9 SDO_COORD_REF_SYSTEMビュー, 6.7.10 SDO_COORD_SYS表, 6.7.11 SDO_COVEREDBY演算子, 19 SDO_COVERS演算子, 19 SDO_CRS_COMPOUNDビュー, 6.7.12 SDO_CRS_ENGINEERINGビュー, 6.7.13 SDO_CRS_GEOCENTRICビュー, 6.7.14 SDO_CRS_GEOGRAPHIC2Dビュー, 6.7.15 SDO_CRS_GEOGRAPHIC3Dビュー, 6.7.16 SDO_CRS_PROJECTEDビュー, 6.7.17 SDO_CRS_VERTICALビュー, 6.7.18 SDO_CSパッケージ, 21

ADD_PREFERENCE_FOR_OP, 21

CONVERT_NADCON_TO_XML, 21

CONVERT_NTV2_TO_XML, 21

CONVERT_XML_TO_NADCON, 21

CONVERT_XML_TO_NTV2, 21

CREATE_CONCATENATED_OP, 21

CREATE_OBVIOUS_EPSG_RULES, 21

CREATE_PREF_CONCATENATED_OP, 21

DELETE_ALL_EPSG_RULES, 21

DELETE_OP, 21

DETERMINE_CHAIN, 21

DETERMINE_DEFAULT_CHAIN, 21

FIND_GEOG_CRS, 21

FIND_PROJ_CRS, 21

FIND_SRID, 21

FROM_OGC_SIMPLEFEATURE_SRS, 21

FROM_USNG, 21

GET_EPSG_DATA_VERSIONファンクション, 21

MAKE_3D, 21, 21

MAP_EPSG_SRID_TO_ORACLE, 21

MAP_ORACLE_SRID_TO_EPSG, 21

REVOKE_PREFERENCE_FOR_OP, 21

TO_OGC_SIMPLEFEATURE_SRS, 21

TO_USNG, 21

TRANSFORM, 21

TRANSFORM_LAYER, 21

UPDATE_WKTS_FOR_ALL_EPSG_CRS, 21

UPDATE_WKTS_FOR_EPSG_CRS, 21

UPDATE_WKTS_FOR_EPSG_DATUM, 21

UPDATE_WKTS_FOR_EPSG_ELLIPS, 21

UPDATE_WKTS_FOR_EPSG_OP, 21

UPDATE_WKTS_FOR_EPSG_PARAM, 21

UPDATE_WKTS_FOR_EPSG_PM, 21

VALIDATE_WKT, 21

SDO_CSW_PROCESSパッケージ

DeleteCapabilitiesInfo, 22

DeleteDomainInfo, 22

DeletePluginMap, 22

DeleteRecordViewMap, 22

GetRecordTypeId, 22

InsertCapabilitiesInfo, 22

InsertDomainInfo, 22

InsertPluginMap, 22

InsertRecordViewMap, 22

InsertRtDataUpdated, 22

InsertRtMDUpdated, 22

SDO_DATUM_ENGINEERINGビュー, 6.7.19 SDO_DATUM_GEODETICビュー, 6.7.20 SDO_DATUM_VERTICALビュー, 6.7.21 SDO_DATUMS表, 6.7.22 SDO_DATUMS_OLD_FORMAT表, 6.8.4 SDO_DATUMS_OLD_SNAPSHOT表, 6.8.4 SDO_DIFFERENCEファンクション, 24 SDO_DIST_UNITSビュー, 6.8.5 SDO_DISTANCEファンクション, 24 SDO_ELEM_INFO属性, 2.2.4 SDO_ELEM_INFO_ARRAY型, 2.2 SDO_ELLIPSOIDS表, 6.7.23 SDO_ELLIPSOIDS_OLD_FORMAT表, 6.8.6 SDO_ELLIPSOIDS_OLD_SNAPSHOT表, 6.8.6 SDO_EQUAL演算子, 19 SDO_ETYPE値, 2.2.4, 2.2.4 SDO_FILTER演算子, 19 SDO_GCDRパッケージ, 23

CREATE_PROFILE_TABLES, 23

GEOCODE, 23

GEOCODE_ADDR, 23

GEOCODE_ADDR_ALL, 23

GEOCODE_ALL, 23

GEOCODE_AS_GEOMETRY, 23

REVERSE_GEOCODE, 23

SDO_GEO_ADDRデータ型およびコンストラクタ, 11.2.1 SDO_GEOMパッケージ

RELATE, 24

SDO_ALPHA_SHAPE, 24

SDO_ARC_DENSIFY, 24

SDO_AREA, 24

SDO_BUFFER, 24

SDO_CENTROID, 24

SDO_CLOSEST_POINTS, 24

SDO_CONCAVEHULL, 24

SDO_CONCAVEHULL_BOUNDARY, 24

SDO_CONVEXHULL, 24

SDO_DIFFERENCE, 24

SDO_DISTANCE, 24

SDO_INTERSECTION, 24

SDO_LENGTH, 24

SDO_MAX_MBR_ORDINATE, 24

SDO_MBR, 24

SDO_MIN_MBR_ORDINATE, 24

SDO_POINTONSURFACE, 24

SDO_TRIANGULATE, 24

SDO_UNION, 24

SDO_VOLUME, 24

SDO_XOR, 24

VALIDATE_GEOMETRY_WITH_CONTEXT, 24

VALIDATE_LAYER_WITH_CONTEXT, 24

WITHIN_DISTANCE, 24

SDO_GEOM_PATH_INFO

MDSYS.SDO_GEOM_PATH_INFO型, 16.2.2

SDO_GEOMETRYオブジェクト型, 2.2

コンストラクタ, 2.4

ユーザー定義型への埋込み, 9.1, 9.2.2

ファンクション索引, 9.2

メソッド(メンバー・ファンクション), 2.3

SDO_GTYPE属性, 2.2.1

特定のジオメトリ・タイプへのデータの制約, 5.1.1

Get_Dimsメソッド, 2.3

Get_GTypeメソッド, 2.3

Get_LRS_Dimメソッド, 2.3

索引メタデータ・ビューのSDO_INDEX_TABLEエントリ, 2.9.2 SDO_INDX_DIMSキーワード, 7.3, 18 SDO_INSIDE演算子, 19 SDO_INTERPRETATION値, 2.2.4 SDO_INTERSECTIONファンクション, 24 SDO_JOIN演算子, 19

クロススキーマでの使用, 19

SDO_KEYWORDARRAYデータ型, 11.2.3 SDO_LENGTHファンクション, 24 SDO_LRSパッケージ

CLIP_GEOM_SEGMENT, 25

CONCATENATE_GEOM_SEGMENTS, 25

CONNECTED_GEOM_SEGMENTS, 25

CONVERT_TO_LRS_DIM_ARRAY, 25

CONVERT_TO_LRS_GEOM, 25

CONVERT_TO_LRS_LAYER, 25

CONVERT_TO_STD_DIM_ARRAY, 25

CONVERT_TO_STD_GEOM, 25

CONVERT_TO_STD_LAYER, 25

DEFINE_GEOM_SEGMENT, 25

DYNAMIC_SEGMENT, 25

FIND_LRS_DIM_POS, 25

FIND_MEASURE, 25

FIND_OFFSET, 25

GEOM_SEGMENT_END_MEASURE, 25

GEOM_SEGMENT_END_PT, 25

GEOM_SEGMENT_LENGTH, 25

GEOM_SEGMENT_START_MEASURE, 25

GEOM_SEGMENT_START_PT, 25

GET_MEASURE, 25

GET_NEXT_SHAPE_PT, 25

GET_NEXT_SHAPE_PT_MEASURE, 25

GET_PREV_SHAPE_PT, 25

GET_PREV_SHAPE_PT_MEASURE, 25

IS_GEOM_SEGMENT_DEFINED, 25

IS_MEASURE_DECREASING, 25

IS_MEASURE_INCREASING, 25

IS_SHAPE_PT_MEASURE, 25

LOCATE_PT, 25

LRS_INTERSECTION, 25

MEASURE_RANGE, 25

MEASURE_TO_PERCENTAGE, 25

OFFSET_GEOM_SEGMENT, 25

PERCENTAGE_TO_MEASURE, 25

PROJECT_PT, 25

REDEFINE_GEOM_SEGMENT, 25

RESET_MEASURE, 25

REVERSE_GEOMETRY, 25

REVERSE_MEASURE, 25

SCALE_GEOM_SEGMENT, 25

SET_PT_MEASURE, 25

SPLIT_GEOM_SEGMENT, 25

TRANSLATE_MEASURE, 25

VALID_GEOM_SEGMENT, 25

VALID_LRS_PT, 25

VALID_MEASURE, 25

VALIDATE_LRS_GEOMETRY, 25

SDO_MAX_MBR_ORDINATEファンクション, 24 SDO_MBRファンクション, 24 SDO_MIGRATEパッケージ

TO_CURRENT, 26

SDO_MIN_MBR_ORDINATEファンクション, 24 SDO_NN演算子, 19

複雑な例, C.3

オプティマイザ・ヒント, 19

SDO_NN_DISTANCE補助演算子, 19 SDO_NN_DISTANCE演算子

複雑な例, C.3

SDO_OLSパッケージ, 27

MakeOpenLSClobRequest, 27

MakeOpenLSRequest, 27

SDO_ON演算子, 19 SDO_ORDINATE_ARRAY型, 2.2 SDO_ORDINATES属性, 2.2.5 SDO_OVERLAPBDYDISJOINT演算子, 19 SDO_OVERLAPBDYINTERSECT演算子, 19 SDO_OVERLAPS演算子, 19 SDO_PCオブジェクト型, 2.6.1 SDO_PC_BLKオブジェクト型, 2.6.2 SDO_PC_BLK_TYPEオブジェクト型, 2.6.2 SDO_PC_PKGパッケージ

CLIP_PC, 28

CREATE_PC, 28

DROP_DEPENDENCIES, 28

GET_PT_IDS, 28

INIT, 28

TO_GEOMETRY, 28

SDO_POINT属性, 2.2.3 SDO_POINT_TYPEオブジェクト型, 2.2 SDO_POINTONSURFACEファンクション, 24 SDO_PREFERRED_OPS_SYSTEM表, 6.7.24 SDO_PREFERRED_OPS_USER表, 6.7.25 SDO_PRIME_MERIDIANS表, 6.7.26 SDO_PROJECTIONS_OLD_FORMAT表, 6.8.7 SDO_PROJECTIONS_OLD_SNAPSHOT表, 6.8.7 SDO_REGAGGRオブジェクト型, 29, 29 SDO_REGAGGRSETオブジェクト型, 29, 29 SDO_REGIONオブジェクト型, 29 SDO_REGIONSETオブジェクト型, 29 SDO_RELATE演算子, 19 SDO_ROWIDPAIRオブジェクト型, 19 SDO_ROWIDSETデータ型, 19 SDO_RTREE_SEQ_NAME順序オブジェクト, 2.9.3 SDO_SAMパッケージ, 29

AGGREGATES_FOR_GEOMETRY, 29

AGGREGATES_FOR_LAYER, 29

BIN_GEOMETRY, 29

BIN_LAYER, 29

COLOCATED_REFERENCE_FEATURES, 29

SIMPLIFY_GEOMETRY, 29

SIMPLIFY_LAYER, 29

SPATIAL_CLUSTERS, 29

TILED_AGGREGATES, 29

TILED_BINS, 29

SDO_SRID属性, 2.2.2 SDO_ST_TOLERANCE表, 3.3 SDO_STARTING_OFFSET値, 2.2.4 SDO_TFM_CHAIN型, 6.6 SDO_TINオブジェクト型, 2.5.1 SDO_TIN_BLKオブジェクト型, 2.5.2 SDO_TIN_BLK_TYPEオブジェクト型, 2.5.2 SDO_TIN_PKGパッケージ

CLIP_TIN, 30

CREATE_TIN, 30

DROP_DEPENDENCIES, 30

INIT, 30

TO_GEOMETRY, 30

SDO_TOUCH演算子, 19 SDO_TRIANGULATEファンクション, 24 SDO_TUNEパッケージ

AVERAGE_MBR, 31

ESTIMATE_RTREE_INDEX_SIZE, 31

EXTENT_OF, 31

MIX_INFO, 31

QUALITY_DEGRADATION(非推奨のファンクション), 31

SDO_UNIONファンクション, 24 SDO_UNIT列

SDO_AREA_UNITS表, 6.8.3

SDO_DIST_UNITS表, 6.8.5

SDO_UNITS_OF_MEASURE表, 6.7.27 SDO_UTILパッケージ

AFFINETRANSFORMS, 32

APPEND, 32

BEARING_TILT_FOR_POINTS, 32

CIRCLE_POLYGON, 32

CONCAT_LINES, 32

CONVERT_UNIT, 32

DROP_WORK_TABLES, 32

ELLIPSE_POLYGON, 32

EXTRACT, 32

EXTRACT_ALL, 32

EXTRACT3D, 32

EXTRUDE, 32

FROM_GML311GEOMETRY, 32

FROM_GMLGEOMETRY, 32

FROM_KMLGEOMETRY, 32

FROM_WKBGEOMETRY, 32

FROM_WKTGEOMETRY, 32

GETNUMELEM, 32

GETNUMVERTICES, 32

GETVERTICES, 32

INITIALIZE_INDEXES_FOR_TTS, 32

INTERIOR_POINT, 32

POINT_AT_BEARING, 32

POLYGONTOLINE, 32

PREPARE_FOR_TTS, 32

RECTIFY_GEOMETRY, 32

REMOVE_DUPLICATE_VERTICES, 32

REVERSE_LINESTRING, 32

SIMPLIFY, 32

TO_GML311GEOMETRY, 32

TO_GMLGEOMETRY, 32

TO_KMLGEOMETRY, 32

TO_WKBGEOMETRY, 32

TO_WKTGEOMETRY, 32

VALIDATE_WKBGEOMETRY, 32

VALIDATE_WKTGEOMETRY, 32

SDO_VERSIONファンクション, 1.17 SDO_VOLUMEファンクション, 24 SDO_WFS_LOCKパッケージ, 33

EnableDBTxns, 33

RegisterFeatureTable, 33

UnRegisterFeatureTable, 33

SDO_WFS_PROCESSパッケージ, 22, 34

DropFeatureType, 34

DropFeatureTypes, 34

GenCollectionProcs, 34

GetFeatureTypeId, 34

GrantFeatureTypeToUser, 34

GrantMDAccessToUser, 34

InsertCapabilitiesInfo, 34

InsertFtDataUpdated, 34

InsertFtMDUpdated, 34

PopulateFeatureTypeXMLInfo, 34

PublishFeatureType, 34

RegisterMTableView, 34

RevokeFeatureTypeFromUser, 34

RevokeMDAccessFromUser, 34

UnRegisterMTableView, 34

SDO_WITHIN_DISTANCE演算子, 19

複雑な例, C.2

SDO_XORファンクション, 24 SDOAGGRTYPEオブジェクト型, 1.10.1 sdows.earファイル

デプロイ, 10.3

海面

重力に関係する高さ, 6.5.2

2次フィルタ, 1.6, 5.2.1.2 ジオメトリ・セグメント

ルート・リクエスト, 13.3.2.2

セグメント

ジオメトリ, 7.1.1

ルートまたはサブルート, 13.1

自己交差する線ストリングおよびポリゴン, 1.4 自己交差ポリゴン, 24 自己結合

最適化, 19

半長径, 6.7.23, 6.8.6 半短径, 6.7.23 Rツリー索引における順序オブジェクト, 2.9.3 SET_PT_MEASUREプロシージャ, 25 setCapabilitiesInfoメソッド, 16.4.16 setDomainInfoメソッド, 16.4.17 setRecordViewMapメソッド, 16.4.18 setXMLTableIndexInfoメソッド, 15.4.10, 16.4.19 形状点, 7.1.2

メジャー値が形状点であるかの判断, 25

次のメジャーの取得, 25

前のメジャーの取得, 25

次の取得, 25

前の取得, 25

シェープファイル

空間へのロード, D

SIGN_POST表

ルーティング・エンジンの使用, 13.4.4

単純な要素, 2.2.4 シンプル・フィーチャ(OGC)

Oracle Spatialへの準拠, 1.16

ジオメトリの簡略化, 32 SIMPLIFYファンクション, 32 SIMPLIFY_GEOMETRYファンクション, 29 SIMPLIFY_LAYERプロシージャ, 29 単一のアプリケーション・ユーザー

アイデンティティ伝播のオプション, 17.1.1

空間アプリケーションのサイズ(ハードウェア)要件, 1.20 ソリッド

外側および内側, 2.2.4

モデル化, 1.11.2

SDO_ETYPE値, 2.2.4

容積, 24

SORT_AREA_SIZEパラメータ

Rツリー索引の作成, 5.1.7

sort_by_distance属性

一括ルート・リクエスト, 13.3.5.2

空間集計ファンクション

「集計ファンクション」を参照

空間分析およびマイニング

概念および使用方法, 8

ファンクションのリファレンス情報, 29

空間のビニング, 8.2

「bins」も参照

空間のクラスタ化, 8.5 空間相関, 8.3 空間データ・マイニング

概念および使用方法, 8

ファンクションのリファレンス情報, 29

空間データ構造, 2 空間データ型, 2 空間索引

「索引」を参照

空間結合, 5.2.2

SDO_JOIN演算子, 19

空間メタデータ表

移動, 1.19

空間演算子

「演算子」を参照

空間問合せ, 5.2.1 空間参照システム

概念および使用方法, 6

例, 6.13

サブプログラムのリファレンス情報, 21

Spatialルーティング・エンジン

「ルーティング・エンジン」を参照

SpatialのWebサービス

クライアントの設定, 10.3

デモ・ファイル, 10.4

アイデンティティ伝播, 17.1.1

概要, 10

ユーザーの管理, 17.1

仮想プライベート・データベース, 17.2.1

SPATIAL_CLUSTERSファンクション, 29 SPATIAL_CSW_ADMIN_USRアカウントおよびスキーマ, 1.14 SPATIAL_WFS_ADMIN_USRアカウントおよびスキーマ, 1.14 表の空間的な有効化 1.18 球体

MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表, 6.8.6

MDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT表, 6.8.6

SPLIT_GEOM_SEGMENTプロシージャ, 25 分割

ジオメトリ・セグメント, 7.5.4

SQLおよびPL/SQLの例, 1.22 SQL Multimedia

名前の競合の回避, 3.4

FROM_WKBGEOMETRYファンクション, 32

FROM_WKTGEOMETRYファンクション, 32

ST_GEOMETRY型, 3.1

Spatialのサポート, 3

TO_WKBGEOMETRYファンクション, 32

TO_WKTGEOMETRYファンクション, 32

許容差, 3.3

VALIDATE_WKBGEOMETRYファンクション, 32

VALIDATE_WKTGEOMETRYファンクション, 32

SQL Multimedia規格

ST_CoordDimメソッド, 2.3

ST_IsValidメソッド, 2.3

SQL文

空間データの索引付け, 18

SQL*Loader, 4.1 SRID

存在のチェック, 21

検索, 21

USER_SDO_GEOM_METADATA, 2.8.4

OracleからEPSGへのマッピング, 21

SDO_GEOMETRYのSDO_SRID属性, 2.2.2

ST_ANNOTATION_TEXTコンストラクタ, 3.5.1 ST_CoordDimメソッド, 2.3 ST_GEOMETRY型, 3.1 ST_IsValidメソッド, 2.3 ルートの出発地, 13.3.2.1 サブプログラム

座標系変換, 21

データ・マイニング, 29

ジオコーディング, 23

ジオメトリ, 24

線形参照, 25

OpenLS, 27

点群, 28

SDO_MIGRATE, 26

空間分析, 29

TIN, 30

チューニング, 31

ユーティリティ, 32

WFS, 33

WFSの処理, 22, 34

サブルート

説明, 13.1

ルート・リクエストの戻される座標, 13.3.2.2

ルート・リクエストの戻されるエッジID13.3.2.2

ルート・リクエストの戻り, 13.3.2.2

面法線, 1.11.5 表面, 2.2.4

モデル化, 1.11.1

SDO_ETYPE値, 2.2.4

T

表名

空間表名の制限事項, 2.8.1

USER_SDO_GEOM_METADATAのTABLE_NAME, 2.8.1 表

空間的に有効化, 1.18

テクスチャ

使用, 1.11.4

TFM_PLANオブジェクト型, 6.6 3次元(3D)

LRSファンクションの形式, 7.4

測地データでの非サポート, 6.10.2

空間オブジェクト, 1.11

ソリッド, 1.11.2

表面, 1.11.1

TILED_AGGREGATESファンクション, 29 TILED_BINSファンクション, 29 time_unit属性

ルート・リクエスト, 13.3.2.2

TIN

クリップ, 30

ジオメトリへの変換, 30

作成, 28, 30

依存性の削除, 30

初期化, 30

TIN

サブプログラム, 30

TIN(Triangulated Irregular Networks), 1.11.1 TO_CURRENTプロシージャおよびファンクション, 26 TO_GEOMETRYプロシージャ, 28, 30 TO_GML311GEOMETRYファンクション, 32 TO_GMLGEOMETRYファンクション, 32 TO_KMLGEOMETRYファンクション, 32 TO_OGC_SIMPLEFEATURE_SRSファンクション, 21 TO_USNGファンクション, 21 TO_WKBGEOMETRYファンクション, 32 TO_WKTGEOMETRYファンクション, 32 許容差, 1.5.5

SQL Multimedia型, 3.3

LRSファンクション, 7.6

TOUCH

SDO_TOUCH演算子, 19

位相関係, 1.8

空間データのトランザクション挿入, 4.2 TRANSFORMファンクション, 21 TRANSFORM_LAYERプロシージャ, 21

変換したレイヤーの表, 21

変換, 6.1.7

円弧および円の非サポート, 6.2.5

TRANSLATE_MEASUREファンクション, 25 トランスポータブル表領域

空間索引の初期化, 32

空間索引を使用する場合の準備, 32

Triangulated Irregular Networks(TIN), 1.11.1 三角分割

SDO_TRIANGULATEファンクション, 24

チューニングおよびパフォーマンスの情報, 1.15

空間演算子, 1.9

チューニング・サブプログラム, 31 2層問合せモデル, 1.6 タイプ0(ゼロ)要素, 2.7.7

U

形式化されていない住所, 11.1.1

和集合, 24

測定単位

MDSYS表, 2.10

UNIT_NAME列

SDO_ANGLE_UNITS表, 6.8.2

SDO_AREA_UNITS表, 6.8.3

SDO_DIST_UNITS表, 6.8.5

unknown CRS座標参照系, 6.10.4 UnRegisterFeatureTableプロシージャ, 33 UnRegisterMTableViewプロシージャ, 34 UPDATE_WKTS_FOR_ALL_EPSG_CRSプロシージャ, 21 UPDATE_WKTS_FOR_EPSG_CRSプロシージャ, 21 UPDATE_WKTS_FOR_EPSG_DATUMプロシージャ, 21 UPDATE_WKTS_FOR_EPSG_ELLIPSプロシージャ, 21 UPDATE_WKTS_FOR_EPSG_OPプロシージャ, 21 UPDATE_WKTS_FOR_EPSG_PARAMプロシージャ, 21 UPDATE_WKTS_FOR_EPSG_PMプロシージャ, 21 アップグレード

今回のリリースのSpatialへのデータのアップグレード, 26

GeoRaster, A.2

今回のリリースのOracle DatabaseへのSpatialのアップグレード, A

今回のリリースへの空間データのアップグレード, 26 U.S. National Grid

SDO_CS.FROM_USNGファンクション, 21

SDO_CS.TO_USNGファンクション, 21

Oracle Spatialのサポート, 6.11

ユースケース

座標系変換, 6.4

USE_SPHERICALユースケース名, 6.12 USER_ANNOTATION_TEXT_METADATAビュー, 3.5.2 USER_SDO_GEOM_METADATAビュー, 2.8 USER_SDO_INDEX_INFOビュー, 2.9.1.1 USER_SDO_INDEX_METADATAビュー, 2.9.1.2 ユーザー定義の座標参照系, 6.9 ユーザー定義データ型

SDO_GEOMETRYオブジェクトの埋込み, 9.1, 9.2.2

ユーティリティ・サブプログラム, 32

V

VALID_GEOM_SEGMENTファンクション, 25

VALID_LRS_PTファンクション, 25

VALID_MEASUREファンクション, 25

VALIDATE_GEOMETRY_WITH_CONTEXTファンクション, 24

VALIDATE_LAYER_WITH_CONTEXTプロシージャ, 24

VALIDATE_LRS_GEOMETRYファンクション, 25

VALIDATE_WKBGEOMETRYファンクション, 32

VALIDATE_WKTファンクション, 21

VALIDATE_WKTGEOMETRYファンクション, 32

ジオメトリの検証

一般的なチェックおよび2次元のチェック, 24

3次元のチェック, 1.11.5

ベンダー属性

ルート・リクエスト, 13.3.2.2

バージョン番号(Spatial)

取得, 1.17

バージョニング(CSW)

無効化, 16.4.4

有効化, 16.4.7

VERTEX_SET_TYPEデータ型, 32 VERTEX_TYPEオブジェクト型, 32 頂点

SDO_GEOMETRYオブジェクト内の最大数, 2.2

重複の削除, 32

戻されるジオメトリの座標, 32

ビュー

ALL_ANNOTATION_TEXT_METADATA, 3.5.2

ALL_SDO_GEOM_METADATA, 2.8

ALL_SDO_INDEX_INFO, 2.9.1.1

ALL_SDO_INDEX_METADATA, 2.9.1.2

USER_ANNOTATION_TEXT_METADATA, 3.5.2

USER_SDO_GEOM_METADATA, 2.8

USER_SDO_INDEX_INFO, 2.9.1.1

USER_SDO_INDEX_METADATA, 2.9.1.2

仮想プライベート・データベース

SpatialのWebサービスのセキュリティ, 17.2.1

容積, 24 VPD

SpatialのWebサービスのセキュリティ, 17.2.1

W

Webサービス

クライアントの設定, 10.3

デモ・ファイル, 10.4

概要, 10

well-knownバイナリ(WKB)

「WKB」を参照

well-knownテキスト(WKT)

「WKT」を参照

WFS

エンジン, 15.1

フィーチャ・タイプ, 15.2

Java API, 15.4, 16.4

サブプログラムのリファレンス情報, 33

Oracle Workspace Managerの使用, 15.5

WFSの処理

サブプログラムのリファレンス情報, 22, 34

WFSAdmin Javaクラス, 15.4, 16.4 WITHIN_DISTANCEファンクション, 24

「SDO_WITHIN_DISTANCE演算子」も参照

WKB

FROM_WKBGEOMETRYファンクション, 32

Get_WKBメソッド, 2.3

TO_WKBGEOMETRYファンクション, 32

VALIDATE_WKBGEOMETRYファンクション, 32

WKT, 6.8.1.1

FROM_WKTGEOMETRYファンクション, 32

Get_WKTメソッド, 2.3

更新手順, 6.8.1.3

TO_WKTGEOMETRYファンクション, 32

UPDATE_WKTS_FOR_ALL_EPSG_CRSプロシージャ, 21

UPDATE_WKTS_FOR_EPSG_CRSプロシージャ, 21

UPDATE_WKTS_FOR_EPSG_DATUMプロシージャ, 21

UPDATE_WKTS_FOR_EPSG_ELLIPSプロシージャ, 21

UPDATE_WKTS_FOR_EPSG_OPプロシージャ, 21

UPDATE_WKTS_FOR_EPSG_PARAMプロシージャ, 21

UPDATE_WKTS_FOR_EPSG_PMプロシージャ, 21

VALIDATE_WKTGEOMETRYファンクション, 32

指定したSRIDの検査, 21

MDSYS.CS_SRS表のWKTEXT列, 6.8.1.1

値の更新手順, 6.8.1.3

Workspace Manager

作業領域でのSOAPリクエストの実行, 17.2.2

WFSでの使用, 15.5

wsclient.jarファイル, 10.4 WSConfig.xmlファイル, 10.3

X

XML API

ルーティング・エンジン, 13.3

XML表の索引

フィーチャ・タイプの情報の設定, 15.4.10

レコード・タイプの情報の設定, 16.4.19

XMLTABLEINDEX索引

存在のチェック, 15.4.4, 16.4.8

フィーチャ表での作成, 15.4.1, 16.4.1

フィーチャ表での削除, 15.4.3, 16.4.6

XOR

SDO_XORファンクション, 24

Y

イエロー・ページ

「ビジネス・ディレクトリ(YP)」を参照

YP

「ビジネス・ディレクトリ(YP)」を参照

Z

0(ゼロ)

タイプ0(ゼロ)要素, 2.7.7

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2014, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。