Oracle® Spatial and Graph

開発者ガイド

12cリリース1 (12.1)

B72470-07(原本部品番号:E49172-07)

2017年1月

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

Oracle Spatial and Graph開発者ガイド, 12cリリース1 (12.1)

B72470-07

Copyright © 1999, 2017, 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 Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

図一覧

表一覧

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

はじめに

- 対象読者

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

- 関連ドキュメント

- 表記規則

『Oracle Spatial and Graph開発者ガイド』のこのリリースでの変更点

- Oracle Database 12cリリース1 (12.1.0.2)での変更点

- ルーティング・エンジン情報の改訂

- SDO_GEOM.SDO_CLOSEST_POINTSの動作変更

- GeoRasterをデフォルトで有効にしない

- Oracle Database 12cリリース1 (12.1.0.1)での変更点

- 新機能

- 追加および変更されたSDO_GEOMサブプログラム(リリース12.1.0.2)

- NURBS曲線のサポート

- 特定の3D測地操作での高さ情報の近似処理

- 新機能のSpatialメタデータ・ビュー(3Dテーマ、3Dシーン、3Dビューフレーム)

- 追加および変更された集計ファンクション

- 追加および変更されたSDO_CSサブプログラム

- 追加および変更されたSDO_GEOMサブプログラム

- 追加および変更されたSDO_PC_PKGサブプログラム

- 追加および変更されたSDO_TIN_PKGサブプログラム

- 追加および変更されたSDO_UTILサブプログラム

- 追加されたSDO_GEOM_MBR演算子

- 追加されたSDO_POINTINPOLYGON演算子

- SPATIAL_VECTOR_ACCELERATIONシステム・パラメータ(VPA)

- その他の変更

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

1 Spatialの概念

- 1.1 Oracle Spatial and Graphとは

- 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 Oracle Spatial and GraphでのNURBS曲線のサポート

- 1.14 Spatial and Graph Java Application Programming Interface

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

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

- 1.17 OGCおよびISOへの準拠

- 1.18 Spatial and Graphのリリース(バージョン)番号

- 1.19 SPATIAL_VECTOR_ACCELERATIONシステム・パラメータ

- 1.20 表の空間的な有効化

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

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

- 1.23 Spatial and Graphのエラー・メッセージ

- 1.24 Spatialの例

- 1.25 Spatial and Graphおよび関連機能の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 NURBS曲線

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

- 2.7.10 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 xxx_SDO_3DTHEMESビュー

- 2.9.2 xxx_SDO_SCENESビュー

- 2.9.3 xxx_SDO_VIEWFRAMESビュー

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

- 2.10.1 空間索引ビュー

- 2.10.1.1 xxx_SDO_INDEX_INFOビュー

- 2.10.1.2 xxx_SDO_INDEX_METADATAビュー

- 2.10.2 空間索引表の定義

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

- 2.11 測定単位のサポート

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

3 SQL Multimedia型のサポート

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

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

- 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.1.8 ロールバック・セグメントおよびソート領域サイズ

- 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 and Graph

- 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部 空間Webサービス

10 空間Webサービスの概要

- 10.1 空間Webサービスの種類

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

- 10.3 空間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.1.1 単純ルート・リクエスト

- 13.1.2 単純マルチアドレス・ルート・リクエスト

- 13.1.3 巡回セールスマン(TSP)ルート・リクエスト

- 13.1.4 一括ルート・リクエスト

- 13.1.5 バッチ・モード・ルート・リクエスト

- 13.2 ルーティング・エンジンのデプロイ

- 13.2.1 WebLogic Serverの準備

- 13.2.2 routeserver.earファイルの解凍

- 13.2.3 web.xmlファイルの編集

- 13.2.4 WebLogic Serverへのルーティング・エンジンのデプロイ

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

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

- 13.3.2 ルート・リクエストXMLスキーマ定義

- 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 ルート・レスポンスXMLスキーマ定義

- 13.3.4 バッチ・モード・ルート・リクエストおよびバッチ・モード・ルート・レスポンスの例

- 13.3.5 一括ルート・リクエストXMLスキーマ定義

- 13.3.5.1 batch_route_request要素

- 13.3.5.2 batch_route_request属性

- 13.3.6 一括ルート・レスポンスXMLスキーマ

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

- 13.4.1 EDGE表

- 13.4.2 NODE表

- 13.4.3 PARTITION表

- 13.4.4 SIGN_POST表

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

- 13.5.1 右左折制限ユーザー・データ

- 13.5.1.1 ROUTER_CONDITION表

- 13.5.1.2 ROUTER_NAV_STRAND表

- 13.5.1.3 ROUTER_TURN_RESTRICTION_DATA表

- 13.5.2 トラック輸送ユーザー・データ

- 13.5.2.1 ROUTER_TRANSPORT表

- 13.5.2.2 ROUTER_TRUCKING_DATA表

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 機能のドキュメント(CSW)

- 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メソッド

第III部 リファレンス情報

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

- 17.1 ALTER INDEX

- 17.2 ALTER INDEX REBUILD

- 17.3 ALTER INDEX RENAME TO

- 17.4 CREATE INDEX

- 17.5 DROP INDEX

18 空間演算子

- 18.1 SDO_ANYINTERACT

- 18.2 SDO_CONTAINS

- 18.3 SDO_COVEREDBY

- 18.4 SDO_COVERS

- 18.5 SDO_EQUAL

- 18.6 SDO_FILTER

- 18.7 SDO_INSIDE

- 18.8 SDO_JOIN

- 18.9 SDO_NN

- 18.10 SDO_NN_DISTANCE

- 18.11 SDO_ON

- 18.12 SDO_OVERLAPBDYDISJOINT

- 18.13 SDO_OVERLAPBDYINTERSECT

- 18.14 SDO_OVERLAPS

- 18.15 SDO_POINTINPOLYGON

- 18.16 SDO_RELATE

- 18.17 SDO_TOUCH

- 18.18 SDO_WITHIN_DISTANCE

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

- 19.1 SDO_AGGR_CENTROID

- 19.2 SDO_AGGR_CONCAT_LINES

- 19.3 SDO_AGGR_CONVEXHULL

- 19.4 SDO_AGGR_LRS_CONCAT

- 19.5 SDO_AGGR_MBR

- 19.6 SDO_AGGR_SET_UNION

- 19.7 SDO_AGGR_UNION

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

- 20.1 SDO_CS.ADD_PREFERENCE_FOR_OP

- 20.2 SDO_CS.CONVERT_3D_SRID_TO_2D

- 20.3 SDO_CS.CONVERT_NADCON_TO_XML

- 20.4 SDO_CS.CONVERT_NTV2_TO_XML

- 20.5 SDO_CS.CONVERT_XML_TO_NADCON

- 20.6 SDO_CS.CONVERT_XML_TO_NTV2

- 20.7 SDO_CS.CREATE_CONCATENATED_OP

- 20.8 SDO_CS.CREATE_OBVIOUS_EPSG_RULES

- 20.9 SDO_CS.CREATE_PREF_CONCATENATED_OP

- 20.10 SDO_CS.DELETE_ALL_EPSG_RULES

- 20.11 SDO_CS.DELETE_OP

- 20.12 SDO_CS.DETERMINE_CHAIN

- 20.13 SDO_CS.DETERMINE_DEFAULT_CHAIN

- 20.14 SDO_CS.FIND_GEOG_CRS

- 20.15 SDO_CS.FIND_PROJ_CRS

- 20.16 SDO_CS.FIND_SRID

- 20.17 SDO_CS.FROM_OGC_SIMPLEFEATURE_SRS

- 20.18 SDO_CS.FROM_USNG

- 20.19 SDO_CS.GET_EPSG_DATA_VERSION

- 20.20 SDO_CS.LOAD_EPSG_MATRIX

- 20.21 SDO_CS.MAKE_2D

- 20.22 SDO_CS.MAKE_3D

- 20.23 SDO_CS.MAP_EPSG_SRID_TO_ORACLE

- 20.24 SDO_CS.MAP_ORACLE_SRID_TO_EPSG

- 20.25 SDO_CS.REVOKE_PREFERENCE_FOR_OP

- 20.26 SDO_CS.TO_OGC_SIMPLEFEATURE_SRS

- 20.27 SDO_CS.TO_USNG

- 20.28 SDO_CS.TRANSFORM

- 20.29 SDO_CS.TRANSFORM_LAYER

- 20.30 SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS

- 20.31 SDO_CS.UPDATE_WKTS_FOR_EPSG_CRS

- 20.32 SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUM

- 20.33 SDO_CS.UPDATE_WKTS_FOR_EPSG_ELLIPS

- 20.34 SDO_CS.UPDATE_WKTS_FOR_EPSG_OP

- 20.35 SDO_CS.UPDATE_WKTS_FOR_EPSG_PARAM

- 20.36 SDO_CS.UPDATE_WKTS_FOR_EPSG_PM

- 20.37 SDO_CS.VALIDATE_EPSG_MATRIX

- 20.38 SDO_CS.VALIDATE_WKT

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

- 21.1 SDO_CSW_PROCESS.DeleteCapabilitiesInfo

- 21.2 SDO_CSW_PROCESS.DeleteDomainInfo

- 21.3 SDO_CSW_PROCESS.DeletePluginMap

- 21.4 SDO_CSW_PROCESS.DeleteRecordViewMap

- 21.5 SDO_CSW_PROCESS.GetRecordTypeId

- 21.6 SDO_CSW_PROCESS.InsertCapabilitiesInfo

- 21.7 SDO_CSW_PROCESS.InsertDomainInfo

- 21.8 SDO_CSW_PROCESS.InsertPluginMap

- 21.9 SDO_CSW_PROCESS.InsertRecordViewMap

- 21.10 SDO_CSW_PROCESS.InsertRtDataUpdated

- 21.11 SDO_CSW_PROCESS.InsertRtMDUpdated

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

- 22.1 SDO_GCDR.CREATE_PROFILE_TABLES

- 22.2 SDO_GCDR.GEOCODE

- 22.3 SDO_GCDR.GEOCODE_ADDR

- 22.4 SDO_GCDR.GEOCODE_ADDR_ALL

- 22.5 SDO_GCDR.GEOCODE_ALL

- 22.6 SDO_GCDR.GEOCODE_AS_GEOMETRY

- 22.7 SDO_GCDR.REVERSE_GEOCODE

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

- 23.1 SDO_GEOM.RELATE

- 23.2 SDO_GEOM.SDO_ALPHA_SHAPE

- 23.3 SDO_GEOM.SDO_ARC_DENSIFY

- 23.4 SDO_GEOM.SDO_AREA

- 23.5 SDO_GEOM.SDO_BUFFER

- 23.6 SDO_GEOM.SDO_CENTROID

- 23.7 SDO_GEOM.SDO_CLOSEST_POINTS

- 23.8 SDO_GEOM.SDO_CONCAVEHULL

- 23.9 SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY

- 23.10 SDO_GEOM.SDO_CONVEXHULL

- 23.11 SDO_GEOM.SDO_DIAMETER

- 23.12 SDO_GEOM.SDO_DIAMETER_LINE

- 23.13 SDO_GEOM.SDO_DIFFERENCE

- 23.14 SDO_GEOM.SDO_DISTANCE

- 23.15 SDO_GEOM.SDO_INTERSECTION

- 23.16 SDO_GEOM.SDO_LENGTH

- 23.17 SDO_GEOM.SDO_MAX_MBR_ORDINATE

- 23.18 SDO_GEOM.SDO_MAXDISTANCE

- 23.19 SDO_GEOM.SDO_MAXDISTANCE_LINE

- 23.20 SDO_GEOM.SDO_MBC

- 23.21 SDO_GEOM.SDO_MBC_CENTER

- 23.22 SDO_GEOM.SDO_MBC_RADIUS

- 23.23 SDO_GEOM.SDO_MBR

- 23.24 SDO_GEOM.SDO_MIN_MBR_ORDINATE

- 23.25 SDO_GEOM.SDO_POINTONSURFACE

- 23.26 SDO_GEOM.SDO_SELF_UNION

- 23.27 SDO_GEOM.SDO_TRIANGULATE

- 23.28 SDO_GEOM.SDO_UNION

- 23.29 SDO_GEOM.SDO_VOLUME

- 23.30 SDO_GEOM.SDO_WIDTH

- 23.31 SDO_GEOM.SDO_WIDTH_LINE

- 23.32 SDO_GEOM.SDO_XOR

- 23.33 SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

- 23.34 SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

- 23.35 SDO_GEOM.WITHIN_DISTANCE

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

- 24.1 SDO_LRS.CLIP_GEOM_SEGMENT

- 24.2 SDO_LRS.CONCATENATE_GEOM_SEGMENTS

- 24.3 SDO_LRS.CONNECTED_GEOM_SEGMENTS

- 24.4 SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY

- 24.5 SDO_LRS.CONVERT_TO_LRS_GEOM

- 24.6 SDO_LRS.CONVERT_TO_LRS_LAYER

- 24.7 SDO_LRS.CONVERT_TO_STD_DIM_ARRAY

- 24.8 SDO_LRS.CONVERT_TO_STD_GEOM

- 24.9 SDO_LRS.CONVERT_TO_STD_LAYER

- 24.10 SDO_LRS.DEFINE_GEOM_SEGMENT

- 24.11 SDO_LRS.DYNAMIC_SEGMENT

- 24.12 SDO_LRS.FIND_LRS_DIM_POS

- 24.13 SDO_LRS.FIND_MEASURE

- 24.14 SDO_LRS.FIND_OFFSET

- 24.15 SDO_LRS.GEOM_SEGMENT_END_MEASURE

- 24.16 SDO_LRS.GEOM_SEGMENT_END_PT

- 24.17 SDO_LRS.GEOM_SEGMENT_LENGTH

- 24.18 SDO_LRS.GEOM_SEGMENT_START_MEASURE

- 24.19 SDO_LRS.GEOM_SEGMENT_START_PT

- 24.20 SDO_LRS.GET_MEASURE

- 24.21 SDO_LRS.GET_NEXT_SHAPE_PT

- 24.22 SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE

- 24.23 SDO_LRS.GET_PREV_SHAPE_PT

- 24.24 SDO_LRS.GET_PREV_SHAPE_PT_MEASURE

- 24.25 SDO_LRS.IS_GEOM_SEGMENT_DEFINED

- 24.26 SDO_LRS.IS_MEASURE_DECREASING

- 24.27 SDO_LRS.IS_MEASURE_INCREASING

- 24.28 SDO_LRS.IS_SHAPE_PT_MEASURE

- 24.29 SDO_LRS.LOCATE_PT

- 24.30 SDO_LRS.LRS_INTERSECTION

- 24.31 SDO_LRS.MEASURE_RANGE

- 24.32 SDO_LRS.MEASURE_TO_PERCENTAGE

- 24.33 SDO_LRS.OFFSET_GEOM_SEGMENT

- 24.34 SDO_LRS.PERCENTAGE_TO_MEASURE

- 24.35 SDO_LRS.PROJECT_PT

- 24.36 SDO_LRS.REDEFINE_GEOM_SEGMENT

- 24.37 SDO_LRS.RESET_MEASURE

- 24.38 SDO_LRS.REVERSE_GEOMETRY

- 24.39 SDO_LRS.REVERSE_MEASURE

- 24.40 SDO_LRS.SCALE_GEOM_SEGMENT

- 24.41 SDO_LRS.SET_PT_MEASURE

- 24.42 SDO_LRS.SPLIT_GEOM_SEGMENT

- 24.43 SDO_LRS.TRANSLATE_MEASURE

- 24.44 SDO_LRS.VALID_GEOM_SEGMENT

- 24.45 SDO_LRS.VALID_LRS_PT

- 24.46 SDO_LRS.VALID_MEASURE

- 24.47 SDO_LRS.VALIDATE_LRS_GEOMETRY

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

- 25.1 SDO_MIGRATE.TO_CURRENT

26 SDO_OLSパッケージ(OpenLS)

- 26.1 SDO_OLS.MakeOpenLSClobRequest

- 26.2 SDO_OLS.MakeOpenLSRequest

27 SDO_PC_PKGパッケージ(点群)

- 27.1 SDO_PC_PKG.CLIP_PC

- 27.2 SDO_PC_PKG.CLIP_PC_FLAT

- 27.3 SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES

- 27.4 SDO_PC_PKG.CREATE_PC

- 27.5 SDO_PC_PKG.DROP_DEPENDENCIES

- 27.6 SDO_PC_PKG.GET_PT_IDS

- 27.7 SDO_PC_PKG.INIT

- 27.8 SDO_PC_PKG.TO_GEOMETRY

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

- 28.1 SDO_SAM.AGGREGATES_FOR_GEOMETRY

- 28.2 SDO_SAM.AGGREGATES_FOR_LAYER

- 28.3 SDO_SAM.BIN_GEOMETRY

- 28.4 SDO_SAM.BIN_LAYER

- 28.5 SDO_SAM.COLOCATED_REFERENCE_FEATURES

- 28.6 SDO_SAM.SIMPLIFY_GEOMETRY

- 28.7 SDO_SAM.SIMPLIFY_LAYER

- 28.8 SDO_SAM.SPATIAL_CLUSTERS

- 28.9 SDO_SAM.TILED_AGGREGATES

- 28.10 SDO_SAM.TILED_BINS

29 SDO_TIN_PKGパッケージ(TIN)

- 29.1 SDO_TIN_PKG.CLIP_TIN

- 29.2 SDO_TIN_PKG.CREATE_TIN

- 29.3 SDO_TIN_PKG.DROP_DEPENDENCIES

- 29.4 SDO_TIN_PKG.INIT

- 29.5 SDO_TIN_PKG.PROJECT_ORDINATES_ONTO_TIN

- 29.6 SDO_TIN_PKG.TO_DEM

- 29.7 SDO_TIN_PKG.TO_GEOMETRY

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

- 30.1 SDO_TUNE.AVERAGE_MBR

- 30.2 SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE

- 30.3 SDO_TUNE.EXTENT_OF

- 30.4 SDO_TUNE.MIX_INFO

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

- 31.1 SDO_UTIL.AFFINETRANSFORMS

- 31.2 SDO_UTIL.APPEND

- 31.3 SDO_UTIL.BEARING_TILT_FOR_POINTS

- 31.4 SDO_UTIL.CIRCLE_POLYGON

- 31.5 SDO_UTIL.CONCAT_LINES

- 31.6 SDO_UTIL.CONVERT_UNIT

- 31.7 SDO_UTIL.CONVERT3007TO3008

- 31.8 SDO_UTIL.DROP_WORK_TABLES

- 31.9 SDO_UTIL.ELLIPSE_POLYGON

- 31.10 SDO_UTIL.EXTRACT

- 31.11 SDO_UTIL.EXTRACT_ALL

- 31.12 SDO_UTIL.EXTRACT3D

- 31.13 SDO_UTIL.EXTRUDE

- 31.14 SDO_UTIL.FROM_GML311GEOMETRY

- 31.15 SDO_UTIL.FROM_GMLGEOMETRY

- 31.16 SDO_UTIL.FROM_KMLGEOMETRY

- 31.17 SDO_UTIL.FROM_WKBGEOMETRY

- 31.18 SDO_UTIL.FROM_WKTGEOMETRY

- 31.19 SDO_UTIL.GET_2D_FOOTPRINT

- 31.20 SDO_UTIL.GETNUMELEM

- 31.21 SDO_UTIL.GETNUMVERTICES

- 31.22 SDO_UTIL.GETNURBSAPPROX

- 31.23 SDO_UTIL.GETVERTICES

- 31.24 SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS

- 31.25 SDO_UTIL.INTERIOR_POINT

- 31.26 SDO_UTIL.POINT_AT_BEARING

- 31.27 SDO_UTIL.POLYGONTOLINE

- 31.28 SDO_UTIL.RECTIFY_GEOMETRY

- 31.29 SDO_UTIL.REMOVE_DUPLICATE_VERTICES

- 31.30 SDO_UTIL.REVERSE_LINESTRING

- 31.31 SDO_UTIL.SIMPLIFY

- 31.32 SDO_UTIL.SIMPLIFYVW

- 31.33 SDO_UTIL.THEME3D_GET_BLOCK_TABLE

- 31.34 SDO_UTIL.THEME3D_HAS_LOD

- 31.35 SDO_UTIL.THEME3D_HAS_TEXTURE

- 31.36 SDO_UTIL.TO_GML311GEOMETRY

- 31.37 SDO_UTIL.TO_GMLGEOMETRY

- 31.38 SDO_UTIL.TO_KMLGEOMETRY

- 31.39 SDO_UTIL.TO_WKBGEOMETRY

- 31.40 SDO_UTIL.TO_WKTGEOMETRY

- 31.41 SDO_UTIL.VALIDATE_3DTHEME

- 31.42 SDO_UTIL.VALIDATE_SCENE

- 31.43 SDO_UTIL.VALIDATE_VIEWFRAME

- 31.44 SDO_UTIL.VALIDATE_WKBGEOMETRY

- 31.45 SDO_UTIL.VALIDATE_WKTGEOMETRY

32 SDO_WFS_LOCKパッケージ(WFS)

- 32.1 SDO_WFS_LOCK.EnableDBTxns

- 32.2 SDO_WFS_LOCK.RegisterFeatureTable

- 32.3 SDO_WFS_LOCK.UnRegisterFeatureTable

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

- 33.1 SDO_WFS_PROCESS.DropFeatureType

- 33.2 SDO_WFS_PROCESS.DropFeatureTypes

- 33.3 SDO_WFS_PROCESS.GenCollectionProcs

- 33.4 SDO_WFS_PROCESS.GetFeatureTypeId

- 33.5 SDO_WFS_PROCESS.GrantFeatureTypeToUser

- 33.6 SDO_WFS_PROCESS.GrantMDAccessToUser

- 33.7 SDO_WFS_PROCESS.InsertCapabilitiesInfo

- 33.8 SDO_WFS_PROCESS.InsertFtDataUpdated

- 33.9 SDO_WFS_PROCESS.InsertFtMDUpdated

- 33.10 SDO_WFS_PROCESS.PopulateFeatureTypeXMLInfo

- 33.11 SDO_WFS_PROCESS.PublishFeatureType

- 33.12 SDO_WFS_PROCESS.RegisterMTableView

- 33.13 SDO_WFS_PROCESS.RevokeFeatureTypeFromUser

- 33.14 SDO_WFS_PROCESS.RevokeMDAccessFromUser

- 33.15 SDO_WFS_PROCESS.UnRegisterMTableView

第IV部 補足情報

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

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

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

- A.2.1 GeoRasterの有効化

- A.2.2 Oracle XML DBリポジトリがインストールされていることの確認

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

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

B Oracle Locator

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

C 複雑な空間問合せの例

- C.1 例で使用する表

- C.2 SDO_WITHIN_DISTANCEの例

- C.3 SDO_NNの例

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

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

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

E ルーティング・エンジン管理

- E.1 管理操作のロギング

- E.1.1 CREATE_SDO_ROUTER_LOG_DIRプロシージャ

- E.1.2 VALIDATE_SDO_ROUTER_LOG_DIRプロシージャ

- E.2 ネットワーク・データ・モデル(NDM)ネットワーク管理

- E.2.1 CREATE_ROUTER_NETWORKプロシージャ

- E.2.2 DELETE_ROUTER_NETWORKプロシージャ

- E.2.3 ネットワーク作成例

- E.3 ルーティング・エンジン・データ

- E.3.1 PARTITION_ROUTERプロシージャ

- E.3.2 CLEANUP_ROUTERプロシージャ

- E.3.3 DUMP_PARTITIONSプロシージャ

- E.3.4 VALIDATE_PARTITIONSプロシージャ

- E.3.5 GET_VERSIONプロシージャ

- E.3.6 ルーティング・エンジン・データの例

- E.3.6.1 小さいデータ・セットのパーティション化

- E.3.6.2 完全データ・セットのパーティション化

- E.3.6.3 パーティションの内容のダンプ

- E.3.6.4 パーティションの内容の検証

- E.3.6.5 ルーティング・エンジン・データのバージョンの問合せ

- E.4 ユーザー・データ

- E.4.1 制限付き運転マヌーバ・ユーザー・データ

- E.4.2 CREATE_TURN_RESTRICTION_DATAプロシージャ

- E.4.3 DUMP_TURN_RESTRICTION_DATAプロシージャ

- E.4.4 CREATE_TRUCKING_DATAプロシージャ

- E.4.5 DUMP_TRUCKING_DATAプロシージャ

- E.4.6 ユーザー・データの例

- E.4.6.1 右左折制限ユーザー・データの再構築

- E.4.6.2 すべてのハード右左折制限ユーザー・データBLOBのダンプ

- E.4.6.3 トラック輸送ユーザー・データの再構築

- E.4.6.4 トラック輸送ユーザー・データ制限のダンプ

- E.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 and Graphルーティング・エンジンを使用した基本的なアクション・フロー

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

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

- 23-1 円弧の許容差

- 23-2 SDO_GEOM.SDO_DIFFERENCE

- 23-3 SDO_GEOM.SDO_INTERSECTION

- 23-4 SDO_GEOM.SDO_UNION

- 23-5 SDO_GEOM.SDO_XOR

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

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

表一覧

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

- 1-2 測地3次元の計算の実行方法

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

- 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_3DTHEMESビュー

- 2-9 xxx_SDO_SCENESビュー

- 2-10 xxx_SDO_VIEWFRAMESビュー

- 2-11 xxx_SDO_INDEX_INFOビューの列

- 2-12 xxx_SDO_INDEX_METADATAビューの列

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

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

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

- 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 and Graphの名前

- 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表

- 13-5 ROUTER_CONDITION表

- 13-6 ROUTER_NAV_STRAND表

- 13-7 ROUTER_TURN_RESTRICTION_DATA表

- 13-8 ROUTER_TRANSPORT表

- 13-9 ROUTER_TRUCKING_DATA表

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

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

- 18-1 主な空間演算子

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

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

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

- 18-5 SDO_POINTINPOLYGON演算子のparamsキーワード

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

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

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

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

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

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

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

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

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

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

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

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

- 29-1 TINサブプログラム

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

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

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

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

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

- 33-3 ジオメトリ・タイプとcolumnInfoパラメータ値(WFS 1.1.n)

- B-1 Locatorに含まれている機能

- B-2 Locatorに含まれていない機能

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

はじめに

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

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

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

対象読者

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

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

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

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 and Graph GeoRaster開発者ガイド』

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

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

- 『Oracle Database管理者ガイド』

- 『Oracle Database開発ガイド』

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

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

- 『Oracle Database SQLチューニング・ガイド』

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

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

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

表記規則

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

規則

意味

太字

太字は、操作に関連するグラフィカル・ユーザー・インタフェース要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック

イタリックは、ドキュメントのタイトル、強調またはユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅

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

『Oracle Spatial and Graph開発者ガイド』のこのリリースでの変更点

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

- Oracle Database 12cリリース1 (12.1.0.2)での変更点

- Oracle Database 12cリリース1 (12.1.0.1)での変更点

Oracle Database 12cリリース1 (12.1.0.2)での変更点

次に、Oracle Database 12cリリース1 (12.1.0.2)の『Oracle Spatial and Graph開発者ガイド』での変更点を示します。

ルーティング・エンジン情報の改訂

Spatial and Graphルーティング・エンジン(ルーティング・エンジンと呼ばれることもあります)に関する情報は、大幅に更新および再編成されました。これは次の場所にあります。

- 「ルーティング・エンジン」では、ルーティング・エンジンのすべてのユーザーに関連する概念と手法について説明します。

- 「ルーティング・エンジン管理」は、ルーティング・エンジンを管理する必要のある上級ユーザー向けです。ほとんどのルーティング・ユーザーは対象ではありません。(「ルーティング・エンジン」の資料をよく理解していることを想定しています。)

SDO_GEOM.SDO_CLOSEST_POINTSの動作変更

SDO_GEOM.SDO_CLOSEST_POINTSでは、2つの点の間の距離が0 (ゼロ)の場合、以前のリリースでは出力ジオメトリ(geomaおよびgeomb)がnullでした。現在は、その手順の「使用上の注意」で説明されているように、出力ジオメトリは入力ジオメトリが2次元と3次元のどちらであるかに依存します。

GeoRasterをデフォルトで有効にしない

Oracle Spatial and Graphの最初のインストール後、デフォルトではGeoRaster機能が無効になっています。GeoRasterを有効にするには、次の手順に従います。

1. SYS AS SYSDBAとしてデータベースに接続します。

2. 次の文を入力します。

EXECUTE MDSYS.enableGeoRaster;

詳細は、「インストールまたはアップグレード後にGeoRasterが正しく動作するための確認事項」を参照してください

Oracle Database 12cリリース1 (12.1.0.1)での変更点

次に、Oracle Database 12cリリース1 (12.1.0.1)の『Oracle Spatial and Graph開発者ガイド』での変更点を示します。

新機能

このリリースの新機能は次のとおりです。

- 追加および変更されたSDO_GEOMサブプログラム(リリース12.1.0.2)

- NURBS曲線のサポート

- 特定の3D測地操作での高さ情報の近似処理

- 新機能のSpatialメタデータ・ビュー(3Dテーマ、3Dシーン、3Dビューフレーム)

- 追加および変更された集計ファンクション

- 追加および変更されたSDO_CSサブプログラム

- 追加および変更されたSDO_UTILサブプログラム

- 追加されたSDO_GEOM_MBR演算子

- SPATIAL_VECTOR_ACCELERATIONシステム・パラメータ(VPA)

追加および変更されたSDO_GEOMサブプログラム(リリース12.1.0.2)

Oracle Databaseリリース12.1.0.2では、次の新しいサブプログラムがSDO_GEOMパッケージに追加されました(「SDO_GEOMパッケージ(ジオメトリ)」を参照)。

- SDO_GEOM.SDO_DIAMETER

- SDO_GEOM.SDO_DIAMETER_LINE

- SDO_GEOM.SDO_MAXDISTANCE

- SDO_GEOM.SDO_MAXDISTANCE_LINE

- SDO_GEOM.SDO_MBC

- SDO_GEOM.SDO_MBC_CENTER

- SDO_GEOM.SDO_MBC_RADIUS

- SDO_GEOM.SDO_WIDTH

- SDO_GEOM.SDO_WIDTH_LINE

NURBS曲線のサポート

このリリースでは、Non-Uniform Rational B-Spline (NURBS)曲線ジオメトリをサポートしています。NURBS曲線を使用すると、任意の形状で自由形式の形状の表現が可能になります。NURBS表現では、制御点とノットにより曲線の形状が決定され、わずかなデータで複雑な形状の表現が可能になるため、曲線の形状を制御することができます。

詳細は、「Oracle Spatial and GraphでのNURBS曲線のサポート」を参照してください。

特定の3D測地操作での高さ情報の近似処理

以前のリリースでは、3次元測地ジオメトリでの特定の操作の高さ情報は無視されていました。このリリースでは、高さは近似処理され、これらの操作の計算に含まれます。

詳細は、「3次元の空間オブジェクト」(表1-2を含む)を参照してください。

新機能のSpatialメタデータ・ビュー(3Dテーマ、3Dシーン、3Dビューフレーム)

ALL_SDO_xxxおよびUSER_SDO_xxxメタデータ・ビューが3Dテーマ、3Dシーン、3Dビューフレームの用に追加されました。これらのビューの詳細は、「その他の空間メタデータ・ビュー」を参照してください。

これらのビューは、「追加および変更されたSDO_UTILサブプログラム」にリストされているいくつかの新しいファンクションと関連しています。

追加および変更された集計ファンクション

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

- SDO_AGGR_SET_UNION

追加および変更されたSDO_CSサブプログラム

次の新しいサブプログラムがSDO_CSパッケージに追加されました(「SDO_CSパッケージ(座標系変換)」を参照)。

- SDO_CS.CONVERT_3D_SRID_TO_2D

- SDO_CS.LOAD_EPSG_MATRIX

- SDO_CS.VALIDATE_EPSG_MATRIX

追加および変更されたSDO_GEOMサブプログラム

次の新しいサブプログラムがSDO_GEOMパッケージに追加されました(「SDO_GEOMパッケージ(ジオメトリ)」を参照)。

- SDO_GEOM.SDO_SELF_UNION

追加および変更されたSDO_PC_PKGサブプログラム

次の新しいサブプログラムがSDO_PC_PKGパッケージに追加されました(「SDO_PC_PKGパッケージ(点群)」を参照)。

- SDO_PC_PKG.CLIP_PC_FLAT

- SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES

次の大きな変更が行われました。

- SDO_PC_PKG.CLIP_PCでは、include_custom_dimsパラメータは、通常の次元に加えてカスタム次元を含む点群ブロックを戻すために使用できます。

- SDO_PC_PKG.INITでは、pc_other_attrsパラメータは、点群のピラミッド化のメタデータを指定するために使用できます。

追加および変更されたSDO_TIN_PKGサブプログラム

次の新しいサブプログラムがSDO_TIN_PKGパッケージに追加されました(「SDO_TIN_PKGパッケージ(TIN)」を参照)。

- SDO_TIN_PKG.PROJECT_ORDINATES_ONTO_TIN

- SDO_TIN_PKG.TO_DEM

次の大きな変更が行われました。

- SDO_TIN_PKG.INITでは、tin_other_attrsパラメータは、TINのピラミッド化のメタデータを指定するために使用できます。

追加および変更されたSDO_UTILサブプログラム

次の新しいサブプログラムがSDO_UTILパッケージに追加されました(「SDO_UTILパッケージ(ユーティリティ)」を参照)。

- SDO_UTIL.CONVERT3007TO3008

- SDO_UTIL.GET_2D_FOOTPRINT

- SDO_UTIL.SIMPLIFYVW

- SDO_UTIL.THEME3D_GET_BLOCK_TABLE

- SDO_UTIL.THEME3D_HAS_LOD

- SDO_UTIL.THEME3D_HAS_TEXTURE

- SDO_UTIL.VALIDATE_3DTHEME

- SDO_UTIL.VALIDATE_SCENE

- SDO_UTIL.VALIDATE_VIEWFRAME

次の大きな変更が行われました。

- SDO_UTIL.AFFINETRANSFORMSは、1つ目(geometry)以外のすべてのパラメータでデフォルト値を持ちます。これにより、ほんの一部のパラメータのみにデフォルト以外の値を指定する必要がある場合にコーディングが簡略化できます。

- SDO_UTIL.CIRCLE_POLYGONに、start_azimuthパラメータおよびend_azimuthパラメータを含む構文が追加されました。

- SDO_UTIL.SIMPLIFYに新しいオプションのパラメータremove_loopsが追加され、簡略化された線ストリング・ジオメトリに途中で自己交差するループが含まれないようにできます。(SDO_UTIL.SIMPLIFYVWにもremove_loopsパラメータを使用できます。)

追加されたSDO_GEOM_MBR演算子

SDO_GEOM_MBRは、SDO_GEOM.SDO_MBRファンクションと機能的に同じSQL演算子ですが、より優れたパフォーマンスが提供されます。

SDO_GEOM_MBR演算子の使用方法と例の詳細は、SDO_GEOM.SDO_MBRファンクションの参照の項を参照してください。

追加されたSDO_POINTINPOLYGON演算子

追加されたSDO_POINTINPOLYGON演算子(厳密にはテーブル・ファンクション)は、1番目の列が点のx座標の値で、2番目の列が点のy座標の値である一連の行を使用して、指定したポリゴン・ジオメトリ内のこれらの行を戻します。

SPATIAL_VECTOR_ACCELERATIONシステム・パラメータ(VPA)

空間演算子のパフォーマンスを向上させるために、SPATIAL_VECTOR_ACCELERATIONデータベース・システム・パラメータの値をTRUEに設定し、ベクトル・パフォーマンス・アクセラレータ(VPA)機能を有効化することをお薦めします。(この機能と関連するシステム・パラメータは、ライセンスを付与されたOracle Spatial and Graphユーザーによる使用のみが許可されており、そのパラメータのデフォルト値はFALSEです。)このパラメータは、システム全体または単一のセッションに対して設定できます。

詳細は、「SPATIAL_VECTOR_ACCELERATIONシステム・パラメータ」を参照してください。

その他の変更

その他、このマニュアルでは、次のような変更があります。

- 製品名がOracle SpatialからOracle Spatial and Graph (Spatial and Graphともいう)に変更されました。

- 以前に「複雑な空間問合せの例」にあった「SDO_AGGR_UNIONの例」という項は削除されました。この項では、「多くの行を集計する際により良いパフォーマンスを得るには、集計をグループに分割し、各グループのジオメトリ数が常に50以下になるようにします」とお薦めしていました。しかし、リリース12.1で導入されたSDO_AGGR_UNIONの機能強化により、Spatial and GraphでSPATIAL_VECTOR_ACCELERATION=TRUE(「SPATIAL_VECTOR_ACCELERATIONシステム・パラメータ」を参照)を使用する場合、ネストされた集計を使用するその文および例はお薦めできなくなりました。ネストされた集計は、単一の集計よりも実際に遅くなる可能性があります。
ただし、Oracle Locatorを使用する場合、ネストした集計またはSDO_AGGR_SET_UNIONをお薦めします。詳細は、リリース11.2のOracle Spatialの開発者ガイドにあるC.4項 (「SDO_AGGR_UNIONの例」)を参照してください。

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

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

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

- 「空間Webサービス」では、Oracle Spatial and GraphのWebサービスの概念および使用方法について説明します。

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

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

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

- Spatialの概念

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

- SQL Multimedia型のサポート

- 空間データのロード

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

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

- 線形参照システム

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

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

1 Spatialの概念

Oracle Spatial and Graphは、Oracleのファンクション、プロシージャ、データ型およびデータ・モデルを統合した製品であり、空間分析およびグラフ分析をサポートしています。空間フィーチャを使用すると、Oracle Databaseでの空間データの格納、アクセスおよび分析を短時間で効率的に処理することができます。

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

この章には次の項が含まれます。

- Oracle Spatial and Graphとは

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

- 空間データの概要

- ジオメトリ・タイプ

- データ・モデル

- 問合せモデル

- 空間データの索引付け

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

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

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

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

- ジオコーディング

- Oracle Spatial and GraphでのNURBS曲線のサポート

- Spatial and Graph Java Application Programming Interface

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

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

- OGCおよびISOへの準拠

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

- SPATIAL_VECTOR_ACCELERATIONシステム・パラメータ

- 表の空間的な有効化

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

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

- Spatial and Graphのエラー・メッセージ

- Spatialの例

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

1.1 Oracle Spatial and Graphとは。

Oracle Spatial and Graph (Spatial and Graphとも呼ばれる)には、空間データおよび空間分析と、物理グラフ・アプリケーション、論理グラフ・アプリケーション、ネットワーク・グラフ・アプリケーション、ソーシャル・グラフ・アプリケーションおよびセマンティック・グラフ・アプリケーション用の高度な機能が含まれています。空間フィーチャは、Oracle Databaseへの空間フィーチャの集合の格納、検索、更新および問合せを容易にするスキーマおよびファンクションを提供します。Spatial and Graphは、次の要素で構成されています。

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

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

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

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

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

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

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

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

注意:

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

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

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

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

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

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

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

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

- 最適なパフォーマンス

1.3 空間データの概要

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

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

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

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

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

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

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

1.4 ジオメトリ・タイプ

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

- 点および点クラスタ

- 線ストリング

- N点ポリゴン

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

- 円弧ポリゴン

- 複合ポリゴン

- 複合線ストリング

- 円

- 最適化された矩形

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

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

次の図は、ジオメトリ・タイプを表しています。

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

Spatial and Graphは、3次元および4次元のジオメトリ・タイプの格納および索引付けもサポートします。これらのジオメトリ・タイプでは、定義されるオブジェクトの各頂点の定義に3つまたは4つの座標が使用されます。3次元ジオメトリのサポートの詳細は、「3次元の空間オブジェクト」を参照してください。

1.5 データ・モデル

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

1.5.1 要素

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

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

1.5.2 ジオメトリ

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

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

1.5.3 レイヤー

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

1.5.4 座標系

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

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

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

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

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

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

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

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

Spatial and Graphでの座標系サポート(測地座標、投影座標、ローカル座標、座標系の変換など)の詳細は、「座標系(空間参照システム)」を参照してください。

1.5.5 許容差

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

- 測地データ(経度と緯度の座標によって識別されるデータなど)の場合、許容差は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マイルを示します。

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

測地データおよび投影データの場合、許容差には10より小さい値を指定する必要があります。また、ジオメトリが指定された許容差で有効であることを確認します。

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

注意:

浮動小数点演算では、計算で使用される桁数が15桁を超えると、精度が失われる傾向があるため、計算に指定されている桁数が15桁未満であることを確認してください。たとえば、数値が123456.789で、許容差が10E-10である場合、これは事実上精度が16 (10+6)桁であることを意味し、推奨される15桁を超えています。

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

- レイヤーのジオメトリ・メタデータの定義(「レイヤーのジオメトリ・メタデータの許容差」を参照)

- 特定のファンクションに対する入力パラメータ(「入力パラメータとしての許容差」を参照)

線形参照システム(LRS)データの許容差の詳細は、「LRSファンクションの許容差」を参照してください。

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

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

ファンクションがオプションのtoleranceパラメータを受け入れ、このパラメータがNULLまたは指定されていない場合は、レイヤーのSDO_TOLERANCE値が使用されます。「空間データの挿入、索引付けおよび問合せの例」の例の非測地データを使用すると、ジオメトリ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 and Graphは、まず考慮する各ジオメトリの周りに許容差(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に指定することをお薦めします。たとえば、ジオメトリが整数で定義されている(「空間データの挿入、索引付けおよび問合せの例」に簡単な例を示す)場合、適切な値は0.5です。ただし、ジオメトリが小数点第4桁までの数値(31.2587など)で定義されている場合、適切な値は0.00005です。

注意:

ジオメトリに、任意の点で幅が狭く、対辺の間の距離が提案された許容差より短いポリゴンが含まれている場合は、このガイドラインに従わないでください。許容差が、すべてのポリゴンのすべての2辺間の最短距離より小さいことを確認してください。

また、実際はジオメトリが有効であるにもかかわらず、ジオメトリの挿入または更新で「invalid geometry」エラーが発生した場合は、許容差の精度を上げることを検討してください(たとえば、0.00005から0.000005に変更)。

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

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

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

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

ジオメトリ・レイヤーの次元情報配列からの許容差値を明示的に使用する必要があり、かつ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 and Graphでは、空間問合せおよび空間結合を解決するために、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 and Graphでは、1次フィルタ機能を実行するために空間索引を使用します。Spatial and Graphでは、1次フィルタと2次フィルタを常に両方とも使用する必要はありません。1次フィルタを使用するのみで十分な場合もあります。たとえば、マップ・アプリケーションのズーム機能では、可視部分の境界を表現する矩形に重なるデータを問い合せます。1次フィルタを使用すると、問合せのスーパーセットが高速に戻されます。その後マップ・アプリケーションは、クリッピング・ルーチンを適用することによって、ターゲット領域を表示します。

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

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

1.7 空間データの索引付け

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

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

- 空間的に相互作用(空間結合)する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ツリー索引は、空間索引表(「空間索引に関する構造」に示す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ツリー索引の品質の低下が原因である場合があります。

Rツリー索引を再作成するには、ALTER INDEX REBUILD文(「空間データを索引付けするためのSQL文」を参照)を使用します。

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

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

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

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

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

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

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

これらの演算子の構文については、「空間演算子」を参照してください。

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 and Graphでは、次の名前を使用します。

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

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

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

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

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

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

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

- 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 and GraphのPL/SQL Application Program Interface (API)には、いくつかの演算子と多くのプロシージャおよびファンクションが含まれています。

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

空間プロシージャと空間ファンクションは、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 and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』を参照してください。

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

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

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

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

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';

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

注意:

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

1.10.1 SDOAGGRTYPEオブジェクト型

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

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

注意:

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

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

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

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

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

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

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

表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, 1 (線と同じ)

複数面

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次元のみ使用されます。前述した演算子には、この項で後述するように、測地データを処理するときに高さの情報が無視されるものもあります。(空間演算子については、「空間演算子」を参照してください。)

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

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

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

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

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

3次元すべてを使用する空間ファンクション、空間プロシージャおよび空間演算子では、距離および長さの計算は、高さ(標高)を適切に組み込んで行われます。たとえば、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次元空間ジオメトリの作成例は、「3次元のジオメトリ・タイプ」を参照してください。そこでは、3次元ジオメトリの空間メタデータの更新方法および空間索引の作成方法についても例を示しています。

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

空間集計ファンクションおよび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-2では、Oracle Spatial and Graphで特定の測地3次元の計算を内部的に実行する方法について説明します。

表1-2 測地3次元の計算の実行方法

計算のタイプ

実行される内部計算

ANYINTERACT

入力ジオメトリがGnomonic変換を使用して変換された後、結果のジオメトリを使用してANYINTERACT関係が計算されます。

Area

入力ジオメトリがローカル交差平面に投影された後、結果の入力ジオメトリを使用して面積が計算されます。

DistanceまたはLength

2次元の正確な楕円体距離が、2つの最近点の経度と緯度を使用して計算された後、高さまたは長さの差が近似値を使用して含められます。

Volume

入力ジオメトリがローカル交差平面に投影された後、結果の入力ジオメトリを使用して容積が計算されます。

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サブプログラムについては、「SDO_TIN_PKGパッケージ(TIN)」を参照してください。

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 空間オブジェクトの問合せウィンドウとしての錐台

点群(点の巨大な集合体)を使用して、ソリッド・ジオメトリおよび表面ジオメトリの形状または構造をモデル化することもできます。点群データを使用するほとんどのアプリケーションには、位置に基づく問合せが含まれます。アプリケーションは、位置および可視性の両方に基づく問合せを実行する可視性のロジックを追加するために、Spatial and Graph外に出ることができます。

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

点群データの格納には、SDO_PCオブジェクトまたは平面表のいずれかを使用できます。使用する方法は、ご使用のハードウェア環境と使用方法に応じて異なります。平面形式の利点の1つは、その効果と動的な性質で、点データに対する更新であるため、再ブロック化を必要としません。

点群の一般的な操作手順は、その点群データがSDO_PCオブジェクトに格納されるか、平面表に格納されるかによって、次のようになります。

- SDO_PCオブジェクトとして格納される点群データを使用するには、次のようにします。

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オブジェクトに変換する場合)。

- 平面表に格納される点群データを使用するには、次のようにします。

1. 点群データのための表(または該当する表に基づくビュー)を作成します。
各行には、1つの点の最初の3つの空間次元(およびオプションで非空間次元)の値が含まれます。表またはビューの定義は、VAL_D1 NUMBER、VAL_D2 NUMBERおよびVAL_D3 NUMBERの列で始まる必要があります。また、点群の非空間次元の列を含めることもできます。

2. 表に点群データを移入します。

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

点群の操作に使用するPL/SQLサブプログラムについては、「SDO_PC_PKGパッケージ(点群)」を参照してください。

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

テクスチャは、フィーチャの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型定義(「SDO_GEOMETRYオブジェクト型」を参照)で使用されます。

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

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

1.13 Oracle Spatial and GraphでのNURBS曲線のサポート

Spatial and Graphでは、Non-Uniform Rational B-Spline (NURBS)曲線ジオメトリをサポートしています。NURBS曲線を使用すると、任意の形状で自由形式の形状の表現が可能になります。NURBS表現では、制御点とノットにより曲線の形状が決定され、わずかなデータで複雑な形状の表現が可能になるため、曲線の形状を制御することができます。

Oracle Spatial and GraphでのNURBS曲線のサポートには、次のものが含まれます。

- Oracle Spatial and GraphでNURBS曲線ジオメトリをロードおよび格納するためのWKT、WKBおよびGMLファンクション。

- NURBS曲線ジオメトリの検証。

- NURBS曲線ジオメトリの空間索引付けと、SDO_FILTER、SDO_RELATEおよび他の演算子。空間演算子では、計算に曲線の近似値が使用されます。

NURBS表現には、制御点と基底関数の指定が必要です。また、基底関数は、ノット・ベクトルおよび曲線の曲度を使用して定義されます。制御点は、NURBS曲線の形状を決定するために使用されます。ノット・ベクトルは、曲線の形状を直接制御しませんが、終点の正確な配置を制御するために使用されます。また、ノット・ベクトルは、ねじれや角で曲線を作成するためにも使用されます。非一様なノット・ベクトルは曲線の操作のために使用されます。

NURBS曲線を表現するには、データ(制御点、ノット・ベクトルおよび曲線の曲度)を格納する必要があります。制御点のセットは、(x, y, z, w) (wは制御点の重みを表す)とするユークリッド形式、または(wx, wy, wz, w)とする同次形式のいずれかで表すことができます。すべてのiに対してwi=1の場合、この曲線は非有理になります。制御点は重み付けユークリッド形式で指定されます。基底関数は、ノット・ベクトルに基づいて一様または非一様になります。非一様なノット・ベクトルは、終点の配置およびねじれや角の作成に有効です。正規化されたノット・ベクトルを指定する必要があります(つまり、ノット・ベクトルの最初のノットを0 (ゼロ)に、ノット・ベクトルの最後のノットを1にする必要があります)。また、ノット・ベクトルは終点で「固定」させる必要があります。この要件は、ノット・ベクトルの最初のd+1の値をすべて0 (ゼロ)に、最後のd+1の値をすべて1にすることで適用されます(dはNURBS曲線の曲度を表します)。

Oracle Spatial and GraphでのNURBS曲線の実装は、SQL/MM規格に準拠しています。NURBS曲線用のSQL/MM規格は、スプライン、多項式スプライン、3次スプライン、Bスプラインおよびベジェ曲線を表現するために使用されます。Oracle Spatial and Graphでは、SDO_GEOMETRYオブジェクト型はNURBS表現のために使用されます。NURBS曲線は、線タイプ、複数線タイプおよびコレクション・タイプのジオメトリ・オブジェクトに含めることができます。これらのジオメトリでは、単純な線ストリングおよび複合線ストリングのタイプの要素のみにNURBSを含めることができます。

少なくとも1つのNURBSセグメントを含む複合線ストリングの場合、前のセグメントの最後の点はNURBSの"固定された"最初の制御点と同じで、NURBSセグメントの最後の"固定された"制御点は次のセグメントの最初の点と同じです。つまり、頂点が繰り返されます。

要素タイプ値が2で線ストリングを表すジオメトリ要素の場合、解釈値3はNURBS曲線を表すために使用され、解釈値1と2は線形セグメントと円弧を表します。NURBS曲線のSDO_ELEM_INFO_ARRAYは、(offset, 2, 3)として格納されます(これらはそれぞれオフセット、要素タイプ、解釈値を表します)。

SDO_ORDINATE_ARRAYには、曲線の曲度d、m制御点のセットおよびサイズnのノット・ベクトルが格納されます。したがって、縦座標配列は一連の値(d, m, x1, y1, z1, w1…. xm, ym, zm, wm, n, k1….kn)として格納されます。制御点は、SQL/MM規格で指定されているユークリッド形式で格納されます。NURBS曲線では、ノットの数は曲度、制御点の数および1の合計と等しいことに注意してください。したがって、等式n=d+m+1は、NURBS曲線ジオメトリの検証に役立ちます。

NURBS曲線の定義には、次の考慮事項が適用されます。

- 曲度が1の曲線は折れ線を表すため、曲度は1より大きい値にする必要があります。

- 制御点の数は、3以上かつ曲度より大きい値にする必要があります。

- ノットの数は、(制御点の数+曲度+ 1)と等しい値にする必要があります。

- 各制御点の重み要素は正の数値にする必要があります。

- 制御点は、重み付けユークリッド形式[wx, wy, (wz), w]で表されます。

- ノット値は昇順で指定する必要があり、ノット・ベクトルは正規化されたノット・ベクトル[0, .. ……, 1]である必要があります。

- dが曲線の曲度である場合、曲線の最初(値0 (ゼロ))にd+1の連続する均等なノット、曲線の最後(値1)にd+1の連続する均等なノットが必要です。これにより、曲線を終点で固定させることができます。

- dが曲線の曲度である場合、d+1のノットが存在する必要がある曲線の最初または最後以外に、dより大きい連続する均等なノットを指定することはできません。

空間索引を作成または空間操作を実行する前に、NURBSセグメントのあるジオメトリを検証してください。(この推奨は、すべてのジオメトリ・タイプ、NURBSまたはその他に適用されます。)

NURBS曲線ジオメトリを指定する例は、「NURBS曲線」を参照してください。

入力NURBS曲線ジオメトリの近似処理である線ストリング・ジオメトリを取得するには、SDO_UTIL.GETNURBSAPPROX機能を使用します。

1.14 Spatial and Graph Java Application Programming Interface

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

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

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

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

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

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

- oracle.spatial.network.lod: Oracle Spatial and Graphネットワーク・データ・モデル・グラフにおけるネットワーク分析のロード・オンデマンド(LOD)アプローチ(『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』を参照)のサポートを提供します。

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

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

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

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

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

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

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

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

ユーザー・アカウント

説明

MDDATA

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

SPATIAL_CSW_ADMIN_USR

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

SPATIAL_WFS_ADMIN_USR

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

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

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

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

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

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

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

1.17 OGCおよびISOへの準拠

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

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

Oracle Spatial and Graphは、次の国際標準化機構(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.18 Spatial and Graphのリリース(バージョン)番号

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

SELECT SDO_VERSION FROM DUAL;

SDO_VERSION
--------------------------------------------------------------------------------
12.1.0.1.0

1.19 SPATIAL_VECTOR_ACCELERATIONシステム・パラメータ

空間演算子のパフォーマンスを向上させるために、SPATIAL_VECTOR_ACCELERATIONデータベース・システム・パラメータの値をTRUEに設定し、ベクトル・パフォーマンス・アクセラレータ(VPA)機能を有効化することをお薦めします。(この機能と関連するシステム・パラメータは、ライセンスを付与されたOracle Spatial and Graphユーザーによる使用のみが許可されており、そのパラメータのデフォルト値はFALSEです。)

SPATIAL_VECTOR_ACCELERATIONパラメータをTRUEに設定するメリットは、次のとおりです。

- 空間演算子および関数のための空間アルゴリズムが向上する

- メタデータのキャッシュによってあらゆる空間演算子および関数の全体的な性能が向上する

- すべてのDML演算子用のメタデータのキャッシュによって、空間表における挿入、更新および削除操作の速度が向上する

このパラメータは、システム全体または単一のセッションに対して設定できます。システム全体に対して値を設定するには、次のいずれかを実行します。

- 適切な権限を持つアカウントから次の文を入力します。

ALTER SYSTEM SET SPATIAL_VECTOR_ACCELERATION = TRUE;

- データベース初期化ファイル(xxxinit.ora)に次の文を追加します。

SPATIAL_VECTOR_ACCELERATION = TRUE;

現行のセッションに対して値を設定するには、適切な権限を持つアカウントから次の文を入力します。

ALTER SESSION SET SPATIAL_VECTOR_ACCELERATION = TRUE;

関連項目:

- SPATIAL_VECTOR_ACCELERATIONデータベース初期化パラメータのリファレンス情報および使用方法は、『Oracle Databaseリファレンス』を参照してください。

1.20 表の空間的な有効化

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

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

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

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

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

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

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

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

- 列名が、UPDATE文のジオメトリ・コンストラクタ(この場合SDO_POINT)で正しい順序で指定されているかぎり、元の表にLATITUDEとLONGITUDEの値がこの順序で含まれていなくてもかまいません。(SDO_GEOMETRYオブジェクトでは、ポイントの経度が最初で、次が緯度です。)

- 検証はポイントと関係ないため、ジオメトリの検証はこの例に含まれていません。ただし、他の種類のジオメトリを持つ表を空間的に有効化する場合、最初と追加のジオメトリすべてを検証する必要があります。(検証を実行するには、SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTまたはSDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTを使用します。)

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

データベース管理者(DBA)は、MDSYS.MOVE_SDOプロシージャを使用して、すべてのOracle Spatial and Graphメタデータ表を、指定したターゲット表領域に移動できます。デフォルトでは、空間メタデータ表は、リリース11.1以降のリリースではSYSAUX表領域に、また11.1より前のリリースではSYSTEM表領域に作成されます。

MDSYS.MOVE_SDOプロシージャの構文は次のとおりです。

MDSYS.MOVE_SDO(
target_tablespace_name IN VARCHAR2);

必須パラメータであるtarget_tablespace_nameは、空間メタデータ表の移動先となる表領域の名前を指定します。

このプロシージャは、DBAのみが使用する必要があります。

移動操作中、他のすべてのOracle Spatial and Graph機能は無効になります。

次の例は、空間メタデータ表をSYSAUX表領域に移動します。

EXECUTE MDSYS.MOVE_SDO('SYSAUX');

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

この項では、Oracle Spatial and Graphを使用するアプリケーションに必要なディスク領域の容量およびCPUの能力に影響する一般的なガイドラインについて説明します。このガイドラインは、一般的なアプリケーションのサイズ指定に使用するその他のガイドラインに代わるものではなく、それらのガイドラインを補足することを目的としています。

空間アプリケーションの次の特性は、記憶域およびCPUの能力の要件に影響する可能性があります。

- データ量: 空間オブジェクトに必要な記憶域の量は、それらのオブジェクトの複雑さ(表現の精度および各オブジェクトの点の数)によって変わります。たとえば、100万の点オブジェクトを格納する場合に必要な領域は、100万の道路セグメントまたは土地区画を格納する場合より小さくなります。海岸線、断層線、川などの複雑な自然のフィーチャ、および地形のタイプによっては、高い精度で格納すると、必要な記憶域が非常に大きくなる可能性があります。

- 問合せの複雑さ:ある矩形内のすべてのフィーチャを選択するなどの単純なマッピング問合せのCPU要件は、ある海岸線と交差するすべての断層線を検索するなどのより複雑な問合せより低くなります。

1.23 Spatial and Graphのエラー・メッセージ

Spatial and Graphのエラー・メッセージの詳細は、『Oracle Databaseエラー・メッセージ』を参照してください。

Oracleエラー・メッセージのマニュアルは、HTML形式でのみ提供されています。エラー・メッセージを範囲ごとに参照できます(特定の範囲のページを表示したら、ブラウザの「このページの検索」機能を使用して特定のメッセージを検索できます)。また、Oracleオンライン・ドキュメントのエラー・メッセージ検索機能を使用して特定のエラー・メッセージを検索することもできます。

1.24 Spatialの例

Oracle Spatial and Graphでは、特定の処理をコーディングするための理解を深めたり、モデルを作成するための例を提供しています。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の例も記載されています。これらの例と一緒に各ファンクションまたは各プロシージャの参照情報も提供されています。また、表と索引の作成方法、ファンクションとプロシージャの組合せおよび拡張機能を説明するための単純な例も提供されています。

- 空間データの挿入、索引付けおよび問合せ(「空間データの挿入、索引付けおよび問合せの例」を参照)

- 座標系(空間参照システム)(「座標系変換の簡単な例」を参照)

- 線形参照システム(LRS)(「LRSファンクションの例」を参照)

- ファンクション索引のSDO_GEOMETRYオブジェクト(「ファンクション索引のSDO_GEOMETRYオブジェクト」を参照)

- 複雑な問合せ(「複雑な空間問合せの例」を参照)

1.25 Spatial and Graphおよび関連する機能のREADMEファイル

README.txtファイルには、『Oracle Spatial and Graph開発者ガイド』(このマニュアル)、『Oracle Spatial and Graph GeoRaster開発者ガイド』、および『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』の内容を補足する情報が記載されています。このファイルは次の場所にあります。

$ORACLE_HOME/md/doc/README.txt

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

Oracle Spatial and Graphの空間フィーチャは、一連のオブジェクト・データ型、タイプ・メソッド、およびこれらのタイプを使用する演算子、ファンクションおよびプロシージャで構成されます。ジオメトリは、オブジェクトとしてSDO_GEOMETRY型の列の1行に格納されています。空間索引は、基本的なデータ定義言語(DDL)文(CREATE、ALTER、DROP)およびデータ操作言語(DML)文(INSERT、UPDATE、DELETE)を使用して作成およびメンテナンスされます。

この章では、最初に、空間データを挿入、索引付けおよび問合せする例を示します。この章の後半に記載するデータ型およびメタデータの詳細情報を読む前に、この例を参照しておくことをお薦めします。

この章には次の項が含まれます。

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

- SDO_GEOMETRYオブジェクト型

- SDO_GEOMETRYメソッド

- SDO_GEOMETRYコンストラクタ

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

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

- ジオメトリの例

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

- その他の空間メタデータ・ビュー

- 空間索引に関する構造

- 測定単位のサポート

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

ここでは、空間表の作成、データの挿入、空間索引の作成および空間問合せの実行についての例を示します。例では、「Spatialの概念」およびこの章の他の項で説明する内容の概念を示しています。

その内容は、ソフト・ドリンクのメーカーが持っている、数種類の製品(コーラ)に対する市場の関心度についての地域別検証データです。コーラは、その会社、競合他社および数社の共同で生産されています。それぞれの対象領域は、ユーザーが定義した次の基準を表現しています。たとえば、そのコーラが主にマーケットシェアを持つ領域、他社製品よりもシェアが少ない領域、または今後成長が期待できる領域です。それぞれの領域には、都市内の地区、都道府県内の地域、国などがあるとします。

図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
-- TABLE_NAME and COLUMN_NAME.)

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 and Graphでは、空間オブジェクトのジオメトリの記述は、ユーザーが定義した表のSDO_GEOMETRYオブジェクト型の1列に、1行で格納されます。表にSDO_GEOMETRY型の列がある場合、その表に対して一意の主キーを定義する別の列または列のセットが必要です。このような表を、空間表または空間ジオメトリ表ともいいます。

Oracle Spatial and Graphでは、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 and Graphでは、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属性の意味および使用する場合の考慮点(「使用上の注意」)を説明します。

SDO_GEOMETRYオブジェクト型には、その属性にアクセスする場合に有効なメソッドがあります。これらのメソッドについては、「SDO_GEOMETRYメソッド」を参照してください。

次のSpatial and Graphのデータ型については、それぞれの項またはマニュアルを参照してください。

- ジオコーディング用のデータ型(「ジオコーディングのデータ型」)

- Oracle Spatial and Graph GeoRaster用のデータ型(『Oracle Spatial and Graph GeoRaster開発者ガイド』)

- Oracle Spatial and Graphトポロジ・データ・モデル用のデータ型(『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』)

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 and Graphのデフォルト)は、0 (ゼロ)を指定します。線形参照システム(LRS)については、「線形参照システム」を参照してください。

- TT は、ジオメトリ・タイプ(有効値は00から09で、10から99は将来使用するために予約されています)を識別します。

表2-1に、有効なSDO_GTYPE値を示します。「ジオメトリ・タイプ」および「説明」の列に示す値は、OGIS仕様を反映しています。

表2-1 有効なSDO_GTYPE値

値

ジオメトリ・タイプ

説明

DL00

UNKNOWN_GEOMETRY

このジオメトリは、Spatial and Graphでは無視されます。

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の各桁を戻すことができます。これらのメソッドについては、「SDO_GEOMETRYメソッド」を参照してください。

3次元ジオメトリのSDO_GTYPE値の詳細は、「3次元の空間オブジェクト」の表1-1を参照してください。

2.2.2 SDO_SRID

SDO_SRID属性を使用して、ジオメトリに関連付ける座標系(空間参照システム)を識別できます。SDO_SRIDがnullの場合、ジオメトリには座標系は関連付けられていません。SDO_SRIDがNULL以外である場合、SDO_COORD_REF_SYS表のSRID列の値が含まれている必要があります(「SDO_COORD_REF_SYS表」を参照)。また、この値をUSER_SDO_GEOM_METADATAビューのSRID列に挿入する必要があります(「ジオメトリのメタデータ・ビュー」を参照)。

ジオメトリ列にあるすべてのジオメトリは、その列に空間索引が作成される場合は、同じSDO_SRID値である必要があります。

座標系については、「座標系(空間参照システム)」を参照してください。

2.2.3 SDO_POINT

SDO_POINT属性は、属性X、Y、ZおよびすべてのNUMBER型を持つSDO_POINT_TYPEオブジェクト・タイプを使用して定義されます。(SDO_POINT_TYPEの定義の詳細は、「SDO_GEOMETRYオブジェクト型」を参照。)SDO_ELEM_INFO配列およびSDO_ORDINATES配列が両方ともNULLで、SDO_POINT属性がNULL以外である場合、X、YおよびZの値は点ジオメトリの座標であるとみなされます。そうでない場合、SDO_POINT属性はSpatial and Graphによって無視されます。点ジオメトリを適切な記憶域のSDO_POINT属性に格納する必要があります。レイヤーに点ジオメトリのみが存在する場合は、点ジオメトリをSDO_POINT属性に格納してください。

点ジオメトリおよびその挿入と問合せの例については、「点」を参照してください。

注意:

線形参照システム(LRS)の点または方向付きの点の定義に、SDO_POINT属性を使用しないでください。LRSについては、「線形参照システム」を参照してください。方向付きの点については、「方向付きの点」を参照してください。

2.2.4 SDO_ELEM_INFO

SDO_ELEM_INFO属性は、数の可変長配列を使用して定義されます。この属性によって、SDO_ORDINATES属性(「SDO_ORDINATES」を参照)に格納されている縦座標の解釈方法がわかります。

それぞれ3つの数値セットは、次のとおり解釈されます。

- SDO_STARTING_OFFSET -- この要素の最初の縦座標が保存されているSDO_ORDINATES配列内のオフセットを示します。オフセット値は0ではなく1から始まります。そのため、最初の要素の最初の縦座標はSDO_GEOMETRY.SDO_ORDINATES(1)になります。2つ目の要素がある場合、その要素の1つ目の縦座標はSDO_GEOMETRY.SDO_ORDINATES(n)の位置になります。ここで、nはSDO_ORDINATE_ARRAY定義内の位置を示します(たとえば、「穴のあるポリゴン」に示すように、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を指定してください。その後、「SDO_MIGRATEパッケージ(アップグレード)」で説明する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 and Graphによってサポートされないジオメトリ・タイプのモデル化に使用します。詳細は、「タイプ0 (ゼロ)要素」を参照してください。

1

1

点のタイプです。

1

0

方向付きの点の方向です。詳細は、「方向付きの点」を参照してください。

1

n > 1

n点の点の集合です。

2

1

頂点が直線セグメントに連結している線ストリングです。

2

2

連結された一連の円弧で構成される線ストリングです。

それぞれの円弧は、円弧の開始点、円弧上の任意の点および円弧の終了点という3つの座標を使用して記述されます。1つの円弧の終了点および次の円弧の開始点に対する座標は、繰り返されません。たとえば、2つの連結した円弧で構成される線ストリングの記述には、5つの座標が使用されます。点1、2および3は、最初の円弧を定義し、点3、4および5は、2つ目の円弧を定義します。ただし、点3は1回だけ格納されます。

2

3

NURBS (Non-Uniform Rational B-Spline)曲線。詳細は、「Oracle Spatial and GraphでのNURBS曲線のサポート」を参照してください。

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点のみの境界矩形で、記述する必要があります。矩形タイプは、測地データまたは非測地データで使用できます。ただし、測地データでは、問合せウィンドウを作成するためにのみ矩形タイプを使用します(データベースにオブジェクトを格納するためには使用しないでください)。

測地データでのこのタイプの使用方法および例については、「測地MBR」を参照してください。3次元の最適化された矩形の作成については、「3次元の最適化された矩形」を参照してください。

1003または2003

4

円のタイプです。すべて円周上にある、非直線上の異なる3つの点によって記述されます。

4

n > 1

直線セグメントおよび円弧によって連結されたいくつかの頂点による複合線ストリングです。INTERPRETATION列にある値nは、線ストリングを構成する、連続するサブ要素の数を指定します。

SDO_ELEM_INFO配列にある次のn組は、これらサブ要素のそれぞれを記述します。SDO_ETYPE 2のもののみサブ要素になります。サブ要素の最後の点は、次のサブ要素の最初の点であり、繰り返すことはできません。

複合線ストリング・ジオメトリの例は、「複合線ストリング」および図2-5を参照してください。

1005または2005

n > 1

直線セグメントおよび円弧によって連結された頂点がある複合ポリゴンです。INTERPRETATION列にある値nは、ポリゴンを形成する、連続するサブ要素の数を指定します。

SDO_ELEM_INFO配列にある次のn組は、これらサブ要素のそれぞれを記述します。SDO_ETYPE 2のもののみサブ要素になります。サブ要素の終了点は、次のサブ要素の開始点であり、繰り返すことはできません。ポリゴンの開始点および終了点は同じである必要があります(許容差は無視されます)。

複合ポリゴン・ジオメトリの例は、「複合ポリゴン」を参照してください。

1006または2006

n > 1

1つ以上のポリゴンで構成され、各エッジが2つ以下のポリゴンで共有されている面です。面には面積はありますが、容積はありません。INTERPRETATION列にある値nは、表面を形成するポリゴンの数を指定します。

SDO_ELEM_INFO配列にある次のn組は、これらのポリゴンの各サブ要素を記述します。

表面は3次元である必要があります。Spatial and Graphでの3次元のサポートについては、「3次元の空間オブジェクト」を参照してください。

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 and Graphでの3次元のサポートについては、「3次元の空間オブジェクト」を参照してください。

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}のように格納されます。それぞれの点に関連付けられている次元数は、「ジオメトリのメタデータ・ビュー」で説明するとおり、xxx_SDO_GEOM_METADATAビューのメタデータとして格納されます。

SDO_ORDINATES配列のすべての値は、有効で、NULL以外である必要があります。複数要素のジオメトリにおいて、要素の区切りに使用される特別な値はありません。特定の要素を記述する順序の開始点および終了点は、その要素に対するSTARTING_OFFSET値と、「SDO_ELEM_INFO」で説明したSDO_ELEM_INFO配列における次の要素によって決定されます。オフセット値は、1から開始します。SDO_ORDINATES(1)は、最初の要素の最初の点の最初の縦座標です。

2.2.6 使用上の考慮事項

SDO_GTYPEの値は、「SDO_GTYPE」に示すとおりに使用する必要があります(ただし、Spatial and Graphでは、すべてのジオメトリの整合性制約を確認または強制するわけではありません)。Spatial and Graphでは、次の内容については確認されません。

- SDO_GTYPEの値がd001およびd005の場合、SDO_ETYPE 1以外のサブ要素は無視されます。

- SDO_GTYPEの値がd002およびd006の場合、SDO_ETYPE 2または4以外のサブ要素は無視されます。

- SDO_GTYPEの値がd003およびd007の場合、SDO_ETYPE 3または5以外のサブ要素は無視されます。(「SDO_ELEM_INFO」で説明したSDO_ETYPEの変形1003、2003、1005および2005は含まれます。)

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションを使用して、1つのジオメトリ・オブジェクト、または指定されたフィーチャ表にあるすべてのジオメトリ・オブジェクトについての整合性を評価できます。

2.3 SDO_GEOMETRYメソッド

SDO_GEOMETRYオブジェクト型(「SDO_GEOMETRYオブジェクト型」を参照)には、ジオメトリ・オブジェクトの情報を取得するメソッド(メンバー・ファンクション)があります。表2-3に、これらのメソッドを示します。

表2-3 SDO_GEOMETRYのメソッド

Name

戻り値

説明

Get_Dims

NUMBER

SDO_GTYPE値に指定された、ジオメトリ・オブジェクトの次元数を戻します。Oracle Spatial and Graphでは、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)形式(「well-knownテキスト(WKT)」を参照)を戻します。(戻されるオブジェクトに、SRID情報は含まれません。)

ST_CoordDim

NUMBER

ジオメトリ・オブジェクトの座標次元(ISO/IEC SQL Multimedia規格により定義)を戻します。Oracle Spatial and Graphでは、Get_DimsメソッドとST_CoordDimメソッドは、同じ結果を戻します。

ST_IsValid

NUMBER

ジオメトリ・オブジェクトが無効な場合は0(ゼロ)、有効な場合は1を戻します。(ISO/IEC SQL Multimedia規格では、このようなコンテキストの場合、「有効」のかわりに「well formed (整形式)」という語句が使用されています。)

このメソッドでは、0.001が許容差として使用されます。(許容差については、「許容差」を参照してください。)許容差を別途指定する場合、またはジオメトリが無効である理由の詳細情報を取得する場合は、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションを使用します。このファンクションの詳細は、「SDO_GEOMパッケージ(ジオメトリ)」を参照してください。

例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オブジェクト型(「SDO_GEOMETRYオブジェクト型」を参照)には、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 and Graphによって生成されます。このID番号は、型SDO_TINの列を含む実表のスキーマ内で一意です。)

BLK_TABLE

TINの各ブロックに関する情報を含む表の名前。この表に含まれる列を、表2-5に示します。

PTN_PARAMS

TINを分割するためのパラメータ。

TIN_EXTENT

TINの空間エクステント(TINに含まれるすべてのオブジェクトを囲む最小境界オブジェクト)を表すSDO_GEOMETRYオブジェクト。

TIN_TOL

TIN内のオブジェクトの許容差。(空間許容差の詳細は、「許容差」を参照してください。)

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オブジェクトを指定します。詳細は、SDO_TIN_PKG.INITファンクションの「使用上の注意」を参照してください。

図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ブロック表については、「SDO_TIN_BLK_TYPEオブジェクト型およびSDO_TIN_BLKオブジェクト型」の表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 and Graphによって生成されます。このID番号は、型SDO_PCの列を含む実表のスキーマ内で一意です。)

BLK_TABLE

点群の各ブロックに関する情報を含む表の名前。この表に含まれる列を、表2-7に示します。

PTN_PARAMS

点群を分割するためのパラメータ。

PC_EXTENT

点群の空間エクステント(点群に含まれるすべてのオブジェクトを囲む最小境界オブジェクト)を表すSDO_GEOMETRYオブジェクト。

PC_TOL

点群内の点の許容差。(空間許容差の詳細は、「許容差」を参照してください。)

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_PKG.INITファンクションの「使用上の注意」を参照してください。

点群ブロック表(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オブジェクト型の属性は、点群ブロック表に含まれる列と同じです(点群ブロック表については、「SDO_PCオブジェクト型」の表2-7を参照)。

2.7 ジオメトリの例

この項では、様々なジオメトリ・タイプの例を示します。

- 矩形

- 穴のあるポリゴン

- 複合線ストリング

- 複合ポリゴン

- 点

- 方向付きの点

- タイプ0 (ゼロ)要素

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

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

2.7.1 矩形

図2-3に、「空間データの挿入、索引付けおよび問合せの例」の例の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 穴のあるポリゴンを挿入するSQL文

例2-7に、図2-4のジオメトリをデータベースに挿入する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つ含まれます。これらの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属性の詳細は、「SDO_POINT」を参照してください。

- 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値(「SDO_GTYPE」を参照)は、単一点または複数点のジオメトリを使用します。

- SDO_POINT属性には、NULL値を指定します。

- SDO_ELEM_INFO配列(「SDO_ELEM_INFO」を参照)では、2番目と3番目の値(SDO_ETYPEとSDO_INTERPRETATION)を1と0にして、3つの値の組を追加指定します。たとえば、3つの値が3,1,0であれば、点が方向付きの点で、SDO_ORDINATES配列の3番目の数字が、シンボルやラベルの方向ベクトルを表す終了点の1つ目の座標(X軸値)であることを示されます。

- SDO_ORDINATES配列(「SDO_ORDINATES」を参照)は、点の方向ベクトルを表す終了点の座標を-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文

例2-13に、方向付きの複数点ジオメトリをデータベースに挿入するSQL文を示します。この複数点ジオメトリには、座標(12,14)および(12, 10)の位置に2つの点があり、それぞれが異なる方向ベクトルを保持しています。この文は例2-12の文と類似していますが、例2-13では、方向座標-1,-1を使用して、2つ目の点に左下向き45度(X軸から時計回りに135度)の方向ベクトルが割り当てられています。

-- 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 and Graphでサポートされないジオメトリ・タイプ(曲線やスプラインなど)をモデル化するために使用します。タイプ0(ゼロ)要素のSDO_ETYPE値は0(ゼロ)です。(SDO_ETYPEについては、「SDO_ELEM_INFO」を参照。)タイプ0 (ゼロ)要素は、Oracle Spatial and Graphでは索引付けされず、空間ファンクションおよび空間プロシージャでは無視されます。

タイプ0(ゼロ)要素を使用するジオメトリは、0(ゼロ)以外の要素(SDO_ETYPE値が0(ゼロ)以外の要素)を1つ以上含む必要があります。0(ゼロ)以外の要素は、サポートされないジオメトリの近似値である必要があるため、次の両方の値を持つ必要があります。

- Spatial and Graphでサポートされているジオメトリ・タイプに関連付けられたSDO_ETYPE値

- そのSDO_ETYPE値に有効なSDO_INTERPRETATION値(表2-2を参照)
(タイプ0(ゼロ)要素のSDO_INTERPRETATION値には、任意の数値を指定できます。その値の妥当性および有効性は、アプリケーションが判断します。)

0 (ゼロ)以外の要素は、Spatial and Graphによって索引付けされ、空間索引によって戻されます。

タイプ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 NURBS曲線

NURBS (Non-Uniform Rational B-Spline)曲線を使用すると、任意の形状で自由形式の形状の表現が可能になります。NURBS表現では、制御点とノットにより曲線の形状が決定され、わずかなデータで複雑な形状の表現が可能になるため、曲線の形状を制御することができます。NURBS曲線およびNURBS曲線ジオメトリを定義するための要件については、「Oracle Spatial and GraphでのNURBS曲線のサポート」を参照してください。

例2-15に、NURBS曲線ジオメトリをデータベースに挿入するSQL文を示します。

例2-15に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。

- SDO_GTYPE = 2002。1つ目の2は2次元を、2つ目の2は単一線ストリングを示します。

- SDO_SRID = NULL。Oracle Spatial and Graphでは、測地NURBS曲線が許可されていないことに注意してください。

- SDO_POINT = NULL。

- SDO_ELEM_INFO_ARRAY = (1,2,3)。SDO_INTERPRETATION値3は、NURBS曲線を示します。

- SDO_ORDINATE_ARRAYで、3はNURBS曲線の曲度、7は重み付け制御点の数、11はノット数値です。

例2-15 NURBS曲線ジオメトリを挿入するSQL文

CREATE TABLE nurbs_test (gid  integer, geom sdo_geometry);

INSERT INTO nurbs_test values(
1,
SDO_GEOMETRY(
2002,
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1, 2, 3),  /* Element type 2 = SDO_ETYPE_CURVE and Interpretation value 3 = NURBS curve */
SDO_ORDINATE_ARRAY
(3,        /* Degree of the NURBS curve */
7,        /* Number of weighted Control Points */
0, 0, 1,  /* x1, y1, w1 where w1 denotes the weight of the control point and x1, y1 are weighted values. Implies the actual coordinate values have been multiplied by w1 */
-0.5, 1, 1,
0.2, 2, 1,
0.5, 3.5, 1,
0.8, 2, 1,
0.9, 1, 1,
0.3, 0, 1,
11,     /* Number of knot values = Number of control points + degree + 1 */
0, 0, 0, 0,  0.25, 0.5, 0.75, 1.0, 1.0, 1.0, 1.0)));  /* Normalized knot vector; values start at zero and end at 1. Clamped at end points as multiplicity of zero and one is 4, which is equal to the degree of the curve + 1 */

例2-16 NURBS複合曲線ジオメトリを挿入するSQL文

例2-16に、NURBSセグメントを持つ複合曲線ジオメトリの共通部分を示します。例2-15で作成したのと同じNURBS_TEST表を使用します。

INSERT INTO nurbs_test VALUES(
1,
SDO_GEOMETRY(2002, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 4, 2, 1, 2, 1, 5, 2, 3),
SDO_ORDINATE_ARRAY(-1, -1, 0, 0, 3, 7, 0, 0, 1, -0.5, 1, 1,
0.2, 2, 1, 0.5, 3.5, 1, 0.8, 2, 1, 0.9, 1, 1, 0.3,
0, 1, 11, 0, 0, 0, 0, 0.25, 0.5, 0.75, 1.0, 1.0, 1.0, 1.0)
));

例2-16に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。

- SDO_GTYPE = 2002。1つ目の2は2次元を、2つ目の2は単一線ストリングを示します。

- SDO_SRID = NULL。Oracle Spatial and Graphでは、測地NURBS曲線が許可されていないことに注意してください。

- SDO_POINT = NULL。

- SDO_ELEM_INFO_ARRAY = (1, 4, 2, 1, 2, 1, 5, 2, 3)。最初の3つ組は、2つの要素を持つ複合線ストリング(共通部分 = 4)を示します。次の2つの3つ組は、複合線ストリングのセグメントを定義します。最初のセグメントはオフセット1で開始する線ストリング、2つ目のセグメントはオフセット5で開始するNURBSセグメントです。

- SDO_ORDINATE_ARRAYでは、最初の4つ値は、単純な線ストリングである最初のセグメントを定義します。少なくとも1つのNURBSセグメントを含む複合線ストリングでは、共通の頂点はセグメント間で繰り返されます。この例では、線ストリングの最後の点(0,0)はNURBS曲線の最初の"固定された"点(0,0)と等しい必要があります。NURBSセグメントはオフセット5で開始するように定義され、最初の制御点は(0,0)であり、これが度(3)と制御点の数(7)に続きます。NURBSセグメントには11のノット値があります。

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

例2-17は、1つの表を作成し、複数点(点クラスタ)、複数ポリゴン、コレクションなどの2次元の各種ジオメトリを挿入します。最後に、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションをコールして、挿入したジオメトリの有効性を検証します。なお、一部のジオメトリは、意図的に無効にしてあります(ジオメトリの説明に、INVALIDという文字列が書かれています)。

例2-17 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.10 3次元のジオメトリ・タイプ

例2-18では、複数の表(POINTS3D、LINES3DおよびPOLYGONS3D)を作成し、それぞれの表に対応する3次元オブジェクトを(点はPOINTS3Dに、線はLINES3Dに、ポリゴン、面およびソリッドはPOLYGONS3Dに)挿入します。続いて例2-19では、各表のメタデータと空間索引を作成します。

3次元ジオメトリのサポートの詳細は、「3次元の空間オブジェクト」を参照してください。

例2-18 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 multipolygon 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-19 3次元ジオメトリのメタデータの更新と索引の作成

例2-19では、例2-18で作成した表(POINTS3D、LINES3DおよびPOLYGONS3D)に関する必要な情報を使用してUSER_SDO_GEOM_METADATAビューを更新し、各表のジオメトリ列(GEOMETRY)に空間索引を作成します。索引の作成にはPARAMETERS ('sdo_indx_dims=3')句を使用し、3次元ジオメトリをサポートする演算に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 and Graphのユーザーは、ユーザーに関連付けられたスキーマで使用可能な次のビューを持っています。

- USER_SDO_GEOM_METADATAには、ユーザーが所有するすべての空間表(スキーマ)についてのメタデータ情報が含まれます。このビューのみが更新可能であり、Spatial and Graphのユーザーは、空間表に関連するメタデータをこのビューに挿入する必要があります。

- ALL_SDO_GEOM_METADATAには、ユーザーがSELECT権限を持つ、すべての空間表のメタデータ情報が含まれます。

これらのビューの移入は、Spatial and Graphのユーザーの責任において行います。各空間列について、USER_SDO_GEOM_METADATAビューに対応する行を挿入する必要があります。Oracle Spatial and Graphでは、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 and Graphメタデータ・ビューに格納されるスキーマ名、表名、列名および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値の決定方法については、「許容差」(特に「レイヤーのジオメトリ・メタデータの許容差」)を参照してください。

Spatial and Graphでは、可変長配列は次元によって指定されるとみなされます。DIMINFO可変長配列は、SDO_ORDINATES可変長配列の点の縦座標と同じ方法で、次元によって指定される必要があります。たとえば、SDO_ORDINATES可変長配列に{X1, Y1, ..., Xn, Yn}が含まれる場合、最初のDIMINFOエントリはX次元を定義し、2番目のDIMINFOエントリはY次元を定義する必要があります。

「空間データの挿入、索引付けおよび問合せの例」では、SDO_GEOMETRY型とSDO_DIM_ARRAY型の使用方法を示しています。この例は、ジオメトリ・オブジェクト(コーラの仮想マーケット領域)の表現方法、およびCOLA_MARKETSフィーチャ表とUSER_SDO_GEOM_METADATAビューにそれらのオブジェクトのデータを移入する方法を示しています。

2.8.4 SRID

SRID列は、列にあるすべてのジオメトリに対する座標系のSRID値、またはジオメトリに座標系が関連付けられていない場合はNULLを含む必要があります。(座標系については、「座標系(空間参照システム)」を参照してください。)

2.9 その他の空間メタデータ・ビュー

Oracle Spatial and Graphでは、次のその他のメタデータ・ビューを使用します。

- USER_SDO_3DTHEMESおよびALL_SDO_3DTHEMESには、3次元のテーマに関する情報が含まれます。これらのビューの説明は、「xxx_SDO_3DTHEMESビュー」を参照してください。

- USER_SDO_SCENESおよびALL_SDO_SCENESには、シーンに関する情報が含まれます。これらのビューの説明は、「xxx_SDO_SCENESビュー」を参照してください。

- USER_SDO_VIEWFRAMESおよびALL_SDO_VIEWFRAMESには、ビューフレームに関する情報が含まれます。これらのビューの説明は、「xxx_SDO_VIEWFRAMESビュー」を参照してください。

USER_SDO_xxxビューには、ユーザー(スキーマ)が所有するオブジェクトに関するメタデータ情報が含まれ、ALL_SDO_xxxビューには、ユーザーがSELECT権限を持つオブジェクトに関するメタデータ情報が含まれます。

ALL_SDO_xxxビューには、オブジェクト所有者のスキーマを識別するOWNER列が含まれます。USER_SDO_xxxビューに、OWNER列は含まれません。

2.9.1 xxx_SDO_3DTHEMESビュー

USER_SDO_3DTHEMESビューおよびALL_SDO_3DTHEMESビューには、表2-8に示す列があります。

表2-8 xxx_SDO_3DTHEMESビュー

列名

データ型

説明

OWNER

VARCHAR2(32)

テーマを所有するスキーマ(ALL_SDO_3DTHEMESのみ)

NAME

VARCHAR2(32)

テーマに関連付ける一意の名前

DESCRIPTION

VARCHAR2(4000)

テーマに関するオプションの記述テキスト

BASE_TABLE

VARCHAR2(64)

空間ジオメトリ列が含まれる表またはビュー

THEME_COLUMN

VARCHAR2(2048)

テーマ列の名前

STYLE_COLUMN

VARCHAR2(32)

スタイル列の名前

THEME_TYPE

VARCHAR2(32)

テーマのタイプ

DEFINITION

CLOB

テーマのXML定義

2.9.2 xxx_SDO_SCENESビュー

USER_SDO_SCENESビューおよびALL_SDO_SCENESビューには、表2-9に示す列があります。

表2-9 xxx_SDO_SCENESビュー

列名

データ型

説明

OWNER

VARCHAR2(32)

シーンを所有するスキーマ(ALL_SDO_SCENESのみ)

NAME

VARCHAR2(32)

シーンに関連付ける一意の名前

DESCRIPTION

VARCHAR2(4000)

シーンに関するオプションの説明テキスト

DEFINITION

CLOB

シーンのXML定義

2.9.3 xxx_SDO_VIEWFRAMESビュー

USER_SDO_VIEWFRAMESビューおよびALL_SDO_VIEWFRAMESビューには、表2-10に示す列があります。

表2-10 xxx_SDO_VIEWFRAMESビュー

列名

データ型

説明

OWNER

VARCHAR2(32)

シーンを所有するスキーマ(ALL_SDO_VIEWFRAMESのみ)

NAME

VARCHAR2(32)

ビューフレームに関連付ける一意の名前

DESCRIPTION

VARCHAR2(4000)

ビューフレームに関するオプションの説明テキスト

SCENE_NAME

VARCHAR2(32)

ビューフレームに関連付けられたシーンの名前

DEFINITION

CLOB

ビューフレームのXML定義

2.10 空間索引に関する構造

この項では、空間索引データおよびメタデータを含む表の構造について説明します。空間索引付けの概念および使用上の注意は、「空間データの索引付け」を参照してください。空間索引データおよびメタデータは、ともにSpatial and Graphの索引付けルーチンによって作成およびメンテナンスされる表に格納されています。これらの表は、(基になる)フィーチャ表の所有者のスキーマに作成され、フィーチャ表には、SDO_GEOMETRY型の列に作成された空間索引があります。

2.10.1 空間索引ビュー

スキーマ(ユーザー)ごとに、xxx_SDO_INDEX_INFOとxxx_SDO_INDEX_METADATAという2つの空間索引メタデータ・ビューがあります。xxxはUSERまたはALLです。これらのビューは、ユーザーに対して読込み専用であり、空間索引付けルーチンによって作成およびメンテナンスされます。

2.10.1.1 xxx_SDO_INDEX_INFOビュー

次のビューには、空間索引についての基本情報が含まれます。

- USER_SDO_INDEX_INFOには、ユーザーが所有するすべての空間表の索引情報が含まれます。

- ALL_SDO_INDEX_INFOには、ユーザーがSELECT権限を持つ、すべての空間表の索引情報が含まれます。

USER_SDO_INDEX_INFOビューおよびALL_SDO_INDEX_INFOビューには、表2-11に示すとおり、同じ列が含まれます。ただし、USER_SDO_INDEX_INFOビューには、SDO_INDEX_OWNER列は含まれません。列をビュー定義の順に示します。

表2-11 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

空間索引表(「空間索引表の定義」を参照)の名前です。

SDO_INDEX_STATUS

VARCHAR2

(Oracleで使用するために予約されています。)

2.10.1.2 xxx_SDO_INDEX_METADATAビュー

次のビューには、空間索引メタデータについての詳細情報が含まれます。

- USER_SDO_INDEX_METADATAには、ユーザーが所有するすべての空間表の索引情報が含まれます。

- ALL_SDO_INDEX_METADATAには、ユーザーがSELECT権限を持つ、すべての空間表の索引情報が含まれます。

USER_SDO_INDEX_METADATAとALL_SDO_INDEX_METADATAビューには、表2-12に示す、同じ列が含まれます。列をビュー定義の順に示します。

表2-12 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

空間索引表(「空間索引表の定義」を参照)の名前です。

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 and Graphが内部的に使用する次元数です。これは、索引付けされる次元数(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 (レイヤーが点およびポリゴン・データの両方を含むことができる場合)または「SDO_GTYPE」の「ジオメトリ・タイプ」列に示す値が含まれます。

SDO_RTREE_PCTFREE

NUMBER

Rツリー索引の作成時は空にしておく、各索引ツリー・ノードのスロットの最小割合です。

SDO_INDEX_PARTITION

VARCHAR2

パーティション索引の場合は、索引パーティションの名前です。

SDO_PARTITIONED

NUMBER

索引がパーティション索引でない場合は0(ゼロ)、パーティション索引の場合は1が含まれます。

SDO_RTREE_QUALITY

NUMBER

索引の品質スコアです。Rツリーの品質については、「Rツリーの品質」を参照してください。

SDO_INDEX_VERSION

NUMBER

索引の内部バージョン番号です。

SDO_INDEX_GEODETIC

VARCHAR2

索引が測地索引の場合はTRUE、測地索引でない場合はFALSEです。

SDO_INDEX_STATUS

VARCHAR2

(Oracleで使用するために予約されています。)

SDO_NL_INDEX_TABLE

VARCHAR2

索引の非リーフ・ノードに対する個別の索引表の名前(名前の形式はMDNT_...$)です。詳細は、「空間データを索引付けするためのSQL文」のCREATE INDEX文のsdo_non_leaf_tblパラメータの説明を参照してください。

SDO_DML_BATCH_SIZE

NUMBER

コミット操作後に、それぞれの更新バッチで処理する索引更新数です。詳細は、「空間データを索引付けするためのSQL文」のCREATE INDEX文のsdo_dml_batch_sizeパラメータの説明を参照してください。

SDO_RTREE_EXT_XPND

NUMBER

(将来使用するために予約済)

SDO_NUM_ROWS

NUMBER

空間実表(この索引が作成された列を含む表)の(NULL以外のジオメトリを含む)行数です。

SDO_NUM_BLKS

NUMBER

空間索引表(SDO_INDEX_TABLE)内のブロックの数を指定します。

SDO_ROOT_MBR

SDO_GEOMETRY

空間レイヤーの最大エクステントに対する最小境界矩形です。これは、現在のエクステントのMBRに等しいかまたは大きくなります。索引が再構築されると、現在のエクステントを反映するように再設定されます。

2.10.2 空間索引表の定義

Rツリー索引の場合、空間索引表(「xxx_SDO_INDEX_METADATAビュー」に示すSDO_INDEX_TABLEの各エントリ)には、表2-13に示す列が含まれます。

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

列名

データ型

用途

NODE_ID

NUMBER

ツリーのこのノードに対する一意のID番号です。

NODE_LEVEL

NUMBER

ツリー内のノードのレベルです。リーフ・ノード(エントリが実表のデータ項目を指すノード)はレベル1、その親ノードはレベル2などのようになります。

INFO

BLOB

ノード内のその他の情報です。<child_mbr, child_rowid>のペア(fanoutの最大値、または各Rツリー・ノード内のペアの子の数)の配列が含まれます。ここで、child_rowidは子ノードのROWID、または実表のデータ項目のROWIDです。

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

各Rツリー空間索引表は、それぞれ関連付けられた順序オブジェクト(「xxx_SDO_INDEX_METADATAビュー」に示すUSER_SDO_INDEX_METADATAビューのSDO_RTREE_SEQ_NAME列を参照)を持ちます。順序によって、複数の同時ユーザーによる索引の同時更新が可能になります。

順序名は、アンダースコアの前にある「T」を「S」に置き換えた索引表名です。たとえば、索引表MDRT_5C01$は、順序オブジェクトMDRS_5C01$に関連付けられます。

2.11 測定単位のサポート

地理参照座標系(SDO_SRID値)が入力ジオメトリに関連付けられている場合、測定を伴うジオメトリ・ファンクションを使用すると、オプションのunitパラメータを使用して、特定の距離または面積の測定単位を指定できます。unitパラメータは、SDO_SRID値がNULLであるジオメトリ(垂直デカルト・システム)には無効です。座標系のサポートについては、「座標系(空間参照システム)」を参照してください。

デフォルトの測定単位は、地理参照座標系に関連付けられた測定単位です。ほとんどの座標系の測定単位はmです。この場合、デフォルトの距離単位はmで、デフォルトの面積単位はm2です。ただし、unitパラメータを使用すると、アプリケーション・ユーザーにとってより有効な結果(レストランまでの距離のマイル表示など)をSpatialで自動的に換算し、戻すことができます。

unitパラメータは、文字列unit=およびSDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)の有効なUNIT_OF_MEAS_NAME値を一重引用符で囲む必要があります。たとえば、次の例(「座標系変換の例」の例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 and Graphでは、有効な単位名や、異なる単位間での比較や変換に使用する比率を決定するために、SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)内の情報が使用されます。また、次のレガシー・ビューを使用すると、メジャーの角度、面積および距離の単位を簡単に確認することもできます。

- MDSYS.SDO_ANGLE_UNITS (「MDSYS.SDO_ANGLE_UNITSビュー」を参照)

- MDSYS.SSDO_AREA_UNITS (「MDSYS.SDO_AREA_UNITSビュー」を参照)

- MDSYS.SSDO_DIST_UNITS (「MDSYS.SDO_DIST_UNITSビュー」を参照)

2.11.1 ユーザー定義の測定単位の作成

Oracleから提供されている面積および距離の測定単位でニーズを十分に満たすことができない場合は、ユーザー定義の面積および距離の単位を作成できます。(ユーザー定義の角度の単位は作成できません。)ユーザー定義の測定単位を作成するには、DBAロールが付与されているユーザーとしてデータベースに接続し、SDO_UNITS_OF_MEASURE表に必要な単位ごとに1行挿入する必要があります(「SDO_UNITS_OF_MEASURE表」を参照)。

表2-14に、ユーザー定義の測定単位に対応する行を挿入する場合に使用するSDO_UNITS_OF_MEASURE表の列と、各列の要件および推奨値を示します。

表2-14 ユーザー定義の単位で使用する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-20では、HALF_METERという名前のユーザー定義の距離単位を作成し、作成した単位を問合せで使用して、指定した店舗の400,000半メートル(200km)以内に居住するすべての顧客を検索します。

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

-- 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 and Graphでのサポートについて説明します。この章には次の項が含まれます。

- ST_GEOMETRYとSDO_GEOMETRYとの相互運用性

- SQL Multimedia型での許容差

- 名前の競合の回避

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

3.1 ST_GEOMETRYとSDO_GEOMETRYとの相互運用性

SQL MultimediaのST_GEOMETRYルート・タイプ(サブタイプを含む)とOracle Spatial and GraphのSDO_GEOMETRY型(「SDO_GEOMETRYオブジェクト型」を参照)は、基本的に相互運用できます。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 空間列でのST_GEOMETRY型の使用

例3-1では、SDO_GEOMETRY型のかわりに空間列にST_GEOMETRY型を使用して表を作成し、ST_GEOMETRYコンストラクタを使用して、その表に行を挿入する際のSHAPE列の値を指定します。

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 and Graphの演算子(「空間演算子」を参照)を使用できます。標準で定義されている演算子の他に、SDO_NN演算子およびSDO_WITHIN_DISTANCE演算子も使用できます。

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

例3-2では、「空間データの挿入、索引付けおよび問合せの例」の例2-1と基本的に同じ操作を実行しますが、空間列に対して、SDO_GEOMETRY型のかわりに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 and Graphの機能

表3-1にSQL Multimediaファンクションおよび同等のOracle Spatial and GraphのSDO_GEOMETRYメソッド(つまりSpatialのファンクション、プロシージャ、演算子)を示します。なお、同等のOracle Spatial and Graphの機能は、SQL Multimediaファンクションより多くの機能を持っている場合があることに注意してください。

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

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 and Graphでは、ST_GEOMETRY型のすべてのメンバー・メソッドにデフォルト値の0.005が使用されます。ST_GEOMETRYメンバー・ファンクションで使用する許容差に異なる値を指定する場合は、SDO_ST_TOLERANCE表に指定する値を挿入してデフォルトを上書きする必要があります。

SDO_ST_TOLERANCE表はグローバルな一時表であり、ST_GEOMETRYメンバー・メソッドで使用される許容差を指定する1行があります。この表には、(tolerance NUMBER)で定義される1列があります。

空間索引を使用するすべての空間演算子に対し、Spatial and Graphでは、USER_SDO_GEOM_METADATAビューの空間列に指定された許容差が使用されます。

3.4 名前の競合の回避

一部のサード・パーティ・ベンダーでは、OracleでST_xxx型の独自のバージョンをサポートしています。たとえば、ベンダーがST_GEOMETRY型の独自のバージョンを作成する場合もあります。

サード・パーティの名前とOracle提供の名前が競合することを回避するには、サード・パーティのST_xxx型をOracleに実装する際に、スキーマの接頭辞を使用する必要があります。たとえば、列の型に単にST_GEOMETRYを指定すると、OracleにST_GEOMETRY型を実装する際にその列が作成されることになります。

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

Oracle Spatial and Graphでは、『OpenGIS Implementation Specification for Geographic information - Simple feature access - Part 1: Common architecture』で指定された注釈テキストをサポートしています。この仕様では、注釈テキストは、地理関連データまたはアドホック・データおよびプロセス関連情報を表示可能なテキストとして含む、単純に挿入されたテキストとして定義されています。このテキストは、エディタまたは単純な地図で表示するために使用できます。通常、完全な地図製作における品質としては不十分ですが、あらゆるアプリケーションで必要となるテキスト機能をほぼ果たすことができます。

ST_ANNOTATION_TEXTオブジェクト型は、注釈テキストの格納に使用できます。この型には、注釈テキストを表に挿入するコンストラクタがあります(「ST_ANNOTATION_TEXTコンストラクタの使用」を参照)。

USER_ANNOTATION_TEXT_METADATAビューおよびALL_ANNOTATION_TEXT_METADATAビューは、注釈テキストに関連するメタデータを格納します(「注釈テキストのメタデータ・ビュー」を参照)。

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

注釈テキストのオブジェクトには、オブジェクトの配列が含まれます。ここでは、各オブジェクトは、テキスト・ラベル、テキスト・ラベルのレンダリングを開始する点、引き出し線(通常、テキスト・ラベルから地図上の関連付けられた点)およびオプションで追加の属性情報で構成されます。通常、単一の注釈テキストのオブジェクトには、地図のすべてのテキスト・ラベルを含めることができます。

各テキスト・ラベルのオブジェクトは、次のように定義されています。

Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
PRIVATEVALUE                                       VARCHAR2(4000)
PRIVATELOCATION                                    MDSYS.SDO_GEOMETRY
PRIVATELEADERLINE                                  MDSYS.SDO_GEOMETRY
PRIVATETEXTATTRIBUTES                              VARCHAR2(4000)

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

単一の点に注釈を挿入する場合は、ST_ANNOTATION_TEXTコンストラクタを使用します。このコンストラクタは、例3-3に示すように、配列を使用して単一の点に情報を指定します。この例では、ST_ANNOTATION_TEXT型の列を含む表を作成し、INSERT文でST_ANNOTATION_TEXTコンストラクタを使用して、1つの行を挿入します。

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-2を参照)

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

注釈テキストのメタデータは、MDSYSが所有するグローバル表に格納されます。ユーザーは、このグローバル表を直接更新しないでください。Spatial and Graphのユーザーは、ユーザーに関連付けられたスキーマで使用可能な次のビューを持っています。

- USER_ANNOTATION_TEXT_METADATAには、ユーザー(スキーマ)が所有する表のすべての注釈テキストについてのメタデータ情報が含まれます。このビューのみが更新可能であり、Spatial and Graphのユーザーは、空間表に関連するメタデータをこのビューに挿入する必要があります。

- ALL_ANNOTATION_TEXT_METADATAには、ユーザーがSELECT権限を持つ、表のすべての注釈テキストのメタデータ情報が含まれます。

これらのビューの移入は、Spatial and Graphのユーザーの責任において行います。注釈テキストの各オブジェクトについて、USER_ANNOTATION_TEXT_METADATAビューに適切な行を挿入する必要があります。Oracle Spatial and Graphでは、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属性で上書きされた場合を除きます(「ST_ANNOTATION_TEXTコンストラクタの使用」を参照)。OpenGISの仕様の「XML for Text Attributes」の項で指定された形式を使用してください。

4 空間データのロード

この章では、データベースに空間データをロードする方法(SDO_GEOMETRY型の列を使用した表へのデータの格納を含む)を説明します。空間データのロードの完了後、データに対して空間索引を作成し、データに対する問合せを実行できます(「空間データの索引付けおよび問合せ」を参照)。

データのロード処理には、次の2種類があります。

- データのバルク・ロード(「バルク・ロード」を参照)
大量のデータをデータベースにロードする場合は、この処理方法を使用します。データのロードには、SQL*Loaderユーティリティを使用します。

- トランザクション挿入操作(「SQLを使用したトランザクション挿入」を参照)
一般的に、この処理は比較的少量のデータをデータベースに挿入する場合に、SQLのINSERT文を使用して行われます。

空間データのロードおよび検証に関する推奨事項は、「空間データのロードおよび検査の推奨手順」を参照してください。

4.1 バルク・ロード

バルク・ロードでは、大量のデータをOracle Databaseにインポートできます。バルク・ロードは、SQL*Loaderユーティリティを使用して実行します。(SQL*Loaderの詳細は、『Oracle Databaseユーティリティ』を参照してください。)

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

例4-1は、4つのジオメトリをロードするためのSQL*Loader制御ファイルです。この制御ファイルをSQL*Loaderで使用すると、「空間データの挿入、索引付けおよび問合せの例」の例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 ポリゴンのバルク・ロードのための制御ファイル

例4-2では、POLY_4PTという表を次のとおり作成したと想定しています。

CREATE TABLE POLY_4PT (GID VARCHAR2(32),
GEOMETRY SDO_GEOMETRY);

ASCIIデータは、デリミタ付きの列および次の書式の表制限で固定されている別々の行で構成されているとします。

geometry rows:    GID, GEOMETRY

GEOMETRY列の座標は、ポリゴンを表現しています。データをロードするための制御ファイルを例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 点のみのデータをバルク・ロードするための制御ファイル

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 and Graphでは、標準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;
/

様々なジオメトリ・タイプを使用したその他の例については、次の例を参照してください。

- 矩形: 「矩形」

- 穴のあるポリゴン: 「穴のあるポリゴン」

- 複合線ストリング : 「複合線ストリング」

- 複合ポリゴン: 「複合ポリゴン」

- 点: 「点」

- 方向付きの点: 「方向付きの点」

- タイプ0 (ゼロ)要素: 「タイプ0 (ゼロ)要素」

4.3 空間データのロードおよび検査の推奨手順

データで空間操作を実行する前に、すべてのジオメトリ・データを検査し、検査エラーがあれば修正する必要があります。

空間データをロードおよび検証するための推奨手順は、次のとおりです。

1. 「バルク・ロード」または「SQLを使用したトランザクション挿入」に説明されているメソッドを使用して、データをロードします。

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 空間データの索引付けおよび問合せ

空間データを使用した問合せのパフォーマンスを向上させるには、空間データのロード(「空間データのロード」を参照)が完了した後で、データに対して空間索引を作成する必要があります。この章では、次の操作を実行する方法について説明します。

- 空間索引の作成(「空間索引の作成」を参照)

- Oracle Spatial and Graphの問合せモデルおよび1次フィルタ処理と2次フィルタ処理を理解したうえでの効率的な空間データの問合せ(「空間データの問合せ」を参照)

5.1 空間索引の作成

効率的にデータにアクセスするには、バルク・ロードまたはトランザクション・ロードによる空間表へのデータのロードが完了した後で、表内の各ジオメトリ列に対して空間索引(空間Rツリー索引)を作成する必要があります。たとえば、次の文は、すべてのパラメータについてデフォルト値を使用して、territory_idxという空間索引を作成します。

CREATE INDEX territory_idx ON territories (territory_geom)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

空間索引の作成のオプションの詳細は、「空間データを索引付けするためのSQL文」のCREATE INDEX文を参照してください。

索引作成が完了しなかった場合、索引は無効になるため、DROP INDEX <index_name> [FORCE]文で削除する必要があります。

索引付けされる各ジオメトリ列内では、すべてのジオメトリのSDO_SRID値が同じである必要があります。

空間索引は、2次元、3次元または4次元のデータに作成できます。デフォルトの次元数は2ですが、3次元以上のデータの場合は、sdo_indx_dimsパラメータ・キーワードを使用して、索引を作成する次元数を指定できます。(3次元ジオメトリのサポートの詳細は、「3次元の空間オブジェクト」を参照してください。問合せ要素における次元の様々な組合せのサポートについては、「データおよび索引の次元と空間問合せ」を参照してください。)

Oracle Databaseの自動UNDO管理機能またはPGAメモリー管理機能のいずれかを使用していないか、あるいはこの両方を使用していない場合は、設定不要の可能性がある初期化パラメータ値について、「ロールバック・セグメントおよびソート領域サイズ」を参照してください。自動UNDO管理およびPGAメモリー管理の両方は、デフォルトで有効になっており、これらを使用することをお薦めします。

CREATE INDEX文のtablespaceキーワードで指定された表領域(または、tablespaceキーワードが指定されていない場合はデフォルトの表領域)を使用すると、索引データ表、および内部計算用に作成されたいくつかの一時表の両方が保持されます。WORK_TABLESPACEを表領域として指定すると、一時表は作業表領域に格納されます。

1,000,000行を超える大規模な表では、内部ソート操作を実行する場合に一時表領域が必要です。この一時表領域のサイズは、最大値を1GBとして、100×n バイト(n は表の行数)にすることをお薦めします。

空間索引の作成に必要な領域を推定するには、SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZEファンクション(「SDO_TUNEパッケージ(チューニング)」を参照)を使用します。

この項には次のトピックも含まれます。

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

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

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

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

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

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

- 空間索引統計へのアクセスの有効化

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

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

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

保証免責

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

制限付権利について

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

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 Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

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

第三者のコンテンツ、製品、サービスに対する免責事項

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

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

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

Oracle Supportへのアクセス

サポートをご契約のお客様には、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)を参照してください。

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

空間索引の作成または再作成時、表内のすべてのジオメトリ、または後で挿入されるすべてのジオメトリを、指定したジオメトリ・タイプにすることができます。このように、データのジオメトリ・タイプを制限するには、CREATE INDEX文またはALTER INDEX REBUILD文のPARAMETERS句でlayer_gtypeキーワードを使用し、「SDO_GTYPE」の「ジオメトリ・タイプ」列の値を指定します。次に、レイヤー内の空間データをポリゴンに制限する例を示します。

CREATE INDEX cola_spatial_idx
ON cola_markets(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX
PARAMETERS ('layer_gtype=POLYGON');

「SDO_GTYPE」のジオメトリ・タイプは、データの確認時に階層とみなされます。

- 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;

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

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

保証免責

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

制限付権利について

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

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 Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

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

第三者のコンテンツ、製品、サービスに対する免責事項

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

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

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

Oracle Supportへのアクセス

サポートをご契約のお客様には、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)を参照してください。

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

パーティション表にはパーティション空間索引を作成できます。この項では、Oracle Spatial and Graph固有の使用上の考慮事項について説明します。パーティション表およびパーティション索引の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

パーティション空間索引には、次のメリットがあります。

- パーティション化によってディスク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パラメータの値(「特定のジオメトリ・タイプへのデータの制限」を参照)は異なる場合があります。

パーティション化のデフォルト値を上書きするには、次の一般的な形式の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の場合、その問合せによって影響されるパーティションごとに、要求した数のジオメトリが戻されます。(詳細は、「空間演算子」のSDO_NN演算子の説明を参照してください。)

たとえば、ある地点に最も近い5つのレストランを要求し、空間索引に4つのパーティションがある場合、SDO_NNは最大20 (5×4)のジオメトリを戻します。この場合、最も近い5つのレストランを戻すためにROWNUM疑似列(ここでは、WHERE ROWNUM <=5)を、結果を距離(マイル)でソートするためにORDER BY句を使用する必要があります。例5-1では、パーティション空間索引から最も近い5つのレストランを戻します。

注意:

SDO_NN演算子を使用するその他の例については、「SDO_NNの例」を参照してください。

クロススキーマ問合せでは、表にパーティション空間索引がある場合、空間表と、空間表に作成された空間索引の索引表(MDRT_xxx)の両方について、ユーザーにSELECTまたはREAD権限が付与されている必要があります。詳細と例については、「空間演算子」のSDO_JOIN演算子の「使用上の注意」に記載されている「SDO_JOINのクロススキーマでの使用」を参照してください。

例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;

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文のいずれかが失敗しても、操作が正常に完了したパーティションを再作成する必要はありません。

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

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

保証免責

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

制限付権利について

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

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 Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

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

第三者のコンテンツ、製品、サービスに対する免責事項

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

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

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

Oracle Supportへのアクセス

サポートをご契約のお客様には、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)を参照してください。

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

ALTER TABLE文でEXCHANGE PARTITION ... INCLUDING INDEXES句を使用すると、空間表パーティションおよびその索引パーティションを対応する表およびその索引と交換できます。パーティションの交換については、『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のオプティマイザは、データベースおよびそのオブジェクトに関する詳細を表す統計を収集します。統計は、オプティマイザが各SQL文に対して最適な実行計画を選択するために不可欠のものです。オプティマイザ統計の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

DBMS_STATS.GATHER_INDEX_STATSやDBMS_STATS.GATHER_SCHEMA_STATSなどのプロシージャを使用して空間索引関連の索引統計を収集できるようにするには、統計収集を実行するデータベース・ユーザー全員にCREATE TABLE権限が付与されている必要があります。

異なるスキーマ(ユーザー)の空間ドメイン索引に対してANALYZE INDEXを実行する場合、ANALYZE操作を実行するユーザーには次の権限が必要です。

- 見つからない一時表を作成するためのCREATE ANY TABLE

- 既存の一時表を切捨てまたは削除するためのDROP ANY TABLE

統計が正常に収集された場合は、統計収集対象の索引ごとに、MDXT_%objID%という形式の名前で表が作成されます。このような表のそれぞれに格納される空間統計データは、デフォルトでは512行です。

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

この項は、ユーザー(データベース管理者)が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 and Graphでは、「問合せモデル」で説明したとおり、空間問合せおよび空間結合を解決するために、1次フィルタ処理と2次フィルタ処理を含む2層問合せモデルを使用します。2層とは、問合せの解決のために2種類の別々の処理が実行されることを指します。両方の処理が実行されると、完全一致の結果セットが戻されます。

問合せ内の空間表に空間索引が定義されている場合、その表の名前にデータベース・リンク(dblink)名を追加することはできません。

この項には次のトピックも含まれます。

- 空間問合せ

- 空間結合

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

5.2.1 空間問合せ

空間Rツリー索引では、各ジオメトリが最小境界矩形(MBR)で表現されます(「Rツリー索引」を参照)。図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演算子(「空間演算子」を参照)は、Spatial and Graphの問合せ処理モデルに含まれる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です。

次の例では、問合せウィンドウを表に挿入せずに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';

次の例では、(x1,y1)および(x2,y2)は、問合せウィンドウの左下および右上の角です。

次の例では、問合せ自体にウィンドウ・パラメータを指定するのではなく、SDO_GEOMETRY型の一時的なインスタンスが、問合せウィンドウ用に構成されます。

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

SELECT A.Feature_ID FROM TARGET A
WHERE sdo_filter(A.shape, :theWindow) = 'TRUE';

次の例では、問合せウィンドウが、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演算子(「空間演算子」を参照)は、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キーワード(あるいはその両方)も設定されます。詳細は、「空間演算子」のSDO_RELATE演算子の説明を参照してください。

次の例では、1次フィルタおよび2次フィルタの両方の処理を実行します。この例では、図5-2に示すジオメトリのうち、問合せウィンドウ内に位置する、または部分的に重なるすべてのジオメトリが戻されます。これらの例の結果は、オブジェクトgeom_1およびgeom_2です。

次の例では、問合せウィンドウを表に挿入せずに、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';

次の例では、(x1,y1)および(x2,y2)は、問合せウィンドウの左下および右上の角です。

次の例では、問合せウィンドウが、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演算子(「空間演算子」を参照)は、参照オブジェクトからn 距離単位内に、表内のオブジェクトの集合があるかどうかを判断するために使用されます。この演算子は、2次元のデータに空間索引が作成されている場合にのみ使用できます。参照オブジェクトは、SDO_GEOMETRYの一時的または永続的なインスタンス(一時問合せウィンドウやデータベースに格納された永続的ジオメトリなど)です。演算子の構文は次のとおりです。

SDO_WITHIN_DISTANCE(geometry1  SDO_GEOMETRY,
aGeom      SDO_GEOMETRY,
params     VARCHAR2);

前の構文では:

- geometry1は、表のSDO_GEOMETRY型の列です。この列は、空間索引付けされている必要があります。

- aGeomは、SDO_GEOMETRY型のインスタンスです。

- paramsは、演算子の動作を判断する、キーワードの値のペアを引用符で囲んだ文字列です。パラメータ・リストの詳細は、「空間演算子」の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演算子(「空間演算子」を参照)は、最も近くにあるジオメトリを識別するために使用します。この演算子は、2次元のデータに空間索引が作成されている場合にのみ使用できます。演算子の構文は次のとおりです。

SDO_NN(geometry1  SDO_GEOMETRY,
geometry2  SDO_GEOMETRY,
param      VARCHAR2
[, number  NUMBER]);

前の構文では:

- geometry1は、表のSDO_GEOMETRY型の列です。この列は、空間索引付けされている必要があります。

- geometry2は、SDO_GEOMETRY型のインスタンスです。

- paramは、キーワードと値のペアを引用符で囲んだ文字列で、近くにあるジオメトリをいくつ戻すかといった、演算子の動作を決定できます。このパラメータの詳細は、「空間演算子」のSDO_NN演算子を参照してください。

- numberは、SDO_NN_DISTANCEのコールで使用される数と同じ数です。これは、SDO_NN_DISTANCE補助演算子がSDO_NNのコールに含まれている場合にのみ使用します。このパラメータの詳細は、「空間演算子」のSDO_NN演算子を参照してください。

次の例では、COLA_MARKETS表のSHAPE列から、指定した点(10,7)に最も近い2つのオブジェクトを検索します。(SELECT文のオプティマイザ・ヒントの使用方法は、「空間演算子」の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 and Graphでは、ジオメトリ間の関係の判断、単一のジオメトリに関する情報の検索、ジオメトリの変更および結合を行うためのファンクションも提供されます。これらのすべてのファンクションでは、2次元のソース・データが考慮されます。これらのファンクションの出力値がジオメトリの場合、結果のジオメトリの次元は入力ジオメトリと同じになりますが、最初の2次元のみに操作の結果が正確に反映されます。

5.2.2 空間結合

空間結合は、条件で空間演算子を使用することを除いて、通常の結合と同じです。Spatial and Graphでは、あるレイヤーのすべてのジオメトリと別のレイヤーのすべてのジオメトリを比較する場合、空間結合に領域が必要です。これは、単一のジオメトリとレイヤーのすべてのジオメトリを比較する問合せウィンドウとは異なります。

空間結合を使用すると、「国立公園を横切る高速道路はどれか?」のような質問に対する回答を得ることができます。

次の表構造で、この例の結合の実行方法を示します。

PARKS(    GID VARCHAR2(32), SHAPE SDO_GEOMETRY)
HIGHWAYS( GID VARCHAR2(32), SHAPE SDO_GEOMETRY)

空間結合を実行するには、SDO_JOIN演算子を使用します(「空間演算子」を参照)。次の空間結合問合せでは、高速道路と公園が交差する場所の高速道路と公園の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 and Graphでの座標系サポートの詳細を説明します(このサポートの概要については、「座標系」を参照してください)。様々な座標系でSDO_GEOMETRYオブジェクトを格納および操作できます。

MDSYS.SDO_CSパッケージに含まれる座標系の変換ファンクションおよびプロシージャについては、「SDO_CSパッケージ(座標系変換)」を参照してください。

この章には次の項が含まれます。

- 用語および概念

- 測地座標のサポート

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

- EPSGモデルとSpatial and Graph

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

- TFM_PLANオブジェクト型

- 座標系のデータ構造

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

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

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

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

- Google Mapsに関する考慮事項

- 座標系変換の例

6.1 用語および概念

この項では、Oracle Spatial and Graphでサポートされる座標系に関連する重要な用語および概念について説明します。

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

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

座標参照系という用語の意味は、Spatial and Graphでの「座標系」と同じであり、この2つの用語は区別なく使用されます。European Petroleum Survey Group(EPSG)の規格とドキュメントでは、通常は、座標参照系という用語が使用されています。(EPSGでは、「座標系」という用語に独自の意味があります。詳細は、「SDO_COORD_SYS表」を参照してください。)

6.1.2 デカルト座標

デカルト座標は、指定した基点からの点の位置を、2次元または3次元空間の相互に直交する軸を関連付けて測定する座標です。

6.1.3 測地座標(地理座標)

測地座標(地理座標)は、角度を持つ座標(経度および緯度)であり、球体の極点の座標と密接に関連し、また、地球上の特定の測地データに関連付けて定義されます(「測地データ」を参照)。測地座標のサポートの詳細は、「測地座標のサポート」を参照してください。

6.1.4 投影座標

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

6.1.5 ローカル座標

ローカル座標は、非地球(非地理参照)座標系のデカルト座標です。Spatial and Graphでのローカル座標のサポートについては、「ローカル座標のサポート」を参照してください。

6.1.6 測地データ

測地データ(データ)は、楕円体をシフトおよび回転し、通常は地表を部分的または全体的に近似する扁平回転楕円体として、地球の形を表現する手段で、測地座標系の基準になります。

それぞれの測地座標系は、データに基づきます。

6.1.7 変換

変換は、ある座標系から別の座標系へ座標を変換します。

座標系が地理参照座標系である場合、変換はデータ変換を伴う場合があります。データ変換は、ある測地データから別の測地データへ測地座標を変換します。通常、参照する楕円体の形、方向および中心が変化します。

6.2 測地座標のサポート

Oracle9i以上のSpatial and Graphでは、測地座標の合理的かつ完全な処理が提供されます。Oracle9iより前の空間計算は、ジオメトリのレイヤーに対して指定された座標系に関係なく、平面(デカルト)座標のみに基づいていました。したがって、測地座標系のデータの計算では、常に座標が平面上にある場合と同様に処理され、表面の曲率が考慮されないため、計算が不正確でした。

リリース2(9.2)以上では、指定された測地座標系での地球の曲率を考慮して楕円体の表面が計算されるため、正確な結果が得られます。そのため、空間問合せは常に正しい回答を戻します。

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

2次元のジオメトリは面ジオメトリですが、面を正確に定義しておくことが必要です。平らな面(平面)は、デカルト座標によって正確に表現されます。ただし、デカルト座標は、ソリッドの表面の表現には適していません。一般的に使用される空間ジオメトリの表面は地表面ですが、地表面でのジオメトリの法則は平面での法則とは異なります。たとえば、地表面に平行線はなく、線は測地線であり、すべての測地線は交差します。そのため、デカルト・ジオメトリでは閉曲面の問題を正確に処理できません。

Spatial and Graphでは、データを平面上に投影せずに、座標系または関連する地域のサイズに関係なく正確な結果を提供します。問合せが地表面上のどの部分を対象にしているかに関係なく、極などの特殊な地域でも、正確な結果が得られます。そのため、選択した任意のデータおよび投影に座標を格納し、座標系に関係なく正確な問合せを実行できます。

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(最小境界矩形)を使用します(「SDO_ELEM_INFO」の表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-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 and Graphで問合せ用の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ファンクション(「SDO_GEOMパッケージ(ジオメトリ)」を参照)を使用してジオメトリを稠密化してから、結果のジオメトリに対して空間操作を実行することができます。

測地データを使用する場合、次のサイズ制限が適用されます。

- ポリゴン要素は、地表面の半分以上の面積を持つことはできません。また、2つのポリゴンの和集合の結果が地表面の半分より大きい場合、操作によって正しい結果が生成されません。たとえば、AとBの和集合の結果が地表の領域の半分より大きいポリゴンの場合、AとBの差集合演算、AとBの積集合演算およびAとBのXOR演算はサポートされず、これら2つのポリゴン間でANYINTERACTマスクを指定したRELATE演算のみがサポートされます。

- 1つの線上の隣接する座標間の距離を、地球の外周(大円)の長さの半分以上にすることはできません。

これらの制限より大きい要素を使用する必要がある場合は、まず、これらの要素をより小さい複数の要素に分割してから使用します。たとえば、地球のすべての海洋面を表現するジオメトリは作成できませんが、それぞれが海洋面全体の一部を表現する複数のジオメトリ要素を作成することはできます。長さが地球外周の半分以上の線ストリングを処理する場合は、その線上に1つ以上の中間点を追加して、隣接する座標が地球の外周の半分未満になるようにします。

測地レイヤーでは、許容差がm単位で指定されます。通常、非測地データに使用される許容差を使用する場合、測地データでは、これらの値がm単位で解釈されます。たとえば、測地データに0.05の許容差を指定した場合、この値は5cmまでの精度で解釈されます。この値の精度がアプリケーションで必要とされる精度より高い場合、指定した精度の実装に必要な内部計算操作のために、パフォーマンスに影響を与える場合があります。(許容差の詳細は、「許容差」を参照してください。)

測地レイヤーでは、索引メタデータの次元のエクステントを、経度に対しては-180,180、緯度に対しては-90,90に指定する必要があります。次の文(「座標系変換の例」の例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.3 ローカル座標のサポート

Spatial and Graphでは、ローカル座標系に対してあるレベルのサポートが提供されます。ローカル座標系は、多くの場合、CADシステムで使用されます。また、調査対象地とそれ以外の地域の関係が重要でない現地測量にも使用できます。

Spatial and Graphでは、いくつかのローカル座標系が事前定義され、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)に含まれています。これらのローカル座標系は、名前が「Non-Earth」で始まり、様々な測定単位(m、mm、インチなど)に基づいて非地球デカルト座標系を定義します。

今回のリリースでは、ローカルと地表基準の座標系間での座標系変換は実行できません。ジオメトリまたはジオメトリのレイヤーをローカル座標系の間で変換する場合は、ローカル座標系の座標を1つの測定単位から別の測定単位にのみ変換できます(たとえば、インチからmmへの変換など)。ただし、SDO_RELATE、SDO_WITHIN_DISTANCEなどを使用した他のすべてのSpatial操作は、ローカル座標系で実行できます。

6.4 EPSGモデルとSpatial and Graph

Oracle Spatial and Graph座標系のサポートは、European Petroleum Survey Group (EPSG)のデータ・モデルおよびデータセットに基づいています(ただし、常に同じとはかぎりません)。詳細は、http://www.epsg.orgを参照してください。詳細に説明されています。また、EPSG測地パラメータ・データセットのダウンロードには、「README」が含まれており、エンティティ関連(E-R)ダイアグラムが示されています。Oracle Spatial and Graphによる方法では、標準化、サポートの拡張、柔軟性などの面で、次のようなメリットがあります。

- EPSGモデルは、包括的で広く受け入れられているデータ表現用の標準であるため、このモデルを扱い慣れているユーザーは、Spatial and Graphの記憶域と操作を容易に理解できます。

- サポートされる座標系と、それに関連するデータ、楕円体および投影図が増加しています。たとえば、EPSGの一部の測地座標系および投影座標系については、それに対応する座標系が以前のリリースのSpatial and Graphではサポートされていませんでした。このような座標系が追加されたことで、サポートされる座標系が拡大しました。

- データ変換が柔軟になりました。あるソースとターゲット座標系間で使用可能な変換パスはOracle定義の1種類のみではなく、代替パスを、特定の領域に対して適用するように指定したり(ユースケース)、システム全体のデフォルトとして指定できます。
この項の後半では、この柔軟性について説明します。

データ変換(ある座標系のデータを別の座標系に変換)に適用する変換ルールを指定できるようになりました。以前のリリースおよび今回のリリースのデフォルトでは、指定されたソースとターゲットの座標系のみに基づいて、事前定義済の中間変換手順を使用して変換が行われます。このデフォルトの処理は、正しい変換連鎖(優先する変換連鎖)が1つしか存在しないことを前提としています。

デフォルトでは、ソース座標系とターゲット座標系間でサポートされている変換ごとに、特定の変換メソッドが適用されます。たとえば、ある座標系からWGS 84 (経度/緯度)座標系への変換メソッドは500種類以上サポートされています(WGS 84のEPSG SRID値は4326)。たとえば、SRID 4605からSRID 4326に変換する場合は、COORD_OP_ID値が1445の変換メソッドを使用できます(この値は、座標系間の変換操作ごとに1つの行が含まれるSDO_COORD_OPS表(「SDO_COORD_OPS表」を参照)に示されます)。

ただし、任意のソース/ターゲットSRIDの組合せに対して別のメソッドを指定(Oracleから提供されているメソッドの中から選択)すると、デフォルトの変換を無視できます。ある変換をシステム全体のデフォルトとして新しく指定することもできます。また、名前付きのユースケースに変換を関連付け、空間ジオメトリのレイヤーを変換する際にそのユースケースを指定することもできます。(ユースケースは、単に、使用例や適用範囲に対して付けられる「Project XYZ」、「Mike's Favorite Transformations」などの名前です。ユースケースはデータベース・ユーザーやスキーマとは関係しません。)

ある変換を、システム全体のデフォルトに指定する場合、またはユースケースに関連付ける場合は、SDO_CS.ADD_PREFERENCE_FOR_OPプロシージャを使用します。以前に指定したプリファレンスを削除する場合は、SDO_CS.REVOKE_PREFERENCE_FOR_OPプロシージャを使用します。

Spatial and Graphで座標系を変換する場合、使用する変換は、一般に次の手順によって決定されます。

1. ユースケースが指定されている場合は、そのユースケースに関連付けられている変換が適用されます。

2. ユースケースが指定されていない場合、指定されたソース/ターゲット座標系のペアに対して作成されたユーザー定義によるシステム全体の変換が存在すると、その変換が適用されます。

3. ユースケースが指定されておらず、指定されたソース/ターゲット座標系のペアに対するユーザー定義の変換も存在しない場合の動作は、SDO_CS.CREATE_OBVIOUS_EPSG_RULESプロシージャなどによってEPSGルールが作成済かどうかによって異なります。

- EPSGルールが作成済で、この変換に対してEPSGルールが定義されている場合は、そのEPSG変換が適用されます。

- EPSGルールが作成されていないか、または作成されていてもこの変換に対してEPSGルールが定義されていない場合は、Oracle Spatial and Graphのデフォルトの変換が適用されます。

Spatial and Graphで使用されるEPSGデータセットのバージョン番号を返すには、SDO_CS.GET_EPSG_DATA_VERSIONファンクションを使用します。

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

3次元の座標参照系に対するOracle Spatial and GraphのサポートはEPSGモデル(「EPSGモデルとSpatial and Graph」を参照)に準拠しており、次の種類の座標参照系を使用できます。

- 地理2D

- 投影2D

- 地理3D(地理2Dおよび楕円体高で構成され、経度、緯度および高さは同じ楕円体とデータに基づく)

- 複合(地理2Dおよび重力に関係する高さで構成されるか、または投影2Dおよび重力に関係する高さで構成される)

したがって3次元の座標参照系は、楕円体高に基づく座標参照系(地理3D (「地理3D座標参照系」を参照))と、重力に関係する高さに基づく座標参照系(複合(「複合座標参照系」を参照))の2つに分類されます。

3次元での計算結果は2次元での計算結果より正確で、とりわけ変換連鎖の場合の精度は2次元より3次元の方が高くなります。たとえば、ソースおよびターゲットのCRSやジオメトリには関係なく、内部的なデータ変換は常に3つの次元で行われます。2次元ジオメトリが含まれる場合は、次の項目が1つ以上発生する可能性があります。

1. 入力または出力ジオメトリおよびCRSが2次元の場合、内部的に行われる3次元の計算では、(指定されない)高さの入力値はデフォルトでゼロ(楕円体の上、CRSに依存)になります。このことは、高さが厳密にゼロであると意図されている場合を除き、変換が不正確になる潜在的な原因となっています。(高さの値はもともと使用できないか重要ではないため、データは2次元となる可能性があります。これは、高さが正確にゼロであるとわかっているために、データが2つの次元で表現されることとは異なります。)

2. 高さの変換結果が内部的にはゼロ以外になる場合があります。ターゲットCRSが2次元の場合、高さの値を扱うことができないため、高さの値は切り捨てられ、さらに不正確な結果になります。

3. さらに変換が続く場合は、高さの値が繰り返し切り捨てられることにより、結果はさらに不正確になります。不正確な高さの値を入力すると、高さの変換結果だけではなく経度および緯度の変換結果にも影響を与える可能性があることに注意してください。

ただし、ソースおよびターゲットCRSが3次元の場合は、高さの切り捨てが繰り返されることはありません。したがって、とりわけ変換連鎖の場合に、精度が高くなります。

Spatial and Graphでの3次元ジオメトリのサポートの概要は、「3次元の空間オブジェクト」を参照してください。

6.5.1 地理3D座標参照系

地理3D座標参照系は、経度および緯度の他に楕円体高に基づきます。楕円体高とは、(実際の地球を近似的に表現した)参照する楕円体に関連する高さのことです。CRSの3つの次元はすべて同じ楕円体に基づいています。

楕円体高を使用することにより、数学的な規則性および効率性に優れた内部操作をSpatial and Graphで行うことが可能です。一方、複合座標参照系では、オフセット・マトリックスに基づいて、さらに複雑な変換が要求されることがよくあります。そのような一部のマトリックスは、ダウンロードして構成する必要があります。さらに、これらのマトリックスでは、ディスク上およびメイン・メモリー内で大きなフットプリントを使用する可能性もあります。

サポートされる地理3D座標参照系は、SDO_CRS_GEOGRAPHIC3Dビュー(「SDO_CRS_GEOGRAPHIC3Dビュー」を参照)に表示されます。

6.5.2 複合座標参照系

複合3次元座標参照系は、地理2Dまたは投影2Dに加えて重力に関係する高さに基づきます。 重力に関係する高さは、地球の重力の影響を受ける高さのことです。この場合、通常、基準となる高さ(ゼロ)は等ポテンシャル面であり、海面より上または下として定義されます。

重力には次に示すような不規則性があるため、重力に関係する高さの表現は楕円体高より複雑です。

- 正標高
正標高は、ジオイド上の高さとも呼ばれます。ジオイドは等ポテンシャル面で、正確ではありませんが、平均海水面とほぼ一致します。等ポテンシャル面は、各点が同じ重力ポテンシャル・レベルにある面です。地球は場所によって密度が異なるので、このような面には、多少のうねりが存在します。地球の密度の不規則性により、複数の等ポテンシャル面が存在し、相互に平行ではないことがあります。

- 平均海水面、特定の場所における海抜、または複数の検潮所を適合させるためにゆがめられた垂直ネットワークに対する相対的な高さ(NGVD 29など)
平均海水面はジオイドに近いですが、ジオイドと同一ではありません。ある特定地域の平均海水面の多くは、特定の港の平均海水面を基に定義されます。

サポートされる複合座標参照系は、SDO_CRS_COMPOUNDビュー(「SDO_CRS_COMPOUNDビュー」を参照)に表示されます。

水平CRSと垂直CRSを組み合せて、カスタマイズした複合座標参照系を作成できます。(水平CRSにはXおよびYまたは経度および緯度などの2つの次元が含まれ、垂直CRSにはZ、高さ、標高といった3番目の次元が含まれます。)複合CRSの作成方法は、「複合CRSの作成」を参照してください。

6.5.3 3次元の変換

Spatial and Graphでは、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 ジオイド高と楕円体高の間の変換

例6-3では、ジオイド高と楕円体高の間の変換を、オフセット格子Hawaiiを使用して構成します。SDO_CS.CREATE_PREF_CONCATENATED_OPプロシージャを使用して先にルールを作成しないと、格子は使用できないことに注意してください。

-- 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次元のWGS 84 (4327)は、2次元のWGS 84 (4326)に相当します。必要に応じて、戻されたジオメトリに含まれる頂点の高さの値を変更します。

SDO_CS.MAKE_3Dファンクションの使用方法には多数の選択肢がありますが、次の方法が最も簡単です。

1. 2次元のソースSRIDを、2次元のWGS 84 (4326)に変換します。

2. SDO_CS.MAKE_3Dをコールしてジオメトリを3次元のWGS 84 (4327)に変換します。

3. 3次元のWGS 84 (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 and Graphで事前定義されるGEOGRAPHIC3dという座標系の種類を使用する必要があります)。

- 非楕円体高基準(通常、カスタムSRIDを定義する必要があるCOMPOUNDという座標系の種類を使用する必要があります)。非楕円体高は、ジオイド、一部の局所的な海面や平均海水面(または局所的な海面網)、または高さの他の定義(地表面より上など)と関連させて指定できます。

2次元のWGS 84座標系に基づいて複合座標系(「複合座標参照系」を参照)を定義するには、最初に事前定義またはカスタムの垂直座標参照系(「垂直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楕円体とジオイドの間では、高さの変換を可能にするオフセット・マトリックスがあります。詳細は、次を参照してください。

- 「3次元の変換」の例6-3

- 変換操作の作成

- 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 and Graphでは、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 and Graphで提供される表とビューの情報を使用します。この表とビューはMDSYSスキーマの一部ですが、パブリック・シノニムが定義されているため、表およびビューの名前の前にMDSYS.を指定する必要はありません。この表とビューの定義およびデータは、EPSGのデータ・モデルとデータセットに基づいています(「EPSGモデルとSpatial and Graph」を参照)。

座標系の表は、いくつかの一般的なカテゴリに分類されます。

- 座標系の一般的な情報: 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の説明の翻案または転載です。)「座標系の表とビューとの関係」では表とビューの関係を説明し、EPSGの表名とそれらの表に対応するOracle Spatial and Graphの名前を示します。「EPSGベースの座標系に関する情報の検索」では、EPSGベースの座標系に関する情報の検索方法を説明し、いくつかの例を紹介します。

Spatial and Graphでは、この項の表とビューの他に、レガシー表もいくつか提供しています(その表の定義とデータは、以前のリリースで使用されていた特定のSpatial and Graphシステム表と対応しています)。レガシー表の説明は、「レガシー表およびビュー」を参照してください。

注意:

座標系のサポートに使用されるすべての表およびビューでは、Oracleが提供するどのような情報も変更または削除しないでください。

ユーザー定義の座標系を作成する場合は、「ユーザー定義の座標参照系の作成」を参照してください。

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表(「SDO_COORD_AXIS_NAMES表」を参照)の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表(「SDO_UNITS_OF_MEASURE表」を参照)の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表(「SDO_COORD_OP_METHODS表」を参照)のCOORD_OP_METHOD_ID列の値と一致します。

PARAMETER_ID

NUMBER(10)

変換操作のパラメータのID番号です。SDO_COORD_OP_PARAMS表(「SDO_COORD_OP_PARAMS表」を参照)の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表(「SDO_COORD_OPS表」を参照)のCOORD_OP_ID列の値と一致します。

COORD_OP_METHOD_ID

NUMBER(10)

座標操作メソッドのIDです。この値は、SDO_COORD_OP_METHODS表(「SDO_COORD_OP_METHODS表」を参照)のCOORD_OP_METHOD_ID値と一致する必要があります。

PARAMETER_ID

NUMBER(10)

変換操作のパラメータのID番号です。SDO_COORD_OP_PARAMS表(「SDO_COORD_OP_PARAMS表」を参照)の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表(「SDO_UNITS_OF_MEASURE表」を参照)の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表(「SDO_COORD_OPS表」を参照)のCOORD_OP_ID値と一致する必要があります。

SINGLE_OPERATION_ID

NUMBER(10)

連結操作内のこの手順(最小単位の操作)に対応する1つの座標操作のID番号です。この値は、SDO_COORD_OPS表(「SDO_COORD_OPS表」を参照)のCOORD_OP_ID値と一致する必要があります。

SINGLE_OP_SOURCE_ID

NUMBER(10)

この手順の1つの座標操作に対するソースの座標参照系のID番号です。この値は、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のSRID値と一致する必要があります。

SINGLE_OP_TARGET_ID

NUMBER(10)

この手順の1つの座標操作に対するターゲットの座標参照系のID番号です。この値は、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)の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表(「SDO_COORD_OP_METHODS表」を参照)のCOORD_OP_METHOD_ID値と一致する必要があります。1つのメソッドを複数の操作で使用できます。例: 9617

UOM_ID_SOURCE_OFFSETS

NUMBER(10)

ソース座標系のオフセットの測定単位のID番号です。SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)のUOM_ID列の値と一致します。

UOM_ID_TARGET_OFFSETS

NUMBER(10)

ターゲット座標系のオフセットの測定単位のID番号です。SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)の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ビューの説明は、「SDO_COORD_REF_SYSTEMビュー」を参照してください。

表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表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。投影座標系の場合はNULLです。測地座標系の場合は、SDO_DATUMS表(「SDO_DATUMS表」を参照)のDATUM_ID値と一致する必要があります。例: 10115

GEOG_CRS_DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。投影座標系の場合は、その投影座標系の基になっている測地座標系のDATUM_ID値(「SDO_DATUMS表」の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 and Graphでは使用しません。EPSGの説明は、「複合CRSの水平要素のコード(複合CRSの場合のみ)」です。)

CMPD_VERT_SRID

NUMBER(10)

(EPSGによって割り当てられた値で、Oracle Spatial and Graphでは使用しません。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 (SDO_CRS_COMPOUNDビュー)

- SDO_CRS_ENGINEERING (SDO_CRS_ENGINEERINGビュー)

- SDO_CRS_GEOCENTRIC (SDO_CRS_GEOCENTRICビュー)

- SDO_CRS_GEOGRAPHIC2D (SDO_CRS_GEOGRAPHIC2Dビュー)

- SDO_CRS_GEOGRAPHIC3D (SDO_CRS_GEOGRAPHIC3Dビュー)

- SDO_CRS_PROJECTED (SDO_CRS_PROJECTEDビュー)

- SDO_CRS_VERTICAL (SDO_CRS_VERTICALビュー)

6.7.10 SDO_COORD_REF_SYSTEMビュー

SDO_COORD_REF_SYSTEMビューには、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)と同じ列が含まれています。ただし、SDO_COORD_REF_SYSTEMビューには、トリガーが定義されており、このビューに対して挿入、更新または削除操作が実行されると、関連するすべてのSpatial and Graphシステム表に対して、適切な操作が実行されます。

したがって、挿入、更新または削除操作を実行する場合は、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表(「SDO_COORD_REF_SYS表」を参照)の情報です。(複合座標参照系については、「複合座標参照系」を参照してください。)このビューに含まれる列を、表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 and Graphでは使用しません。EPSGの説明は、「複合CRSの水平要素のコード(複合CRSの場合のみ)」です。)

CMPD_VERT_SRID

NUMBER(10)

(EPSGによって割り当てられた値で、Oracle Spatial and Graphでは使用しません。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表(「SDO_COORD_REF_SYS表」を参照)の情報です。このビューに含まれる列を、表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表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(「SDO_DATUMS表」を参照)の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表(「SDO_COORD_REF_SYS表」を参照)の情報です。このビューに含まれる列を、表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表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(「SDO_DATUMS表」を参照)の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表(「SDO_COORD_REF_SYS表」を参照)の情報です。このビューに含まれる列を、表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表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(「SDO_DATUMS表」を参照)の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表(「SDO_COORD_REF_SYS表」を参照)の情報です。(地理3D座標参照系については、「地理3D座標参照系」を参照してください。)このビューに含まれる列を、表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表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(「SDO_DATUMS表」を参照)の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表(「SDO_COORD_REF_SYS表」を参照)の情報です。このビューに含まれる列を、表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表(「SDO_COORD_SYS表」を参照)の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表(「SDO_COORD_REF_SYS表」を参照)の情報です。このビューに含まれる列を、表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表(「SDO_COORD_SYS表」を参照)のCOORD_SYS_ID値と一致する必要があります。

DATUM_ID

NUMBER(10)

座標参照系で使用されるデータのID番号です。この値は、SDO_DATUMS表(「SDO_DATUMS表」を参照)の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表(「SDO_DATUMS表」を参照)の情報です。このビューに含まれる列を、表6-18に示します。

表6-18 SDO_DATUM_ENGINEERINGビュー

列名

データ型

説明

DATUM_ID

NUMBER(10)

データのID番号です。

DATUM_NAME

VARCHAR2(80)

データ名です。

ELLIPSOID_ID

NUMBER(10)

データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(「SDO_ELLIPSOIDS表」を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(「SDO_PRIME_MERIDIANS表」を参照)の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表(「SDO_DATUMS表」を参照)の情報です。このビューに含まれる列を、表6-19に示します。

表6-19 SDO_DATUM_GEODETICビュー

列名

データ型

説明

DATUM_ID

NUMBER(10)

データのID番号です。

DATUM_NAME

VARCHAR2(80)

データ名です。

ELLIPSOID_ID

NUMBER(10)

データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(「SDO_ELLIPSOIDS表」を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(「SDO_PRIME_MERIDIANS表」を参照)の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表(「SDO_DATUMS表」を参照)の情報です。このビューに含まれる列を、表6-20に示します。

表6-20 SDO_DATUM_VERTICALビュー

列名

データ型

説明

DATUM_ID

NUMBER(10)

データのID番号です。

DATUM_NAME

VARCHAR2(80)

データ名です。

ELLIPSOID_ID

NUMBER(10)

データ定義で使用される楕円体のID番号です。この値は、SDO_ELLIPSOIDS表(「SDO_ELLIPSOIDS表」を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(「SDO_PRIME_MERIDIANS表」を参照)の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表(「SDO_ELLIPSOIDS表」を参照)のELLIPSOID_ID値と一致する必要があります。例: 8045

PRIME_MERIDIAN_ID

NUMBER(10)

データ定義で使用される本初子午線のID番号です。この値は、SDO_PRIME_MERIDIANS表(「SDO_PRIME_MERIDIANS表」を参照)の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 (「SDO_DATUM_ENGINEERINGビュー」)、SDO_DATUM_GEODETIC (「SDO_DATUM_GEODETICビュー」)およびSDO_DATUM_VERTICAL (「SDO_DATUM_VERTICALビュー」)も参照してください。

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表(「SDO_UNITS_OF_MEASURE表」を参照)のUOM_ID列の値と一致します。例: 9001

INV_FLATTENING

NUMBER

楕円体の逆フラット化です。この場合(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表(「SDO_COORD_OPS表」を参照)の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表(「SDO_COORD_OPS表」を参照)の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表(「SDO_UNITS_OF_MEASURE表」を参照)の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の数値のうち単位が等しい方の数値です。ユーザー定義の単位の詳細は、「ユーザー定義の測定単位の作成」を参照してください。

FACTOR_C

NUMBER

EPSG測定単位表のFACTOR_C列と対応しています。

ユーザー定義の測定単位でのFACTOR_Cについては、「ユーザー定義の測定単位の作成」を参照してください。

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 and Graphのシステム表およびビューの定義は、EPSGデータ・モデルおよびデータセットに基づいているため、EPSGのエンティティ関連(E-R)ダイアグラムを参照すると、Spatial and Graphの座標系データ構造間の関係の概要がよくわかります。EPSG E-Rダイアグラムは、ドキュメントhttp://www.ihsenergy.com/epsg/geod_arch.htmlに記載されています。

ただし、Oracle Spatial and Graphでは次のEPSG E-Rダイアグラムは使用されていません。

- Area of Use(ダイアグラムの中央上部にある黄色いボックス)

- Deprecation、Aliasなど(ダイアグラムの右下部分にピンク色のボックスで表されている部分)

この他、Spatial and Graphでは、一部の表名がSpatial and Graph独自の命名規則に準拠するように変更され、表6-27に示す一部の表は使用されません。

表6-27 EPSGの表名とOracle Spatial and Graphの名前

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 and Graphの座標系データ構造で問い合せる方法を説明します。

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 and Graphによって自動生成されます。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 投影座標系

「測地座標系」で説明したとおり、WKTは人間が判読可能なCRSのサマリーですが、実際のEPSGデータはSpatial and Graphの座標系データ構造に格納されています。次の例に、投影座標系の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 and Graphでは、座標系ファンクションおよびプロシージャは、次の表の情報を使用していましたが、その一部は名前が新しくなったり、現在、表ではなくビューになっています。

- MDSYS.CS_SRS (「MDSYS.CS_SRS表」を参照)は、有効な座標系を定義していました。この表では、各座標系と、それに関する説明を対応付けています。この表は、Open Geospatial Consortium (http://www.opengeospatial.org)から公開されている標準に準拠しています。

- MDSYS.SDO_ANGLE_UNITS (「MDSYS.SDO_ANGLE_UNITSビュー」を参照)は、有効な角度単位を定義します。

- MDSYS.SDO_AREA_UNITS (「MDSYS.SDO_AREA_UNITSビュー」を参照)は、有効な面積単位を定義します。

- MDSYS.SDO_DIST_UNITS(「MDSYS.SDO_DIST_UNITSビュー」を参照)は、有効な距離単位を定義します。

- MDSYS.SDO_DATUMS_OLD_FORMATおよびMDSYS.SDO_DATUMS_OLD_SNAPSHOT(「MDSYS.SDO_DATUMS_OLD_FORMAT表およびSDO_DATUMS_OLD_SNAPSHOT表」を参照)は、リリース10.2より前のMDSYS.SDO_DATUMS表(有効なデータを定義)に基づいています。

- MDSYS.SDO_ELLIPSOIDS_OLD_FORMATおよびMDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT(「MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表およびSDO_ELLIPSOIDS_OLD_SNAPSHOT表」を参照)は、リリース10.2より前のMDSYS.SDO_ELLIPSOIDS表(有効な楕円体を定義)に基づいています。

- MDSYS.SDO_PROJECTIONS_OLD_FORMATおよびMDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT(「MDSYS.SDO_PROJECTIONS_OLD_FORMAT表およびSDO_PROJECTIONS_OLD_SNAPSHOT表」を参照)は、リリース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 and Graphが使用するために予約されているため、ユーザー定義の座標系には、1000000以上のSRID値を使用できます。

AUTH_SRID

NUMBER(38)

オプションのID番号です。エントリの抽出方法を指定します。たとえば、別の座標系への外部キーとなる場合があります。

AUTH_NAME

VARCHAR2(256)

座標系の認可レベル名です。指定された表にはOracleが含まれます。ユーザーが追加するすべての行には、どのような値でも指定できます。

WKTEXT

VARCHAR2(2046)

SRSのwell-knownテキスト(WKT)の説明で、Open Geospatial Consortiumによって定義されています。詳細は、「well-knownテキスト(WKT)」を参照してください。

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 EBNF構文を次に示します。

<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のデータ回転パラメータに使用されている表記法が米国式ではなくヨーロッパ式の場合、または変換結果が正しくないと思われる場合は、「米国式およびヨーロッパ式のデータ・パラメータ表記法」を参照してください。

各<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 and Graphでは、すべての測地データおよび投影図をサポートします。

ローカル座標系のWKTの例を次に示します。

LOCAL_CS [ "Non-Earth (Meter)", LOCAL_DATUM ["Local Datum", 0], UNIT ["Meter", 1.0], AXIS ["X", EAST], AXIS["Y", NORTH]]

ローカル座標系の詳細は、「ローカル座標のサポート」を参照してください。

SDO_CS.VALIDATE_WKTファンクション(「SDO_CSパッケージ(座標系変換)」を参照)を使用すると、MDSYS.CS_SRS表に定義されているすべての座標系のWKTを検証できます。

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

データ関連のWKTパラメータは、Bursa Wolf変換パラメータを最大7個含むリストです。回転パラメータではアーク秒が指定され、シフト・パラメータではmが指定されます。

米国式およびヨーロッパ式の異なる2つの表記法は、3つの汎用回転パラメータで使用されており、またそれぞれ正反対の符号を使用しています。Spatial and Graphでは、米国式の表記法を採用し想定しています。したがって、WKTでヨーロッパ式表記法が使用されている場合は、回転パラメータの符号を逆にして、米国式表記法に変換する必要があります。

パラメータ・セットで使用されている表記法が米国式かヨーロッパ式か不明な場合は、次のテストを実行します。

1. 正しい変換結果がわかっている単一の点を選択します。

2. 現行のWKTを使用して変換を実行します。

3. 想定した正しい結果と計算結果が一致しない場合は、回転パラメータの符号を逆にして変換を実行し、想定した正しい結果と計算結果が一致するかを確認します。

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

SDO_COORD_REF_SYSTEMビュー(「SDO_COORD_REF_SYSTEMビュー」を参照)に対して行を挿入または削除すると、MDSYS.CS_SRS表のWKTEXT列が自動的に更新されます。(WKTEXT列の書式については、「well-knownテキスト(WKT)」を参照してください。)ただし、SDO_COORD_REF_SYSTEMビュー内の既存行を更新した場合は、well-knownテキスト(WKT)値は自動的に更新されません。

さらに、座標参照系に関連する情報は、SDO_DATUMS (「SDO_DATUMS表」を参照)、SDO_ELLIPSOIDS (「SDO_ELLIPSOIDS表」を参照)、SDO_PRIME_MERIDIANS (「SDO_PRIME_MERIDIANS表」を参照)などのシステム表にも格納されています。これらの表の情報を追加、削除または変更した場合も、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値を識別するメッセージが、これらのプロシージャによって表示されます。これらのプロシージャの説明は、「SDO_CSパッケージ(座標系変換)」を参照してください。

6.8.2 MDSYS.SDO_ANGLE_UNITSビュー

MDSYS.SDO_ANGLE_UNITS参照ビューには、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効な角度のUNIT指定ごとに1つの行が含まれます。WKTの説明は、「well-knownテキスト(WKT)」を参照してください。

MDSYS.SDO_ANGLE_UNITSビューは、SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)に基づいており、これには表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の説明は、「well-knownテキスト(WKT)」を参照してください。

MDSYS.SDO_AREA_UNITSビューは、SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)に基づいており、これには表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の説明は、「well-knownテキスト(WKT)」を参照してください。)

- MDSYS.SDO_DATUMS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースのデータ指定が表に格納されています)。

- MDSYS.SDO_DATUMS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前のデータ指定と表形式)。

これらの表に含まれる列を、次の表に示します。

表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値の調整に使用する値です。

これらの表内のデータの名前を表示するには、適切なSELECT文を入力します。次に例を示します。

SELECT name FROM MDSYS.SDO_DATUMS_OLD_FORMAT ORDER BY name;

6.8.5 MDSYS.SDO_DIST_UNITSビュー

MDSYS.SDO_DIST_UNITS参照ビューには、座標系定義のwell-knownテキスト(WKT)の説明に含まれる有効な距離のUNIT指定ごとに1つの行が含まれます。WKTの説明は、「well-knownテキスト(WKT)」を参照してください。

MDSYS.SDO_DIST_UNITSビューは、SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)に基づいており、これには表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の説明は、「well-knownテキスト(WKT)」を参照してください。)

- MDSYS.SDO_ELLIPSOIDS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースの楕円体指定が表に格納されています)。

- MDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前の楕円体指定と表形式)。

これらの表に含まれる列を、次の表に示します。

表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)、 f = (a-b)/a、aは半長径、bは半短径です。

これらの表内の楕円体の名前を表示するには、適切なSELECT文を入力します。次に例を示します。

SELECT name FROM MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT ORDER BY name;

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の説明は、「well-knownテキスト(WKT)」を参照してください。)

- MDSYS.SDO_PROJECTIONS_OLD_FORMATには、新しいデータが旧形式で格納されています(リリース2(10.2)より前の形式でEPSGベースの投影法指定が表に格納されています)。

- MDSYS.SDO_PROJECTIONS_OLD_SNAPSHOTには、旧データが旧形式で格納されています(リリース2(10.2)より前の投影法指定と表形式)。

これらの表に含まれる列を、次の表に示します。

表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などです。

これらの表内の投影の名前を表示するには、適切なSELECT文を入力します。次に例を示します。

SELECT name FROM MDSYS.SDO_PROJECTIONS_OLD_FORMAT ORDER BY name;

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

Oracleから提供されている座標系でニーズを十分に満たすことができない場合は、ユーザー定義の座標参照系を作成できます。

注意:

「座標系(空間参照システム)」で述べたように、coordinate systemという用語とcoordinate reference system(CRS)という用語は、通常、区別なく使用されます。ただし、「座標参照系」は、地球をベースにしている必要があります。

ユーザー定義のCRSを作成する手順は、厳密には、それが測地座標参照系であるか、投影座標参照系であるかによって異なります。どちらの場合も、座標系に関する情報(座標軸、軸の名前、測定単位など)を指定する必要があります。測地CRSの場合は、データに関する情報(楕円体、本初子午線など)を指定します(「測地CRSの作成」を参照)。投影CRSの場合は、ソース(測地)CRSと投影法に関する情報(操作およびパラメータ)を指定します(「投影CRSの作成」を参照)。

ユーザー定義の座標系の場合、SRID値は1000000以上にする必要があります。

6.9.1 測地CRSの作成

測定単位、座標軸、SDO_COORD_SYS表の行、楕円体、本初子午線、データなどの必要情報が定義済の場合は、SDO_COORD_REF_SYSTEMビュー(「SDO_COORD_REF_SYSTEMビュー」を参照)に行を挿入して、新しい測地CRSを定義します。

例6-5では、My Own NAD27という名前の架空の測地CRSの定義を挿入しています(これは、SRIDと名前以外は、Oracle提供のNAD27 CRSと同じです)。

定義に必要な情報が不足している場合は、必要に応じて、次の手順に従って情報を定義してからSDO_COORD_REF_SYSTEMビューに行を挿入します。

1. 測定単位がSDO_UNITS_OF_MEASURE表(SDO_UNITS_OF_MEASURE表」を参照)に定義されていない場合は、表に行を挿入して新しい測定単位を定義します。

2. 座標軸がSDO_COORD_AXES表(「SDO_COORD_AXES表」を参照)に定義されていない場合は、新しい座標軸ごとに1行を表に挿入します。

3. 座標系の適切なエントリがSDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)に定義されていない場合は、表に行を挿入します。例6-6では、架空の座標系の定義を挿入しています。

4. 楕円体がSDO_ELLIPSOIDS表(「SDO_ELLIPSOIDS表」を参照)に定義されていない場合は、表に行を挿入して新しい楕円体を定義します。

5. 本初子午線がSDO_PRIME_MERIDIANS表(「SDO_PRIME_MERIDIANS表」を参照)に定義されていない場合は、表に行を挿入して新しい本初子午線を定義します。

6. データがSDO_DATUMS表(「SDO_DATUMS表」を参照)に定義されていない場合は、表に行を挿入して新しいデータを定義します。

例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');

例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');

6.9.2 投影CRSの作成

測定単位、座標軸、SDO_COORD_SYS表の行、ソース座標系、投影操作、投影パラメータなどの必要情報が定義済の場合は、SDO_COORD_REF_SYSTEMビュー(「SDO_COORD_REF_SYSTEMビュー」を参照)に行を挿入して新しい投影CRSを定義します。

例6-7では、My Own NAD27 / Cuba Norteという名前の架空の投影CRSの定義を挿入しています(これは、SRIDと名前以外は、Oracle提供のNAD27 / Cuba Norte CRSと同じです)。

定義に必要な情報が不足している場合は、必要に応じて、次の手順に従って情報を定義してからSDO_COORD_REF_SYSTEMビューに行を挿入します。

1. 測定単位がSDO_UNITS_OF_MEASURE表(SDO_UNITS_OF_MEASURE表」を参照)に定義されていない場合は、表に行を挿入して新しい測定単位を定義します。

2. 座標軸がSDO_COORD_AXES表(「SDO_COORD_AXES表」を参照)に定義されていない場合は、新しい座標軸ごとに1行を表に挿入します。

3. 座標系の適切なエントリがSDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)に定義されていない場合は、表に行を挿入します。(「測地CRSの作成」の例6-6を参照。)

4. 投影操作がSDO_COORD_OPS表(「SDO_COORD_OPS表」を参照)に定義されていない場合は、表に行を挿入して新しい投影操作を定義します。例6-8に、Oracleが提供している座標操作ID 18061の情報を挿入する文を示します。

5. 投影操作のパラメータがSDO_COORD_OP_PARAM_VALS表(「SDO_COORD_OP_PARAM_VALS」表を参照)に定義されていない場合は、新しいパラメータごとに1行を表に挿入します。例6-9に、Oracleが提供している、ID値が8801、8802、8805、8806および8807のパラメータの情報を挿入する文を示します。

例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');

例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);

例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 ユーザー定義の投影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-10に、ユーザー定義の投影座標参照系の作成例に注釈を付けて拡張した例を示します。

6.9.3 垂直CRSの作成

垂直CRSには1つの次元(通常、高さ)のみがあります。そのままでは、垂直CRSの有用性は低いですが、2次元のCRS(測地CRSまたは投影CRS)と結合して複合CRSを作り出すことができます。例6-11に、SRID 5701を使用して垂直CRSを作成する文を示します(SRID 5701はSpatial and Graphに同梱されています)。この定義では、既存の(1次元の)座標系(ID 6499、「SDO_COORD_SYS表」を参照)と垂直データ(ID 5101、「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との間の操作に定義が指定されます。したがって、同じ組合せのジオイド高とWGS 84楕円体高間にいくつかの代替操作を定義することができます。たとえば、ジオイドのオフセット・マトリックスにはGEOID90、GEOID93、GEOID96、GEOID99、GEOID03、GEOID06などがあり、これらの各変形に対して別々の操作を定義できます。このような操作については、「変換操作の作成」を参照してください。

6.9.4 複合CRSの作成

複合CRSは、既存の水平(2次元の) CRSと垂直(1次元の) CRSを組み合せたものです。水平CRSには、測地CRSまたは投影CRSを使用できます。例6-12に、SRID 7405を使用して複合CRSを作成する文を示します(SRID 7405はSpatial and Graphに同梱されています)。この定義では、既存の投影CRSおよび垂直CRS (それぞれ、ID 27700および5701。「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 and Graphに同梱されています)。この定義は、既存の投影座標系(ID 6401、「SDO_COORD_SYS表」を参照)およびデータ(ID 6326、「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 変換操作の作成

「投影CRSの作成」で、投影CRSを作成するために投影操作を作成する方法について説明しました。正標高に基づく複合CRSを使用する場合にも、同様の要件が起こる可能性があります。ジオイド高と楕円体高の間で変換した方がよい場合があるためです。2つの高さの間のオフセットは一定ではなく、不規則です。

Spatial and Graphのデフォルトでは、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 and Graphで使用できるのはASCII形式のみです。既存のEPSG操作には、標準で使用されるファイル名が含まれます。

例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-15は、このような一連のマトリックスをロードするスクリプトです。これは、指定した物理ファイル(ntv20.gsaなど)が、公式なファイル名参照(NTV2_0.GSBなど)に基づいて、データベースCLOBにロードされます。

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

投影座標参照系でBritish Grid Transformation OSTN02/OSGM02 (EPSG method 9633)を使用するには、最初にSDO_COORD_OP_PARAM_VALS表(「SDO_COORD_OP_PARAM_VALS表」を参照)の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マトリックスには様々な形式のヘッダーがすでに含まれているため、追加する必要はありません。

関連情報については、次も参照してください。

- 投影CRSの作成

- 変換操作の作成

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

今回のリリースのOracle Spatial and Graphでは、次の注意事項および制限事項が座標系のサポートに適用されます。

測地データを使用する場合の考慮事項、ガイドラインおよび制限事項については、「測地座標のサポート」を参照してください。

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

入力パラメータとして2つのジオメトリを取る空間演算子(「空間演算子」を参照)では、それらのジオメトリが異なる座標系に基づいている場合、操作が実行される前に、問合せウィンドウ(2つ目のジオメトリ)が1つ目のジオメトリの座標系に変換されます。この変換は、Spatial and Graphが実行する一時内部操作であり、格納されたすべての問合せウィンドウ・ジオメトリには影響を及ぼしません。

入力パラメータとして2つのジオメトリを取るSDO_GEOMパッケージ・ジオメトリ・ファンクション(「SDO_GEOMパッケージ(ジオメトリ)」を参照)では、両方のジオメトリが同じ座標系に基づいている必要があります。

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

今回のリリースでは、LRSファンクションの3D形式(「LRSファンクションの3D形式」を参照)は測地データでサポートされていません。

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 and GraphやEPSGのように数字座標を使用して点の位置を表す方法とは対照的な方法です。U.S. National Gridの説明は、http://www.ngs.noaa.gov/TOOLS/usng.htmlを参照してください。

Spatial and GraphでU.S. National Gridをサポートする場合、SDO_GEOMETRY型は使用できません(この型は、数字座標を基準にしています)。かわりに、U.S. National Grid形式の点は、1つのVARCHAR2型の文字列として表現されます。SDO_CSパッケージ(「SDO_CSパッケージ(座標系変換)」を参照)には、SDO_GEOMETRY形式とU.S. National Grid形式の間で変換を行うために、次のファンクションが用意されています。

- SDO_CS.FROM_USNG

- SDO_CS.TO_USNG

6.12 Google Mapsに関する考慮事項

Google Mapsでは、Oracle Spatial and Graphによって使用される楕円体の計算ではなく、その投影で球体の計算を使用します。この違いによって、Oracle Spatial and Graphの楕円体投影に基づいた地図でGoogle Mapsに基づいた地図をオーバーレイする場合など、アプリケーションで不整合が発生する場合があります。たとえば、Oracle Spatial and Graphでの楕円体SRID 8307から球体SRID 3785への変換では、デフォルトで異なる楕円体の形状が考慮されますが、Google Mapsでは楕円体の形状は考慮されません。

Oracle Spatial and Graphで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 座標系変換の例

この項では、座標系変換ファンクションおよびプロシージャを使用する簡単な例を示します。この例では、この章で説明する概要および「SDO_CSパッケージ(座標系変換)」で説明するファンクションを使用します。

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

例6-17では、主に、「空間データの挿入、索引付けおよび問合せの例」で使用したジオメトリ・データ(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では、「空間データの挿入、索引付けおよび問合せの例」に示すジオメトリを使用します(ただし、円弧は測地座標系でサポートされていないため、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)を作成する

- (単一ジオメトリおよびレイヤー全体の)変換操作を実行する

-- 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つのパラメータ(通常メジャーという)によって、線形フィーチャに属性およびイベントを位置付けできることです。線形フィーチャでは、開始位置および終了位置を明示的に格納しなくても、線形フィーチャに沿ってそれらの位置を指定することによって、線形フィーチャを動的に参照および作成できます。

Spatial and Graphの線形参照システム(LRS)Application Program Interface (API)は、地図製作レベルでのLRS機能をサーバー側に提供します。線形メジャー情報は、Spatial and Graphのジオメトリ構造体に直接統合されます。Spatial and GraphのLRS APIは、動的セグメントをサポートし、すべての座標系の線形参照メソッドおよびモデルに対し、サード・パーティまたは中間層アプリケーション開発の基礎として機能します。

「LRSファンクションの例」にLRSの例を示します。ただし、この例の示す概要を理解するためにも、この章のその他の項をはじめにお読みください。

LRSファンクションおよびLRSプロシージャのリファレンス情報については、「SDO_LRSパッケージ(線形参照システム)」を参照してください。

この章には次の項が含まれます。

- 用語および概念

- LRSデータ・モデル

- LRSデータの索引付け

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

- LRS処理

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

- LRSファンクションの例

7.1 用語および概念

この項では、Spatial and Graphでサポートされる線形参照に関連する重要な用語および概念について説明します。

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

ジオメトリ・セグメントは、Spatial and GraphにおけるLRSの基本的な要素です。ジオメトリ・セグメントは、次のいずれかのジオメトリです。

- 線ストリング: 順序付けされ、分岐のない連続するジオメトリ(単純な道路など)

- 複数線ストリング: 非接続線ストリング(湖やバイパス道路によって途切れた高速道路など)

- ポリゴン(開始および終了が同一の点である競技トラックや観光ツアー・ルートなど)

ジオメトリ・セグメントは、開始点および終了点の開始メジャーおよび終了メジャーを含む必要があります。また、ジオメトリ・セグメント上の対象点のメジャー(高速道路の出口など)も割り当てられます。これらのメジャーは、ユーザーによって割り当てられるか、または既存のジオメトリ・セグメントから導出されます。図7-1に、4つの線セグメントと1つの円弧で構成されるジオメトリ・セグメントの例を示します。ジオメトリ・セグメント上の点は、3つの数値(x, y, m)で表します。xおよびyは位置を示し、mはメジャーを示します(図7-1で下線が付いた値がメジャー値を表します)。

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

7.1.2 形状点

形状点は、LRSセグメント作成時に指定される点で、メジャー情報が割り当てられます。Oracle Spatial and Graphでは、線セグメントは開始点および終了点で表され、円弧は3つの点(開始点、中間点および終了点)で表されます。形状点として3つの点を指定する必要がありますが、この3つの点にメジャー情報を格納する場合は、形状点としてその他の点を指定することもできます(たとえば、高速道路の直線部分の中間にある出口などです)。

形状点は、セグメント方向(たとえば、回転やカーブなど)を示す場合やメジャー情報が格納さる対象点を識別する場合に使用できます。

形状点は、LRSの距離標または参照標とは直接関連しませんが、内部的な参照点として使用されます。形状点のメジャー情報は、SDO_LRS.DEFINE_GEOM_SEGMENTプロシージャ(「SDO_LRSパッケージ(線形参照システム)」を参照)を使用したLRSセグメントの定義時に自動的に移入されます。

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

ジオメトリ・セグメント方向は、ジオメトリ・セグメントの開始点から終了点で示されます。ジオメトリ・セグメント方向は、ジオメトリの定義における頂点の順序(開始点から終了点)によって決定されます。ジオメトリ・セグメント上の点のメジャーは、常にジオメトリ・セグメント方向に増減します。

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

ジオメトリ・セグメント上の点のメジャーは、ジオメトリ・セグメントの開始点(値が増加する場合)または終了点(値が減少する場合)から測定された点までの(メジャー次元の)線形距離です。メジャー情報は、それらの距離と同じ位取りでなくてもかまいません。ただし、メジャーと距離の線形マッピング関係は、常に保たれる必要があります。

LRSファンクションは、メジャーのかわりにオフセットを使用して、線形フィーチャに沿って測定した距離を表す場合もあります。線形参照システムでは、Oracle Spatial and GraphのLRSがメジャーとして参照するものを表すためにオフセットを使用する場合もありますが、Oracle Spatial and Graphでは、オフセットはメジャーとは別の意味を持ちます。詳細は、「オフセット」を参照してください。

7.1.5 オフセット

ジオメトリ・セグメント上の点のオフセットとは、点とジオメトリ・セグメント間の垂直距離です。点がセグメント方向の左側にある場合、オフセット値は正、右側にある場合は負です。また、点がジオメトリ・セグメント上にある場合、オフセットは0 (ゼロ)です。

オフセットの測定単位は、ジオメトリ・セグメントに関連付けられた座標系の測定単位と同じです。測地データの場合、デフォルトの測定単位はmです。

図7-2に、点がメジャーおよびオフセット情報とともにジオメトリ・セグメント上にどのように位置付けられるかを示します。オフセットをメジャーとともに割り当てることによって、ジオメトリ・セグメント上の点のみでなく、ジオメトリ・セグメントに垂直な点を位置付けることも可能です。

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

7.1.6 メジャーの移入

ジオメトリ・セグメントにまだ割り当てられていないメジャーがある場合、距離分布に基づいて自動的に移入されます。これは、不明なメジャー(Oracle Spatial and Graphでは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 and GraphのLRSデータ・モデルは、メジャー情報を点レベルでジオメトリ表現に取り込みます。メジャー情報は、Oracle Spatial and Graphモデルに直接統合されます。そのためには、Oracle Spatial and Graphのメタデータにメジャー次元を追加する必要があります。

Oracle Spatial and GraphのLRSサポートは、空間のメタデータおよびデータ(ジオメトリ)に影響します。例7-1に、メジャー次元が空間のメタデータで2次元ジオメトリにどのように追加されるかを示します。メジャー次元は、空間オブジェクト定義におけるSDO_DIM_ARRAYの最後の要素(例7-1の太字を参照)である必要があります。

図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-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.3 LRSデータの索引付け

LRSデータに4次元(3次元およびM次元)があり、メジャー次元以外の3次元に索引付けする必要がある場合は、空間Rツリー索引を使用してデータを索引付けし、CREATE INDEX文にPARAMETERS('sdo_indx_dims=3')を指定して、確実に最初の3次元が索引付けされるようにする必要があります。ただし、sdo_indx_dims値を3以上に指定する場合、索引付きジオメトリに対して使用できるのは、「3次元の空間オブジェクト」で3つの次元すべてを考慮したものとしてリストされた演算子だけです。「空間演算子」に記載されているその他の演算子は使用できません。(sdo_indx_dimsキーワードのデフォルト値は2です。この値を使用すると、最初の2次元のみが索引付けされます。)たとえば、次元がX、Y、ZおよびMの場合に、X、YおよびZの各次元を索引付けし、メジャー(M)次元を索引付けしないようにするには、sdo_indx_dims=3を指定します。追加の処理オーバーヘッドが発生し、メリットがないため、メジャー次元は空間索引に含めないでください。

CREATE INDEX文およびそのパラメータとキーワードの詳細は、「空間データを索引付けするためのSQL文」を参照してください。

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

ほとんどのLRSファンクションは、末尾に_3Dの付いた形式(DEFINE_GEOM_SEGMENT_3D、CLIP_GEOM_SEGMENT_3D、FIND_MEASURE_3D、LOCATE_PT_3Dなど)と付かない形式を持ちます。関数に3D形式がある場合、その形式はSDO_LRSパッケージ(線形参照システム)内で関数に関する使用上の注意に記載されます。

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 and Graphの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)は、実際には続いています。セグメントが続いているかどうかを判断するには、許容差(「許容差」を参照)を考慮します。

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つの列(レイヤー)に含まれるすべての接続したジオメトリ・セグメントを連結できます。(「空間集計ファンクション」の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にするなど。)

これらの処理の例については、「SDO_LRSパッケージ(線形参照システム)」の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単位でオフセット設定されています。

詳細は、「SDO_LRSパッケージ(線形参照システム)」の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属性(「SDO_POINT」を参照)に次のように影響します。

- 標準の点をLRS点に変換すると、入力ジオメトリのSDO_POINT属性情報が結果のジオメトリのSDO_ELEM_INFOおよびSDO_ORDINATES属性(「SDO_ELEM_INFO」および「SDO_ORDINATES」を参照)の設定に使用され、結果のジオメトリのSDO_POINT属性がNULLに設定されます。

- LRS点を標準の点に変換すると、入力ジオメトリのSDO_ELEM_INFOおよびSDO_ORDINATES属性(「SDO_ELEM_INFO」および「SDO_ORDINATES」を参照)の情報が結果のジオメトリのSDO_POINT属性情報の設定に使用され、結果のジオメトリのSDO_ELEM_INFOおよびSDO_ORDINATES属性がNULLに設定されます。

変換ファンクションの一覧は、「SDO_LRSパッケージ(線形参照システム)」の表24-3を参照してください。各変換ファンクションについては、「SDO_LRSパッケージ(線形参照システム)」のリファレンス情報も参照してください。

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

多くのLRSファンクションでは、許容差または1つ以上の次元配列を指定する必要があります。そのため、メジャー次元以外のすべての次元に対して1つの許容差を指定するか、または次元配列でメジャー次元以外の各次元に関連付けられている許容差を使用するかを選択できます。許容差は、メジャー次元ではなく、データのジオメトリ部分にのみ適用されます。測地データの許容差の単位はmです。非測地データの場合、許容差の単位はデータに関連付けられた測定単位です。(許容差の詳細は、「許容差」を参照。)

データと目的に合った許容差を使用しているかどうかを確認してください。LRSファンクションの結果が正しくない場合、許容差を小さくする必要がある場合があります。

クリップ操作(「ジオメトリ・セグメントのクリップ」を参照)およびオフセット操作(「ジオメトリ・セグメントのオフセット設定」を参照)では、戻されたセグメントに入力ジオメトリ・セグメントの(本来、戻されたセグメントの開始点または終了点になる点から)許容差内の形状点が生成された場合、その形状点は、戻されたセグメントの開始点または終了点として使用されます。これは、結果のジオメトリに重複する頂点が含まれないようにするためです。頂点が重複すると、ジオメトリが無効になります。たとえば、図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ファンクションを使用する例を示します。この例では、この章で説明する概要および「SDO_LRSパッケージ(線形参照システム)」で説明するファンクションを使用します。

図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 高速道路の例

-- 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 and Graph機能について説明します。

注意:

この章で説明する機能を使用する場合は、Oracle Advanced Analytics OptionのコンポーネントであるOracle Data Miningのドキュメントに記載されている主な概念および機能を理解しておく必要があります。

空間分析およびSDO_SAMパッケージのマイニングのファンクションおよびプロシージャのリファレンス情報については、「SDO_SAMパッケージ(空間分析およびマイニング)」を参照してください。

注意:

SDO_SAMサブプログラムは2次元ジオメトリでのみサポートされています。これらは3次元ジオメトリではサポートされていません。

この章には次の項が含まれます。

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

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

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

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

- 空間のクラスタ化

- 位置の予測

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

Oracle Data Miningを使用すると、データベース内の隠れたナレッジを自動的に発見できます。この機能では、異なるデータ属性間の隠れた関連性の発見、一部のサンプルに基づいたデータの分類、およびクラスタ化による固有のパターンの識別が行われます。空間データをマテリアライズして、データ・マイニング・アプリケーションに含めることができます。そのため、Oracle Data Miningを使用すると、特定の区域(近隣、市または地域)内の住民に対する販売予測で、これらの区域の住民は特定のテレビ番組を見る可能性が高いこと、または特定の広告による勧誘に好意的に反応する可能性が高いことを発見できる場合があります。(住所は経度/緯度の点にジオコードされ、Oracle Spatial and Graphジオメトリ・オブジェクトに格納されます。)

多くのアプリケーションで、特定の位置に存在するデータは、近隣のデータの影響を受けます。たとえば、家の価値は、近隣の他の家の価値によって大きく左右されます。この現象は、空間相関(または近隣の影響)と呼ばれます(「空間相関のマテリアライズ」を参照)。Oracle Spatial and Graphの空間分析およびマイニング機能を使用すると、データ項目の位置属性を使用してデータを地域別にビニング(区分)したり(データを北、南、東および西の地域別に分類するなど)、近隣(各店舗から半径2マイル以内の顧客数など)の影響をマテリアライズしたり、同じ場所に存在するデータ項目(ビデオ・レンタル店やピザ・レストランなど)を識別して、空間相関を活用することができます。

空間データのマイニングを実行するには、テーマ・レイヤーを使用して、一連の空間データに対する空間条件および関係をマテリアライズします。各レイヤーには、公園やレクリエーション施設、デモグラフィックな収入データなど、特定の種類の空間データに関するデータ(特定の「テーマ」を持つデータ)が含まれています。空間のマテリアライズは、データ・マイニングを実行する前の前処理手順として実行するか、または空間マイニングの中間手順として実行できます(図8-1を参照)。

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

図8-1では、次のことに注意してください。

- 空間データおよび非空間データを含む元のデータが、マテリアライズされたデータを生成するために処理されます。

- 元のデータ内の空間データが、マテリアライズされたデータを生成するために空間マイニング・ファンクションによって処理されます。この処理には、空間のビニング、近接性、コロケーション・マテリアライズなどの操作が含まれます。

- Oracle Data Miningエンジンが、マテリアライズされたデータ(空間および非空間)を処理して、マイニング結果を生成します。

空間情報を処理に加えることでメリットを得る可能性があるデータ・マイニング・アプリケーションの例を次に示します。

- ビジネス予測: 他のフランチャイズ店と同じ場所で営業する(ピザ・ハット・レストランとブロックバスター・ビデオ店が同じ場所で営業するなど)ことによって売上が増えるかどうかを判断します。

- 店舗予測: 大都市から50マイル以内で、消費税制度がない州内の、店舗の立地に適した場所を検索します。(消費税の支払いを回避するために50マイルを運転するのは遠すぎる可能性がありますが、半径50マイルの範囲内で消費税制度がない州の近くに、多くの顧客が住んでいる場合があります。)

- 病院予測: 近隣に住む患者の人口に基づいて、新しく病院を設立するのに最適な場所を特定します。

- 空間地域に基づいた分類またはパーソナライズ: 米国南東部に住む特定の年代または所得層の顧客が、ソフト・ロック音楽とハード・ロック音楽のどちらを好むかを判断します。

- 自動車保険: 任意の顧客の自宅または職場の住所が、事故や自動車盗難の発生率が高い地域内にあるかどうかを判断します。

- プロパティ分析: コロケーション・ルールを使用して、高速道路に近接していることと、家の価値または店舗の売上の間の隠れた関連性を発見します。

- プロパティ評価: 近隣に立っている類似の家の価値を調べて、差異と空間相関に基づいて家の価値を見積もります。

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

空間のビニング(空間の区分)とは、位置の値を、地理区域に関連付けられた少数のグループに区分することです。位置をグループに割り当てるには、次のいずれかの方法を使用します。

- 経度/緯度座標を逆にジオコードして、郵便番号、市、州および国(米国の場合)で識別される住所を取得します。

- 空間ビン表を確認して、特定の位置がどのビンに属しているかを判断します。

次に、Oracle Data Miningの機能を区分された位置に適用して、興味深い地域パターンまたは相関ルールを識別できます。たとえば、地域Aの顧客は通常の炭酸飲料を好み、地域Bの顧客はダイエット炭酸飲料を好むことを発見する場合があります。

次のファンクションおよびプロシージャ(「SDO_SAMパッケージ(空間分析およびマイニング)」を参照)は、空間ビニングに関連する操作を実行します。

- SDO_SAM.BIN_GEOMETRY

- SDO_SAM.BIN_LAYER

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

空間相関(または近隣の影響)とは、ある地域に存在する特定のオブジェクトの位置が、そのオブジェクトの非空間属性に影響を及ぼす現象です。たとえば、任意の(ジオコード済で、空間属性が指定されている)住所に建っている家の価値(非空間属性)は、近隣の他の家の価値によって大きく左右されます。

データ・マイニング・アプリケーションで空間相関を使用するには、属性(列)をデータ・マイニング表に追加して、空間相関をマテリアライズします。適切な属性を追加するには、関連付けられたテーマ表を使用します。次に、Oracle Data Miningのファンクションを使用して、データ・マイニング表に対してマイニング・タスクを実行します。

次のファンクションおよびプロシージャ(「SDO_SAMパッケージ(空間分析およびマイニング)」を参照)は、空間相関のマテリアライズに関連する操作を実行します。

- SDO_SAM.SIMPLIFY_GEOMETRY

- SDO_SAM.SIMPLIFY_LAYER

- SDO_SAM.AGGREGATES_FOR_GEOMETRY

- SDO_SAM.AGGREGATES_FOR_LAYER

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

コロケーションとは、同じ位置または非常に近い位置に、複数の空間オブジェクトが存在することです。コロケーション・パターンは、非空間属性に関して空間データ・オブジェクト間の興味深い関連性を示す場合があります。たとえば、データ・マイニング・アプリケーションによって、特定のピザ・レストラン・チェーンのフランチャイズ店の売上が、ビデオ店と同じ場所で営業している店舗の方が、そうでない店舗より多いことが発見される場合があります。

次の2種類のコロケーション・マイニングがサポートされています。

- データ・マイニング表内の項目のコロケーション。この方法では、任意のデータ・レイヤーで、複数のフィーチャのコロケーションが識別されます。たとえば、捕食動物と被捕食動物が同じ場所に生息していたり、売上の多いピザ・レストランは売上の多いビデオ店と同じ場所で営業している可能性があります。参照フィーチャによる方法(1つのフィーチャを参照として、また他のフィーチャをテーマ属性として使用し、その参照フィーチャのすべての近隣フィーチャをマテリアライズする方法)またはバッファ・ベースの方法(指定したサイズのすべてのウィンドウ内に存在するすべての項目をマテリアライズする方法)を使用できます。

- テーマ・レイヤーとのコロケーション。この方法では、任意の複数のデータ・レイヤーで、複数のレイヤーにまたがるコロケーションが識別されます。たとえば、任意の湖レイヤーと植物レイヤーでは、湖が存在する場所に植物が多い可能性があります。データをマテリアライズし、分類と数値の空間関係をデータ・マイニング表に追加して、Oracle Data Miningの相関ルール・メカニズムを適用します。

次のファンクションおよびプロシージャ(「SDO_SAMパッケージ(空間分析およびマイニング)」を参照)は、コロケーション・マイニングに関連する操作を実行します。

- SDO_SAM.COLOCATED_REFERENCE_FEATURES

- SDO_SAM.BIN_GEOMETRY

8.5 空間のクラスタ化

空間のクラスタ化を実行すると、データのレイヤーのクラスタ・ジオメトリが戻されます。空間のクラスタ化の例は、犯罪発生場所データのクラスタ化です。

SDO_SAM.SPATIAL_CLUSTERSファンクション(「SDO_SAMパッケージ(空間分析およびマイニング)」を参照)は、空間のクラスタ化を実行します。このファンクションでは、レイヤーのジオメトリ列に空間Rツリー索引が作成されている必要があります。このファンクションは、一連のSDO_REGIONオブジェクトを戻します。このオブジェクトでは、ジオメトリ列によって各クラスタの境界が指定され、geometry_key値がNULLに設定されています。

ビン表内の戻された空間クラスタにSDO_SAM.BIN_GEOMETRYファンクションを使用すると、ジオメトリが属するクラスタを識別できます。

8.6 位置の予測

位置の予測を実行するには、テーマ・レイヤーを使用してレイヤーの集計を行い、集計結果の最大値を持つ位置を選択します。

次のファンクション(「SDO_SAMパッケージ(空間分析およびマイニング)」を参照)は、位置の予測に関連する操作を実行します。

- SDO_SAM.AGGREGATES_FOR_GEOMETRY

- SDO_SAM.AGGREGATES_FOR_LAYER

- SDO_SAM.TILED_AGGREGATES

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

この章では、ジオメトリ列以外のオブジェクトに対して空間索引を作成および使用する方法を説明します。他の章では、SDO_GEOMETRY型の単一列に格納された空間データの索引付けおよび問合せについて説明しています。この章では、次の操作を実行する方法を説明します。

- SDO_GEOMETRYオブジェクトをユーザー定義のオブジェクト型に埋め込み、その型のジオメトリ属性を索引付けする(「ユーザー定義型定義のSDO_GEOMETRYオブジェクト」を参照)

- ファンクションがSDO_GEOMETRYオブジェクトを戻すファンクション索引を作成および使用する(「ファンクション索引のSDO_GEOMETRYオブジェクト」を参照)

この章で説明する方法は、経験および知識の豊富なアプリケーション開発者を対象としています。他の章で説明するSpatial and Graphの概念および定義を十分に理解している必要があります。また、関連するOracle Databaseの機能(ユーザー定義データ型やファンクション索引付けなど)についても十分に理解しているか、またはこれらの機能を習得できる必要もあります。

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

SDO_GEOMETRY型は、ユーザー定義のデータ型定義に埋め込むことができます。その手順は、次に示すとおり、空間データ列にSDO_GEOMETRY型を使用する場合の手順に類似しています。

1. ユーザー定義のデータ型を作成します。

2. そのデータ型に基づいた列を含む表を作成します。

3. その表にデータを挿入します。

4. USER_SDO_GEOM_METADATAビューを更新します。

5. ジオメトリ属性に対して空間索引を作成します。

6. データに対して問合せを実行します。

たとえば、「空間データの挿入、索引付けおよび問合せの例」の例に示すコーラのマーケットの例に従って、マーケット名属性およびジオメトリ属性を単一の型に取り込むとします。まず、次に示すとおり、ユーザー定義のデータ型を作成します。この例では、MARKET_TYPEというオブジェクト型を作成します。

CREATE OR REPLACE TYPE market_type AS OBJECT
(name VARCHAR2(32), shape SDO_GEOMETRY);
/

そのユーザー定義型に基づいた列を含む表を作成します。次の例では、「空間データの挿入、索引付けおよび問合せの例」の例で使用されている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(「COLUMN_NAME」を参照)として指定します。

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 (「COLUMN_NAME」を参照)として指定します。

-- 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 (「COLUMN_NAME」を参照)として指定します。

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部 空間Webサービス

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

- 「概念および使用方法」では、Oracle Spatial and Graphの概念および使用方法について説明します。

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

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

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

第II部は、次の章で構成されます。

- 空間Webサービスの概要

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

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

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

- OpenLSのサポート

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

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

10 空間Webサービスの概要

この章では、Oracle Spatial and GraphでサポートされるWebサービスについて説明します。Webサービスを使用すると、Oracle Spatial and Graphアプリケーションの開発者は、アプリケーション・ユーザーに対してフィーチャ・データおよびメタデータをWeb経由で提供できます。

この章には次の項が含まれます。

注意:

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

詳細は、「アップグレード前およびアップグレード後に行う索引のメンテナンス(WFSおよびCSW)」を参照してください。

- 空間Webサービスの種類

- 空間Webサービスのユーザーの種類

- 空間Webサービスのクライアントの設定

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

10.1 SpatialのWebサービスの種類

Oracle Spatial and Graphでは、次の種類のWebサービスが提供されます。

- ジオコーディング: ユーザーは、住所を空間位置(経度と緯度の座標)に関連付けることができます。ジオコーディングのサポートについては、「住所データのジオコーディング」を参照してください。

- イエロー・ページ: ユーザーは位置との関係に基づいて、名前別またはカテゴリ別にビジネス情報を検索できます。イエロー・ページのサポートについては、「ビジネス・ディレクトリ(イエロー・ページ)のサポート」を参照してください。

- ルーティング: 1つまたは複数のルートについて道路情報や案内を提供します。ルーティングのサポートについては、「ルーティング・エンジン」を参照してください。

- OpenLS: ジオコーディング、マッピング、ルーティングおよびイエロー・ページに対するOpen Location Services Initiative(OpenLS)仕様に基づいて、位置情報をベースにしたサービスを提供します。OpenLSのサポートについては、「OpenLSのサポート」を参照してください。

- Web Feature Services(WFS): ユーザーは、位置または非空間属性との関係に基づいて、フィーチャ(道路、川など)を検索できます。WFSのサポートについては、「Web Feature Service (WFS)のサポート」を参照してください。

- Catalog Services for the Web (CSW): カタログ・サービスに対するOpen GIS Consortium仕様のOracle Spatial and Graphの実装を記述します。この仕様によると、カタログ・サービスは、データ、サービスおよび関連する情報オブジェクトについての記述情報(メタデータ)の集合をパブリッシュおよび検索する機能をサポートしています。CSWのサポートについては、「Catalog Services for the Web(CSW)のサポート」を参照してください。

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

一般的な業務では、空間Webサービス・アプリケーションを実装するユーザーには、次のような種類のユーザーが含まれます。

- Webサービスのインフラストラクチャを設定する管理者。管理者は、データベース・ユーザーの作成、新規および既存のデータベース・ユーザーに対する権限とアクセス権の付与、複数のデータベース・ユーザーに影響するその他の操作などを行います。Web Feature Servicesでは、フィーチャ表の登録、フィーチャ・タイプのパブリッシュ、および特定のアカウントのロック解除を行います。
たとえば、管理者は、インフラストラクチャを設定して、道路や川などの空間フィーチャにアクセスできるようにします。

- 空間データおよびメタデータを作成および管理するアプリケーション開発者。開発者は、空間データ表を作成し、空間索引を作成して、行をUSER_SDO_GEOM_METADATAビューに挿入し、空間のファンクションおよびプロシージャを使用してアプリケーション・ロジックを実装します。
たとえば、アプリケーション開発者は、道路や川の表を作成し、アプリケーション・ロジックを実装することで、エンド・ユーザーが空間問合せ条件に基づいて道路や川を検索できるようにします。

- Webブラウザを使用してサービスにアクセスするエンド・ユーザー。
たとえば、エンド・ユーザーは、特定の川から1マイル以内にあるすべての道路、またはその川を横断するすべての道路などの検索を行います。

管理者の立場から見ると、アプリケーション開発者もエンド・ユーザーもすべてユーザーです。これは、それぞれのニーズに合わせてデータベース・ユーザーを作成する必要があるためです。アプリケーション開発者は、空間表を作成および管理し、Oracle Spatial and Graphのファンクションおよびプロシージャを使用するための十分な権限を持つユーザーとして、データベースに接続します。これに対し、エンド・ユーザーは、通常、データへの読取り専用アクセスや制限付きの書込みアクセスなど、制限されたアクセス権限を持つデータベース・ユーザーとして、データベースにアクセスします。

Spatial and GraphのWebサービスに関する章は、エンド・ユーザー向けではなく、管理者およびアプリケーション開発者を対象としています。

10.3 空間Webサービスのデプロイと構成

このトピックでは、空間Webサービス(特にWFS、WCSおよびCSW)のデプロイと構成に適用される操作について説明します。これらのサービスはJava Webアプリケーションとして実装され、WebLogic 12.1.3以降にデプロイして実行できます。必要なJavaバージョンはJDK 1.8以降です。これらはsdows.ear.zipファイルにパッケージされています。

- WFS、CSWおよびCSWは、sdows.ear.zipファイルにパッケージされています。

- Geocoderサービスは、geocoder.ear.zipファイルにパッケージされています。

- ルーティング・エンジンは、routeserver.ear.zipファイルにパッケージされています。

このトピック内の一般的な説明に加えて、使用を予定している各空間Webサービスに関する章で、追加のデプロイ・タスクや構成タスクを参照してください。

Oracle Spatial and Graph Webサービスのデプロイには、主に次のタスクが含まれます。

1. WebLogic Server (バージョン12.1.3以降)の準備

2. WebLogic Server上のドメインの作成

3. sdows.ear.zipファイル(WFS、WCS、CSW)の解凍

4. WebLogic Server上の空間Webサービスのデプロイとweb.xmlファイルの編集

5. WebサービスWebプロジェクトがアクティブ状態であることの確認

6. 各空間Webサービスの構成

WebLogic Server (バージョン12.1.3以降)の準備

Webサービス・エンジンをデプロイする前に、WebLogic Server内の管理対象サーバーを作成することをお薦めします。

管理対象サーバー上にWebサービス・エンジンを正常にデプロイするには、WebLogicドメインを作成する必要があります。

WebLogic Server上のドメインの作成

WebLogic Server上のWebサービスに対してドメインが存在することを確認する必要があります。空間ドメインを作成するには、次の手順に従います。

1. WebLogic Serverコンソールにログインします。

2. 「新しいWebLogicドメインの作成」を選択し、「次へ」をクリックします。

3. ドメイン・ソース: 自動的に構成されたドメインを生成するを選択し、「次」をクリックします。

4. 管理者ユーザー名とパスワードを構成し、「次」をクリックします。

5. サーバーの起動モードについては、「開発」または「本番」を選択します。

6. JDKについては、利用可能ないずれかのJDKを選択します。

7. 環境のカスタマイズとサービス設定については、デフォルト値を受け入れるか、カスタム値を指定します。

8. 「WebLogicドメインの作成」ページで、「作成」をクリックした後、「次」をクリックします。

9. 「ドメインの作成中」ページで、「完了」をクリックします。

ドメインの作成および構成の詳細は、WebLogic Serverのドキュメントを参照してください。

sdows.ear.zipファイル(WFS、WCS、CSW)の解凍

Spatial and Graph WFS、WCSおよびCSWサービスを使用する前に、DBAロールを持つ管理者は、sdows.ear.zipファイル($ORACLE_HOME/md/jlib内にあります)が目的のディレクトリ内に解凍されていることをデプロイ前に確認する必要があります。結果のパスは、末尾がsdows.earディレクトリになります。これは、sdows展開済ディレクトリと呼ばれることもあります。

WebLogic Server上の空間Webサービスのデプロイとweb.xmlファイルの編集

空間Webサービスは展開済ディレクトリとしてデプロイする必要があります。これは、ログ・ファイルがこのディレクトリ内に生成されるためです。

(WCS 2.0.1とCSW 2.0.2はリリース12.2で新たに追加されたサービスであるため)WFSサービスの下位互換性のためだけに、SpatialWS-SpatialWS-context-root (またはその他のルート名)を使用する場合は、web.xmlファイル内で、<env-entry-name>oracle/spatial/ws/publish_url_as/contextPath</env-entry-name>要素について、<env-entry-value>要素に目的の値を指定します。その場合は、次のファイルにも変更を加えて、デフォルトのoraclespatial以外のルートを反映します: application.xml、context.xml、weblogic.xml、wfs.wsdlおよびcsw202.wsdl。

同様に、WFS、WCSまたはCSWのサーブレット・パスを変更する必要がある場合は、web.xmlファイル内の、関連するすべての<env-entry-name>および<env-entry-type>要素で、目的の値を指定する必要があります。次に例を示します。

<env-entry-name>oracle/spatial/ws/publish_url_as/servletPath/wfs</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>

<env-entry-name>oracle/spatial/ws/publish_url_as/servletPath/csw</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>

<env-entry-name>oracle/spatial/ws/publish_url_as/servletPath/wcs</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>

プロキシ・サーバーがクライアントからのリクエストに対する仲介サーバーとして使用される場合は、web.xmlファイル内の次のenv-entry要素を編集する必要があります。

- oracle/spatial/ws/publish_url_as/host

- oracle/spatial/ws/publish_url_as/port

- oracle/spatial/ws/publish_url_as/protocol

- oracle/spatial/ws/publish_url_as/contextPath

- oracle/spatial/ws/publish_url_as/servletPath/ws

- oracle/spatial/ws/publish_url_as/servletPath/wfs

- oracle/spatial/ws/publish_url_as/servletPath/csw

- oracle/spatial/ws/publish_url_as/servletPath/wcs

- oracle/spatial/ws/publish_url_as/xmlservletPath/ws

- oracle/spatial/ws/publish_url_as/xmlservletPath/wfs

- oracle/spatial/ws/publish_url_as/xmlservletPath/csw

- oracle/spatial/ws/publish_url_as/xmlservletPath/wcs

WebLogic Server上に空間Webサービスをデプロイするには、次の手順に従います。

1. WLSコンソールにログインします

2. 「デプロイメント」をクリックし、「インストール」をクリックします。

3. 「パス」がアプリケーション・デプロイメント(展開済アーカイブ)ディレクトリに設定されていることを確認します。

4. sdows.ear (ディレクトリ),を選択し、「次へ」をクリックします。

5. 「このデプロイメントをアプリケーションとしてインストールする」ターゲット・スタイルを選択し、「次へ」をクリックします。

6. WFSエンジンのデプロイ先となるサーバー候補の一覧で、「デプロイメントを次の場所からアクセス可能にする」を選択し、展開済アーカイブ(アプリケーション・デプロイメント)ディレクトリを入力して、「次」をクリックします。

7. デプロイメント名がsdowsであることを確認し、「終了」をクリックします。

WebサービスWebプロジェクトがアクティブ状態であることの確認

空間Webサービスのための必要な手順が完了したら、「デプロイメント」ページでアプリケーションがアクティブ状態になっていることを確認します。

準備済状態になっている場合は、「起動」をクリックしてアプリケーションを起動します。

各空間Webサービスの構成

次のステップは、使用する各空間Webサービス(WFS、WCS、CSWなど)を個別に構成することです。ご使用の環境でサポートするWebサービスに応じて、特定のタスクを実行する必要があります。権限を作成し、データベース・ユーザーに付与する必要がある場合があります。場合によっては、特別なデータ(ジオコーディング用など)をダウンロードしてロードしたり、構成ファイルを変更したり、WebLogic Server内にデータ・ソースを作成したりすることも必要になります。

関連する各空間Webサービスの章を参照し、そのサービスに固有の説明を確認してください。

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

空間のWebサービスをすぐに使用できるようにするために、Oracleでは、ソース・コードを含む.jarファイル(wsclient.jar)、およびサンプルJavaクライアントを設定するための関連ファイルが提供されています。このファイルを使用するには、次の手順を実行します。

1. Spatial and Graphのデモ・ディレクトリで、wsclient.jarを検索します。

2. 選択したディレクトリに、wsclient.jarを展開(解凍)します。
.jarファイルのすべてのファイルの最上位ディレクトリは、srcという名前になります。

3. srcディレクトリにあるReadme.txtファイルを参照し、その手順に従ってください。
Readme.txtファイルには、詳細な説明とガイドラインが記載されています。

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

ジオコーディングとは、住所を空間位置(経度と緯度の座標)に関連付ける処理のことです。この章の内容は次のとおりです。

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

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

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

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

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

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

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

この項では、Spatial and Graphのジオコーディング機能を使用する前に理解しておく必要がある概念について説明します。

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データ型を使用して指定されます(「SDO_GEO_ADDR型」を参照)。

形式化されていない住所は、該当する国の住所形式に情報が含まれる行で記述されます。住所の行には、ジオコーディングに必要な情報を含める必要があります。また、ジオコーディングに必要ない情報(処理されていない住所内の一般的な情報)が含まれる場合もあります。形式化されていない住所は、文字列の配列として格納されます。たとえば、住所が「22 Monument Square」や「Concord, MA 01742」などの文字列で構成される場合があります。

形式化されていない住所は、SDO_KEYWORDARRAYデータ型を使用して指定されます(「SDO_KEYWORDARRAY型」を参照)。

11.1.2 一致モード

ジオコーディング操作の一致モードは、入力された住所の属性が、ジオコーディングに使用されているデータとどの程度一致する必要があるかを決定します。入力された住所では、同じものが異なる方法で表現されていてもかまいません(Streetと短縮形のStなど)。また、小さい間違いが含まれてもかまいません(通りの住所と市の名前が正しく、その市にその通りの住所が1つしか存在しない場合に、郵便番号を間違えるなど)。

入力された住所とジオコーディングに使用されるデータが完全に一致しないと、ジオコーディングが実行されないように要求できます。または、一部の属性に対して、入力された住所にある程度の不一致または誤りが含まれている場合でもジオコーディングが実行されるように、要件を緩和することもできます。表11-2に、一致モードとその意味を示します。SDO_GEO_ADDRデータ型(「SDO_GEO_ADDR型」を参照)の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属性に格納されます(「SDO_GEO_ADDR型」を参照)。

表11-3に、一致コードのすべての値を示します。

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

一致コード

説明

1

完全に一致しています。市の名前、郵便番号、通りのベース名、通りの種類(該当する場合は、接尾辞または接頭辞(あるいはその両方)も含む)および家またはビルの番号が、ジオコーディングに使用されるデータと一致しています。

2

市の名前、郵便番号、通りのベース名、および家またはビルの番号がジオコーディングに使用されるデータと一致していますが、通りの種類、接尾辞または接頭辞が一致していません。

3

市の名前、郵便番号および通りのベース名がジオコーディングに使用されるデータと一致していますが、家またはビルの番号が一致していません。

4

市の名前および郵便番号がジオコーディングに使用されるデータと一致していますが、通りの住所が一致していません。

10

市の名前がジオコーディングに使用されるデータと一致していますが、郵便番号が一致していません。

11

郵便番号がジオコーディングに使用されているデータと一致していますが、市の名前が一致していません。

12

地域はジオコーダ・スキーマのデータと一致しますが、都市名および郵便番号は一致しません。

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

注意:

ErrorMessage属性(この項を参照)のかわりに、MatchVector属性(「出力されたジオコード済住所の一致ベクトル」を参照)を使用することをお薦めします。

出力されたジオコード済住所では、SDO_GEO_ADDRオブジェクトのErrorMessage属性(「SDO_GEO_ADDR型」を参照)に、ジオコーディングに使用されるデータと一致した住所の属性を示す文字列が含まれます。ジオコーディング操作の開始前、その文字列は値???????????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

Region

1

15

Country

C

16

Postal code

P

17

Postal add-on code

A

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

出力されたジオコード済住所では、SDO_GEO_ADDRオブジェクトのMatchVector属性(「SDO_GEO_ADDR型」を参照)に、各住所の属性がジオコーディングに使用されるデータとどのように一致したかを示す文字列が含まれます。この属性では、ErrorMessage属性(「出力されたジオコード済住所のエラー・メッセージ」を参照)に比べて、各住所の属性の一致ステータスに関して、より正確で詳細な情報が提供されます。ジオコーディング操作の開始前、その文字列は値?????????????????に設定されています。この文字列の各文字は、住所属性の一致ステータスを示しています。

表11-5に、文字列内の文字位置、および各位置に対応する住所属性を示します。次の表では、それぞれの文字位置の値が示す内容について説明します。

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

位置

属性

1-2

(今後使用予定)

3

住所地点

4

POI名

5

家またはビルの番号

6

通りの接頭辞

7

通りのベース名

8

通りの接尾辞

9

通りの種類

10

補足情報

11

市街地または市

14

Region

15

Country

16

Postal code

17

Postal add-on code

表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型の詳細は、「SDO_KEYWORDARRAY型」を参照。)

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を参照。)

Region

VARCHAR2(200)

Municipality(存在する場合)より1つ上の行政区域。Municipalityが存在しない場合はSettlementより1つ上の行政区域 (表11-1を参照。)

Country

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)

エラー・メッセージ(「出力されたジオコード済住所のエラー・メッセージ」を参照)。注意: ErrorMessage属性のかわりに、MatchVector属性を使用することをお薦めします。

MatchCode

NUMBER

一致コード(「一致コード」を参照)。

MatchMode

VARCHAR2(30)

一致モード(「一致モード」を参照)。

Longitude

NUMBER

経度値。

Latitude

NUMBER

緯度値。

MatchVector

VARCHAR2(20)

各住所の属性がジオコーディングに使用されるデータとどのように一致したかを示す文字列(「出力されたジオコード済住所の一致ベクトル」を参照)。

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オブジェクト(「SDO_GEO_ADDR型」を参照)の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です。(形式化された住所と形式化されていない住所については、「住所の表現」を参照してください。)

SDO_KEYWORDARRAY型は、次のとおり定義されます。

CREATE TYPE sdo_keywordarray AS VARRAY(10000) OF VARCHAR2(9000);

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

Oracle Spatial and Graphのジオコーディング機能を使用するには、ジオコーディングのベンダーから提供されるデータを使用する必要があり、また、そのデータは、Oracle Spatial and Graphのジオコーディング機能でサポートされる形式である必要があります。ジオコーディングの詳細は、次のURLを参照してください。

データベース/オプション

ジオコーディング・データを使用して住所をジオコードするには、SDO_GCDR PL/SQLパッケージ・サブプログラム(「SDO_GCDRパッケージ(ジオコーディング)」を参照)を使用します。

- 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 場所名、国および他のフィールドからのジオコーディング

いくつかの位置情報(行政区域、郵便番号など)がわかっている場合、それらの情報を指定すると、より優れたパフォーマンスが得られます。例11-3には、追加のパラメータに対応するcreate_addr_from_placenameファンクションの別バージョンを示しています。このバージョンのファンクションをコールするには、placenameおよびcountryパラメータに実際の値を指定し、他の入力パラメータについては実際の値またはNULLを指定します。

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から提供されます。(これらの表がデータ・プロバイダから提供されていない場合は、「プロファイル表のインストール」に示すようにインストールしてから移入を行う必要があります。)他の表には、データ・ベンダーから提供されるジオコーディング・データが格納されます。

ジオコーディング・データが含まれる表を所有する各ユーザー(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列に規定されています(「GC_COUNTRY_PROFILE表」を参照)。

これ以降の項では、ベンダーが提供する、ジオコーディング・データが格納される表について、表名のアルファベット順に説明します。

「ジオコーディングを行うための表の索引」では、ジオコーディングにこれらの表を使用するために作成する必要のある索引について説明します。

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 and Graphルーティング・エンジン(「ルーティング・エンジン」を参照)と連携させるには、この値を正しく設定する必要があります(連携させる必要がない場合は、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

交差点の住居番号の先頭の数字の部分。(「GC_ROAD_SEGMENT_<接尾辞>表」の表11-16の後ろに示す住居番号の説明を参照。)(必須)

HOUSE_NUMBER_2

VARCHAR2(10)

交差点の住居番号の2番目の部分。(「GC_ROAD_SEGMENT_<接尾辞>表」の表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定義を示し、「ADDRESS_FORMAT_STRINGの説明」では、米国の住所形式の定義で使用される要素について説明します。)

例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 and Graphルーティング・エンジン(「ルーティング・エンジン」を参照)と連携させるには、この値を正しく設定する必要があります(連携させる必要がない場合は、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領域内の同じ名前の道路セグメントの集合であり、道路セグメントは「GC_ROAD_SEGMENT_<接尾辞>表」で定義されています。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)

中心住居番号の先頭の数字の部分。中心住居番号とは、道路セグメントの中央(道路全体の中央)の開始点の左側にある住居番号です。(「GC_ROAD_SEGMENT_<接尾辞>表」の表11-16の後ろに示す住居番号の説明を参照。)入力された住所で住居番号が指定されていない場合に戻されます。(必須)

END_HN

NUMBER(5)

道路上の最も大きい住居番号。指定した住居番号がこの値よりも大きい場合に戻されます。

START_HN_SIDE

VARCHAR2(1)

最も小さい住居番号の道路の一方の側(左側はL、右側はR)。

CENTER_HN_SIDE

VARCHAR2(1)

中心住居番号の道路の一方の側(左側はL、右側はR)。中心住居番号とは、道路セグメントの中央(道路全体の中央)の開始点の左側にある住居番号です。(「GC_ROAD_SEGMENT_<接尾辞>表」の表11-16の後ろに示す住居番号の説明を参照。)(道路上に家がある場合は必須)

END_HN_SIDE

VARCHAR2(1)

最も大きい住居番号の道路の一方の側(左側はL、右側はR)。

START_LONG

NUMBER

最も小さい住居番号の経度値。

START_LAT

NUMBER

最も小さい住居番号の緯度値。

CENTER_LONG

NUMBER

中心住居番号の経度値。中心住居番号とは、道路セグメントの中央(道路全体の中央)の開始点の左側にある住居番号です。(「GC_ROAD_SEGMENT_<接尾辞>表」の表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番目の部分。(「GC_ROAD_SEGMENT_<接尾辞>表」の表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 and Graphではジオコーディング・サービスのXML APIも提供され、これを使用して住所をジオコードすることができます。Javaジオコーダ・アプリケーション・エンジンでは、Oracle Databaseに格納されたジオコーダ・データを問い合せることによって、住所の国際標準化、ジオコーディング、およびPOIの一致が行われます。未解析の住所のサポートにより、顧客アプリケーションに柔軟性と利便性が追加されます。

このジオコーディング・サービスは、WebLogic Server環境でデプロイできるJava 2 Enterprise Edition (J2EE) Webアプリケーションとして実装されます。

図11-1に、ジオコーディング・サービスを使用する基本的なアクション・フローを示します(クライアントは、リモートのジオコーディング・サービス・インスタンスを探してジオコーディング・リクエストを送信し、ジオコーディング・サービス・インスタンスから戻されたレスポンスを処理します)。

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

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

1. クライアントは、ジオコードする1つ以上の入力住所を含むXMLジオコーディング・リクエストを、HTTPプロトコルを使用してジオコーディング・サービスに送信します。

2. ジオコーディング・サービスは、入力リクエストを解析して、入力住所をデータベース内で検索します。

3. ジオコーディング・サービスは、ジオコードされた結果をXML形式で、HTTPプロトコルを使用してクライアントに送信します。

データベースにジオコーダ・スキーマをロードした後、それを使用する前にJ2EEジオコーダを構成する必要があります(「J2EEジオコーダのデプロイおよび構成」を参照)

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

J2EEジオコーダはジオコーディング・リクエストを処理し、レスポンスを生成します。このジオコーディング・サービスを有効化するには、Oracle WebLogic Serverを使用してgeocoder.ear.zipファイルをデプロイする必要があります。ジオコーディング・サービスをデプロイおよび構成するには、次の手順を実行します。

1. Oracle WebLogic Serverを使用してジオコーダをデプロイします。

a. $ORACLE_HOME/md/jlibディレクトリにあるgeocoder.ear.zipファイルを適切なディレクトリに解凍します。解凍後のディレクトリ構造は次のようになります: $geocoder.ear/web.war/...

b. WebLogic Serverコンソール(たとえば、http://<hostname>:7001/console)にログオンし、「デプロイメント」からgeocoder.earファイルをインストールします。その際、デプロイメントの名前geocoderを受け入れ、場所オプション「次の場所からデプロイメントにアクセスできるようにします。」を選択します。

2. http://<hostname>:<port>/geocoderのURLを使用して、Webブラウザでジオコーダのようこそページを起動します。ようこそページで、「管理」リンクを選択し、管理者(weblogic)のユーザー名およびパスワードを入力します。

注意:

デフォルトのWebLogic管理者のユーザー名(weblogic)を使用していない場合は、$geocoder.ear/web.war/WEB-INF/ディレクトリにあるweblogic.xmlファイルを編集する必要があります。<principal-name>weblogic</principal-name>をWebLogic Server管理者のユーザー名に置換します(<principal-name>my_weblogic_admin</principal-name>など)。

ようこそページが表示されなかった場合は、新しくデプロイされたジオコーディング・サービスが正常に起動されたことを確認してください。(Oracle Database 12.2以降のgeocoder.ear.zipファイルを使用してWebLogic Server 12.1以降を実行していることを想定しています。)

3. ジオコーダ構成ファイル(geocodercfg.xml)を変更します。少なくとも1つの<geocoder>要素のコメントを解除し、その<geocoder>要素の<database>要素属性を、データベースの構成が反映されるように変更します。このファイルについては、「geocodercfg.xmlファイルの構成」を参照してください。

4. ファイルに対する変更を保存し、ジオコーダを再起動します。

5. http://<hostname>:<port>/geocoderのURLのようこそページに移動し、XMLジオコーディング・リクエスト・ページを実行することによって、データベース接続を確認します。(このデモには、米国のジオコーダ・データが必要です。)

例は、ジオコーディング・サービスの様々な機能を実例を使用して説明するために使用できます。http://<hostname>:<port>/geocoder/gcxmlreq_exp_af.htmlのURLにある例を確認することで、XML API (「ジオコーディング・リクエストのXMLスキーマ定義および例」を参照)を効果的に学習できます。

11.7.1.1 Configuring the geocodercfg.xmlファイル

Spatial and Graphに付属するデフォルトの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.example.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に、「ジオコーディング・リクエストのXMLスキーマ定義および例」の例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 and Graphのサポートについて説明します。この章の主な内容は次のとおりです。

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

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

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

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

ビジネス・ディレクトリ・サービスでは、指定した名前またはカテゴリに一致する、指定した地域内のビジネス情報のリストを提供します。

ビジネス・ディレクトリ・データは、これらのデータのサードパーティ・プロバイダから取得されます。これらのプロバイダでは、多くの場合、異なるビジネス・カテゴリを使用しています。また、使用している階層構造が異なる場合もあります。様々な方法で統一されているパターンは、ビジネス情報が主題と場所によって分類されていることです。場所の要素はよく知られており、たとえば米国の場合は、場所の特定に郵便番号または都市および州の組合せ、さらにオプションで具体的な住所を使用して検索を開始できます。

一方、ビジネス情報の分類は統一された方法では実施されていません。一部のプロバイダでは、単純なサブストリングの一致を使用してユーザーが選択したカテゴリのフラット・リストを提供しています。その他のプロバイダでは、3レベルまたは4レベルからなるサブカテゴリの階層構成を提供し、各レベルのファンアウト(1つのレベルにおける子カテゴリの最大数)は多くの場合20から50、場合によっては100以上になります。ユーザーは、デフォルトでは階層のルートから階層のトラバースを開始できます。また、階層内の適切な開始点と一致するキーワードを入力することもできます。このようなキーワードの一致では、単純なサブストリングの一致と比べて、より効率的な選択を行うことができます。

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

Oracle Spatialのビジネス・ディレクトリ機能を使用するには、ビジネス・ディレクトリ(YP)のベンダーから提供されるデータを使用する必要があります。また、そのデータは、Oracle Spatial and GraphのOpenLSでサポートされる形式である必要があります(「OPENLS_DIR_BUSINESSES表」を参照)。

ユーザーのディレクトリ・サービス・リクエストを送信してレスポンスを戻すには、OpenLS WebサービスAPI (「OpenLSのApplication Program Interface」を参照)を使用する必要があります。ディレクトリ・サービスのリクエストとレスポンスに関する情報とその例については、「OpenLSサービスのサポートおよび例」を参照してください。

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表(「OPENLS_DIR_BUSINESS_CHAINS表」を参照)の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表(「OPENLS_DIR_BUSINESSES表」を参照)内のそのビジネスに関する行に、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表(「OPENLS_DIR_CATEGORY_TYPES表」を参照)の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表(「OPENLS_DIR_BUSINESSES表」を参照)のBUSINESS_ID列の値と一致する必要があります。(必須)

CATEGORY_ID

VARCHAR2(32)

カテゴリのID文字列。CATEGORY_ID値とCATEGORY_TYPE_ID値は、OPENLS_DIR_CATEGORIES表(「OPENLS_DIR_CATEGORIES表」を参照)内の単一の行の対応する列値と一致する必要があります。(必須)

CATEGORY_TYPE_ID

NUMBER

カテゴリ・タイプのID番号。CATEGORY_ID値とCATEGORY_TYPE_ID値は、OPENLS_DIR_CATEGORIES表(「OPENLS_DIR_CATEGORIES表」を参照)内の単一の行の対応する列値と一致する必要があります。(必須)

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表(「OPENLS_DIR_CATEGORIES表」を参照)に表示されます。

AKA

VARCHAR2(128)

カテゴリの別名または代替名。(AKAは別名という意味のalso known asを表します。)

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

Spatial and Graphのルーティング・エンジン(ルーティング・エンジンとも呼ばれます)を使用すると、次の機能を提供するXMLベースのWebサービスをホストできます。

- 単純ルート・リクエストでは、2つの場所間のルート情報が戻されます。

- 単純マルチアドレス・ルート・リクエストでは、3つ以上の場所間のルート情報が戻されます。レスポンス内の場所の順序はユーザー指定であり、最適化されていません。

- 巡回セールスマン(TSP)ルート・リクエストは、マルチアドレス・ルート・リクエストの1形式であり、これも3つ以上の場所間のルート情報を戻します。レスポンス内の一部またはすべての場所の順序を並べ替えて、全体的なルートを最適化できます。

- 一括ルート・リクエストは、1つ以上の単純またはマルチアドレス・ルート・リクエストのバッチです。これは、単純、単純マルチアドレスおよびTSPの各リクエストの組合せにすることができます。個々のリクエストは単一のリクエストのように見えますが、<batch_route_request>要素にカプセル化されています。ルーティング・エンジンは、<batch_route_request>要素に埋め込まれた<route_request>要素を検出すると、一括リクエストをバッチ・モード・リクエストと区別します。

- バッチ・モード・ルート・リクエストは複数のレスポンスを戻し、それぞれが同じ出発地を持ちますが、目的地は異なります。

すべてのリクエストについて、出発地、中間値および目的地は、住所、事前ジオコード済住所または経度/緯度座標で識別されます。

マルチアドレス・ルートについては、「ルーティング」を参照してください。

Oracleルーティング・エンジンは、Oracle WebLogic Serverなどのアプリケーション・サーバーでデプロイできるJava 2 Enterprise Edition (J2EE) Webアプリケーションとして実装されます。

図13-1に、ルーティング・エンジンを使用する基本的なアクション・フローを示します。クライアントは、リモートのルーティング・エンジン・インスタンスを探してルート・リクエストを送信し、ルーティング・エンジン・インスタンスから戻されたルート・レスポンスを処理します。

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

この章には次の項が含まれます。

- ルーティング

- ルーティング・エンジンのデプロイ

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

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

この章には、ルーティング・エンジンの管理に関する情報は含まれません。特殊なニーズを持つ上級ユーザー向けのこの情報は、「ルーティング・エンジン管理」にあります。

13.1 ルーティング

ルートは、場所要素間で計算されます。<start_location>、<location> (中間地または中間地点)、<end_location>という3種類の場所要素があります。場所要素は、ジオコード化された住所、事前ジオコード済の住所、エッジID/パーセンテージのペアまたは逆ジオコード化された緯度/経度ペアとして指定できます。

この項には次のトピックが含まれます:

- 単純ルート・リクエスト

- 単純マルチアドレス・ルート・リクエスト

- 巡回セールスマン(TSP)ルート・リクエスト

- 一括ルート・リクエスト

- バッチ・モード・ルート・リクエスト

13.1.1 単純ルート・リクエスト

単純ルート・リクエストには、<start_location>と<end_location>の両方の要素が含まれます。単純ルート・リクエストのレスポンスは、出発地から目的地までの単一のルートです。

単純ルート・リクエスト内のいくつかの属性は、ルートの計算方法およびルート・レスポンスで戻される内容を制御します。これらの属性については、「ルーティング・エンジンのXML API」で説明しています。

13.1.2 単純マルチアドレス・ルート・リクエスト

単純マルチアドレス・ルート・リクエストには、必須の<start_location>要素など、少なくとも3つの場所が含まれている必要があります。マルチアドレス・ルート・リクエストには、1つ以上の<location>要素も含まれている必要があり、オプションで<end_location>要素が含まれます。

単純マルチアドレス・ルート・リクエストの結果は、各中間地を通る、出発地から目的地までの単一のルートです。この単一ルートは複数のサブルートで構成されます。サブルートは、個々の場所間のルートです。

単純マルチアドレス・ルート・リクエストでは、optimize_route属性が存在しないかFALSEに設定されている必要があります。単純マルチアドレス・ルート・リクエストでは、すべての場所が固定されます。場所を訪れる順序の最適化は試行されません。ルート内の場所は、リクエストで指定された順序で訪問されます。

単純マルチアドレス・ルート・リクエストでは、route_type属性を使用して、ルートを開いた行程または閉じた行程として分類します。

- 開いた行程: ルートは最終中間地または指定した目的地で終了します。

- 閉じた行程: ルートは出発地に戻ります。
単純マルチアドレスの閉じた行程ルートがリクエストされた場合、ルート計算中に<start_location>要素指定は目的地としても使用されます。単純マルチアドレスの閉じた行程ルート・リクエストで<end_location>要素が指定されている場合は、エラーが戻されます。

例: 単純マルチアドレスの開いた行程ルート・リクエスト

職場から顧客Aまで運転し、次に顧客B、その次に顧客Cまで運転する必要があるとします。

- ルート・リクエストには、職場が出発地、顧客AとBが中間地、そして顧客Cが目的地として含まれます。

- 戻されるルートには、(1)職場から顧客A、(2)顧客Aから顧客Bおよび(3)顧客Bから顧客Cという3つのサブルートが含まれます。

- 各サブルートには、複数のセグメントが含まれる場合があり、各セグメントは、特定の運転方向ステップに関連付けられます。

例: 単純マルチアドレスの閉じた行程ルート・リクエスト

職場から顧客Aまで運転し、次に顧客B、その次に顧客Cまで運転してから、職場に戻る必要があるとします。

- ルート・リクエストには、職場が出発地、顧客A、B、Cが中間地として含まれます。職場は目的地としても使用されます。<end_location>要素はルート・リクエストで指定しないでください。ルーティング・エンジンは、閉じた行程のリクエストを検出すると、顧客Cから職場までのサブルートを自動的に追加します。

- 戻されるルートには、(1)職場から顧客A、(2)顧客Aから顧客B、(3)顧客Bから顧客Cおよび(4)顧客Cから職場という4つのサブルートが含まれます。

- 各サブルートには、複数のセグメントが含まれる場合があり、各セグメントは、特定の運転方向ステップに関連付けられます。

単純マルチアドレス・リクエストには、各サブルートに固有の複数の属性を含めることができます。これらの属性には、return_subroutes、return_subroute_edge_idsおよびreturn_subroute_geometryが含まれます。これらの属性については、「ルート・リクエストXMLスキーマ定義」で説明しています。

13.1.3 巡回セールスマン(TSP)ルート・リクエスト

巡回セールスマン(TSP)ルート・リクエストには、少なくとも3つの場所が必要です。単純マルチアドレス・ルート・リクエストとは異なり、<start_location>要素はオプションです。

TSPルート・リクエストは、optimize_route属性が存在し、TRUEに設定されたマルチアドレス・リクエストです。TSPルート・リクエストは、リクエスト内の固定されていない場所を並べ替えて全体的なルートの最適化を試みます。

TSPリクエスト内のすべての場所は、非固定または固定として分類されます。

- 非固定の場所: 場所が<location>要素で指定されている場合は、非固定の場所とみなされ、ルート計算時に並替えの対象となります。

- 固定の場所: 場所が<start_location>または<end_location>要素で指定されている場合は、固定の場所とみなされ、ルート計算時に並替えの対象になりません。
中間地を固定する必要がある場合は、TSPルート・リクエストのかわりに単純マルチアドレス・ルート・リクエストを使用する必要があります。

TSPルート・リクエストでは、route_type属性を使用して、ルートを開いた行程または閉じた行程として分類します。

- 開いた行程: ルートは出発地に戻りません。

- 閉じた行程: ルートは出発地に戻ります。
TSPの閉じた行程ルートがリクエストされた場合は、<start_location>要素を指定する必要があります。この出発地はルート計算中に目的地としても使用されます。TSPの閉じた行程ルート・リクエストで<end_location>要素が指定されている場合は、エラーが戻されます。定義では、TSPの閉じた行程ルートは単一の固定の出発および目的地を使用しますが、中間地は並替えの対象となります。

例: TSPの開いた行程ルート・リクエスト

職場から運転し、顧客A、B、Cを訪問する場合は、次のようになります。

- ルートには固定の出発地として職場があります。

- ルートには、非固定の中間地として顧客A、B、Cがあります。これらの場所が並べ替えられて、全体的なルートが最適化されます。

- 戻されるルートは、職場から最初の並べ替えられた場所、さらに2番目の並べ替えられた場所を通過して最終目的地に到達する、最適化された開いた行程ルートです。

例: TSPの閉じた行程ルート・リクエスト

職場から運転し、顧客A、B、Cを訪問し、職場に戻る場合は、次のようになります。

- ルートには固定の出発地として職場があります。職場は固定の目的地としても使用されます。<end_location>要素はルート・リクエストで指定しないでください。ルーティング・エンジンは、閉じた行程のリクエストを検出すると、最後の非固定の場所から職場までのサブルートを自動的に追加します。

- ルートには、非固定の中間地として顧客A、B、Cがあります。これらの場所が並べ替えられて、全体的なルートが最適化されます。

- 戻されるルートは、職場から最初の並べ替えられた場所、さらに2番目と3番目の並べ替えられた場所を通過して最終的に出発地に戻る、最適化された閉じた行程ルートです。

TSPルート・リクエストには、各サブルートに固有の複数の属性を含めることができます。これらの属性には、return_subroutes、return_subroute_edge_idsおよびreturn_subroute_geometryが含まれます。これらの属性については、「ルート・リクエストXMLスキーマ定義」で説明しています。

13.1.4 一括ルート・リクエスト

一括ルート・リクエストは、バッチ・モード・リクエスト(「バッチ・モード・ルート・リクエスト」で説明)と個別のルート・リクエストのハイブリッドです。一括ルート・リクエストは、複数の単純、単純マルチアドレスおよびTSPルート・リクエストをルーティング・エンジンに対する1つのリクエストで処理する方法です。バッチ・モード・リクエストの一括処理は許可されていません。

バッチ・モード・リクエストと同様に、一括ルート・リクエストの一番外側の要素は<batch_route_request>です。バッチ・モード・リクエストとは異なり、一括ルート・リクエストにはバッチ・リクエストの内部に1つ以上の<route_request>要素がネストされています。

一括ルート・リクエストでは、含まれる<batch_route_request>要素に関連する属性はすべて無視されます。かわりに、ネストされた<route_request>要素に関連付けられた属性が個々のルートの処理時に使用されます。これにより、ユーザーは単一の一括個別ルート・リクエスト内に単純、単純マルチアドレスおよびTSPの各リクエストを混在させることができます。

一括ルート・リクエストは、最速ルートを最短ルートと比較するなど、属性の異なる単一のルート・リクエストの複数のバリエーションを送信し、結果を比較する場合に役立ちます。

一括ルート・リクエスト内の個々のルート・リクエストでは、単純ルート・リクエストの任意の属性を使用できます。これらは、単純マルチアドレス・リクエストおよびTSPルート・リクエストの任意のサブルート固有属性も使用できます。

一括ルート・リクエスト内のすべての個々のルート・リクエストはスタンドアロンです。これらはバッチ内の他のルート・リクエストに影響しません。

13.1.5 バッチ・モード・ルート・リクエスト

バッチ・モード・ルート・リクエストには、1つの<start_location>要素および1つ以上の<end_location>要素が含まれます。

バッチ・モード・ルート・リクエストの結果には、複数のルートが含まれます。各ルートは、出発地から目的地の1つまでのルートです。バッチ・モード・リクエスト内の各ルートは、共有出発地を除き、他のすべてのルートから完全に分離されます。

バッチ・モード・ルート・リクエストには、複数のバッチ・モード固有属性を含めることができます。これらの属性には、cutoff_distanceおよびsort_by_distanceが含まれます。これらの属性については、「ルート・リクエストXMLスキーマ定義」で説明しています。

13.2 ルーティング・エンジンのデプロイ

ルーティング・エンジンのデプロイには、次の主要なタスクが含まれます。

- WebLogic Serverの準備

- routeserver.earファイルの解凍

- web.xmlファイルの編集

- WebLogic Serverへのルーティング・エンジンのデプロイ

13.2.1 WebLogic Serverの準備

ルーティング・エンジンをデプロイする前に、管理対象サーバーをWebLogic Server (WLS)に作成する必要があります。管理対象サーバーには、ヒープ内に少なくとも4GBのメモリーが必要です。ヒープに割り当てられるメモリーが多いほど、キャッシュに保持できるローカル・パーティションが増えます。キャッシュ内に保持できるパーティション数を増やすことは、ルーティング・エンジンのパフォーマンスを向上させる単一の最適な方法です。

ルーティング・エンジンを管理対象サーバーに正常にデプロイするには、サーバーにデータ・ソースが関連付けられている必要があります。このデータ・ソースは、道路ネットワーク・データおよびユーザー・データを含むデータベース・スキーマへの接続のプールを提供します。

WLSワーク・マネージャを作成し、管理対象サーバーに関連付けることをお薦めします。ワーク・マネージャは、管理対象サーバーで同時に実行できるリクエスト数に関する制約を格納します。管理対象サーバーがリクエストの拒否を開始するまでにキューイングできるリクエスト数に対する制約も格納します。

13.2.2 routeserver.earファイルの解凍

routeserver.ear.zipファイルを解凍するには、次の手順に従います。

これらの手順の例では、次の値が使用されます。

- WebLogic Serverホーム($WLS_HOME)は/scratch/software/Oracle/Middleware/user_projects/domains/spatial/です。

- アプリケーション・デプロイメント・ディレクトリは$WLS_HOME/applications/です。

ただし、環境に適した値が異なる場合は、それを使用してください。

1. routeserver.ear.zipをアプリケーション・デプロイメント・ディレクトリにコピーします。

cp routeserver.ear.zip $WLS_HOME/applications/

2. routeserver.ear.zipを解凍します。

cd $WLS_HOME/applications/
unzip routeserver.ear.zip

13.2.3 web.xmlファイルの編集

この項では、ルーティング・エンジンを正しくデプロイするために行う必要のある、web.xmlファイル内のパラメータ値の変更について説明します。(ルーティング・エンジンの動作を変更するために変更できる追加パラメータもあります。)

- container_dsパラメータを、管理対象サーバーに関連付けられているデータ・ソースのJNDI名に変更します。たとえば、JNDI/NorthAmericanDSなどです。

- routeserver_network_nameパラメータを、ルーティング・エンジンの道路ネットワーク・データに構築されたネットワーク・データ・モデル(NDM)ネットワークの名前に変更します。たとえば、NorthAmericanNetworkなどです。

- WLS管理対象サーバーにワーク・マネージャが関連付けられている場合は、wl-dispatch-policyパラメータ値をワーク・マネージャの名前に変更します。たとえば、NorthAmericanWMなどです。

- geocoder_typeパラメータがhttpclientまたはNoneに設定されていることを確認します。(thinclientはサポートされなくなりました。)

- httpclientに設定されている場合は、geocoder_http_urlをジオコーダ・サーブレットのURLに設定します。たとえば、http://localhost:8888/geocoder/gcserverなどです。

- HTTPプロキシが使用されている場合は、geocoder_http_proxy_hostおよびgeocoder_http_proxy_portも指定します。プロキシが存在しない場合、この2つのパラメータは無視できます。

- 必要に応じて、logfile_nameパラメータ値を変更します。デフォルトでは、logfile_nameパラメータはlog/RouteServer.logに設定されます。このデフォルトの相対パスには、ルーティング・エンジンがインストールされている場所からの相対のlogという名前のサブディレクトリが含まれます。logfile_nameパラメータを/scratch/logs/RouteServer.logなどの絶対パスに設定することもできます。

- partition_cache_sizeパラメータを変更します。このパラメータのデフォルト値は70ですが、管理対象サーバーのヒープに割り当てられているメモリー量に応じて変更することが必要になる場合があります。次の式を使用して、キャッシュ・サイズに適した開始点を取得できます。
partition_cache_size = (NodesPerGigabyte/AvgNodesPartition)*UsableMemory

説明:

- NodesPerGigabyteは、GB当たりのノード数です。(この値は変更しないでください。2013年12月時点のデータ・セットでは、この値は15,000,000、つまり150万です。)

- AvgNodesPartitionは、ローカル・パーティション当たりの平均ノード数です。これには、高速道路パーティション0は含まれません。高速道路パーティションのメモリーは、割り当てられたヒープ・サイズから1GBを引いて計算されます。北米データ・セットの場合、AvgNodesPartition値は約26,000です。パーティション当たりの実際の平均ノード数は、次の問合せを使用して確認できます。

SELECT AVG(COUNT(node_id))
FROM node
WHERE partition_id>0
GROUP BY partition_id;

- UsableMemoryは、管理対象サーバーが割り当てたギガバイト単位のヒープ・サイズから1GBを引いた値です。

この式では、partition_cache_sizeパラメータに対して安全な数が生成されます。使用されるユーザー情報のタイプと処理される同時リクエストの平均数によっては、この数値にさらに15%から20%を追加できる場合があります。この数値を変更する前に、WLSコンソールを使用して、ヒープ使用率を監視してください。

ルーティング・エンジンの実行中にヒープを監視して、この数値を増減できます。ただし、この値を大きく設定しすぎると、管理対象サーバーのメモリーが不足することがあります。

13.2.4 WebLogic Serverへのルーティング・エンジンのデプロイ

WebLogic Serverにルーティング・エンジンをデプロイするには、次の手順に従います。

1. WLSコンソールにログインします。

2. 「デプロイ」→「インストール」をクリックします。

3. 「パス」アプリケーション・デプロイメント・ディレクトリに設定されていることを確認します(「routeserver.earファイルの解凍」を参照)。

4. routeserver.ear (ディレクトリ)を選択し、「次へ」をクリックします。

5. 「このデプロイメントをアプリケーションとしてインストールする」ターゲット・スタイルを選択し、「次へ」をクリックします。

6. ルーティング・エンジンをデプロイできるサーバーのリストで、作成した管理対象サーバーの名前を選択し、「次へ」をクリックします。

7. デプロイメント名がrouteserverであることを確認し、「終了」をクリックします。

ルーティング・エンジンがデプロイされた後で、ルーティング・エンジン・テスト問合せのセットでデプロイメントをテストできます。たとえば、管理対象サーバーがポート7003で稼働するように設定されている場合は、ルーティング・エンジン・サーブレットをhttp://localhost:7003/routeserver/からテストできます。

これらの問合せは、様々なタイプのルート・リクエストを実行できます。これらの問合せには北米の住所が含まれますが、住所は他のデータ・セットのWebページで簡単に操作できます。

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

この項では、XML形式のルート・リクエストをルーティング・エンジンに送信する方法、およびルート・リクエスト(入力)とルート・レスポンス(出力)のXMLスキーマ定義(XSD)について説明します。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)

- distance_unit: kilometer、mile (デフォルト)またはmeter

- length_unit: フィートの場合はus (デフォルト)、メートルの場合はmetric

- time_unit: hour、minute (デフォルト)またはsecond

- weight_unit: トンの場合はus (デフォルト)、メートル・トンの場合はmetric

- pre_geocoded_locations (出発地および目的地を、入力場所(住所指定または点)とジオコード済の場所のどちらで指定するか): true (ジオコード済の場所)またはfalse (デフォルト。入力場所)

- driving_directions_detail: high、medium (デフォルト)またはlow

- optimize_route: trueまたはfalse (デフォルト)

- route_type: open (デフォルト)またはclosed

- vehicle_type: auto (デフォルト)またはtruck

- truck_type: delivery、public、residentまたはtrailer。(デフォルトなし)

- truck_height: length_unitsの浮動小数点数

- truck_length: length_unitsの浮動小数点数

- truck_per_axle_weight: weight_unitsの浮動小数点数

- truck_weight: weight_unitsの浮動小数点数

- truck_width: length_unitsの浮動小数点数

一括ルート・リクエストは、<batch_route_request>要素にカプセル化された1つ以上の単純(単一、マルチアドレスまたはTSP)リクエストのグループです。<batch_route_request>要素に関連する属性はすべて無視されます。カプセル化されたすべてのリクエストは単純リクエストであるため、これらは前にリストした属性を使用します。

バッチ・モード・ルート・リクエストでは、リクエストID、出発地、および1つ以上の目的地を指定する必要があります。ID属性は、場所ごとに必要です。単純リクエストに使用されるほとんどの属性は、バッチ・モードでは意味がありません。バッチ・モード・ルート・リクエストで次の属性の1つ以上を使用できますが、このリストにない属性を使用すると例外が発生する原因となります。

- route_preference: fastestまたはshortest (デフォルト)

- road_preference: highway (デフォルト)またはlocal

- distance_unit: kilometer、km、mile (デフォルト)またはmeter

- time_unit: hour、minute (デフォルト)またはsecond

- sort_by_distance (戻されるルートを、出発地から目的地までの距離で昇順にソートするかどうか): trueまたはfalse (デフォルト)

- cutoff_distance (出発地から目的地までの距離が、指定された距離以下のルートのみを戻す): (数値。デフォルトは制限なし)

- pre_geocoded_locations (出発地および目的地を、入力場所(住所指定または点)とジオコード済の場所のどちらで指定するか): true (ジオコード済の場所)またはfalse (デフォルト。入力場所)

この項には次のトピックが含まれます:

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

- ルート・リクエストXMLスキーマ定義

- ルート・レスポンスXMLスキーマ定義

- バッチ・モード・ルート・リクエストおよびバッチ・モード・ルート・レスポンスの例

- 一括ルート・リクエストXMLスキーマ定義

- 一括ルート・レスポンスXMLスキーマ

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

この項では、ルート・リクエストと、そのリクエストによって生成されるルート・レスポンスのXMLの例を示します。リクエストには、指定した住所、経度と緯度の座標により指定される点、またはジオコード済の場所を使用できます。利用可能な要素と属性に関する参照情報については、「ルート・リクエストXMLスキーマ定義」のリクエストと「ルート・レスポンスXMLスキーマ定義」の応答を参照してください。

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

例13-1は、5.67メートル・トンの配送トラックでの、住所を指定した2つのオフィス(Massachusetts州Waltham市とNew Hampshire州Nashua市)間の最速ルート(可能な場合は、高速道路を使用)の単純リクエストを示しています。レスポンスには、距離にキロメートル、時間に分を使用した各セグメントの運転方向が含まれます。このリクエストでは、出発地と目的地のジオコード情報も戻されます。

<?xml version="1.0" standalone="yes"?>
<route_request
id="8"
route_preference="fastest"
road_preference="highway"
vehicle_type="truck"
truck_type="delivery"
truck_weight="5.67"
return_driving_directions="true"
return_locations="true"
distance_unit="km"
time_unit="minute"
weight_unit="metric">
<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-2に、例13-1のリクエストによって生成されたレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)

<!-- Oracle Routeserver version 12.1.0.1.0 (data version 11.1.0.7.1) -->
<route_response>
<route id="8" step_count="12"
distance="46.07216796875" distance_unit="km"
time="31.133371988932293" time_unit="minute"
start_location="1" end_location="2">
<start_location>
<location id="1"
longitude="-71.25962" latitude="42.39741"
house_number="399" street="WINTER ST"
city="WALTHAM" state="MA" country="US"
driving_side="R"
postal_code="02451"
edge_id="906810462" percent="0.0"/>
</start_location>
<segment sequence="1"
instruction="Start out on Winter St (Going Southwest)"
distance="0.0" time="0.0"/>
<segment sequence="2"
instruction="Turn RIGHT onto Wyman St (Going North)"
distance="0.3453199939727783" time="0.3597083270549774"/>
<segment sequence="3"
instruction="Take RAMP toward Peabody"
distance="0.43125000953674314" time="0.3478285253047943"/>
<segment sequence="4"
instruction="Merge onto I-95 N/RT-128 N (Going North)"
distance="9.598520091056823" time="6.1528975268205"/>
<segment sequence="5"
instruction="Continue on toward Burlington"
distance="0.0" time="0.0"/>
<segment sequence="6"
instruction="Stay STRAIGHT to go onto RAMP (Going East)"
distance="0.22952000427246094" time="0.23908333778381347"/>
<segment sequence="7"
instruction="Continue on toward Lowell"
distance="0.5157099990844727" time="0.5371979157129924"/>
<segment  sequence="8"
instruction="Stay STRAIGHT to go onto US-3 N (Going Northwest)"
distance="33.26371000862122" time="21.322891048093638"/>
<segment sequence="9"
instruction="Take EXIT 1 toward S. Nashua"
distance="0.6134100036621094" time="0.5454034169514974"/>
<segment sequence="10"
instruction="Continue on toward So. Nashua"
distance="0.27333999633789063" time="0.41415150960286456"/>
<segment sequence="11"
instruction="Turn LEFT onto Spit Brook Rd (Going West)"
distance="0.8013799934387207" time="1.2142121195793152"/>
<segment sequence="12"
instruction="Turn RIGHT onto Oracle Dr (Going North)"
distance="0.0" time="0.0"/>
<end_location>
<location id="2"
longitude="-71.45937" latitude="42.70783"
house_number="1" street="ORACLE DR"
city="NASHUA" state="NH" country="US"
driving_side="R"
postal_code="03062"
edge_id="22325991" percent="0.0"/>
</end_location>
</route>
</route_response>

例13-3 経度/緯度点で場所を指定したルート・リクエスト

例13-3は、経度/緯度点で指定した4つの場所間の閉じた行程TSPの最短ルート(可能な場合は、高速道路を使用)のリクエストを示しています。(この4つの場所は、California州San Francisco市の、World Trade Center、Golden Gate Park、3001 Larkin Streetおよび100 Flower通りに対応しています。)ルートはWorld Trade Centerの固定位置で開始および終了しますが、他の3つの場所は最適ルートを生成するための並替えの対象となります。ルート内のすべての場所についてジオコードからの情報が戻されます。ジオメトリはサブルート・レベルで表示され、エッジIDはセグメント・レベルの運転方向で表示されます。

<?xml version="1.0" standalone="yes"?>
<route_request id="8"
route_preference="shortest"
route_type="closed"
optimize_route="true"
road_preference="highway"
return_locations="true"
return_driving_directions="true"
return_subroutes="true"
return_route_geometry="false"
return_subroute_geometry="true"
return_segment_geometry= "false"
return_segment_edge_ids= "true"
>
<start_location>
<input_location id="1" longitude="-122.39436" latitude="37.79579"/>
</start_location>
<location>
<input_location id="2" longitude="-122.45412" latitude="37.7714" />;
</location>
<location>
<input_location id="3" longitude="-122.422" latitude="37.80551" />
</location>
<location>
<input_location id="4" longitude="-122.40459" latitude="37.74211" />
</location>
</route_request>

例13-4 経度/緯度点で場所を指定したルート・リクエストに対するレスポンス

例13-4に、例13-3のリクエストによって生成されたレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)

<!-- Oracle Routeserver version 12.1.0.2.0 (data version 11.1.0.7.1) -->
<route_response>
<route id="8" step_count="88"
distance="15.105344411681319" distance_unit="mile"
time="35.63843688964844" time_unit="minute"
start_location="1" end_location="1">
<subroute id="1" step_count="5"
distance="1.8589950065634127" distance_unit="mile"
time="4.305604044596354" time_unit="minute"
start_location="1" end_location="3">
<subroute_geometry>
<LineString><coordinates>
-122.39436,37.79579 -122.39436,37.79579 -122.39454,37.79601
-122.39467,37.79614 -122.39486,37.79633 -122.39499,37.79647
-122.39529,37.79678 -122.39558,37.79709 -122.39592,37.79747
-122.3963,37.7979 -122.39646,37.79808 -122.3969,37.79858
-122.39741,37.79916 -122.39755,37.79929 -122.39776,37.79918
-122.39793,37.79907 -122.39811,37.79899 -122.39821,37.79896
-122.39836,37.79892 -122.39867,37.79889 -122.39986,37.79874
-122.40104,37.7986 -122.40223,37.79845 -122.40302,37.79835
-122.40308,37.79834 -122.40349,37.79828 -122.40384,37.79824
-122.40466,37.79813 -122.40545,37.79802 -122.40549,37.79802
-122.4062,37.79794 -122.40622,37.79794 -122.40664,37.79789
-122.40707,37.79816 -122.40789,37.79872 -122.40846,37.7991
-122.40898,37.7995 -122.41017,37.80031 -122.41038,37.80045
-122.41078,37.80073 -122.41089,37.8008 -122.41094,37.80084
-122.41136,37.80112 -122.41143,37.80118 -122.41248,37.80188
-122.41254,37.80193 -122.41289,37.80218 -122.41367,37.80274
-122.41488,37.80355 -122.41547,37.80396 -122.41607,37.80441
-122.41657,37.80475 -122.41681,37.80492 -122.4172,37.80519
-122.4178,37.8056 -122.41837,37.80598 -122.41873,37.80593
-122.42035,37.80573 -122.422,37.80551
-122.42199999992847,37.805509999663826
</coordinates></LineString>
</subroute_geometry>
<start_location>
<location id="1"
longitude="-122.39436" latitude="37.79579"
house_number="" street="HERB CAEN WAY"
city="SAN FRANCISCO" state="CA" country="US"
driving_side="R"
postal_code="94111"
edge_id="724791174" percent="1.0"/>
</start_location>
<segment sequence="1"
instruction="Start out on The Embarcadero (Going Northwest)"
distance="0.29822904401544625" time="0.49993750055631003">
<segment_edge_ids><edge_ids>
724791174, 724791175, 733049363, 915793201, 915793202, 830932896,
112011102, 112011103, 830934259, 830934260, 726169597, 112011105,
37830229
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="2"
instruction="Turn LEFT onto Broadway (Going Southwest)"
distance="0.5093705394140182" time="1.2420151789983114">
<segment_edge_ids><edge_ids>
-24571168, -724946174, -724946173, -23598782, -23621077, -23598783,
-23598784, -23598786, -23598787, -23598788, -23598789, -23598791,
-23598792
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="3"
instruction="Turn SLIGHT RIGHT onto Columbus Ave (Going Northwest)"
distance="0.8505250718279074" time="2.07386361459891">
<segment_edge_ids><edge_ids>
23601001, 23601002, 23601003, 23601004, 830239101, 830239102,
799420615, 23601006, 23601007, 23601008, 23737804, 23601009,
23601010, 23601011, 23737805, 23601012, 754219681, 754219682,
23622414, 754224948, 754224949
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="4"
instruction="Turn SLIGHT LEFT onto North Point St (Going West)"
distance="0.20086994241069608" time="0.48978787660598755">
<segment_edge_ids><edge_ids>
-23612405, -23612406, -23612407
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="5"
instruction="Turn LEFT onto Larkin St (Going South)"
distance="2.3560371803568745E-8" time="5.744803956986288">
<segment_edge_ids><edge_ids>
-23609029
</edge_ids></segment_edge_ids>
</segment>
<end_location>
<location id="3"
longitude="-122.42199999966279" latitude="37.80551000007165"
house_number="2999" street="LARKIN ST" city="SAN FRANCISCO"
state="CA" country="US"
driving_side="R"
postal_code="94109"
edge_id="23609029" percent="0.9999996412873026"/>
</end_location>
</subroute>
<subroute id="2" step_count="32"
distance="4.0150478493172495" distance_unit="mile"
time="9.790025838216145" time_unit="minute"
start_location="3" end_location="2">
<subroute_geometry>
<LineString><coordinates>
-122.42199999992847,37.805509999663826 -122.422,37.80551
-122.42364,37.8053 -122.42345,37.80436 -122.42327,37.80342
-122.42482,37.80322 -122.42496,37.8032 -122.42545,37.80314
-122.42656,37.803 -122.42638,37.80207 -122.4262,37.80111
-122.42782,37.8009 -122.42947,37.80069 -122.43111,37.80048
-122.43276,37.80026 -122.43439,37.80006 -122.43605,37.79985
-122.43597,37.79943 -122.43588,37.79896 -122.43751,37.79874
-122.43742,37.79828 -122.43733,37.79781 -122.43895,37.79759
-122.43877,37.79667 -122.44041,37.79645 -122.44025,37.79554
-122.4419,37.7953 -122.44173,37.79439 -122.44153,37.79343
-122.44308,37.79323 -122.44317,37.79322 -122.44328,37.79321
-122.44476,37.79302 -122.44487,37.79301 -122.44496,37.793
-122.44643,37.7928 -122.4463,37.79188 -122.44614,37.79099
-122.44595,37.79011 -122.44577,37.78924 -122.44559,37.78836
-122.44697,37.78818 -122.44688,37.78775 -122.44687,37.78769
-122.44678,37.78726 -122.44676,37.78705 -122.44671,37.78679
-122.44675,37.78651 -122.4468,37.78635 -122.44689,37.78618
-122.44697,37.78603 -122.44749,37.7855 -122.44766,37.78538
-122.44792,37.78513 -122.448,37.78507 -122.44814,37.78496
-122.44929,37.78468 -122.45012,37.78448 -122.45015,37.78432
-122.4502,37.78418 -122.45034,37.78396 -122.45041,37.78383
-122.45043,37.78369 -122.45012,37.78218 -122.45112,37.78205
-122.45109,37.78192 -122.45082,37.78064 -122.45186,37.78049
-122.45287,37.78037 -122.45385,37.78023 -122.45374,37.77943
-122.45367,37.77905 -122.45349,37.77817 -122.45339,37.77781
-122.45332,37.77763 -122.45318,37.77685 -122.45303,37.77596
-122.45299,37.77574 -122.45283,37.77499 -122.45297,37.77497
-122.45287,37.77443 -122.45279,37.77404 -122.45262,37.7731
-122.45241,37.77215 -122.45276,37.77206 -122.45301,37.77195
-122.45346,37.77172 -122.45387,37.77153 -122.45398,37.77148
-122.45412868777395,37.77142244344235
</coordinates></LineString>
</subroute_geometry>
<start_location>
<location id="3"
longitude="-122.42199999966279" latitude="37.80551000007165"
house_number="2999" street="LARKIN ST" city="SAN FRANCISCO"
state="CA" country="US"
driving_side="R"
postal_code="94109"
edge_id="23609029" percent="0.9999996412873026"/>
</start_location>
<segment sequence="1"
instruction="Start out on Larkin St (Going North)"
distance="2.3560371803568745E-8" time="5.7448039569862884E-8">
<segment_edge_ids><edge_ids>
23609029
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="2"
instruction="Turn LEFT onto North Point St (Going West)"
distance="0.09072267445473188" time="0.22121211687723796">
<segment_edge_ids><edge_ids>
-23612408
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="3"
instruction="Turn LEFT onto Polk St (Going South)"
distance="0.1314981638707435" time="0.3206363519032796">
<segment_edge_ids><edge_ids>
-23614397, -23614396
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="4"
instruction="Turn RIGHT onto Francisco St (Going West)"
distance="0.1819921735430389" time="0.443757571776708">
<segment_edge_ids><edge_ids>
-23604420, -120906034, -916007650, -916007649
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="5"
instruction="Turn LEFT onto Franklin St (Going South)"
distance="0.13209470069661014" time="0.32209091186523436">
<segment_edge_ids><edge_ids>
-23604500, -23604499
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="6"
instruction="Turn RIGHT onto Lombard St (Going West)"
distance="0.544926363604202"
time="1.3287121295928954">
<segment_edge_ids><edge_ids>
-23609690, -23609691, -23609692, -23609693, -23609694,
-23609695
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="7"
instruction="Turn LEFT onto Fillmore St (Going South)"
distance="0.06220717119887626"
time="0.15168182055155435">
<segment_edge_ids><edge_ids>
-23604040, -23604039
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="8"
instruction="Turn RIGHT onto Greenwich St (Going West)"
distance="0.09030634551112576"
time="0.22019697825113932">
<segment_edge_ids><edge_ids>
-23605619
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="9"
instruction="Turn LEFT onto Steiner St (Going South)"
distance="0.06502205890116725" t
time="0.15854545434316">
<segment_edge_ids><edge_ids>
-23618095, -23618094
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="10"
instruction="Turn RIGHT onto Filbert St (Going West)"
distance="0.08977195129603127"
time="0.21889394124348957">
<segment_edge_ids><edge_ids>
-23603994
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="11"
instruction="Turn LEFT onto Pierce St (Going South)"
distance="0.06433853285001388"
time="0.15687878926595053">
<segment_edge_ids><edge_ids>
-23614117
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="12"
instruction="Turn RIGHT onto Union St (Going West)"
distance="0.09084695019464499"
time="0.22151514689127605">
<segment_edge_ids><edge_ids>
-23619255
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="13"
instruction="Turn LEFT onto Scott St (Going South)"
distance="0.06349965975356134"
time="0.15483333269755045">
<segment_edge_ids><edge_ids>
-23616716
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="14"
instruction="Turn RIGHT onto Green St (Going West)"
distance="0.09162990537119692"
time="0.2234242598215739">
<segment_edge_ids><edge_ids>
-23605539
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="15"
instruction="Turn LEFT onto Divisadero St (Going South)"
distance="0.13081463781959013"
time="0.3189696947733561">
<segment_edge_ids><edge_ids>
-23602190, -23602189
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="16"
instruction="Turn RIGHT onto Broadway (Going West)"
distance="0.2711613656927398"
time="0.6611817995707194">
<segment_edge_ids><edge_ids>
-829713884, -829713883, -829713879, -829713878,
-829713874, -829713887,-829713886
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="17"
instruction="Turn LEFT onto Lyon St (Going South)"
distance="0.3103461147339876"
<segment sequence="16"
instruction="Turn RIGHT onto Broadway (Going West)"
distance="0.2711613656927398"
time="0.6611817995707194">
<segment_edge_ids><edge_ids>
-829713884, -829713883, -829713879, -829713878,
-829713874, -829713887,-829713886
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="17"
instruction="Turn LEFT onto Lyon St (Going South)"
distance="0.3103461147339876"
time="0.7567272663116456">
<segment_edge_ids><edge_ids>
-28479560, -23609965, -23609964, -23609963, -23609962
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="18"
instruction="Turn RIGHT onto Sacramento St (Going West)"
distance="0.07639346451339481"
time="0.18627273241678874">
<segment_edge_ids><edge_ids>
-23615823
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="19"
instruction="Turn LEFT onto Presidio Ave (Going South)"
distance="0.09716025402078811"
time="0.23690908749898273">
<segment_edge_ids><edge_ids>
-754763527, -754763526,-23747787
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="20"
instruction="Turn SLIGHT RIGHT onto RAMP (Going South)"
distance="0.054849932668282114"
time="0.1337424119313558">
<segment_edge_ids><edge_ids>
-23747788
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="21"
instruction="Turn SLIGHT RIGHT onto Masonic Ave (Going Southwest)"
distance="0.09798048860074304"
time="0.23890908559163412">
<segment_edge_ids><edge_ids>
-723450070, -723450073
</edge_ids></segment_edge_ids>
</segment>
time="0.7567272663116456">
<segment_edge_ids><edge_ids>
-28479560, -23609965, -23609964, -23609963, -23609962
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="18"
instruction="Turn RIGHT onto Sacramento St (Going West)"
distance="0.07639346451339481"
time="0.18627273241678874">
<segment_edge_ids><edge_ids>
-23615823
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="19"
instruction="Turn LEFT onto Presidio Ave (Going South)"
distance="0.09716025402078811"
time="0.23690908749898273">
<segment_edge_ids><edge_ids>
-754763527, -754763526,-23747787
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="20"
instruction="Turn SLIGHT RIGHT onto RAMP (Going South)"
distance="0.054849932668282114"
time="0.1337424119313558">
<segment_edge_ids><edge_ids>
-23747788
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="21"
instruction="Turn SLIGHT RIGHT onto Masonic Ave (Going Southwest)"
distance="0.09798048860074304"
time="0.23890908559163412">
<segment_edge_ids><edge_ids>
-723450070, -723450073
</edge_ids></segment_edge_ids>
</segment>
<end_location>
<location id="2"
longitude="-122.45412868707837" latitude="37.771422441619094"
house_number="" street="JOHN F KENNEDY DR"
city="SAN FRANCISCO" state="CA" country="US"
driving_side="R"
postal_code="94118"
edge_id="728011751" percent="0.5203619908971352"/>
</end_location>
</subroute>
<subroute id="3" step_count="36"
distance="4.848880093441248" distance_unit="mile"
time="11.788133748372395" time_unit="minute"
start_location="2" end_location="4">
<subroute_geometry>
<LineString><coordinates>
-122.45412868777395,37.77142244344235 -122.45429,37.77136
-122.4546,37.77123 -122.45483,37.77114 -122.4551,37.77103
-122.4552,37.77097 -122.45533,37.77086 -122.45501,37.77098
-122.4547,37.77107 -122.45447,37.77116 -122.45424,37.77124
-122.45396,37.77135 -122.45384,37.7714 -122.45382,37.77141
-122.45369,37.77143 -122.45358,37.77144 -122.45347,37.77143
-122.4529,37.77133 -122.45222,37.77123 -122.45205,37.77031
-122.45043,37.77051 -122.45021,37.76958 -122.44967,37.76964
-122.44945,37.76872 -122.44839,37.76885 -122.44756,37.76895
-122.44672,37.76907 -122.44593,37.76917 -122.44555,37.76733
-122.44473,37.76743 -122.44467,37.76702 -122.44456,37.76645
-122.44451,37.76631 -122.44418,37.76596 -122.44361,37.76539
-122.44347,37.76536 -122.44273,37.76532 -122.44246,37.7653
-122.44232,37.76529 -122.44192,37.76527 -122.44202,37.76513
-122.44229,37.76511 -122.44232,37.76508 -122.44232,37.765
-122.44219,37.76499 -122.44209,37.76496 -122.44107,37.76443
-122.43976,37.76376 -122.4392,37.76348 -122.43908,37.76344
-122.43795,37.76329 -122.43781,37.7633 -122.43709,37.76333
-122.43528,37.76346 -122.43523,37.76312 -122.43519,37.76283
-122.43516,37.76264 -122.43515,37.76258 -122.43511,37.76207
-122.43504,37.76128 -122.435,37.76089 -122.43388,37.76095
-122.43278,37.76101 -122.43057,37.76115 -122.43048,37.76036
-122.43039,37.75958 -122.42824,37.75972 -122.42816,37.7589
-122.42805,37.75806 -122.42789,37.75807 -122.42583,37.75821
-122.42566,37.75822 -122.42347,37.75836 -122.42126,37.75851
-122.42047,37.75854 -122.42028,37.75695 -122.41999,37.75696
-122.4197,37.75698 -122.41892,37.75702 -122.41874,37.75545
-122.41766,37.75553 -122.41659,37.75557 -122.41549,37.75563
-122.41533,37.75405 -122.41425,37.75412 -122.41385,37.75414
-122.41312,37.75417 -122.41204,37.75424 -122.41109,37.75428
-122.4102,37.75433 -122.41004,37.75276 -122.40913,37.75282
-122.40818,37.75287 -122.40733,37.75292 -122.40713,37.75133
-122.40617,37.75138 -122.40614,37.75103 -122.40613,37.75096
-122.40611,37.75088 -122.40602,37.75067 -122.40599,37.75051
-122.40578,37.75013 -122.40565,37.74987 -122.40529,37.74937
-122.40518,37.74924 -122.40506,37.74913 -122.40483,37.74896
-122.4045,37.74873 -122.40441,37.74867 -122.40437,37.74864
-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.40538,37.74284 -122.40565,37.7425
-122.40517,37.74233 -122.40459,37.74211
</coordinates></LineString>
</subroute_geometry>
<start_location>
<location id="2"
longitude="-122.45412868707837" latitude="37.771422441619094"
house_number="" street="JOHN F KENNEDY DR"
city="SAN FRANCISCO" state="CA" country="US"
driving_side="R"
postal_code="94118"
edge_id="728011751" percent="0.5203619908971352"/>
</start_location>
<segment sequence="1"
instruction="Start out on John F Kennedy Dr (Going West)"
distance="0.02898340160626114"
time="0.07067119280497233">
<segment_edge_ids><edge_ids>
-728011751, -728011750
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="2"
instruction="Stay STRAIGHT to go onto Kezar Dr (Going Southwest)"
distance="0.04787796125753919"
time="0.11674242814381917">
<segment_edge_ids><edge_ids>
-23747756
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="3"
instruction="Turn SHARP LEFT onto John F Kennedy Dr (Going East)"
distance="0.08222829797036355"
time="0.20049999952316283">
<segment_edge_ids><edge_ids>
23747762, 728012586, 724789094
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="4"
instruction="Stay STRAIGHT to go onto Oak St (Going Northeast)"
distance="0.09773193475050901"
time="0.2383030315240224">
<segment_edge_ids><edge_ids>
724764533, 724764534, -23738012
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="5"
instruction="Turn RIGHT onto Shrader St (Going South)"
distance="0.06425775409315192"
time="0.15668182373046874">
<segment_edge_ids><edge_ids>
-23617167
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="6"
instruction="Turn LEFT onto Page St (Going East)"
distance="0.08957932247692126"
time="0.21842424074808756">
<segment_edge_ids><edge_ids>
23613434
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="7"
instruction="Turn RIGHT onto Cole St (Going South)"
distance="0.06538868039329745"
time="0.1594394048055013">
<segment_edge_ids><edge_ids>
-23600911
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="8"
instruction="Turn LEFT onto Haight St (Going East)"
distance="0.02978934855322748"
time="0.07263635794321696">
<segment_edge_ids><edge_ids>
23605814
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="9"
instruction="Turn RIGHT onto Belvedere St (Going South)"
distance="0.06471136481056884"
time="0.1577878793080648">
<segment_edge_ids><edge_ids>
-23598189
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="10"
instruction="Turn LEFT onto Waller St (Going East)"
distance="0.1948176204828599"
time="0.4750302950541178">
<segment_edge_ids><edge_ids>
23620205, 23620204, 23620203, 23620202
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="11"
instruction="Turn RIGHT onto Delmar St (Going South)"
distance="0.12885726410065712"
time="0.3141969680786133">
<segment_edge_ids><edge_ids>
-23602039
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="12"
instruction="Turn LEFT onto Frederick St (Going East)"
distance="0.04533026592197986"
time="0.11053029696146648">
<segment_edge_ids><edge_ids>
23604508
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="13"
instruction="Turn RIGHT onto Masonic Ave (Going South)"
distance="0.2072702425733493"
time="0.5053939501444499">
<segment_edge_ids><edge_ids>
-932510459, -932510458, -23610757, -23610758,
-814886921
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="14"
instruction="Stay STRAIGHT to go onto Roosevelt Way (Going East)"
distance="0.04439197258915798"
time="0.1082424263159434">
<segment_edge_ids><edge_ids>
-814886920, -799371986, -799371985
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="15"
instruction="Turn RIGHT onto Levant St (Going Southwest)"
distance="0.03410178286259032"
time="0.0831515113512675">
<segment_edge_ids><edge_ids>
-799371984, -799371983
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="16"
instruction="Turn LEFT onto States St (Going Southeast)"
distance="0.4172186714314114"
time="1.0173182010650634">
<segment_edge_ids><edge_ids>
-829568337, -936352352, -936352351, -932495104,
932495103, 799475779
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="17"
instruction="Turn RIGHT onto Castro St (Going South)"
distance="0.1783259826221157"
time="0.4348181843757629">
<segment_edge_ids><edge_ids>
-754012004, -833349280, -833349279, -905543898,
-905543897, -753950604, -753950603
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="18"
instruction="Turn LEFT onto 18th St (Going East)"
distance="0.24272664830496957"
time="0.5918484846750895">
<segment_edge_ids><edge_ids>
23594648, 23594647, 23594646
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="19"
instruction="Turn RIGHT onto Sanchez St (Going South)"
distance="0.10895420615626991"
time="0.26566667556762696">
<segment_edge_ids><edge_ids>
-23616290, -23616291
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="20"
instruction="Turn LEFT onto 19th St (Going East)"
distance="0.11787733607670552"
time="0.2874242464701335">
<segment_edge_ids><edge_ids>
23594737
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="21"
instruction="Turn RIGHT onto Church St (Going South)"
distance="0.115211584951289"
time="0.2809242566426595">
<segment_edge_ids><edge_ids>
-23600503, -23600504
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="22"
instruction="Turn LEFT onto 20th St (Going East)"
distance="0.4155409305719238"
time="1.0132273137569427">
<segment_edge_ids><edge_ids>
732180611, 732180612, 23747712, 23594835,
23594834, 23594833
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="23"
instruction="Turn RIGHT onto Lexington St (Going South)"
distance="0.11038339612853318"
time="0.5921333312988282">
<segment_edge_ids><edge_ids>
-23609398
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="24"
instruction="Turn LEFT onto 21st St (Going East)"
distance="0.07448580061634548"
time="0.18162120978037516">
<segment_edge_ids><edge_ids>
23594883, 23594882, 23594881
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="25"
instruction="Turn RIGHT onto Mission St (Going South)"
distance="0.10895420141545431"
time="0.26566665967305503">
<segment_edge_ids><edge_ids>
-23611414
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="26"
instruction="Turn LEFT onto 22nd St (Going East)"
distance="0.17805878047745186"
time="0.4341666539510091">
<segment_edge_ids><edge_ids>
23594956, 23594955, 23594954
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="27"
instruction="Turn RIGHT onto Shotwell St (Going South)"
distance="0.10955073824132096"
time="0.2671212196350098">
<segment_edge_ids><edge_ids>
-23617156
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="28"
instruction="Turn LEFT onto 23rd St (Going East)"
distance="0.28101037926858485"
time="0.6851969718933105">
<segment_edge_ids><edge_ids>
23595024, 799561724, 799561725, 23595022,
23595021, 23595020
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="29"
instruction="Turn RIGHT onto Florida St (Going South)"
distance="0.10886099698092727"
time="0.26543939908345543">
<segment_edge_ids><edge_ids>
-23604143
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="30"
instruction="Turn LEFT onto 24th St (Going East)"
distance="0.14851177530603368"
time="0.3621212085088094">
<segment_edge_ids><edge_ids>
23595090, 23595089, 23595088
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="31"
instruction="Turn RIGHT onto Hampshire St (Going South)"
distance="0.11043310832082466"
time="0.26927274068196616">
<segment_edge_ids><edge_ids>
-23605909
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="32"
instruction="Turn LEFT onto 25th St (Going East)"
distance="0.05257565439032596"
time="0.1281969706217448">
<segment_edge_ids><edge_ids>
23595179
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="33"
instruction="Turn RIGHT onto Potrero Ave (Going South)"
distance="0.050077673617465915"
time="0.1221060593922933">
<segment_edge_ids><edge_ids>
-724773368, -724773367
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="34"
instruction="Take RAMP toward Bayshore Blvd"
distance="0.03984341188503202"
time="0.09715151786804199">
<segment_edge_ids><edge_ids>
-915517048
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="35"
instruction="Stay STRAIGHT to go onto Bayshore Blvd(Going Southeast)"
distance="0.5910582184784158"
time="1.0831619163354238">
<segment_edge_ids><edge_ids>
-915517047, -120885637, -830210066, -776735343,
-776735342, -756632225, -756632224, -127815508,
-23621037, -23621038, -23621034, -756635722,
-756635721, -23597820, -756635724, -756635723
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="36"
instruction="Turn LEFT onto Flower St (Going East)"
distance="0.06390356064909457"
time="0.15581818421681723">
<segment_edge_ids><edge_ids>
-23604154, -23604155
</edge_ids></segment_edge_ids>
</segment>
<end_location>
<location id="4"
longitude="-122.40459" latitude="37.74211"
house_number="99" street="FLOWER ST" city="SAN FRANCISCO"
state="CA" country="US"
driving_side="R"
postal_code="94124"
edge_id="23604155" percent="0.0"/>
</end_location>
</subroute>
<subroute id="4" step_count="15"
distance="4.382421462359411" distance_unit="mile"
time="9.754673258463542" time_unit="minute"
start_location="4" end_location="1">
<subroute_geometry>
<LineString><coordinates>
-122.40459,37.74211 -122.40459,37.74211 -122.40431,37.74253
-122.40366,37.74342 -122.40322,37.74381 -122.40289,37.74515
-122.40268,37.74635 -122.40295,37.74675 -122.40311,37.747
-122.40327,37.74723 -122.40332,37.74737 -122.40342,37.74753
-122.40348,37.74767 -122.40354,37.74787 -122.40365,37.74821
-122.40367,37.74839 -122.40366,37.74857 -122.40358,37.74883
-122.40353,37.74897 -122.40343,37.74916 -122.40336,37.74926
-122.40329,37.74932 -122.4032,37.74936 -122.40306,37.7494
-122.40283,37.74944 -122.40283,37.74994 -122.40281,37.75019
-122.4028,37.75044 -122.40276,37.7505 -122.40266,37.75057
-122.40221,37.7506 -122.40231,37.75197 -122.40242,37.75326
-122.40254,37.75452 -122.40163,37.75458 -122.40178,37.75614
-122.40187,37.75714 -122.40198,37.75826 -122.40199,37.75842
-122.4021,37.75969 -122.40222,37.76095 -122.40235,37.76223
-122.40248,37.76352 -122.40254,37.76478 -122.40268,37.7661
-122.40282,37.76738 -122.40295,37.76865 -122.40306,37.76983
-122.40351,37.76981 -122.40363,37.76989 -122.40378,37.76999
-122.40382,37.77002 -122.40386,37.77004 -122.4036,37.77025
-122.40285,37.77086 -122.40226,37.77134 -122.40203,37.77153
-122.40166,37.77183 -122.40131,37.77211 -122.40113,37.77226
-122.39968,37.7734 -122.39956,37.7735 -122.39943,37.77361
-122.39723,37.77535 -122.39539,37.77679 -122.39499,37.77711
-122.39457,37.77743 -122.3943,37.77764 -122.3939,37.77795
-122.39356,37.77823 -122.39344,37.77832 -122.3933,37.77843
-122.39275,37.77886 -122.39259,37.77899 -122.39256,37.77902
-122.39239,37.77915 -122.39222,37.77929 -122.39203,37.77944
-122.39141,37.77994 -122.39108,37.7802 -122.39052,37.78062
-122.38974,37.78123 -122.38923,37.78161 -122.38911,37.78166
-122.38896,37.78173 -122.38863,37.78179 -122.38841,37.78181
-122.38814,37.7818 -122.38813,37.78195 -122.38811,37.7823
-122.38811,37.78254 -122.3881,37.78266 -122.38806,37.78316
-122.38802,37.78335 -122.38791,37.78477 -122.38789,37.78504
-122.3878,37.7861 -122.3878,37.78615 -122.38771,37.78707
-122.3877,37.78722 -122.38769,37.78747 -122.3877,37.78766
-122.38772,37.78791 -122.38779,37.78835 -122.38788,37.7888
-122.38794,37.78896 -122.38816,37.78937 -122.38838,37.78965
-122.38859,37.78984 -122.38935,37.79047 -122.38978,37.79082
-122.38992,37.79095 -122.39013,37.7912 -122.39028,37.79141
-122.39041,37.79166 -122.39049,37.79181 -122.39061,37.79205
-122.39071,37.79226 -122.39093,37.79252 -122.39117,37.79276
-122.3915,37.79303 -122.392,37.79344 -122.39233,37.79374
-122.39246,37.79387 -122.39257,37.79397 -122.39275,37.79414
-122.39303,37.7944 -122.39319,37.79455 -122.39335,37.79471
-122.39357,37.79494 -122.39374,37.79511 -122.39382,37.79518
-122.39407,37.79546 -122.39436,37.79579
</coordinates></LineString>
</subroute_geometry>
<start_location>
<location id="4"
longitude="-122.40459" latitude="37.74211"
house_number="99" street="FLOWER ST" city="SAN FRANCISCO"
state="CA" country="US"
driving_side="R"
postal_code="94124"
edge_id="23604155" percent="0.0"/>
</start_location>
<segment sequence="1"
instruction="Start out on Flower St (Going East)"
distance="0.0"
time="0.0">
<segment_edge_ids><edge_ids>
-23604155
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="2"
instruction="Turn LEFT onto Loomis St (Going Northeast)"
distance="0.1399739006534103"
time="0.341303030649821">
<segment_edge_ids><edge_ids>
23609757, 23609756
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="3"
instruction="Turn SLIGHT LEFT onto Barneveld Ave (Going North)"
distance="0.1780836365735976"
time="0.43422727584838866">
<segment_edge_ids><edge_ids>
23597607
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="4"
instruction="Turn SLIGHT LEFT onto Jerrold Ave (Going Northwest)"
distance="0.06884359716369064"
time="0.16786363919576008">
<segment_edge_ids><edge_ids>
127821131
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="5"
instruction="Stay STRAIGHT to go onto RAMP (Going Northwest)"
distance="0.04681538329577495"
time="0.11415150960286459">
<segment_edge_ids><edge_ids>
127821133
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="6"
instruction="Stay STRAIGHT to go onto Cesar Chavez (Going North)"
distance="0.1321568397517706"
time="0.22154166897137959">
<segment_edge_ids><edge_ids>
23621025, 830210057, 830210058, 120885622
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="7"
instruction="Turn LEFT onto Vermont St (Going North)"
distance="0.06916050646352936"
time="0.16863636970520018">
<segment_edge_ids><edge_ids>
754243248, 754243249
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="8"
instruction="Turn SLIGHT RIGHT onto 26th St (Going East)"
distance="0.036668115529443365"
time="0.08940908908843995">
<segment_edge_ids><edge_ids>
23595258
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="9"
instruction="Turn LEFT onto Kansas St (Going North)"
distance="0.27153420476451817"
time="0.6620909055074056">
<segment_edge_ids><edge_ids>
23608261, 23608260, 23608259
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="10"
instruction="Turn RIGHT onto 23rd St (Going East)"
distance="0.049897472846428766"
time="0.12166666984558105">
<segment_edge_ids><edge_ids>
23595010
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="11"
instruction="Turn LEFT onto Rhode Island St (Going North)"
distance="1.0569688657972653"
time="2.5772424399852754">
<segment_edge_ids><edge_ids>
933038005, 933038006, 933038001, 933038002,
23615271, 23615270, 23615269, 23615268,
23615267, 23615266, 23615265, 23615264,
23615263
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="12"
instruction="Turn LEFT onto Division St (Going West)"
distance="0.043919717429223945"
time="0.10709091226259868">
<segment_edge_ids><edge_ids>
-23602204, 829577422, 829577423
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="13"
instruction="Stay STRAIGHT to go onto RAMP (Going Northwest)"
distance="0.0055987076548075785"
time="0.013651515046755472">
<segment_edge_ids><edge_ids>
24552756
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="14"
instruction="Turn RIGHT onto Townsend St (Going Northeast)"
distance="1.192965882328057"
time="2.9088484485944113">
<segment_edge_ids><edge_ids>
916742043, 916742044, 916742041, 916742042,
916637669, 916637670, 916637671, 916637672,
23618959, 724706739, 724706740, 915025718,
915025719, 915025717, 23618956, 915025720,
915025721, 23618954, 916135978, 916135979,
916135980, 916135981, 916135982, 799424055,
23618951, 23618950, 799362044, 799362045,
724686775, -23841533
</edge_ids></segment_edge_ids>
</segment>
<segment sequence="15"
instruction="Turn LEFT onto The Embarcadero (Going North)"
distance="1.0898340975809355"
time="1.8269479304552079">
<segment_edge_ids><edge_ids>
807424014, 807424015, 733049265, 830425790,
830425791, 112011086, 799424653, 799424654,
724665449, 830416191, 830416192, 120886507,
120886508, 112011094, 112011097, 725001298,
830434313, 830434314, 724945050, 724945051,
830222369, 830222370, 23841522, 825450115,
825450116, 127810052, 724791171, 724791172,
799417573, 799417574, 724791173, 724791174
</edge_ids></segment_edge_ids>
</segment>
<end_location>
<location id="1"
longitude="-122.39436" latitude="37.79579"
house_number="" street="HERB CAEN WAY" city="SAN FRANCISCO"
state="CA" country="US"
driving_side="R" postal_code="94111"
edge_id="724791174"percent="1.0"/>
</end_location>
</subroute>
</route>
</route_response>

例13-5 住所で指定された場所、事前ジオコード済の場所および経度/緯度点での一括ルート・リクエスト

例13-5に、最速ルートをリクエストする自動車、最短ルートをリクエストする自動車、最速ルートをリクエストするトラックおよび最短ルートをリクエストするトラックとしての同じ2点間のルートの一括リクエストを示します。すべてのリクエストの場所は同じですが、これらは入力アドレス、事前ジオコード済の場所および経度/緯度点の組合せで指定されます。

<?xml version="1.0" standalone="yes"?>
<batch_route_request id="1">
<route_request id="1"
route_preference="fastest"
road_preference="highway"
return_locations="true"
return_driving_directions="true"
vehicle_type="auto"
distance_unit="mile"
time_unit="minute"
>
<start_location>
<input_location id="1">
<input_address>
<us_form1
street="875 ALMA ST"
lastline="94301"/>
</input_address>
</input_location>
</start_location>
<end_location>
<input_location id="2">
<input_address>
<us_form1
street="660 BLOSSOM HILL RD"
lastline="95123" />
</input_address>
</input_location>
</end_location>
</route_request>
<route_request id="2"
route_preference="shortest"
road_preference="highway"
pre_geocoded_locations="true"
return_locations="true"
return_driving_directions="true"
vehicle_type="auto"
distance_unit="mile"
time_unit="minute"
>
<start_location>
<pre_geocoded_location id="1">
<edge_id>23694266</edge_id>
<percent>0.0</percent>
<side>R</side>
</pre_geocoded_location>
</start_location>
<end_location>
<pre_geocoded_location id="2">
<edge_id>812218080</edge_id>
<percent>0.0</percent>
<side>R</side>
</pre_geocoded_location>
</end_location>
</route_request>
<route_request id="3"
route_preference="fastest"
road_preference="highway"
return_locations="true"
return_driving_directions="true"
vehicle_type="truck"
truck_height="13.6"
truck_length="75"
truck_weight="30"
distance_unit="mile"
time_unit="minute"
>
<start_location>
<input_location id="1"
longitude="-122.15901"
latitude="37.4403" />
</start_location>
<end_location>
<input_location id="2"
longitude="-121.83459"
latitude="37.25125" />
</end_location>
</route_request>
<route_request id="4"
route_preference="shortest"
road_preference="highway"
pre_geocoded_locations="true"
vehicle_type="truck"
truck_height="13.6"
truck_length="75"
truck_weight="30"
return_driving_directions="true"
distance_unit="mile"
time_unit="minute"
>
<start_location>
<pre_geocoded_location id="1">
<edge_id>23694266</edge_id>
<percent>0.0</percent>
<side>R</side>
</pre_geocoded_location>
</start_location>
<end_location>
<pre_geocoded_location id="2">
<edge_id>812218080</edge_id>
<percent>0.0</percent>
<side>R</side>
</pre_geocoded_location>
</end_location>
</route_request>
</batch_route_request>

例13-6 住所で指定された場所、事前ジオコード済の場所および経度/緯度点での一括ルート・リクエストに対するレスポンス

例13-6に、例13-5のリクエストに対するレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)

<!-- Oracle Routeserver version 12.1.0.2.0 (data version 11.1.0.7.1) -->
<batch_route_response>
<route_response>
<route id="1" step_count="15"
distance="26.103862121729946" distance_unit="mile"
time="26.6184814453125" time_unit="minute"
start_location="1" end_location="2">
<start_location>
<location id="1"
longitude="-122.15901" latitude="37.4403"
house_number="898" street="ALMA ST" city="PALO ALTO"
state="CA" country="US"
driving_side="R"
postal_code="94301"
edge_id="23694266" percent="0.0"/>
</start_location>
<segment sequence="1"
instruction="Start out on Alma St (Going Southeast)"
distance="1.3587211956625542"
time="2.504421416918437"/>
<segment sequence="2"
instruction="Take RAMP toward Oregon Expwy"
distance="0.12862735113732848"
time="0.215624996026357"/>
<segment sequence="3"
instruction="Stay STRAIGHT togo onto Oregon Expy (Going Northeast)"
distance="1.3840054698278719"
time="2.3200833360354105"/>
<segment sequence="4"
instruction="Take RAMP toward San Jose"
distance="0.2647486517044605"
time="0.44381250540415446"/>
<segment sequence="5"
instruction="Stay STRAIGHT to go onto US-101 S (Going Southeast)"
distance="11.747225529883993"
time="10.16387637803952"/>
<segment sequence="6"
instruction="Take RAMP toward Guadalupe Pkwy"
distance="0.40232399596959373"
time="0.6744375069936116"/>
<segment sequence="7"
instruction="Stay STRAIGHT to go onto CA-87 S (Going Southeast)"
distance="2.6388802347934055"
time="2.2831989218791326"/>
<segment sequence="8"
instruction="Stay STRAIGHT to go onto CA-87 S (Going Southeast)"
distance="5.839967669586142"
time="5.052827918032805"/>
<segment sequence="9"
instruction="Stay STRAIGHT to go onto RAMP (Going South)"
distance="0.1527496425121632"
time="0.15757692654927571"/>
<segment sequence="10"
instruction="Continue on toward Gilroy"
distance="0.8405766344600814"
time="0.8671410039067269"/>
<segment sequence="11"
instruction="Stay STRAIGHT to go onto CA-85 S (Going East)"
distance="0.3956813619067624"
time="0.34234946966171265"/>
<segment sequence="12"
instruction="Take RAMP toward Blossom Hill Road"
distance="0.22891319287702547"
time="0.38373958468437197"/>
<segment sequence="13"
instruction="Turn LEFT onto Blossom Hill Rd (Going East)"
distance="0.49810476095097306"
time="0.8349999914566676"/>
<segment sequence="14"
instruction="Turn LEFT onto Snell Ave (Going North)"
distance="0.011060709151221367"
time="0.01854166587193807"/>
<segment sequence="15"
instruction="Turn LEFT onto Blossom Hill Rd (Going West)"
distance="0.21227241518009607"
time="0.35584374765555066"/>
<end_location>
<location id="2"
longitude="-121.83459" latitude="37.25125"
house_number="499" street="BLOSSOM HILL RD" city="SAN JOSE"
state="CA" country="US"
driving_side="R"
postal_code="95123"
edge_id="812218080" percent="0.0"/>
</end_location>
</route>
</route_response>
<route_response>
<route id="2" step_count="18"
distance="24.879477393121235" distance_unit="mile"
time="39.014546712239586" time_unit="minute"
start_location="1" end_location="2">
<start_location>
<location id="1"
longitude="" latitude=""
house_number="" street="" city=""
state="" country=""
driving_side="N"
postal_code=""
edge_id="23694266" percent="0.0"/>
</start_location>
<segment sequence="1"
instruction="Start out on Alma St (Going Southeast)"
distance="0.2592928618616754"
time="0.6322424242893855"/>
<segment sequence="2"
instruction="Turn LEFT onto Kingsley Ave (Going Northeast)"
distance="0.08879637204118493"
time="0.2165151596069336"/>
<segment sequence="3"
instruction="Turn SLIGHT RIGHT onto Embarcadero Rd (Going East)"
distance="0.6481327160471586"
time="1.5803636133670806"/>
<segment sequence="4"
instruction="Turn RIGHT onto Middlefield Rd (Going Southeast)"
distance="2.96746411421623"
time="7.235666685303053"/>
<segment sequence="5"
instruction="Stay STRAIGHT to go onto Old Middlefield Way (Going East)"
distance="0.8495432761786168"
time="1.789845637480418"/>
<segment sequence="6"
instruction="Stay STRAIGHT to go onto RAMP (Going East)"
distance="0.22642142849860966"
time="0.37956250508626305"/>
<segment sequence="7"
instruction="Stay STRAIGHT to go onto US-101 S (Going Southeast)"
distance="9.176685525492026"
time="7.939806487659613"/>
<segment sequence="8"
instruction="Take RAMP toward Brokaw Road"
distance="0.20942024511139234"
time="0.3510625004768372"/>
<segment sequence="9"
instruction="Stay STRAIGHT to go onto Old Bayshore Hwy (Going East)"
distance="0.1670850676627406"
time="0.2800937493642171"/>
<segment sequence="10"
instruction="Turn SLIGHT RIGHT onto N 1st St (Going Southeast)"
distance="1.9476604686858663"
time="3.9989981204271317"/>
<segment sequence="11"
instruction="Turn LEFT onto Jackson St (Going Northeast)"
distance="0.07099981550357595"
time="0.17312120993932087"/>
<segment sequence="12"
instruction="Turn RIGHT onto 2nd St (Going Southeast)"
distance="2.3224258991749434"
time="5.6628484646479285"/>
<segment sequence="13"
instruction="Stay STRAIGHT to go onto S 1st St (Going Southeast)"
distance="0.18884608205270126"
time="0.31657291650772096"/>
<segment sequence="14"
instruction="Stay STRAIGHT to go onto Monterey Rd (Going Southeast)"
distance="3.887951286200716"
time="5.287046383817991"/>
<segment sequence="15"
instruction="Turn SLIGHT RIGHT onto RAMP (Going South)"
distance="0.0414465897894999"
time="0.1010606050491333"/>
<segment sequence="16"
instruction="Turn RIGHT onto Skyway Dr (Going Southwest)"
distance="0.34504443027423093"
time="0.5849081456661225"/>
<segment sequence="17"
instruction="Turn LEFT onto Snell Ave (Going East)"
distance="1.279357478030909"
time="2.1446562389532726"/>
<segment sequence="18"
instruction="Turn RIGHT onto Blossom Hill Rd (Going West)"
distance="0.20292052293456395"
time="0.34016666412353513"/>
<end_location>
<location id="2"
longitude="" latitude=""
house_number="" street="" city=""
state="" country=""
driving_side="N"
postal_code=""
edge_id="812218080" percent="0.0"/>
</end_location>
</route>
</route_response>
<route_response>
<route id="3" step_count="14"
distance="25.906590792580626" distance_unit="mile"
time="29.140561930338542" time_unit="minute"
start_location="1" end_location="2">
<start_location>
<location id="1"
longitude="-122.15901" latitude="37.4403"
house_number="900" street="ALMA ST" city="PALO ALTO"
state="CA" country="US"
driving_side="R"
postal_code="94301"
edge_id="23694267" percent="1.0"/>
</start_location>
<segment sequence="1"
instruction="Start out on Alma St (Going Northwest)"
distance="0.0"
time="0.0"/>
<segment sequence="2"
instruction="Turn RIGHT onto Channing Ave(Going Northeast)"
distance="2.1771018293093087"
time="5.30849996805191"/>
<segment sequence="3"
instruction="Turn RIGHT onto W Bayshore Rd (Going Southwest)"
distance="0.12998197519156232"
time="0.31693938573201497"/>
<segment sequence="4"
instruction="Turn LEFT onto Embarcadero Rd (Going Northeast)"
distance="0.006878766976215882"
time="0.016772727171579998"/>
<segment sequence="5"
instruction="Take RAMP toward San Jose"
distance="0.4222705568230516"
time="0.707875007390976"/>
<segment sequence="6"
instruction="Stay STRAIGHT to go onto US-101 S (Going Southeast)"
distance="11.747225529883993"
time="10.16387637803952"/>
<segment sequence="7"
instruction="Take RAMP toward Guadalupe Pkwy"
distance="0.40232399596959373"
time="0.6744375069936116"/>
<segment sequence="8"
instruction="Stay STRAIGHT to go onto CA-87 S (Going Southeast)"
distance="2.6388802347934055"
time="2.2831989218791326"/>
<segment sequence="9"
instruction="Stay STRAIGHT to go onto CA-87 S (Going Southeast)"
distance="4.708519202974121"
time="4.073881677289804"/>
<segment sequence="10"
instruction="Take EXIT 1D toward Capitol Expwy Auto Mall"
distance="0.23860684637032842"
time="0.3948361724615097"/>
<segment sequence="11"
instruction="Turn LEFT onto W Capitol Expy (Going East)"
distance="1.2198347095111897"
time="1.4871818164984385"/>
<segment sequence="12"
instruction="Turn SLIGHT RIGHT onto RAMP (Going East)"
distance="0.029621573459855412"
time="0.049656248092651366"/>
<segment sequence="13"
instruction="Turn SLIGHT RIGHT onto Snell Ave (Going Southeast)"
distance="1.9824209209108623"
time="3.3232395708560944"/>
<segment sequence="14"
instruction="Turn RIGHT onto Blossom Hill Rd (Going West)"
distance="0.20292052293456395"
time="0.34016666412353513"/>
<end_location>
<location id="2"
longitude="-121.83459" latitude="37.25125"
house_number="499" street="BLOSSOM HILL RD" city="SAN JOSE"
state="CA" country="US"
driving_side="R"
postal_code="95123"
edge_id="812218080" percent="0.0"/>
</end_location>
</route>
</route_response>
<route_response>
<route id="4" step_count="28"
distance="25.43010499518424" distance_unit="mile"
time="41.812373860677084" time_unit="minute"
start_location="1" end_location="2">
<segment sequence="1"
instruction="Start out on Alma St (Going Southeast)"
distance="2.512197865475656"
time="4.438056838512421"/>
<segment sequence="2"
instruction="Turn RIGHT onto W Meadow Dr (Going Southwest)"
distance="0.259249367249032"
time="0.6321363727251689"/>
<segment sequence="3"
instruction="Turn LEFT onto El Camino Way (Going Southeast)"
distance="0.19732181646496028"
time="0.48113636175791424"/>
<segment sequence="4"
instruction="Stay STRAIGHT to go onto RAMP (Going Southwest)"
distance="0.009935996875112263"
time="0.02422727147738139"/>
<segment sequence="5"
instruction="Turn LEFT onto El Camino Real (Going Southeast)"
distance="0.7259305251035061"
time="1.2169166604677837"/>
<segment sequence="6"
instruction="Stay STRAIGHT to go onto El Camino Real (Going Southeast)"
distance="10.18052570327847"
time="17.06616668154796"/>
<segment sequence="7"
instruction="Turn RIGHT onto Madison St (Going Southeast)"
distance="0.1341639244777912"
time="0.32713637351989744"/>
<segment sequence="8"
instruction="Turn LEFT onto Harrison St (Going East)"
distance="0.06893059350020074"
time="0.16807576020558676"/>
<segment sequence="9"
instruction="Turn RIGHT onto Monroe St (Going Southeast)"
distance="0.0705648403396469"
time="0.1720606009165446"/>
<segment sequence="10"
instruction="Turn LEFT onto Fremont St (Going East)"
distance="0.07203753203577691"
time="0.17565151850382488"/>
<segment sequence="11"
instruction="Turn RIGHT onto Jackson St (Going Southeast)"
distance="0.2098303612161659"
time="0.5116363684336345"/>
<segment sequence="12"
instruction="Turn LEFT onto Homestead Rd (Going East)"
distance="0.13950164667868017"
time="0.3401515007019043"/>
<segment sequence="13"
instruction="Turn RIGHT onto Washington St (Going Southeast)"
distance="0.14307462872056173"
time="0.3488636334737142"/>
<segment sequence="14"
instruction="Turn LEFT onto Santa Clara St (Going East)"
distance="0.06947120055412777"
time="0.16939393679300943"/>
<segment sequence="15"
instruction="Turn RIGHT onto Lafayette St (Going Southeast)"
distance="0.06759460559205673"
time="0.16481818358103434"/>
<segment sequence="16"
instruction="Turn LEFT onto Market St (Going East)"
distance="0.17456658015544202"
time="0.4256515165170034"/>
<segment sequence="17"
instruction="Turn RIGHT onto The Alameda (Going Southeast)"
distance="2.317572876182314"
time="4.207776539524397"/>
<segment sequence="18"
instruction="Stay STRAIGHT to go onto W Santa Clara St (Going East)"
distance="0.03303921082684557"
time="0.05538541873296102"/>
<segment sequence="19"
instruction="Stay STRAIGHT to go onto CA-82 (Going East)"
distance="0.05555210434715647"
time="0.09312500158945719"/>
<segment sequence="20"
instruction="Stay STRAIGHT to go onto W Santa Clara St (Going East)"
distance="0.17006772690279195"
time="0.33163256843884786"/>
<segment sequence="21"
instruction="Turn RIGHT onto Delmas Ave (Going Southeast)"
distance="0.49640216162493195"
time="1.2103939274946849"/>
<segment sequence="22"
instruction="Take CA-87 RAMP toward Guadalupe Pky"
distance="0.1178586975602079"
time="0.197572918732961"/>
<segment sequence="23"
instruction="Stay STRAIGHT to go onto CA-87 S (Going Southeast)"
distance="3.628403629205081"
time="3.139349430302779"/>
<segment sequence="24"
instruction="Take EXIT 1D toward Capitol Expwy Auto Mall"
distance="0.23860684637032842"
time="0.3948361724615097"/>
<segment sequence="25"
instruction="Turn LEFT onto W Capitol Expy (Going East)"
distance="0.9895544609762458"
time="1.2064318120479585"/>
<segment sequence="26"
instruction="Turn SLIGHT RIGHT onto Rosenbaum Ave (Going East)"
distance="0.49535202237807563"
time="1.2078333616256713"/>
<segment sequence="27"
instruction="Turn RIGHT onto Snell Ave (Going Southeast)"
distance="1.649872606747162"
time="2.7657708187898"/>
<segment sequence="28"
instruction="Turn RIGHT onto Blossom Hill Rd (Going West)"
distance="0.20292052293456395"
time="0.34016666412353513"/>
</route>
</route_response>
</batch_route_response>

13.3.2 ルート・リクエストXMLスキーマ定義

次に、ルート・リクエストのXMLスキーマ定義を示します。スキーマ定義の主要な要素と属性については、後続の項で説明しています。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xsd:include schemaLocation="geocoder_request.xsd"/>
<xsd:simpleType name="positiveDecimal">
<xsd:restriction base="xsd:decimal">
<xsd:minExclusive value="0"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="distanceUnit">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="mile"/>
<xsd:enumeration value="km"/>
<xsd:enumeration value="kilometer"/>
<xsd:enumeration value="meter"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="timeUnit">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="minute"/>
<xsd:enumeration value="hour"/>
<xsd:enumeration value="second"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="unitType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="us"/>
<xsd:enumeration value="metric"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="edgePercentage">
<xsd:restriction base="xsd:decimal">
<xsd:minInclusive value="0.0"/>
<xsd:maxInclusive value="1.0"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="roadPreference">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="highway"/>
<xsd:enumeration value="local"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="routePreference">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="shortest"/>
<xsd:enumeration value="fastest"/>
<xsd:enumeration value=”traffic”/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="truckType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="delivery"/>
<xsd:enumeration value="public"/>
<xsd:enumeration value="resident"/>
<xsd:enumeration value="trailer"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="vehicleType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="auto"/>
<xsd:enumeration value="truck"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="pregeocodedType">
<xsd:all>
<xsd:element name="edge_id" type="xsd:long" />
<xsd:element name="percent" type="edgePercentage"/>
<xsd:element name="side">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="L"/>
<xsd:enumeration value="R"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:all>
</xsd:complexType>

<xsd:complexType name="routerInputLocation">
<xsd:choice>
<xsd:element name="router_input_location"  type="input_locationType"/>
<xsd:element name="router_pregeocoded_location" type="pregeocodedType"/>
</xsd:choice>
</xsd:complexType>
<xsd:element name="batch_route_request" type="batchRouteRequest" />
<xsd:complexType name="batchRouteRequest">
<xsd:sequence>
<xsd:element name="route_request" type="routeRequest"
minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:nonNegativeInteger" use="required"/>
</xsd:complexType>

<xsd:element name="route_request" type="routeRequest" />
<xsd:complexType name="routeRequest">
<xsd:sequence>
<xsd:element name="start_location" type="routerInputLocation"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="location" type="routerInputLocation"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="end_location" type="routerInputLocation"
minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:nonNegativeInteger" use="required"/>
<xsd:attribute name="pre_geocoded_locations" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="route_preference" type="routePreference"
use="optional"/>
<xsd:attribute name="road_preference" type="roadPreference"
use="optional"/>
<xsd:attribute name="start_date" type="xsd:date"
use="optional"/>
<xsd:attribute name="start_time" type="xsd:time"
use="optional"/>
<xsd:attribute name="date_format" type="xsd:date"
use="optional"/>
<xsd:attribute name="time_format" type="xsd:time"
use="optional"/>
<xsd:attribute name="output_time_format" type="xsd:date"
use="optional"/>

<xsd:attribute name="optimize_route" type="xsd:boolean" use="optional"/>
<xsd:attribute name="route_type" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="open"/>
<xsd:enumeration value="closed"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="driving_directions_detail" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="medium"/>
<xsd:enumeration value="high"/>
<xsd:enumeration value="low"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="language" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="English"/>
<xsd:enumeration value="French"/>
<xsd:enumeration value="German"/>
<xsd:enumeration value="Italian"/>
<xsd:enumeration value=”Portuguese”/>
<xsd:enumeration value="Spanish"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="distance_unit" type="distanceUnit" use="optional"/>
<xsd:attribute name="length_unit" type="unitType" use="optional"/>
<xsd:attribute name="time_unit" type="timeUnit" use="optional"/>
<xsd:attribute name="weight_unit" type="unitType" use="optional"/>
<xsd:attribute name="return_locations" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="return_subroutes" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="return_route_time" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="return_subroute_time" type="xsd:boolean"
use="optional"/>

<xsd:attribute name="return_driving_directions" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="return_hierarchical_directions" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="return_route_geometry" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="return_subroute_geometry" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="return_segment_geometry" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="return_detailed_geometry" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="return_route_edge_ids" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="return_subroute_edge_ids" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="return_segment_edge_ids" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="vehicle_type" type="vehicleType" use="optional"/>
<xsd:attribute name="truck_type" type="truckType" use="optional"/>
<xsd:attribute name="truck_height" type="positiveDecimal"
use="optional"/>
<xsd:attribute name="truck_length" type="positiveDecimal"
use="optional"/>
<xsd:attribute name="truck_per_axle_weight" type="positiveDecimal"
use="optional"/>
<xsd:attribute name="truck_weight" type="positiveDecimal"
use="optional"/>
<xsd:attribute name="truck_width" type="positiveDecimal" use="optional"/>
</xsd:complexType>

13.3.2.1 route_request要素

<route_request>要素は、次のとおり定義されています。

<xsd:element name="route_request" type="routeRequest" />

ルート・リクエストのルート要素には、常にroute_requestという名前が付けられます。

子要素の<start_location>は、住所指定、ジオコード済住所または経度/緯度座標として、ルートの出発地を示します。ルート・リクエストに応じて、0または1個の<start_location>要素があります。単純ルート・リクエストには<start_location>要素が必要ですが、開いた行程のTSPリクエストには不要です。

子要素の<location>は、住所指定、ジオコード済住所または経度/緯度座標として、セグメントの場所を示します。単純ルート・リクエストでは、<location>要素が存在しません。1つ以上の<location>要素が存在する場合はマルチアドレス・ルートです。

子要素の<end_location>は、住所指定、ジオコード済住所または経度/緯度座標として、ルートの目的地を示します。ルート・リクエストに応じて、0または1個の<end_location>要素があります。単純ルート・リクエストには<end_location>要素が必要ですが、閉じた行程のマルチアドレスまたはTSP行程には<end_location>要素が含まれていてはなりません。

ルート・リクエストでは、次のように指定します。

- <start_location>が住所指定または経度/緯度座標である場合、各<end_location>および<location>要素には住所指定または経度/緯度座標のいずれかを使用できますが、事前ジオコード済住所は使用できません。

- <start_location>が事前ジオコード済住所である場合、<end_location>および任意の<location>指定にも事前ジオコード済住所を使用する必要があります。

一括ルート・リクエストでは、個々のルート・リクエストはそれぞれ前述のルールに従う必要があります。ただし、バッチ内では、個々のリクエストは独立しているため、個々のリクエスト内で一貫しているかぎり、住所、事前ジオコード済および経度/緯度の場所を組み合せることができます。

13.3.2.2 route_request属性

ルート要素の<route_request>には、複数の属性があります(そのほとんどはオプションです)。これらの属性は次のように定義されます。

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_driving_directions属性の値に関係なく、ルートの運転方向が戻されます。

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_driving_directions属性の値に関係なく、ルートの運転方向が戻されます。

languageはオプションの属性で、運転方向の生成に使用するデフォルトの言語を上書きします。デフォルトの言語はweb.xmlファイルで設定されており、この属性を使用してリクエストごとにデフォルトを上書きできます。サポートされている属性値は、ENGLISH、FRENCH、GERMAN、ITALIANおよびSPANISHです。

distance_unitはオプションの属性で、戻される距離の値の測定単位を指定します。有効な値は、KILOMETERまたはKM(キロメートル)、MILE(マイル、デフォルト)およびMETER(メートル)です。

length_unitはオプションの属性で、長さ値の入力に使用する長さ測定法を指定します。有効な値は、US (フィート、デフォルト)またはMETRIC (メートル)です。この属性は、トラックの高さ、長さ、幅の指定に使用されます。

time_unitはオプションの属性で、戻される時間値の単位を示します。有効な値は、HOUR (時間)、MINUTE (分、デフォルト)およびSECOND (秒)です。

weight_unitはオプションの属性で、重量値の入力に使用する重量測定法を指定します。有効な値は、US (トン、デフォルト)またはMETRIC (メートル・トン)です。この属性は、トラックの重量の指定に使用されます。

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を指定しない場合、この属性は無視されます。

optimize_routeはオプションの属性で、マルチアドレス・ルート・リクエストがその非固定の場所を並べ替えて全体的なルートを最適化する必要があるかどうかを指定します。TRUEは場所を並べ替えて全体的なルートを最適化し(巡回セールスマン)、FALSE (デフォルト)は場所を並べ替えません(マルチアドレス)。マルチアドレス・リクエストは最適化されないため、すべての場所はリクエストで指定された順序で戻されます。マルチアドレスおよびTSPの開いた行程リクエストでは、START_LOCATIONおよびEND_LOCATIONはオプションです。これらが指定されている場合、これらは固定の場所であり、TSPリクエストで並替えの対象にはなりません。マルチアドレスおよびTSPリクエストでは、1つ以上の中間地(LOCATION)を指定する必要があり、これらは非固定の場所で、TSPリクエストで並替えの対象になります。

route_typeはオプションの属性で、マルチアドレス・ルートがOPEN (デフォルト)行程とCLOSED行程のどちらであるかを指定します。開いた行程は、START_LOCATIONまたは最初のLOCATIONからEND_LOCATIONまたは最後のLOCATIONまでのルートです。閉じた行程では、START_LOCATIONが必須で、出発地および目的地の両方として使用されます。閉じた行程に対してEND_LOCATIONが指定されている場合は、例外が発生します。

vehicle_typeはオプションの属性で、車両のタイプがAUTO (デフォルト)とTRUCKのどちらであるかを指定します。トラックの場合は説明サブ属性が使用され、車両タイプはTRUCKに設定されている必要があります。車両タイプがAUTOの場合、これらのサブ属性は無視されます。

truck_typeはオプションの属性で、TRUCKに設定されたvehicle_typeのサブ属性です。この属性は、具体的なトラック・タイプを説明し、より一般的なトラック・ルールをオーバーライドできます。サポートされている属性値は、DELIVERY、PUBLIC、RESIDENTおよびTRAILERです。DELIVERY、PUBLICおよびRESIDENTトラック・タイプは、これらのタイプのトラックのトラック・ルールに例外を提供します。ごみ収集トラックおよび公共事業トラックはPUBLICトラックの例です。RESIDENTトラック・タイプは、地元のトラックを説明します。TRAILERトラック・タイプは、セミトレーラー・トラックが対象となり、他のトラックは対象とならない追加の制限を説明します。

truck_heightはオプションの属性で、TRUCKに設定されたvehicle_typeのサブ属性です。この属性では、length_unitsでのトラックの高さを浮動小数点数として指定します。この高さは、ルートの一部とみなされているエッジ上に存在する可能性のある高さ制限に対してチェックするために使用されます。

truck_lengthはオプションの属性で、TRUCKに設定されたvehicle_typeのサブ属性です。この属性では、length_unitsでのトラックの長さを浮動小数点数として指定します。この長さは、ルートの一部とみなされているエッジ上に存在する可能性のある長さ制限に対してチェックするために使用されます。

truck_per_axle_weightはオプションの属性で、TRUCKに設定されたvehicle_typeのサブ属性です。この属性では、weight_unitsでのトラックの車軸単位の重量を浮動小数点数として指定します。この重量は、ルートの一部とみなされているエッジ上に存在する可能性のある車軸当たりの重量制限に対してチェックするために使用されます。

truck_weightはオプションの属性で、TRUCKに設定されたvehicle_typeのサブ属性です。この属性では、weight_unitsでのトラックの重量を浮動小数点数として指定します。この重量は、ルートの一部とみなされているエッジ上に存在する可能性のある重量制限に対してチェックするために使用されます。

truck_widthはオプションの属性で、TRUCKに設定されたvehicle_typeのサブ属性です。この属性では、length_unitsでのトラックの幅を浮動小数点数として指定します。この幅は、ルートの一部とみなされているエッジ上に存在する可能性のある幅制限に対してチェックするために使用されます。

13.3.2.3 input_location要素

<input_location>要素は、Oracle Spatial and Graphのジオコーディング・リクエストXMLスキーマ(「ジオコーディング・リクエストのXMLスキーマ定義および例」を参照)に適した形式で、住所を指定します。経度/緯度のペアまたは<input_address>要素を使用して入力の場所を指定できます。「ルート・リクエストおよびルート・レスポンスの例」の例13-1では、<input_location>要素とその子要素の<input_address>を使用して出発地と目的地の住所が指定されています。

<input_location>要素を使用する場合は、<route_request>要素のpre_geocoded_locations属性の値をFALSE (デフォルト)に設定する必要があります。経度/緯度のペアおよび<input_address>要素をリクエストで一緒に使用できます。

13.3.2.4 pre_geocoded_location要素

<pre_geocoded_location>要素は、その住所が通り(エッジ)に沿ってどれくらい離れているのか、また、通りのどちら側にあるのかを示す、ジオコード済の場所を指定します。「ルート・リクエストおよびルート・レスポンスの例」の例13-5では、<pre_geocoded_location>要素を使用して出発地と目的地の住所が指定されています。

<pre_geocoded_location>要素を使用する場合は、<route_request>要素でpre_geocoded_locations="TRUE"を指定し、すべての場所を<pre_geocoded_location>要素で指定する必要があります。

13.3.3 ルート・レスポンスXMLスキーマ定義

次に、ルート・レスポンスのXMLスキーマ定義を示します。

<!-- XML Schema definition for Route Response from the routing engine -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:gml="http://www.opengis.net/gml"
elementFormDefault="qualified">

<xsd:simpleType name="nonNegativeDecimal">
<xsd:restriction base="xsd:decimal">
<xsd:minInclusive value="0"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="positiveDecimal">
<xsd:restriction base="xsd:decimal">
<xsd:minExclusive value="0"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="distanceUnit">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="mile"/>
<xsd:enumeration value="km"/>
<xsd:enumeration value="kilometer"/>
<xsd:enumeration value="meter"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="timeUnit">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="minute"/>
<xsd:enumeration value="hour"/>
<xsd:enumeration value="second"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="edgeIdElement">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[-0-9,]+"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="edgeIdList">
<xsd:list itemType="edgeIdElement"/>
</xsd:simpleType>

<xsd:simpleType name="emptyString">
<xsd:restriction base="string">
<xsd:maxLength value="0"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="latitude">
<xsd:restriction base="decimal">
<xsd:minInclusive value="-90.0" />
<xsd:maxInclusive value="90.0" />
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="longitude">
<xsd:restriction base="decimal">
<xsd:minInclusive value="-180.0"/>
<xsd:maxInclusive value="180.0"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:complexType name="geometry">
<xsd:sequence>
<xsd:element ref="gml:LineString"/>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="outputLocation">
<xsd:attribute name="id" type="xsd:positiveInteger" use="required"/>
<xsd:attribute name="longitude" use="required">
<xsd:simpleType>
<xsd:union memberTypes="longitude emptyString" />
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="latitude" use="required">
<xsd:simpleType>
<xsd:union memberTypes="latitude emptyString" />
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="house_number" type="xsd:string" use="required"/>
<xsd:attribute name="street" type="xsd:string" use="required"/>
<xsd:attribute name="city" type="xsd:string" use="required"/>
<xsd:attribute name="state" type="xsd:string" use="required"/>
<xsd:attribute name="country" type="xsd:string" use="required"/>
<xsd:attribute name="driving_side" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="L"/>
<xsd:enumeration value="N"/>
<xsd:enumeration value="R"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="postal_code" type="xsd:string" use="required"/>
<xsd:attribute name="edge_id" type="xsd:long" use="required"/>
<xsd:attribute name="percent" type="edgePercentage" use="required"/>
</xsd:complexType>

<xsd:complexType name="segmentType">
<xsd:sequence>
<xsd:element name="segment_geometry" type="geometry"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="segment_edge_ids" type="edgeIdList"
minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="sequence" type="xsd:positiveInteger" use="required"/>
<xsd:attribute name="instruction" type="xsd:string" use="required"/>
<xsd:attribute name="distance" type="nonNegativeDecimal" use="required"/>
<xsd:attribute name="time" type="nonNegativeDecimal" use="required"/>
</xsd:complexType>

<xsd:element name="route_response">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="route" minOccurs="1" maxOccurs="1">
<xsd:simpleType>
<xsd:union memberTypes="multiRouteType routeType"/>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:complexType name="multiRouteType">
<xsd:sequence>
<xsd:element name="route_geometry" type="geometry"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="route_edge_ids" type="edgeIdList"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="start_location" type="outputLocation"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="end_location" type="outputLocation"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="subroute" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="subroute_geometry" type="geometry"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="subroute_edge_ids" type="edgeIdList"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="start_location" type="outputLocation"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="segment" type="segmentType"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="end_location" type="outputLocation"
minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:nonNegativeInteger"
use="required"/>
<xsd:attribute name="step_count" type="xsd:nonNegativeInteger"
use="required"/>
<xsd:attribute name="distance" type="nonNegativeDecimal"
use="required"/>
<xsd:attribute name="distance_unit" type="distanceUnit"
use="required"/>
<xsd:attribute name="time" type="nonNegativeDecimal" use="required"/>
<xsd:attribute name="time_unit" type="timeUnit" use="required"/>
<xsd:attribute name="start_location" type="xsd:positiveInteger"
use="required"/>
<xsd:attribute name="end_location" type="xsd:positiveInteger"
use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="routeType">
<xsd:sequence>
<xsd:element name="route_geometry" type="geometry"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="route_edge_ids" type="edgeIdList"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="start_location" type="outputLocation"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="segment" type="segmentType"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="end_location" type="outputLocation"
minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:nonNegativeInteger" use="required"/>
<xsd:attribute name="step_count" type="xsd:nonNegativeInteger"
use="required"/>
<xsd:attribute name="distance" type="nonNegativeDecimal" use="required"/>
<xsd:attribute name="distance_unit" type="distanceUnit" use="required"/>
<xsd:attribute name="time" type="nonNegativeDecimal" use="required"/>
<xsd:attribute name="time_unit" type="timeUnit" use="required"/>
<xsd:attribute name="start_location" type="xsd:positiveInteger"
use="required"/>
<xsd:attribute name="end_location" type="xsd:positiveInteger"
use="required"/>
</xsd:complexType>
</xsd:schema>

13.3.4 バッチ・モード・ルート・リクエストおよびバッチ・モード・ルート・レスポンスの例

この項では、バッチ・モード・ルート・リクエストと、そのリクエストによって生成されるルート・レスポンスのXMLの例を示します。1つのリクエストでは、指定した住所を使用しています。もう1つのリクエストでは、ジオコード済の場所を使用しています。利用可能な要素と属性に関する参照情報については、「一括ルート・リクエストXMLスキーマ定義」のリクエストと「一括ルート・レスポンスXMLスキーマ」の応答を参照してください。

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

例13-7では、指定した住所を使用する一括ルート・リクエストを示しています。このリクエストは、Massachusetts州Waltham市にあるオフィスと3つの目的地(New Hampshire州Nashua市のオラクル社のオフィス、Massachusetts州Concord町役場、およびBoston市庁舎)との間の最速ルート(可能な場合は高速道路を使用)を求めます。このリクエストでは、戻されるルートを、出発地と目的地の距離でソートするように要求しています。また、距離が35マイルを超えるルートは戻さないようにしています。

<?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="399 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="2 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-8に、例13-7のリクエストによって生成されたレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)sort_by_distance = "true"がリクエストで指定されたため、戻されるルートはルートIDの順序(11、12、10)ではなく、ルート距離の順序になります。

<!-- Oracle Routeserver version 12.1.0.2.0 (data version 11.1.0.7.1) -->
<batch_route_response id="8">
<route id="11" step_count="0"
distance="7.796855460254458" distance_unit="mile"
time="11.343014526367188" time_unit="minute"/>
<route id="12" step_count="0"
distance="17.201688768020258" distance_unit="mile"
time="21.577909342447917" time_unit="minute"/>
<route id="10" step_count="0"
distance="28.628700657894736" distance_unit="mile"
time="31.133371988932293" time_unit="minute"/>
</batch_route_response>

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

例13-9は、ジオコード済の場所を使用する一括ルート・リクエストを示しています。このリクエストは、可能であれば高速道路を使用し、ある場所と他の3つの場所の間の最速ルートを求めます。距離にはマイル、時間には分を使用しています。このリクエストでは、戻されるルートを、出発地と目的地の距離でソートするように要求しています。また、距離が28.5マイルを超えるルートは戻さないようにしています。

<?xml version="1.0" standalone="yes"?>
<batch_route_request id="8"
route_preference="fastest"
road_preference="highway"
return_driving_directions="false"
distance_unit="mile"
time_unit="minute"
pre_geocoded_locations="true"
cutoff_distance="28.5"
sort_by_distance="true">
<start_location>
<pre_geocoded_location id="1">
<edge_id>906810462</edge_id>
<percent>0.0</percent>
<side>R</side>
</pre_geocoded_location>
</start_location>
<end_location>
<pre_geocoded_location id="11">
<edge_id>22325991</edge_id>
<percent>0.0</percent>
<side>R</side>
</pre_geocoded_location>
</end_location>
<end_location>
<pre_geocoded_location id="12">
<edge_id>22027853</edge_id>
<percent>0.0</percent>
<side>R</side>
</pre_geocoded_location>
</end_location>
<end_location>
<pre_geocoded_location id="13">
<edge_id>31102851</edge_id>
<percent>0.0</percent>
<side>R</side>
</pre_geocoded_location>
</end_location>
</batch_route_request>

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

例13-10に、例13-9のリクエストに対するレスポンスを示します。3番目のルートは、指定したカットオフ距離の28.5マイルよりも長いため、2つのルートのみが戻されます。(出力は、読みやすくするために変更が加えられています。)

<!-- Oracle Routeserver version 12.1.0.2.0 (data version 11.1.0.7.1) -->
<batch_route_response id="8">
<route id="11" step_count="0"
distance="7.796855460254458" distance_unit="mile"
time="11.343014526367188" time_unit="minute"/>
<route id="12" step_count="0"
distance="17.201688768020258" distance_unit="mile"
time="21.577909342447917" time_unit="minute"/>
</batch_route_response>

13.3.5 一括ルート・リクエストXMLスキーマ定義

次に、一括ルート・リクエストのXMLスキーマ定義を示します。XMLスキーマ定義の主要な要素と属性については、後続の項で説明しています。

<?xml version="1.0" encoding="UTF-8"?>
<!-- XML Schema definition for a Batch Route Request to the routing engine ->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xsd:include schemaLocation "geocoder_request.xsd" />

<xsd:simpleType name="positiveDecimal">
<xsd:restriction base="xsd:decimal">
<xsd:minExclusive value="0"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="distanceUnit">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="mile"/>
<xsd:enumeration value="km"/>
<xsd:enumeration value="kilometer"/>
<xsd:enumeration value="meter"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="timeUnit">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="minute"/>
<xsd:enumeration value="hour"/>
<xsd:enumeration value="second"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="unitType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="us"/>
<xsd:enumeration value="metric"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="roadPreference">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="highway"/>
<xsd:enumeration value="local"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="routePreference">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="shortest"/>
<xsd:enumeration value="fastest"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="truckType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="delivery"/>
<xsd:enumeration value="public"/>
<xsd:enumeration value="resident"/>
<xsd:enumeration value="trailer"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="vehicleType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="auto"/>
<xsd:enumeration value="truck"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:complexType name="routerInputLocation">
<xsd:choice>
<xsd:element name="router_input_location"  type="input_locationType"/>
<xsd:element name="router_pregeocoded_location" type="pregeocodedType"/>
</xsd:choice>
</xsd:complexType>

<xsd:element name="batch_route_request" type="batch_route_requestType" />

<xsd:complexType name="batch_route_requestType">
<xsd:sequence>
<xsd:element name="start_location" type="routerInputLocation"
minOccurs="1" maxOccurs="1"/>
<xsd:element name="end_location" type="routerInputLocation"
minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:nonNegativeInteger" use="required"/>
<xsd:attribute name="pre_geocoded_locations" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="route_preference" type="routePreference"
use="optional"/>
<xsd:attribute name="road_preference" type="roadPreference"
use="optional"/>
<xsd:attribute name="distance_unit" type="distanceUnit" use="optional"/>
<xsd:attribute name="length_unit" type="unitType" use="optional"/>
<xsd:attribute name="time_unit" type="timeUnit" use="optional"/>
<xsd:attribute name="weight_unit" type="unitType" use="optional"/>
<xsd:attribute name="vehicle_type" type="vehicleType" use="optional">
<xsd:attribute name="truck_type" type="truckType" use="optional"/>
<xsd:attribute name="truck_height" type="positiveDecimal" use="optional"/>
<xsd:attribute name="truck_length" type="positiveDecimal" use="optional"/>
<xsd:attribute name="truck_per_axle_weight" type="positiveDecimal"
use="optional"/>
<xsd:attribute name="truck_weight" type="positiveDecimal" use="optional"/>
<xsd:attribute name="truck_width" type="positiveDecimal" use="optional"/>
<xsd:attribute name="cutoff_distance" type="positiveDecimal"
use="optional"/>
<xsd:attribute name="sort_by_distance" type="xsd:boolean" use="optional"/>
</xsd:complexType>
</xsd:schema>

13.3.5.1 batch_route_request要素

バッチ・モード・ルート・リクエストのルート要素には、常にbatch_route_requestという名前が付けられます。

子要素の<start_location>は、住所指定、事前ジオコード済住所または経度/緯度の点として、ルートの出発地を指定します。

1つ以上ある子要素の<end_location>は、それぞれが、住所指定、ジオコード済住所または経度/緯度の点として、ルートの目的地を示します。

<location>子要素は、バッチ・モード・ルート・リクエストでは使用されません。

13.3.5.2 batch_route_request属性

ルート要素<batch_route_request>には、複数の属性があります(そのほとんどはオプションです)。これらの属性をこの項で定義します。

<batch_route_request>要素は、いくつかの属性を<route_request>要素と共有します。これらの属性は、<route_request>の属性と同じ意味を持ちます(「batch_route_request属性」を参照)。また、sort_by_distance属性およびcutoff_distance属性は、単一ルートのリクエストには適用されません。

sort_by_distanceはオプションの属性で、戻されるルートを、出発地から目的地までの距離で昇順にソートするかどうかを示します。TRUEを指定すると距離でソートされたルートが戻され、FALSE (デフォルト)を指定するとソートは行われません。

cutoff_distanceはオプションの属性で、この属性を指定すると、出発地から目的地までの距離が、指定した距離以下のルートのみが戻されます。デフォルトでは、すべてのルートが戻されます。

注意:

バッチ内のいずれかのルートがレスポンスに<router_error>要素(「一括ルート・レスポンスXMLスキーマ」を参照)を生成する場合、そのルートはレスポンスから除外され表示されません。

13.3.6 一括ルート・レスポンスXMLスキーマ

次に、一括ルート・レスポンスのXMLスキーマ定義を示します。

<?xml version="1.0" encoding="UTF-8"?>
<!-- XML Schema definition for a Batch Mode Route Request -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">

<xsd:simpleType name="nonNegativeDecimal">
<xsd:restriction base="xsd:decimal">
<xsd:minInclusive value="0"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="distanceUnit">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="mile"/>
<xsd:enumeration value="km"/>
<xsd:enumeration value="kilometer"/>
<xsd:enumeration value="meter"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="timeUnit">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="minute"/>
<xsd:enumeration value="hour"/>
<xsd:enumeration value="second"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:element name="batch_route_response">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="route" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:nonNegativeInteger"
use="required"/>
<xsd:attribute name="step_count" type="xsd:nonNegativeInteger"
fixed="0" use="required"/>
<xsd:attribute name="distance" type="nonNegativeDecimal"
use="required"/>
<xsd:attribute name="distance_unit" type="distanceUnit"
use="required"/>
<xsd:attribute name="time" type="nonNegativeDecimal"
use="required">
<xsd:attribute name="time_unit" type="timeUnit" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:nonNegativeInteger" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>

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

古いバージョンのルーティング・エンジン(リリース12.1より前)では、スキーマに次の表が必要です。

- EDGE

- NODE

- PARTITION

- SIGN_POST

EDGE表およびNODE表には、ルーティング・エンジンで使用する街路ネットワークに関するエッジおよびノードの情報が格納されます。街路ネットワークの通りセグメント、交差点およびその他のエンティティを、エッジおよびノードを使用して表現する方法を理解するには、Oracle Spatial and Graphネットワーク・データ・モデル・グラフ(『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』を参照)を熟知している必要があります。

これ以降の項では、ルーティング・エンジンで使用する表について、表名のアルファベット順に説明します。

- EDGE表

- NODE表

- PARTITION表

- SIGN_POST表

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表の内容に基づいて、ルーティング・エンジンによって生成されます。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)。

LANGUAGE_CODE

CHAR (3文字)

標識に使用される言語を示す3文字の言語コードです。たとえば、英語はENG、フランス語はFRE、スペイン語はSPAです。

13.5 ルーティング・エンジンで使用されるユーザー・データ構造

ルーティング・エンジンでは、ユーザー・データとルーティング・エンジン・データを使用します。右左折制限ユーザー・データなどの一部のユーザー・データは、ルーティング・エンジン・スキーマに存在する必要があります。トラック輸送ユーザー・データなどのその他のユーザー・データはオプションです。

注意:

リリース12.1からは、リリース12.1以降のデータに対して実行されるルーティング・エンジンは、右左折制限ユーザー・データが存在することを前提とします。ルーティング・エンジンは以前のデータ・バージョンに対しても実行できますが、この操作が行われた場合は、PARTITION表のはるかに制限されたバージョンの右左折制限データが使用されます。

この項では、次のタイプのユーザー・データに使用される表について説明します。

- 右左折制限ユーザー・データ

- トラック輸送ユーザー・データ

13.5.1 右左折制限ユーザー・データ

右左折制限は、次の各表で記述されます。

- ROUTER_CONDITION表

- ROUTER_NAV_STRAND表

- ROUTER_TURN_RESTRICTION_DATA表

エッジ(またはリンク)は、方向のないエッジで、EDGE表(「EDGE表」で説明)内の1つ以上の方向付きエッジに対応します。右左折制限は、2つ以上のエッジのグループであるナビゲーション・ストランド(nav_strand)に適用されます。単純な右左折制限は2エッジ(右左折が開始するエッジと右左折が終了するエッジ)のnav_strandに適用されます。nav_strandでは、3つ以上のエッジを使用して、非常に複雑な制限付きマヌーバを記述できます。

13.5.1.1 ROUTER_CONDITION表

ROUTER_CONDITION表には、単純な条件の右左折制限ユーザー・データを構築するために使用されるRAWデータが含まれます。この表は、ルーティング・プロセス中は使用されません。かわりに、ROUTER_TURN_RESTRICTION_DATAユーザー・データ表の構築に使用されます。これはルーティング・エンジン・データ・セットの一部であるため、ルーティング・エンジン・データが再パーティション化される場合に右左折制限ユーザー・データを再構築できます。ROUTER_CONDITION表に含まれる列を、表13-5に示します。

表13-5 ROUTER_CONDITION表

列名

データ型

説明

NAV_STRAND_ID

NUMBER

nav_strandの一意ID番号。

APPLIES_TO

NUMBER

右左折制限が適用される車両のリストを表す数値。

13.5.1.2 ROUTER_NAV_STRAND表

ROUTER_NAV_STRAND表には、複雑なマヌーバの右左折制限ユーザー・データを構築するために使用されるRAWデータが含まれます。この表は、ルーティング・プロセス中は使用されません。かわりに、ROUTER_TURN_RESTRICTION_DATAユーザー・データ表の構築に使用されます。これはルーティング・エンジン・データ・セットの一部であるため、ルーティング・エンジン・データが再パーティション化される場合に右左折制限ユーザー・データを再構築できます。ROUTER_NAV_STRAND表に含まれる列を、表13-6に示します。

表13-6 ROUTER_NAV_STRAND表

列名

データ型

説明

NAV_STRAND_ID

NUMBER

このエッジを含むnav_strandの一意ID番号。

SEQ_NUM

NUMBER

nav_strand内のエッジIDの位置。

LINK_ID

NUMBER

このnav_strandの一部であるエッジのリンク(エッジ) ID。

NODE_ID

NUMBER

nav_strand内の最初と2番目のリンクIDを接続するノードのノードID。これは、nav_strand内の他のすべてのリンクに対してはゼロです。

APPLIES_TO

NUMBER

右左折制限が適用される車両のリストを表す数値。

13.5.1.3 ROUTER_TURN_RESTRICTION_DATA表

ROUTER_TURN_RESTRICTION_DATA表には、右左折制限を記述するユーザー・データが含まれます。この表は、ルーティング・プロセス中に右左折制限を適用するために使用されます。この表は、EDGE表のパーティション化に合せてパーティション化されます。特定のルーティング・エンジン・データ・パーティションがキャッシュに入れられた場合、同じ番号の右左折制限ユーザー・データ・パーティションもキャッシュに入れられます。

ROUTER_TURN_RESTRICTION_DATA表に含まれる列を、表13-7に示します。

表13-7 ROUTER_TURN_RESTRICTION_DATA表

列名

データ型

説明

PARTITION_ID

NUMBER

この右左折制限ユーザー・データが関連付けられるルーティング・エンジン・データ・パーティションIDです。

NUM_EDGES

NUMBER

右左折制限が適用されるエッジ数です。

TURN_RESTRICTION_DATA

BLOB

右左折制限を記述するnav_strand情報と右左折制限が適用されるエッジを含むBLOBです。

13.5.2 トラック輸送ユーザー・データ

トラック輸送情報は、次の各表で記述されます。

- ROUTER_TRANSPORT表

- ROUTER_TRUCKING_DATA表

13.5.2.1 ROUTER_TRANSPORT表

ROUTER_TRANSPORT表には、トラック輸送ユーザー・データを構築するために使用されるRAWデータが含まれます。この表は、ルーティング・プロセス中は使用されません。かわりに、ROUTER_TRUCKING_DATA表 (ユーザー・データ表)の構築に使用されます。これはルーティング・エンジン・データ・セットの一部であるため、ルーティング・エンジン・データが再パーティション化される場合にトラック輸送ユーザー・データを再構築できます。

ROUTER_TRANSPORT表がルーティング・エンジン・スキーマに最初にインポートされる際に、SDO_ROUTER_PARTITION.CREATE_TRUCKING_DATAプロシージャ(「CREATE_TRUCKING_DATAプロシージャ」を参照)を実行してROUTER_TRUCKING_DATAパーティション・ユーザー・データ表を生成する必要があります。

ROUTER_TRANSPORT表に含まれる列を、表13-8に示します。

表13-8 ROUTER_TRANSPORT表

列名

データ型

説明

EDGE_ID

NUMBER

制限が適用されるエッジのエッジID番号。

MAINTYPE

NUMBER(2)

トラック輸送制限のタイプ: 高さ、長さ、車軸当たり重量、重量、幅または法定。

SUBTYPE

NUMBER(2)

制限のメイン・タイプの拡張または例外の提供に使用されるサブタイプ。たとえば、配送サブタイプでは、配送トラックに、他のトラックが禁止されている場所へのアクセスを許可することがあります。

VALUE

NUMBER(6,2)

メイン・タイプに関連付けられている値: たとえば、幅メイン・タイプに関連付けられている値20は、20メートル・トンを超えるトラックがエッジへのアクセスを許可されないことを示します。

13.5.2.2 ROUTER_TRUCKING_DATA表

ROUTER_TRUCKING_DATA表には、トラック制限を記述するユーザー・データが含まれます。この表は、ルーティング・プロセス中にトラック制限を適用するために使用されます。この表は、EDGE表のパーティション化に合せてパーティション化されます。特定のルーティング・エンジン・データ・パーティションがキャッシュに入れられた場合、ルーティングされる車両がトラックであれば、同じ番号のトラック制限ユーザー・データ・パーティションもキャッシュに入れられます。

ROUTER_TRUCKING_DATA表に含まれる列を、表13-9に示します。

表13-9 ROUTER_TRUCKING_DATA表

列名

データ型

説明

PARTITION_ID

NUMBER

このトラック輸送データが関連付けられるルーティング・エンジン・データ・パーティションのIDです。

NUM_EDGES

NUMBER

このパーティション内のトラック輸送制限があるエッジの数。

TRUCKING_DATA

BLOB

BLOB形式での、このパーティションのトラック輸送制限。

14 OpenLSのサポート

この章では、Open GeoSpatial Consortium (OGC)のOpen Location Services Initiative (OpenLS)バージョン1.0および1.1に基づいた、Webサービスに対するOracle Spatial and Graphのサポートについて説明します。OpenLSの説明については、ダウンロードおよびスキーマへのリンクを含むhttp://www.opengeospatial.org/standards/olsを参照してください。

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

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

- OpenLSのApplication Program Interface

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

注意:

OpenLSを使用する前に、「空間Webサービスの概要」で説明されている概念を理解し、その章での説明に従って必要な構成作業を実行しておく必要があります。

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

Spatial and Graphでは、次のOGC OpenLSサービスをサポートしています。

- ロケーション・ユーティリティ・サービス(ジオコーディング)

- プレゼンテーション・サービス(マッピング)

- ルート・サービス(運転方向)

- ディレクトリ・サービス(YP(イエロー・ページ))

Spatial and Graphでは、現在、OGC OpenLSのゲートウェイ・サービス(モバイル・ポジショニング)をサポートしていません。

ディレクトリ・サービス(YP (イエロー・ページ))を除き、すべてのサポートされているサービスについて、最初に特定の操作を実行する必要があり、この操作にはサードパーティ・データの取得およびロードと、Spatial and GraphのOpenLSサービスの基礎となるテクノロジの構成およびデプロイが含まれている場合もあります。表14-1に、Spatial and GraphのOpenLSサービスに加えて、要件および基礎となるテクノロジを説明している章またはマニュアルを示します。

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

Spatial and GraphのOpenLSサービス

依存対象

参照先

ジオコーディング

ジオコーディングを行うメタデータとデータ

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

マッピング

Oracle MapViewer

Oracle Fusion Middleware for Oracle MapViewerユーザーズ・ガイド

運転方向

ルーティング・エンジン

ルーティング・エンジン

ビジネス・ディレクトリ(YP(イエロー・ページ))

外部プロバイダからのデータ

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

14.2 OpenLSのApplication Program Interface

Spatial and GraphのOpenLSサービスを使用する際に、WebサービスAPIとPL/SQL APIという2つのApplication Program Interface (API)が提供されます。

WebサービスAPIでは、Web Feature Services (「Web Feature Service(WFS)のサポート」を参照)と同じSOAPエンベロープを使用します。WSS認証とプロキシ認証およびユーザー管理を使用して、認証と認可を有効にします。

WebサービスよりもPL/SQL APIの方が便利です。認証と認可は、OpenLSリクエストを送信して結果を戻すPL/SQLサブプログラムのコールに使用するデータベース接続を介して有効化されます。PL/SQL APIは、「SDO_OLSパッケージ(OpenLS)」で説明されている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 OpenLSのジオコーディング・レスポンス

例14-2は、例14-1のリクエストに対するレスポンスです。2つの住所に対して経度と緯度の座標が戻されます(最初に-122.4083257 37.788208、次に-122.4753965 37.7269066が戻されます)。

<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 OpenLSのマッピング・レスポンス

例14-4は、例14-3のリクエストに対するレスポンスです。ただし、実際のレスポンスでは、<xls:URL>Actual URL replaced with constant string for test</xls:URL>の行にマップ・イメージの実際のURLが含まれます。

<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 OpenLSのルーティング・レスポンス

例14-6は、例14-5のリクエストに対するレスポンスの一部です。例14-6では、合計予想運転時間、合計距離、ルートを囲む最小境界矩形の左下および右上の経度/緯度座標、およびルートを表す線ジオメトリに沿った最初のいくつかの点の経度/緯度座標を示します。

<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 OpenLSのディレクトリ・サービス(YP)・レスポンス

例14-8は、例14-7のリクエストに対するレスポンスです。レスポンスには、特定のSICコードのいずれかまたは両方が適用されている2つのビジネスに関する情報が含まれます。

<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 and GraphにおけるWeb Feature Service (WFS)のサポートについて説明します。この章の内容は次のとおりです。

- WFSエンジン

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

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

- WFSの管理用のJava API

- Oracle Workspace ManagerでのWFSの使用

注意:

WFSを使用する前に、「空間Webサービスの概要」で説明されている概念を理解し、その章での説明に従って必要な構成作業を実行しておく必要があります。

以前のリリースの、1つ以上のSYS.XMLTABLEINDEX型の索引を使用して索引付けされたデータがある場合には、アップグレード後に索引をアップグレードして再作成する前に、関連する索引を削除する必要があります(「アップグレード前およびアップグレード後に行う索引のメンテナンス(WFSおよびCSW)」を参照)。

15.1 WFSエンジン

この章では、Web Feature Serviceエンジンについて、クライアントとの関係およびデータベース・サーバーとの関係も含めて説明します。WFSはJava Webアプリケーションとして実装され、WebLogic 12.1.3以降でデプロイできます。必要なJavaバージョンはJDK 1.8以降です。

WFSにはメタデータ層があります。この層では、WFSリクエストへの応答で必要とされるメタデータがデータベースに格納されます。メタデータには空間列が含まれており、Oracle Spatial and Graphインタフェースを使用して空間列の問合せおよび処理が可能です。メタデータには、フィーチャの非空間属性と空間属性の関連付け、およびWeb Feature Serviceからクライアントに提供されるサービスも格納されます。

図15-1に、WFSのアーキテクチャを示します。

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

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

- WFSは、中間層の一部であり、フィーチャ・キャッシュを含みます。

- WFSでは、SOAP/XML形式のWFSリクエストおよびレスポンスを使用して、Webサービス・クライアントと通信できます。

- WFSでは、データベースに対するJDBCコールを介して空間データおよびメタデータへのアクセスが実行されます。

- データベースには、WFSのメタデータとデータ、および管理操作用のPL/SQLパッケージとともにOracle Spatial and Graphが含まれます(「SDO_WFS_PROCESSパッケージ(WFSの処理)」および「SDO_WFS_LOCKパッケージ(WFS)」を参照)。

ユーザー識別子およびユーザー・ラベルはLDAPで管理されます。LDAPは中間層と連携して認証を実行します。

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

WFSでは、リレーショナルおよびドキュメントベースのフィーチャ・タイプがサポートされます。

- リレーショナル・フィーチャ・タイプでは、データベース表のコンテンツがフィーチャ・インスタンスとして公開されます。リレーショナル・フィーチャ・タイプは、Oracle Spatial and Graphを使用して地理空間データを管理し、Oracle Databaseを使用して他の業務データを管理する場合に適しています。Spatial and Graph WFSの実装によって、特に、Webサービスを使用して実装されたサービス指向アーキテクチャ(SOA)システムにおいて、データへのアクセス方法が提供されます。
リレーショナル・フィーチャ・タイプの管理には、PL/SQL Application Program Interface (API)を使用します。PL/SQLパッケージのSDO_WFS_LOCKおよびSDO_WFS_PROCESS(「SDO_WFS_LOCKパッケージ(WFS)」および「SDO_WFS_PROCESSパッケージ(WFSの処理)」をそれぞれ参照)は、リレーショナル・フィーチャ・タイプを管理できます。

- ドキュメントベース・フィーチャ・タイプでは、XMLスキーマベースのXMLコンテンツがフィーチャ・インスタンスとして公開されます。ドキュメントベース・フィーチャ・タイプは、メイン・データ・ソースとしてXMLを使用する場合や、そのようなデータでOracle Spatial and Graphを使用しない場合に適しています。このようなデータの場合、Spatial and Graph WFSの実装によって、ジオメトリのコンポーネントが抽出され、SDO_GEOMETRY型を使用して格納されます。残りのXMLコンポーネントはOracle XDBに格納され、これらのコンポーネントに対して適切なXMLIndex索引が作成されます。
ドキュメントベース・フィーチャ・タイプの管理には、Java API(「WFSの管理用のJava API」を参照)を使用します。

これらの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 and Graphの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

- 次のトランザクション・タイプを指定するサブ要素を含むトランザクション

- 挿入

- 更新

- 削除

XMLリクエストとレスポンスの書式は、リレーショナルおよびドキュメントベースの両方のフィーチャ・タイプで同様のものが使用されます。この項のいくつかの例で、「座標系変換の例」の例6-17で使用したCOLA_MARKETS_CS表に基づくリレーショナル・フィーチャを参照します。MKT_ID列には各フィーチャの一意の数値IDが含まれ、NAME列には各フィーチャの名前(cola_a、cola_b、cola_cまたはcola_d)が含まれ、SHAPE列には各フィーチャと関連付けられたジオメトリが含まれます。

例15-1 GetCapabilitiesリクエスト

例15-1は、指定した名前空間URLで、WFSという名前のWFSサーバーの機能を取得するリクエストです。このリクエストでは、機能のドキュメント(「機能のドキュメント」を参照)が戻されます

<?xml version="1.0" ?>
<GetCapabilities
service="WFS"
version="1.0.0"
xmlns="http://www.opengis.net/wfs" />

例15-2 GetCapabilitiesのレスポンス

例15-2は、例15-1のリクエストに対するレスポンスからの抜粋です。

<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 DescribeFeatureTypeリクエスト

例15-3は、COLAという名前のフィーチャ・タイプを記述するリクエストです。

<?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 DescribeFeatureTypeのレスポンス

例15-4は、例15-3のリクエストに対するレスポンスです。レスポンスはXMLスキーマ定義(XSD)です。

<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 GetFeatureリクエスト

例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を参照

<?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 GetFeatureのレスポンス

例15-6は、例15-5のリクエストに対するレスポンスです。

<?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 GetFeatureWithLockリクエスト

例15-7は、MKT_ID値が2より大きく、NAME値がcola_cであるか、またはMKT_ID値が3であるタイプCOLAのフィーチャのMKT_ID、NAMEおよびSHAPEプロパティを取得し、そのフィーチャをロックするリクエストです。

<?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 GetFeatureWithLockのレスポンス

例15-8は、例15-7のリクエストに対するレスポンスです。

<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 LockFeatureリクエスト

例15-9は、MKT_ID値が2のフィーチャをロックするリクエストです。

<?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 LockFeatureのレスポンス

例15-10は、例15-9のリクエストに対するレスポンスです。

<wfs:WFS_LockFeatureResponse xmlns:wfs="http://www.opengis.net/wfs">
<wfs:LockId>2</wfs:LockId>
</wfs:WFS_LockFeatureResponse>

例15-11 Insertリクエスト

例15-11は、WFSという名前のWFSサービスに関連付けられた表に、MKT_IDが5でNAMEがcola_eのフィーチャを挿入するリクエストです。

<?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 Insertのレスポンス

例15-12は、例15-11のリクエストに対するレスポンスです。

<?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 Updateリクエスト

例15-13は、WFSという名前のWFSサービスに関連付けられた表に含まれるフィーチャのうち、MKT_IDが2より大きく4より小さい、かつNAMEがNULL以外のフィーチャを更新するリクエストです。このリクエストには、指定したフィーチャのNAME値をcola_clに設定することが指定されています。

<?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 Updateのレスポンス

例15-14は、例15-13のリクエストに対するレスポンスです。

<?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 Deleteリクエスト

例15-15は、WFSという名前のWFSサービスに関連付けられた表に含まれるフィーチャのうち、MKT_IDが3より大きくNAMEがcola_eのフィーチャおよびNAMEがNULL以外のフィーチャを削除するリクエストです。

<?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 Deleteのレスポンス

例15-16は、例15-15のリクエストに対するレスポンスです。

<?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デモ・ファイル(「サンプルJavaクライアントのデモ・ファイル」を参照)に含まれています。フィーチャ・タイプをパブリッシュする例の使用方法は、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クラス(「publishFeatureTypeに関連するクラス」を参照)のArrayListです。

mandatoryPathsは、フィーチャ・タイプに含まれる必須パスのリストです。これは、oracle.spatial.ws.PathInfoクラス(「publishFeatureTypeに関連するクラス」を参照)のArrayListです。

tsPathsは、フィーチャ・タイプに含まれる時間に関連したパスのリストです(date、dateTime、gYear、gMonth、gDay、gMonthDay、gYearMonthなど)。これは、oracle.spatial.ws.PathInfoクラス(「publishFeatureTypeに関連するクラス」を参照)のArrayListです。

sdoMetaInfoは、空間パスの空間メタデータ情報です。これは、oracle.spatial.ws.GeomMetaInfoクラス(「publishFeatureTypeに関連するクラス」を参照)の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クラス(「publishFeatureTypeに関連するクラス」を参照)のArrayListです。

idxPathsは、索引パスのリストです。これは、XDB.XMLINDEX型の索引の作成時に、索引が作成されるパスのリストです。これは、oracle.spatial.ws.PathInfoクラス(「publishFeatureTypeに関連するクラス」を参照)のArrayListです。

idxPathTypesは、各索引パスの情報を指定します。このパスには、string[3]の次の各要素が含まれます。string[0]にはタイプ名、string[1]にはタイプの形式(長さのタイプなど)、string[2]には、Bツリー索引と一意索引のいずれを作成するか、または索引の作成を行わないかの指定(WFSAdmin.BTREE、WFSAdmin.UNIQUEまたはNULL)が含まれます。

genXMLIndexは、ブール値です。TRUEの場合は、タイプXDB.XMLINDEXの索引がドキュメントベースのフィーチャ・タイプ上に作成されます。FALSEの場合、タイプXDB.XMLINDEXの索引はドキュメントベースのフィーチャ・タイプ上に作成されません。現時点で索引を作成しないことを選択する場合でも、createXMLTableIndexメソッド(「createXMLTableIndexメソッド」を参照)を使用して後から作成できます。

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クラス(「publishFeatureTypeに関連するクラス」を参照)のArrayListです。

idxPathTypesは、各索引パスの情報を指定します。このパスには、string[3]の次の各要素が含まれます。string[0]にはタイプ名、string[1]にはタイプの形式(長さのタイプなど)、string[2]には、Bツリー索引と一意索引のいずれを作成するか、または索引の作成を行わないかの指定(WFSAdmin.BTREE、WFSAdmin.UNIQUEまたはNULL)が含まれます。

genXMLIndexは、ブール値です。TRUEの場合は、タイプXDB.XMLINDEXの索引がドキュメントベースのフィーチャ・タイプ上に作成されます。FALSEの場合、タイプXDB.XMLINDEXの索引はドキュメントベースのフィーチャ・タイプ上に作成されません。現時点で索引を作成しないことを選択する場合でも、createXMLTableIndexメソッド(「createXMLTableIndexメソッド」を参照)を使用して後から作成できます。

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プロシージャ(「SDO_WFS_LOCKパッケージ(WFS)」を参照)をコールします。このプロシージャを実行した後は、データベース・トランザクションがWFS表で許可されており、WFSのトランザクションの間、WFS-Tセマンティクスはセッションが終了するまで保持されます。

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

この章では、OpenGISコンソーシアム仕様のカタログ・サービスであるOracle Spatial and Graph実装について説明します。この仕様によると、カタログ・サービスは、データ、サービスおよび関連する情報オブジェクトについての記述情報(メタデータ)の集合をパブリッシュおよび検索する機能をサポートしています。カタログ内のメタデータは、ユーザーとソフトウェアの両方によって評価したり、詳細な処理を行う目的で、問合せや配置が可能なリソース特性を示します。カタログ・サービスは、情報コミュニティ内に登録された情報リソースの検索およびバインドをサポートする必要があります。

ここでは、Oracle Spatial and Graph実装をCatalog Services for the Web (CSW)と呼びます。

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

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

- CSWのAPIおよび構成

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

- CSWの管理用のJava API

注意:

CSWを使用する前に、「空間Webサービスの概要」で説明されている概念を理解し、その章での説明に従って必要な構成作業を実行しておく必要があります。

以前のリリースの、1つ以上のSYS.XMLTABLEINDEX型の索引を使用して索引付けされたデータがある場合には、アップグレード後に索引をアップグレードして再作成する前に、関連する索引を削除する必要があります(「アップグレード前およびアップグレード後に行う索引のメンテナンス(WFSおよびCSW)」を参照)。

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

この章では、CSWについて、クライアントとの関係およびデータベース・サーバーとの関係も含めて説明します。CSWはJava Webアプリケーションとして実装され、WebLogic 12.1.3以降でデプロイできます。必要なJavaバージョンはJDK 1.8以降です。

CSWにはメタデータ層があります。この層では、カタログ・リクエストへの応答で必要とされるメタデータがデータベースに格納されます。メタデータには空間列が含まれており、Oracle Spatial and Graphインタフェースを使用して空間列の問合せおよび処理が可能です。メタデータには、レコードの非空間属性と空間属性の関連付け、およびカタログ・サービスからクライアントに提供されるサービスも格納されます。

図16-1に、CSWのアーキテクチャを示します。

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

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

- CSWは中間層のコンテナの一部です。

- CSWでは、SOAP/XML/KVP形式のCSWリクエストおよびレスポンスを使用して、Webサービス・クライアントと通信できます。

- CSWでは、データベースに対するJDBCコールを介して空間データおよびメタデータへのアクセスが実行されます。

- データベースには、CSWのメタデータおよびデータとともにOracle Spatial and Graphが含まれます。

16.2 CSWのAPIおよび構成

CSWのAPIを使用すると、次のような操作を実行できます。

- レコード・タイプ・ドメインおよびレコード・ビューの変換に関する情報の指定

- レコード・タイプのパブリッシュ

- レコード・タイプの削除(パブリッシュの解除)

- CSWレコード・タイプに対する権限の付与および取消し

PL/SQL API(SDO_CSW_PROCESSパッケージ)は「SDO_CSW_PROCESSパッケージ(CSWの処理)」、XMLリクエストおよびレスポンスの例は「XMLのリクエストおよびレスポンス例」、Java APIは「CSWの管理用のJava API」を参照してください。

16.2.1 機能のドキュメント(CSW)

クライアントはサーバーの機能に関する情報を取得できます。機能のドキュメントは、GetCapabilitiesリクエストに対するレスポンスとしてCSWサーバーにより生成されます。機能のドキュメントには、Oracleデータベースに保存されているCSWメタデータから抽出された情報が含まれています(レコード・タイプとサポートされる操作のタイプを含む)。

クライアントは、HTTP GET、POSTおよびSOAPプロトコルを使用してこの機能ドキュメントにアクセスできます。次の例では、HTTPプロトコルを使用しています。

http:///<machine-name:port>/oraclespatial/csw?request=GetCapabilities&service=CSW&acceptversion=2.0.0&outputFormat=text/xml

次に、前述の書式について説明します。

- machine-nameは、アプリケーション・サーバーが実行されているシステムの名前です。

- portは、アプリケーション・サーバーが実行されているポートの番号です。

- oraclespatialは、Oracle Spatial and GraphのWebサービス・アプリケーションがマウントされるデフォルトのrootです。

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

GML形式ではない空間コンテンツをCSWで処理する必要がある場合は、その空間パス情報を抽出するためにextractSDOという名前のユーザー定義のファンクションを作成する必要があります。このファンクションは、GML以外の形式の空間コンテンツが使用され空間索引を作成する対象となるレコード・タイプごとに実装する必要があります。(レコード・タイプのすべての空間コンテンツがGML形式の場合、このファンクションは必要ありません。)

また、「extractSDOファンクションの登録および登録解除」で説明されているとおりに、このファンクションを登録する必要があります。これにより、GML形式ではない空間パス・コンテンツを抽出する必要がある場合、Oracle Spatial and Graph 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

- 次のトランザクション・タイプを指定するサブ要素を含むトランザクション

- 挿入

- 更新

- 削除

例16-1 GetCapabilitiesリクエスト

例16-1は、指定した名前空間URLで、CSWという名前のCSWサーバーの機能を取得するリクエストです。このリクエストでは、機能のドキュメント(「機能のドキュメント」を参照)が戻されます

<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 GetCapabilitiesのレスポンス

例16-2は、例16-1のリクエストに対するレスポンスからの抜粋です。

<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 DescribeRecordリクエスト

例16-3は、指定した名前空間に対して、Recordというタイプ名のレコードを記述するリクエストです。

<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 DescribeRecordのレスポンス

例16-4は、例16-3のリクエストに対するレスポンスです。レスポンスはXMLスキーマ定義(XSD)です。各要素の説明は、レスポンス内の各<documentation>要素に含まれるコメントを参照してください。

<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 GetRecordsリクエスト

例16-5は、contributorがRajaであるレコードを取得するリクエストです。

Spatial Catalog Serviceでは、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 GetRecordsのレスポンス

例16-6は、例16-5のリクエストに対するレスポンスです。

<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 GetDomainリクエスト

例16-7は、レコード・タイプに関連するドメイン情報を取得するリクエストです。

<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 GetDomainのレスポンス

例16-8は、例16-7のリクエストに対するレスポンスです。

<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 GetRecordByIdリクエスト

例16-9は、レコードIDの値がREC-1のレコードを取得するリクエストです。

<?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 GetRecordByIdのレスポンス

例16-10は、例16-9のリクエストに対するレスポンスです。

<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 Insertリクエスト

例16-11は、contributorがJohnのレコードを挿入するリクエストです。このレコードのID値はREC-2で、指定した境界ボックス(左下および右上の座標で定義される最適化された四角形)の空間属性が含まれます。

<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 Insertのレスポンス

例16-12は、例16-11のリクエストに対するレスポンスです。

<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 Updateリクエスト

例16-13は、現行のcontributor値がJohnであるレコードのcontributor値をJaneに更新するリクエストです(つまり、値をJohnからJaneに変更します)。

<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 Updateのレスポンス

例16-14は、例16-13のリクエストに対するレスポンスです。

<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 Deleteリクエスト

例16-15は、contributor値がJaneであるレコードを削除するリクエストです。

<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 Deleteのレスポンス

例16-16は、例16-15のリクエストに対するレスポンスです。

<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デモ・ファイル(「サンプルJavaクライアントのデモ・ファイル」を参照)に含まれています。レコード・タイプをパブリッシュする例の使用方法は、Readme.txt ファイルを参照してください。このファイルは、src/パスの下にあるws_client.jarに含まれています。

typeNSは、レコード・タイプの名前空間のURLです。

typeNameは、レコード・タイプの名前です。

idPathsは、レコードIDパス要素のリストです。各要素はString型です。

spatialPathsは、レコード・タイプに含まれる空間パスのリストです。これは、oracle.spatial.ws.PathInfoクラス(「publishRecordTypeに関連するクラス」を参照)のArrayListです。

tsPathsは、レコード・タイプに含まれる時間に関連したパスのリストです(date、dateTime、gYear、gMonth、gDay、gMonthDay、gYearMonthなど)。これは、oracle.spatial.ws.PathInfoクラス(「publishRecordTypeに関連するクラス」を参照)の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クラス(「publishRecordTypeに関連するクラス」を参照)の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クラス(「publishRecordTypeに関連するクラス」を参照)のArrayListです。

idxPathsは、索引パスのリストです。これは、XDB.XMLINDEX型の索引の作成時に、索引が作成されるパスのリストです。これは、oracle.spatial.ws.PathInfoクラス(「publishRecordTypeに関連するクラス」を参照)のArrayListです。

idxPathTypesは、各索引パスの情報を指定します。このパスには、string[3]の次の各要素が含まれます。string[0]にはタイプ名、string[1]にはタイプの形式(長さのタイプなど)、string[2]には、Bツリー索引と一意索引のいずれかを作成するか、または索引の作成を行わないかの指定(CSWAdmin.BTREE、CSWAdmin.UNIQUEまたはNULL)が含まれます。

genXMLIndexは、ブール値です。TRUEの場合は、XDB.XMLINDEX型の索引がドキュメントベース・レコード・タイプ上に作成されます。FALSEの場合は、XDB.XMLINDEX型の索引はドキュメントベース・レコード・タイプ上に作成されません。現時点で索引を作成しないことを選択する場合でも、createXMLTableIndexメソッド(「createXMLTableIndexメソッド」を参照)を使用して後から作成できます。

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メソッドは、機能に関連する情報を移入するメソッドです。(機能のドキュメントについては、「機能のドキュメント」を参照してください。)このメソッドの書式は次のとおりです。

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クラス(「publishRecordTypeに関連するクラス」を参照)のArrayListです。

idxPathTypesは、各索引パスの情報を指定します。このパスには、string[3]の次の各要素が含まれます。string[0]にはタイプ名、string[1]にはタイプの形式(長さのタイプなど)、string[2]には、Bツリー索引と一意索引のいずれかを作成するか、または索引の作成を行わないかの指定(CSWAdmin.BTREE、CSWAdmin.UNIQUEまたはNULL)が含まれます。

genXMLIndexは、ブール値です。TRUEの場合は、XDB.XMLINDEX型の索引がレコード・タイプ上に作成されます。FALSEの場合は、XDB.XMLINDEX型の索引はレコード・タイプ上に作成されません。現時点で索引を作成しないことを選択する場合でも、createXMLTableIndexメソッド(「createXMLTableIndexメソッド」を参照)を使用して後から作成できます。

第III部 リファレンス情報

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

- 「概念および使用方法」では、Oracle Spatial and Graphの概念および使用方法について説明します。

- 「空間Webサービス」では、Oracle Spatial and GraphのWebサービスの概念および使用方法について説明します。

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

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

第III部に含まれる章は、次のとおりです。

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

- 空間演算子

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

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

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

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

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

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

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

- SDO_OLSパッケージ(OpenLS)

- SDO_PC_PKGパッケージ(点群)

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

- SDO_TIN_PKGパッケージ(TIN)

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

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

- SDO_WFS_LOCKパッケージ(WFS)

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

リファレンスの章に示す例を理解するには、「空間データ型およびメタデータ」(特に「SDO_GEOMETRYオブジェクト型」)に示す概念およびデータ型の情報を理解しておく必要があります。

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

この章では、空間オブジェクト・データ型を使用して動作する場合に使用されるSQL文について説明します。次の表に文を示します。

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

文

説明

ALTER INDEX

空間索引固有のパラメータを変更します。

ALTER INDEX REBUILD

空間索引、またはパーティション索引の指定されたパーティションを再作成します。

ALTER INDEX RENAME TO

空間索引または空間索引のパーティションの名前を変更します。

CREATE INDEX

SDO_GEOMETRY型の列に空間索引を作成します。

DROP INDEX

空間索引を削除します。

この章では、空間索引にこれらのSQL文を使用する方法を説明します。文の完全なリファレンス情報については、『Oracle Database SQL言語リファレンス』を参照してください。

この章の項「キーワードおよびパラメータ」では、特定のキーワード・グループの先頭を太字のイタリック体で示し、その後にそのグループ固有のキーワードを列挙します。たとえば、INDEX_PARAMSは、索引に関するキーワード・グループの先頭です。

17.1 ALTER INDEX

用途

空間索引固有のパラメータを変更します。

構文

ALTER INDEX [schema.]index PARAMETERS ('index_params  [physical_storage_params]' )
[{ NOPARALLEL | PARALLEL [ integer ] }] ;

キーワードおよびパラメータ

値

説明

INDEX_PARAMS

空間索引の特徴を変更します。

sdo_indx_dims

索引付けする次元数を指定します。たとえば、値に2を指定すると、最初の2次元にのみ索引付けします。実際の次元数以下の値を指定する必要があります。3次元ジオメトリの使用方法については、「3次元の空間オブジェクト」を参照してください。データ型は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(パーティションをメンテナンスするための句)

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

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

保証免責

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

制限付権利について

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

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 Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

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

第三者のコンテンツ、製品、サービスに対する免責事項

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

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

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

Oracle Supportへのアクセス

サポートをご契約のお客様には、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)を参照してください。

17.2 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

すべてのジオメトリが指定されたジオメトリ・タイプであることを確認します。この値は、SDO_GTYPEの「ジオメトリ・タイプ」列の値である必要があります(ただし、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次元ジオメトリの使用方法については、「3次元の空間オブジェクト」を参照してください。データ型はNUMBERです。デフォルトは2です。

sdo_max_memory

空間索引作成または再作成操作を実行するために割り当てることができる最大メモリー量を指定します。指定できる値は、64000 (約64KB)から200000000 (約200MB)です。指定されたバイト数を割り当てることができない場合は、64000 (約64KB)が割り当てられます。デフォルトより大きい値を指定すると、索引の作成のパフォーマンスが大幅に向上します(ただし、使用可能なメモリーの20%を超える値は指定しないでください)。データ型はNUMBERです。デフォルトは10000000 (約10MB)です。

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キーワードは使用できません。

リリース12.1からは、ALTER INDEX REBUILD文では、以前に指定した索引作成パラメータが再利用されます。新しいまたは変更されたパラメータが渡された場合、新しいパラメータは前のパラメータとマージされ、変更されたパラメータは前のパラメータを上書きします。

layer_gtypeキーワードを使用してレイヤー内のデータを1つのジオメトリ・タイプに制限する方法の詳細は、「特定のジオメトリ・タイプへのデータの制限」を参照してください。

パーティション化された空間索引の場合、再作成される各パーティションに対して個別のALTER INDEX REBUILD文を使用する必要があります。

ローカル・パーティション空間索引を使用する場合は、「ローカル・パーティション空間索引の作成」の手順に従います。

使用可能なパラメータおよびPARALLELキーワードの使用方法については、CREATE INDEX文の「使用上の注意」を参照してください。

例

次の例では、OLDINDEXを再作成し、索引データ表が作成される表領域を指定します。

ALTER INDEX oldindex REBUILD PARAMETERS('tablespace=TBS_3');

関連項目

- CREATE INDEX

- DROP INDEX

- 『Oracle Database SQL言語リファレンス』のALTER TABLEおよびALTER INDEX(パーティションをメンテナンスするための句)

17.3 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

17.4 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

すべてのジオメトリが指定されたジオメトリ・タイプであることを確認します。この値は、SDO_GTYPEの「ジオメトリ・タイプ」列の値である必要があります(ただし、UNKNOWN_GEOMETRYを除く)。また、POINTを指定すると、点データの処理を最適化できます。データ型はVARCHAR2です。

sdo_dml_batch_size

コミット操作の後、更新のバッチごとに処理する索引更新の数を指定します。デフォルト値は1000です。たとえば、空間表に3500行を挿入し、その後コミット操作を実行すると、空間索引表に対する更新は、4つのバッチの挿入操作(1000、1000、1000および500)で実行されます。詳細は、「使用上の注意」を参照してください。データ型はNUMBERです。デフォルトは1000です。

sdo_indx_dims

索引付けする次元数を指定します。たとえば、値に2を指定すると、最初の2次元にのみ索引付けします。実際の次元数以下の値を指定する必要があります。3次元ジオメトリの使用方法については、「3次元の空間オブジェクト」を参照してください。データ型はNUMBERです。デフォルトは2です。

sdo_max_memory

空間索引作成または再作成操作を実行するために割り当てることができる最大メモリー量を指定します。指定できる値は、64000 (約64KB)から200000000 (約200MB)です。指定されたバイト数を割り当てることができない場合は、64000 (約64KB)が割り当てられます。デフォルトより大きい値を指定すると、索引の作成のパフォーマンスが大幅に向上します(ただし、使用可能なメモリーの20%を超える値は指定しないでください)。データ型はNUMBERです。デフォルトは10000000 (約10MB)です。

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倍のサイズの記憶域が必要になります(ただし、索引が作成された後はその作業表領域を削除または再使用できます)。

securefile

'securefile=TRUE'の場合は、SecureFilesインテリジェント圧縮が使用され、'securefile=FALSE'の場合は、SecureFilesインテリジェント圧縮は使用されません。詳細は、compressionパラメータの説明を参照してください。データ型はVARCHAR2です。デフォルトは'securefile=FALSE'です

compression

'compression=<OFF|LOW|MEDIUM|HIGH>'では、空間索引ノードの圧縮のレベルを制御します。OFF以外の値を指定するには、'securefile=TRUE'も指定する必要があり、Oracle Advanced Compressionオプションのライセンスが必要で、SecureFilesインテリジェント圧縮を実装する必要があります。詳細は、「使用上の注意」を参照してください。データ型はVARCHAR2です。デフォルトは'compression=OFF'です

{ NOPARALLEL | PARALLEL [ integer ] }

索引の作成および索引を使用する後続の問合せおよびDML操作にシリアル(NOPARALLEL)実行を使用するかパラレル(PARALLEL)実行を使用するかを制御します。パラレル実行の場合、並列度を示す整数値を指定できます。パラレル索引の作成の詳細は、「使用上の注意」を参照してください。デフォルトはNOPARALLELです。(整数値を指定せずにPARALLELを指定した場合、Oracle Databaseによって最適な並列度が計算されます。)

前提条件

- 現行のSQL CREATE INDEXにあらかじめ必要なことはすべて適用しておきます。

- 索引タイプおよび索引の実装タイプに対する実行権限が必要です。

- USER_SDO_GEOM_METADATAビューには、次元および座標境界情報とともに、空間索引付けする表の列に対するエントリが含まれている必要があります。

使用上の注意

空間索引については、「空間データの索引付け」を参照してください。

空間索引を作成する前に、ロールバック・セグメントのサイズおよびSORT_AREA_SIZEパラメータの値が適切であることを確認する必要があります(「空間索引の作成」を参照)。

線形参照システム(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データ・モデルの詳細は、「LRSデータ・モデル」を参照。)

パーティション表には、パーティション化された空間索引を作成できます。メリットや制限事項など、パーティション化された空間索引の詳細は、「パーティション空間索引の使用」を参照してください。

ローカル・パーティション空間索引を使用する場合は、「ローカル・パーティション空間索引の作成」の手順に従います。

索引構成表には空間索引を作成できません。

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つのジオメトリ・タイプに制限する方法の詳細は、「特定のジオメトリ・タイプへのデータの制限」を参照してください。

sdo_dml_batch_sizeパラメータを使用すると、Spatial and Graphは、システムのリソースを事前割当てすることにより、単一の索引更新を連続して実行するよりも効率的に複数の索引更新を実行できるため、アプリケーションのパフォーマンスが向上します(ただし、このメリットを活用するためには、各挿入操作の終了ごとに、または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パラメータ(指定した場合)のみが使用され、その他のすべての物理記憶域パラメータにはデフォルト値が使用されます。

LOW、MEDIUMまたはHIGHの値が設定されたcompressionパラメータでは、SecureFilesインテリジェント圧縮機能が使用されます。圧縮率が高くなれば、発生する待機時間も長くなります。

- 'compression=HIGH'では、より多くの作業が発生しますが、データの圧縮が向上します。

- 'compression=LOW'では、ファイル圧縮でよく見られるCPUコストの大部分を軽減する軽量の圧縮アルゴリズムが使用されます。このため、圧縮されたSecureFilesにより、SecureFiles LOB記憶域を非常に効率的に選択できます。LOWで圧縮されたSecureFiles LOBは、一般的にBasicFiles LOBよりも記憶域とCPU時間を消費せず、ディスクI/Oも減るためアプリケーションの実行を高速化できます。

注意:

OFF以外の値が設定されたcompressionを使用する場合は、DB_BLOCK_CHECKINGデータベース・パラメータをFALSEまたはOFFに設定します。その他のDB_BLOCK_CHECKINGデータベース・パラメータ値をOFF以外のcompression値とともに使用すると、空間索引のDML (挿入、更新または削除)操作に悪影響を与える可能性があります。

ファンクション・ベースの空間索引を作成する場合、パラメータ数は32以下である必要があります。ファンクション・ベースの空間索引の使用方法については、「ファンクション索引のSDO_GEOMETRYオブジェクト」を参照してください。

空間索引での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

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

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

保証免責

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

制限付権利について

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

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 Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

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

第三者のコンテンツ、製品、サービスに対する免責事項

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

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

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

Oracle Supportへのアクセス

サポートをご契約のお客様には、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)を参照してください。

17.5 DROP INDEX

構文

DROP INDEX [schema.]index [FORCE];

用途

空間索引を削除します。

キーワードおよびパラメータ

値

説明

FORCE

索引が処理中であることが明示されている場合、またはなんらかのエラー条件が発生している場合であっても、システム表から空間索引を削除します。

前提条件

索引タイプおよび索引の実装タイプに対する実行権限が必要です。

使用上の注意

CREATE INDEX文が失敗した後、データを削除するには、DROP INDEX索引名FORCEを使用します。

例

次の例では、索引が処理中またはエラーが発生した場合でも、OLDINDEXという名前の空間索引は強制的に削除されます。

DROP INDEX oldindex FORCE;

関連項目

- CREATE INDEX

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

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

保証免責

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

制限付権利について

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

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 Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

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

第三者のコンテンツ、製品、サービスに対する免責事項

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

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

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

Oracle Supportへのアクセス

サポートをご契約のお客様には、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)を参照してください。

18 空間演算子

この章では、空間オブジェクト・データ型で使用できる演算子について説明します。空間プロシージャと空間ファンクションとの違いなど、空間演算子の概要については、「空間演算子、空間プロシージャおよび空間ファンクション」を参照してください。次の表に、主な演算子を示します。

表18-1 主な空間演算子

演算子

説明

SDO_FILTER

指定されたジオメトリと相互作用するジオメトリを特定します。

SDO_JOIN

位相関係に基づいて空間結合を実行します。

SDO_NN

最も近くにあるジオメトリを特定します。

SDO_NN_DISTANCE

SDO_NN演算子によって戻されたオブジェクトの距離を戻します。

SDO_POINTINPOLYGON

1番目の列が点のx座標の値で、2番目の列が点のy座標の値である一連の行を使用して、指定したポリゴン・ジオメトリ内のこれらの行を戻します。

SDO_RELATE

2つのジオメトリが指定された方法で相互作用しているかどうかを判断します。(特定のマスク値操作用の簡易形式の代替演算子については、表18-2を参照してください。)

SDO_WITHIN_DISTANCE

2つのジオメトリ間の距離が、指定された距離内にあるかどうかを判断します。

表18-2に、特定のマスク・タイプのSDO_RELATE操作を実行する簡易形式の演算子を示します。

表18-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 and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』を参照してください。

18.1 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 and Graphで使用される9交差モデルについては、「空間関係およびフィルタ処理」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)とANYINTERACT関係を持つジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.2 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 and Graphで使用される9交差モデルについては、「空間関係およびフィルタ処理」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(2,2)、右上の座標が(4,6)の矩形)とCONTAINS関係を持つジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.3 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 and Graphで使用される9交差モデルについては、「空間関係およびフィルタ処理」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(1,1)、右上の座標が(5,8)の矩形)とCOVEREDBY関係を持つジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.4 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 and Graphで使用される9交差モデルについては、「空間関係およびフィルタ処理」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(1,1)、右上の座標が(4,6)の矩形)とCOVERS関係を持つジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.5 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 and Graphで使用される9交差モデルについては、「空間関係およびフィルタ処理」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(1,1)、右上の座標が(5,7)の矩形)とEQUAL関係を持つジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.6 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'形式である必要があります。(式は'TRUE'以外のどの値とも等しくない必要があります。)

geometry2は表から取り出されるか、または一時的なSDO_GEOMETRYオブジェクト(バインド変数、SDO_GEOMETRYコンストラクタなど)となります。

- geometry2列が空間索引付けされていない場合、演算子は問合せウィンドウをメモリー内で索引付けするため、高いパフォーマンスを実現します。

- geometry2の2つ以上のジオメトリが演算子に渡される場合は、ORDEREDオプティマイザ・ヒントが指定されている必要があり、geometry2にある表をFROM句の最初に指定する必要があります。

geometry1およびgeometry2が異なる座標系に基づいている場合、geometry2は、「演算子およびファンクションでの座標系が異なるジオメトリの使用」で説明するとおり、操作を実行するため一時的にgeometry1の座標系に変換されます。

注意:

ファイングレイン・アクセス制御ポリシーの表またはビューへの追加に、DBMS_RLS.ADD_POLICYプロシージャが使用されていて、指定されたポリシー・ファンクションが空間演算子を使用する場合、その演算子はSDO_FILTERである必要があります。このコンテキストでは、他の空間演算子はサポートされていません。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)と相互作用するジオメトリを選択します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.7 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 and Graphで使用される9交差モデルについては、「空間関係およびフィルタ処理」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(5,6)、右上の座標が(12,12)の矩形)とINSIDE関係を持つジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.8 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の場合にのみ利用できます。演算子の処理を指定します。使用可能なキーワードについては、「使用上の注意」の表18-3を参照してください。データ型はVARCHAR2です。デフォルトはNULLです。

preserve_join_order

演算子の処理中に結合順序が保持されることが保証されている場合に指定するオプションのパラメータです。この値が0 (デフォルト)の場合、表の順序は変更される場合があります。1の場合、表の順序は変更されません。データ型はNUMBERです。デフォルトは0です。

table1_partition

table_name1内の表パーティションの名前を指定します。表にパーティション空間索引がある場合は指定する必要があります。表にパーティション空間索引がない場合はNULLである必要があります。(パーティション空間索引の使用方法については、「パーティション空間索引の使用」を参照。)データ型はVARCHAR2です。デフォルトはnullです。

table2_partition

table_name2内の表パーティションの名前を指定します。表にパーティション空間索引がある場合は指定する必要があります。表にパーティション空間索引がない場合はNULLである必要があります。(パーティション空間索引の使用方法については、「パーティション空間索引の使用」を参照。)データ型はVARCHAR2です。デフォルトはnullです。

戻り値

SDO_JOINは、SDO_ROWIDSETのオブジェクトを戻します。このオブジェクトは、SDO_ROWIDPAIRのオブジェクトの表で構成されます。Oracle Spatial and Graphは、SDO_ROWIDSET型を次のとおり定義します。

CREATE TYPE sdo_rowidset as TABLE OF sdo_rowidpair;

Oracle Spatial and Graphは、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言語リファレンス』を参照してください。)ただし、使用方法が演算子に類似し、他のファンクションおよびプロシージャと同じパッケージに同梱されていないため、空間演算子の章で説明しています。

このテーブル・ファンクションは、全表結合を実行する必要がある場合に使用することをお薦めします。

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ではなく)を指定します。(ただし、その他すべての空間ファンクション、空間プロシージャおよび空間演算子には、<table_name>_LT名は使用できません。)

表18-3に、paramsパラメータのキーワードを示します。

表18-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であるとみなされます。

距離

関係チェックが実行される前に許容差(「許容差」を参照)に追加される距離値を数値で指定します。たとえば、許容差が10 mのときに'distance=100 unit=meter'を指定した場合、2つのオブジェクトが互いに110m以内にある場合は空間的に相互作用するとみなされます。distanceを指定してunitを指定しない場合、データに関連付けられた測定単位が使用されます。

unit

距離値に関連付ける測定単位を指定します('distance=100 unit=meter'など)。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。unitを指定した場合、distanceも指定する必要があります。データ型はVARCHAR2です。デフォルトは、データに関連付けられた測定単位です。測地データの場合、デフォルトはmです。

SDO_JOINをコールする前に、セッション内で前のすべてのDML文をコミットする必要があります。コミットしない場合、「ORA-13236: R-treeの処理で内部エラーが発生しました: [SDO_Join in active txns not supported]」というエラーが戻されます。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

自己結合の最適化

自己結合(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表をその表自体と結合し、各ジオメトリを調べてその表と空間的に相互作用する他のすべてのジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)この例では、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

18.9 SDO_NN

書式

SDO_NN(geometry1, geometry2, param [, number]);

説明

空間索引で、最も近くにあるジオメトリを識別するために使用します。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。geometry1のジオメトリのうち、geometry2に最も近いジオメトリが戻されます。(geometry2は、バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

param

演算子の処理を指定します。表18-4に、使用可能なキーワードを示します。このパラメータを指定しない場合、演算子によって、すべての行がgeometry2からの距離の昇順で戻されます。データ型はVARCHAR2です。

number

SDO_NNへのコールにSDO_NN_DISTANCE補助演算子が含まれている場合、SDO_NN_DISTANCEへのコールに使用されている数と同じ数を指定します。データ型はNUMBERです。

表18-4に、paramパラメータのキーワードを示します。

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

キーワード

説明

距離

最も近くにあるものの検索を中止する、距離単位の数を指定します。unitキーワードも指定していない場合、デフォルトはデータに関連付けられた計測単位になります。データ型はNUMBERです。

例: 'distance=10 unit=mile'

sdo_batch_size

WHERE句を満たす結果の数を戻すためにSDO_NN式の評価を2回以上行う必要がある場合、一度に評価される行の数を指定します。Rツリー索引が使用される場合のみ使用可能です。sdo_batch_size=0 を指定した場合(またはparamパラメータを完全に省略した場合)、結果セットのサイズに適したバッチ・サイズがSpatial and Graphによって計算されます。詳細は、「使用上の注意」および「例」を参照してください。データ型はNUMBERです。

例: 'sdo_batch_size=10'

sdo_num_res

戻される結果(最も近くにあるもの)の数を指定します。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値を引用符で囲んだ文字列)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。データ型はVARCHAR2です。デフォルトは、データに関連付けられた測定単位です。測地データの場合、デフォルトはmです。

例: 'unit=KM'

戻り値

この演算子では、問合せでgeometry2の最も近くにある、sdo_num_resに指定した数のオブジェクトをgeometry1から戻します。2つのジオメトリ・オブジェクトの近さを決定する際、各オブジェクトの表面上の2点間の最短距離が使用されます。

使用上の注意

表に空間索引が含まれない場合、または索引の作成時に指定された次元数と問合せウィンドウの次元数が一致しない場合、この演算子は無効になります。

この演算子は、常にWHERE句で使用される必要があり、この演算子を含む条件式は、SDO_NN(arg1, arg2, '<some_parameter>') = 'TRUE'の形式である必要があります。(式は'TRUE'以外のどの値とも等しくない必要があります。)

この演算子は、次の方法で使用できます。

- レイヤーのすべてのジオメトリが候補である場合、sdo_num_resキーワードを使用して、戻されるジオメトリの数を指定します。
sdo_num_resキーワードは、近接性のみを考慮する場合に特に役立ちます(たとえば、銀行名に関係なく、最も近い3つの銀行など)。

- 表のジオメトリが、WHERE句で指定されたジオメトリより近くにある場合、sdo_batch_sizeキーワードを使用し、WHERE句(ROWNUM疑似列を含む)を使用して、戻されるジオメトリの数を制限します。
sdo_batch_sizeキーワードは、同じ表の1つ以上の列を、WHERE句の最も近くにある検索列として考慮する必要がある場合に特に役立ちます(たとえば、名前にMegaBankが含まれる最も近い3つの銀行など)。

- また、「使用上の注意」で後述するように、sdo_num_resキーワードとsdo_batch_sizeキーワードの両方を指定することもできます。

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 and Graphによって計算されます。ただし、計算されたバッチ・サイズが最適ではない場合もあり、この計算によって処理オーバーヘッドが発生する場合もあります。問合せに対する適切なsdo_batch_size値を判断できる場合は、sdo_batch_size=0を指定した場合より高いパフォーマンスを得ることができます。

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軒のレストランを要求し、空間索引が4つのパーティションを持つ場合、この演算子によって最大20 (5×4)のジオメトリが戻されます。この場合、ROWNUM疑似列(この場合はWHERE ROWNUM <=5)を使用して、5軒の最も近いレストランを戻す必要があります。

geometry1およびgeometry2が異なる座標系に基づいている場合、geometry2は、「演算子およびファンクションでの座標系が異なるジオメトリの使用」で説明するとおり、操作を実行するため一時的に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, ...;

(ただし、「空間データの挿入、索引付けおよび問合せの例」の例には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 SQLチューニング・ガイド』を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、COLA_MARKETS表のSHAPE列から、指定した点(10,7)に最も近い2つのオブジェクトを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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句の条件を満たすかどうかを判断する前に評価する必要がある、最も近いジオメトリの数の最適な推測値を表します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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のより複雑な例については、「SDO_NNの例」を参照してください。

関連項目

- SDO_NN_DISTANCE

18.10 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に示す定義およびデータを使用しています。)

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

18.11 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 and Graphで使用される9交差モデルについては、「空間関係およびフィルタ処理」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)とON関係を持つジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.12 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 and Graphで使用される9交差モデルについては、「空間関係およびフィルタ処理」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、線ストリング・ジオメトリ(ここでは、(0,6)から(2,6)の水平な線)とOVERLAPBDYDISJOINT関係があるジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.13 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 and Graphで使用される9交差モデルについては、「空間関係およびフィルタ処理」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)とOVERLAPBDYINTERSECT関係を持つジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.14 SDO_OVERLAPS

書式

SDO_OVERLAPS(geometry1, geometry2);

説明

表内のジオメトリが特定のジオメトリと重なっているかどうか(OVERLAPBDYDISJOINTまたはOVERLAPBDYINTERSECT位相関係があるかどうか)を確認します。SDO_RELATE演算子に'mask=OVERLAPBDYDISJOINT+OVERLAPBDYINTERSECT'を含めて指定する場合と同じです。

この演算子で実行される操作および使用要件については、この章に示すSDO_RELATE演算子の項を参照してください。

Spatial and Graph演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

キーワードおよびパラメータ

値

説明

geometry1

表のジオメトリ列を指定します。列は、空間索引付けされている必要があります。データ型はSDO_GEOMETRYです。

geometry2

表のジオメトリまたはジオメトリの一時的なインスタンスを指定します。(バインド変数またはSDO_GEOMETRYコンストラクタを使用して指定します。)データ型はSDO_GEOMETRYです。

戻り値

式SDO_OVERLAPS(geometry1,geometry2) = 'TRUE'は、OVERLAPBDYDISJOINTまたはOVERLAPBDYINTERSECT位相関係を持つオブジェクトの組合せに対してTRUEを戻し、そうでない場合はFALSEを戻します。

使用上の注意

この章に示すSDO_RELATE演算子の「使用上の注意」を参照してください。

位相関係およびSpatial and Graphで使用される9交差モデルについては、「空間関係およびフィルタ処理」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)と重なるジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.15 SDO_POINTINPOLYGON

書式

SDO_POINTINPOLYGON(cur, geom_obj, tol, params) RETURN ANYDATASET;

説明

1番目の列が点のx座標の値で、2番目の列が点のy座標の値である一連の行を使用して、指定したポリゴン・ジオメトリ内のこれらの行を戻します。

キーワードおよびパラメータ

値

説明

cur

REFカーソル: ref_cursorのSQLのSELECTにある最初の2列は、ユーザー表のX点座標とY点座標である必要があります。その2列はNUMBER型である必要があります。(その他の列は、数値型、文字型および日付型の場合があります)。データ型はSYS_REFCURSORです。

geom_obj

空間ポリゴンのジオメトリ・オブジェクト: 表のポリゴン・ジオメトリか、ポリゴン・ジオメトリの一時的なインスタンスのどちらかで、curから選択されたすべての点に対してチェックされます。データ型はSDO_GEOMETRYです。

tol

許容差(「許容差」を参照)。0.0より大きい値を指定する必要があります。データ型はNUMBERです。

params

キーワードと値を指定する、オプションのパラメータ文字列です。演算子の処理を指定します。使用可能なキーワードについては、「使用上の注意」の表18-5を参照してください。データ型はVARCHAR2です。デフォルトはNULLです。

戻り値

SDO_POINTINPOLYGONは、ANYDATASET TYPEのオブジェクトを戻します(Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照)。ANYDATASETの出力列は、curパラメータで指定されたものになります。

使用上の注意

厳密には、SDO_POINTINPOLYGONは演算子ではなくテーブル・ファンクションです。(テーブル・ファンクションについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。)ただし、使用方法が演算子に類似し、他のファンクションおよびプロシージャと同じパッケージに同梱されていないため、空間演算子の章で説明しています。

curパラメータで使用されるSQL文では、WHERE句に任意の数の条件を指定できます。結果の行をSDO_POINTINPOLYGON演算子に渡す前に、この機能を使用して他の属性でデータをフィルタできます。

出力列は入力列と同一ですが、戻された行のみが選択基準に一致したものになります。

表18-5に、paramsパラメータのキーワードを示します。

18-5 SDO_POINTINPOLYGON演算子のparamsキーワード

キーワード

説明

mask

位相関係を指定します。有効な値は'mask=<value>'です。<value>は、ANYINTERACT、TOUCH、ON、INSIDEおよびDISJOINTの1つ以上の組合せです。(TOUCHおよびONは、このコンテキストのシノニムです。)

このパラメータがNULLであるか、または空の文字列を含む場合、mask=ANYINTERACTであるとみなされます。

sdo_batch_size

バッチで処理される最大行数を指定します。デフォルト値は4000で、最大値は32768です。データ型はNUMBERです。

例: 'sdo_batch_size=5000'

パラレル問合せサーバーを使用するには、次のいずれかを実行します。

- /*+ PARALLEL(<table alias>, <n>) */オプティマイザ・ヒントを指定します。<table_alias>は、指定された表の別名で、<n>は並列度です。

- 適切な権限のアカウントで次のコマンドを入力し、パラレル問合せの実行を有効にします。

ALTER SESSION FORCE PARALLEL QUERY;

例

次の例では、COLA_MARKETS表のデータに基づいて、COLA_MARKET_POINTSという新しい表を作成します(「空間データの挿入、索引付けおよび問合せの例」 および図2-1を参照)。次に、MKT_ID列の値が1より大きい各ジオメトリ内の点を選択します。(SDO_UTIL.INTERIOR_POINTファンクションを使用して、問合せ条件に一致する各ジオメトリ内に存在する点を取得します。)

-- Create a new table with a different name based on the data from the
-- COLA_MARKETS table. This table has four columns: X, Y, MKT_ID, and NAME.

CREATE TABLE cola_market_points AS
SELECT a.point.sdo_point.x X, a.point.sdo_point.y Y, MKT_ID, NAME
FROM (
SELECT mkt_id, name, sdo_util.interior_point(shape) point FROM cola_markets) a;

-- Limit to MKT_ID > 1. Also, use the PARALLEL hint.
SELECT /*+ PARALLEL(a, 4) */ *
FROM TABLE(sdo_PointInPolygon(
CURSOR(select * from cola_market_points where mkt_id > 1),
SDO_GEOMETRY(
2003,
NULL,
NULL,
MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1),
MDSYS.SDO_ORDINATE_ARRAY(1, 1, 8, 1, 8, 6, 5, 7, 1, 1)),
0.05)) a;

X          Y     MKT_ID NAME
---------- ---------- ---------- --------------------------------
6.3125      2.875          2 cola_b
4.6875      3.875          3 cola_c

次の例はWHERE句でバインド変数を使用して、params文字列を指定します。PIP_DATAという名前の表が存在すると想定しています。

DECLARE
my_cursor SYS_REFCURSOR;
my_pip_cursor SYS_REFCURSOR;
stmt varchar2(2000);
cnt number;
BEGIN
stmt := 'SELECT count(*) FROM ' ||
' TABLE (Sdo_PointInPolygon(' ||
'CURSOR(select * from pip_data where x < :x1),' ||
' :g1, :tol, ''mask=DISJOINT sdo_batch_size=6000'')) ';
open my_cursor for stmt
using 100, -- :x1
SDO_GEOMETRY( 2003, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 1003, 1),
SDO_ORDINATE_ARRAY(10, 10, 70,10, 70, 70, 50,70,
40,50, 20,70, 10,70, 10,10)), -- :g1
0.05; -- :tol
FETCH my_cursor into cnt;
dbms_output.put_line(to_char(cnt));
END;
/

関連項目

- SDO_UTIL.INTERIOR_POINT

18.16 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つ以上の組合せです。たとえば'mask=inside+touch'のように、複数のマスクが論理Boolean演算子ORで結合されます。9つの交差関係パターンについては、「空間関係およびフィルタ処理」を参照してください。

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'の形式である必要があります。(式は'TRUE'以外のどの値とも等しくない必要があります。)

geometry2は表から取り出されるか、または一時的なSDO_GEOMETRYオブジェクト(バインド変数、SDO_GEOMETRYコンストラクタなど)となります。

- geometry2列が空間索引付けされていない場合、演算子は問合せウィンドウをメモリー内で索引付けするため、高いパフォーマンスを実現します。

- geometry2の2つ以上のジオメトリが演算子に渡される場合は、ORDEREDオプティマイザ・ヒントが指定されている必要があり、geometry2にある表をFROM句の最初に指定する必要があります。

geometry1およびgeometry2が異なる座標系に基づいている場合、geometry2は、「演算子およびファンクションでの座標系が異なるジオメトリの使用」で説明するとおり、操作を実行するため一時的にgeometry1の座標系に変換されます。

SDO_GEOM.RELATEファンクションとは異なり、DISJOINTおよびDETERMINEマスクは、SDO_RELATE演算子との関係マスクで許可されていません。これは、SDO_RELATEが、相互作用する候補を空間索引を使用して検索するため、DISJOINTまたはDETERMINEを満たす情報が索引に存在しないためです。

たとえば'mask=touch+coveredby'のように、論理Boolean演算子ORを使用して複数のマスクを結合できます。リリース12.1からは、SPATIAL_VECTOR_ACCELERATIONシステム・パラメータをTRUEに設定した場合(「SPATIAL_VECTOR_ACCELERATIONシステム・パラメータ」で説明しているように強く推奨されます)、このようなマスクにUNION ALLを使用する必要はありません。ただし、SPATIAL_VECTOR_ACCELERATIONをTRUEに設定しない場合、空間問合せで各マスクを別々に指定し、UNION ALL構文を使用して結果を組み合せるとパフォーマンスが向上する場合があります。これは、マスクが同じSDO_RELATE演算子コールでグループ化されるのではなく、単一指定されるような場合に、Spatial and Graphが適用する内部最適化の結果です。(ただし、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';

SPATIAL_VECTOR_ACCELERATIONがTRUEの場合、前の問合せは最も単純で、パフォーマンスが最適です。ただし、SPATIAL_VECTOR_ACCELEERATIONがFALSEの場合は、この問合せについて、次のように、単一マスクが指定されている複数の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次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例はSDO_FILTER演算子の例に類似しています。ただし、これらの例では、(maskキーワードを使用して)相互作用の特定のタイプを識別し、空間的に相互作用しているかどうかも(概算ではなく)正確に判断します。

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)と相互作用するジオメトリを選択します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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ファンクション

18.17 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 and Graphで使用される9交差モデルについては、「空間関係およびフィルタ処理」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(1,1)、右上の座標が(5,7)の矩形)とTOUCH関係を持つジオメトリを検索します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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

18.18 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')を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。データ型は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'

(式は'TRUE'以外のどの値とも等しくない必要があります。)

ジオメトリ列には、空間索引が作成されている必要があります。測地データの場合、空間索引がRツリー索引である必要があります。

SDO_WITHIN_DISTANCEは、空間結合でサポートされていません。within-distance演算子で空間結合を実行する方法については、「Within-Distance演算子」を参照してください。

空間演算子での3Dサポート(計算時にすべての3次元を考慮する演算子または考慮しない演算子)については、「3次元の空間オブジェクト」を参照してください。

例

次の例では、問合せウィンドウ(ここでは、左下の座標が(4,6)、右上の座標が(8,8)の矩形)から10距離以内のジオメトリを選択します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図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のより複雑な例については、「SDO_WITHIN_DISTANCEの例」を参照してください。

関連項目

- SDO_FILTER

- SDO_RELATE

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

この章では、表19-1に示す空間集計ファンクションのリファレンス情報および使用方法について説明します。

表19-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またはREFカーソルからすべてのジオメトリ・オブジェクトの集計和集合を戻します。

SDO_AGGR_UNION

指定されたジオメトリ・オブジェクトで位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。

空間集計ファンクションの使用方法については、「空間集計ファンクション」を参照してください。

これらのほとんどの集計ファンクションには、SDOAGGRTYPE型のパラメータ(「SDOAGGRTYPEオブジェクト型」を参照)を指定できます。

注意:

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

19.1 SDO_AGGR_CENTROID

書式

SDO_AGGR_CENTROID(
AggregateGeometry  SDOAGGRTYPE
) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリ・オブジェクトの中心(重心)にあるジオメトリ・オブジェクトを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(「SDOAGGRTYPEオブジェクト型」を参照)を指定します。

使用上の注意

このファンクションの動作は、ジオメトリ・オブジェクトがポリゴンのみで構成されるか、点のみで構成されるか、またはポリゴンと点が混在するかによって異なります。

- ジオメトリ・オブジェクトがポリゴンのみで構成される場合、すべてのオブジェクトの中心が戻されます。

- ジオメトリ・オブジェクトが点のみで構成される場合、すべてのオブジェクトの中心が戻されます。

- ジオメトリ・オブジェクトにポリゴンと点が混在する(1つ以上のポリゴンと1つ以上の点が含まれる)場合、点は無視され、すべてのポリゴンの中心が戻されます。

結果は、ジオメトリ・オブジェクトの各ポリゴンの面積によって重み付けされます。ジオメトリ・オブジェクトにポリゴンおよび点が混在する場合、中心の計算では点が使用されません。ジオメトリ・オブジェクトがすべて点で構成される場合、それらの点は均等に重み付けされます。

SDO_GEOM.SDO_CENTROIDファンクションの詳細は、「SDO_GEOMパッケージ(ジオメトリ)」を参照してください。

例

次の例では、COLA_MARKETS表のジオメトリ・オブジェクトの中心を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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)

19.2 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ファンクション(「SDO_UTILパッケージ(ユーティリティ)」を参照)を使用すると、2つの単一線または複数線のジオメトリを連結できます。

いずれかの入力ジオメトリが単一線または複数線のジオメトリではない場合、またはすべての入力ジオメトリが同じ座標系に基づいていない場合、例外が発生します。

例

次の例では、2つの線ジオメトリをCOLA_MARKETS表に挿入し、これらのジオメトリの集計連結を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」のデータ定義を使用しています。)

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

19.3 SDO_AGGR_CONVEXHULL

書式

SDO_AGGR_CONVEXHULL(
AggregateGeometry  SDOAGGRTYPE
) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリ・オブジェクトの凸型部分であるジオメトリ・オブジェクトを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(「SDOAGGRTYPEオブジェクト型」を参照)を指定します。

使用上の注意

SDO_GEOM.SDO_CONVEXHULLファンクションの詳細は、「SDO_GEOMパッケージ(ジオメトリ)」を参照してください。

例

次の例では、COLA_MARKETS表のジオメトリ・オブジェクトの凸型部分を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

19.4 SDO_AGGR_LRS_CONCAT

書式

SDO_AGGR_LRS_CONCAT(
AggregateGeometry  SDOAGGRTYPE
) RETURN SDO_GEOMETRY;

説明

指定されたLRSジオメトリを連結するLRSジオメトリを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(「SDOAGGRTYPEオブジェクト型」を参照)を指定します。

使用上の注意

このファンクションは、任意の数のLRSジオメトリの集計連結を実行します。ジオメトリを連結する順序を制御する必要がある場合、NO_MERGEオプティマイザ・ヒントおよびORDER BY句を指定した副問合せを使用する必要があります。(例を参照。)

結果のセグメントの方向は、連結内の最初のジオメトリの方向と同じになります。

このファンクションは3D形式(SDO_AGGR_LRS_CONCAT_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

Spatial and Graphの線形参照システムについては、「線形参照システム」を参照してください。

例

次の例では、LRS_ROUTES表にLRSジオメトリを追加し、次に、表に含まれるLRSジオメトリを連結する2つの問合せを実行します。最初の問合せでは、連結の順序は制御されません。2番目の問合せで制御されます。2つのセグメントの方向が異なることに注意してください。連結(Route0)の最初のセグメントのメジャー値が降順であるため、2番目の問合せ結果のセグメントのメジャー値は降順です。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

19.5 SDO_AGGR_MBR

書式

SDO_AGGR_MBR(
geom  SDO_GEOMETRY
) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリの最小境界矩形(MBR)(ジオメトリを囲む最小の矩形)を戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

使用上の注意

このファンクションは、適切なMBRを作成できない場合はMBRジオメトリを戻しません。具体的には、次のようになります。

- 入力ジオメトリがすべてNULLである場合、ファンクションはNULLのジオメトリを戻します。

- 入力ジオメトリ内のすべてのデータが1つの点上にある場合、ファンクションは点を戻します。

- 入力ジオメトリ内のすべてのデータが直線上に存在する複数の点である場合、ファンクションは2点線を戻します。

SDO_TUNE.EXTENT_OFファンクション(「SDO_TUNEパッケージ(チューニング)」を参照)も、ジオメトリの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表のジオメトリ・オブジェクトの最小境界矩形を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

19.6 SDO_AGGR_SET_UNION

構文(SDO_AGGRパッケージのファンクションとして)

SDO_AGGR.SDO_AGGR_SET_UNION(
geometry SDO_GEOMETRY_ARRAY,
tol      NUMBER
) RETURN SDO_GEOMETRY;

または

SDO_AGGR.SDO_AGGR_SET_UNION(
cur  SYS_REFCURSOR,
tol  NUMBER
) RETURN SDO_GEOMETRY;

構文(空間集計ファンクションとして[非推奨])

SDO_AGGR_SET_UNION(
geometry  SDO_GEOMETRY_ARRAY,
tol       NUMBER
) RETURN SDO_GEOMETRY;

説明

SDO_GEOMETRYオブジェクトの入力VARRAYまたはREFカーソルからすべてのジオメトリ・オブジェクトの集計和集合を戻します。

パラメータ

geometry

SDO_GEOMETRY_ARRAYオブジェクト型のジオメトリ・オブジェクトの配列で、VARRAY OF SDO_GEOMETRYとして定義されます。

cur

ジオメトリ・オブジェクトを戻すREFカーソルは、すべてのジオメトリ・オブジェクトの集計和集合を戻します。

tol

許容差(「許容差」を参照)。

使用上の注意

注意:

Oracle Database Release 12c (12.1)では、空間集計ファンクションとしての形式は非推奨となり、次回のメジャー・リリースで削除されます。

かわりに、SDO_AGGR.SDO_AGGR_SET_UNIONファンクションの形式のいずれかを使用できます。

SDO_AGGR_SET_UNIONは、SDO_AGGR_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を戻します。get_geom_setファンクション作成の後の1つ目のSELECT文は、SDO_AGGR.SDO_AGGR_UNION PL/SQLファンクションをコールします。2つ目のSELECT文は、非推奨の空間集計ファンクションをコールし、3つ目のSELECT文は、カーソルを指定する形式を使用してSDO_AGGR.SDO_AGGR_UNION PL/SQLファンクションをコールします。すべてのSELECT文は、同じ結果を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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;
/

-- Call SDO_AGGR_SET_UNION function in SDO_AGGR PL/SQL package.
SELECT sdo_aggr.sdo_aggr_set_union (get_geom_set ('COLA_MARKETS', 'SHAPE',
'name <> ''cola_c'''), .0005 ) FROM dual;

SDO_AGGR.SDO_AGGR_SET_UNION(GET_GEOM_SET('COLA_MARKETS','SHAPE','NAME<>''COLA_C'
--------------------------------------------------------------------------------
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))

-- CALL SDO_AGGR_SET_UNION spatial aggregate function (deprecated format).
SELECT sdo_aggr_set_union (get_geom_set ('COLA_MARKETS', 'SHAPE',
'name <> ''cola_c'''), .0005 ) FROM dual;

SDO_AGGR.SDO_AGGR_SET_UNION(GET_GEOM_SET('COLA_MARKETS','SHAPE','NAME<>''COLA_C'
--------------------------------------------------------------------------------
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))

-- Call SDO_AGGR_SET_UNION function in SDO_AGGR PL/SQL package; specify
-- a cursor as input.
SELECT sdo_aggr.sdo_aggr_set_union
(CURSOR(SELECT shape FROM COLA_MARKETS WHERE name <> 'cola_c'), .0005 )
FROM dual;

SDO_AGGR.SDO_AGGR_SET_UNION(CURSOR(SELECTSHAPEFROMCOLA_MARKETSWHERENAME<>'COLA_C
--------------------------------------------------------------------------------
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))

19.7 SDO_AGGR_UNION

書式

SDO_AGGR_UNION(
AggregateGeometry  SDOAGGRTYPE
) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリ・オブジェクトで位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(「SDOAGGRTYPEオブジェクト型」を参照)を指定します。

使用上の注意

単一線ストリングまたは複数線ストリングのジオメトリをマージするには、SDO_AGGR_UNIONは使用せず、SDO_AGGR_CONCAT_LINES空間集計ファンクションを使用します。

SDO_GEOM.SDO_UNIONファンクションの詳細は、「SDO_GEOMパッケージ(ジオメトリ)」を参照してください。

例

次の例では、cola_dを除くすべてのジオメトリ(この例では、cola_a、cola_bおよびcola_c)の和集合が戻されます。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

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

MDSYS.SDO_CSパッケージには、座標系で使用するサブプログラムが含まれます。単一のジオメトリまたはジオメトリの全レイヤー(表で指定した列のすべてのジオメトリ)に対して明示的な座標変換を実行できます。

この章で説明するサブプログラムを使用する場合は、座標系の概念を理解しておく必要があります(「座標系」および「座標系(空間参照システム)」を参照)。

表20-1に、座標系変換サブプログラムを示します。

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

サブプログラム

説明

SDO_CS.ADD_PREFERENCE_FOR_OP

ソース座標系とターゲット座標系の間での操作のプリファレンスを追加します。

SDO_CS.CONVERT_3D_SRID_TO_2D

3次元のSRID値を2次元のSRID値に変換します。

SDO_CS.CONVERT_NADCON_TO_XML

ASCII形式のNADCON (North American Datum Conversion)グリッドをOracle Spatial and Graph XML表現に変換します。

SDO_CS.CONVERT_NTV2_TO_XML

ASCII形式のNTv2 (National Transformation Version 2)グリッドをOracle Spatial and Graph XML表現に変換します。

SDO_CS.CONVERT_XML_TO_NADCON

NADCON (North American Datum Conversion)グリッドのOracle Spatial and Graph XML表現をNADCON ASCII形式に変換します。

SDO_CS.CONVERT_XML_TO_NTV2

NTv2 (National Transformation Version 2)グリッドのOracle Spatial and Graph 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 and Graphによって使用されるEPSGデータセットのバージョン番号を取得します。

SDO_CS.MAKE_2D

3次元以上のジオメトリを2次元のジオメトリに変換します。

SDO_CS.MAKE_3D

2次元のジオメトリを3次元のジオメトリに変換します。

SDO_CS.MAP_EPSG_SRID_TO_ORACLE

指定したEPSG SRID値に対応するOracle Spatial and Graph SRID値を戻します。

SDO_CS.MAP_ORACLE_SRID_TO_EPSG

指定したOracle Spatial and Graph 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)の説明を検査します。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

20.1 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表(「SDO_COORD_OPS表」を参照)のCOORD_OP_ID列の値である必要があります。

source_crs

ソース座標参照系のSRIDを指定します。この値は、NULLまたはSDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

target_crs

ターゲット座標参照系のSRIDを指定します。この値は、NULLまたはSDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

use_case

このプリファレンスに関連付けるユースケースの名前を指定します。この値は、NULLまたはSDO_PREFERRED_OPS_USER表(「SDO_PREFERRED_OPS_USER表」を参照)のUSE_CASE列の値である必要があります。

使用上の注意

use_caseがNULLの場合、この操作に関連付けられた変換計画はシステム全体のプリファレンスになり、行(逆の操作が存在する場合は2つの行)がSDO_PREFERRED_OPS_SYSTEM表(「SDO_PREFERRED_OPS_SYSTEM表」を参照)に追加されます。use_caseがNULL以外の場合、この操作に関連付けられた変換計画は指定したユースケースに関連するプリファレンスになり、行(逆の操作が存在する場合は2つの行)がSDO_PREFERRED_OPS_USER表(「SDO_PREFERRED_OPS_USER表」を参照)に追加されます。

連結操作を作成して、システム全体または指定したユースケースのいずれかで優先させるには、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');

20.2 SDO_CS.CONVERT_3D_SRID_TO_2D

書式

SDO_CS.CONVERT_3D_SRID_TO_2D(
srid3d  IN NUMBER) RETURN NUMBER;

説明

3次元のSRID値を2次元のSRID値に変換します。

パラメータ

srid_3d

3次元の座標参照系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

使用上の注意

このファンクションは、入力された座標参照系に対応する機能的に同等の2次元の座標参照系のSRID値を戻します。

- 複合3D SRIDが入力された場合、対応する2次元のSRIDは1つのみとなり、それが戻されます。

- 地理3D SRIDが入力された場合、対応する2次元のSRIDは複数ある可能性があり、そのいずれかが戻されます。

- 2次元のSRIDが入力された場合、それが戻されます。

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

例

次の例では、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)に示された各座標参照系に対して等価の2次元のSRIDを戻します。その表の2D SRID値に対しては、ファンクションは既存の値を戻します。

SELECT
crs.srid "nD SRID",
crs.coord_ref_sys_kind "nD Type",
sdo_cs.convert_3d_srid_to_2d(crs.srid) "2D SRID",
(SELECT
coord_ref_sys_kind
FROM
sdo_coord_ref_sys crs2
WHERE
crs2.srid = sdo_cs.convert_3d_srid_to_2d(crs.srid)
) "2D Type"
FROM sdo_coord_ref_sys crs
ORDER BY crs.coord_ref_sys_kind,crs.srid;

nD SRID nD Type                     2D SRID 2D Type
---------- ------------------------ ---------- ------------------------
4097 COMPOUND                       4093 PROJECTED
4098 COMPOUND                       4094 PROJECTED
4099 COMPOUND                       4095 PROJECTED
…    …                              …    …
7400 COMPOUND                       4807 GEOGRAPHIC2D
…    …                              …    …
5800 ENGINEERING                    5800 ENGINEERING
…    …                              …    …
4000 GEOCENTRIC
…    …                              …    …
4326 GEOGRAPHIC2D                   4326 GEOGRAPHIC2D
…    …                              …    …
4327 GEOGRAPHIC3D                   4326 GEOGRAPHIC2D
…    …                              …    …
27700 PROJECTED                     27700 PROJECTED
…    …                              …    …
3855 VERTICAL                       3855 VERTICAL
…    …                              …    …

20.3 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 and Graph XML表現に変換します。

パラメータ

laa_clob

CLOBオブジェクトにあるNADCONグリッドの緯度の値を指定します。

loa_clob

CLOBオブジェクトにあるNADCONグリッドの経度の値を指定します。

xml_grid

NADCONグリッドのOracle Spatial and Graph XML表現を含む出力XML文書を指定します。

使用上の注意

Oracle Spatial and Graph XML表現をNADCONグリッドに変換するには、SDO_CS.CONVERT_XML_TO_NADCONプロシージャを使用します。

例

次の例では、ASCII形式のNADCONグリッドをOracle Spatial and Graph 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
. . .

20.4 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 and Graph XML表現に変換します。

パラメータ

ntv2_clob

CLOBオブジェクトのNTv2グリッド値を指定します。

xml_grid

NTv2グリッドのOracle Spatial and Graph XML表現を含む出力XML文書を指定します。

使用上の注意

Oracle Spatial and Graph XML表現をNTv2グリッドに変換するには、SDO_CS.CONVERT_XML_TO_NTV2プロシージャを使用します。

例

次の例では、ASCII形式のNTv2グリッドをOracle Spatial and Graph 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
. . .

20.5 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 and Graph XML表現をNADCON ASCII形式に変換します。

パラメータ

xml_grid

NADCONグリッドのOracle Spatial and Graph XML表現を含むXML文書を指定します。

laa_clob

NADCONグリッドの緯度の値を含む出力CLOBオブジェクトを指定します。

loa_clob

NADCONグリッドの経度の値を含む出力CLOBオブジェクトを指定します。

使用上の注意

ASCII形式のNADCONグリッドをOracle Spatial and Graph XML表現に変換するには、SDO_CS.CONVERT_NADCON_TO_XMLプロシージャを使用します。

例

次の例では、ASCII形式のNADCONグリッドをOracle Spatial and Graph 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
. . .

20.6 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 and Graph XML表現をNTv2 ASCII形式に変換します。

パラメータ

xml_grid

NTv2グリッドのOracle Spatial and Graph XML表現を含むXML文書を指定します。

ntv2_clob

NTv2グリッドの値を含む出力CLOBオブジェクトを指定します。

使用上の注意

ASCII形式のNTv2グリッドをOracle Spatial and Graph XML表現に変換するには、SDO_CS.CONVERT_NTV2_TO_XMLプロシージャを使用します。

例

次の例では、ASCII形式のNTv2グリッドをOracle Spatial and Graph 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
. . .

20.7 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オブジェクト型の詳細は、「TFM_PLANオブジェクト型」を参照してください。

使用上の注意

連結操作は、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;
/

20.8 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表(「SDO_PREFERRED_OPS_USER表」を参照)のUSE_CASE列の値である必要があります。

使用上の注意

このプロシージャでは、特定の座標参照系間で実行する主要なEPSG定義の変換ルールを作成します。一部の座標参照系間の変換では、EPSGで適用するルールがすでに指定されている場合があります。また、座標参照系間の特定の変換で、EPSGルールがデフォルトのOracle Spatial and Graphルールと異なる場合があります。このような場合、このプロシージャを実行すると、EPSGルールが適用されます。このプロシージャを実行しない場合は、デフォルトのSpatial and Graphルールが使用されます。

このプロシージャでは、複数の行をSDO_PREFERRED_OPS_SYSTEM表(「SDO_PREFERRED_OPS_SYSTEM表」を参照)に挿入します。

このプロシージャで作成したEPSGルールを削除して、すべてのケースでデフォルトのSpatial and Graphルールを使用するようにするには、SDO_CS.DELETE_ALL_EPSG_RULESプロシージャを使用します。

例

次の例では、特定の変換で適用するEPSGルールの基本セットを作成します。

EXECUTE SDO_CS.CREATE_OBVIOUS_EPSG_RULES;

20.9 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オブジェクト型の詳細は、「TFM_PLANオブジェクト型」を参照してください。

use_case

優先させるこの連結操作を適用するユースケースを指定します。この値は、NULLまたはSDO_PREFERRED_OPS_USER表(「SDO_PREFERRED_OPS_USER表」を参照)のUSE_CASE列の値である必要があります。

使用上の注意

この簡易プロシージャは、SDO_CS.CREATE_CONCATENATED_OPとSDO_CS.ADD_PREFERENCE_FOR_OPのプロシージャの操作を結合します。

連結操作は、2つ以上の基本操作を連結(連鎖)したものです。

use_caseがNULLの場合、この操作に関連付けられた変換計画はシステム全体のプリファレンスになり、行(逆の操作が存在する場合は2つの行)がSDO_PREFERRED_OPS_SYSTEM表(「SDO_PREFERRED_OPS_SYSTEM表」を参照)に追加されます。use_caseがNULL以外の場合、この操作に関連付けられた変換計画は指定したユースケースに関連するプリファレンスになり、行(逆の操作が存在する場合は2つの行)がSDO_PREFERRED_OPS_USER表(「SDO_PREFERRED_OPS_USER表」を参照)に追加されます。

システム全体または指定したユースケースのいずれでも優先させずに連結を作成するには、SDO_CS.CREATE_CONCATENATED_OPプロシージャを使用します。

連結操作を削除するには、SDO_CS.DELETE_OPプロシージャを使用します。

例

次の例では、操作IDが300で、MY_CONCATENATION_OPERATIONという名前の連結操作を作成し、この操作が使用される場合に、(use_caseがNULLのため)すべてのケースで、指定した変換計画をSpatial and Graphが使用するようにします。

DECLARE
BEGIN
SDO_CS.CREATE_PREF_CONCATENATED_OP(
300,
'MY_CONCATENATED_OPERATION',
TFM_PLAN(SDO_TFM_CHAIN(4242, 19910, 24200, 1000000000, 24200)),
NULL);
END;
/

20.10 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 and Graphルールを使用するようにします。(詳細は、SDO_CS.CREATE_OBVIOUS_EPSG_RULESプロシージャの「使用上の注意」を参照してください。)

use_caseがNULLの場合、このプロシージャはSDO_PREFERRED_OPS_SYSTEM表(「SDO_PREFERRED_OPS_SYSTEM表」を参照)からすべての行を削除します。use_caseがNULL以外の場合、このプロシージャはSDO_PREFERRED_OPS_USER表(「SDO_PREFERRED_OPS_USER表」を参照)から、指定したユースケースに関連付けられた行を削除します。

例

次の例では、特定の変換で適用するEPSGルールの基本セットを削除します。

EXECUTE SDO_CS.DELETE_ALL_EPSG_RULES;

20.11 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);

20.12 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表(「SDO_PREFERRED_OPS_USER表」を参照)のUSE_CASE列の値である必要があります。

source_srid

ソース座標参照系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

target_srid

ターゲット座標参照系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

使用上の注意

このファンクションは、TFM_PLAN型のオブジェクトを戻します(「TFM_PLANオブジェクト型」を参照)。

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

20.13 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表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

target_srid

ターゲット座標参照系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)の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)

20.14 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表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

is_legacy

TRUEを指定した場合は、SDO_COORD_REF_SYS表でIS_LEGACY列値がTRUEになっている測地座標参照系に結果が絞られます(「SDO_COORD_REF_SYS表」を参照)。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)形式の詳細は、「well-knownテキスト(WKT)」を参照してください。

例

次の例では、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)

20.15 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表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

is_legacy

TRUEを指定した場合は、SDO_COORD_REF_SYS表でIS_LEGACY列値がTRUEになっている投影座標参照系に結果が絞られます(「SDO_COORD_REF_SYS表」を参照)。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)形式の詳細は、「well-knownテキスト(WKT)」を参照してください。

例

次の例では、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)

20.16 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

地理座標系のEPSG 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表(「SDO_COORD_REF_SYS表」を参照)の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

逆フラット化(単位は1です)。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

20.17 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]]

20.18 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表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

datum

点のU.S. National Grid座標がベースとするデータの名前を指定します。この値は、SDO_DATUMS表(「SDO_DATUMS表」を参照)のDATUM_NAME列の値またはNULLのいずれかである必要があります。デフォルト値はNAD83です。

使用上の注意

Oracle Spatial and GraphでサポートされるU.S. National Gridの詳細は、「U.S. National Gridのサポート」を参照してください。

空間点ジオメトリを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)

20.19 SDO_CS.GET_EPSG_DATA_VERSION

書式

SDO_CS.GET_EPSG_DATA_VERSION() RETURN VARCHAR2;

説明

Spatial and Graphによって使用されるEPSGデータセットのバージョン番号を取得します。

パラメータ

なし。

使用上の注意

EPSGデータセットは、European Petroleum Survey Groupから提供されており、Microsoft Access 97データベース形式およびSQLスクリプトとして配布されています。

例

次の例では、Spatial and Graphによって使用されるEPSGデータセットのバージョン番号を取得します。

SELECT SDO_CS.GET_EPSG_DATA_VERSION FROM DUAL;

GET_EPSG_DATA_VERSION
-------------------------------------------------------------------------------
7.5

20.20 SDO_CS.LOAD_EPSG_MATRIX

書式

SDO_CS.LOAD_EPSG_MATRIX(
op_id        IN NUMBER,
parameter_id IN NUMBER,
directory    IN VARCHAR2,
file_name    IN VARCHAR2);

説明

NADCON、NTv2またはVERTCON形式のEPSGマトリックスをロードします。

パラメータ

op_id

マトリックスが属するEPSG操作IDを指定します。

parameter_id

操作にNADCONなどの複数のマトリックスが含まれる場合、マトリックスを識別するEPSGパラメータIDを指定します。

directory

マトリックス・ファイル・ディレクトリの名前を指定します。

file_name

マトリックス・ファイル名を指定します。

使用上の注意

EPSGマトリックスを検証するには、SDO_CS.VALIDATE_EPSG_MATRIXファンクションを使用します。

例

次の例では、操作1703 ("NAD27 to WGS 84 (32)")のNTv2マトリックスをロードします。NTv2操作の場合、単一のマトリックスで十分で、パラメータID 8656に割り当てられます。

CREATE OR REPLACE DIRECTORY work_dir AS '…';

EXECUTE sdo_cs.load_epsg_matrix(
1703,
8656,
'WORK_DIR',
'ntv2file.asc');

20.21 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表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。このパラメータがNULLの場合、入力ジオメトリのSRIDに基づいてデフォルトのSRIDが使用されます。

使用上の注意

このファンクションは、入力ジオメトリの各頂点から3番目の次元値(高さ)と他の次元値(4次元以上の入力ジオメトリの場合)を削除した2次元のジオメトリ・オブジェクトを戻します。

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

例

次の例では、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))

20.22 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表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

使用上の注意

このファンクションを使用して、次元間での変換をシミュレートする方法については、「異なる次元間の変換」を参照してください。

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

例

次の例では、cola_aの2次元ジオメトリを3次元ジオメトリに変換します。(例では、「座標系変換の簡単な例」の例の定義を使用しています。)

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

20.23 SDO_CS.MAP_EPSG_SRID_TO_ORACLE

書式

SDO_CS.MAP_EPSG_SRID_TO_ORACLE(
epsg_srid  IN NUMBER) RETURN NUMBER;

説明

指定したEPSG SRID値に対応するOracle Spatial and Graph SRID値を戻します。

パラメータ

epsg_srid

EPSG座標参照系のSRIDを指定します。EPSG座標参照系表のCOORD_REF_SYS_CODEフィールドに示されます。

使用上の注意

このファンクションは、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値に一致する値を戻します。

指定したOracle Spatial and Graph SRID値に対応するEPSG SRID値を戻すには、SDO_CS.MAP_ORACLE_SRID_TO_EPSGファンクションを使用します。

例

次の例では、EPSG SRID 23038に対応するOracle Spatial and Graph SRID値を戻します。

SELECT SDO_CS.MAP_EPSG_SRID_TO_ORACLE(23038) FROM DUAL;

SDO_CS.MAP_EPSG_SRID_TO_ORACLE(23038)
-------------------------------------
82361

20.24 SDO_CS.MAP_ORACLE_SRID_TO_EPSG

書式

SDO_CS.MAP_ORACLE_SRID_TO_EPSG(
legacy_srid  IN NUMBER) RETURN NUMBER;

説明

指定したOracle Spatial and Graph SRID値に対応するEPSG SRID値を戻します。

パラメータ

legacy_srid

Oracle Spatial and Graph SRID値を指定します。この値は、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のLEGACY_CODE列の値と一致する必要があります。

使用上の注意

このファンクションは、EPSG座標参照系のSRIDを戻します。座標参照系のEPSG SRID値は、EPSG座標参照系表のCOORD_REF_SYS_CODEフィールドに示されます。

指定したEPSG SRID値に対応するOracle Spatial and Graph SRID値を戻すには、SDO_CS.MAP_EPSG_SRID_TO_ORACLEファンクションを使用します。

例

次の例では、Oracle Spatial and Graph SRID 82361に対応するEPSG SRID値を戻します。

SELECT SDO_CS.MAP_ORACLE_SRID_TO_EPSG(82361) FROM DUAL;

SDO_CS.MAP_ORACLE_SRID_TO_EPSG(82361)
-------------------------------------
23038

20.25 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表(「SDO_PREFERRED_OPS_SYSTEM表」を参照)から1つ以上の行を削除します。use_caseがNULL以外の場合、このプロシージャはSDO_PREFERRED_OPS_USER表(「SDO_PREFERRED_OPS_USER表」を参照)から1つ以上の行を削除します。

例

次の例では、ユースケースuse_case_Bが変換の対象に指定されている場合に、SRID 4301からSRID 4326への変換で使用する操作ID 19777のプリファレンスを取り消します。

EXECUTE SDO_CS.REVOKE_PREFERENCE_FOR_OP(19977, 4301, 4326, 'use_case_B');

20.26 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]]

20.27 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列の値)を指定する必要があります(「SDO_COORD_REF_SYS表」を参照)。

accuracy_in_meters

点の位置の精度をm単位で指定します。負または正の方向に10の累乗単位で指定します(0.001、0.01、0.1、1、10、100、1000など)。これ以外の値を指定すると、Spatial and Graphによって内部調節されるため、結果が予想した値と異なることがあります。

datum

点のU.S. National Grid座標がベースとするデータの名前を指定します。NAD83またはNAD27のいずれかを指定する必要があります。デフォルト値はNAD83です。

使用上の注意

Oracle Spatial and GraphでサポートされるU.S. National Gridの詳細は、「U.S. National Gridのサポート」を参照してください。

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

20.28 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列の値)を指定する必要があります(「SDO_COORD_REF_SYS表」を参照)。

to_srid

変換に使用する座標系のSRIDを指定します。この値は、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

to_srname

変換に使用する座標系の名前を指定します。この値は、SDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のCOORD_REF_SYS_NAME列の正確に指定された値である必要があります。

use_case

この変換に関連付けるユースケースの名前を指定します。文字列USE_SPHERICALを指定すると、変換は楕円体の計算ではなく球体の計算を使用するので、対応するGoogle Mapsおよびその他のサード・パーティのツールは球体の計算に基づいた投影を使用することになります。ユースケースの説明は、「EPSGモデルとSpatial and Graph」を参照してください。Google Mapsに関する考慮事項は「Google Mapsに関する考慮事項」を参照してください。

use_plan

変換計画を指定します。TFM_PLANオブジェクト型の詳細は、「TFM_PLANオブジェクト型」を参照してください。

使用上の注意

変換は、2つの異なる地形参照座標系間または2つの異なるローカル座標系間のみで実行できます。

使用する座標系の種類に関係なく、円および円弧の変換はサポートされていません。

geom、to_sridまたはto_srnameが無効な場合は例外が発生します。このファンクションに有効なgeomは、その定義にSDO_COORD_REF_SYS表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値と一致するSRIDの値が含まれている必要があります。

例

次の例では、cola_cジオメトリを、SRID値8199を使用する表現に変換します。(例では、「座標系変換の簡単な例」の例の定義を使用しています。)

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

20.29 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表(「SDO_COORD_REF_SYS表」を参照)のSRID列の値である必要があります。

use_plan

変換計画を指定します。TFM_PLANオブジェクト型の詳細は、「TFM_PLANオブジェクト型」を参照してください。

use_case

変換を実行する際に変換ルールを適用するユースケースの名前を指定します。ユースケースの説明は、「EPSGモデルとSpatial and Graph」を参照してください。

使用上の注意

変換は、2つの異なる地形参照座標系間または2つの異なるローカル座標系間のみで実行できます。

次の場合に例外が発生します。

- table_inが存在しない、または表にcolumn_inが存在しない場合

- column_inのジオメトリのSDO_SRID値がNULLまたは無効である場合

- table_outがすでに存在する場合

- to_sridが無効な場合

table_out表は、プロシージャによって作成され、変換したジオメトリごとに1行書き込まれます。この表には、表20-2に示す列があります。

表20-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表に格納されます。(例では、「座標系変換の簡単な例」の例の定義を使用しています。)

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

「座標系変換の例」の例は、COLA_MARKETS_CSおよびCOLA_MARKETS_CS_8199の両方の表のジオメトリ・オブジェクトの座標表示を含みます。

20.30 SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS

書式

SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS();

説明

すべてのEPSG座標参照系のwell-knownテキスト(WKT)の説明を更新します。

パラメータ

なし。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、「well-knownテキストの更新手順」を参照してください。

例

次の例では、すべての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...

20.31 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表(「SDO_COORD_REF_SYS表」を参照)に含まれている必要があります。

使用上の注意

このプロシージャは、指定したSRIDおよびすべての依存SRIDのWKTの説明を更新します。たとえば、SRID 4326 (WGS84測地座標系)の場合、この測地座標系を使用するすべてのEPSG座標系が更新されます。

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、「well-knownテキストの更新手順」を参照してください。

例

次の例では、SRID 4326に関連付けられたEPSG座標参照系のWKTの説明を更新します。

EXECUTE SDO_CS.UPDATE_WKTS_FOR_EPSG_CRS(4326);

20.32 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表(「SDO_DATUMS表」を参照)のDATUM_ID列の値と一致する必要があります。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、「well-knownテキストの更新手順」を参照してください。

例

次の例では、データ5100に関連付けられたすべてのEPSG座標参照系のWKTの説明を更新します。

EXECUTE SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUM(5100);
Updating SRID 5714...
Updating SRID 5715...

20.33 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表(「SDO_ELLIPSOIDS表」を参照)のELLIPSOID_ID列の値と一致する必要があります。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、「well-knownテキストの更新手順」を参照してください。

例

次の例では、楕円体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...

20.34 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表(「SDO_COORD_OP_PARAM_VALS表」を参照)のCOORD_OP_ID列の値と一致する必要があります。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、「well-knownテキストの更新手順」を参照してください。

例

次の例では、座標変換操作2000067に関連付けられたすべてのEPSG座標参照系のWKTの説明を更新します。

EXECUTE SDO_CS.UPDATE_WKTS_FOR_EPSG_OP(2000067);
Updating SRID 20000671...

20.35 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表(「SDO_COORD_OP_PARAM_VALS表」を参照)のCOORD_OP_ID列の値と一致する必要があります。

parameter_id

変換操作のパラメータのSRIDのIDを指定します。この値は、SDO_COORD_OP_PARAM_VALS表(「SDO_COORD_OP_PARAM_VALS表」を参照)のPARAMETER_ID列の値と一致する必要があります。COORD_OP_ID列の値は、coord_op_idパラメータ値と同じです。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、「well-knownテキストの更新手順」を参照してください。

例

次の例では、座標変換操作9601とパラメータ8602に関連付けられたすべてのEPSG座標参照系のWKTの説明を更新します。

EXECUTE SDO_CS.UPDATE_WKTS_FOR_EPSG_PARAM(9601, 8602);

20.36 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表(「SDO_PRIME_MERIDIANS表」を参照)のPRIME_MERIDIAN_ID列の値と一致する必要があります。

使用上の注意

well-knownテキスト(WKT)の説明を更新するプロシージャの使用方法については、「well-knownテキストの更新手順」を参照してください。

例

次の例では、本初子午線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...

20.37 SDO_CS.VALIDATE_EPSG_MATRIX

書式

SDO_CS.VALIDATE_EPSG_MATRIX(
method_id    IN NUMBER,
parameter_id IN NUMBER,
matrix       IN CLOB
) RETURN VARCHAR2;

説明

NADCON、NTv2またはVERTCON形式のEPSGマトリックスを検証します。

パラメータ

method_id

マトリックスが参照するEPSG method IDを指定します。

parameter_id

操作にNADCONなどの複数のマトリックスが含まれる場合、マトリックスを識別するEPSGパラメータIDを指定します。

matrix

(SDO_CS.LOAD_EPSG_MATRIXを使用してまたは手動でロードされる)マトリックスCLOBを指定します。

使用上の注意

EPSGマトリックスは、SDO_CS.LOAD_EPSG_MATRIXプロシージャを使用してロードできます。

例

次の例では、操作1703 ("NAD27 to WGS 84 (32)")のNTv2マトリックスをロードします。NTv2操作の場合、単一のマトリックスで十分で、パラメータID 8656に割り当てられます。

SQL> select
m.coord_op_method_name "Method",
vals.parameter_id "Parameter",
sdo_cs.validate_epsg_matrix(m.coord_op_method_id, vals.parameter_id, vals.param_value_file) "Valid",
count(*) "#"
from
sdo_coord_op_param_vals vals,
sdo_coord_op_methods m
where
m.coord_op_method_id = vals.coord_op_method_id and
not(vals.param_value_file is null)
group by
m.coord_op_method_name,
vals.parameter_id,
sdo_cs.validate_epsg_matrix(m.coord_op_method_id, vals.parameter_id, vals.param_value_file)
order by
m.coord_op_method_name,
vals.parameter_id,
sdo_cs.validate_epsg_matrix(m.coord_op_method_id, vals.parameter_id, vals.param_value_file);

Method                                              Parameter Valid          #
-------------------------------------------------- ---------- ----- ----------
Geographic3D to Geographic2D+GravityRelatedHeight        8666 TRUE           2
Geographic3D to GravityRelatedHeight (OSGM02)            8666 TRUE          14
NADCON                                                   8657 TRUE         104
NADCON                                                   8658 TRUE         104
NTv2                                                     8656 TRUE           4
Ordnance Survey National Transformation                  8664 TRUE           3

6 rows selected.

20.38 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表(「SDO_COORD_REF_SYS表」を参照)に含まれている必要があります。

使用上の注意

このファンクションは、WKTの説明が有効である場合は文字列「TRUE」を戻します。WKTの説明が無効である場合、このファンクションは「FALSE (<position-number>)」という形式の文字列を戻します。ここで、<position-number>は、WKTの説明内で、最初のエラーが発生した文字の位置の番号です。

WKTの説明が「well-knownテキスト(WKT)」に示す要件を満たすかどうかが確認されます。

例

次の例では、SRID 81989000に関連付けられた座標系のWKTの説明を検査します。結果は、無効な状態の原因部分(無効な状態の最初の原因)がWKTの説明内の文字位置181から始まっていることを示しています。(SRID 81989000は、既定の座標系には関連付けられていません。これは、MDSYS.CS_SRS表のテスト・バージョンに挿入された意図的に無効な状態の座標系のためのものであり、Oracle Spatial and Graphに付属するMDSYS.CS_SRS表には含まれていません。)

SELECT SDO_CS.VALIDATE_WKT(81989000) FROM DUAL;

SDO_CS.VALIDATE_WKT(81989000)
--------------------------------------------------------------------------------
FALSE (181)

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

MDSYS.SDO_CSW_PROCESSパッケージには、Catalog Services for the Web (CSW)のサポートに関連する各種処理操作を行うサブプログラムが含まれています。

この章で説明するサブプログラムを使用する場合は、Catalog Services for the Webの概念および使用方法を理解しておく必要があります(「Catalog Services for the Web (CSW)のサポート」を参照)。

表21-1にCSW処理のサブプログラムを示します。

表21-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

データベースでレコード・タイプのメタデータが更新されたことを示す通知を挿入します。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

21.1 SDO_CSW_PROCESS.DeleteCapabilitiesInfo

書式

SDO_CSW_PROCESS.DeleteCapabilitiesInfo();

説明

SDO_CSW_PROCESS.InsertCapabilitiesInfoプロシージャによって設定されている機能情報を削除します。

パラメータ

なし。

使用上の注意

Catalog Services for the Webのサポートについては、「Catalog Services for the Web (CSW)のサポート」を参照してください。

例

次の例では、SDO_CSW_PROCESS.InsertCapabilitiesInfoプロシージャによって設定されている機能情報を削除します。

BEGIN
SDO_CSW_PROCESS.DeleteCapabilitiesInfo;
END;
/

21.2 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のサポートについては、「Catalog Services for the Web (CSW)のサポート」を参照してください。

例

次の例では、指定したレコード・タイプの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;
/

21.3 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ファンクションの作成と使用については、「空間パス抽出ファンクション(extractSDO)」を参照してください。

Catalog Services for the Webのサポートについては、「Catalog Services for the Web (CSW)のサポート」を参照してください。

例

次の例では、プラグインを登録解除します。

BEGIN
SDO_CSW_PROCESS.deletePluginMap('http://www.opengis.net/cat/csw',
'Record');
END;
/

21.4 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のサポートについては、「Catalog Services for the Web (CSW)のサポート」を参照してください。

例

次の例では、ソース・レコード・タイプBriefRecordおよびターゲット・レコード・タイプRecordからレコード・ビューの変換に関連する情報を削除します。

BEGIN
SDO_CSW_PROCESS.deleteRecordViewMap('http://www.opengis.net/cat/csw',
'BriefRecord',
'Record');
END;
/

21.5 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のサポートについては、「Catalog Services for the Web (CSW)のサポート」を参照してください。

例

次の例では、Recordという名前のレコード・タイプのレコード・タイプIDを取得します。

DECLARE
rtId NUMBER;
BEGIN
rtId := SDO_CSW_PROCESS.getRecordTypeId('http://www.opengis.net/cat/csw',
'Record');
END;
/

21.6 SDO_CSW_PROCESS.InsertCapabilitiesInfo

書式

SDO_CSW_PROCESS.InsertCapabilitiesInfo(
capabilitiesInfo IN XMLTYPE);

説明

機能テンプレート情報を挿入します。

パラメータ

capabilitiesInfo

機能のドキュメントを生成するために実行時に使用される、機能テンプレートのXML文書を指定します。

使用上の注意

機能のドキュメントは、実行時に、CSWメタデータのフィーチャ・タイプ情報を機能テンプレートとバインディングすることによって動的に生成されます。機能のドキュメントについては、「機能のドキュメント」を参照してください。

Catalog Services for the Webのサポートについては、「Catalog Services for the Web (CSW)のサポート」を参照してください。

例

次の例では、機能テンプレート情報を挿入します。

BEGIN
SDO_CSW_PROCESS.insertCapabilitiesInfo(
xmltype(bfilename('CSWUSERDIR', 'cswloadcapabilities.xml'),
nls_charset_id('AL32UTF8')));
END;
/

21.7 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のサポートについては、「Catalog Services for the Web (CSW)のサポート」を参照してください。

例

次の例では、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;
/

21.8 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ファンクションの作成と使用については、「空間パス抽出ファンクション(extractSDO)」を参照してください。

プラグイン・パッケージ(pluginPackageNameパラメータ)に対するEXECUTEアクセス権限を、ユーザーMDSYSおよびCSW管理ユーザーに付与する必要があります。

Catalog Services for the Webのサポートについては、「Catalog Services for the Web (CSW)のサポート」を参照してください。

例

次の例では、プラグインを登録します。

BEGIN
SDO_CSW_PROCESS.insertPluginMap('http://www.opengis.net/cat/csw',
'Record', 'csw_admin_usr.csw_RT_1_package');
END;
/

21.9 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のサポートについては、「Catalog Services for the Web (CSW)のサポート」を参照してください。

例

次の例では、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;
/

21.10 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のサポートについては、「Catalog Services for the Web (CSW)のサポート」を参照してください。

例

次の例では、指定したレコード・タイプについて、特定の行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;
/

21.11 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のサポートについては、「Catalog Services for the Web (CSW)のサポート」を参照してください。

例

次の例では、データベースでRecordレコード・タイプのメタデータが更新されたことを示す通知を挿入します。

BEGIN
SDO_CSW_PROCESS.insertRtMDUpdated('http://www.opengis.net/cat/csw',
'Record', sysdate);
END;

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

MDSYS.SDO_GCDRパッケージには、住所データのジオコーディングを行うサブプログラムが含まれています。

この章で説明するサブプログラムを使用する場合は、ジオコーディングの概念および使用方法を理解しておく必要があります(「住所データのジオコーディング」を参照)。

表22-1にジオコーディング・サブプログラムを示します。

表22-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オブジェクトを戻します。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

22.1 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表を提供していない場合にのみ使用します。詳細は、「プロファイル表のインストール」を参照してください。

例

次の例では、コール元のスキーマにGC_PARSER_PROFILES表およびGC_PARSER_PROFILEAFS表を作成します。

EXECUTE SDO_GCDR.CREATE_PROFILE_TABLES;

22.2 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型の詳細は、「SDO_KEYWORDARRAY型」を参照。

country

国名またはISOの国コード。

match_mode

ジオコーディング操作の一致モードを指定します。一致モードの詳細は、「一致モード」を参照してください。

使用上の注意

このファンクションは、SDO_GEOR_ADDR型のオブジェクトを戻します(「SDO_GEO_ADDR型」を参照)。実行する操作は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?')

22.3 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型の詳細は、「SDO_GEO_ADDR表」を参照してください。

使用上の注意

このファンクションでは、入力SDO_GEO_ADDRオブジェクトで設定可能な属性を必要に応じて指定できます。このファンクションは最初に一致する住所を検索し、可能な属性セットをすべて持つSDO_GEO_ADDRオブジェクトを戻します。

形式化されていない住所行で指定した入力住所をジオコードするSDO_GCDR.GEOCODEファンクションとは異なり、SDO_GCDR.GEOCODE_ADDRファンクションは、SDO_GEO_ADDRオブジェクトで定義した個々の住所フィールドで指定した入力住所をジオコードします。形式化されていない住所行を使用する場合、入力された住所を解析して個々の住所フィールドに分解するために、ジオコーディング・ソフトウェアを使用する必要があります。通常、この処理は問題なく実行されますが、入力された住所が十分に形式化されていない場合は、不適切な結果が生成されることがあります。これに対し、入力された住所の一部をSDO_GEO_ADDRオブジェクトの属性として指定すると、ジオコーディング・エラーの発生を減少させ、適切な結果を生成することができます。

SDO_GCDR.GEOCODE_ADDRファンクションの例については、「場所名からのジオコーディング」の例11-2および例11-3を参照してください。

SDO_GCDR.GEOCODE_ADDR_ALLファンクションも参照してください(実行する操作はこのファンクションと同じですが、複数の住所を戻すことができます)。

例

次の例では、CALIFORNIA PACIFIC MEDICAL CTRという名前の対象点のジオコード結果を戻します。ここでは、create_addr_from_placenameという名前のユーザー定義ファンクション(「場所名からのジオコーディング」の例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?')

22.4 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オブジェクトとして戻します(「SDO_ADDR_ARRAY型」を参照)。

パラメータ

gc_username

ジオコーディングを行うデータを含む表を所有するユーザー名を指定します。

address

1つ以上の属性セットを持つSDO_GEO_ADDRオブジェクトです。SDO_GEO_ADDR型の詳細は、「SDO_GEO_ADDR表」を参照してください。

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-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?'))

22.5 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型の詳細は、「SDO_KEYWORDARRAY型」を参照。

country

国名またはISOの国コード。

match_mode

ジオコーディング操作の一致モードを指定します。一致モードの詳細は、「一致モード」を参照してください。

使用上の注意

このファンクションは、SDO_ADDR_ARRAY型のオブジェクトを戻します(「SDO_ADDR_ARRAY型」を参照)。実行する操作は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?'))

22.6 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型の詳細は、「SDO_KEYWORDARRAY型」を参照。

country

国名またはISOの国コード。

使用上の注意

このファンクションは、SDO_GEOMETRY型のオブジェクトを戻します。実行する操作はSDO_GCDR.GEOCODEファンクションと同じですが、そのファンクションはSDO_GEOR_ADDRオブジェクトを戻します。

このファンクションでは、ジオコーディング操作の一致モードに'DEFAULT'を使用します。一致モードの詳細は、「一致モード」を参照してください。

例

次の例では、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)

22.7 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型のオブジェクトを戻します(「SDO_GEO_ADDR型」を参照)。

表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?')

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

この章では、SDO_GEOMパッケージに含まれているジオメトリ関連のPL/SQLサブプログラムについて説明します。これらのサブプログラムは、次のように分類されます。

- 2つのオブジェクト間の関係(TRUE/FALSE): RELATE、WITHIN_DISTANCE

- 妥当性チェック: VALIDATE_GEOMETRY_WITH_CONTEXT、VALIDATE_LAYER_WITH_CONTEXT、SDO_SELF_UNION

- 単一オブジェクトの処理: SDO_ALPHA_SHAPE、SDO_ARC_DENSIFY、SDO_AREA、SDO_BUFFER、SDO_CENTROID、SDO_CONVEXHULL、SDO_CONCAVEHULL、SDO_CONCAVEHULL_BOUNDARY、SDO_DIAMETER、SDO_DIAMETER_LINE、SDO_LENGTH、SDO_MBC、SDO_MBC_CENTER、SDO_MBC_RADIUS、SDO_MAX_MBR_ORDINATE、SDO_MIN_MBR_ORDINATE、SDO_MBR、SDO_POINTONSURFACE、SDO_TRIANGULATE、SDO_VOLUME、SDO_WIDTH、SDO_WIDTH_LINE

- 2つのオブジェクトの処理: SDO_CLOSEST_POINTS、SDO_DISTANCE、SDO_DIFFERENCE、SDO_INTERSECTION、SDO_MAXDISTANCE、SDO_MAXDISTANCE_LINE、SDO_UNION、SDO_XOR

ジオメトリ・サブプログラムを表23-1に示します。その後、使用方法について説明します。

表23-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_DIAMETER

ジオメトリ・オブジェクトの直径の長さを戻します。

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_MAXDISTANCE

2つのジオメトリ・オブジェクト間の最長距離を計算します。

SDO_GEOM.SDO_MBC

ジオメトリの最小境界円を戻します。

SDO_GEOM.SDO_MBC_CENTER

ジオメトリの最小境界矩形の中心を戻します。

SDO_GEOM.SDO_MBC_RADIUS

ジオメトリの最小境界矩形の半径の長さを戻します。

SDO_GEOM.SDO_MBR

ジオメトリの最小境界矩形を戻します。

SDO_GEOM.SDO_MIN_MBR_ORDINATE

ジオメトリ・オブジェクトの最小境界矩形の指定された縦座標(次元)の最小値を戻します。

SDO_GEOM.SDO_POINTONSURFACE

ポリゴン上にある点を戻します。

SDO_GEOM.SDO_SELF_UNION

1つのジオメトリ・オブジェクトの位相的な自己和集合となる有効なジオメトリ・オブジェクトを戻します。無効の場合があります。

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

23.1 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

mask

チェックする関係のリストを指定します。「使用方法」のキーワードのリストを参照してください。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

パフォーマンスを向上させるには、SDO_GEOM.RELATEファンクションを使用する必要がないかぎり、このファンクションのかわりにSDO_RELATE演算子またはその簡易演算子形式(「空間演算子」を参照)の1つを使用します。たとえば、SDO_RELATE演算子を使用する場合、DETERMINE maskキーワードは適用されません。演算子およびファンクションを使用する場合のパフォーマンスに関する注意点の詳細は、「空間演算子、空間プロシージャおよび空間ファンクション」を参照してください。

SDO_GEOM.RELATEファンクションの戻り値には、次の種類があります。

- maskに1つ以上の関係が登録されている場合、ジオメトリ・ペアについて1つ以上の関係が真であれば、指定されたmask値を戻します。すべての関係が偽であれば、プロシージャはFALSEを戻します。

- maskのキーワードにDETERMINEを指定すると、ジオメトリ間の関係に最も一致する関係キーワードが1つ戻されます。

- maskのキーワードにANYINTERACTを指定すると、2つのジオメトリが非接続でなければ、TRUEが戻されます。

maskでは、次の関係について判断します。

- ANYINTERACT: オブジェクトが非接続ではない場合に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ジオメトリとの関係を調べます。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。出力は、読みやすくするために変更が加えられています。)

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演算子

23.2 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

許容差(「許容差」を参照)。

radius

アルファ・シェイプの計算に使用する半径です。このパラメータがNULLの場合、アルファ・シェイプは入力ジオメトリの凸型です。

flag

孤立点およびエッジが含まれるかどうかを判断します(0 (ゼロ) (デフォルト)の場合、孤立点およびエッジが含まれるため、アルファ・シェイプが戻され、1の場合は、孤立点およびエッジが含まれないため、アルファ・シェイプのポリゴン部分のみが戻されます)。

使用上の注意

アルファ・シェイプは凸型を汎化したものです(http://www.cs.sunysb.edu/~algorith/implement/alphashapes/implement.shtmlを参照)。このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割およびアルファ・シェイプの計算にそれらを使用します。

radiusパラメータの値を指定する場合は、最初にradius出力パラメータを含む形式を使用して、SDO_GEOM.SDO_CONCAVEHULLファンクションをコールする必要があります。

geomが点タイプであるか、頂点の数が3未満であるか、または直線上に存在する複数の点である場合や、radiusが0 (ゼロ)より小さい場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

例

次の例では、radiusパラメータのデフォルト値(NULL)が使用されるため、cola_cのアルファ・シェイプであり、cola_cの凸型部分でもあるジオメトリ・オブジェクトを戻します。(この簡単な例では、ポリゴンを入力ジオメトリとして使用しています(通常、このファンクションは、大量の点データで使用されます)。例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

23.3 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

params

円弧の許容差および単位値(オプション)を引用符で囲んだ文字列を指定します。書式および意味については、「使用上の注意」を参照してください。

使用上の注意

円または円弧を含むジオメトリが投影座標系にある場合、このファンクションを使用してこれらのジオメトリを通常のポリゴンに稠密化できます。その後、その直線行ポリゴン・ジオメトリを空間操作に使用するか、またはこれらのジオメトリを投影座標系または測地座標系に変換できます。

paramsパラメータは、arc_toleranceキーワード、およびarc_tolerance値に関連付けられた測定単位を識別するunitキーワードを含むことができる、引用符で囲んだ文字列です。次に例を示します。

'arc_tolerance=0.05 unit=km'

arc_toleranceキーワードは、ジオメトリの各円弧について、円弧の表面と、円弧の開始点と終了点とを結ぶ直線の間の、垂直線の最大長を指定します。図23-1に、長さがA点とB点間の円弧のarc_tolerance値である線を示します。

図23-1 円弧の許容差

arc_toleranceキーワードの値は、ジオメトリに関連付けられた許容差より大きくする必要があります。(arc_toleranceのデフォルト値は、許容差の20倍です。)arc_toleranceキーワードの値を増やすと、結果のポリゴンの辺数が減少し、面積が小さくなります。arc_toleranceキーワードの値を減らすと、結果のポリゴンの辺数が増加し、面積が大きくなります(ただし、元のジオメトリより大きくなることはありません)。

unitキーワードを指定する場合、値はMDSYS.SDO_DIST_UNITS表のSDO_UNIT値('unit=KM'など)である必要があります。unitキーワードを指定しない場合、ジオメトリに関連付けられた測定単位が使用されます。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

例

次の例では、cola_dの円弧を稠密化した結果であるジオメトリ(円)を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

関連項目

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

23.4 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

unit

測定単位(unit=およびMDSYS.SDO_AREA_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、たとえば'unit=SQ_KM')を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はm2です。

tol

許容差(「許容差」を参照)。

使用上の注意

このファンクションは、穴のあるポリゴンを含め、すべてのポリゴンに対して使用できます。

輪を形成するために閉じている線には、面積がありません。

例

次の例では、COLA_MARKETS表に格納されているジオメトリ・オブジェクトの面積を戻します。最初の文ではすべてのオブジェクトの面積を戻し、2番目の文ではcola_aの面積のみを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

関連項目

なし。

23.5 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

dist

距離値を指定します。正の値の場合、ジオメトリの周りにバッファが生成されます。負の値の場合(ポリゴンにのみ有効)、ジオメトリの内部にバッファが生成されます。このパラメータの絶対値には、次元配列(dimパラメータ)またはtolパラメータに指定された許容差より大きい値を指定する必要があります。

tol

許容差(「許容差」を参照)。

params

次のキーワードの1つまたは両方を含む、引用符で囲まれた文字列を指定します。

- unitおよびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値。distパラメータ値および円弧の許容差(arc_toleranceキーワードが指定されている場合)に関連付けられた測定単位を識別します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

- arc_toleranceおよび円弧の許容差。arc_toleranceキーワードの詳細は、この章に示すSDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上の注意」を参照してください。

例: 'unit=km arc_tolerance=0.05'

入力ジオメトリが測地データで、arc_toleranceが指定されていない場合、デフォルト値は許容差に20を掛けた値になります。Spatial and Graphではarc_tolerance値を使用して、結果の計算時に円弧を稠密化します。入力ジオメトリがデカルト・データまたは投影データである場合、arc_toleranceは無効になるため、指定する必要はありません。

デカルト・ジオメトリまたは投影ジオメトリにこのパラメータが指定されていない場合、または測地ジオメトリに対してarc_toleranceキーワードが指定されているにもかかわらずunitキーワードが指定されていない場合、データに関連付けられている測定単位が使用されます。

使用上の注意

このファンクションは、バッファ・ポリゴンを表現するジオメトリ・オブジェクトを戻します。

このファンクションは、点、線またはポリゴンの周り、あるいはポリゴンの内部を丸めたバッファを作成します。空間内のバッファも丸められ、内側の境界からの距離は、外側の境界から外側のバッファまでの距離と同じです。図1-7を参照してください。

バッファ・ポリゴン・ジオメトリが投影座標系にある場合、円弧を含みます。このジオメトリを測地座標系に変換する場合は、SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用してジオメトリを最初に稠密化してから変換します。

入力ジオメトリに50を超える座標があり、かつ、バッファの幅が、連続する座標の間の間隔の二乗平均平方根の0.1% (0.001)未満の場合、元のジオメトリが変更されることなく戻されます。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

測地データでは、このファンクションは比較的小さなジオメトリにのみ使用する必要があります。このようなジオメトリに対しては、内部計算に使用するローカル交差平面投影で重大なひずみやエラーが発生することはありません。これにより、線ストリングかポリゴンかに関係なく、ソース・ジオメトリの適用ドメインが、テキサス(米国)、フランスまたは満州(中国)のおよその領域に制限されます。

例

次の例では、cola_aの周りの1バッファを表現するポリゴンを戻します。戻されるポリゴンの角(たとえば、.292893219、.292893219)は、丸められています。(例では、「空間データの挿入、索引付けおよび問合せの例」の非測地定義およびデータを使用しています。)

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

次の例では、「座標系変換の例」の測地定義およびデータを使用して、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

23.6 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

このファンクションは、geom1がポリゴン、複数ポリゴン、点または点クラスタではない場合、NULL値を戻します。これは、SDO_GEOMETRYオブジェクトのSDO_GTYPE値によって識別します。

geom1が点である場合、このファンクションは点(入力ジオメトリ)を戻します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

入力ジオメトリの形および複雑さによっては、戻された点が入力ジオメトリ上にない場合があります。

例

次の例では、cola_cの中心にあるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

関連項目

なし。

23.7 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

許容差(「許容差」を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。

dist

geom1とgeom2の間の最短距離を含む出力パラメータです。具体的には、geomaとgeombの間の距離を示します。

geoma

geom2の境界上の最近点に最も近いgeom1の境界上にある点ジオメトリ・オブジェクトを含む出力パラメータです。

geomb

geom1の境界上の最近点に最も近いgeom2の境界上にある点ジオメトリ・オブジェクトを含む出力パラメータです。

使用上の注意

このプロシージャでは、出力パラメータを使用して、計算された最短距離、および最短距離に関連付けられた各入力ジオメトリ上の点を格納します。

2点間の距離が0(ゼロ)の場合、出力ジオメトリ(geomaおよびgeomb)は、次のようになります。

- 2次元(2D)ジオメトリでは、入力ジオメトリの1つが点ジオメトリの場合、各出力ジオメトリはその点です。それ以外の場合、各出力ジオメトリは入力ジオメトリの共通部分の最初の要素の最初の点です。

- 3次元(3D)ジオメトリでは、入力ジオメトリの1つが点ジオメトリの場合、各出力ジオメトリはその点です。それ以外の場合、出力ジオメトリはnullです。

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

入力データが3次元で測地の場合、ジオメトリでは3D SRIDを使用する必要があります。それ以外の場合、結果は正しくありません。

例

次の例では、ジオメトリcola_cとcola_d間の最短距離、および最短距離に関連付けられた各入力ジオメトリ上の1つの点を計算します。また、2つの出力点ジオメトリを表に挿入した後、これらの点ジオメトリを選択します。2つの入力ジオメトリ間の最短距離は2.47213595499958、cola_c上の最近点は(6,5)、cola_d上の最近点は(7.10557281, 7.21114562)になります。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

関連項目

なし。

23.8 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

許容差(「許容差」を参照)。

radius

凹型の計算時に(デローニ三角分割を使用して)内部的に作成される、三角形の外接円の半径を格納するための出力パラメータ。

使用上の注意

凹型は、点の集合などの入力ジオメトリの領域を表現するポリゴンです。複雑な入力ジオメトリでは、通常、凹型は凸型の領域よりも非常に小さくなっています。

このファンクションは、入力ジオメトリからすべての座標を取得し、それらを使用してデローニ三角分割を実行して、凹型を計算します。外部の輪のみを戻します。内部の輪は無視されます。

このファンクションでは、凹型の計算時にアルファ・シェイプを使用します。これに対し、SDO_GEOM.SDO_CONCAVEHULL_BOUNDARYファンクションでは、外側の境界点を使用します。

radiusパラメータを含む形式は、SDO_GEOM.SDO_ALPHA_SHAPEファンクションをコールする場合に役立つradius値を戻します。

geomが、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

例

次の例では、cola_cの凹型部分のジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。

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

23.9 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

許容差(「許容差」を参照)。

length

凹型のサイズを制御するための値(具体的には、凹型の最長エッジがlength値よりも短い場合は、凹型の計算が停止されます)。このため、length値が大きければ大きいほど、凹型も大きくなる可能性があります。このパラメータを指定しない場合、「使用上の注意」で説明するとおり、計算は続行されます。

使用上の注意

凹型は、点の集合などの入力ジオメトリの領域を表現するポリゴンです。複雑な入力ジオメトリでは、通常、凹型は凸型の領域よりも非常に小さくなっています。

SDO_GEOM.SDO_CONCAVEHULLファンクションと同様に、このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割の計算にそれらを使用します。ただしその後、凸型を計算し、境界エッジの長さに基づいて優先度キューにすべての境界エッジを入れ、(指定されたlengthパラメータ値によって停止されないかぎり、)形状が連結している単一のポリゴンであれば、1つずつエッジを削除します。1つのエッジが計算中に削除された場合、その三角形の他の2つのエッジが境界上にあります。

geomが、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

例

次の例では、cola_cの凹型部分のジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

23.10 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

凸型は、ジオメトリ・オブジェクトを完全に囲む単純な凸型のポリゴンです。Spatial and Graphでは、指定したオブジェクトを完全に囲む最小ポリゴンを作成する場合に、使用する直線の辺をできるだけ少なくします。凸型は、複雑なジオメトリ・オブジェクトの近似値を取る場合に便利です。

ジオメトリ(geom1)に円弧要素が含まれる場合、このファンクションは、各円弧要素の最小境界矩形(MBR)を計算し、これらのMBRを使用してジオメトリの凸型を計算します。ジオメトリ・オブジェクト(geom1)が円である場合、このファンクションは、円を囲む最小の矩形を戻します。

このファンクションは、geom1が点タイプであるか、頂点の数が3未満であるか、または直線上に存在する複数の点である場合、NULL値を戻します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

例

次の例では、cola_cの凸型部分のジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。ただし、ここでは、戻されるポリゴンが指定したポリゴンと同じ頂点を持ち、例としてはわかりにくくなっています。これは、指定したポリゴンが、単純な凸型のポリゴンであるためです。)

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

23.11 SDO_GEOM.SDO_DIAMETER

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

書式

SDO_GEOM.SDO_DIAMETER(
geom  IN SDO_GEOMETRY,
dim   IN SDO_DIM_ARRAY
[, unit  IN VARCHAR2]
) RETURN NUMBER;

または

SDO_GEOM.SDO_DIAMETER(
geom  IN SDO_GEOMETRY,
tol   IN NUMBER
[, unit  IN VARCHAR2]
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの直径の長さを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

使用上の注意

このファンクションは、円および円以外のジオメトリ・オブジェクトに使用できます。入力ジオメトリに曲線が含まれている必要はありません。

戻される直径の長さは、ジオメトリ・オブジェクトの2つの点の間の最大距離です。(diameterの正式な定義は、大学レベルの数学の教科書またはその他の適切なリファレンス・ソースを参照してください。)

入力ジオメトリは2つ以下の次元を持つことができます。

点ジオメトリが指定された場合、ファンクションは0 (ゼロ)を戻します。

例

次の例では、COLA_MARKETS表に格納されているすべてのジオメトリ・オブジェクトの直径の長さを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT name, SDO_GEOM.SDO_DIAMETER(shape, 0.005) Diameter
FROM cola_markets;

NAME                               DIAMETER
-------------------------------- ----------
cola_a                           7.21110255
cola_b                           6.70820393
cola_c                           3.60555128
cola_d                                    4

関連項目

SDO_GEOM.SDO_DIAMETER_LINE

SDO_GEOM.SDO_WIDTH

23.12 SDO_GEOM.SDO_DIAMETER_LINE

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

書式

SDO_GEOM.SDO_DIAMETER_LINE(
geom  IN SDO_GEOMETRY,
dim   IN SDO_DIM_ARRAY
) RETURN NUMBER;

または

SDO_GEOM.SDO_DIAMETER_LINE(
geom  IN SDO_GEOMETRY,
tol   IN NUMBER
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの直径の長さを反映する線ストリング・ジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

このファンクションは、円および円以外のジオメトリ・オブジェクトに使用できます。入力ジオメトリに曲線が含まれている必要はありません。

戻される直径の長さは、ジオメトリ・オブジェクトの2つの点の間の最大距離です。(diameterの正式な定義は、大学レベルの数学の教科書またはその他の適切なリファレンス・ソースを参照してください。)

入力ジオメトリは2つ以下の次元を持つことができます。

点ジオメトリが指定された場合、ファンクションは0 (ゼロ)を戻します。

例

次の例では、COLA_MARKETS表に格納されている各ジオメトリ・オブジェクトの直径の長さを反映する線ストリングを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT name, SDO_GEOM.SDO_DIAMETER_LINE(shape, 0.005)
FROM cola_markets;

NAME
--------------------------------
SDO_GEOM.SDO_DIAMETER_LINE(SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z),
--------------------------------------------------------------------------------
cola_a
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
1, 1, 5, 7))

cola_b
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
8, 1, 5, 7))

cola_c
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
3, 3, 6, 5))

cola_d
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
8, 7, 8, 11))

関連項目

SDO_GEOM.SDO_DIAMETER

SDO_GEOM.SDO_WIDTH

23.13 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

図23-2のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_DIFFERENCEを使用した場合に戻されるポリゴンです。

図23-2 SDO_GEOM.SDO_DIFFERENCE

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_aとcola_cの位相的な差(MINUS演算)となるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

23.14 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つのジオメトリ・オブジェクト間の最短距離、つまり、オブジェクトにある点またはセグメントのペアの最短距離を計算します。

パラメータ

geom1

geom2からの距離を計算するジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

geom1からの距離を計算するジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。

tol

許容差(「許容差」を参照)。

使用上の注意

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

入力データが3次元で測地の場合、ジオメトリでは3D SRIDを使用する必要があります。それ以外の場合、結果は正しくありません。

例

次の例では、cola_bおよびcola_d間の最短距離が戻されます。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- 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.SDO_MAXDISTANCE

- SDO_GEOM.WITHIN_DISTANCE

23.15 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

図23-3のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_INTERSECTIONを使用した場合に戻されるポリゴンです。

図23-3 SDO_GEOM.SDO_INTERSECTION

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_aとcola_cの位相的に共通部分(AND演算)となるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

23.16 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

count_shared_edges

(3次元のジオメトリにのみ適用)入力ジオメトリに完全にまたは部分的に共有されているエッジが含まれている場合に、エッジの共有部分の長さを合計するタイミングを指定します。この値には、1(1回ごとに合計する)または2(2回ごとに合計する)を指定します。デフォルトは1です。

このパラメータは、2次元の入力ジオメトリでは無視されます。

使用上の注意

指定したポリゴンに1つ以上の穴がある場合、外側の境界とすべての穴の周囲が計算されます。戻り値は、すべての周囲の合計です。

例

次の例では、COLA_MARKETS表に格納されているジオメトリ・オブジェクトのパラメータを戻します。最初の文ではすべてのオブジェクトの周囲を戻し、2番目の文ではcola_aの周囲のみを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

関連項目

なし。

23.17 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

ordinate_pos

ジオメトリ・オブジェクトの定義における縦座標(次元)の位置(第1の座標は1、第2の座標は2など)を指定します。たとえば、geomにXとYの2つの縦座標が指定されている場合、1はX座標値、2はY座標値を示します。

使用上の注意

なし。

例

次の例では、COLA_MARKETS表に含まれるcola_dジオメトリの最小境界矩形のX(第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

23.18 SDO_GEOM.SDO_MAXDISTANCE

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

書式

SDO_GEOM.SDO_MAXDISTANCE(
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_MAXDISTANCE(
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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

geom1からの距離を計算するジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。

tol

許容差(「許容差」を参照)。

使用上の注意

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

入力ジオメトリは2つ以下の次元を持つことができます。

例

次の例では、cola_bおよびcola_d間の最大距離が戻されます。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT SDO_GEOM.SDO_MAXDISTANCE(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_MAXDISTANCE(C_B.SHAPE,C_D.SHAPE,0.005)
---------------------------------------------------
10.5440037

関連項目

- SDO_GEOM.SDO_MAXDISTANCE_LINE

- SDO_GEOM.SDO_DISTANCE

- SDO_GEOM.WITHIN_DISTANCE

23.19 SDO_GEOM.SDO_MAXDISTANCE_LINE

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

書式

SDO_GEOM.SDO_MAXDISTANCE_LINE(
geom1  IN SDO_GEOMETRY,
dim1   IN SDO_DIM_ARRAY,
geom2  IN SDO_GEOMETRY,
dim2   IN SDO_DIM_ARRAY
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_MAXDISTANCE_LINE(
geom1  IN SDO_GEOMETRY,
geom2  IN SDO_GEOMETRY,
tol    IN NUMBER
) RETURN SDO_GEOMETRY;

説明

2つのジオメトリ・オブジェクト間の最大距離を計算し、最大距離を反映する線ストリング・ジオメトリを戻します。2つのジオメトリ・オブジェクト間の最大距離とは、それらのオブジェクトにある点またはセグメントのペアの最長距離です。戻されるジオメトリは、点またはセグメントのこの最長ペア間の直線です。

パラメータ

geom1

geom2からの距離を計算するジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

geom1からの距離を計算するジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

入力ジオメトリは2つ以下の次元を持つことができます。

例

次の例では、cola_bおよびcola_d間の最大距離を反映する線ストリングが戻されます。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT SDO_GEOM.SDO_MAXDISTANCE_LINE(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_MAXDISTANCE_LINE(C_B.SHAPE,C_D.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 1, 8.70224688, 10.8726584))

関連項目

- SDO_GEOM.SDO_MAXDISTANCE

- SDO_GEOM.SDO_DISTANCE

- SDO_GEOM.WITHIN_DISTANCE

23.20 SDO_GEOM.SDO_MBC

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

書式

SDO_GEOM.SDO_MBC(
geom          IN SDO_GEOMETRY,
dim           IN SDO_DIM_ARRAY,
arc_tolerance IN NUMBER DEFAULT NULL
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_MBC(
geom          IN SDO_GEOMETRY,
tol           IN NUMBER,
arc_tolerance IN NUMBER DEFAULT NULL
) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの最小境界円(MBC)を表現する円オブジェクトを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

arc_tolerance

円弧の許容差値(SDO_GEOM.SDO_ARC_DENSIFYの「使用上の注意」にあるarc_toleranceキーワードの説明を参照)。このパラメータは主に測地円弧の稠密化に使用されます。

使用上の注意

最小境界円は、ジオメトリを最小に囲む円です。

ジオメトリ(geom)に円弧要素が含まれる場合、このファンクションは、各円弧要素の最小境界矩形(MBR)を計算し、これらのMBRを使用してジオメトリの最小境界円を計算します。このため、たとえば入力ジオメトリが円の場合、計算されるMBCは入力ジオメトリより大きくなります。

例

次の例では、cola_aの最小境界円であるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return the MBC of cola_a.
SELECT c.name, SDO_GEOM.SDO_MBC(c.shape, 0.005) FROM cola_markets c
WHERE c.name = 'cola_a';

NAME
--------------------------------
SDO_GEOM.SDO_MBC(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELE
--------------------------------------------------------------------------------
cola_a
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 4), SDO_ORDINATE_ARR
AY(3, .394448725, 6.60555128, 4, 3, 7.60555128))

関連項目

SDO_GEOM.SDO_MBC_CENTER

SDO_GEOM.SDO_MBC_RADIUS

SDO_GEOM.SDO_MBR

23.21 SDO_GEOM.SDO_MBC_CENTER

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

書式

SDO_GEOM.SDO_MBC_CENTER(
geom   IN SDO_GEOMETRY,
dim    IN SDO_DIM_ARRAY
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_MBC_CENTER(
geom   IN SDO_GEOMETRY,
tol    IN NUMBER
) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの最小境界円(MBC)の中心を戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

最小境界円は、ジオメトリを最小に囲む円です。

ジオメトリ(geom)に円弧要素が含まれる場合、このファンクションは、各円弧要素の最小境界矩形(MBR)を計算し、これらのMBRを使用してジオメトリの最小境界円を計算します。

例

次の例では、cola_aの最小境界円の中心である点ジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return the MBC center of cola_a.
SQL> SELECT c.name, SDO_GEOM.SDO_MBC_CENTER(c.shape, 0.005) FROM cola_markets c
2      WHERE c.name = 'cola_a';

NAME
--------------------------------
SDO_GEOM.SDO_MBC_CENTER(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z),
--------------------------------------------------------------------------------
cola_a
SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
3, 4))

関連項目

SDO_GEOM.SDO_MBC

SDO_GEOM.SDO_MBC_RADIUS

SDO_GEOM.SDO_MBR

23.22 SDO_GEOM.SDO_MBC_RADIUS

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

書式

SDO_GEOM.SDO_MBC_RADIUS(
geom  IN SDO_GEOMETRY,
dim   IN SDO_DIM_ARRAY,
unit  IN VARCHAR2 DEFAULT NULL
) RETURN NUMBER;

または

SDO_GEOM.SDO_MBC_RADIUS(
geom  IN SDO_GEOMETRY,
tol   IN NUMBER,
unit  IN VARCHAR2 DEFAULT NULL
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの最小境界円(MBC)の半径の長さを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

使用上の注意

最小境界円は、ジオメトリを最小に囲む円です。

ジオメトリ(geom)に円弧要素が含まれる場合、このファンクションは、各円弧要素の最小境界矩形(MBR)を計算し、これらのMBRを使用してジオメトリの最小境界円を計算します。このため、たとえば入力ジオメトリが円の場合、計算されるMBCの半径の長さは入力ジオメトリの半径の長さより大きくなります。

例

次の例は、cola_aの最小境界円の半径の長さを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return the MBC radius of cola_a.
SELECT c.name, SDO_GEOM.SDO_MBC_RADIUS(c.shape, 0.005) FROM cola_markets c
WHERE c.name = 'cola_a';

NAME                             SDO_GEOM.SDO_MBC_RADIUS(C.SHAPE,0.005)
-------------------------------- --------------------------------------
cola_a                                                       3.60555128

関連項目

SDO_GEOM.SDO_MBC

SDO_GEOM.SDO_MBC_CENTER

SDO_GEOM.SDO_MBR

23.23 SDO_GEOM.SDO_MBR

書式

SDO_GEOM.SDO_MBR(
geom   IN SDO_GEOMETRY
[, dim IN SDO_DIM_ARRAY]
) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの最小境界矩形(ジオメトリを囲む最小の矩形)を戻します。

注意:

SDO_GEOM_MBRは、このファンクションと機能的に同じSQL演算子ですが、より優れたパフォーマンスが提供されます。詳細は、「使用上の注意」にある「パフォーマンス向上のための代替演算子SDO_GEOM_MBR」を参照してください。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、適切なMBRを作成できない場合はMBRジオメトリを戻しません。具体的には、次のようになります。

- 入力ジオメトリがNULLである場合は、NULLのジオメトリを戻します。

- 入力ジオメトリが点である場合は、点を戻します。

- 入力ジオメトリが直線上に存在する複数の点である場合は、2点線を戻します。

- 入力ジオメトリに3つの次元が含まれていても、すべてのZ次元値が同じである場合は、3次元の線を戻します。

パフォーマンス向上のための代替演算子SDO_GEOM_MBR

SDO_GEOM_MBRは、SDO_GEOM.SDO_MBRファンクションと機能的に同じSQL演算子ですが、より優れたパフォーマンスが提供されます。

SDO_GEOM_MBR演算子は、次のようなSQL問合せ内で使用する必要があります。

SELECT sdo_geom_mbr(geom) INTO g FROM DUAL;

また、次のように、同じ問合せ内で複数のSDO_GEOM_MBR演算子を使用することもできます。

SELECT sdo_geom_mbr(geom1), sdo_geom_mbr(geom2) INTO g1, g2 FROM DUAL;

次の例にあるSDO_GEOM_MBR演算子の例も参照してください。

例

次の例では、COLA_MARKETS表のcola_dジオメトリの最小境界矩形を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。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_MBR演算子を使用しています。

-- Return the minimum bounding rectangle of cola_d (a circle).
SELECT SDO_GEOM_MBR(c.shape)
FROM cola_markets c WHERE c.name = 'cola_d';

SDO_GEOM_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(6, 7, 10, 11))

関連項目

- SDO_GEOM.SDO_MAX_MBR_ORDINATE

- SDO_GEOM.SDO_MIN_MBR_ORDINATE

23.24 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

ordinate_pos

ジオメトリ・オブジェクトの定義における縦座標(次元)の位置(第1の座標は1、第2の座標は2など)を指定します。たとえば、geomにXとYの2つの縦座標が指定されている場合、1はX座標値、2はY座標値を示します。

使用上の注意

なし。

例

次の例では、COLA_MARKETS表に含まれるcola_dジオメトリの最小境界矩形のX(第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

23.25 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

geom1上にある点を表現する、点のジオメトリ・オブジェクトを戻します。ただし、内部の点である保証はありません。(つまり、geom1の境界またはエッジ上であることもあります。)

ジオメトリ・オブジェクト上のどこにある点でも、戻り値になる可能性があります。戻される点に対して位置を指定することはできません。また、同じパラメータ値を指定してこのファンクションを複数回コールする場合、同じ点を戻す、または異なる点を戻す、という指定はできません。

ほとんどの場合、このファンクションは内部の点を戻すSDO_UTIL.INTERIOR_POINTファンクションと比較して有用性が低くなります。

例

次の例では、cola_a上にある点であるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

関連項目

なし。

23.26 SDO_GEOM.SDO_SELF_UNION

書式

SDO_GEOM.SDO_SELF_UNION(
geom1  IN SDO_GEOMETRY,
dim1   IN SDO_DIM_ARRAY,
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_SELF_UNION(
geom1  IN SDO_GEOMETRY,
tol    IN NUMBER
) RETURN SDO_GEOMETRY;

説明

1つのジオメトリ・オブジェクトの位相的な自己和集合となる有効なジオメトリ・オブジェクトを戻します。無効の場合があります。

パラメータ

geom1

ジオメトリ・オブジェクト。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

このファンクションは、ジオメトリを無効にする場合がある、次のような問題を修正するために使用できます。

- 自分自身と交わるポリゴン境界

- 方向が無効な、ポリゴンの外部または内部の輪(両方の輪の向きが無効な場合も含む)

例

次の例では、無効なポリゴンの位相的な自己和集合である有効なジオメトリ・オブジェクトを戻します。

-- Return the topological self union of an invalid geometry.
SELECT SDO_GEOM.SDO_SELF_UNION(
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1),
SDO_ORDINATE_ARRAY(1, 1, 1, 4, 4, 4, 4, 1, 1, 1)),
0.00005)
FROM dual;

SDO_GEOM.SDO_SELF_UNION(SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(1, 4, 1, 1, 4, 1, 4, 4, 1, 4))

関連項目

- SDO_GEOM.SDO_UNION

- SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

- SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

- SDO_UTIL.RECTIFY_GEOMETRY

23.27 SDO_GEOM.SDO_TRIANGULATE

書式

SDO_GEOM.SDO_TRIANGULATE(
geom  IN SDO_GEOMETRY,
tol   IN NUMBER
) RETURN SDO_GEOMETRY;

説明

入力ジオメトリのデローニ三角分割によって生成される三角形の要素を含むジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

tol

許容差(「許容差」を参照)。

使用上の注意

このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割の計算にそれらを使用して、各要素が三角形のジオメトリ・オブジェクトを戻します。

geomが、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

例

次の例では、cola_cポリゴン・ジオメトリを構成する三角形の要素(この場合は2つ)で構成されるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。

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

23.28 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

図23-4のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_UNIONを使用した場合に戻されるポリゴンです。

図23-4 SDO_GEOM.SDO_UNION

位相的な和集合操作を実行せずにジオメトリを他のジオメトリに追加でき、両方のジオメトリが非接続である場合は、SDO_UTIL.APPENDファンクション(「SDO_UTILパッケージ(ユーティリティ)」を参照)を使用する方がSDO_UNIONファンクションより高速です。

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_aとcola_cの位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- 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_SELF_UNION

23.29 SDO_GEOM.SDO_VOLUME

書式

SDO_GEOM.SDO_VOLUME(
geom  IN SDO_GEOMETRY,
tol   IN NUMBER
[, unit IN VARCHAR2]
) RETURN NUMBER;

説明

3次元ソリッドの容積を戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

tol

許容差(「許容差」を参照)。

unit

測定単位(unit=および容積単位を引用符で囲んだ文字列で、'unit=CUBIC_FOOT'や'unit=CUBIC_METER'など)を指定します。容積単位のリストについては、次の問合せを入力します。

SELECT short_name FROM mdsys.sdo_units_of_measure WHERE unit_of_meas_type = 'volume';

測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。

使用上の注意

このファンクションは、穴のあるソリッドを含め、すべてのソリッドに対して使用できます。

このファンクションは、測地データではサポートされません。

3次元ジオメトリのサポートの詳細は、「3次元の空間オブジェクト」を参照してください。

例

次の例では、ソリッド・ジオメトリ・オブジェクトの容積を戻します。

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

関連項目

なし。

23.30 SDO_GEOM.SDO_WIDTH

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

書式

SDO_GEOM.SDO_WIDTH(
geom  IN SDO_GEOMETRY,
dim   IN SDO_DIM_ARRAY
[, unit IN VARCHAR2]
) RETURN NUMBER;

または

SDO_GEOM.SDO_WIDTH(
geom  IN SDO_GEOMETRY,
tol   IN NUMBER
[, unit IN VARCHAR2]
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの幅を戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

使用上の注意

凸型のポリゴンの場合、幅はサポートの平行線間の最短距離です。

凸型以外のジオメトリでは、このファンクションは凸型ジオメトリを決定し、その凸型ジオメトリの幅を戻します。

入力ジオメトリは2つ以下の次元を持つことができます。

点ジオメトリが指定された場合、ファンクションは0 (ゼロ)を戻します。

例

次の例では、COLA_MARKETS表に格納されているすべてのジオメトリ・オブジェクトの幅を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT name, SDO_GEOM.SDO_WIDTH(shape, 0.005) Width
FROM cola_markets;

NAME                                  WIDTH
-------------------------------- ----------
cola_a                                    4
cola_b                                    3
cola_c                                    2
cola_d                                    4

関連項目

SDO_GEOM.SDO_WIDTH_LINE

SDO_GEOM.SDO_DIAMETER

23.31 SDO_GEOM.SDO_WIDTH_LINE

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

書式

SDO_GEOM.SDO_WIDTH(_LINE
geom  IN SDO_GEOMETRY,
dim   IN SDO_DIM_ARRAY
) RETURN NUMBER;

または

SDO_GEOM.SDO_WIDTH_LINE(
geom  IN SDO_GEOMETRY,
tol   IN NUMBER
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの幅を反映する線ストリング・ジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

凸型のポリゴンの場合、幅はサポートの平行線間の最短距離です。

凸型以外のジオメトリでは、このファンクションは凸型ジオメトリを決定し、その凸型ジオメトリの幅を戻します。

入力ジオメトリは2つ以下の次元を持つことができます。

点ジオメトリが指定された場合、ファンクションは0 (ゼロ)を戻します。

例

次の例では、COLA_MARKETS表に格納されている各ジオメトリ・オブジェクトの幅を反映する線ストリングを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT name, SDO_GEOM.SDO_WIDTH_LINE(shape, 0.005)
FROM cola_markets;

NAME
--------------------------------
SDO_GEOM.SDO_WIDTH_LINE(SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SD
--------------------------------------------------------------------------------
cola_a
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 7, 1, 7))

cola_b
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
8, 7, 5, 7))

cola_c
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
3, 5, 3, 3))

cola_d
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
10, 11, 6, 11))

関連項目

SDO_GEOM.SDO_WIDTH

SDO_GEOM.SDO_DIAMETER_LINE

23.32 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

使用上の注意

図23-5のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_XORを使用した場合に戻されるポリゴンです。

図23-5 SDO_GEOM.SDO_XOR

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_aとcola_cの位相的な排他的論理和(XOR演算)となるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

23.33 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tolerance

許容差(「許容差」を参照)。

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つ以上の点があり、その点には、ポリゴンをクローズする点が含まれるか(クローズする点では、最後の点が最初の点と同じです。)

- ポリゴンが自己交差していないか

- 線またはポリゴンに同じ点がないか

- ポリゴンは正しく指定されているか(外部の輪の境界は反時計回り、内部の輪の境界は時計回り)

- ポリゴンの内部が接続されているか

- 線ストリングに2つ以上の点があるか

- ポリゴンの輪の要素の定義に、1桁および4桁のSDO_ETYPE値が混在していないか

- 円弧上にある点が直線上にないか、または同じ点ではないか

- ジオメトリは(USER_SDO_GEOM_METADATAビューの)DIMINFO列の値で指定した範囲内にあるか

- LRSジオメトリ(「線形参照システム」を参照)には、3つまたは4つの次元と、有効なメジャー次元位置があります(次元の数によって3つまたは4つ)。

COLLECTIONタイプのジオメトリの場合、前述の確認の一部は実行されません。具体的には、COLLECTIONタイプのジオメトリのポリゴン要素に対して、内部の輪の確認およびポリゴン同士の重複の確認は行われません。

複数点ジオメトリの場合、このファンクションは、3次元ジオメトリでの重複する頂点を確認しますが、2次元ジオメトリについては確認しません。

3次元ジオメトリの場合は、このファンクションにより、「3次元ジオメトリの検証」に示す確認も行われます。

ジオメトリの一貫性チェックでは、ファンクションはジオメトリの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 (共有エッジ)が戻されても、この矩形に対する問合せには、正しい結果を戻すものもあります(「測地MBR」を参照)。

例

次の例では、(意図的に無効な状態で作成された)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.SDO_SELF_UNION

23.34 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_schema     IN VARCHAR2 DEFAULT NULL);

説明

格納済のジオメトリがジオメトリ・オブジェクトに対して定義された規則に従っているかどうかを判断するためにジオメトリ列を検査し、無効なジオメトリに関するコンテキスト情報を戻します。

パラメータ

geom_table

空間ジオメトリ表を指定します。geom_schemaパラメータが指定されていないかぎり、schema.table形式で指定できます(たとえばscott.shapesなど)。

geom_column

検査するジオメトリ・オブジェクト列を指定します。

result_table

検査結果を格納する結果表を指定します。無効なジオメトリの場合、result_tableに行が追加されます。無効なジオメトリが存在しない場合、結果がDONEである1つ以上(commit_interval値によって異なる)の行が追加されます。

commit_interval

Spatial and Graphが内部コミット操作を実行し、結果が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ファンクションの「使用上の注意」を参照してください。)

geom_schema

geom_table表のスキーマを指定します(現在のスキーマと異なる場合)。geom_schemaが指定されている場合、geom_tableパラメータはschema.table形式で指定できません。

使用上の注意

データで空間操作を実行する前に、すべてのジオメトリ・データを検査し、検査エラーがあれば修正する必要があります(「空間データのロードおよび検査の推奨手順」を参照)。

このプロシージャは、結果表に検査の結果をロードします。

このプロシージャをコールする前に、空の結果表(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ビュー(「ジオメトリのメタデータ・ビュー」を参照)の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.SDO_SELF_UNION

23.35 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

dist

距離値を指定します。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

許容差(「許容差」を参照)。

units

測定単位(unit=およびMDSYS.SDO_AREA_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

使用上の注意

パフォーマンスを向上させるには、SDO_GEOM.WITHIN_DISTANCEファンクションのかわりにSDO_WITHIN_DISTANCE演算子(「空間演算子」を参照)を使用します。演算子およびファンクションを使用する場合のパフォーマンスに関する注意点の詳細は、「空間演算子、空間プロシージャおよび空間ファンクション」を参照してください。

このファンクションは、オブジェクトの組合せが指定した距離内にある場合にTRUEを戻し、そうでない場合はFALSEを戻します。

領域のある2つのオブジェクト(たとえば、線やポリゴンなど、点以外のオブジェクト)の距離は、それら2つのオブジェクト間の最短距離です。そのため、2つの隣接したポリゴン間の距離はゼロです。

geom1およびgeom2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_bとcola_d間の最短距離が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

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

MDSYS.SDO_LRSパッケージには、線形参照要素の作成、変更、問合せおよび変換を行うサブプログラムが含まれています。これらのサブプログラムによって、データベースの状態が変更されることはありません。多くのLRSサブプログラムはファンクションです。

この章で説明するサブプログラムを使用するには、「線形参照システム」で説明する線形参照システム(LRS)の概念を理解しておく必要があります。

次の表に、ジオメトリ・セグメントの作成および編集に関連するサブプログラムを示します。

表24-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

ジオメトリ・セグメントのメジャー値および方向を反転させて、新しいジオメトリ・セグメントを戻します。

次の表に、ジオメトリ・セグメントの問合せに関連するサブプログラムを示します。

表24-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ジオメトリが有効かどうかを確認します。

次の表に、ジオメトリ・セグメントの変換に関連するサブプログラムを示します。

表24-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ジオメトリ・セグメントからメジャー情報を持たない標準の線ストリング・ジオメトリに変換します。また、メタデータを更新します。

変換サブプログラムの詳細は、「LRSジオメトリの変換」を参照してください。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

24.1 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

start_measure

ジオメトリ・セグメントの開始メジャーを指定します。

end_measure

ジオメトリ・セグメントの終了メジャーを指定します。

tolerance

許容差を指定します(「許容差」および「LRSファンクションの許容差」を参照)。デフォルト値は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形式については、「LRSファンクションの3D形式」を参照してください。

ジオメトリ・セグメントのクリップについては、「ジオメトリ・セグメントのクリップ」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1をクリップして、メジャー5から10のセグメントを戻します。このセグメントは、建設区域を表します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.2 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom_segment_2

連結する2つ目のジオメトリ・セグメントを指定します。

dim_array_2

geom_segment_2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tolerance

許容差を指定します(「許容差」および「LRSファンクションの許容差」を参照)。デフォルト値は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形式については、「LRSファンクションの3D形式」を参照してください。

ジオメトリ・セグメントの連結については、「ジオメトリ・セグメントの連結」を参照してください。

例

次の例では、ジオメトリ・セグメントを定義し、ジオメトリ・セグメントを2つのセグメントに分割した後、それらを連結します。(例では、「LRSファンクションの例」の例の定義を使用しています。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;
/

24.3 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom_segment_2

確認する2つのジオメトリ・セグメントの2つ目を指定します。

dim_array_2

geom_segment_2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tolerance

許容差を指定します(「許容差」および「LRSファンクションの許容差」を参照)。デフォルト値は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形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、(分割操作の結果である)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

24.4 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;

or

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;

or

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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

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

許容差を指定します(「許容差」および「LRSファンクションの許容差」を参照)。デフォルト値は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形式については、「LRSファンクションの3D形式」を参照してください。

変換ファンクションの詳細は、「LRSジオメトリの変換」を参照してください。

例

次の例では、LRS_ROUTES表の次元配列をLRSフォーマットに変換します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.5 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;

or

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;

or

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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

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形式については、「LRSファンクションの3D形式」を参照してください。

変換ファンクションの詳細は、「LRSジオメトリの変換」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1をLRSフォーマットに変換します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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(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, NULL, 8, 10, 22, 5, 14, 27))

24.6 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

許容差を指定します(「許容差」および「LRSファンクションの許容差」を参照)。デフォルト値は0.00000001です。

使用上の注意

このファンクションは、変換が正常に行われた場合、またはレイヤーがすでにメジャー情報を含む場合はTRUEを戻します。また、変換が失敗した場合は例外を戻します。

表の既存の次元情報が無効な場合は、例外が発生します。

メジャー値は、開始メジャー0(ゼロ)および地図上の長さを表す終了メジャーに基づいて割り当てられます。

column_nameにすでに空間索引が存在する場合、レイヤーの変換前にその索引を削除し、レイヤーの変換後に新しい索引を作成する必要があります。索引の削除および作成については、「空間データを索引付けするためのSQL文」に示すDROP INDEX文およびCREATE INDEX文の説明を参照してください。

このファンクションは_3D 形式(SDO_LRS.CONVERT_TO_LRS_LAYER_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

変換ファンクションの詳細は、「LRSジオメトリの変換」を参照してください。

例

次の例では、LRS_ROUTES表のROUTE_GEOMETRY列のジオメトリ・セグメントをLRSフォーマットに変換します。(例では、「LRSファンクションの例」の例の定義を使用しています。)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))

24.7 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

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形式については、「LRSファンクションの3D形式」を参照してください。

変換ファンクションの詳細は、「LRSジオメトリの変換」を参照してください。

例

次の例では、LRS_ROUTES表の次元配列を標準フォーマットに変換します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.8 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、すべてのメジャーの情報が削除されたSDO_GEOMETRYオブジェクトを戻します。

このファンクションは_3D 形式(SDO_LRS.CONVERT_TO_STD_GEOM_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

変換ファンクションの詳細は、「LRSジオメトリの変換」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1を標準フォーマットに変換します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.9 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にすでに空間索引が存在する場合、レイヤーの変換前にその索引を削除し、レイヤーの変換後に新しい索引を作成する必要があります。索引の削除および作成については、「空間データを索引付けするためのSQL文」に示すDROP INDEX文およびCREATE INDEX文の説明を参照してください。

このファンクションは_3D 形式(SDO_LRS.CONVERT_TO_STD_LAYER_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

変換ファンクションの詳細は、「LRSジオメトリの変換」を参照してください。

例

次の例では、LRS_ROUTES表のROUTE_GEOMETRY列のジオメトリ・セグメントを標準フォーマットに変換します。(例では、「LRSファンクションの例」の例の定義を使用しています。)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))

24.10 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

start_measure

ジオメトリ・セグメントの開始点から線形フィーチャの開始点までの距離を指定します。デフォルトは、メジャー次元の既存の値(存在する場合)です。メジャー次元の値が存在しない場合、デフォルト値は0 (ゼロ)です。

end_measure

ジオメトリ・セグメントの終了点から線形フィーチャの開始点までの距離を指定します。デフォルトは、メジャー次元の既存の値(存在する場合)です。メジャー次元の値が存在しない場合、セグメントの地図上の長さです。

使用上の注意

geom_segment に無効なジオメトリ・タイプまたは次元が含まれる場合、またはstart_measureまたはend_measureが範囲外の場合、例外が発生します。

ジオメトリ・セグメントの割り当てられていないすべてのメジャーは、自動的に移入されます。

結果のジオメトリ・セグメント(geom_segment)をデータベースに格納するには、UPDATE文またはINSERT文を適切に実行する必要があります。

このプロシージャは_3D 形式(SDO_LRS.DEFINE_GEOM_SEGMENT_3D)が使用可能です。LRSファンクションおよびプロシージャの_3D形式については、「LRSファンクションの3D形式」を参照してください。

ジオメトリ・セグメントの定義については、「ジオメトリ・セグメントの定義」を参照してください。

例

次の例では、ジオメトリ・セグメントを定義し、ジオメトリ・セグメントを2つのセグメントに分割した後、それらを連結します。(例では、「LRSファンクションの例」の例の定義を使用しています。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;
/

24.11 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

start_measure

ジオメトリ・セグメントの開始メジャーを指定します。

end_measure

ジオメトリ・セグメントの終了メジャーを指定します。

tolerance

許容差を指定します(「許容差」および「LRSファンクションの許容差」を参照)。デフォルト値は0.00000001です。

使用上の注意

geom_segment、start_measureまたはend_measureが無効な場合は例外が発生します。

ジオメトリ・セグメントにクリップした結果の方向およびメジャーは保持されます。

ジオメトリ・セグメントのクリップについては、「ジオメトリ・セグメントのクリップ」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1をクリップして、メジャー5から10のセグメントを戻します。このセグメントは、建設区域を表します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.12 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構造内におけるメジャー次元の位置を戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

SELECT SDO_LRS.FIND_LRS_DIM_POS('LRS_ROUTES', 'ROUTE_GEOMETRY') FROM DUAL;

SDO_LRS.FIND_LRS_DIM_POS('LRS_ROUTES','ROUTE_GEOMETRY')
-------------------------------------------------------
3

24.13 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

point

投影点を指定します。このファンクションは、投影点に最も近いgeom_segment上の点のメジャーを戻します。

使用上の注意

このファンクションは、投影点に最も近いgeom_segment上の点のメジャーを戻します。たとえば、投影点がショッピング・モールを表す場合、このファンクションは、高速道路の開始位置からショッピング・モールに最も近い高速道路上の地点までの距離を算出します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、またはgeom_segmentおよびpointが異なる座標系に基づく場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.FIND_MEASURE_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、点(10, 7)に最も近いジオメトリ・セグメントRoute 1上の点のメジャーを検索します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.14 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

許容差を指定します(「許容差」および「LRSファンクションの許容差」を参照)。デフォルト値は0.00000001です。

dim_array

geom_segmentに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

point_dim_array

pointに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、offset出力パラメータを指定したSDO_LRS.PROJECT_PTファンクション形式をコールします。ジオメトリ・セグメントおよび点情報を渡し、SDO_LRS.PROJECT_PT offsetパラメータ値を戻します。このため、ジオメトリ・セグメントからの点のオフセットを調べるには、このファンクションまたはoffsetパラメータを指定したSDO_LRS.PROJECT_PTファンクションを使用できます。

geom_segmentまたはpointに無効なジオメトリ・タイプまたは次元が含まれる場合、またはgeom_segmentおよびpointが異なる座標系に基づく場合、例外が発生します。

ジオメトリ・セグメントへのオフセットについては、「オフセット」を参照してください。

例

次の例では、点(9,3,NULL)の、ジオメトリ・セグメントRoute 1からのオフセットを戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)「LRSファンクションの例」の図7-20に示すとおり、点(9,3,NULL)はセグメントの右側にあるため、オフセットには負の値が含まれます(「オフセット」を参照)。点(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

24.15 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、geom_segmentの終了メジャーを戻します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.GEOM_SEGMENT_END_MEASURE_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1の終了メジャーを戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.16 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、geom_segmentの終了点を戻します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.GEOM_SEGMENT_END_PT_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1の終了点を戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.17 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、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形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1の長さを戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

SELECT  SDO_LRS.GEOM_SEGMENT_LENGTH(route_geometry)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.GEOM_SEGMENT_LENGTH(ROUTE_GEOMETRY)
-------------------------------------------
27

24.18 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、geom_segmentの開始メジャーを戻します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.GEOM_SEGMENT_START_MEASURE_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1の開始メジャーを戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.19 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、geom_segmentの開始点を戻します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.GEOM_SEGMENT_START_PT_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1の開始点を戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.20 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、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形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、投影点のメジャーを戻します。この場合、投影の結果できる点はセグメントの開始位置から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

24.21 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

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形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1上のメジャー14の次にある形状点を戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.22 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

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形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1上のメジャー14の次にある形状点のメジャー値を戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.23 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

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形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1上のメジャー14の前にあり、メジャー14に最も近い形状点を戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.24 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

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形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1上のメジャー14の前にあり、メジャー14に最も近い形状点のメジャー値を戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.25 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、geom_segmentが正しく定義されている場合は、TRUEを戻します。また、geom_segmentが正しく定義されていない場合は、FALSEを戻します。

geom_segmentの開始および終了メジャーが定義されている必要があります(NULLは定義できません)。また、割り当てられたすべてのメジャーは、セグメントの方向に昇順または降順である必要があります。

このファンクションは_3D 形式(SDO_LRS.IS_GEOM_SEGMENT_DEFINED_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

SDO_LRS.VALID_GEOM_SEGMENTファンクションを参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1が定義されているかどうかを確認します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.26 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、メジャー値がLRSセグメントの方向に降順である場合はTRUE、そうでない場合はFALSEを戻します。

geom_segmentの開始および終了メジャーが定義されている必要があります(NULLは定義できません)。

このファンクションは_3D 形式(SDO_LRS.IS_MEASURE_DECREASING_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

SDO_LRS.IS_MEASURE_INCREASINGファンクションを参照してください。

例

次の例では、メジャー値がジオメトリ・セグメントRoute 1の方向に降順であるかどうかを確認します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.27 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、メジャー値がLRSセグメントの方向に昇順である場合はTRUE、そうでない場合はFALSEを戻します。

geom_segmentの開始および終了メジャーが定義されている必要があります(NULLは定義できません)。

このファンクションは_3D 形式(SDO_LRS.IS_MEASURE_INCREASING_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

SDO_LRS.IS_MEASURE_DECREASINGファンクションを参照してください。

例

次の例では、メジャー値がジオメトリ・セグメントRoute 1の方向に昇順であるかどうかを確認します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.28 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、指定したメジャー値が形状点に関連付けられている場合はTRUEを戻します。また、メジャー値が形状点に関連付けられていいない場合はFALSEを戻します。

measureがgeom_segmentに有効な値ではない場合は、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.IS_SHAPE_PT_MEASURE_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1上のメジャー14が形状点であるかどうかを確認します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.29 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

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形式については、「LRSファンクションの3D形式」を参照してください。

ジオメトリ・セグメント上の点の位置の確認については、「ジオメトリ・セグメント上の点の位置の確認」を参照してください。

例

次の例では、自動車事故データの表を作成し、メジャーが9でジオメトリ・セグメントRoute 1上に存在する点(オフセット0(ゼロ))における事故の記録を挿入して、そのデータを表示します。(事故の表は、意図的に単純化されています。例では、「LRSファンクションの例」の例のルート定義を使用しています。)

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

24.30 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom_2

ジオメトリ・オブジェクト。

dim_array_2

geom_2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tolerance

許容差(「許容差」を参照)。

使用上の注意

このファンクションは、基本的にSDO_GEOM.SDO_INTERSECTIONと同じ共通部分の操作を実行します(「SDO_GEOMパッケージ(ジオメトリ)」を参照)。ただし、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ジオメトリ・セグメント(「LRSファンクションの例」の高速道路の例を参照)を示しています。結果は、LRS点ジオメトリであり、メジャー値(8)は、geom_1ジオメトリにおけるその点(Exit 3として指定されている)のメジャーを反映しています。(例では、「LRSファンクションの例」の例の定義を使用しています。)

-- 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ジオメトリ・セグメント(「LRSファンクションの例」の図7-20を参照)を示しています。結果は、LRS線ストリング・ジオメトリであり、メジャー値(12および14)は、geom_1ジオメトリにおける点(その1つ目の点はExit 4として指定されている)のメジャーを反映しています。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.31 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、geom_segmentの終了メジャーからgeom_segmentの開始メジャーを引きます。

このファンクションは_3D 形式(SDO_LRS.MEASURE_RANGE_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1のメジャー範囲を戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

SELECT SDO_LRS.MEASURE_RANGE(route_geometry)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.MEASURE_RANGE(ROUTE_GEOMETRY)
-------------------------------------
27

24.32 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

measure

メジャー値を指定します。このファンクションは、メジャー範囲に対するメジャー値の割合を戻します。

使用上の注意

このファンクションは、指定したメジャーが表すメジャー範囲に対する割合を、0から100の数字で戻します。(メジャー範囲は終了メジャーから開始メジャーを引いた値です。)たとえば、geom_segmentのメジャー範囲が50でmeasureが20の場合、ファンクションは40を戻します(20/50 = 40%)。

このファンクションは、割合の値に対応するメジャーを戻すSDO_LRS.PERCENTAGE_TO_MEASUREファンクションとは逆に動作します。

geom_segmentまたはmeasureが無効な場合、例外が発生します。

例

次の例では、ジオメトリ・セグメントRoute 1のメジャー範囲に対する5の割合を戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)このセグメントのメジャー範囲は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

24.33 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

start_measure

オフセットの操作を開始するgeom_segmentの開始メジャーを指定します。

end_measure

オフセットの操作を開始するgeom_segmentの終了メジャーを指定します。

offset

geom_segmentに沿った点からメジャーまでの垂直距離を指定します。正のオフセット値はgeom_segmentの左側、負のオフセット値はgeom_segmentの右側です。

tolerance

許容差を指定します(「許容差」および「LRSファンクションの許容差」を参照)。デフォルト値は0.00000001です。

unit

測定単位(次のキーワードの1つまたは両方を含む、引用符で囲まれた文字列)を指定します。

- unitおよびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

- arc_toleranceおよび円弧の許容差。arc_toleranceキーワードの詳細は、「SDO_GEOMパッケージ(ジオメトリ)」に示す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大きいことに注意してください。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.34 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

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%のメジャーを戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)このセグメントのメジャー範囲は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

24.35 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

point

投影する点を指定します。

tolerance

許容差を指定します(「許容差」および「LRSファンクションの許容差」を参照)。デフォルト値は0.00000001です。

point_dim_array

pointに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

offset

点からジオメトリ・セグメントまでのオフセット(最短距離)を指定します。

使用上の注意

このファンクションは、指定した点(point)の投影点(メジャーを含む)を戻します。投影点はジオメトリ・セグメント上にあります。

複数の投影点が存在する場合は、開始点に最も近い投影点が戻されます。

出力パラメータoffsetを指定した場合、このファンクションによって、点とジオメトリ・セグメント間の符号付きオフセット(最短距離)が格納されます。ジオメトリ・セグメントへのオフセットについては、「オフセット」を参照してください。

geom_segmentまたはpointに無効なジオメトリ・タイプまたは次元が含まれる場合、またはgeom_segmentおよびpointが異なる座標系に基づく場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.PROJECT_PT_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

ジオメトリ・セグメントへの点の投影については、「ジオメトリ・セグメント上の点の投影」を参照してください。

例

次の例では、指定した点(9,3,NULL)に最も近いジオメトリ・セグメントRoute 1上の点(9,4,9)を戻します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.36 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

start_measure

ジオメトリ・セグメントの開始点から線形フィーチャの開始点までの距離を指定します。デフォルトは、メジャー次元の既存の値(存在する場合)です。メジャー次元の値が存在しない場合、デフォルト値は0 (ゼロ)です。

end_measure

ジオメトリ・セグメントの終了点から線形フィーチャの開始点までの距離を指定します。デフォルトは、メジャー次元の既存の値(存在する場合)です。メジャー次元の値が存在しない場合、セグメントの地図上の長さです。

使用上の注意

geom_segment に無効なジオメトリ・タイプまたは次元が含まれる場合、またはstart_measureまたはend_measureが範囲外の場合、例外が発生します。

このプロシージャは_3D 形式(SDO_LRS.REDEFINE_GEOM_SEGMENT_3D)が使用可能です。LRSファンクションおよびプロシージャの_3D形式については、「LRSファンクションの3D形式」を参照してください。

ジオメトリ・セグメントの再定義については、「ジオメトリ・セグメントの再定義」を参照してください。

例

次の例では、ジオメトリ・セグメントを再定義して、メジャー値のマイルをkmに効率的に変換します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.37 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

geom_segment に無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

例

次の例では、ジオメトリ・セグメントのすべてのメジャーをNULL値に設定します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.38 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、次の操作を実行します。

- geomのメジャー値を反転させます。
geomの開始メジャーは戻されたジオメトリ・セグメントの終了メジャーになり、geomの終了メジャーは戻されたジオメトリ・セグメントの開始メジャーになります。他のすべてのメジャーも適切に調整されます。

- geomの方向を反転させます。

ジオメトリ・セグメントのメジャー値のみを反転させる(方向は反転させない)SDO_LRS.REVERSE_MEASUREと比較してください。

非LRS線ストリング・ジオメトリの頂点を反転させるには、SDO_UTIL.REVERSE_LINESTRINGファンクション(「SDO_UTILパッケージ(ユーティリティ)」を参照)を使用します。

geomに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。ジオメトリ・タイプは単一または複数の線であり、次元数は3 (2次元とメジャー次元)である必要があります。

このファンクションは_3D 形式(SDO_LRS.REVERSE_GEOMETRY_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1のメジャー値および方向を反転させます。(例では、「LRSファンクションの例」の例の定義を使用しています。)

-- 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)ことに注意してください。

24.39 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、次の操作を実行します。

- geom_segmentのメジャー値を反転させます。
geom_segmentの開始メジャーは戻されたジオメトリ・セグメントの終了メジャーになり、geom_segmentの終了メジャーは戻されたジオメトリ・セグメントの開始メジャーになります。他のすべてのメジャーも適切に調整されます。

- geom_segmentの方向には影響しません。

ジオメトリ・セグメントの方向およびメジャー値の両方を反転させるSDO_LRS.REVERSE_GEOMETRYと比較してください。

geom_segment に無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.REVERSE_MEASURE_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

注意:

SDO_LRS.REVERSE_MEASUREファンクションの動作は、リリース8.1.7の後で変更されています。リリース8.1.7では、REVERSE_MEASUREによって、メジャーおよびセグメントの方向の両方が反転されます。後続のリリースでこれと同じ動作が必要な場合、SDO_LRS.REVERSE_GEOMETRYファンクションを使用する必要があります。

例

次の例では、ジオメトリ・セグメントRoute 1のメジャー値を反転させます(方向は反転させません)。(例では、「LRSファンクションの例」の例の定義を使用しています。)

-- 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)であることに注意してください。

24.40 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

start_measure

ジオメトリ・セグメントの開始メジャーを指定します。

end_measure

ジオメトリ・セグメントの終了メジャーを指定します。

shift_measure

初回のスケール変更後に、各メジャー値に追加される量を指定します。値が0(ゼロ)の場合は、何も追加されません(メジャー値のシフトはありません)。

tolerance

許容差を指定します(「許容差」および「LRSファンクションの許容差」を参照)。デフォルト値は0.00000001です。

使用上の注意

このファンクションは、次の操作を実行します。

1. 開始点のstart_measureから終了点のend_measureまでを使用し、それに応じた範囲でメジャー値を調整(スケール変更)することで、LRSジオメトリ・セグメントのメジャー値を再配布します。

2. shift_measureが0(ゼロ)でない場合は、shift_measureの値を追加して、手順1で計算された各メジャー値を変換(シフト)します。

このファンクションでの操作は、メジャー値の伸縮と呼ばれることがあります。このファンクションが影響を与えるのはメジャー値のみであり、ジオメトリのその他の座標は変更されません。

geom_segment、start_measureまたはend_measureが無効な場合は例外が発生します。

結果のジオメトリ・セグメントの方向は保持されます(元のセグメントが反映されます)。

ジオメトリ・セグメントのスケール変更については、「ジオメトリ・セグメントのスケール変更」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1がスケール変更され、開始メジャーと終了メジャーにそれぞれ100と200が指定され、シフト・メジャー値が10であるセグメントが戻されます。したがって、すべてのメジャー値は、開始メジャー値と終了メジャー値に準じてスケール変更された後に10が追加されます。つまり、この例では、戻されるジオメトリの開始点メジャーは110で、終了点メジャーは210になります。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.41 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

point

メジャー値を設定する点を指定します。

pt_dim_array

point (2つ目の構文)に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

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形式については、「LRSファンクションの3D形式」を参照してください。

geom_segmentまたはpointが無効な場合、例外が発生します。

例

次の例では、点(8,10)のメジャー値を20に設定します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

-- 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.

24.42 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

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形式については、「LRSファンクションの3D形式」を参照してください。

ジオメトリ・セグメントの分割については、「ジオメトリ・セグメントの分割」を参照してください。

例

次の例では、ジオメトリ・セグメントを定義し、ジオメトリ・セグメントを2つのセグメントに分割した後、それらを連結します。(例では、「LRSファンクションの例」の例の定義を使用しています。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;
/

24.43 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

translate_m

ジオメトリ・セグメントの開始点から線形フィーチャの開始点までの距離を指定します。

使用上の注意

このファンクションは、geom_segmentの開始および終了メジャーにtranslate_mを追加します。たとえば、geom_segmentの開始メジャーが50、終了メジャーが100、translate_mが10の場合、戻されるジオメトリ・セグメントの開始メジャーは60、終了メジャーは110です(次の図を参照)。

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

geom_segment に無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.TRANSLATE_MEASURE_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1を10変換(シフト)します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.44 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、geom_segmentが有効な場合はTRUEを戻し、geom_segmentが無効な場合はFALSEを戻します。

メジャー情報は、Oracle Spatial and GraphメタデータのSDO_DIM_ARRAYの最後の要素に格納されていると想定されています。

このファンクションは、ジオメトリ・タイプおよびジオメトリ・セグメントの次元数のみ確認します。メジャー情報を詳しく検証するには、SDO_LRS.IS_GEOM_SEGMENT_DEFINEDファンクションを使用します。

このファンクションは_3D 形式(SDO_LRS.VALID_GEOM_SEGMENT_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、ジオメトリ・セグメントRoute 1が有効であるかどうかを確認します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

SELECT  SDO_LRS.VALID_GEOM_SEGMENT(route_geometry)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.VALID_GEOM_SEGMENT(ROUTE_GEOMETRY)
--------------------------------------------------------------------------------
TRUE

24.45 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、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形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、点(9,3,NULL)が有効なLRS点であるかどうかを確認します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

24.46 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

measure

geom_segmentのメジャー範囲内にあるかどうかを確認するメジャー値を指定します。

使用上の注意

このファンクションは、measureがgeom_segmentのメジャー範囲内にある場合は、TRUEを戻します。また、measureがgeom_segmentのメジャー範囲外にある場合は、FALSEを戻します。

geom_segmentに無効なジオメトリ・タイプまたは次元が含まれる場合、例外が発生します。

このファンクションは_3D 形式(SDO_LRS.VALID_MEASURE_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、50がRoute 1セグメント上で有効なメジャーであるかどうかを確認します。このセグメントのメジャー範囲は0から27であるため、このファンクションはFALSEを戻します。たとえば、長さが27マイルで1マイルごとにマークが付いた道路では、最後のマークは27マイルのマークであるため、50マイルのマークはありません。(例では、「LRSファンクションの例」の例の定義を使用しています。)

SELECT  SDO_LRS.VALID_MEASURE(route_geometry, 50)
FROM lrs_routes WHERE route_id = 1;

SDO_LRS.VALID_MEASURE(ROUTE_GEOMETRY,50)
--------------------------------------------------------------------------------
FALSE

24.47 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つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上の注意

このファンクションは、geom_segmentが有効な場合はTRUEを戻します。また、geom_segmentが無効な場合は次のエラーのいずれかを戻します。

- ORA-13331(LRSセグメントが無効です。)

- ORA-13335(LRS測定情報が定義されていません。)

このファンクションは_3D 形式(SDO_LRS.VALIDATE_LRS_GEOMETRY_3D)が使用可能です。LRSファンクションの3D形式については、「LRSファンクションの3D形式」を参照してください。

例

次の例では、Route 1セグメントが有効なLRSジオメトリであるかを確認します。(例では、「LRSファンクションの例」の例の定義を使用しています。)

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

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

この章で説明するSDO_MIGRATE.TO_CURRENTサブプログラムには、プロシージャとファンクションの両方のインタフェースがあります。プロシージャの場合、以前のリリースのSpatial and Graphから空間ジオメトリ表をアップグレードできます。また、ファンクションの場合は、単一のSDO_GEOMETRYオブジェクトをアップグレードできます。

このサブプログラムは、使用方法が非常に限定されています。「使用上の注意」を参照してください。

25.1 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

Oracle Spatial and Graphによって内部コミット操作が実行される前にアップグレードするジオメトリの数を指定します。commit_intを指定しない場合、アップグレード時に内部コミット操作が実行されません。

commit_int値を指定すると、この値を指定しない場合より小規模なロールバック・セグメントを使用できます。

geom

今回のリリースにアップグレードする単一のジオメトリ・オブジェクトを指定します。

dim

アップグレードするジオメトリ・オブジェクトの次元情報の配列を指定します。SDO_DIM_ARRAY型の詳細は、「DIMINFO」を参照してください。

layer

アップグレードするレイヤーの名前を指定します。

newtabname

データのアップグレード先となる新しい表の名前を指定します。

gidcolumn

古い表からGIDを格納する列名を指定します。

geocolname

ジオメトリ・オブジェクトを挿入する新しい表の列名を指定します。

layer_gtype

POINTまたはNOTPOINT(デフォルト)のいずれかを指定します。

アップグレードするレイヤーがすべて点データである場合、このパラメータをPOINTに設定すると、最適なパフォーマンスが得られます。それ以外の場合は、NOTPOINTを指定します。レイヤーに点以外のジオメトリが含まれる場合に、値をPOINTに設定すると、アップグレードによって無効なデータが生成される場合があります。

updateflag

UPDATEまたはINSERT(デフォルト)のいずれかを指定します。

既存の属性の表に移入するアップグレードの場合は、UPDATEを指定します。それ以外の場合は、INSERTを指定します。

オブジェクト・リレーショナル・モデル・レイヤー、および単一のジオメトリからアップグレードする場合の使用上の注意

このサブプログラムは、Oracle Spatial and Graphの通常のアップグレードを行う際には必要ありません。これは、空間データがサード・パーティのローダーを使用してロードされる場合で、結果のジオメトリの方向が誤っているかETYPE値やGTYPE値が無効な場合に必要になることがあります。空間データをロードおよび検証する際の推奨手順の一部としてこのサブプログラムを使用する方法については、「空間データのロードおよび検査の推奨手順」を参照してください。

このサブプログラムによって、指定されたレイヤー内の指定のジオメトリ・オブジェクトまたはすべてのジオメトリ・オブジェクトがアップグレードされるため、SDO_GTYPE値およびSDO_ETYPE値は、今回のリリースの形式になります。

- 「SDO_GTYPE」に示す形式(DLTT)で、4桁のSDO_GTYPE値が作成されます。

- SDO_ETYPE値については、「SDO_ELEM_INFO」を参照してください。

ジオメトリは、先に外部の輪、次に内部の輪の順に順序付けされ、各座標は正しいローテーション(外部の輪は反時計回り、内部の輪は時計回り)で保存されます。

リレーショナル・モデルからアップグレードする場合の使用上の注意

Spatialのリレーショナル・モデル(リリース8.1.5以下)からアップグレードする場合、このプロシージャを使用する際には次を考慮してください。

- このプロシージャをコールする前に、新しい表を作成しておく必要があります。

- アップグレードするデータが測地の場合、許容差(<layername>_SDODIM表またはビュー内のSDO_TOLERANCE列の値)は、10進度(たとえば0.00000005)で表す必要があります。

- このプロシージャによって、ジオメトリがリレーショナル・モデルからオブジェクト・リレーショナル・モデルに変換されます。

- このプロシージャで、コミット操作が実行されます。

- アップグレード時に正常に実行されなかった操作がある場合、レイヤー内のすべてのデータについてアップグレードは行われません。

- layerには、基になるレイヤー名を_SDOGEOM接尾辞を付けずに指定します。

- アップグレード前のSDO_GIDは、gidcolumnに格納されます。

- 「SDO_GTYPE」に示す形式(DLTT)で、4桁のSDO_GTYPE値が作成されます。

- 「SDO_ELEM_INFO」に示す値を使用して、SDO_ETYPE値が作成されます。

- このプロシージャは、先に外部の輪、次に内部の輪の順になるようにジオメトリの順序付けを行い、正しいローテーション(外部の輪は反時計回り、内部の輪は時計回り)で各座標を保存します。

例

次の例では、ROADS表内のジオメトリ・オブジェクトの定義を、リリース8.1.5より上の形式から今回のリリースの形式へ変更します。

EXECUTE SDO_MIGRATE.TO_CURRENT('ROADS');

26 SDO_OLSパッケージ(OpenLS)

MDSYS.SDO_OLSパッケージには、Spatial and GraphのOpenLSをサポートするためのサブプログラムが含まれています。

この章で説明するサブプログラムを使用する場合は、OpenLSの概念および使用方法を理解しておく必要があります(「OpenLSのサポート」を参照)。

表26-1にOpenLSのサブプログラムを示します。

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

サブプログラム

説明

SDO_OLS.MakeOpenLSClobRequest

CLOBオブジェクトを使用してOpenLSリクエストを送信し、結果をCLOBオブジェクトとして戻します。

SDO_OLS.MakeOpenLSRequest

XMLTypeオブジェクトを使用してOpenLSリクエストを送信し、結果をXMLTypeオブジェクトとして戻します。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

26.1 SDO_OLS.MakeOpenLSClobRequest

書式

SDO_OLS.MakeOpenLSClobRequest(
request  IN CLOB
) RETURN CLOB;

説明

CLOBオブジェクトを使用してOpenLSリクエストを送信し、結果をCLOBオブジェクトとして戻します。

パラメータ

request

CLOBオブジェクト形式のOpenLSリクエストを指定します。

使用上の注意

入力リクエストをXMLTypeオブジェクトとして指定してXMLTypeオブジェクトを戻すには、SDO_OLS.MakeOpenLSRequestファンクションを使用します。

OpenLSのサポートについては、「OpenLSのサポート」を参照してください。

例

次の例では、指定したカテゴリで(つまり、指定した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;
/

26.2 SDO_OLS.MakeOpenLSRequest

書式

SDO_OLS.MakeOpenLSRequest(
request  IN XMLTYPE
) RETURN XMLTYPE;

説明

XMLTypeオブジェクトを使用してOpenLSリクエストを送信し、結果をXMLTypeオブジェクトとして戻します。

パラメータ

request

XMLTypeオブジェクト形式のOpenLSリクエストを指定します。

使用上の注意

入力リクエストをCLOBとして指定してCLOBを戻すには、SDO_OLS.MakeOpenLSClobRequestファンクションを使用します。

OpenLSのサポートについては、「OpenLSのサポート」を参照してください。

例

次の例では、指定したカテゴリで(つまり、指定した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;

27 SDO_PC_PKGパッケージ(点群)

この章では、表27-1に示す点群のサブプログラムについて説明します。

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

サブプログラム

説明

SDO_PC_PKG.CLIP_PC

点群に対してクリップ操作を実行します。

SDO_PC_PKG.CLIP_PC_FLAT

点群データが平面表に格納された、平面形式の点群でクリップ操作を実行します。

SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES

点群の輪郭線を生成します。

SDO_PC_PKG.CREATE_PC

inptableパラメータで指定した点を使用して点群を作成します。

SDO_PC_PKG.DROP_DEPENDENCIES

点群ブロック表と指定した実表および列の間の依存性を削除します。

SDO_PC_PKG.INIT

点群を初期化します。

SDO_PC_PKG.TO_GEOMETRY

点群のすべてまたは一部を表すジオメトリ・オブジェクトを戻します。

このパッケージのサブプログラムを使用するには、点群を使用したソリッドのモデル化など、3次元のジオメトリに関する主な概念を理解しておく必要があります。3次元ジオメトリのサポートについては「3次元の空間オブジェクト」、点群を使用したソリッドのモデル化については「ソリッドのモデル化」、点群に関連するデータ型については「点群に関連するオブジェクト型」を参照してください。

27.1 SDO_PC_PKG.CLIP_PC

書式

SDO_PC_PKG.CLIP_PC(
inp           IN SDO_PC,
ind_dim_qry   IN SDO_GEOMETRY,
other_dim_qry IN SDO_MBR,
qry_min_res   IN NUMBER,
qry_max_res   IN NUMBER,
blkno         IN NUMBER DEFAULT NULL,
include_custom_dims IN NUMBER DEFAULT 0
) 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の場合、他のパラメータを満たすすべてのオブジェクトが戻されます。

include_custom_dims

数値0または1で、SDO_PCのPC_TOT_DIMENSIONSの個数に含まれる、通常(NUMBER型)の次元のみを含むファンクションによって点群ブロックが戻されるかどうかを指定します。このような通常の次元のみを戻す場合は、include_custom_dims=0(デフォルト)です。ブロック表に格納された点群ブロックには、その他のカスタム次元が含まれたままですが、この個々のCLIP_PC問合せはこれらを戻しません。

include_custom_dims=1では、通常の次元とカスタムの次元の両方が含まれます。

カスタムの次元の詳細は、「使用上の注意」を参照してください。

使用上の注意

このファンクションは、指定した問合せウィンドウ内にあり、かつパラメータによって指定されている他の要件を満たしている点群の点を戻します。一般に、このファンクションは点群に対して問合せを実行するために使用します。点群の問合せのパフォーマンスを最大にするには、ファンクションが操作に対して考慮する必要のあるオブジェクトの数を最小限にします。

SDO_PCおよびSDO_PC_BLK_TYPEデータ型については、「点群に関連するオブジェクト型」を参照してください。

このファンクションは、カスタム次元の格納と問合せをサポートします。カスタム次元は、NUMBER型の場合とそれ以外の型の場合があり、SDO_PCのPC_TOT_DIMENSIONSの個数には含まれません。include_custom_dims=1を指定すると、カスタム次元を問合せ結果に含めることはできますが、カスタム次元は数値型ではない(ind_dimqryやother_dimqryの数値インタフェースで表現できない)ため、ind_dimqryパラメータとother_dimqryパラメータのいずれの問合せ制約にも含まれません。

カスタムの次元はSDO_PC_PKG.CREATE_PCプロシージャでは作成できません。

このファンクションをSDO_PC_PKG.CLIP_PC_FLATと比較すると、このファンクションは、平面表に格納された点群データを入力として使用します(SDO_PCオブジェクトとは逆)。

点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。

例

次の例では、点群に対してクリップ操作を実行します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/PointCloud/examples/plsql/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;
/
. . .

27.2 SDO_PC_PKG.CLIP_PC_FLAT

書式

SDO_PC_PKG.CLIP_PC_FLAT(
geometry       IN SDO_GEOMETRY,
table_name     IN VARCHAR2,
tolerance      IN NUMBER,
other_dim_qry  IN SDO_MBR,
mask           IN VARCHAR2 DEFAULT NULL
) RETURN REF CURSOR;

説明

点群データが平面表に格納された、平面形式の点群でクリップ操作を実行します。

パラメータ

geometry

クリップ・ウィンドウとして使用する2次元ジオメトリです。次に例を示します。

geometry =>
SDO_GEOMETRY(
2003,
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1, 1003, 3),
SDO_ORDINATE_ARRAY(
0.75, 0.75,
1.25, 1.25))

table_name

点群データを含む表またはビューの名前を指定します。表またはビューの最初の2つの列は、XおよびYという名前で、Oracle NUMBER型にする必要があります。オプションで、XおよびYに続いて、表またはビューにはNUMBER型のZ列と、その他の非空間の点群属性を含めることができます。その他の非空間の点群属性は、任意のデータ型を持つことができますが、other_dim_qryパラメータの制約として指定する場合は、Oracle NUMBER型にする必要があります。

tolerance

点群のオブジェクトの許容差を指定します(空間許容差の詳細は、「許容差」を参照してください)。このパラメータがNULLの場合、デフォルト値は0.0000000000005です。

other_dim_qry

Oracle NUMBER型の任意の列(X列とY列を除く)に対する、ユーザー定義の問合せ範囲を提供する最小境界矩形(MBR)を指定します。

SDO_MBR型は(LOWER_LEFT SDO_VPOINT_TYPE, UPPER_RIGHT SDO_VPOINT_TYPE)として定義され、SDO_V_POINT_TYPEはVARRAY(64) OF NUMBERとして定義されます。

問合せ範囲で制約されない、Oracle NUMBER型の列に対しては、SDO_V_POINT_TYPE配列にNULLを指定します。

mask

ポリゴンと相互作用する点に適用可能な位相関係を指定します。有効な値は'mask=<value>'で、<value>はSDO_RELATE演算子に対して有効な1つ以上のマスク値(TOUCH、OVERLAPBDYDISJOINT、OVERLAPBDYINTERSECT、EQUAL、INSIDE、COVEREDBY、CONTAINS、COVERS、ANYINTERACT、ON)です。近似チェックを実行するFILTERも指定できます。FILTERは、ポリゴンと交差するすべての候補と、その他のいくつかのものを戻します。論理ブール演算子ORを使用して、'mask=inside+touch'のように複数のマスクを組み合せることができますが、FILTERは他のマスクと組み合せることはできません。

このパラメータがNULLであるか、または空の文字列を含む場合、mask=ANYINTERACTであるとみなされます。

使用上の注意

このファンクションは、SDO_PCオブジェクトに格納された入力点群データを使用するSDO_PC_PKG.CLIP_PCとは異なり、平面形式の点群を使用できます。SDO_PCの代替として、ハードウェア環境と使用方法に応じて、平面形式が点群サポートに追加されました。平面形式の利点の1つは、その動的な性質で、点データに対する更新であるため、再ブロック化を必要としません。

Exadata以外の環境では、X列とY列に対して複合Bツリー索引を作成することを強くお薦めします。複合Bツリー索引には、other_dim_qryパラメータに対して記述されているユーザー定義の問合せ範囲で制約される他のOracle NUMBER列も含めます。点群データの更新があると、自動的にBツリー索引が更新されます。

このファンクションをSDO_PC_PKG.CLIP_PCと比較すると、このファンクションは、SDO_PCオブジェクトに格納された点群データを入力として使用します。

点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。この項には、点群データを格納するためのSDO_PCと平面表のアプローチの説明があります。

例

次の例では、INPPTABという名前の表の最初の3つの列からINPTAB2という名前のビューを作成します。次に、点群データに対してクリップ操作を実行します。

CREATE VIEW inptab2 AS (select x x, y y, z z from inptab);

DECLARE
my_cursor sys_refcursor;
TYPE rec IS RECORD(x NUMBER, y NUMBER, z number);
TYPE lst IS TABLE OF rec;
result_list lst;
BEGIN
my_cursor :=
SDO_PC_PKG.CLIP_PC_FLAT(
geometry =>
MDSYS.SDO_GEOMETRY(
2003,
NULL,
NULL,
MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3),
MDSYS.SDO_ORDINATE_ARRAY(
0.75, 0.75,
1.25, 1.25)),
table_name    => 'INPTAB2',
tolerance     => 0.05,
other_dim_qry => null,
mask          => null);

FETCH my_cursor BULK COLLECT INTO result_list;
FOR I in 1 .. result_list.COUNT LOOP
dbms_output.put_line(
'(' || result_list(i).x || ', ' ||
result_list(i).y || ', ' ||
result_list(i).z || ')');
END LOOP;
CLOSE my_cursor;
END;
/

27.3 SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES

書式

SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES(
pc                  IN SDO_PC,
sampling_resolution IN NUMBER,
elevations          IN SDO_ORDINATE_ARRAY,
region              IN SDO_GEOMETRY
) RETURN SDO_GEOMETRY_ARRAY;

説明

点群の輪郭線を生成します。

パラメータ

pc

輪郭線を生成する点群を指定します。

sampling_resolution

点群の座標参照系内のグリッド・セルの高さおよび幅を決定する数値を指定します。輪郭生成のプロセスはグリッドベースです。グリッド・セル内の点は平均化されます。これは次のことを意味します。

- グリッド・セルが同じ平均となるかぎりは、少しだけ異なる2つの点群は同じ輪郭になる場合があります。

- 輪郭線の頂点の数と円滑さは解像度に直接作用します。

elevations

輪郭を生成する標高の配列を指定します。

region

輪郭を生成するリージョンを制限するウィンドウ(点群のエクステント内)を指定します。

使用上の注意

このファンクションは、SDO_GEOMETRY輪郭の配列を戻します。配列内の輪郭の順序は、elevations入力パラメータ内の順序と同じです。個々の輪郭は複数線ストリングです。

より高い標高を含む輪郭は(外部の輪と同じ)反時計回りです。より低い標高を含む輪郭は(内部の輪と同じ)時計回りです。

点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。

例

次の例では点群から輪郭線を作成します。

SELECT sdo_pc_pkg.create_contour_geometries(
(SELECT pc FROM pcs WHERE pc_id = 1),
sampling_resolution => 50,
elevations => sdo_ordinate_array(100, 101),
region => mdsys.sdo_geometry(2003, null, null, mdsys.sdo_elem_info_array(1, 1003, 3), mdsys.sdo_ordinate_array(-1000, 0, 999, 100)))
FROM DUAL;

SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES((SELECTPCFROMPCSWHEREPC_ID=1),SAMPLING_RESO
--------------------------------------------------------------------------------
SDO_GEOMETRY_ARRAY(SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 5
, 2, 1), SDO_ORDINATE_ARRAY(-75.5, 24.5, -25.5, 74.5, 25.5, 74.5, 74.5, 25.5, 75
.5, 24.5)), SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 7, 2, 1)
, SDO_ORDINATE_ARRAY(-76.5, 24.5, -75.5, 25.5, -26.5, 74.5, 26.5, 74.5, 74.5, 26
.5, 76.5, 24.5)))

1 row selected.

27.4 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データ型については、「点群に関連するオブジェクト型」を参照してください。

点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。

例

次の例では点群を作成します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/PointCloud/examples/plsql/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)
);
. . .

27.5 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;
/

27.6 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列に格納されます(「SDO_PCオブジェクト型」の表2-7を参照)。

pc_tot_dim

点群ブロック内の点の次元数を指定します。

blk_domain

(現在は使用されていません)

使用上の注意

このファンクションは、SDO_NUMBER_ARRAYオブジェクトを戻します。配列には数字の複数のペアが含まれ、各ペアは点のブロックIDと点IDを示します。このファンクションへの特定のコールについては、戻される配列内のすべての点に関連付けられているブロックID値が同じになります。SDO_NUMBER_ARRAY型は、VARRAY(1048576) OF NUMBERとして定義されます。

点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。

例

次の例では、点群ブロック内の点のブロックIDおよび点IDの値を戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/PointCloud/examples/plsql/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;

27.7 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データ型の詳細は、「TINに関連するオブジェクト型」を参照してください。

点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。

このファンクションを使用した後、blktable表は実表と同期された状態で維持されます。たとえば、実表から行を削除すると、その行の対応する点群オブジェクトのブロックもブロック表から削除され、実表が切り捨てられると、ブロック表も切り捨てられます。

ブロック表を削除できるのは、実表が削除された場合か、またはSDO_PC_PKG.DROP_DEPENDENCIESプロシージャが実行された場合のみです。

pc_other_attrsパラメータは、次の例のように点群のピラミッド化のメタデータを指定するために使用できます。

xmltype(
'<opc:sdoPcObjectMetadata
xmlns:opc="http://xmlns.oracle.com/spatial/vis3d/2011/sdovis3d.xsd"
xmlns:las="http://liblas.org/schemas/LAS/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<opc:sdoPcPyramid preserveLevel1="true"/>
</opc:sdoPcObjectMetadata>')

次の文を入力すると、pc_other_attrsパラメータのXMLスキーマ定義(XSD)が表示されます。

SET LONG 40000
SELECT xmlschema FROM sdo_xml_schemas WHERE description = 'EPSG  sdo3d.xsd';

点群のピラミッド化は、レベル1 (リーフ)からレベルn (ルート)までの複数のピラミッド・レベルを作成します。通常、レベルiに格納されている点は、より詳細なレベルのいずれでも繰り返されることはありません。すべての点は、正確に1回物理的に格納されます。リーフ・レベル1は、preserveLevel1="true"(前述の例を参照)を指定することで、このルールから除外できるので、ピラミッド化に準拠していないアプリケーションには適用する必要ありません。ただし、このpreserveLevel1="true"オプション(除外されるのでレベル1を維持)では、各点が2回格納(ルート・レベルで1回とピラミッドの残りで1回)されるので、2倍の領域が必要になります。

例

次の例では、SDO_PCオブジェクトを作成することによって点群を初期化し、オブジェクトのIDを表示します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/PointCloud/examples/plsql/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);
. . .

27.8 SDO_PC_PKG.TO_GEOMETRY

書式

SDO_PC_PKG.TO_GEOMETRY(
pts        IN BLOB,
num_pts    IN NUMBER,
pc_tot_dim IN NUMBER,
srid       IN NUMBER DEFAULT NULL,
blk_domain IN SDO_ORGSCL_TYPE DEFAULT NULL
) RETURN SDO_GEOMETRY;

説明

点群のすべてまたは一部を表すジオメトリ・オブジェクトを戻します。

パラメータ

pts

点を含むBLOBを指定します。

num_pts

結果として生成されるジオメトリに含まれる点の最大数を指定します。

pc_tot_dim

データに定義する空間次元数を指定します。

srid

データに関連付けられた空間参照(座標系)IDを指定します。このパラメータがNULLの場合、SRID値はデータに関連付けられません。

blk_domain

(現在は使用されていません)

使用上の注意

このファンクションは、ptsパラメータのすべての点ジオメトリを表す、単一の複数点のSDO_GEOMETRYオブジェクトを戻します。たとえば、点にクリップ操作の結果またはブロック全体の内容を反映することもできます。

点群を使用してソリッドをモデル化する方法は、「ソリッドのモデル化」を参照してください。

例

次の例では、点群を表す複数点の集合ジオメトリ・オブジェクトを戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/PointCloud/examples/plsql/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;
. . .

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

MDSYS.SDO_SAMパッケージには、空間分析およびデータ・マイニングのサブプログラムが含まれています。

この章で説明するサブプログラムを使用する場合は、空間分析およびデータ・マイニングの概念を理解しておく必要があります(「空間分析およびマイニング」を参照)。

注意:

SDO_SAMサブプログラムは2次元ジオメトリでのみサポートされています。これらは3次元ジオメトリではサポートされていません。

表28-1に、空間分析およびマイニングのサブプログラムを示します。

表28-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次元空間を四角形処理し、その四角形に対応するジオメトリを戻します。

この章では、空間分析およびマイニングのサブプログラムのリファレンス情報をアルファベット順に説明します。

28.1 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キーワードを指定しない場合、ジオメトリに関連付けられた測定単位が使用されます。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

- 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 ;

28.2 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;

28.3 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

許容差(「許容差」を参照)。

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.

28.4 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 and Graphによって内部コミット操作が実行される前に行うビン挿入操作の回数を指定します。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);

28.5 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 and Graphによって内部コミット操作が実行される前に行う内部結合操作の回数を指定します。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キーワードを指定しない場合、ジオメトリに関連付けられた測定単位が使用されます。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

例

次の例では、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);

28.6 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

許容差(「許容差」を参照)。

pct_area_change_limit

簡略化の反復ごとに変更される面積の割合を指定します(「使用上の注意」を参照)。

使用上の注意

このファンクションは、SDO_UTIL.SIMPLIFYファンクション(SDO_UTILパッケージ(ユーティリティ)を参照)を適切なしきい値で内部適用することによって、ジオメトリの頂点の数を削減します。

頂点の数を削減すると、ジオメトリの面積が変更される場合があります。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.

28.7 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 and Graphによって内部コミット操作が実行される前に簡略化するジオメトリの数を指定します。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.

28.8 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'));

28.9 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.

28.10 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.

29 SDO_TIN_PKGパッケージ(TIN)

この章では、表29-1に示すTriangulated Irregular Network(TIN)のサブプログラムについて説明します。

表29-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.PROJECT_ORDINATES_ONTO_TIN

TINに対して2次元の点を投影することにより、点の高さを判断します。

SDO_TIN_PKG.TO_DEM

TINからDEM (数値標高モデル) GeoRasterオブジェクトを作成します。

SDO_TIN_PKG.TO_GEOMETRY

TINのすべてまたは一部を表すジオメトリ・オブジェクトを戻します。

このパッケージのサブプログラムを使用するには、Triangulated Irregular Network(TIN)を使用した表面のモデル化を含む、3次元のジオメトリに関する主な概念を理解しておく必要があります。3次元ジオメトリのサポートについては「3次元の空間オブジェクト」、TINを使用した表面のモデル化については「表面のモデル化」、TINに関連するデータ型については「TINに関連するオブジェクト型」を参照してください。

29.1 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データ型については、「TINに関連するオブジェクト型」を参照してください。

TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。

例

次の例では、TINに対してクリップ操作を実行します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/TIN/examples/plsql/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;
. . .

29.2 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データ型の詳細は、「TINに関連するオブジェクト型」を参照してください。

TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。

例

次の例ではTINを作成します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/TIN/examples/plsql/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)
);
/
. . .

29.3 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;
/

29.4 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はその他の属性を持ちません。

このパラメータを使用すると、TINのピラミッド化にメタデータを含めることができます(「使用上の注意」を参照)。

使用上の注意

このファンクションを使用してSDO_TINオブジェクトを初期化した後は、このオブジェクトをSDO_TIN_PKG.CREATE_TINプロシージャへの入力として指定することでTINを作成できます。

SDO_TINデータ型の詳細は、「TINに関連するオブジェクト型」を参照してください。

TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。

tin_other_attrsパラメータは、次に示す例のように、TINのピラミッド化のメタデータを指定するために使用できます。

xmltype(
'<opc:sdoTinObjectMetadata
xmlns:opc="http://xmlns.oracle.com/spatial/vis3d/2011/sdovis3d.xsd"
xmlns:las="http://liblas.org/schemas/LAS/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<opc:sdoTinPyramid/>
</opc:sdoTinObjectMetadata>')

TINのピラミッド化では、レベル1 (詳細度が最も高い)からレベルn (詳細度が最も低い)までの複数のピラミッド・レベルを作成します。点群のピラミッド化(SDO_PC_PKG.INITの「使用上の注意」を参照)とは対照的に、TINのピラミッド化ではレベル1の保持に関するオプションがありません。レベル1は基本的にピラミッド化を伴わないTINと同じで、その他のすべてのレベルでは追加の領域が必要となるため、ピラミッド化を使用するTINでは、ピラミッド化を使用しないTINに比べて記憶域がより多く必要になります。

例

次の例では、SDO_TINオブジェクトの作成によりTINを初期化します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/TIN/examples/plsql/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);
. . .

29.5 SDO_TIN_PKG.PROJECT_ORDINATES_ONTO_TIN

書式

SDO_TIN_PKG.PROJECT_ORDINATES_ONTO_TIN(
ordinates2D SDO_ORDINATE_ARRAY,
tin         SDO_TIN
) RETURN SDO_ORDINATE_ARRAY;

説明

TINに対して2次元の点を投影することにより、点の高さを判断します。

パラメータ

ordinates2D

投影する2次元の点を含むSDO_ORDINATE_ARRAYオブジェクトを指定します。これらの点には、方向付きの点(「方向付きの点」を参照)は使用できません。

tin

点の投影先となるSDO_TINオブジェクトを指定します。

使用上の注意

このファンクションは、指定した2次元の入力点の高さの内挿を実行すると考えることができます。

SDO_TINデータ型の詳細は、「TINに関連するオブジェクト型」を参照してください。

TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。

例

次の例では、TINに対して2次元の点(2.3, 3.4)、(4.5, 5.6)、(6.7, 7.8)を投影し、3次元の点(2.3, 3.4, 5.7)、(4.5, 5.6, 10.1)、(6.7, 7.8, 14.5)を作成します。この例では、TINの形状は、zi=xi+yiで示される傾斜面です。

SELECT
sdo_tin_pkg.project_ordinates_onto_tin(
ordinates2d => sdo_ordinate_array(
2.3,  3.4,
4.5,  5.6,
6.7,  7.8),
tin => (select tin from tins where tin_id = 1))
FROM DUAL;

SDO_TIN_PKG.PROJECT_ORDINATES_ONTO_TIN(ORDINATES2D=>SDO_ORDINATE_ARRAY(2.3,3.4,4
--------------------------------------------------------------------------------
SDO_ORDINATE_ARRAY(2.3, 3.4, 5.7, 4.5, 5.6, 10.1, 6.7, 7.8, 14.5)

1 row selected.

29.6 SDO_TIN_PKG.TO_DEM

書式

SDO_TIN_PKG.TO_DEM(
tin                 IN SDO_TIN,
dem                 IN OUT SDO_GEORASTER,
blocksize           IN NUMBER,
crs_units_per_pixel IN NUMBER);

説明

TINからDEM (数値標高モデル) GeoRasterオブジェクトを作成します。

パラメータ

tin

TINオブジェクトを指定します。(SDO_TINデータ型の詳細は、「TINに関連するオブジェクト型」を参照してください。)

dem

DEM GeoRasterオブジェクトを指定します。(SDO_GEORASTERデータ型の詳細は、『Oracle Spatial and Graph GeoRaster開発者ガイド』を参照してください。)

blocksize

DEMのブロック・サイズをピクセル数で指定します。

crs_units_per_pixel

各ピクセルに対するTINおよびDEMの座標参照系(SRID)の単位を指定します。たとえば、メジャーのSRID単位が10進度で、各ピクセルが1度の1/100を表す場合、crs_units_per_pixel値は0.01になります。

使用上の注意

このプロシージャは、指定したGeoRasterオブジェクト(demパラメータ) を入力TINの情報に基づいて変更します。

TINとDEMは同じ座標参照系(SRID)を使用する必要があります。

次に例を示すように、demパラメータの場合、入力SDO_GEORASTERオブジェクトの取得は、GeoRasterオブジェクトを表に挿入し、そのGeoRasterオブジェクトを変数に戻すことによって行います。

INSERT INTO raster_table VALUES (1, sdo_geor.init('raster_data_table'))
RETURNING raster_image INTO geor;

DEMの水平エクステントをピクセル数で求めるには、SRID単位での水平エクステントをcrs_units_per_pixelパラメータ値で除算します。たとえば、次のような場合を考えてみます。

- TINとDEMのSRIDは4326です。

- SRIDの単位は10進度です。

- 入力TINの水平エクステントは、10進度で7です。

- crs_units_per_pixel値は0.01です。

この例では、DEMの水平エクステントは700ピクセル(7/.01 = 700)です。

SDO_TINデータ型の詳細は、「TINに関連するオブジェクト型」を参照してください。

TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。

例

次の例では、TINからDEMを作成します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/TIN/examples/plsql/tin.sqlから取得できます(『Oracle Database Examplesインストレーション・ガイド』を参照)。

create table raster_table (id number, raster_image sdo_georaster);

create table raster_data_table of sdo_raster
(primary key (rasterId, pyramidLevel, bandBlockNumber, rowBlockNumber, columnBlockNumber))
lob(rasterblock) store as (nocache nologging);

DECLARE
inp sdo_tin;
geor sdo_georaster;
BEGIN
select tin INTO inp from tins_hawaii_4326 where rownum=1;
insert into raster_table values (1, sdo_geor.init('raster_data_table')) returning raster_image into geor;
sdo_tin_pkg.to_dem(
tin                 => inp,
dem                 => geor,
blocksize           => 128,
crs_units_per_pixel => 0.01);
update raster_table set raster_image = geor where id = 1;
END;
/

29.7 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_ind_dim IN NUMBER,
tin_tot_dim IN NUMBER,
srid        IN NUMBER DEFAULT NULL,
blk_domain  IN SDO_ORGSCL_TYPE DEFAULT NULL,
get_ids     IN NUMBER DEFAULT NULL
) RETURN SDO_GEOMETRY;

説明

TINのすべてまたは一部を表すジオメトリ・オブジェクトを戻します。

パラメータ

pts

点を含むBLOBを指定します。

trs

三角形を含むBLOBを指定します。

num_pts

結果として生成されるジオメトリに含まれる点の最大数を指定します。

num_pts

結果として生成されるジオメトリに含まれる三角形の最大数を指定します。

tin_ind_dim

索引付けする空間次元数を指定します。

tin_tot_dim

データに定義する空間次元数を指定します。

srid

データに関連付けられた空間参照(座標系)IDを指定します。このパラメータがNULLの場合、SRID値はデータに関連付けられません。

blk_domain

(現在は使用されていません)

get_ids

NULLまたは0 (デフォルト)の場合は、戻されるジオメトリ内にある各点のブロックIDと点IDが含まれず、1の場合は、戻されるジオメトリ内にある各点のブロックIDと点IDが含まれます。get_idsが1の場合、戻されるジオメトリ内の各点に空間次元と2つの追加次元が含まれます。例としては、(x, y, z, blk_id, pt_id)のようになります。

使用上の注意

このファンクションは、ptsパラメータのすべての点ジオメトリおよびtrsパラメータのすべての三角形ジオメトリを表す、単一のSDO_GEOMETRY集合オブジェクトを戻します。たとえば、点および三角形にクリップ操作の結果またはブロック全体の内容を反映することもできます。

TINを使用して表面をモデル化する方法は、「表面のモデル化」を参照してください。

例

次の例では、TINを表す複数点の集合ジオメトリ・オブジェクトを戻します。これは、Oracle Database Examplesメディアからすでにファイルをインストールしている場合は、$ORACLE_HOME/md/demo/TIN/examples/plsql/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;
. . .

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

この章では、表30-1に示すチューニング・サブプログラムについて説明します。

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

サブプログラム

説明

SDO_TUNE.AVERAGE_MBR

レイヤー内のジオメトリに対する平均最小境界矩形を計算します。

SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE

Rツリー空間索引表に必要な最大サイズ(MB)を見積もります。

SDO_TUNE.EXTENT_OF

レイヤー内のデータの最小境界矩形を戻します。

SDO_TUNE.MIX_INFO

各ジオメトリ・タイプのパーセンテージなどのような、空間レイヤーに対するジオメトリ・タイプ情報を計算します。

30.1 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空間集計ファンクション(「空間集計ファンクション」)

30.2 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ツリー空間索引の空間索引表(「空間索引表の定義」を参照)に必要な最大サイズを見積もった値(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

30.3 SDO_TUNE.EXTENT_OF

書式

SDO_TUNE.EXTENT_OF(
table_name  IN VARCHAR2,
column_name IN VARCHAR2,
use_index   VARCHAR2 default 'TRUE'
) RETURN SDO_GEOMETRY;

説明

レイヤー内のすべてのジオメトリの最小境界矩形(MBR)を戻します。

パラメータ

table_name

空間ジオメトリ表または空間ジオメトリ表に基づくビューを指定します。

column_name

最小境界矩形を戻すジオメトリ列を指定します。

use_index

文字列TRUE (デフォルト)を指定すると、表の空間索引(存在する場合)が計算で使用されます。文字列FALSEを指定すると、すべての空間索引が無視されます。(このパラメータの詳細は、「使用上の注意」を参照。)

使用上の注意

SDO_AGGR_MBRファンクションも、ジオメトリのMBRを戻します(「空間集計ファンクション」を参照)。空間索引がジオメトリ列上に定義されている場合、SDO_TUNE.EXTENT_OFファンクションは、SDO_AGGR_MBRファンクションよりも高いパフォーマンスを示します。ただし、SDO_TUNE.EXTENT_OFは2次元ジオメトリに制限されるのに対し、SDO_AGGR_MBRファンクションにはその制限がありません。また、SDO_TUNE.EXTENT_OFファンクションは表内のすべてのジオメトリに対するエクステントを計算しますが、SDO_AGGR_MBRファンクションは、行のサブセット上での操作が可能です。

空間索引が使用されている場合、このファンクションは、索引内に保存されているデータの最大エクステントを囲むMBRの近似値を戻します(データがその後削除されていた場合も同様です)。

use_indexのデフォルトの値のTRUEはほとんどの場合で最適ですが、FALSEを指定することが必要な場合もあります。空間索引は実際のデータ・エクステントより大きいエクステントを持つことがあります。これは、DML操作により、エッジの周囲のデータが削除されると、結果として、実際のエクステントが小さくなりますが、そのような削除操作では索引エクステントは削減されないためです。このような場合に、実際のデータ・エクステントが必要であれば、use_index=>'FALSE'を指定します。ただし、FALSEを指定すると表全体のスキャンが必要になるので、ファンクションのパフォーマンスに重大な影響を及ぼす可能性があることに注意する必要があります。

例

次の例では、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集計ファンクション(「空間集計ファンクション」)

SDO_TUNE.AVERAGE_MBRプロシージャ

30.4 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%)

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

この章では、表31-1に示す空間ユーティリティ・サブプログラムについて説明します。

表31-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.CONVERT3007TO3008

複数面を持つ3次元の入力ジオメトリ(SDO_GTYPE 3007)を単純なソリッド・ジオメトリ(SDO_GTYPE 3008)に変換します。

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 and Graphジオメトリ・オブジェクトに変換します。

SDO_UTIL.FROM_GMLGEOMETRY

Geography Markup Language (GML 2.0)フラグメントをSpatial and Graphジオメトリ・オブジェクトに変換します。

SDO_UTIL.FROM_WKBGEOMETRY

well-knownバイナリ(WKB)形式のジオメトリをSpatial and Graphジオメトリ・オブジェクトに変換します。

SDO_UTIL.FROM_WKTGEOMETRY

well-knownテキスト(WKT)形式のジオメトリをSpatial and Graphジオメトリ・オブジェクトに変換します。

SDO_UTIL.GET_2D_FOOTPRINT

3次元の入力ジオメトリのフットプリントを反映した2次元のジオメトリを戻します。

SDO_UTIL.GETNUMELEM

入力ジオメトリの要素の数を戻します。

SDO_UTIL.GETNUMVERTICES

入力ジオメトリの頂点の数を戻します。

SDO_UTIL.GETNURBSAPPROX

入力NURBS曲線ジオメトリの近似処理である線ストリング・ジオメトリを戻します。

SDO_UTIL.GETVERTICES

入力ジオメトリの頂点の座標を戻します。

SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS

別のデータベースに転送された表領域内のすべての空間索引を初期化します。

SDO_UTIL.POINT_AT_BEARING

開始点を基準として指定された距離および方位に存在する点ジオメトリを戻します。

SDO_UTIL.POLYGONTOLINE

ジオメトリ内のすべてのポリゴンタイプ要素を線タイプ要素に変換し、それに応じてSDO_GTYPE値を設定します。

SDO_UTIL.RECTIFY_GEOMETRY

入力ジオメトリの特定の問題点を修正して、有効なジオメトリを戻します。

SDO_UTIL.REMOVE_DUPLICATE_VERTICES

重複する(冗長の)頂点をジオメトリから削除します。

SDO_UTIL.REVERSE_LINESTRING

線ストリング・ジオメトリを、その入力ジオメトリの頂点を逆順序にして戻します。

SDO_UTIL.SIMPLIFY

Douglas-Peuckerアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。

SDO_UTIL.SIMPLIFYVW

Visvalingham-Whyattアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。

SDO_UTIL.THEME3D_GET_BLOCK_TABLE

Visvalingham-Whyattアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。

SDO_UTIL.THEME3D_HAS_LOD

Visvalingham-Whyattアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。

SDO_UTIL.THEME3D_HAS_TEXTURE

Visvalingham-Whyattアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。

SDO_UTIL.TO_GML311GEOMETRY

Open GIS geometry.xsdスキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatial and Graphジオメトリ・オブジェクトをGeography Markup Language (GML 3.1.1)フラグメントに変換します。

SDO_UTIL.TO_GMLGEOMETRY

Open GIS geometry.xsdスキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatial and Graphジオメトリ・オブジェクトをGeography Markup Language (GML 2.0)フラグメントに変換します。

SDO_UTIL.TO_WKBGEOMETRY

Spatial and Graphジオメトリ・オブジェクトをwell-knownバイナリ(WKB)形式に変換します。

SDO_UTIL.TO_WKTGEOMETRY

Spatial and Graphジオメトリ・オブジェクトをwell-knownテキスト(WKT)形式に変換します。

SDO_UTIL.VALIDATE_3DTHEME

3Dテーマを検証します。

SDO_UTIL.VALIDATE_SCENE

3Dシーンを検証します。

SDO_UTIL.VALIDATE_VIEWFRAME

3Dビューフレームを検証します。

SDO_UTIL.VALIDATE_WKBGEOMETRY

標準well-knownバイナリ(WKB)形式の入力ジオメトリが有効かどうかを確認し、有効な場合は文字列TRUE、無効な場合は文字列FALSEを戻します。

SDO_UTIL.VALIDATE_WKTGEOMETRY

標準well-knownテキスト(WKT)形式のCLOB型またはVARCHAR2型の入力ジオメトリが有効かどうかを確認し、有効な場合は文字列TRUE、無効な場合は文字列FALSEを戻します。

31.1 SDO_UTIL.AFFINETRANSFORMS

書式

SDO_UTIL.AFFINETRANSFORMS(
geometry    IN SDO_GEOMETRY,
translation IN VARCHAR2 DEFAULT 'FALSE',
tx          IN NUMBER DEFAULT 0.0,
ty          IN NUMBER DEFAULT 0.0,
tz          IN NUMBER DEFAULT 0.0,
scaling     IN VARCHAR2 DEFAULT 'FALSE',
psc1        IN SDO_GEOMETRY DEFAULT NULL,
sx          IN NUMBER DEFAULT 0.0,
sy          IN NUMBER DEFAULT 0.0,
sz          IN NUMBER DEFAULT 0.0,
rotation    IN VARCHAR2 DEFAULT 'FALSE',
p1          IN SDO_GEOMETRY DEFAULT NULL,
line1       IN SDO_GEOMETRY DEFAULT NULL,
angle       IN NUMBER DEFAULT 0.0,
dir         IN NUMBER DEFAULT -1,
shearing    IN VARCHAR2 DEFAULT 'FALSE',
shxy        IN NUMBER DEFAULT 0.0,
shyx        IN NUMBER DEFAULT 0.0,
shxz        IN NUMBER DEFAULT 0.0,
shzx        IN NUMBER DEFAULT 0.0,
shyz        IN NUMBER DEFAULT 0.0,
shzy        IN NUMBER DEFAULT 0.0,
reflection  IN VARCHAR2 DEFAULT 'FALSE',
pref        IN SDO_GEOMETRY DEFAULT NULL,
lineR       IN SDO_GEOMETRY DEFAULT NULL,
dirR        IN NUMBER DEFAULT -1,
planeR      IN VARCHAR2 DEFAULT 'FALSE',
n           IN SDO_NUMBER_ARRAY DEFAULT NULL,
bigD        IN SDO_NUMBER_ARRAY DEFAULT NULL,
) RETURN SDO_GEOMETRY;

説明

入力ジオメトリのアフィン変換を反映したジオメトリを戻します。

パラメータ

geometry

アフィン変換を実行する入力ジオメトリを指定します。

translation

文字列値がTRUEである場合は移動が実行され、文字列値がFALSE (デフォルト)の場合は移動が実行されません。このパラメータがTRUEである場合、点について(tx,ty)または(tx,ty,tz)分の移動が実行されます。

tx

移動のためのX軸値を指定します。デフォルト値は0.0です。

ty

移動のためのY軸値を指定します。デフォルト値は0.0です。

tz

移動のためのZ軸値を指定します。デフォルト値は0.0です。

scaling

文字列値がTRUEである場合はスケール変更が実行され、文字列値がFALSE (デフォルト)の場合はスケール変更が実行されません。

psc1

スケール変更を実行する入力ジオメトリ上の点を指定します。scalingがTRUEである場合、このジオメトリは、ゼロ点(基点を基準にスケール変更するための0,0または0,0,0の縦座標を持つ点ジオメトリ)またはゼロ以外の位置(基点以外の点を基準にスケール変更するための縦座標を持つ点ジオメトリ)のいずれかである必要があります。scalingがFALSEである場合、psc1がNULL値になる場合があります。

sx

(psc1パラメータに指定した点か、基点を基準に)スケール変更するためのX軸値を指定します。デフォルト値は0.0です。

sy

(psc1パラメータに指定した点か、基点を基準に)スケール変更するためのY軸値を指定します。デフォルト値は0.0です。

sz

(psc1パラメータに指定した点か、基点を基準に)スケール変更するためのZ軸値を指定します。デフォルト値は0.0です。

rotation

文字列値がTRUEである場合は回転が実行され、文字列値がFALSE (デフォルト)の場合は回転が実行されません。

2次元ジオメトリの場合、回転にはp1およびangleの値が使用されます。3次元ジオメトリの場合、回転にはangleおよびdirの値か、またはline1およびangleの値が使用されます。

p1

指定した点を基準に2次元ジオメトリ回転を行うための点を指定します。

line1

指定した軸を基準に回転を行うための線を指定します。

angle

指定した軸またはX、Y、Z軸を基準に回転を行うための角度回転パラメータ(ラジアン)を指定します。デフォルト値は0.0です。

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座標値を基にせん断するための値を指定します。デフォルト値は0.0です。

shyx

X軸方向に沿ってY座標値を基にせん断するための値を指定します。デフォルト値は0.0です。

shxz

Z軸方向に沿ってX座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。デフォルト値は0.0です。

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 =>   sdo_geometry (2003,8307,null,sdo_elem_info_array (1,1003,1),
sdo_ordinate_array (0,2,2,0,5,3,3,5,0,2)),
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 => 'TRUE',
p1 => sdo_geometry (2001,8307,sdo_point_type(0,2,null),null,null),
line1 => NULL,
angle => -2.35253274913915,
dir => -1,
shearing => 'FALSE',
shxy => 0.0,
shyx => 0.0,
shxz => 0.0,
shzx => 0.0,
shyz => 0.0,
shzy => 0.0,
reflection => 'FALSE',
pref => NULL,
lineR => NULL,
dirR => 0,
planeR => 'FALSE',
n => NULL,
bigD => NULL
) FROM DUAL;

SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>SDO_GEOMETRY(2003,8307,NULL,SDO_ELEM_INFO_AR
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(0, 2, -2.8284082, 1.98964306, -2.8128727, -2.2529692, .015535417, -2.2426122,
0, 2))

ほとんどのパラメータにデフォルト値を使用している、前述の例の簡単なバージョンを次に示します。

-- Simpler form, using most default values
SELECT SDO_UTIL.AFFINETRANSFORMS(
geometry =>   sdo_geometry (2003,8307,null,sdo_elem_info_array (1,1003,1),
sdo_ordinate_array (0,2,2,0,5,3,3,5,0,2)),
rotation => 'TRUE',
p1 => sdo_geometry (2001,8307,sdo_point_type(0,2,null),null,null),
angle => -2.35253274913915
) FROM DUAL;

SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>SDO_GEOMETRY(2003,8307,NULL,SDO_ELEM_INFO_AR
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(0, 2, -2.8284082, 1.98964306, -2.8128727, -2.2529692, .015535417, -2.2426122,
0, 2))

次の例では、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

31.2 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ファンクションを使用します(「SDO_GEOMパッケージ(ジオメトリ)」を参照)。APPENDファンクションの方が、SDO_GEOM.SDO_UNIONファンクションよりも高速に実行されます。

結果のジオメトリのジオメトリ・タイプ(SDO_GTYPE値)には、入力ジオメトリおよび追加操作のタイプが反映されます。たとえば、入力ジオメトリが2次元ポリゴン(SDO_GTYPE = 2003)である場合、結果のジオメトリは2次元の複数ポリゴン(SDO_GTYPE = 2007)となります。

geometry1およびgeometry2が異なる座標系に基づく場合、例外が発生します。

例

次の例では、cola_aジオメトリおよびcola_cジオメトリを追加します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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 (「SDO_GEOMパッケージ(ジオメトリ)」内)

31.3 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

許容差(「許容差」を参照)。

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

31.4 SDO_UTIL.CIRCLE_POLYGON

書式

SDO_UTIL.CIRCLE_POLYGON(
point         IN SDO_GEOMETRY,
radius        IN NUMBER,
arc_tolerance IN NUMBER,
start_azimuth IN NUMBER DEFAULT NULL,
end_azimuth   IN NUMBER DEFAULT NULL,
orientation   IN NUMBER DEFAULT NULL,
arc           IN NUMBER DEFAULT NULL
) RETURN SDO_GEOMETRY;

または

SDO_UTIL.CIRCLE_POLYGON(
center_longitude IN NUMBER,
center_latitude  IN NUMBER,
radius           IN NUMBER,
arc_tolerance    IN NUMBER
) RETURN SDO_GEOMETRY;

または

SDO_UTIL.CIRCLE_POLYGON(
center_longitude IN NUMBER,
center_latitude  IN NUMBER,
radius           IN NUMBER,
start_azimuth    IN NUMBER,
end_azimuth      IN NUMBER,
arc_tolerance    IN NUMBER
) RETURN SDO_GEOMETRY;

説明

測地座標系内の円および円弧のポリゴンまたは折れ線近似処理を作成します。

- 最初の形式では、出力を完全に制御できます。

- 2番目の形式では、指定された円に近似するか、または覆われるポリゴン・ジオメトリを戻します。

- 3番目の形式では、開始方位から終了方位までの円の境界(円弧)を近似処理する線ジオメトリを戻します。

パラメータ

point

円の中心です。測地座標系の点ジオメトリである必要があります。戻されるジオメトリは同じ座標系にあります。

center_longitude

戻されるジオメトリの作成に使用する円の中心経度(度)を指定します。

center_latitude

戻されるジオメトリの作成に使用する円の中心緯度(度)を指定します。

radius

戻されるジオメトリの作成に使用する円の半径(m)を指定します。

arc_tolerance

ポリゴン・ジオメトリの作成に使用する数値を指定します。arc_toleranceパラメータ値の意味および使用上のガイドラインは、SDO_GEOM.SDO_ARC_DENSIFYファンクションのparamsパラメータ文字列のarc_toleranceキーワード値と同じです。ジオメトリに関連付けられた測定単位が、arc_toleranceパラメータ値に関連付けられます。(詳細は、「SDO_GEOMパッケージ(ジオメトリ)」のSDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上の注意」を参照してください。)

start_azimuth

円弧の開始角(単位: 度)。真南から反時計回りに測定した値です。

start_azimuthおよびend_azimuthがnullの場合の動作は、近似処理するポリゴン・ジオメトリを戻し、指定した円に覆われる2番目の形式と同等です。

end_azimuth

円弧の終了角(単位: 度)。真南から反時計回りに測定した値です。orientationが明示的に指定されていない場合、円弧は、end_azimuthがstart_azimuthより大きい場合は円のstart_azimuthからの反時計回りのセクションになり、end_azimuthがstart_azimuthより小さい場合は時計回りのセクションになります。

start_azimuthおよびend_azimuthがnullの場合の動作は、近似処理するポリゴン・ジオメトリを戻し、指定した円に覆われる2番目の形式と同等です。

orientation

start_azimuthからend_azimuthまでの円のどの部分が使用されるかを制御します。これは、出力の方向ではなく、戻される出力の形状を制御します。戻されるポリゴンは常に反時計回りの方向で、戻される円弧は常にstart_azimuthからend_azimuthまでです。次のいずれかの値を使用できます。

- 0またはnull (デフォルト): 自動(end_azimuthパラメータの説明を参照)。

- 1または+1: 円弧はstart_azimuthからend_azimuthまで反時計回りに描画されます。

- -1: 円弧はstart_azimuthからend_azimuthまで時計回りに描画されます。

arc

1に設定されている場合、結果は線になります。0またはnull (デフォルト)の場合、結果はポリゴンです。start_azimuthおよびend_azimuthでポリゴンの結果を持つ円のサブセットが指定された場合、戻されるポリゴンには円の中心が含まれます(つまり、扇形になります)。

使用上の注意

このファンクションの最初の形式を使用すると、真円が使用できない(Oracle Spatial and Graphの測地データで円が無効となる)場合に、指定された中心点の周囲に円状のポリゴンを作成できます。戻されるジオメトリのSDO_SRID値は8307となります(Longitude / Latitude (WGS 84))。

このファンクションの2番目と3番目の形式は、扇形を表す円弧またはポリゴンに対する折れ線近似値の作成に役立ちます。

開始と終了の方位値が指定された場合、これらは相互に等しくてはならず、360度以下の回転範囲にある必要があります。角度は-720から+720の範囲にある必要があります。

円は常に4つ以上の異なる頂点(正方形)で作成されます。

例

次の例では、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

31.5 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ファンクションを使用します(「SDO_LRSパッケージ(線形参照システム)」を参照)。

入力ジオメトリは、頂点が直線セグメントに連結している線ストリングである必要があります。円弧および複合線ストリングはサポートされていません。

入力ジオメトリが複数線ジオメトリの場合、ジオメトリの各要素は非接続であることが必要です。非接続でない場合、このファンクションは不適切な結果を戻すことがあります。

geometry1とgeometry2の位相関係は、DISJOINTまたはTOUCHである必要があり、位相関係がTOUCHの場合は、ジオメトリは2つの終了点でのみ交差する必要があります。

SDO_AGGR_CONCAT_LINES空間集計ファンクション(「空間集計ファンクション」を参照)を使用すると、単一線または複数線の複数の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 (「空間集計ファンクション」内)

- SDO_LRS.CONCATENATE_GEOM_SEGMENTS (「SDO_LRSパッケージ(線形参照システム)」内)

31.6 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表(「MDSYS.SDO_ANGLE_UNITSビュー」を参照)、MDSYS.SDO_AREA_UNITS表(「測定単位のサポート」参照)またはMDSYS.SDO_DIST_UNITS表(「測定単位のサポート」を参照)の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

関連項目

なし。

31.7 SDO_UTIL.CONVERT3007TO3008

書式

SDO_UTIL.CONVERT3007TO3008(
geometry  IN SDO_GEOMETRY
) RETURN SDO_GEOMETRY;

説明

複数面を持つ3次元の入力ジオメトリ(SDO_GTYPE 3007)を単純なソリッド・ジオメトリ(SDO_GTYPE 3008)に変換します。

パラメータ

geometry

SDO_GTYPE 3007 (複数面)のジオメトリ・オブジェクトを指定します。表面は単純なポリゴンで、内部はありません。

使用上の注意

3DジオメトリのSDO_GEOMETRY属性の詳細は、「3次元の空間オブジェクト」を参照してください。

このファンクションは、戻される単純なソリッド・ジオメトリの妥当性をチェックしません。ジオメトリ・オブジェクトの妥当性をチェックするには、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションを使用します。

例

次の例では、複数面を持つ3次元の入力ジオメトリ(SDO_GTYPE 3007)を単純なソリッド・ジオメトリ(SDO_GTYPE 3008)に変換します。GEOMS3Dという表が存在し、少なくとも数値ID列と、複数面を持つ3次元のジオメトリを格納するSDO_GEOMETRY型のGEOMという列が含まれていると想定します。

SELECT sdo_util.convert3007to3008(g.geom) FROM geoms3d g WHERE g.id=1;

31.8 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

31.9 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パラメータ値に関連付けられます。(詳細は、「SDO_GEOMパッケージ(ジオメトリ)」のSDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上の注意」を参照してください。)

使用上の注意

このファンクションを使用すると、楕円が使用できない(Oracle Spatial and Graphの測地データで楕円が無効となる)場合に、指定された中心点の周囲に楕円状のポリゴンを作成できます。戻されるジオメトリの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

31.10 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次元のジオメトリを指定する必要があります。

element

ジオメトリ内の要素の番号を指定します。1は1つ目の要素、2は2つ目の要素のようになります。1、2または3で終わるSDO_GTYPE値を持つジオメトリ(「SDO_GTYPE」を参照)は、1つの要素を持ちます。4、5、6または7で終わるSDO_GTYPE値を持つジオメトリは、複数の要素を持つ可能性があります。たとえば、SDO_GTYPEが2007の複数ポリゴンには、3つの要素(ポリゴン)が含まれる場合があります。

ring

要素内のサブ要素(輪)の番号を指定します。1は1つ目のサブ要素、2は2つ目のサブ要素のようになります。このパラメータは、1つ以上の穴があるポリゴンのサブ要素または点クラスタのサブ要素を指定する場合にのみ有効です。

- 穴があるポリゴンの場合、1つ目のサブ要素は外部の輪、2つ目のサブ要素は1つ目の内部の輪、3つ目のサブ要素は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プロシージャ(いずれについても「SDO_GEOMパッケージ(ジオメトリ)を参照)を使用してジオメトリが無効であると特定した場合は、EXTRACTファンクションを使用して無効なジオメトリを抽出し、調べることができます。

1つ以上の穴のあるポリゴンの場合、抽出された内部の輪を表現するジオメトリは、戻されると方向が変更され、頂点が(内部の輪内では時計回りであったのに対して)反時計回りで表現されます。

geometryがNULLの場合、または0(ゼロ)で終わるSDO_GTYPE値を持つ場合、このファンクションはNULLのジオメトリを戻します。

geometryには、タイプが0(ゼロ)の要素を含めることはできません。タイプが0 (ゼロ)の要素については、「タイプ0 (ゼロ)要素」を参照してください。

このファンクションは、縦座標がNULL値のジオメトリでの使用は想定されていません。戻されるジオメトリでは、縦座標のNULL値は0(ゼロ)で置き換えられます。

elementまたはringがgeometryに対して無効な数である場合は、例外が発生します。

例

次の例では、cola_cジオメトリの1つ目(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に示す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

31.11 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値を持つジオメトリ(「SDO_GTYPE」を参照)は、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 (ゼロ)の要素については、「タイプ0 (ゼロ)要素」を参照してください。

このファンクションは、縦座標がNULL値のジオメトリでの使用は想定されていません。戻されるジオメトリでは、縦座標のNULL値は0(ゼロ)で置き換えられます。

例

次の例では、cola_bジオメトリからすべての要素を抽出します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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に示す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

31.12 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 and GraphのJava APIリファレンスを参照)を使用します。

例

次の例では、指定した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

31.13 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

許容差(「許容差」を参照)。

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

関連項目

なし。

31.14 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 CLOB,
srsNamespace IN VARCHAR2,
coordOrder   IN NUMBER
) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_GML311GEOMETRY(
geometry  IN VARCHAR2,
srsNamespace  IN VARCHAR2 DEFAULT NULL
) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_GML311GEOMETRY(
geometry  IN VARCHAR2,
coordOrder  IN NUMBER DEFAULT NULL
) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_GML311GEOMETRY(
geometry  IN VARCHAR2,
srsNamespace  IN VARCHAR2,
coordOrder  IN NUMBER
) RETURN SDO_GEOMETRY;

説明

Geography Markup Language (GML 3.1.1)フラグメントをSpatial and Graphジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、GMLバージョン3.1.1形式のジオメトリを指定します。

srsNamespace

(Oracleで使用するために予約されています。)

coordOrder

GML形式のデータが、Oracle Spatialで使用される経度/緯度形式ではなく緯度/経度形式の場合、このパラメータには1を指定します。そうでない場合は、このパラメータを指定しないでください。(詳細は、「使用上の注意」を参照してください。)

使用上の注意

入力ジオメトリは、Open GIS実装仕様に定義されたGMLバージョン3.1.1のジオメトリ・タイプを示す有効なGMLフラグメントである必要があります。

一部のEPSG測地座標系の定義では、軸順序が逆です。このようなSRIDでは、GML形式のデータは経度/緯度ではなく緯度/経度になる場合があります。このようなGMLをSDO_GEOMETRYタイプに変換する場合、SDO_GEOMETRYタイプで使用される順序は経度/緯度であるため、coordOrderパラメータに1を指定して、緯度/経度値が経度/緯度に変換されるようにする必要があります。

例

次の例では、GMLバージョン3.1.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

31.15 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 and Graphジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、GMLバージョン2.0形式のジオメトリを指定します。

srsNamespace

(Oracleで使用するために予約されています。)

使用上の注意

入力ジオメトリは、Open GIS実装仕様に定義されたGMLバージョン2.0のジオメトリ・タイプを示す有効なGMLフラグメントである必要があります。

例

次の例では、GMLバージョン2.0形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特に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

31.16 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 and Graphジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、KML形式のCLOB型またはVARCHAR2型のジオメトリを指定します。

使用上の注意

入力ジオメトリは、KML 2.1仕様に準拠した有効なドキュメントである必要があります。

このファンクションは、KMLドキュメント全体ではなく、KMLジオメトリ・タグのみを処理します。

例

次の例では、KML形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特に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

31.17 SDO_UTIL.FROM_WKBGEOMETRY

書式

SDO_UTIL.FROM_WKBGEOMETRY(
geometry  IN BLOB
) RETURN SDO_GEOMETRY;

説明

well-knownバイナリ(WKB)形式のジオメトリをSpatial and Graphジオメトリ・オブジェクトに変換します。

パラメータ

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ジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特に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

31.18 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 and Graphジオメトリ・オブジェクトに変換します。

パラメータ

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ジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特に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

31.19 SDO_UTIL.GET_2D_FOOTPRINT

書式

SDO_UTIL.GET_2D_FOOTPRINT(
geometry  IN SDO_GEOMETRY,
tolerance IN NUMBER  DEFAULT 0.0000005
) RETURN SDO_GEOMETRY;

説明

3次元の入力ジオメトリのフットプリントを反映した2次元のジオメトリを戻します。

パラメータ

geometry

3次元のジオメトリ・オブジェクトを指定します。

tolerance

許容差(「許容差」を参照)。

使用上の注意

このファンクションを使用して、ビルなどの3Dジオメトリの(x-y面上の)2Dフットプリントを戻すことができます。

例

次の例では、3Dジオメトリの2Dフットプリントを戻します。FTPTSという表が存在し、少なくとも数値ID列と、複数面を持つ3次元のジオメトリを格納するSDO_GEOMETRY型のGEOMETRYという列が含まれていると想定します。

SELECT sdo_util.get_2d_footprint(geometry, 0.05) FROM ftpts WHERE id =1;

31.20 SDO_UTIL.GETNUMELEM

書式

SDO_UTIL.GETNUMELEM(
geometry  IN SDO_GEOMETRY
) RETURN NUMBER;

説明

入力ジオメトリの要素の数を戻します。

パラメータ

geometry

要素の数を戻すジオメトリを指定します。

使用上の注意

なし。

例

次の例では、COLA_MARKETS表のSHAPE列にある各ジオメトリの要素の数を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

31.21 SDO_UTIL.GETNUMVERTICES

書式

SDO_UTIL.GETNUMVERTICES(
geometry  IN SDO_GEOMETRY
) RETURN NUMBER;

説明

入力ジオメトリの頂点の数を戻します。

パラメータ

geometry

頂点の数を戻すジオメトリを指定します。

使用上の注意

なし。

例

次の例では、COLA_MARKETS表のSHAPE列にある各ジオメトリの頂点の数を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

31.22 SDO_UTIL.GETNURBSAPPROX

書式

SDO_UTIL.GETNURBSAPPROX(
geometry  IN SDO_GEOMETRY,
tolerance IN NUMBER
) RETURN SDO_GEOMETRY;

説明

入力NURBS曲線ジオメトリの近似処理である線ストリング・ジオメトリを戻します。

パラメータ

geometry

NURBS曲線ジオメトリ・オブジェクト

tolerance

許容差(「許容差」を参照)。許容範囲値が妥当であるかぎり、このファンクションの操作および出力には影響しません(「使用上の注意」を参照)。

使用上の注意

このファンクションは、NURBS曲線ジオメトリを直接処理できないサブプログラムで詳細な処理を行う目的で、入力ジオメトリの折れ線近似処理を戻すのに有用です。このファンクションは、いくつかのOracle Spatial and Graphファンクションの内部で呼び出されますが、ユーザーが直接呼び出すことも可能です。

入力ジオメトリは、(測地座標系でなく)投影座標系のNURBS曲線である必要があります。

入力ジオメトリが、1つ以上のNURBS曲線要素を含んでない場合は、入力ジオメトリを戻します。

Oracle Spatial and Graphによって内部使用されるため、入力には許容範囲値が必要です。ただし、ユーザーが直接呼び出す場合は、戻される折れ線は最大約200点まで含むことができるため、許容範囲値の影響を受けません。

NURBS曲線は終点で固定されるため、戻される線ストリング・ジオメトリの終点は、最初および最終の制御点になります。

NURBS (non-uniform rational B-spline)ジオメトリのサポートの詳細は、「Oracle Spatial and GraphにおけるNURBS曲線のサポート」を参照してください。

例

次の例では、空間表を作成してNURBS曲線を挿入した後、SDO_UTIL.GETNURBSAPPROXファンクションを(許容範囲値0.05で)使用して、NURBS曲線ジオメトリの近似処理である線ストリング・ジオメトリを戻します。

-- Create Table
create table test (gid  INTEGER,
geom mdsys.sdo_geometry);

-- Insert metadata
Insert into user_sdo_geom_metadata VALUES('TEST', 'GEOM',
sdo_dim_array( sdo_dim_element('X', -10, 10, 0.05),
sdo_dim_element('Y', -10, 10, 0.05)),
NULL);

-- Two-dimensional NURBS curve with degree 3, 7 control points, and 11 knots
insert into test values(1, SDO_GEOMETRY(2002, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1, 2, 3),
SDO_ORDINATE_ARRAY(3, 7, 0, 0, 1, -0.5, 1, 1, 0.2, 2,
1, 0.5, 3.5, 1, 0.8, 2, 1, 0.9, 1,
1, 0.3, 0, 1, 11, 0, 0, 0, 0, 0.25,
0.5, 0.75, 1.0, 1.0, 1.0, 1.0)));

-- sdo_util.getNurbsApprox gives an approximate polyline for the NURBS curve.
Select gid, sdo_util.getNurbsApprox(a.geom, 0.05) from test a where gid = 1;

GID
----------
SDO_UTIL.GETNURBSAPPROX(A.GEOM,0.05)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SD
--------------------------------------------------------------------------------
1
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
0, 0, -.02912839, .059699523, -.05624374, .118211319, -.08139356, .175559751, -.
10462535, .231769184, -.12598662, .286863981, -.14552488, .340868505, -.16328764
, .39380712, -.17932241, .445704191, -.1936767, .496584079, -.20639802, .5464711
5, -.21753387, .595389767, -.22713177, .643364292, -.23523922, .690419091, -.241
90374, .736578527, -.24717284, .781866962, -.25109401, .826308762, -.25371477, .
869928288, -.25508264, .912749906, -.25524512, .954797979, -.25424971, .99609687
, -.25214393, 1.03667094, -.24897529, 1.07654456, -.24479129, 1.11574209, -.2396
3945, 1.15428789, -.23356727, 1.19220633, -.22662227, 1.22952177, -.21885194, 1.
26625857, -.21030381, 1.3024411, -.20102538, 1.33809372, -.19106416, 1.37324079,
-.18046765, 1.40790668, -.16928338, 1.44211576, -.15755884, 1.47589238, -.14534
154, 1.50926091, -.132679, 1.54224571, -.11961872, 1.57487115, -.10620822, 1.607
16159, -.092495, 1.63914139, -.07852657, 1.67083492, -.06435044, 1.70226654, -.0
5001412, 1.73346062, -.03556511, 1.76444151, -.02105094, 1.79523359, -.0065191,
1.82586121, .007982896, 1.85634874, .022407535, 1.88672054, .036707311, 1.917000
98, .050834714, 1.94721442, .064742236, 1.97738522, .078382506, 2.00753762, .091
725045, 2.03768051, .104772175, 2.06779294, .117529987, 2.09785056, .130004572,
2.12782899, .14220202, 2.15770388, .154128423, 2.18745085, .165789872, 2.2170455
6, .177192457, 2.24646363, .188342269, 2.27568069, .1992454, 2.3046724, .2099079
4, 2.33341438, .22033598, 2.36188226, .23053561, 2.3900517, .240512923, 2.417898
31, .250274008, 2.44539774, .259824957, 2.47252563, .269171861, 2.49925761, .278
32081, 2.52556931, .287277896, 2.55143638, .296049209, 2.57683445, .30464084, 2.
60173916, .31305888, 2.62612614, .321309421, 2.64997102, .329398552, 2.67324946,
.337332365, 2.69593707, .345116951, 2.71800951, .352758401, 2.7394424, .3602628
05, 2.76021137, .367636255, 2.78029208, .374884841, 2.79966015, .382014654, 2.81
829122, .389031786, 2.83616093, .395942326, 2.85324491, .402752367, 2.8695188, .
409467999, 2.88495824, .416095312, 2.89953885, .422640398, 2.91323629, .42910934
8, 2.92602618, .435508253, 2.93788416, .441843203, 2.94878587, .448120289, 2.958
70695, .454345602, 2.96762302, .460525234, 2.97550973, .466665275, 2.98234271, .
472771816, 2.98809761, .478850948, 2.99275004, .484908761, 2.99627566, .49095134
8, 2.9986501, .496984798, 2.999849, .50301505, 2.999849, .509044541, 2.9986501,
.515072205, 2.99627566, .521096823, 2.99275004, .527117177, 2.98809761, .5331320
5, 2.98234271, .539140223, 2.97550973, .545140477, 2.96762302, .551131595, 2.958
70695, .557112359, 2.94878587, .56308155, 2.93788416, .56903795, 2.92602618, .57
4980341, 2.91323629, .580907505, 2.89953885, .586818223, 2.88495824, .592711277,
2.8695188, .59858545, 2.85324491, .604439523, 2.83616093, .610272278, 2.8182912
2, .616082496, 2.79966015, .621868959, 2.78029208, .62763045, 2.76021137, .63336
575, 2.7394424, .639073641, 2.71800951, .644752905, 2.69593707, .650402323, 2.67
324946, .656020678, 2.64997102, .661606751, 2.62612614, .667159324, 2.60173916,
.672677178, 2.57683445, .678159097, 2.55143638, .683603861, 2.52556931, .6890102
52, 2.49925761, .694377052, 2.47252563, .699703043, 2.44539774, .704987007, 2.41
789831, .710227725, 2.3900517, .71542398, 2.36188226, .720574553, 2.33341438, .7
25678226, 2.3046724, .730733781, 2.27568069, .735739999, 2.24646363, .740695663,
2.21704556, .745599554, 2.18745085, .750450454, 2.15770388, .755247146, 2.12782
899, .75998841, 2.09785056, .764673028, 2.06779294, .769299783, 2.03768051, .773
867456, 2.00753762, .778372773, 1.97738522, .782794569, 1.94721442, .787102465,
1.91700098, .791266007, 1.88672054, .795254739, 1.85634874, .799038208, 1.825861
21, .802585958, 1.79523359, .805867536, 1.76444151, .808852487, 1.73346062, .811
510356, 1.70226654, .813810689, 1.67083492, .815723031, 1.63914139, .817216927,
1.60716159, .818261924, 1.57487115, .818827566, 1.54224571, .8188834, 1.50926091
, .818398969, 1.47589238, .817343821, 1.44211576, .8156875, 1.40790668, .8133995
52, 1.37324079, .810449523, 1.33809372, .806806957, 1.3024411, .802441401, 1.266
25857, .797322399, 1.22952177, .791419497, 1.19220633, .784702242, 1.15428789, .
777140177, 1.11574209, .768702849, 1.07654456, .759359802, 1.03667094, .74908058
4, .99609687, .737834738, .954797979, .725591811, .912749906, .712321348, .86992
8288, .697992894, .826308762, .682575995, .781866962, .666040196, .736578527, .6
48355043, .690419091, .629490081, .643364292, .609414855, .595389767, .588098912
, .54647115, .565511797, .496584079, .541623054, .445704191, .51640223, .3938071
2, .48981887, .340868505, .46184252, .286863981, .432442724, .231769184, .401589
029, .175559751, .36925098, .118211319, .335398121, .059699523, .3, 0))

1 row selected.

31.23 SDO_UTIL.GETVERTICES

書式

SDO_UTIL.GETVERTICES(
geometry  IN SDO_GEOMETRY
) RETURN VERTEX_SET_TYPE;

説明

入力ジオメトリの頂点の座標を戻します。

パラメータ

geometry

頂点の座標を戻すジオメトリを指定します。

使用上の注意

このファンクションは、MDSYS.VERTEX_SET_TYPEのオブジェクトを戻します(このオブジェクトは、MDSYS.VERTEX_TYPEのオブジェクトの表で構成されます)。Oracle Spatial and Graphでは、VERTEX_SET_TYPE型を次のように定義します。

CREATE TYPE vertex_set_type as TABLE OF vertex_type;

Oracle Spatial and Graphは、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プロシージャ(いずれについても「SDO_GEOMパッケージ(ジオメトリ)を参照)を使用してジオメトリが無効であると特定した場合は、GETVERTICESファンクションを使用して頂点を表形式で表示できます。

例

次の例では、COLA_MARKETS表のSHAPE列にあるジオメトリの頂点のX座標、Y座標およびID値を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

31.24 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プロシージャをコールした場合、エンディアンの変換を実行する必要がないため、このプロシージャは何も実行しません。

関連項目

なし。

31.25 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値の詳細は、「SDO_GTYPE」を参照。)

tol

許容差(「許容差」を参照)。

使用上の注意

このファンクションは、geom上の境界またはエッジ上ではなく内部の点を表現する、点のジオメトリ・オブジェクトを戻します。ジオメトリ・オブジェクト上のどの内部の点でも戻り値になる可能性がありますが、同じ geomおよびtolのパラメータ値を指定してこのファンクションを複数回コールしても同じ点が戻されます。

戻される点と元のジオメトリの関係はINSIDEです。これは、'mask=inside'を含めてSDO_RELATE演算子を使用することで確認できます。

ほとんどの場合、このファンクションは内部の点を戻す保証のないSDO_GEOM.SDO_POINTONSURFACEファンクションと比較して有用性が高くなります。

例

次の例では、cola_a上の内部の点であるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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

関連項目

なし。

31.26 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

31.27 SDO_UTIL.POLYGONTOLINE

書式

SDO_UTIL.POLYGONTOLINE(
geometry  IN SDO_GEOMETRY
) RETURN SDO_GEOMETRY;

説明

ジオメトリ内のすべてのポリゴンタイプ要素を線タイプ要素に変換し、それに応じてSDO_GTYPE値を設定します。

パラメータ

geometry

変換するジオメトリを指定します。

使用上の注意

戻される各線タイプ要素の頂点の順序は、関連付けられたポリゴンタイプ要素の頂点の順序と同じです。また、各線タイプ・セグメントの開始点および終了点は同じ点になります。

入力ジオメトリが線の場合、入力ジオメトリが戻されます。

例

次の例では、cola_b (「空間データの挿入、索引付けおよび問合せの例」を参照)と同じジオメトリである入力ポリゴン・ジオメトリを、線ストリング・ジオメトリに変換します。戻されるジオメトリでは、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))

関連項目

なし。

31.28 SDO_UTIL.RECTIFY_GEOMETRY

書式

SDO_UTIL.RECTIFY_GEOMETRY(
geometry  IN SDO_GEOMETRY,
tolerance IN NUMBER
) RETURN SDO_GEOMETRY;

説明

入力ジオメトリの特定の問題点を修正して、有効なジオメトリを戻します。

パラメータ

geometry

修正可能な問題を確認するジオメトリを指定します。

tolerance

許容差(「許容差」を参照)。

使用上の注意

このファンクションは、ジオメトリを無効とする次の問題点があるかどうかを確認し、問題点を修正したジオメトリを戻します。

- 重複する頂点

- 自分自身と交わるポリゴン境界

- 方向が無効な、ポリゴンの外部または内部の輪(両方の輪の向きが無効な場合も含む)

入力ジオメトリが無効となる理由が他にある場合、このファンクションは例外を発生します。

入力ジオメトリが有効な場合、このファンクションは、入力ジオメトリと同じジオメトリを戻します。

空間データをロードおよび検証する際の推奨手順の一部としてこのファンクションを使用する方法については、「空間データのロードおよび検査の推奨手順」を参照してください。

このファンクションは、ジオメトリの簡略化プロセスの一部として、SDO_UTIL.SIMPLIFYファンクションによって内部的に使用されます。

必要な場合は、SDO_GEOM.SDO_SELF_UNIONファンクションが内部的にコールされます。

例

次の例では、cola_bジオメトリをチェックして、修正可能な問題点があるかどうかを確認します。(ここでは、ジオメトリが有効なため、入力ジオメトリが戻ります。例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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_GEOM.SDO_SELF_UNION

31.29 SDO_UTIL.REMOVE_DUPLICATE_VERTICES

書式

SDO_UTIL.REMOVE_DUPLICATE_VERTICES(
geometry  IN SDO_GEOMETRY,
tolerance IN NUMBER
) RETURN SDO_GEOMETRY;

説明

重複する(冗長の)頂点をジオメトリから削除します。

パラメータ

geometry

重複する頂点を削除するジオメトリを指定します。

tolerance

許容差(「許容差」を参照)。

使用上の注意

ジオメトリの2つの連続する頂点が、ジオメトリに関連付けられた許容差以内である場合、そのジオメトリは無効とみなされます。この場合、Spatial and Graphのジオメトリ検証ファンクションが、エラーORA-13356を戻します。REMOVE_DUPLICATE_VERTICESファンクションを使用すると、このような無効なジオメトリを有効なジオメトリに変更できます。

また、このファンクションによってポリゴンが閉じられ、輪の最初の頂点が最後の頂点と等しくなります。

このファンクションは、点ジオメトリ(方向付きの点を含む)ではサポートされません。

入力ジオメトリに重複する頂点が存在しない場合、入力ジオメトリが戻されます。

例

次の例では、cola_b (「空間データの挿入、索引付けおよび問合せの例」の図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))

関連項目

なし。

31.30 SDO_UTIL.REVERSE_LINESTRING

書式

SDO_UTIL.REVERSE_LINESTRING(
geometry  IN SDO_GEOMETRY
) RETURN SDO_GEOMETRY;

説明

線ストリング・ジオメトリを、その入力ジオメトリの頂点を逆順序にして戻します。

パラメータ

geometry

出力ジオメトリで頂点を反転させる線ストリング・ジオメトリを指定します。入力ジオメトリのSDO_GTYPE値は2002である必要があります。(SDO_GTYPE値の詳細は、「SDO_GTYPE」を参照。)

使用上の注意

入力ジオメトリのSDO_GTYPE値は2002である必要があるため、このファンクションを使用してLRSジオメトリを反転することはできません。LRSジオメトリを反転するには、SDO_LRS.REVERSE_GEOMETRYファンクションを使用します(「SDO_LRSパッケージ(線形参照システム)」を参照)。

例

次の例では、入力ジオメトリの頂点を反転させた線ストリング・ジオメトリを戻します。

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 (「SDO_LRSパッケージ(線形参照システム)」内)

31.31 SDO_UTIL.SIMPLIFY

書式

SDO_UTIL.SIMPLIFY(
geometry     IN SDO_GEOMETRY,
threshold    IN NUMBER
tolerance    IN NUMBER DEFAULT 0.0000005,
remove_loops IN NUMBER DEFAULT 0
) RETURN SDO_GEOMETRY;

説明

Douglas-Peuckerアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。

パラメータ

geometry

簡略化するジオメトリを指定します。

threshold

ジオメトリの簡略化に使用するしきい値を指定します。正の数字を指定する必要があります。(0 (ゼロ)を指定した場合、入力ジオメトリが戻されます。)入力ジオメトリが測地ジオメトリである場合、値はm単位になります。非測地ジオメトリである場合、値はデータに関連付けられた単位の数値になります。

しきい値が小さくなると、戻されるジオメトリは入力ジオメトリにより近くなり、しきい値が大きくなると、戻されるジオメトリの点は少なくなります。詳細は、「使用上の注意」を参照してください。

tolerance

許容差(「許容差」を参照)。この値は、threshold以下にする必要があります。パフォーマンスを向上させるには、thresholdと同じ値を指定しないでください。値を指定しない場合のデフォルト値は、0.0000005です。

remove_loops

一部の線ジオメトリでは、線を簡略化すると、途中で自己交差するループとなることがあります。これは(線としては)有効なジオメトリですが、場合によっては、簡略化操作の結果にこれらのループが存在することは望ましくないことがあります。0の値(デフォルト)を指定すると、このようなループは除去されません。1の値(または、他の任意の正の数)を指定すると、このようなループはすべて除去され、単純な線セグメントが常に戻されます。

使用上の注意

このファンクションでは他に、円弧から線ストリングへの変換、重複している頂点の削除、およびポリゴンのエッジの重複の修正も行われます。このファンクションで問題が修正させるのは、有効なジオメトリが確実に戻されるように、簡略化プロセスの最後でSDO_UTIL.RECTIFY_GEOMETRYファンクションを内部的にコールする場合があるためです。

このファンクションは、元のジオメトリよりも解像度の低いジオメトリが必要な場合に有効です。たとえば、川筋または行政的境界の多数のカーブをディスプレイの解像度で表示できない場合、ジオメトリを簡略化して主なカーブのみを表示させると、パフォーマンスが向上する場合があります。

3次元以上のジオメトリにこのファンクションを使用する場合、最初の2次元のみが問合せ処理で使用され、戻されるジオメトリの最初の2次元のみが有効とみなされます。

このファンクションで使用されるDouglas-Peuckerアルゴリズムの詳細は、地図作成法に関する書籍および参考資料を参照してください。(これらのドキュメントでは、しきい値のかわりに許容差という用語が使用される場合もありますが、Oracle Spatial and Graphの許容差とは意味が異なります。)

このファンクションを、Visvalingham-Whyattアルゴリズムを使用するSDO_UTIL.SIMPLIFYVWと比較してください。

戻されるジオメトリは、ジオメトリの定義およびしきい値に応じてポリゴン、線または点となります。適用される考慮点は次のとおりです。

- •ジオメトリに関連付けられたしきい値が十分に大きい場合、ポリゴンを線または点に、線を点に簡略化できます。たとえば、細長い矩形の平行な2長辺間の距離がしきい値よりも小さい場合、その矩形は線に簡略化されます。線の開始点と終了点の間の距離がしきい値よりも小さい場合、その線は点に簡略化されます。

- 穴のあるポリゴンで、外部の輪または内部の輪(穴)が線または点に簡略化される場合、内部の輪は結果のジオメトリには存在しなくなります(結果のジオメトリには含まれません)。

- 入力ジオメトリの位相特性は、簡略化後には保持されない場合があります。集合ジオメトリの場合は、個々の要素が重ならないようにするため、要素の数が増えることがあります。どのような場合でも、このファンクションが無効なジオメトリを戻すことはありません。

このファンクションは、線形参照システム(LRS)ジオメトリ(「線形参照システム」を参照)ではサポートされません。

例

次の例では、「LRSファンクションの例」の図7-20に示す道路の頂点を反映した線ストリング・ジオメトリを簡略化します(ただし、この例のジオメトリはLRSジオメトリではありません)。しきい値は6であるため、結果の線ストリングには、開始点、終了点および(12, 4,12)の3つの点のみが含まれます。

SELECT SDO_UTIL.SIMPLIFY(
SDO_GEOMETRY(
2002,  -- line string, 2 dimensions (X,Y)
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
SDO_ORDINATE_ARRAY(
2,2,   -- Starting point
2,4,
8,4,
12,4,
12,10,
8,10,
5,14)  -- Ending point
),
6, -- threshold value for geometry simplification
0.5  -- tolerance
) FROM DUAL;

SDO_UTIL.SIMPLIFY(SDO_GEOMETRY(2002,--LINESTRING,2DIMENSIONS(X,Y)NULL,NULL,SDO_E
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 12, 4, 5, 14))

図31-1に、この例の結果を示します。図31-1では、黒い太実線が結果のジオメトリを示し、開始点と終了点の間の薄い色の細実線が入力ジオメトリを示しています。

図31-1 ジオメトリの簡略化

関連項目

SDO_UTIL.SIMPLIFYVW

SDO_UTIL.RECTIFY_GEOMETRY

31.32 SDO_UTIL.SIMPLIFYVW

書式

SDO_UTIL.SIMPLIFYVW(
geometry         IN SDO_GEOMETRY,
vertex_threshold IN NUMBER,
tolerance        IN NUMBER DEFAULT 0.0000005,
remove_loops     IN NUMBER DEFAULT 0
) RETURN SDO_GEOMETRY;

説明

Visvalingham-Whyattアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。

パラメータ

geometry

簡略化するジオメトリを指定します。

vertex_threshold

ジオメトリの簡略化に使用するしきい値を指定します(0から100までの割合の値として表します)。値が小さくなると、戻されるジオメトリは入力ジオメトリにより近くなり、値が大きくなると、戻されるジオメトリの点は少なくなります。

異なる値を試して、必要な簡略化レベルを決定することができます。

tolerance

許容差(「許容差」を参照)。値を指定しない場合のデフォルト値は、0.0000005です。

remove_loops

一部の線ジオメトリでは、線を簡略化すると、途中で自己交差するループとなることがあります。これは(線としては)有効なジオメトリですが、場合によっては、簡略化操作の結果にこれらのループが存在することは望ましくないことがあります。0の値(デフォルト)を指定すると、このようなループは除去されません。1の値(または、他の任意の正の数)を指定すると、このようなループはすべて除去され、単純な線セグメントが常に戻されます。

使用上の注意

SDO_UTIL.SIMPLIFYファンクションの「使用上の注意」を参照してください(同じように入力ジオメトリを簡略化していますが、異なるアルゴリズム(Douglas-Peucker)を使用しています)。

例

次の例では、SDO_UTIL.SIMPLIFYの例で使用されている線ストリング・ジオメトリと同じものを簡略化します。

SELECT SDO_UTIL.SIMPLIFYVW(
SDO_GEOMETRY(
2002,  -- line string, 2 dimensions (X,Y)
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
SDO_ORDINATE_ARRAY(
2,2,   -- Starting point
2,4,
8,4,
12,4,
12,10,
8,10,
5,14)  -- Ending point
),
80, -- threshold "percentage" value for geometry simplification
0.5  -- tolerance
) FROM DUAL;

SDO_UTIL.SIMPLIFYVW(SDO_GEOMETRY(2002,--LINESTRING,2DIMENSIONS(X,Y)NULL,NULL,SDO
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 12, 4, 5, 14))

この場合(vertex_threshold値として80を使用)に結果として生成されるジオメトリには、SDO_UTIL.SIMPLIFYの例と同じ点が含まれますが、メジャー次元情報は含まれません(つまり、頂点は2,2、12,4および5,14です)。vertex_threshold値を大幅に低く設定すると、結果としてより多くの頂点を含むジオメトリが生成される可能性があります。

関連項目

SDO_UTIL.SIMPLIFY

SDO_UTIL.RECTIFY_GEOMETRY

31.33 SDO_UTIL.THEME3D_GET_BLOCK_TABLE

書式

SDO_UTIL.THEME3D_GET_BLOCK_TABLE(
theme_name  IN VARCHAR2
) RETURN NUMBER;

説明

3Dテーマ(DEM、PCおよびTINのテーマ)のブロック表がある場合は、それらを戻します。

パラメータ

theme_name

3Dテーマの名前を指定します。この値は、USER_SDO_3DTHEMESビューまたはALL_SDO_3DTHEMESビュー(「xxx_SDO_3DTHEMESビュー」を参照)の値である必要があります。

使用上の注意

このファンクションは、テーマに関連付けられているブロック表がある場合に、テーマのブロック表の名前を戻します。関連付けられているブロック表がない場合、ファンクションはNULL値を戻します。

例

この例では、USER_SDO_3DTHEMES表内の各テーマに対して、複数のLODと1つのテクスチャを所有するかどうかをチェックし、ブロック表名を戻します。(テーマがUSER_SDO_3DTHEMES表に挿入済であることを想定します。)

SELECT
name,
sdo_util.theme3d_has_lod(name) "Has LOD",
sdo_util.theme3d_has_texture(name) "Has Texture",
sdo_util.theme3d_get_block_table(name) "Block Table"
FROM user_sdo_3dthemes
ORDER BY name;

NAME                                Has LOD Has Texture Block Table
-------------------------------- ---------- ----------- -------------------------
DEM Hawaii Theme 4326                     1           0 DEM_BLOCKS_HAWAII_4326
DEM Hawaii Theme w/ Map Tiles             1           1 DEM_BLOCKS_HAWAII_4326
DEM Splitted Theme                        1           0 DEM_SPLITTED_HAWAII_4326
Geom Theme                                0           0
GeomForDEM Theme                          0           0
GeomForTIN Theme                          0           0
PC Category Theme                         1           0 PC_BLOCKS_CATEGORY
PC Hawaii Theme 4326                      1           0 PC_BLOCKS_HAWAII_4326
PC Intensity Theme                        1           0 PC_BLOCKS_INTENSITY
PC LAS File Theme                         1           0 PC_BLOCKS_LAS
PC RGB Theme                              1           0 PC_BLOCKS_RGB
PC Split Theme                            1           0 PC_SPLIT_BLOCKS_4326
PC Subset Hawaii Theme                    1           0 PC_SUBSET_BLOCKS_4326
PC Theme                                  0           0 PC_BLOCKS_NULL_CRS
TIN Hawaii Theme 4326                     1           0 TIN_BLOCKS_HAWAII_4326
TIN Hawaii Theme w/ Map Tiles             1           1 TIN_BLOCKS_HAWAII_4326
TIN Split Theme                           1           0 TIN_SPLIT_BLOCKS_4326
TIN Subset Hawaii Theme                   1           0 TIN_SUBSET_BLOCKS_4326

18 rows selected.

関連項目

- SDO_UTIL.THEME3D_HAS_LOD

- SDO_UTIL.THEME3D_HAS_TEXTURE

31.34 SDO_UTIL.THEME3D_HAS_LOD

書式

SDO_UTIL.THEME3D_HAS_LOD(
theme_name  IN VARCHAR2
) RETURN NUMBER;

説明

3Dテーマに(ピラミッド化を使用するDEM、PCおよびTINテーマの場合)複数の詳細レベル(LOD)が含まれているかどうか、またはテーマが(SDO_GEOMETRYのテーマの場合)複数のLODの一連のテーマに含まれているかどうかをチェックします。

パラメータ

theme_name

3Dテーマの名前を指定します。この値は、USER_SDO_3DTHEMESビューまたはALL_SDO_3DTHEMESビュー(「xxx_SDO_3DTHEMESビュー」を参照)の値である必要があります。

使用上の注意

このファンクションは、テーマに複数のLODまたは複数のLODを持つテーマへのリンクが含まれていない場合は0 (ゼロ)を戻し、それ以外の場合は1を戻します。

例

この例では、USER_SDO_3DTHEMES表内の各テーマに対して、複数のLODと1つのテクスチャを所有するかどうかをチェックし、ブロック表名を戻します。(テーマがUSER_SDO_3DTHEMES表に挿入済であることを想定します。)

SELECT
name,
sdo_util.theme3d_has_lod(name) "Has LOD",
sdo_util.theme3d_has_texture(name) "Has Texture",
sdo_util.theme3d_get_block_table(name) "Block Table"
FROM user_sdo_3dthemes
ORDER BY name;

NAME                                Has LOD Has Texture Block Table
-------------------------------- ---------- ----------- -------------------------
DEM Hawaii Theme 4326                     1           0 DEM_BLOCKS_HAWAII_4326
DEM Hawaii Theme w/ Map Tiles             1           1 DEM_BLOCKS_HAWAII_4326
DEM Splitted Theme                        1           0 DEM_SPLITTED_HAWAII_4326
Geom Theme                                0           0
GeomForDEM Theme                          0           0
GeomForTIN Theme                          0           0
PC Category Theme                         1           0 PC_BLOCKS_CATEGORY
PC Hawaii Theme 4326                      1           0 PC_BLOCKS_HAWAII_4326
PC Intensity Theme                        1           0 PC_BLOCKS_INTENSITY
PC LAS File Theme                         1           0 PC_BLOCKS_LAS
PC RGB Theme                              1           0 PC_BLOCKS_RGB
PC Split Theme                            1           0 PC_SPLIT_BLOCKS_4326
PC Subset Hawaii Theme                    1           0 PC_SUBSET_BLOCKS_4326
PC Theme                                  0           0 PC_BLOCKS_NULL_CRS
TIN Hawaii Theme 4326                     1           0 TIN_BLOCKS_HAWAII_4326
TIN Hawaii Theme w/ Map Tiles             1           1 TIN_BLOCKS_HAWAII_4326
TIN Split Theme                           1           0 TIN_SPLIT_BLOCKS_4326
TIN Subset Hawaii Theme                   1           0 TIN_SUBSET_BLOCKS_4326

18 rows selected.

関連項目

- SDO_UTIL.THEME3D_GET_BLOCK_TABLE

- SDO_UTIL.THEME3D_HAS_TEXTURE

31.35 SDO_UTIL.THEME3D_HAS_TEXTURE

書式

SDO_UTIL.THEME3D_HAS_TEXTURE(
theme_name  IN VARCHAR2
) RETURN NUMBER;

説明

3Dテーマに(DEM、TIN、マップ・タイル・サーバーおよびSDO_GEOMETRYのテーマの場合)テクスチャが含まれているかどうかをチェックします。

パラメータ

theme_name

3Dテーマの名前を指定します。この値は、USER_SDO_3DTHEMESビューまたはALL_SDO_3DTHEMESビュー(「xxx_SDO_3DTHEMESビュー」を参照)の値である必要があります。

使用上の注意

このファンクションは、テーマにテクスチャが含まれていない場合は0 (ゼロ)を戻し、それ以外の場合は1を戻します。

例

この例では、USER_SDO_3DTHEMES表内の各テーマに対して、複数のLODと1つのテクスチャを所有するかどうかをチェックし、ブロック表名を戻します。(テーマがUSER_SDO_3DTHEMES表に挿入済であることを想定します。)

SELECT
name,
sdo_util.theme3d_has_lod(name) "Has LOD",
sdo_util.theme3d_has_texture(name) "Has Texture",
sdo_util.theme3d_get_block_table(name) "Block Table"
FROM user_sdo_3dthemes
ORDER BY name;

NAME                                Has LOD Has Texture Block Table
-------------------------------- ---------- ----------- -------------------------
DEM Hawaii Theme 4326                     1           0 DEM_BLOCKS_HAWAII_4326
DEM Hawaii Theme w/ Map Tiles             1           1 DEM_BLOCKS_HAWAII_4326
DEM Splitted Theme                        1           0 DEM_SPLITTED_HAWAII_4326
Geom Theme                                0           0
GeomForDEM Theme                          0           0
GeomForTIN Theme                          0           0
PC Category Theme                         1           0 PC_BLOCKS_CATEGORY
PC Hawaii Theme 4326                      1           0 PC_BLOCKS_HAWAII_4326
PC Intensity Theme                        1           0 PC_BLOCKS_INTENSITY
PC LAS File Theme                         1           0 PC_BLOCKS_LAS
PC RGB Theme                              1           0 PC_BLOCKS_RGB
PC Split Theme                            1           0 PC_SPLIT_BLOCKS_4326
PC Subset Hawaii Theme                    1           0 PC_SUBSET_BLOCKS_4326
PC Theme                                  0           0 PC_BLOCKS_NULL_CRS
TIN Hawaii Theme 4326                     1           0 TIN_BLOCKS_HAWAII_4326
TIN Hawaii Theme w/ Map Tiles             1           1 TIN_BLOCKS_HAWAII_4326
TIN Split Theme                           1           0 TIN_SPLIT_BLOCKS_4326
TIN Subset Hawaii Theme                   1           0 TIN_SUBSET_BLOCKS_4326

18 rows selected.

関連項目

- SDO_UTIL.THEME3D_GET_BLOCK_TABLE

- SDO_UTIL.THEME3D_HAS_LOD

31.36 SDO_UTIL.TO_GML311GEOMETRY

書式

SDO_UTIL.TO_GML311GEOMETRY(
geometry  IN SDO_GEOMETRY
) RETURN CLOB;

説明

Open GIS geometry.xsdスキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatial and Graphジオメトリ・オブジェクトを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 and Graphの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(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のフラグメントを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- 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のフラグメントを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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のフラグメントを戻します。(例では、「LRSファンクションの例」の定義およびデータを使用しています。)

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

31.37 SDO_UTIL.TO_GMLGEOMETRY

書式

SDO_UTIL.TO_GMLGEOMETRY(
geometry  IN SDO_GEOMETRY
) RETURN CLOB;

または

SDO_UTIL.TO_GML311GEOMETRY(
geometry   IN SDO_GEOMETRY,
coordOrder IN NUMBER
) RETURN CLOB;

説明

Open GIS geometry.xsdスキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatial and Graphジオメトリ・オブジェクトをGeography Markup Language (GML 2.0)フラグメントに変換します。

パラメータ

geometry

GMLフラグメントを戻すジオメトリを指定します。

coordOrder

(Oracleで使用するために予約されています。)

使用上の注意

このファンクションは、円、円弧を含むジオメトリ、LRSジオメトリ、またはSDO_ETYPE値が0(タイプ0(ゼロ)要素)であるジオメトリは変換しません。これらを指定した場合、空のCLOBが戻されます。

このファンクションは、Open GIS実装仕様に定義されたいくつかのGMLジオメトリ・タイプに基づいて、入力ジオメトリをGMLフラグメントに変換します。

ポリゴンの定義には、Oracle9i以降のリリースのSpatial and Graphの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(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フラグメントを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- 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フラグメントを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

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フラグメントを戻します。(例では、「LRSファンクションの例」の定義およびデータを使用しています。)

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

31.38 SDO_UTIL.TO_KMLGEOMETRY

書式

SDO_UTIL.TO_KMLGEOMETRY(
geometry  IN SDO_GEOMETRY
) RETURN CLOB;

説明

Spatial and Graphジオメトリ・オブジェクトをKML (Keyhole Markup Language)ドキュメントに変換します。

パラメータ

geometry

KMLドキュメントを戻すジオメトリを指定します。

使用上の注意

このファンクションは、円、円弧を含むジオメトリ、LRSジオメトリ、またはSDO_ETYPE値が0(タイプ0(ゼロ)要素)であるジオメトリは変換しません。これらを指定した場合、空のCLOBが戻されます。

ポリゴンの定義には、Oracle9i以降のリリースのSpatial and Graphの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(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 and Graphソリッド・ジオメトリは生成されません(つまり、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形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特に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

31.39 SDO_UTIL.TO_WKBGEOMETRY

書式

SDO_UTIL.TO_WKBGEOMETRY(
geometry  IN SDO_GEOMETRY
) RETURN BLOB;

説明

Spatial and Graphジオメトリ・オブジェクトを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ジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特に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

31.40 SDO_UTIL.TO_WKTGEOMETRY

書式

SDO_UTIL.TO_WKTGEOMETRY(
geometry  IN SDO_GEOMETRY
) RETURN CLOB;

説明

Spatial and Graphジオメトリ・オブジェクトを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ジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特に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

31.41 SDO_UTIL.VALIDATE_3DTHEME

書式

SDO_UTIL.VALIDATE_3DTHEME(
theme_name  IN VARCHAR2
) RETURN VARCHAR2;

説明

3Dテーマを検証します。

パラメータ

theme_name

3Dテーマの名前を指定します。この値は、USER_SDO_3DTHEMESビューまたはALL_SDO_3DTHEMESビュー(「xxx_SDO_3DTHEMESビュー」を参照)の値である必要があります。

使用上の注意

このファンクションは、テーマのタイプに適した複数の妥当性チェックを実行します。チェックごとに、文字列TRUE (問題がない場合)または問題の簡単な説明を戻します。

指定したテーマが定義されていない場合、出力はその名前の付いたテーマがないことを示します。

例

次の例では、USER_SDO_3DTHEMES表のテーマを検証します。(テーマがUSER_SDO_3DTHEMES表に挿入済であることを想定します。)

SELECT
name || ': ' ||
sdo_util.validate_3dtheme(name) "Theme validity"
FROM user_sdo_3dthemes
ORDER BY name;

Theme validity
---------------------------------------------------------------------------------
Test PC Hawaii Theme 4326: TRUE
Test PC Hawaii Theme 4326 A: No Theme-related Metadata
Test PC Hawaii Theme 4326 A2: XML metadata for "Test PC Hawaii Theme 4326 A2" not well-formed
Test PC Hawaii Theme 4326 C1: SRID 0 not found
Test PC Hawaii Theme 4326 C2: No VERTICAL SRID 5758 allowed
Test PC Hawaii Theme 4326 D: THEME_COLUMN column and xml metadata do not match, regarding feature table column
Test PC Hawaii Theme 4326 D2: User "MDMETT"'s table "PCS_HAWAII_4326" has no column "PC3", according to USER_TAB_COLUMNS
.

Test PC Hawaii Theme 4326 D3: User "MDMETT" has no table "PCS_HAWAII_4326A", according to USER_TABLES.
Test PC Hawaii Theme 4326 D4: THEME_TYPE column and xml metadata do not match, regarding geometric feature type
Test PC Hawaii Theme 4326 D5: User "MDMETT"'s table "PCS_HAWAII_4326" has a column "PC" of type "SDO_PC", not "SDO_PC3",
according to USER_TAB_COLUMNS.

Test PC Hawaii Theme 4326 E: Elevation not strictly monotonously rising from position 1 to 2 (value 123.2 >= 123.1)
Test PC Hawaii Theme 4326 E2: No elevation @color specified at position 2
Test PC Hawaii Theme 4326 E3: No @elevation specified at position 2
Test PC Hawaii Theme 4326 E4: Elevation @color at position 2 does not have hex format RRGGBB
Test PC Hawaii Theme 4326 E5: Elevation @color at position 2 does not have hex format RRGGBB (character 6)

15 rows selected.

関連項目

- SDO_UTIL.THEME3D_GET_BLOCK_TABLE

- SDO_UTIL.THEME3D_HAS_LOD

- SDO_UTIL.THEME3D_HAS_TEXTURE

- SDO_UTIL.VALIDATE_SCENE

- SDO_UTIL.VALIDATE_VIEWFRAME

31.42 SDO_UTIL.VALIDATE_SCENE

書式

SDO_UTIL.VALIDATE_SCENE(
scene_name  IN VARCHAR2
) RETURN VARCHAR2;

説明

3Dシーンを検証します。

パラメータ

scene_name

3Dシーンの名前を指定します。この値は、USER_SDO_SCENESビューまたはALL_SDO_SCENESビュー(「xxx_SDO_SCENESビュー」を参照)の値である必要があります。

使用上の注意

このファンクションは、複数の妥当性チェックを実行します。チェックごとに、文字列TRUE (問題がない場合)または問題の簡単な説明を戻します。

指定したシーンが定義されていない場合、出力はその名前の付いたシーンがないことを示します。

例

次の例は、USER_SDO_SCENES表のシーンを検証します。(シーンがUSER_SDO_SCENES表に挿入済であることを想定します。)

SELECT
name || ': ' ||
sdo_util.validate_scene(name) "Scene validity"
FROM user_sdo_scenes
ORDER BY name;

Scene validity
---------------------------------------------------------------------------------
Test PC Hawaii Scene 4326: TRUE
Test PC Hawaii Scene 4326 A: No Scene-related Metadata
Test PC Hawaii Scene 4326 A2: XML metadata for "Test PC Hawaii Scene 4326 A2" not well-formed
Test PC Hawaii Scene 4326 B: Referenced theme "Test PC Hawaii Theme 4326 A": No Theme-related Metadata
Test PC Hawaii Scene 4326 C1: SRID 0 not found
Test PC Hawaii Scene 4326 C2: No VERTICAL SRID 5758 allowed

6 rows selected.

関連項目

- SDO_UTIL.VALIDATE_3DTHEME

- SDO_UTIL.VALIDATE_VIEWFRAME

31.43 SDO_UTIL.VALIDATE_VIEWFRAME

書式

SDO_UTIL.VALIDATE_VIEWFRAME(
viewframe_name  IN VARCHAR2
) RETURN VARCHAR2;

説明

3Dビューフレームを検証します。

パラメータ

viewframe_name

3Dテーマの名前を指定します。この値は、USER_SDO_VIEWFRAMESビューまたはALL_SDO_VIEWFRAMESビュー(「xxx_SDO_VIEWFRAMESビュー」を参照)の値である必要があります。

使用上の注意

このファンクションは、複数の妥当性チェックを実行します。チェックごとに、文字列TRUE (問題がない場合)または問題の簡単な説明を戻します。

指定したビューフレームが定義されていない場合、出力はその名前の付いたビューフレームがないことを示します。

例

次の例では、USER_SDO_3DTHEMES表のテーマを検証します。(テーマがUSER_SDO_3DTHEMES表に挿入済であることを想定します。)

SELECT
name || ': ' ||
sdo_util.validate_viewframe(name) "Viewframe validity"
FROM user_sdo_viewframes
ORDER BY name;

Viewframe validity
---------------------------------------------------------------------------------
Test PC Hawaii Viewpoint 4326: TRUE
Test PC Hawaii Viewpoint 4326 A: No Viewframe-related Metadata
Test PC Hawaii Viewpoint 4326 A2: XML metadata for "Test PC Hawaii Viewpoint 4326 A2" not well-formed
Test PC Hawaii Viewpoint 4326 B1: Referenced scene "Made up": No scene with name "Made up"
Test PC Hawaii Viewpoint 4326 B2: Referenced scene "Test PC Hawaii Scene 4326 B": Referenced theme "Test PC Hawaii Theme
4326 A": No Theme-related Metadata

Test PC Hawaii Viewpoint 4326 B3: SCENE_NAME column and xml metadata do not match, regarding scene name
Test PC Hawaii Viewpoint 4326 C1: SRID 0 not found
Test PC Hawaii Viewpoint 4326 C2: No VERTICAL SRID 5758 allowed

8 rows selected.

関連項目

- SDO_UTIL.VALIDATE_3DTHEME

- SDO_UTIL.VALIDATE_SCENE

31.44 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ジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特に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

31.45 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ジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特に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

32 SDO_WFS_LOCK Package (WFS)

MDSYS.SDO_WFS_LOCKパッケージには、フィーチャ表の登録と登録解除を行うためにWFSをサポートするサブプログラムが含まれています。フィーチャ表を登録するとWFSトランザクション・ロッキングに対して表が有効になり、フィーチャ表を登録解除するとWFSトランザクション・ロッキングに対して表が無効になります。

この章で説明するサブプログラムを使用する場合は、Web Feature Services(WFS)の概念および使用方法を理解しておく必要があります(「Web Feature Service(WFS)のサポート」を参照)。

表32-1にWFSをサポートするサブプログラムを示します。

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

サブプログラム

説明

SDO_WFS_LOCK.RegisterFeatureTable

フィーチャ表を登録します(WFSトランザクション・ロッキングに対してフィーチャ表を有効にします)。

SDO_WFS_LOCK.UnRegisterFeatureTable

フィーチャ表を登録解除します(WFSトランザクション・ロッキングに対してフィーチャ表を無効にします)。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

32.1 SDO_WFS_LOCK.EnableDBTxns

書式

SDO_WFS_LOCK.EnableDBTxns();

説明

WFS表に対してデータベース・トランザクションを有効にします。

パラメータ

なし。

使用上の注意

このプロシージャは、セッションの終わりまで、WFS表に対するデータベース・トランザクションに課せられるWFS-T標準の制限を上書きするため、現行のセッションIDを使用する任意のトランザクションが、WFS表に対して更新および削除操作を行うことができます。Oracle Databaseトリガーは引き続き、現行のトランザクションが行の変更を許可される前にWFSのロックをチェックするので、WFSトランザクションが行をロックしている場合、トリガーは操作の実行を許可しません。ただし、現行の行に対するWFSのロックが存在しない場合、トリガーは現行のトランザクションによる行の変更を許可します。

Oracle Workspace Managerを使用してWFS表をバージョン対応にしている場合(「Oracle Workspace ManagerでのWFSの使用」を参照)は、このプロシージャをコールして特定の操作を実行する必要があります。ただし、WFS表でWorkspace Managerを使用していない場合でも、このプロシージャを使用することはできます。

Web Feature Servicesのサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、現行のセッションの残りの期間中、WFS表に対するデータベース・トランザクションを有効にします。

BEGIN
SDO_WFS_LOCK.enableDBTxns;
END;
/

32.2 SDO_WFS_LOCK.RegisterFeatureTable

書式

SDO_WFS_LOCK.RegisterFeatureTable(
username  IN VARCHAR2,
tablename IN VARCHAR2);

説明

フィーチャ表を登録します(WFSトランザクション・ロッキングに対してフィーチャ表を有効にします)。

パラメータ

username

登録するフィーチャ表を所有するデータベース・ユーザーの名前を指定します。

tablename

登録するフィーチャ表の名前を指定します。

使用上の注意

このプロシージャによって、WFSトランザクションのセマンティクスを実装するために必要な制約がフィーチャ表に確実に関連付けられます。

Web Feature Servicesのサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

バージョンに対応していない表を登録解除するには、SDO_WFS_LOCK.UnRegisterFeatureTableプロシージャを使用します。

例

次の例では、ユーザーWFS_REL_USERが所有するCOLA_MARKETS_CSという名前のフィーチャ表を登録します。

BEGIN
SDO_WFS_LOCK.registerFeatureTable('wfs_rel_user', 'cola_markets_cs');
END;
/

32.3 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のサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、ユーザーWFS_REL_USERが所有するCOLA_MARKETS_CSという名前のフィーチャ表を登録解除します。

BEGIN
SDO_WFS_LOCK.unRegisterFeatureTable('wfs_rel_user', 'cola_markets_cs');
END;
/

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

MDSYS.SDO_WFS_PROCESSパッケージには、Web Feature Servicesのサポートに関連する各種処理操作を行うサブプログラムが含まれています。

この章で説明するサブプログラムを使用する場合は、Web Feature Servicesの概念および使用方法を理解しておく必要があります(「Web Feature Service(WFS)のサポート」を参照)。

表33-1にWFS処理のサブプログラムを示します。

表33-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

フィーチャ・インスタンスとしての複数表ビュー・コンテンツのパブリッシュを無効にします。

この章では、これらのサブプログラムのリファレンス情報をアルファベット順に説明します。

33.1 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のサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、指定した名前空間にあるCOLAというフィーチャ・タイプを削除します。

BEGIN
SDO_WFS_PROCESS.dropFeatureType('http://www.example.com/myns','COLA');
END;
/

33.2 SDO_WFS_PROCESS.DropFeatureTypes

書式

SDO_WFS_PROCESS.DropFeatureTypes(
ftnsUrl  IN VARCHAR2);

説明

指定した名前空間内のすべてのフィーチャ・タイプを削除します。

パラメータ

ftnsUrl

名前空間のURL(Uniform Resource Locator)を指定します。

使用上の注意

名前空間内の単一のフィーチャ・タイプを削除する場合は、SDO_WFS_PROCESS.DropFeatureTypeプロシージャを使用します。

Web Feature Servicesのサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、指定した名前空間内のすべてのフィーチャ・タイプを削除します。

BEGIN
SDO_WFS_PROCESS.dropFeatureTypes('http://www.example.com/myns');
END;
/

33.3 SDO_WFS_PROCESS.GenCollectionProcs

書式

SDO_WFS_PROCESS.GenCollectionProcs();

説明

コレクションベースの列(例: VARRAYまたはネストされた表)を含むリレーショナル・フィーチャ・タイプのヘルパー・プロシージャを生成します。

パラメータ

なし。

使用上の注意

フィーチャ表にコレクションベースの列(例: VARRAYまたはネストされた表)で定義されたフィーチャが含まれている場合は、このプロシージャを使用します。

Web Feature Servicesのサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、コレクションベースの列を持つリレーショナル・フィーチャ・タイプのヘルパー・プロシージャを生成します。

BEGIN
SDO_WFS_PROCESS.GenCollectionProcs;
END;
/

33.4 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のサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、COLAというフィーチャ・タイプのフィーチャ・タイプIDを取得します。

DECLARE
ftid number;
BEGIN
ftId := SDO_WFS_PROCESS.GetFeatureTypeId('http://www.example.com/myns','COLA');
END;
/

33.5 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のサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、COLAというフィーチャ・タイプへのアクセス権限をユーザーSMITHに付与します。

BEGIN
SDO_WFS_PROCESS.GrantFeatureTypeToUser('http://www.example.com/myns','COLA',
'SMITH');
END;
/

33.6 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のサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、Web Feature Serviceメタデータ表へのアクセス権限をWFS_REL_USERというデータベース・ユーザーに付与します。

BEGIN
SDO_WFS_PROCESS.GrantMDAccessToUser('WFS_REL_USER');
END;
/

33.7 SDO_WFS_PROCESS.InsertCapabilitiesInfo

書式

SDO_WFS_PROCESS.InsertCapabilitiesInfo(
capabilitiesInfo IN XMLTYPE);

説明

機能テンプレート情報を挿入します。

パラメータ

capabilitiesInfo

機能のドキュメントを生成するために実行時に使用される、機能テンプレートのXML文書を指定します。

使用上の注意

機能のドキュメントは、実行時に、WFSメタデータのフィーチャ・タイプ情報を機能テンプレートとバインディングすることによって動的に生成されます。機能のドキュメントについては、「機能のドキュメント」を参照してください。

Web Feature Servicesのサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、機能テンプレート情報を挿入します。

BEGIN
SDO_WFS_PROCESS.insertCapabilitiesInfo(
xmltype(bfilename('WFSUSERDIR', 'capabilitiesTemplate.xml'),
nls_charset_id('AL32UTF8')));
END
/

33.8 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のサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、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;
/

33.9 SDO_WFS_PROCESS.InsertFtMDUpdated

書式

SDO_WFS_PROCESS.InsertFtMDUpdated(
ns       IN VARCHAR2,
name     IN VARCHAR2,
updateTs IN TIMESTAMP);

説明

データベースでフィーチャ・タイプのメタデータが更新されたことを示す通知を挿入します。

パラメータ

ns

フィーチャ・タイプの名前空間を指定します。

name

フィーチャ・タイプの名前を指定します。

updateTS

メタデータが更新された日時を指定します。

使用上の注意

このプロシージャは、WFSのキャッシュ・メタデータを同期させるために使用します。

Web Feature Servicesのサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、データベースでCOLAフィーチャ・タイプのメタデータが更新されたことを示す通知を挿入します。

begin
SDO_WFS_PROCESS.InsertFtMDUpdated(
'http://www.example.com/myns','COLA', sysdate);
end;
/

33.10 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のサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、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;
/

33.11 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.1.nの場合、MDSYS.STRINGLIST('PolygonPropertyType', 'PointPropertyType')など)。

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となる必要があります。表33-2に、WFSバージョン1.0.nでのジオメトリ・タイプとこれらのタイプに関連付けられた必須のcolumnInfoパラメータ値を示します。(<column-name>を列の名前に置換します。)

表33-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

WFS 1.1.nの場合、たとえば、フィーチャ・タイプのインスタンス表内にある1つのSDO_GEOMETRY列にポリゴン・ジオメトリが含まれている場合、columnInfo値はPolygonPropertyTypeとなる必要があります。表33-3に、WFSバージョン1.1.nでのジオメトリ・タイプとこれらのタイプに関連付けられた必須のcolumnInfoパラメータ値を示します。

表33-3 ジオメトリ・タイプとcolumnInfoパラメータ値(WFS 1.1.n)

ジオメトリ・タイプ

columnInfoパラメータ値

ポリゴンまたは面

PolygonPropertyType

複数のポリゴンまたは複数面

MultiPolygonPropertyType

点

PointPropertyType

複数点

MultiPointPropertyType

線または曲線

CurvePropertyType

複数線または複数曲線

MultiCurvePropertyType

ソリッド

SolidPropertyType

マルチソリッド

MultiSolidPropertyType

コレクション

GeometryPropertyType

Web Feature Servicesのサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、COLAという名前のフィーチャ・タイプのメタデータを、SHAPEという列に格納されているポリゴン・ジオメトリに登録します。(WFS 1.1.nの使用を想定しています。)

DECLARE
columnInfo MDSYS.StringList := MDSYS.StringList('PolygonPropertyType');
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;
/

33.12 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のサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では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;
/

33.13 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のサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、COLAというフィーチャ・タイプへのアクセス権限をユーザーSMITHから取り消します。

BEGIN
SDO_WFS_PROCESS.RevokeFeatureTypeFromUser('http://www.example.com/myns','COLA',
'SMITH');
END;
/

33.14 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のサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、Web Feature Serviceメタデータ表へのアクセス権限をWFS_REL_USERというデータベース・ユーザーから取り消します。

BEGIN
SDO_WFS_PROCESS.RevokeMDAccessToUser('WFS_REL_USER');
END;
/

33.15 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のサポートについては、「Web Feature Service(WFS)のサポート」を参照してください。

例

次の例では、複数表ビューの登録を解除し、ビューのコンテンツのパブリッシュを無効にします。

DECLARE
BEGIN
SDO_WFS_PROCESS.unRegisterMTableView('http://www.example.com/myns', 'COLA');
END;
/

第IV部 補足情報

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

- 「概念および使用方法」では、Oracle Spatial and Graphの概念および使用方法について説明します。

- 「空間Webサービス」では、Oracle Spatial and GraphのWebサービスの概念および使用方法について説明します。

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

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

第IV部に含まれる付録および用語集は、次のとおりです。

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

- Oracle Locator

- 複雑な空間問合せの例

- Spatial and GraphへのESRIシェープファイルのロード

- 用語集

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

Oracle Databaseの現行リリースにアップグレードする場合、Oracle Spatial and Graphは操作の一部として自動的にアップグレードされます。アップグレード手順については、『Oracle Databaseアップグレード・ガイド』を参照してください。

Spatial and GraphをOracle Databaseの以前のリリースにダウングレードする場合、『Oracle Databaseアップグレード・ガイド』に記載されている、Oracle Databaseの以前のリリースへのダウングレード手順を参照してください。

データベース間で空間データを移行する場合は、「データベース間での空間データの移行」を参照してください。

Oracle Spatial and Graph GeoRasterを使用する場合は、「インストールまたはアップグレード後にGeoRasterが正しく動作するための確認事項」を参照してください。

Spatial and GraphのWeb Feature Service (WFS)のサポートまたはCatalog Services for the Web (CSW)のサポートを使用している場合、および1つ以上のSYS.XMLTABLEINDEXの索引を使用して索引付けされた以前のリリースのデータがある場合は、「アップグレード前およびアップグレード後に行う索引のメンテナンス(WFSおよびCSW)」を参照してください。

1,048,576より大きい縦座標のジオメトリをサポートする必要がある場合は、「非常に大きなジオメトリをサポートするための縦座標配列のサイズの増大」を参照してください。

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

空間データの移行とは、Oracle Database間でのOracle Spatial and Graphジオメトリ・オブジェクトの移動またはコピーのことを言います。(データベースでは、同じまたは異なるリリース番号のOracle Databaseを使用できます。)

データベース・リンク、エクスポート/インポート、Oracle Data Pumpまたはトランスポート可能な表領域を使用して空間データを移行する場合、MDSYSスキーマがすでに移行先のデータベースに存在している必要があります。

限定された状況では、SDO_MIGRATE.TO_CURRENTサブプログラム(「SDO_MIGRATEパッケージ(アップグレード)」を参照)を使用しなければならい場合もあります。そのサブプログラムの「使用上の注意」を参照してください。

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

Oracle Spatial and GraphのGeoRaster機能を使用するには、次の各トピックで説明するように、この機能を有効にし、Oracle XML DB Repositoryが適切にインストールされていることを確認する必要があります。

- GeoRasterの有効化

- Oracle XML DBリポジトリがインストールされていることの確認

A.2.1 GeoRasterの有効化

Oracle Spatial and Graphの最初のインストール後、デフォルトではGeoRaster機能が無効になっています。GeoRasterを有効にするには、次の手順に従います。

1. SYS AS SYSDBAとしてデータベースに接続します。

2. 次の文を入力します。

EXECUTE MDSYS.enableGeoRaster;

GeoRasterを有効にした後、データベースを後でアップグレードする場合、GeoRasterを再度有効化する必要はありません。

A.2.2 Oracle XML DBリポジトリがインストールされていることの確認

詳細は、『Oracle Spatial and Graph GeoRaster開発者ガイド』の第1章の最初の方にあるインストールおよびアップグレードに関する注意事項を参照してください。

Oracle Spatial and GraphのGeoRaster機能を使用するには、Oracle XML DB Repositoryを適切にインストールする必要があります。(通常、Oracle Spatial and Graphをインストールする前に、Oracle XML DB Repositoryがインストールされていることを確認する必要があります。)

(アップグレード時のように) Oracle Spatial and Graphはインストールされていても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 and GraphのWeb Feature Service (WFS)のサポートの詳細は、「Web Feature Service(WFS)のサポート」を参照してください(特に、次の項を参照してください)。

- createXMLTableIndexメソッド(createXMLTableIndexメソッド)

- dropXMLTableIndexメソッド(dropXMLTableIndexメソッド)

- getIsXMLTableIndexCreatedメソッド(getIsXMLTableIndexCreatedメソッド)

- publishFeatureTypeメソッドのgenXMLIndexパラメータおよびidxPathsパラメータ(「publishFeatureTypeメソッド」)

- setXMLTableIndexInfoメソッド(setXMLTableIndexInfoメソッド)

Spatial and GraphのCatalog Services for the Web (CSW)のサポートの詳細は、「Catalog Services for the Web (CSW)のサポート」を参照してください(特に、次の項を参照してください)。

- createXMLTableIndexメソッド(createXMLTableIndexメソッド)

- dropXMLTableIndexメソッド(dropXMLTableIndexメソッド)

- getIsXMLTableIndexCreatedメソッド(getIsXMLTableIndexCreatedメソッド)

- publishRecordTypeメソッドのgenXMLIndexパラメータおよびidxPathsパラメータ(「publishRecordTypeメソッド」)

- setXMLTableIndexInfoメソッド(setXMLTableIndexInfoメソッド)

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

1,048,576より大きい縦座標のジオメトリをサポートする必要がある場合は、この項の説明に従う必要があります。ただし、これにより、多くの追加作業(スクリプトの実行や既存の空間データの移行)、データベースのダウンタイム、およびいくつかの考慮事項と制限事項が発生します。したがって、必要がないかぎり、この項の操作は実行しないようにしてください。

最大10Mの縦座標のジオメトリをサポートするために縦座標配列のサイズを増やすには、次の手順を実行します。

1. 空間表やOracle Spatial and Graphまたは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 Standard Editionの機能です。Locatorは、Oracle Spatial and Graphで使用可能な主要な機能およびサービスを提供します。通常、インターネットおよびワイヤレス・サービス・ベースのアプリケーションおよびパートナ・ベースのGISソリューションをサポートするために必要な、重要な機能を提供します。Locatorは、複雑な空間データ管理が必要な地理情報システム(GIS)アプリケーションのためのソリューションとして設計されていません。線形参照、高度な空間ファンクション、Spatial and Graph Webサービスなどの機能が必要な場合は、LocatorではなくOracle Spatial and Graphを使用します。

Spatial and Graphと同様に、Locatorは、エンド・ユーザー・アプリケーションではなく、アプリケーション開発者向けの一連の空間機能として設計されています。

Locatorは、Oracle DatabaseのStandard Edition One、Standard EditionおよびEnterprise Editionと、Oracle Database XE (Express Edition)で使用できます。Spatial and Graphは、Oracle Database Enterprise Editionのみで使用可能な別ライセンスのオプションです。Spatial and Graphには、Locatorのすべての機能に加えて、Locatorでは使用できない機能も含まれています。

Locatorで使用可能な機能のみを使用する必要がある場合は、「LocatorまたはSpatial and Graphの手動によるインストールおよび削除」を参照してください。Spatial and GraphおよびLocatorに関するライセンス情報は、『Oracle Databaseライセンス情報』を参照してください。

Locatorがインストールされているかどうかは、Oracle Multimediaが正しく適切にインストールされたかどうかによります。Oracle Multimediaは、Oracle Databaseとともにインストールされ構成されますが、必要に応じて、手動でインストールすることもできます(『Oracle Multimediaユーザーズ・ガイド』を参照)。Locatorは、Oracle Multimediaのインストール時にインストールされます。

通常Locatorには、Spatial and Graphの一部のサブプログラム(ファンクションおよびプロシージャ)とともに、Oracle Spatial and Graphのデータ型、演算子および索引付け機能が含まれます。Locatorに含まれる機能は次のとおりです。

- すべてのタイプのジオメトリを記述およびサポートするオブジェクト型(SDO_GEOMETRY)

- ジオメトリ・データに空間索引を作成するための空間索引付け機能

- 空間索引を使用して空間問合せを実行する空間演算子(「空間演算子」を参照)

- ジオメトリ・サブプログラム(SDO_GEOMパッケージ(「SDO_GEOMパッケージ(ジオメトリ)」を参照))

- 空間集計ファンクション(「空間集計ファンクション」を参照)

- ジオメトリおよびレイヤーの変換における座標系のサポート(「SDO_CSパッケージ(座標系変換)」のSDO_CSパッケージを参照)

- チューニング・サブプログラム(「SDO_TUNEパッケージ(チューニング)」のSDO_TUNEパッケージを参照)

- Spatialのユーティリティ・ファンクション(「SDO_UTILパッケージ(ユーティリティ)」のSDO_UTILパッケージを参照)

- Spatial and Graph Java APIのoracle.spatial.geometry (sdoapi.jar)パッケージおよびoracle.spatial.util (sdoutil.jar)パッケージのクラス(Oracle Spatial and Graph Java API Referenceを参照)

空間の概念、SDO_GEOMETRYオブジェクト型、SQL Multimedia型の注釈テキストのサポート、および空間データの索引付けとロードの詳細は、このマニュアルの第1章から第5章を参照してください。Locatorでサポートされている機能のリファレンス情報および使用方法は、表B-1に示す章または項を参照してください。

表B-1 Locatorに含まれている機能

機能

参照先

SDO_JOINを含み、SDO_POINTINPOLYGONを含まない空間演算子。(SDO_JOINとSDO_POINTINPOLYGONは厳密にはテーブル・ファンクションですが、演算子とともに説明。)

空間演算子

SDO_GEOMパッケージ・サブプログラム

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

空間集計ファンクション

空間集計ファンクション

座標系変換サブプログラム(SDO_CSパッケージ)

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

演算子のコールに対する暗黙的な座標系の変換(このコールでは、問合せされたレイヤーの座標系にウィンドウを変換する必要あり)。

空間演算子

ファンクション・ベースの空間索引付け。

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

空間索引での表のパーティション化のサポート(パーティションおよびその索引の分割、マージおよび交換を含む)。

パーティション空間索引の使用および索引を含むパーティションの交換

測地データのサポート。

測地座標のサポートおよびレガシー表およびビュー

索引を作成、変更、削除するためのSQL文。

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

パラレル空間索引作成(PARALLELキーワードを指定したALTER INDEX REBUILDおよびCREATE INDEX文)(リリース2 (9.2)の新機能)。

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

SDO_GEOMETRYオブジェクト型のメソッド。

SDO_GEOMETRYメソッド

SQL Multimedia空間型(ST_xxx型)

SQL Multimedia型のサポート

同等のOracle Spatial and Graphの機能がLocatorでサポートされているSQL Multimediaファンクション(ST_xxxファンクション)

ST_xxxファンクションと同等のSpatial and Graphの機能

注釈テキスト

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

以前のリリースのSpatial and Graphから今回のリリースへデータをアップグレードするパッケージ(SDO_MIGRATE)

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

チューニング・サブプログラム(SDO_TUNEパッケージ)

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

Spatialのユーティリティ・ファンクション(SDO_UTILパッケージ)。

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

Spatial and Graph Java APIのoracle.spatial.geometry (sdoapi.jar)パッケージおよびoracle.spatial.util (sdoutil.jar)パッケージのクラス

『Oracle Spatial and Graph Java APIリファレンス』

オブジェクトのレプリケーション。

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

表B-2に、LocatorでサポートされていないSpatial and Graphの機能、およびこのマニュアルや他のマニュアルでそれらの機能の詳細を記載している章を示します。

表B-2 Locatorに含まれていない機能

機能

参照先

線形参照システム(LRS)のサポート(SDO_LRSパッケージ)

線形参照システム(概念と使用方法)およびSDO_LRSパッケージ(線形参照システム)(リファレンス)

3次元のジオメトリ・サポート: 3D空間索引付け、3D演算子および3Dデータのサブプログラムの使用はLocatorではサポートされていません。

3次元の空間オブジェクト(3Dの概念と使用方法)

空間分析およびマイニングのサブプログラム(SDO_SAMパッケージ)

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

OpenLSのサポート(ジオコーディング、マッピング、ビジネス・ディレクトリ(イエロー・ページ)および運転方向(ルーティング・)サービスのサポートを含む)

OpenLSのサポートおよびSDO_OLSパッケージ(OpenLS)。関連項目:

- 住所データのジオコーディングおよびSDO_GCDRパッケージ(ジオコーディング)

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

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

Web Feature Service (WFS)のサポート(SDO_WFS_PROCESSおよびSDO_WFS_LOCKパッケージ)

Web Feature Service(WFS)のサポート(概念と使用方法)、およびSDO_WFS_PROCESSパッケージ(WFSの処理)およびSDO_WFS_LOCKパッケージ(WFS) (リファレンス)

Catalog Services for the Web (CSW)のサポート(SDO_CSW_PROCESSパッケージ)

Catalog Services for the Web (CSW)のサポート(概念と使用方法)およびSDO_CSW_PROCESSパッケージ(CSWの処理) (リファレンス)

Triangulated Irregular Network (TIN)および点郡(PC)のデータ型および関連するサブプログラム

3次元の空間オブジェクト(概念と使用方法)、およびSDO_TIN_PKGパッケージ(TIN) (SDO_TIN_PKGのリファレンス)およびSDO_PC_PKGパッケージ(点群) (SDO_PC_PKGのリファレンス)

SDO_POINTINPOLYGON (厳密にはテーブル・ファンクションですが、演算子とともに説明)

空間演算子

GeoRasterのサポート

『Oracle Spatial and Graph GeoRaster開発者ガイド』

トポロジ・データ・モデル

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

ネットワーク・データ・モデル

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

Spatial and Graph Java APIのoracle.spatial.geometry (sdoapi.jar)パッケージおよびoracle.spatial.util (sdoutil.jar)パッケージ以外のパッケージのクラス

『Oracle Spatial and Graph Java APIリファレンス』

Locatorは、Oracle Databaseの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 and Graphの手動によるインストールおよび削除

Spatial and Graphをインストールしたり、LocatorではなくSpatial and Graphに固有の機能を使用するには、Spatial and Graphのライセンス要件を満たす必要があります。Spatial and GraphおよびLocatorに関するライセンス情報は、『Oracle Databaseライセンス情報』を参照してください。

注意:

Oracle MultimediaをOracle Databaseとともにインストールして構成する場合は、Oracle Locatorもインストールされます。

LocatorおよびSpatial and Graphに関連する特定のインストールおよび削除操作を実行するために、次のスクリプトを使用できます。

- mddins.sqlは、Spatial and Graphを手動で削除し、Locatorのみを残します(したがって、Locatorのみがインストールされている状態です)。これにより、Locatorで使用可能な機能のみを使用することができ、Spatial and Graphでのみ使用可能な機能は使用できなくなります。

- mdinst.sqlは、Spatial and Graphを手動でインストールするため、Spatial and GraphおよびLocatorで使用可能なすべての機能を使用できます。

Locatorの機能のみを使用する必要があるにもかかわらず、Spatial and Graphがすでにインストールされている場合は、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 and Graphを使用できる必要がある場合は、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 複雑な空間問合せの例

この付録では、「リファレンス情報」のリファレンスの章に示した例より複雑な問合せの例について説明します。SDO_WITHIN_DISTANCE、SDO_NNなど、Spatial and Graphアプリケーションで頻繁に使用される演算子を中心に説明します。

この付録の内容は、Spatial and Graphユーザーのサポートおよびトレーニングを行うオラクル社の担当者からの情報に基づいています。Oracle Spatial and Graphトレーニング・コースでは、ここで示す例の多くに加えて、さらに他の例および説明を提供しています。

この付録に示す例を使用する前に、「概念および使用方法」および「リファレンス情報」に示した関連する演算子またはファンクションの使用方法およびリファレンス情報を理解してください。

この付録の主な項目は、次のとおりです。

- 例で使用する表

- SDO_WITHIN_DISTANCEの例

- SDO_NNの例

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 高速道路から一定距離内に存在するすべての都市の検索

例C-1では、州間高速道路I170から15マイル以内に存在するすべての都市を検索します。

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 都市から一定距離内に存在するすべての高速道路の検索

例C-2では、Tampa市から15マイル以内に存在するすべての州間高速道路を検索します。

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 Examples

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へのコール内のみで有効です。

「パーティション空間索引の使用」の例5-1も参照してください。

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

例C-3では、州間高速道路I170に最も近い5都市と、高速道路からそれらの各都市までの距離(マイル)を距離順に戻します。

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-4では、例C-3の検索を拡張して、1990年の人口が特定数を超える都市を戻すように結果を制限しています。ここでは、1990年の人口が30万人を超える州間高速道路I170に最も近い5都市、各都市の1990年の人口、および高速道路からそれらの各都市までの距離(マイル)を距離順に戻します。

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

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

Javaシェープファイル・コンバータは、Oracle Spatial and GraphおよびLocatorで使用するために、ESRIシェープファイルをOracle Database表に変換します。シェープファイル・コンバータは、Oracle Spatial and GraphのJavaベースのシェープファイル・クラスであるAdapterShapefileJGeomとSampleShapefileToJGeomFeatureを使用して、シェープファイルを直接データベース表にロードします(属性列にはOracleと同等の.dbfデータ型を、ジオメトリ列にはSDO_GEOMETRYデータ型を使用します)。

シェープファイルをデータベースにロードするには、この付録で説明するとおりにコンバータを使用します。(Adapterクラスを使用して、シェープファイルをSDO_GEOMETRYデータ型またはJGeometryデータ型に変換する独自のアプリケーションとインタフェースを作成することもできますが、この処理は、このマニュアルの範囲を超えています。シェープファイル関連のクラスについては、Oracle Spatial and Graphの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|-sn db_service_name -u db_username -d db_password -t db_table -f shapefile_name [-r srid] [-i table_id_column_name][-n start_id] [-g db_geometry_column] [-x max_x,min_x] [-y max_y,min_y] [-o tolerance] [-k keyword_table] [-a append][-c commit_int] [-v println_int]

パラメータ

-h: 既存のOracle Databaseがあるホスト・マシン

-p: ホスト・マシンのポート(1521など)

-s: ホスト・マシンのSID (データベース名)

-sn: ホスト・マシン上のサービス名(-snを使用する場合は、-sを指定しません)

-u: データベース・ユーザー

-d: データベース・ユーザーのパスワード

-t: 変換済シェープファイルの表名

-f: 入力シェープファイルのファイル名(拡張子の有無を問わない)

-r: 座標系の有効なOracle SRID (不明の場合は0を使用)

-i: 一意の数値IDの列名(必要な場合)

-n: -iパラメータで指定した列の開始ID

-g: 優先させるSDO_GEOMETRY列名

-x: X次元の境界(不明の場合は-180,180を使用)

-y: Y次元の境界(不明の場合は-90,90を使用)

-o: メタデータのロード許容差フィールド(xおよびy) (指定しない場合、許容差フィールドは0.05)

-k: KEYWORDという列にOracleの予約語を含んでいる表名

-a: 既存の表へのシェープファイル・データの追加

-c: コミット間隔(デフォルトでは、1000回の変換ごとおよび最後にコミットが発生)

-v: Println間隔(デフォルトでは、10回の変換ごとに表示)

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

次の例では、シェープファイル・コンバータを使用して、shapes.shpという名前のファイルを、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

E ルーティング・エンジン管理

注意:

この付録は、ルーティング・エンジンを管理する必要のある上級ユーザー向けです。ほとんどのルーティング・ユーザーは対象ではありません。

「ルーティング・エンジン」で説明した概念と手法をよく理解していることを想定します。

Oracle Spatial and Graphルーティング・エンジンでは、サブプログラムを使用してルーティング・データの管理を処理します。道路データのパーティション化、道路データを使用したネットワーク・データ・モデル(NDM)ネットワークの構築、トラック輸送および右左折制限のユーザー・データの生成、ルーティング・エンジン・データとユーザー・データのダンプと検証を行うサブプログラムがあります。

この項には次のトピックが含まれます:

- 管理操作のロギング

- ネットワーク・データ・モデル(NDM)ネットワーク管理

- ルーティング・エンジン・データ

- ユーザー・データ

- その他のファンクションおよびプロシージャ

E.1 管理操作のロギング

ルーティング・エンジンでは、すべての管理ファンクションが指定したログ・ファイルまたはデフォルト・ログ・ファイルに記録されます。すべての管理ログは、Oracleディレクトリ・オブジェクトSDO_ROUTER_LOG_DIRに記述されるディレクトリに書き込まれます。

SDO_ROUTER_LOG_DIRディレクトリが存在する必要があります。MDSYSとルーティング・エンジン・スキーマの両方に、PL/SQLとJavaの両方からこのディレクトリを読み書きするための権限が必要です。

次の各項はロギング管理操作に関連します。

- CREATE_SDO_ROUTER_LOG_DIRプロシージャ

- VALIDATE_SDO_ROUTER_LOG_DIRプロシージャ

E.1.1 CREATE_SDO_ROUTER_LOG_DIRプロシージャ

構文:

SDO_ROUTER_PARTITION.CREATE_SDO_ROUTER_LOG_DIR(
ROUTER_SCHEMA IN VARCHAR2,
NEW_DIR_PATH  IN VARCHAR2 DEFAULT NULL);

ディレクトリ・オブジェクトを作成し、他のデータベース・ユーザーに権限を付与するには、Oracle権限を持つアカウントからCREATE_SDO_ROUTER_LOG_DIRプロシージャを実行する必要があります。このプロシージャはルーティング・エンジンおよびMDSYSスキーマに権限を付与するため、これらのスキーマからは実行できません。

ROUTER_SCHEMAパラメータを指定する必要があり、ルーティング・エンジン・データを含む有効なスキーマである必要があります。

NEW_DIR_PATHパラメータはオプションのパラメータです。ディレクトリ・パスが指定されていない場合は、有効なSDO_ROUTER_LOG_DIR Oracleディレクトリがデータベースにすでに存在する必要があります。そうでない場合は、例外が発生します。ディレクトリ・パスが指定されている場合は、新しいSDO_ROUTER_LOG_DIR Oracleディレクトリが作成されます。SDO_ROUTER_LOG_DIRがすでに定義されている場合は、新しい定義で古い定義が置換されます。

ディレクトリの作成後、PL/SQLとJavaの両方からの読取り/書込みアクセス権がルーティング・エンジンとMDSYSスキーマに付与されます。

以前のバージョンのルーティング・エンジンでは、ユーザーはディレクトリの作成と権限の付与に個別のステップを実行しました。これは推奨されなくなりました。現在は、ルーティング・エンジンに必要なOracleディレクトリを管理するにはCREATE_SDO_ROUTER_LOG_DIRプロシージャの使用が推奨されます。

E.1.2 VALIDATE_SDO_ROUTER_LOG_DIRプロシージャ

構文:

SDO_ROUTER_PARTITION.VALIDATE_SDO_ROUTER_LOG_DIR(
LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log');

VALIDATE_SDO_ROUTER_LOG_DIRプロシージャは、ルーティング・エンジンとMDSYSスキーマの両方から実行する必要があります。

LOG_FILE_NAMEパラメータは、開いて書込みを試行するログ・ファイルの名前です。名前を指定するか、デフォルトのログ・ファイルsdo_router_partition.logを使用できます。

ログ・ファイルが存在しない場合は、SDO_ROUTER_LOG_DIRディレクトリに作成されて開かれます。ログ・ファイルが存在する場合は、それが再び開かれます。検証プロシージャは、PL/SQLとJavaの両方からログ・ファイルへの書込みを試行し、ログ・ファイルを閉じます。

ディレクトリが存在しない場合、またはPL/SQL、Java、あるいはその両方がログ・ファイルへの書込みに失敗した場合は、例外がスローされます。

E.2 ネットワーク・データ・モデル(NDM)ネットワーク管理

Oracle Routing Engineには、ルート・リクエストを処理し、レスポンスを生成するために、ルーティング・エンジン・データに基づいて構築されたOracle Spatial and Graphネットワーク・データ・モデル(NDM)ネットワークが必要です。

次の各項はNDMネットワーク管理操作に関連します。

- CREATE_ROUTER_NETWORKプロシージャ

- DELETE_ROUTER_NETWORKプロシージャ

「ネットワーク作成例」では、ルーティング・エンジンで使用するサンプルNDMネットワークの作成手順を説明します。

E.2.1 CREATE_ROUTER_NETWORKプロシージャ

構文:

SDO_ROUTER_PARTITION.CREATE_ROUTER_NETWORK(
LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log',
NETWORK_NAME IN VARCHAR2 := 'ROUTER_NETWORK');

CREATE_ROUTER_NETWORKプロシージャは、ルーティング・エンジンOracle Data Format (ODF)データを含むルーティング・エンジン・スキーマから実行する必要があります。

LOG_FILE_NAMEパラメータは、ネットワーク作成時に書き込まれるログ・ファイルの名前です。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ネットワークの作成を独自のログ・ファイルに記録するか、デフォルトのパーティション化ログ・ファイルsdo_router_partition.logに書き込むかを選択できます。

NETWORK_NAMEパラメータでは、作成されるネットワークの名前を指定します。ネットワークの名前はユーザーの判断で決定します。明確化のために、国コードとデータ・バージョンを名前に含めることをお薦めします。たとえば、2012年第1四半期にリリースされた北米データの場合、適切なネットワーク名はROUTER_NA_Q112です。

すでに存在するネットワークの名前を使用してネットワークを作成すると、古いネットワークが新しいネットワークで置換されます。これはお薦めしません。最初に古いネットワークを削除してから(DELETE_ROUTER_NETWORKプロシージャを使用)、新しいネットワークを作成する必要があります。

E.2.2 DELETE_ROUTER_NETWORKプロシージャ

構文:

SDO_ROUTER_PARTITION.DELTE_ROUTER_NETWORK(
LOG_FILE_NAME    IN VARCHAR2 := 'sdo_router_partition.log',
NETWORK_NAME    IN VARCHAR2 := 'ROUTER_NETWORK',
LOG_DELETE    IN BOOLEAN DEFAULT TRUE);

DELETE_ROUTER_NETWORKプロシージャは、ルーティング・エンジン・スキーマから実行する必要があり、ネットワーク名パラメータに一致するネットワークがスキーマに存在する必要があります。

LOG_FILE_NAMEパラメータは、ネットワーク削除時に書き込まれるログ・ファイルの名前です。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ネットワークの削除を独自のログ・ファイルに記録するか、デフォルトのパーティション化ログ・ファイルsdo_router_partition.logに書き込むかを選択できます。

NETWORK_NAMEパラメータは、削除されるネットワークの名前です。この名前のネットワークが存在しない場合は、例外がスローされ、エラー・メッセージがログ・ファイルに書き込まれます。

LOG_DELETEパラメータは、削除操作がログ・ファイルに記録されるかどうかを制御します。このパラメータは、主にデバッグ目的で使用します。

E.2.3 ネットワーク作成例

この項では、ルーティング・エンジンで使用するサンプルNDMネットワークの作成手順を説明します。

1. ルーティング・エンジン・スキーマのルーティング・エンジン・ログ・ディレクトリを検証します。SDO_ROUTER_LOG_DIRが存在し、適切な権限を持っている必要があります。ルーティング・エンジン・スキーマにログインし、次の文を実行します。

EXECUTE SDO_ROUTER_PARTITION.VALIDATE_ROUTER_LOG_DIR(
'validate_log.log');

検証が正常に完了すると、validate_log.logファイルに次のメッセージが含まれます。

[INFO] PLSQL logging OK (ROUTER_SCHEMA)
[INFO] Java logging OK (ROUTER_SCHEMA)
[INFO] PLSQL logging OK (MDSYS)
[INFO] Java logging OK (MDSYS)

2. MDSYSスキーマのルーティング・エンジン・ログ・ディレクトリを検証します。SDO_ROUTER_LOG_DIRが存在し、適切な権限を持っている必要があります。MDSYSスキーマにログインし、手順1と同じ文を実行します。

3. ルーティング・エンジン・スキーマで、次の問合せを使用して、既存のネットワークの名前を検索します。

SELECT SUBSTR(view_name, 0, LENGTH(view_name)-7) Network_Name
FROM user_views
WHERE view_name LIKE '%PBLOB$';

結果が戻されない場合は、手順5に進みます。次のような結果が戻された場合は、次の手順に進み、新しいネットワークを作成する前にネットワークを削除します。

NETWORK_NAME
------------
<any-network-name>

4. DELETE_NETWORKプロシージャを使用して、既存のネットワークを削除します。たとえば、既存のネットワーク名がROUTER_NA_Q112の場合は、次のようになります。

EXECUTE SDO_ROUTER_PARTITION.DELETE_ROUTER_NETWORK(
'delete_net.log', 'ROUTER_NA_Q112');

削除が正常に完了すると、delete_net.logファイルに次のメッセージが含まれます。

INFO: deleting the Routeserver network: ROUTER_NA_Q112

5. CREATE_ROUTER_NETWORKプロシージャを使用して、新しいネットワークを作成します。次に例を示します。

EXECUTE SDO_ROUTER_PARTITION.CREATE_ROUTER_NETWORK(
'create_net.log', 'ROUTER_NA_112');

作成操作が正常に完了すると、create_net.logファイルに次のメッセージが含まれます。

INFO: creating the Routeserver network: ROUTER_NA_Q112
INFO: rebuild edge table statistics
creating views
generating metadata

E.3 ルーティング・エンジン・データ

ルーティング・エンジンでは、ルーティング・エンジン・データとユーザー・データを使用します。ルーティング・エンジン・データは、EDGE、NODE、SIGN_POSTおよびPARTITION表に格納されます。

ルーティング・エンジン・データは、道路ネットワークをノードとエッジの方向付きグラフとしてモデル化します。パーティション化により、この道路ネットワークが2**N (2N)個のサブグラフ(ローカル・パーティション)と1つの高速道路パーティションに分割されます。道路ネットワークのノードはトポロジによりパーティション化されるため、各ローカル・パーティションには同じ数のノードが含まれます。ネットワーク内の各ノードは、1つのパーティションだけに必ず存在します。エッジは、1つのパーティションに完全に含まれる内部エッジまたは2つのパーティションのブリッジ(境界エッジ)にすることができます。パーティションはデータベースにBLOBとして格納されるため、キャッシュから簡単に読取りおよび削除できます。これにより、ルーティング・エンジンは道路ネットワーク全体がメモリーになくても動作できます。

パーティション1からNのローカル・パーティションは、すべてほぼ同じサイズです。ローカル・パーティションは、ルートの計算時に必要に応じてキャッシュに読み込まれます。これらのパーティションは、キャッシュが一杯になるまでキャッシュに残り、キャッシュが一杯になると、最も使用頻度の低いパーティションがスワップ・アウトされて、現在のルートの計算に必要なパーティション領域を解放します。

パーティション0 (ゼロ)は高速道路パーティションであり、2つの点でローカル・パーティションと異なります。

- 道路ネットワークのトポロジ・パーティションではありません。高速道路情報のみを含む、道路ネットワークのサブグラフです。このため、高速道路パーティションはローカル・パーティションよりはるかに大きくなります。

- ルーティング・エンジンの起動時にキャッシュに読み込まれ、常駐します。

道路ネットワークは3つのフェーズでパーティション化されます。最初のフェーズではデータをパーティション化し、必要なパーティションの数と、どのパーティションにノードおよびエッジが含まれるかを計算します。2番目のフェーズでは、これらのパーティションをBLOBに変換し、これらをデータベースに書き込みます。最後のフェーズでは、ルーティング・エンジン・ネットワークを再構築し、ユーザー・データをパーティション化し、ユーザー・データBLOBをデータベースに書き込みます。

ルーティング・エンジン・データはバージョン管理されます。パーティション化の第3フェーズ中に、ルーティング・エンジン・バージョンがSDO_ROUTER_DATA_VERSION表に書き込まれ、このデータ・セットのデータ・バージョンになります。別のルーティング・エンジン・スキーマで使用するためにデータ・セットがエクスポートされる場合、この新しいルーティング・エンジンのバージョンはデータ・セットのデータ・バージョンと互換である必要があります。

ルーティング・エンジン・データは、Oracle Data Format (ODF)でデータ・ベンダーによって提供され、すでにパーティション化されています。一般に、顧客がデータを再パーティション化する必要はありません。ただし、異なるパーティション・サイズのパフォーマンス・テストやデータ・セットのマージを行う場合など、ルーティング・エンジン・データを再パーティション化することが必要な場合もあります。

注意:

ルーティング・エンジン・データの再パーティション化は、時間とリソースを非常に要する操作です。使用されるハードウェアによっては、北米やEUなどの大きなデータ・セットの再パーティション化の実行に1日以上かかることも少なくありません。

この項には次のトピックが含まれます:

- PARTITION_ROUTERプロシージャ

- CLEANUP_ROUTERプロシージャ

- DUMP_PARTITIONSプロシージャ

- VALIDATE_PARTITIONSプロシージャ

- GET_VERSIONプロシージャ

- ルーティング・エンジン・データの例

E.3.1 PARTITION_ROUTERプロシージャ

構文:

SDO_ROUTER_PARTITION.PARTION_ROUTER(
LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log',
MAX_V_NO      IN NUMBER DEFAULT 10000,
DRIVING_SIDE  IN VARCHAR2 := 'R',
NETWORK_NAME  IN VARCHAR := 'ROUTER_NETWORK',
MAX_MEMORY    IN NUMBER := 1.75,
CLEANUP       IN BOOLEAN DEFAULT TRUE,
USE_SECUREFILES           IN BOOLEAN DEFAULT TRUE,
GENERATE_11G_RESTRICTIONS IN BOOLEAN DEFAULT TRUE);

PARTITION_ROUTERプロシージャは、ルーティング・エンジンOracle Data Formatデータを含むルーティング・エンジン・スキーマから実行する必要があります。このプロシージャは、道路ネットワークをパーティション化し、ルーティング・エンジン・データをBLOB形式で含んだPARTITION表を作成します。

LOG_FILE_NAMEパラメータでは、ルーティング・エンジンのパーティション化時に書き込まれるログ・ファイルの名前を指定します。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ユーザーは、ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.logを使用するかを選択できます。

MAX_V_NOパラメータでは、1つのパーティション内で許可される最大ノード数を指定します。NODE表には、少なくとも(MAX_V_NO+1)のノードが存在する必要があります。

DRIVING_SIDEパラメータは、レガシー・パラメータです。その用途は、リリース11gの右左折制限を生成することだけです。有効値はR (右側)とL (左側)です。NETWORK_NAMEパラメータでは、パーティション化の際に作成されるルーティング・エンジン・ネットワークの名前を指定します。

MAX_MEMORYパラメータでは、パーティション化プロセスで使用できる最大Javaヒープ・サイズをGB単位で指定します。ほとんどのデータ・セットではデフォルト値の1.75Gで十分です。このパラメータは、標準よりも大幅に小さいまたは大幅に大きいデータ・セットをパーティション化する場合にのみ調整する必要があります。

CLEANUPパラメータはデバッグに使用されます。デフォルトでは、ルーティング・エンジン・データのパーティション化中に作成されるすべての中間表がクリーンアップされます。パーティション化中に問題が発生する場合は、これらの表をそのまま残す(CLEANUP=>FALSEを指定する)と、かなりのデバッグ情報を提供できます。

USE_SECUREFILESパラメータでは、ルーティング・エンジンのBLOBをBASICFILEまたはSECUREFILE形式で作成できます。SECUREFILEフォーマットの使用をお薦めします。

GENERATE_11G_RESTRICTIONSパラメータでは、リリース11gの右左折制限データの生成を制御します。Oracle Databaseリリース11gでは、基本的な右左折制限が実装され、PARTITION表に格納されました。Oracle Databaseリリース12cでは、右左折制限が拡張され、ユーザー・データ表ROUTER_TURN_RESTRICTION_DATAに格納されます。データ・プロバイダがまだリリース11g Route Serverを使用しているユーザーにリリース12cでパーティション化されたデータを提供できるようにするために、両方のタイプの右左折制限がデフォルトで生成されます。リリース12c Route Server用にOracleリリース12cでデータを再パーティション化する場合は、このパラメータをFALSEに設定できます。

E.3.2 CLEANUP_ROUTERプロシージャ

構文:

SDO_ROUTER_PARTITION.CLEANUP_ROUTER(
ALL_TABLES IN BOOLEAN DEFAULT TRUE);

CLEANUP_ROUTERプロシージャは、ルーティング・エンジンの状態をリセットして、すべての表および索引が適切な順序になり、すべての中間表が削除されるようにします。これは、パーティション化が失敗した場合、またはCLEANUPフラグがFALSEに設定されたパーティション化が正常に完了した場合に役立ちます。

ALL_TABLESパラメータでは、リセットする対象を制御します。FALSEに設定されている場合、ルーティング・エンジンは安定した状態にリセットされますが、中間表はデバッグ目的で残されます。これはパーティション化が失敗した場合に役立つことがあります。TRUEに設定されている場合、ルーティング・エンジンは安定した状態にリセットされ、パーティション化で使用されたすべての中間表が削除されます。これは、CLEANUPパラメータをFALSEに設定して実行されたPARTITION_ROUTERプロシージャが正常に終了した後のクリーンアップに役立つことがあります。

E.3.3 DUMP_PARTITIONSプロシージャ

構文:

DUMP_PARTITIONS(
LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log',
START_PID     IN NUMBER DEFAULT 0,
END_PID       IN NUMBER DEFAULT -1,
VERBOSE       IN BOOLEAN DEFAULT FALSE);

DUMP_PARTITIONSプロシージャは、ルーティング・エンジン・データ・パーティションBLOBの内容をダンプします。このプロシージャは、BLOBをアンパックし、データを書式設定してログ・ファイルに書き込みます。このプロシージャを1回実行して、単一のパーティションまたは連続するパーティション範囲をダンプできます。この範囲はSTART_PIDからEND_PIDまでと定義されます。デフォルトでは、すべてのパーティションがダンプされます。連続するパーティション範囲を1回のコールでダンプすることはできません。

LOG_FILE_NAMEパラメータは、ルーティング・エンジンのパーティションをダンプする際に書き込まれるログ・ファイルの名前です。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.logに書き込むことができます。

START_PIDパラメータは、最初にダンプするパーティションのIDです。デフォルトのSTART_PIDは0です。START_PIDはEND_PID以下である必要があります。

END_PIDパラメータは、ダンプする最後のパーティションのIDです。デフォルトのEND_PIDは-1で、これはデータ・セット内の最大のパーティションIDに変換されます。開始と終了のPID値が等しい場合は、単一のパーティションがダンプされます。END_PIDがSTART_PIDよりも小さい場合は、ログにエラー・メッセージが書き込まれます。

VERBOSEパラメータでは、どのデータがダンプされるかを制御します。デフォルト値のFALSEでは、ノードとエッジの数およびBLOBのサイズを含む、パーティション情報のサマリーがダンプされます。このパラメータをTRUEに設定した場合は、サマリーに加えて、パーティション内のすべてのノードおよびエッジを説明する情報がすべてダンプされます。

E.3.4 VALIDATE_PARTITIONSプロシージャ

構文:

VALIDATE_PARTITIONS(
LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log',
START_PID     IN NUMBER DEFAULT 0,
END_PID       IN NUMBER DEFAULT -1,
VERBOSE       IN BOOLEAN DEFAULT FALSE);

VALIDATE_PARTITIONSプロシージャでは、ルーティング・エンジン・データ・パーティションBLOBの内容を検証します。大きなデータセット内のすべてのパーティションの検証は実行に時間がかかる場合がありますが、これはすべてのパーティション内のすべてのバイトを読み取ってパーティションをルーティングに使用する準備ができていることを確認するための最も速い方法です。検証を実行する必要があるのは、パーティションに問題があると疑われる場合のみです。検証が実行される場合は、VERBOSEフラグをFALSEに設定してすべてのパーティションで初期検証を実行することをお薦めします。問題が見つかった場合は、VERBOSEをtrueに設定し、問題のパーティションに対して検証を再実行してください。

LOG_FILE_NAMEパラメータは、ルーティング・エンジンのデータ・パーティションを検証する際に書き込まれるログ・ファイルの名前です。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.logに書き込むことができます。

START_PIDパラメータは、最初に検証するパーティションのIDです。デフォルトのSTART_PIDは0です。START_PIDはEND_PID以下である必要があります。

END_PIDパラメータは、検証する最後のパーティションのIDです。デフォルトのEND_PIDは-1で、これはデータ・セット内の最大のパーティションIDに変換されます。開始と終了のPID値が等しい場合は、単一のパーティションが検証されます。END_PIDがSTART_PIDよりも小さい場合は、ログにエラー・メッセージが書き込まれます。

VERBOSEパラメータでは、検証メッセージの詳細度を制御します。デフォルト値のFALSEでは、パーティションの検証が成功したか失敗したかがログに記録されます。このパラメータがTRUEに設定されている場合は、BLOBの各要素の検証がログに記録されます。

E.3.5 GET_VERSIONプロシージャ

構文:

GET_VERSION(
LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log');

GET_VERSIONプロシージャは、SDO_ROUTER_DATA_VERSION表を問い合せてルーティング・エンジン・データのバージョンを取得し、結果をログ・ファイルに書き込みます。(別の方法として、SQLを使用してSDO_ROUTER_DATA_VERSION表を問い合わせることもできます。)

LOG_FILE_NAMEパラメータは、ルーティング・エンジン・データのバージョンが書き込まれるログ・ファイルの名前です。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.logに書き込むことができます。

E.3.6 ルーティング・エンジン・データの例

この項には、次の例が記載されています。

- 小さいデータ・セットのパーティション化

- 完全データ・セットのパーティション化

- パーティションの内容のダンプ

- パーティションの内容の検証

- ルーティング・エンジン・データのバージョンの問合せ

E.3.6.1 小さいデータ・セットのパーティション化

例E-1に、小さいデータ・セットのパーティション化を示します。この例のデータ・セットは、San Franciscoの中心から半径100マイルの道路ネットワーク・データです。このデータ・セットには、約520,000個のノードと1,200,00個のエッジが含まれます。ルーティング・エンジン・データをパーティション化するには、ルーティング・エンジン・スキーマから文を実行します。

例E-1 小さいデータ・セットのパーティション化

EXECUTE SDO_ROUTER_PARTITION.PARTITION_ROUTER(
'sdo_router_partition.log', 1000, 'R',
'ROUTER_SF_NET', .75, FALSE, FALSE, FALSE);

******** Beginning SDO Router partitioning
** Schema: ROUTER_SF_SCHEMA
** Logfile location:/scratch/logs/sdo_router_partition.log
** Nodes per partition: 1000
** Driving side: R
** Router network name: ROUTER_SF_NET
** Max JVM Memory Size: .75GB (805306368 bytes)
** Cleanup temporary files: FALSE
** BLOBs stored in BASICFILE format
** Generating 11g turn restrictions: FALSE
[This header is followed by extensive logging of the partitioning process.]

この例では、1,025個のパーティション、1個の高速道路パーティションおよび1,024個のローカル・パーティションが生成されます。パーティション当たり平均516個のノードがあります。走行側が設定されますが、リリース11gの右左折制限はリクエストされていないため使用されません。Javaの最大ヒープ・サイズは、このような小さいデータ・セットに十分な4分の3GBに設定されます。パーティションBLOBはBasicfile形式で書き込まれ、パーティション化の完了時に中間表はクリーンアップされていません。

パーティション化で残された中間表をクリーンアップするには、次のように入力します。

EXECUTE SDO_ROUTER_PARTITION.CLEANUP_ROUTER()

E.3.6.2 完全データ・セットのパーティション化

例E-2に、完全データ・セットのパーティション化を示します。この例のデータ・セットは、北米の道路ネットワーク全体です。このデータ・セットには、約3,000万個のノードと7,400万個のエッジが含まれます。ルーティング・エンジン・データをパーティション化するには、ルーティング・エンジン・スキーマから文を実行します。

例E-2 完全データ・セットのパーティション化

EXECUTE SDO_ROUTER_PARTITION.PARTITION_ROUTER(
'sdo_router_partition.log, 32000, 'R', 'ROUTER_NA_NET');

******** Beginning SDO Router partitioning
** Schema: ROUTER_NA_SCHEMA
** Logfile location:/scratch/logs/sdo_router_partition.log
** Nodes per partition: 32000
** Driving side: R
** Router network name: ROUTER_NA_NET
** Max JVM Memory Size: 1.75GB (1879048192 bytes)
** Cleanup temporary files: TRUE
** BLOBs stored in SECUREFILE format
** Generating 11g turn restrictions: TRUE
[This header is followed by extensive logging of the partitioning process.]
++ Partitioning a data set of this size is time and resource intensive ++

この例では、1,025個のパーティション、1個の高速道路パーティションおよび1,024個のローカル・パーティションが生成されます。パーティション当たり平均29,443個のノードがあります。走行側は"右側"に設定され、リクエストされたOracle 11g右左折制限の生成に使用されます。デフォルトのJavaヒープ・サイズの1.75GBが使用されます。すべてのルーティング・エンジン・データおよびユーザー・データBLOBはSECUREFILE形式で格納され、すべての中間表はパーティション化が正常終了した後にクリーンアップされます。

E.3.6.3 パーティションの内容のダンプ

例E-3に、San Franciscoデータ・セットからの、デフォルトのVERBOSE値(FALSE)が設定されたパーティション0から3のダンプを示します。BLOBサイズは、高速道路パーティションとローカル・パーティションとで異なります。高速道路パーティションは完全に自己包含であるため、アウトバウンド・エッジはないことにも注意してください。ローカル・パーティションには、他のローカル・パーティションに接続する出発エッジがあります。

例E-3 パーティションの内容のダンプ(VERBOSE = FALSE)

EXEC SDO_ROUTER_PARTITION.DUMP_PARTITIONS(
'dump_part0-3.log', 0, 3);

******** Beginning partition dump
** Logfile location: /scratch/logs/dump_part0-3.log
** Routeserver data version: 12.1.0.2.1
** Start partition id: 0
** End partition id: 3
** Verbose mode: FALSE
[INFO] Starting dump of partition 0
Number of Nodes: 19392
Number of Nonboundary Edges: 22706
Number of Outgoing Boundary Edges: 0
Number of Incoming Boundary Edges: 0
Stored Partition ID: 0
Blob Length: 1748332

[INFO] Starting dump of partition 1
Number of Nodes: 516
Number of Nonboundary Edges: 1190
Number of Outgoing Boundary Edges: 49
Number of Incoming Boundary Edges: 49
Stored Partition ID: 1
Blob Length: 81372

[INFO] Starting dump of partition 2
Number of Nodes: 516
Number of Nonboundary Edges: 1099
Number of Outgoing Boundary Edges: 68
Number of Incoming Boundary Edges: 68
Stored Partition ID: 2
Blob Length: 78388
[INFO] Starting dump of partition 3
Number of Nodes: 516
Number of Nonboundary Edges: 1101
Number of Outgoing Boundary Edges: 60
Number of Incoming Boundary Edges: 60
Stored Partition ID: 3
Blob Length: 77756

例E-4 パーティションの内容のダンプ(VERBOSE = TRUE)

例E-4に、San Franciscoデータ・セットからの、VERBOSEがTRUEに設定されたパーティション8のダンプを示します。アウトバウンド・エッジは終了するパーティションIDをログに記録し、インバウンド・エッジは開始するパーティションIDをログに記録します。

EXEC SDO_ROUTER_PARTITION.DUMP_PARTITIONS(
'dump_part8.log', 8, 8, TRUE);

******** Beginning partition dump
** Logfile location:/scratch/logs/dump_part8.log
** Routeserver data version: 12.1.0.2.1
** Start partition id: 8
** End partition id: 8
** Verbose mode: TRUE
[INFO] Starting dump of partition 8
Number of Nodes: 517
Number of Non-boundary Edges: 1145
Number of Outgoing Boundary Edges: 37
Number of Incoming Boundary Edges: 37
Stored Partition ID: 8
Blob Length: 77957

Node information for partition 8:
Node ID/X/Y/Highway: 84096388/-120.50809/37.98399/false
In Edges(3): -120862233, -120862227, 120862232
Out Edges(3): -120862232, 120862227, 120862233
*******************************
Node ID/X/Y/Highway: 84098023/-120.4882/37.99961/true
In Edges(3): -127829801, -120428259, 776737023
Out Edges(3): -776737023, 120428259, 127829801
*******************************
*** Node information for the other 515 nodes...

Non-boundary Edge information for partition 8:
Internal Edges(1145):
Edge ID/Start Node ID/End Node ID: 910681077/942981443/206194644
Length/Speed Limit/Function Class: 130.3/5/5
*******************************
Edge ID/Start Node ID/End Node ID: -105461005/206194651/206194644
Length/Speed Limit/Function Class: 229.93/11/5
*******************************
*** Edge information for the other 1143 internal edges...

Outbound Boundary Edges(37):
Edge ID/Start Node ID/End Node ID: -724019630/253265936/810705655
End Node Partition ID/Length: 7/511.07
Speed Limit/Function Class: 26/2
*******************************
Edge ID/Start Node ID/End Node ID: -105462459/252152310/206193109
End Node Partition ID/Length: 7/814.68
Speed Limit/Function Class: 11/5
*******************************
*** Edge information for the other 35 outbound boundary edges...

Inbound Boundary Edges(37):
Edge ID/Start Node ID/End Node ID: 724019630/810705655/253265936
Start Node Partition ID/Length: 7/511.07
Speed Limit/Function Class: 26/2
*******************************
Edge ID/Start Node ID/End Node ID: 105462459/206193109/252152310
Start Node Partition ID/Length: 7/814.68
Speed Limit/Function Class: 11/5
*******************************
*** Edge information for the other 35 inbound boundary edges...

E.3.6.4 パーティションの内容の検証

例E-5に、デフォルトのVERBOSE値(FALSE)が設定された、データ・セット内のすべてのパーティションの内容の検証を示します。

例E-5 パーティションの内容の検証(VERBOSE = FALSE)

EXEC SDO_ROUTER_PARTITION.VALIDATE_PARTITIONS(
'validate_all_partitions.log');

******** Beginning partition validation
** Logfile location:/scratch/logs/validate_all_partitions.log
** Routeserver data version: 12.1.0.2.1
** Start partition id: 0
** End partition id: 1024
** Verbose mode: FALSE
[INFO] Starting validation of partition 0
[INFO] Starting validation of partition 1
[INFO] Starting validation of partition 2
…
[INFO] Starting validation of partition 1022
[INFO] Starting validation of partition 1023
[INFO] Starting validation of partition 1024
[INFO] Partition validation complete

例E-6 パーティションの内容の検証(VERBOSE = TRUE)

例E-6に、VERBOSEがTRUEに設定されたパーティション7および8の内容の検証を示します。

EXEC SDO_ROUTER_PARTITION.VALIDATE_PARTITIONS(
'validate_part7-8.log', 7, 8, TRUE);

******** Beginning partition validation
** Logfile location: /scratch/logs/validate_part7-8.log
** Routeserver data version: 12.1.0.2.1
** Start partition id: 7
** End partition id: 8
** Verbose mode: TRUE
[INFO] Starting validation of partition 7
Header node count: OK
Header edge count: OK
BLOB partition id: OK
BLOB length: OK
BLOB node count: OK
BLOB information for 516 nodes: OK
BLOB information for 1154 internal edges: OK
BLOB information for 66 outbound boundary edges: OK
BLOB information for 65 inbound boundary edges: OK

[INFO] Starting validation of partition 8
Header node count: OK
Header edge count: OK
BLOB partition id: OK
BLOB length: OK
BLOB node count: OK
BLOB information for 517 nodes: OK
BLOB information for 1145 internal edges: OK
BLOB information for 37 outbound boundary edges: OK
BLOB information for 37 inbound boundary edges: OK

[INFO] Partition validation complete

E.3.6.5 ルーティング・エンジン・データのバージョンの問合せ

例E-7では、ルーティング・エンジン・データのバージョン番号を問い合せて、結果をログ・ファイルに書き込みます。

SELECT * FROM sdo_router_data_version;

例E-7 ルーティング・データのバージョンの問合せ

EXEC SDO_ROUTER_PARTITION.GET_VERSION('version.log');

INFO: Routeserver data version: 12.1.0.2.1

かわりに、次のSQL問合せを使用して、ルーティング・エンジン・データのバージョンを取得することもできます。

E.4 ユーザー・データ

ユーザー・データは、道路ネットワークに対する制限をモデル化します。現在、ルーティング・エンジンには、制限付き運転マヌーバ(右左折制限)ユーザー・データおよびトラック輸送ユーザー・データの2種類のユーザー・データがあります。

ユーザー・データはバージョン管理されます。ユーザー・データがパーティション化されると、SDO_ROUTER_DATA_VERSION表のルーティング・エンジン・データ・バージョンがユーザー・データBLOBに格納されます。ユーザー・データがキャッシュに格納される場合、ユーザー・データ・パーティションに格納されるバージョンは、SDO_ROUTER_DATA_VERSION表のバージョンと互換である必要があります。

ユーザー・データのパーティション化は、一般に非常に高速な操作です。ルーティング・エンジン・データのパーティション化の一部として実行するか、ルーティング・エンジン・データがすでにパーティション化されている場合はスタンドアロン操作として実行できます。どちらの場合も、ユーザー・データのパーティション化ではパーティション化されたルーティング・エンジン・データがガイドとして使用され、それにより、パーティション化処理が大幅に迅速化されます。

ユーザー・データのパーティション数は、ルーティング・エンジン・データのパーティション数以下になります。ルーティング・エンジン・データ・パーティションに関連付けられているユーザー・データがない場合、ユーザー・データ・パーティションは生成されません。ユーザー・データ・ローカル・パーティションは、関連するルーティング・エンジン・データ・パーティションとともにキャッシュに出し入れされます。ユーザー・データの高速道路パーティションは、ルーティング・エンジンの起動時にロードされ、キャッシュ内に保持されます。

リリース12cでは、制限付き運転マヌーバ・ユーザー・データはデータ・ベンダーが提供するルーティング・エンジンODFデータの一部です。トラック輸送ユーザー・データはルーティング・エンジンODFデータとともに提供されず、別途購入する必要があります。リリース12c以降のルーティング・エンジンの起動時には、使用可能なユーザー・データが検出されて使用されます。リリース12cより前のすべてのバージョンのルーティング・エンジンでは、ユーザー・データが検出されず、ルーティング・エンジン・データのみ使用してルートが計算されます。

この項には次のトピックが含まれます:

- 制限付き運転マヌーバ・ユーザー・データ

- CREATE_TURN_RESTRICTION_DATAプロシージャ

- DUMP_TURN_RESTRICTION_DATAプロシージャ

- CREATE_TRUCKING_DATAプロシージャ

- DUMP_TRUCKING_DATAプロシージャ

- ユーザー・データの例

E.4.1 制限付き運転マヌーバ・ユーザー・データ

制限付き運転マヌーバは、右折を許可しない単純な右左折制限など、あるエッジから別のエッジへの移動を許可しないという単純なものにすることができます。または、開始エッジ、中央分離帯上のエッジおよび反対方向へ向かう道路上のエッジがある、中央分離帯で分割されている道路上でのUターン制限など、多くのエッジが関係する非常に複雑なマヌーバの場合もあります。

ルーティング・エンジンでは、制限付き運転マヌーバに3つの表を使用します。最初の2つの表ROUTER_NAV_STRANDおよびROUTER_CONDITIONには、制限付きマヌーバ・ユーザー・データを作成するためのRAWデータが含まれます。

最後の表ROUTER_TURN_RESTRICTION_DATAには、BLOB形式で格納された、パーティション化された制限付きマヌーバ・ユーザー・データが含まれます。制限付きマヌーバ・データをパーティション化すると、そのデータを同じパーティションのルーティング・エンジン・データとともにキャッシュに出し入れできます。

リリース12cでは、制限付き運転マヌーバ・ユーザー・データはデータ・ベンダーが提供するODFデータの一部です。リリース12cのルーティング・エンジンの起動時に、右左折制限ユーザー・データが検出されて使用されます。リリース11cのルーティング・エンジンが起動された場合、ユーザー・データは検出されず、ルーティング・エンジン・データのみ使用してルートが計算されます。

制限付き運転マヌーバ・ユーザー・データはODFデータ・セットの一部であるため、すでにパーティション化されています。一般に、このユーザー・データを再パーティション化する理由はありません。ただし、ルーティング・エンジン・データが再パーティション化された場合は、ユーザー・データも再パーティション化されます。制限付き運転マヌーバ・ユーザー・データを再作成することで、ルーティング・エンジン・データを再パーティション化しなくても、右左折制限データを再パーティション化することもできます。

E.4.2 CREATE_TURN_RESTRICTION_DATAプロシージャ

構文:

SDO_ROUTER_PARTITION.CREATE_TURN_RESTRICTION_DATA(
LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log',
CLEANUP       IN BOOLEAN DEFAULT TRUE);

CREATE_TURN_RESTRICTION_DATAプロシージャは、制限付き運転マヌーバRAWデータ表ROUTER_NAV_STRANDおよびROUTER_CONDITIONを含むルーティング・エンジン・スキーマから実行する必要があります。このプロシージャは、制限付き運転マヌーバ・データをパーティション化し、BLOB形式の右左折制限ユーザー・データを含むROUTER_TURN_RESTRICTION_DATA表を作成します。右左折制限ユーザー・データの作成時にはデータ・バージョンへのアクセスが必要となるため、SDO_ROUTER_DATA_VERSION表がルーティング・エンジン・スキーマ内に存在する必要があります。

LOG_FILE_NAMEパラメータは、右左折制限生成時に書き込まれるログ・ファイルの名前です。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ユーザーは、ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.logを使用するかを選択できます。

CLEANUPパラメータはデバッグに使用されます。デフォルトでは、右左折制限の生成中に作成されるすべての中間表がクリーンアップされます。右左折制限の生成に問題がある場合は、これらの表をそのまま残すと、かなりのデバッグ情報を提供できます。

E.4.3 DUMP_TURN_RESTRICTION_DATAプロシージャ

構文:

SDO_ROUTER_PARTITION.DUMP_TURN_RESTRICTION_DATA(
LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log',
START_PID     IN NUMBER DEFAULT 0,
END_PID       IN NUMBER DEFAULT -1,
DUMP_SOFT_RESTRICTIONS IN BOOLEAN DEFAULT FALSE);

DUMP_TURN_RESTRICTION_DATAプロシージャでは、右左折制限ユーザー・データ・パーティションBLOBの内容がダンプされます。このプロシージャは、BLOBをアンパックし、データを書式設定してログ・ファイルに書き込みます。このプロシージャを1回コールして、単一のパーティションまたは連続するパーティション範囲をダンプできます。この範囲はSTART_PIDからEND_PIDまでと定義されます。デフォルトでは、すべてのパーティションがダンプされます。連続するパーティション範囲を1回のコールでダンプすることはできません。

LOG_FILE_NAMEパラメータでは、右左折制限ユーザー・データのパーティションをダンプする際に書き込まれるログ・ファイルの名前を指定します。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.logに書き込むことができます。

START_PIDパラメータは、最初にダンプするパーティションのIDです。デフォルトのSTART_PIDは0です。START_PIDはEND_PID以下である必要があります。

END_PIDパラメータは、ダンプする最後のパーティションのIDです。デフォルトのEND_PIDは-1で、これはデータ・セット内の最大のパーティションIDに変換されます。開始と終了のPID値が等しい場合は、単一のパーティションがダンプされます。END_PIDがSTART_PIDよりも小さい場合は、ログにエラー・メッセージが書き込まれます。

DUMP_SOFT_RESTRICTIONSパラメータは、右左折制限データのダンプ方法を制御します。3つ以上のエッジがある右左折制限では、ソフト制限は右左折制限を部分的に説明する一連のエッジです。これはデバッグ・パラメータであり、一般にはデフォルト値のFALSEに設定したままにする必要があります。

E.4.4 CREATE_TRUCKING_DATAプロシージャ

構文:

SDO_ROUTER_PARTITION.CREATE_TRUCKING_DATA(
LOG_FILE_NAME IN VARCHAR2 := ' sdo_router_partition.log',
CLEANUP       IN BOOLEAN DEFAULT TRUE);

CREATE_TRUCKING_DATAプロシージャは、RAWトラック輸送データ表ROUTER_TRANSPORTを含むルーティング・エンジン・スキーマから実行する必要があります。このプロシージャでは、トラック輸送データをパーティション化し、BLOB形式のトラック輸送ユーザー・データを含むROUTER_TRUCKING_DATA表を作成します。トラック輸送ユーザー・データの作成時にはデータ・バージョンへのアクセスが必要となるため、SDO_ROUTER_DATA_VERSION表がルーティング・エンジン・スキーマ内に存在する必要があります。

LOG_FILE_NAMEパラメータは、トラック輸送制限の生成時に書き込まれるログ・ファイルの名前です。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ユーザーは、ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.logを使用するかを選択できます。

CLEANUPパラメータはデバッグに使用されます。デフォルトでは、トラック輸送制限の生成中に作成されるすべての中間表がクリーンアップされます。トラック輸送制限の生成に問題がある場合は、これらの表をそのまま残すと、かなりのデバッグ情報を提供できます。

E.4.5 DUMP_TRUCKING_DATAプロシージャ

構文:

SDO_ROUTER_PARTITION.DUMP_TRUCKING_DATA(
LOG_FILE_NAME    IN VARCHAR2 := ' sdo_router_partition.log',
START_PID        IN NUMBER DEFAULT 0,
END_PID          IN NUMBER DEFAULT -1,
SKIP_UNSUPPORTED IN BOOLEAN DEFAULT TRUE);

DUMP_TRUCKING_DATAプロシージャでは、トラック輸送制限ユーザー・データ・パーティションBLOBの内容がダンプされます。このプロシージャは、BLOBをアンパックし、データを書式設定してログ・ファイルに書き込みます。このプロシージャを1回コールして、単一のパーティションまたは連続するパーティション範囲をダンプできます。この範囲はSTART_PIDからEND_PIDまでと定義されます。デフォルトでは、すべてのパーティションがダンプされます。連続するパーティション範囲を1回のコールでダンプすることはできません。

LOG_FILE_NAMEパラメータでは、トラック輸送制限ユーザー・データのパーティションをダンプする際に書き込まれるログ・ファイルの名前を指定します。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.logに書き込むことができます。

START_PIDパラメータは、最初にダンプするパーティションのIDです。デフォルトのSTART_PIDは0です。START_PIDはEND_PID以下である必要があります。

END_PIDパラメータは、ダンプする最後のパーティションのIDです。デフォルトのEND_PIDは-1で、これはデータ・セット内の最大のパーティションIDに変換されます。開始と終了のPID値が等しい場合は、単一のパーティションがダンプされます。END_PIDがSTART_PIDよりも小さい場合は、ログにエラー・メッセージが書き込まれます。

SKIP_UNSUPPORTEDパラメータは、トラック輸送制限データのダンプ方法を制御します。ユーザー・データには、将来の作業用に含まれ、現在はサポートされていないいくつかの制限が含まれます。SKIP_UNSUPPORTEDをTRUE (デフォルト)に設定すると、現在サポートされているトラック輸送制限のみダンプされます。SKIP_UNSUPPORTEDをFALSEに設定すると、すべてのトラック輸送制限がダンプされます。

E.4.6 ユーザー・データの例

この項では、ユーザー・データに関連する操作の例を示します。これらの例のデータ・セットは、San Franciscoの中心から半径100マイルの道路ネットワーク・データです。このデータ・セットには、約520,000個のノードと、トラック輸送制限のある82,000個のエッジと制限付き運転マヌーバのある30,000個のエッジを含む1,200,00個のエッジが含まれます。

この項には、次の例が記載されています。

- 右左折制限ユーザー・データの再構築

- すべてのハード右左折制限ユーザー・データBLOBのダンプ

- トラック輸送ユーザー・データの再構築

- トラック輸送ユーザー・データ制限のダンプ

E.4.6.1 右左折制限ユーザー・データの再構築

例E-8では、右左折制限ユーザー・データを再構築します。クリーンアップはFALSEに設定されているため、右左折制限ユーザー・データの再構築に使用される中間表は削除されません。(これらの表を削除するには、SDO_ROUTER_PARTITION.CLEANUP_ROUTERプロシージャを実行します。)

例E-8 右左折制限ユーザー・データの再構築

EXEC SDO_ROUTER_PARTITION.CREATE_TURN_RESTRICTION_DATA(
'rebuild_turn_restriction_data.log', FALSE);

******** Begin generation of turn restriction user data
** Logfile location: /scratch/logs/rebuild_turn_restriction_data.log
[INFO] Generating turn restriction user data for 995 partitions, data version (12.1.0.1.2)

[INFO] SQL String: CREATE TABLE new_turn_restriction_data(partition_id NUMBER, num_edges NUMBER, turn_restriction_data BLOB) LOB(turn_restriction_data) STORE AS (STORAGE (INITIAL 512K NEXT 128K MAXEXTENTS UNLIMITED) CHUNK 32768 NOCACHE NOLOGGING)
[INFO] ---- Writing 573 edges for partition 0
[INFO] ---- Writing 16 edges for partition 1
[INFO] ---- Writing 10 edges for partition 2

*** Note that partition 3 contains no turn restriction user data

[INFO] ---- Writing 8 edges for partition 4
[INFO] ---- Writing 23 edges for partition 5
[INFO] ---- Writing 39 edges for partition 6
*** Many more Writing partition messages
[INFO] ---- Writing 4 edges for partition 1023
[INFO] ---- Writing 11 edges for partition 1024

INFO: creating the final turn restriction user data table
INFO: create index rtrud_p_idx on router_turn_restriction_data table
******** Completed generation of turn restriction user data

E.4.6.2 すべてのハード右左折制限ユーザー・データBLOBのダンプ

例E-9では、すべてのハード右左折制限ユーザー・データBLOBをダンプします。(ソフト制限のダンプでは、はるかに大きなダンプ・ファイルが生成され、右左折制限制約で問題をデバッグする場合にのみ役立ちます。)

例E-9 すべてのハード右左折制限ユーザー・データBLOBのダンプ

EXEC SDO_ROUTER_PARTITION.DUMP_TURN_RESTRICTION_DATA(
'dump_all_turn_restrictions.log');

******** Beginning turn restriction dump
** Logfile location: /scratch/logs/dump_all_turn_restrictions.log
** Routeserver data version: 12.1.0.1.2                  (A)
** Start partition id: 0
** End partition id: 1024
** Dumping soft restrictions: FALSE

Starting turn restriction dump for partition 0, blob length 19956 bytes
Data version: 12.1.0.1.2
Partition 0 has 573 edges with turn restrictions       (B)
edge id -937799058 has 1 turn restrictions
Restriction Type/Attributes: Hard/None
AppliesTo(959): Trucks, Through Traffic, Taxies, Motorcycles,
Emergency Vehicles, Delivery Vehicles, Carpools,
Buses, Automobiles
Subpath(1): 24501308
*******************************
edge id -936524317 has 2 turn restrictions           (C)
Restriction Type/Attributes: Hard/None
AppliesTo(943): Trucks, Through Traffic, Taxies, Motorcycles,
Delivery Vehicles, Carpools, Buses, Automobiles
Subpath(1): -724922777
-------
Restriction Type/Attributes: Hard/None
AppliesTo(959): Trucks, Through Traffic, Taxies, Motorcycles,
Emergency Vehicles, Delivery Vehicles, Carpools,
Buses, Automobiles
Subpath(1): 936524317
*******************************
edge id -932185370 has 2 turn restrictions
Restriction Type/Attributes: Hard/None
AppliesTo(1023): All Vehicles
Subpath(1): 836074944
-------
Restriction Type/Attributes: Hard/None
AppliesTo(1023): All Vehicles
Subpath(1): -24638792
*******************************
edge id 834380593 has 1 turn restrictions            (D)
Restriction Type/Attributes: Hard/None
AppliesTo(943): Trucks, Through Traffic, Taxies, Motorcycles,
Delivery Vehicles, Carpools, Buses, Automobiles
Subpath(4): 112065672, -112065610, -112008660, -834380591
*******************************

*** Dump of the remaining restrictions in Partition 0
Starting turn restriction dump for partition 1, blob length 520 bytes
Partition 1 has 16 edges with turn restrictions        (E)
edge id -806530190 has 1 turn restrictions
Restriction Type/Attributes: Hard/None
AppliesTo(703): Trucks, Taxies, Motorcycles, Emergency Vehicles,
Delivery Vehicles, Carpools, Buses, Automobiles
Subpath(1): 120865027
*******************************
*** Dump of the remaining restrictions in Partition 1 through 1024

例E-9では、次のことを示しています。

- (A): 標準ユーザー・ダンプ・ヘッダーには、ログ・ファイルの場所とダンプで使用されるパラメータが含まれます。SDO_ROUTER_DATA_VERSION表から問合せされるルーティング・エンジン・データ・バージョンも含まれます。このデータ・バージョンは、パーティション0のBLOBのヘッダーに格納されるデータ・バージョンと一致する必要があります。

- (B): パーティション0のBLOBのBLOBヘッダー・セクションでは、すべての右左折制限ユーザー・データのBLOBヘッダーに、パーティションID、バイト単位でのBLOBの長さ、および右左折制限のあるエッジ数が含まれます。パーティション0のBLOBヘッダーにはユーザー・データ・バージョンも含まれます。このバージョンは、SDO_ROUTER_DATA_VERSION表にあるデータ・バージョンと一致する必要があります。

- (C): エッジ-936524317の右左折制限のダンプでは、このエッジには2つの単純な右左折制限が関連付けられています。どちらの制限も、エッジ-936524317へのサブパスで単一エッジからの移動を許可しない単純な右左折制限です。制限が適用される車両の違いにも注意してください。最初の制限は緊急車両に適用されませんが、2つ目の制限は緊急車両にも適用されます。

- (D): エッジ834380593には1つの右左折制限のみありますが、記述されている制限は単純な右左折よりもはるかに複雑です。エッジ834380593の直前のサブパスがエッジ-834380591で開始するサブパスと一致し、エッジ-112008660、-112065610、112065672を厳密にこの順序で通過する場合、マヌーバは許可されません。現在のエッジへのサブパスに、リストされているサブパス・エッジの1つがない場合、またはサブパス内のエッジの順序が異なる場合、マヌーバは許可されます。

- (E): ローカル・パーティションのBLOBヘッダーでは、すべての右左折制限ユーザー・データのBLOBヘッダーに、パーティションID、バイト単位でのBLOBの長さ、および右左折制限のあるエッジ数が含まれます。

E.4.6.3 トラック輸送ユーザー・データの再構築

例E-10では、トラック輸送ユーザー・データを再構築します。クリーンアップではデフォルト値のTRUEが使用されるため、右左折制限ユーザー・データの再構築に使用される表は構築完了時に削除されます。

例E-10 トラック輸送ユーザー・データの再構築

EXEC SDO_ROUTER_PARTITION.CREATE_TRUCKING_DATA(
'rebuild_trucking_data.log');
******** Begin generation of trucking user data
** Logfile location:/scratch/logs/rebuild_trucking_data.log
[INFO] Generating trucking user data for 974 partitions,
data version (12.1.0.1.2)                                (A)

[INFO] SQL String: CREATE TABLE new_trucking_data
(partition_id NUMBER, num_edges NUMBER, trucking_data BLOB) LOB(trucking_data) STORE AS (STORAGE (INITIAL 512K NEXT 128K MAXEXTENTS UNLIMITED) CHUNK 32768 NOCACHE NOLOGGING)

INFO: creating the final trucking user data table
INFO: create index rtud_p_idx on router_trucking_data table
******** Completed generation of trucking user data

例E-10では、次のことを示しています。

- (A): ルーティング・エンジン・データの1,023個のローカル・パーティションに比べて、974パーティションのトラック輸送ユーザー・データしかないことに注意してください(例E-9の出力を参照)。パーティションがユーザー・データ出力にない場合、これは関連するルーティング・エンジン・データ・パーティションのトラック輸送データがないことを意味します。

E.4.6.4 トラック輸送ユーザー・データ制限のダンプ

例E-11は、トラック輸送ユーザー・データの制限をダンプします。この例では、パーティション0から25のサポートされる制限をダンプします。ダンプでは、Main Typeは制限のタイプ、Subtypeは制限の理由、Valueは制限を測定する手段です。たとえば、高さ制限がMain Typeの場合、SubtypeはBridgeやTunnelまたはUnknownになり、Valueは高さと幅を表すメートルや重量を表すメートル・トンなどの測定単位(常にメートル単位)になります。Valueは、物理的に測定できない制限(法定制限など)を表す0にすることもできます。

例E-11 トラック輸送ユーザー・データ制限のダンプ

EXEC SDO_ROUTER_PARTITION.DUMP_TRUCKING_DATA(
'dump_trucking_data0-25.log', 0, 25);

******** Beginning trucking data dump
** Logfile location: /scratch/logs/dump_trucking_data0-25.log
** Routeserver data version: 12.1.0.1.2                  (A)
** Start partition id: 0
** End partition id: 25

Starting truck data dump for partition 0, blob length 1019048 bytes
Data version: 12.1.0.1.2
Partition 0 has 21808 edges with truck data            (B)
edge id -939054768 has 4 truck restrictions
Main Type(10): Physical Height Restriction
Sub-type(99): Unknown
Value: 4.65
*******************************
edge id -854677940 has 3 truck restrictions
Main Type(10): Physical Height Restriction
Sub-type(1): Bridge
Value: 4.67
*******************************
edge id -929320205 has 4 truck restrictions          (C)
Main Type(10): Physical Height Restriction
Sub-type(2): Tunnel
Value: 4.27
-------
Main Type(20): Physical Weight Restriction
Sub-type(99): Unknown
Value: 4.08
*******************************

*** The rest of the trucking data for edges in partition 0

Starting truck data dump for partition 2, blob length 296 bytes
(D)

Starting truck data dump for partition 3, blob length 3272 bytes
Partition 3 has 91 edges with truck data
edge id -811551125 has 1 truck restrictions
Main Type(50): Legal Restriction
Sub-type(22): All trailers forbidden
Value: 0.0
*******************************
edge id 105439903 has 1 truck restrictions
Main Type(20): Physical Weight Restriction
Sub-type(99): Unknown
Value: 9.07
*******************************
edge id -105491810 has 1 truck restrictions          (E)
Main Type(50): Legal Restriction
Sub-type(21): All trucks forbidden
Value: 0.0
*******************************
edge id -105449802 has 1 truck restrictions
Main Type(50): Legal Restriction
Sub-type(26): All trucks forbidden except deliveries and residents
Value: 0.0
*******************************

*** The rest of the trucking data for edges in partitions 3 through 25

例E-11では、次のことを示しています。

- (A): 標準ユーザー・ダンプ・ヘッダーには、ログ・ファイルの場所とダンプで使用されるパラメータが含まれます。SDO_ROUTER_DATA_VERSION表から問合せされるルーティング・エンジン・データ・バージョンも含まれます。このデータ・バージョンは、パーティション0のBLOBのヘッダーに格納されるデータ・バージョンと一致する必要があります。

- (B): パーティション0のBLOBのBLOBヘッダー・セクションでは、すべての右左折制限ユーザー・データのBLOBヘッダーに、パーティションID、バイト単位でのBLOBの長さ、および右左折制限のあるエッジ数が含まれます。パーティション0のBLOBヘッダーにはユーザー・データ・バージョンも含まれます。このバージョンは、SDO_ROUTER_DATA_VERSION表にあるデータ・バージョンと一致する必要があります。
エッジ-939054768は4つのトラック輸送制限を持つものとしてリストされていますが、1つのみリストされています。他に3つの制限がありますが、現在はルーティング・エンジンでサポートされていません。これらの制限を表示するには、ダンプのリクエスト時にSKIP_UNSUPPORTEDをFALSEに設定します。

エッジ-929320205では、Height制限はBridgeが理由です。エッジ-939054768にもHeight制限がありますが、それを説明するSubtypeは指定されていません。

- (C): これは複数の制限があるエッジの例です。この場合、高さ制限と重量制限の両方がメートルおよびメートル・トンで表現されます。

- (D): ここでは次の2点に注意する必要があります。(1) パーティション1はありません。これはパーティション1のトラック輸送ユーザー・データがないことを意味します。(2) パーティション・ヘッダーはパーティション2に対して出力されていますが、データはダンプされていません。これは、パーティション2のトラック輸送制限があるにもかかわらず、ルーティング・エンジンが現在そのいずれもサポートしていないことを意味します。

- (E): これは、モデル化できる2種類の法定制限の例です。(1) エッジ-105491810は、排他的な法定制限の例です。エッジにはすべてのトラックを禁止する法定制限があります。(2) エッジ-105449802は、含まれる法定制限の例です。エッジにはトラックを除外する法定制限がありますが、配送トラックおよび居住者用トラックの例外もリストされています。

E.5 その他のファンクションおよびプロシージャ

次のファンクションおよびプロシージャは、パーティション化プロセス中にルーティング・エンジンによって内部使用されます。Oracleサポートによって指示されないかぎり、これらを直接コールしないでください。

- GET_PID: パーティション化中にパーティションIDを取得するために使用されます。

- MIN_EIGENVECTOR: パーティション化中に使用される固有ベクトルです。

- GATHER_TABLE_STATS: 非推奨。表および索引統計の再構築に使用されます。

- すべてのELOCATION_*: パーティション化で使用されるJavaコードのラッパーです。

- BUILD_TURN_RESTRICTIONS: 非推奨。リリース11gの右左折制限の構築に使用されます。

- GET_EDGE_INFO: ルートの運転方向を構築するためのエッジ情報を収集します。

- GET_GEOMETRY_INFO: ルートの線ストリング・ジオメトリを構築します。

用語集

領域

次元空間の範囲または区域。

属性

点、線および領域などの地理的フィーチャの特性を定義する記述情報。

属性データ

多次元データについての追加記述情報(たとえば、クラス、または橋や道路などのフィーチャ)を規定する非次元データ。

バッチ・ジオコーディング

1つの表から多数のレコードを同時にジオコードする操作。「ジオコーディング」も参照。

境界

1. 次元範囲の下限および上限。数値によって表現される。

2. ポリゴンのアウトラインを表現する線。

デカルト座標系

n次元空間内の1点の位置を、点から基準面までの距離によって定義する座標系。距離は、任意の基準面と交差する平面に対して平行に測定される。「座標系」も参照。

コロケーション

複数の空間オブジェクトが同じ位置または非常に近い位置に存在すること。

CONTAINS

1つのオブジェクトが他のオブジェクトを包含し、内部のオブジェクトが外部のオブジェクトのどの境界にも接していない幾何学的関係。外部オブジェクトは内部オブジェクトを含む。「INSIDE」も参照。

凸型

対応付けられたジオメトリ・オブジェクトを完全に囲む単純な凸状のポリゴン。

座標

n次元座標系内の1点を一意的に定義する一連の値。

座標参照系

Spatial and Graphのドキュメントでは「座標系」と同義。座標参照系という用語は、European Petroleum Survey Group (EPSG)で広く使用されている。

座標系

n次元空間内の1点の位置を一意的に定義するための基準系。空間参照システム。「デカルト座標系」、「測地座標」、「投影座標」および「ローカル座標」も参照。

COVER

1つのオブジェクトが他のオブジェクトを包含し、内部のオブジェクトが外部のオブジェクトの境界に1つ以上の位置で接する幾何学的関係。

データ・ディクショナリ

データについての情報のリポジトリ。データ・ディクショナリには、データベース内のすべてのオブジェクトについてのリレーショナル情報が格納される。

データ変換

「変換」を参照。

次元データ

1つ以上の次元コンポーネントを持ち、複数の値によって記述されるデータ。

方向

LRSジオメトリ・セグメントの方向は、開始点から終了点で表される。ジオメトリ・セグメントの点の数は、常にセグメント方向に増加する。

非接続

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 and Graphで使用される空間問合せおよび空間結合を解決する問合せモデル。問合せを解決するには、固有のフィルタ処理(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 (ゼロ)要素 1

- 3D

- LRSファンクションの形式

- 測地データでの非サポート 1

- 空間オブジェクト

- ソリッド 1

- 表面 1

A

- ADD_PREFERENCE_FOR_OPプロシージャ 1

- 住所

- ジオコーディングのための表現 1

- アフィン変換

- 入力ジオメトリ 1

- AFFINETRANSFORMSプロシージャ 1

- 集計関数

- 説明 1

- リファレンス情報 1

- SDO_AGGR_CENTROID 1

- SDO_AGGR_CONCAT_LINES 1

- SDO_AGGR_CONVEXHULL 1

- SDO_AGGR_LRS_CONCAT 1

- SDO_AGGR_MBR 1

- SDO_AGGR_SET_UNION 1

- SDO_AGGR_UNION 1

- SDOAGGRTYPEオブジェクト・タイプ 1

- AGGREGATES_FOR_GEOMETRYファンクション 1

- AGGREGATES_FOR_LAYERファンクション 1

- エイリアス 1

- ALL_ANNOTATION_TEXT_METADATAビュー 1

- ALL_SDO_3DTHEMESビュー 1

- ALL_SDO_GEOM_METADATAビュー 1

- ALL_SDO_INDEX_INFOビュー 1

- ALL_SDO_INDEX_METADATAビュー 1

- ALL_SDO_SCENESビュー 1

- ALL_SDO_VIEWFRAMESビュー 1

- アルファ・シェイプ

- SDO_ALPHA_SHAPEファンクション 1

- ALTER INDEX文

- REBUILD句 1

- RENAME TO句 1

- 角度単位 1

- 注釈テキスト 1

- ANYINTERACT

- SDO_ANYINTERACT演算子 1

- 位相関係 1

- APPENDファンクション 1

- アプリケーションのサイズ(ハードウェア)要件 1

- 円弧

- 稠密化 1

- 測地データまたは変換での非サポート 1

- 領域 1

- 面積単位 1

- AVERAGE_MBRプロシージャ 1

- 平均最小境界矩形 1

B

- batch_route_request要素 1

- 一括ルート・リクエスト 1

- バッチ・モード・ルート・リクエスト

- 例 1

- バッチ・モード・ルート・レスポンス

- 例 1

- 一括ルート・リクエスト

- XML Schema定義 1

- 一括ルート・レスポンス

- XML Schema定義 1

- 方位

- 点 1

- 点から点への傾き 1

- BEARING_TILT_FOR_POINTSプロシージャ 1

- BIN_GEOMETRYファンクション 1

- BIN_LAYERプロシージャ 1

- ビニング

- spatial 1

- ビン

- 割当 1

- 計算 1

- tiled 1

- ブロック表

- テーマの取得 1

- 境界

- 領域 1

- 線ストリング 1

- 複数線ストリング 1

- ポリゴン 1

- 境界矩形

- minimum 1

- ボックス

- 最適化 1

- British Grid Transformation OSTN02/OSGM02 1

- バッファ領域 1

- 空間データのバルク・ロード 1

- ビジネス・ディレクトリ(YP)

- データ要件およびプロバイダ 1

- データ構造 1

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

- Spatial and Graphでのサポート 1

C

- デカルト座標 1 , 2

- 地図上のテキスト(注釈テキスト) 1

- 重心(中心) 1

- 中心

- SDO_AGGR_CENTROID集計ファンクション 1

- SDO_CENTROIDファンクション 1

- 円

- 近似するポリゴンの作成 1

- 測地データまたは投影での非サポート 1

- タイプ 1

- CIRCLE_POLYGONファンクション 1

- C言語

- 例(OCIの使用) 1

- CLIP_GEOM_SEGMENTファンクション 1

- CLIP_PC_FLATファンクション 1

- CLIP_PCファンクション 1

- CLIP_TINファンクション 1

- クリップ

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

- 閉じた行程(TSP) 1

- 最近点

- SDO_CLOSEST_POINTSプロシージャ 1

- COLOCATED_REFERENCE_FEATURESプロシージャ 1

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

- COLUMN_NAME (USER_SDO_GEOM_METADATA内) 1

- 列名

- 空間列名の制限事項 1

- 互換性 1

- 複雑な例

- 問合せ 1

- 複合要素 1

- 複合線ストリング 1 , 2

- 複合ポリゴン 1

- CONCAT_LINESファンクション 1

- CONCATENATE_GEOM_SEGMENTSファンクション 1

- 連結

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

- 単一線または複数線のジオメトリ 1

- LRSジオメトリ 1 , 2

- 凹型

- SDO_CONCAVEHULL_BOUNDARYファンクション 1

- SDO_CONCAVEHULLファンクション 1

- CONNECTED_GEOM_SEGMENTSファンクション 1

- 一貫性

- ジオメトリ・タイプが有効であるかどうかのチェック 1

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

- コンストラクタ

- SDO_GEOMETRYオブジェクト型 1

- CONTAINS

- SDO_CONTAINS演算子 1

- 位相関係 1

- 輪郭ジオメトリ

- 点群から作成 1

- CONVERSION_FACTOR列

- SDO_ANGLE_UNITS表 1

- SDO_AREA_UNITS表 1

- SDO_DIST_UNITS表 1

- CONVERT_3D_SRID_TO_2Dファンクション 1

- CONVERT_NADCON_TO_XMLプロシージャ 1

- CONVERT_NTV2_TO_XMLプロシージャ 1

- CONVERT_TO_LRS_DIM_ARRAYファンクション 1

- CONVERT_TO_LRS_GEOMファンクション 1

- CONVERT_TO_LRS_LAYERファンクション 1

- CONVERT_TO_STD_DIM_ARRAYファンクション 1

- CONVERT_TO_STD_GEOMファンクション 1

- CONVERT_TO_STD_LAYERファンクション 1

- CONVERT_UNITファンクション 1

- CONVERT_XML_TO_NADCONプロシージャ 1

- CONVERT_XML_TO_NTV2プロシージャ 1

- CONVERT3007TO3008ファンクション 1

- 変換

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

- 概略 1

- サブプログラム 1

- 凸型

- SDO_AGGR_CONVEXHULL集計ファンクション 1

- SDO_CONVEXHULLファンクション 1

- 座標次元

- ST_CoordDimメソッド 1

- 座標参照系

- 「座標系」を参照:

- 座標

- デカルト 1 , 2

- 測地 1 , 2 , 3

- 地理 1 , 2

- ローカル 1 , 2

- 投影 1 , 2

- 座標系

- 概念および使用方法 1

- Oracleの提供するデータ構造 1

- 例 1

- ローカル 1

- サブプログラムのリファレンス情報 1

- 測定単位のサポート 1

- ユーザー定義 1

- COVEREDBY

- SDO_COVEREDBY演算子 1

- 位相関係 1

- COVERS

- SDO_COVERS演算子 1

- 位相関係 1

- Spatial and Graphを使用するアプリケーションのCPU要件 1

- CREATE_CONCATENATED_OPプロシージャ 1

- CREATE_CONTOUR_GEOMETRIESファンクション 1

- CREATE_OBVIOUS_EPSG_RULESプロシージャ 1

- CREATE_PCプロシージャ 1

- CREATE_PREF_CONCATENATED_OPプロシージャ 1

- CREATE_PROFILE_TABLESプロシージャ 1

- CREATE_TINプロシージャ 1

- CREATE INDEX文 1

- createXMLTableIndexメソッド 1

- 作成

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

- サブプログラム 1

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

- CS_SRS表 1

- 今回のリリース

- 空間データのアップグレード 1

D

- データベース・リンク

- 空間索引が表で定義されている場合の非サポート 1

- データ・マイニング

- 空間

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

- 概念および使用方法 1

- ファンクションのリファレンス情報 1

- データ・モデル

- LRS 1

- データ型

- ジオコーディング 1

- spatial 1

- データ

- 測地 1 , 2

- MDSYS.SDO_DATUMS_OLD_FORMAT表 1

- MDSYS.SDO_DATUMS_OLD_SNAPSHOT表 1

- 変換 1

- dblink

- 空間索引が表で定義されている場合の非サポート 1

- DEFINE_GEOM_SEGMENTプロシージャ 1

- 定義

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

- DELETE_ALL_EPSG_RULESプロシージャ 1

- DELETE_OPプロシージャ 1

- DeleteCapabilitiesInfoプロシージャ 1

- deleteDomainInfoメソッド 1

- DeleteDomainInfoプロシージャ 1

- DeletePluginMapプロシージャ 1

- deleteRecordViewMapメソッド 1

- DeleteRecordViewMapプロシージャ 1

- デモ・ファイル

- Spatial and Graph Webサービス 1

- 円弧の稠密化 1

- DETERMINE_CHAINファンクション 1

- DETERMINE_DEFAULT_CHAINファンクション 1

- 直径

- SDO_DIAMETER_LINEファンクション 1

- SDO_DIAMETERファンクション 1

- 差

- SDO_GEOM.SDO_DIFFERENCEファンクション 1

- 次元(SDO_GTYPE)

- Get_Dimsメソッド 1

- Get_LRS_Dimメソッド 1

- DIMINFO (USER_SDO_GEOM_METADATA内) 1

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

- 連結結果 1

- disableVersioningメソッド 1

- 区分(ビニング)

- ビンを参照 1

- spatial 1

- DISJOINT

- 位相関係 1

- Spatial and Graphを使用するアプリケーションのディスク領域要件 1

- 距離

- SDO_NN_DISTANCE補助演算子 1

- WITHIN_DISTANCEファンクション 1

- 距離単位 1

- 分散トランザクション

- 空間索引の一貫性を確保する要件 1

- ドキュメントベース・フィーチャ・タイプ(WFS) 1

- ドメイン情報(CSW)

- 削除 1

- ドメイン(CSW)

- 情報の設定 1

- ジオメトリの簡略化に使用するDouglas-Peuckerアルゴリズム 1 , 2

- ダウングレード

- Oracle Spatialを以前のリリースのOracle Databaseにダウングレード 1

- DROP_DEPENDENCIESプロシージャ 1 , 2

- DROP_WORK_TABLESプロシージャ 1

- dropFeatureTypeメソッド 1

- DropFeatureTypeプロシージャ 1

- DropFeatureTypesプロシージャ 1

- DROP INDEX文 1

- dropRecordTypeメソッド 1

- dropXMLTableIndexメソッド 1

- 重複する頂点

- 削除 1

- DYNAMIC_SEGMENTファンクション 1

- 動的問合せウィンドウ 1

E

- EDGE表

- ルーティング・エンジンの使用 1 , 2

- 編集

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

- サブプログラム 1

- ELEM_INFO(SDO_ELEM_INFO属性) 1

- 要素

- ジオメトリからの抽出 1 , 2

- 戻されるジオメトリの要素の番号 1

- 戻されるジオメトリの頂点の数 1

- 楕円

- 近似するポリゴンの作成 1

- ELLIPSE_POLYGONファンクション 1

- 楕円体高 1 , 2

- 楕円体

- MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表 1

- MDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT表 1

- ユーザー定義型へのSDO_GEOMETRYオブジェクトの埋込み 1

- EnableDBTxnsプロシージャ 1

- enableVersioningメソッド 1

- ルートの目的地 1

- エンティティ関連(E-R)ダイアグラム

- EPSG表 1

- EPSG

- エンティティ関連(E-R)ダイアグラム 1

- 表名からOracle Spatial名へのマッピング 1

- Oracle SRIDのマッピング 1

- SRIDのOracle SRIDへのマッピング 1

- モデルとSpatialでの使用 1

- Spatialで使用されるデータセットのバージョン番号 1

- EQUAL

- SDO_EQUAL演算子 1

- 位相関係 1

- E-R(エンティティ関連ダイアグラム)

- EPSG表 1

- エラー・メッセージ

- ジオコーディング 1

- 空間 1

- ESRIシェープファイル

- 空間へのロード 1

- ESTIMATE_RTREE_INDEX_SIZEファンクション 1

- ETYPE(SDO_ETYPE値) 1

- European Petroleum Survey Group

- 「EPSG」を参照:

- 例

- バッチ・モード・ルート・リクエストおよびバッチ・モード・ルート・レスポンス 1

- C 1

- 複合問合せ 1

- 座標系 1

- 空間データの作成, 索引付けおよび問合せ 1

- Spatialの例のディレクトリ 1

- 線形参照システム(LRS) 1

- 様々なジオメトリ・タイプ(作成) 1

- OCI(Oracle Call Interface) 1

- PL/SQL 1

- ルート・リクエストおよびルート・レスポンス 1

- SQL 1

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

- エクスポート・ユーティリティ

- 空間索引および空間データ 1

- EXTENT_OFファンクション 1

- ポリゴンの外部の輪 1 , 3

- 外側のソリッド 1

- EXTRACT_ALLファンクション 1

- EXTRACT3Dファンクション 1

- EXTRACTファンクション 1

- extractSDOファンクション 1

- EXTRUDEファンクション 1

- 押出し

- 作成 1

F

- 機能

- 線形 1

- フィーチャ・タイプ

- 削除 1

- ユーザーへのアクセス権限の付与 1

- 公開 1

- ユーザーからのアクセス権限の取消し 1

- FILTER

- SDO_FILTER演算子 1

- SDO_JOINのFILTERマスク値 1 , 2

- FIND_GEOG_CRSファンクション 1

- FIND_LRS_DIM_POSファンクション 1

- FIND_MEASUREファンクション 1

- FIND_OFFSETファンクション 1

- FIND_PROJ_CRSファンクション 1

- FIND_SRIDプロシージャ 1

- 形式化された住所 1

- FROM_GML311GEOMETRYファンクション 1

- FROM_GMLGEOMETRYファンクション 1

- FROM_KMLGEOMETRYファンクション 1

- FROM_OGC_SIMPLEFEATURE_SRSファンクション 1

- FROM_USNGファンクション 1

- FROM_WKBGEOMETRYファンクション 1

- FROM_WKTGEOMETRYファンクション 1

- 錐台 1

- ファンクション索引

- SDO_GEOMETRYオブジェクト 1

- 関数

- 空間集計 1

- 近似処理による測地データでのサポート 1

G

- GC_ADDRESS_POINT_((lt))接尾辞((gt))表 1

- GC_AREA_((lt))接尾辞((gt))表 1

- GC_COUNTRY_PROFILE表 1

- GC_INTERSECTION_((lt))接尾辞((gt))表 1

- GC_PARSER_PROFILEAFS表 1

- GC_PARSER_PROFILES表 1

- GC_POI_((lt))接尾辞((gt))表 1

- GC_POSTAL_CODE_((lt))接尾辞((gt))表 1

- GC_ROAD_((lt))接尾辞((gt))表 1

- GC_ROAD_SEGMENT_((lt))接尾辞((gt))表 1

- GenCollectionProcsプロシージャ 1

- GEOCODE_ADDR_ALLファンクション 1

- GEOCODE_ADDRファンクション 1

- GEOCODE_ALLファンクション 1

- GEOCODE_AS_GEOMETRYファンクション 1

- GEOCODEファンクション 1

- ジオコーディング

- 概念 1

- データ要件 1

- データ型 1

- エラー・メッセージ 1

- 場所名から 1

- ジオコーディングの表に必要な索引 1

- 一致コード 1

- 一致モード 1

- 逆 1

- サブプログラムのリファレンス情報 1

- 使用方法 1

- ジオコーディング・リクエスト

- XML Schema定義 1

- ジオコーディング・レスポンス

- XML Schema定義 1

- 測地座標

- 円弧および円の非サポート 1

- 近似処理によってサポートされるファンクション 1

- サポート 1

- 測地データ 1 , 2

- 測地MBR 1

- 地理座標

- 「測地座標」を参照:

- Geography Markup Language(GML)

- ジオメトリの変換 1 , 2

- GEOM_SEGMENT_END_MEASUREファンクション 1

- GEOM_SEGMENT_END_PTファンクション 1

- GEOM_SEGMENT_LENGTHファンクション 1

- GEOM_SEGMENT_START_MEASUREファンクション 1

- GEOM_SEGMENT_START_PTファンクション 1

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

- クリップ 1

- 連結

- 集計 1 , 2

- 変換(概要) 1

- 変換(サブプログラム) 1

- 作成(サブプログラム) 1

- 定義 1

- 定義 1

- 方向 1

- 連結時の方向 1

- 編集(サブプログラム) 1

- 点の位置の確認 1

- オフセット 1

- 投影点 1

- 問合せ(サブプログラム) 1

- 再定義 1

- スケーリング 1

- 分割 1

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

- リファレンス情報 1

- ジオメトリ・タイプ

- データの制約 1

- Get_GTypeメソッド 1

- SDO_GTYPE 1

- GeoRaster

- アップグレード後の有効化 1

- gerRecordTypeIdメソッド 1

- GET_2D_FOOTPRINTファンクション 1

- Get_Dimsメソッド 1

- GET_EPSG_DATA_VERSIONファンクション 1

- Get_GTypeメソッド 1

- Get_LRS_Dimメソッド 1

- GET_MEASUREファンクション 1

- GET_NEXT_SHAPE_PT_MEASUREファンクション 1

- GET_NEXT_SHAPE_PTファンクション 1

- GET_PREV_SHAPE_PT_MEASUREファンクション 1

- GET_PREV_SHAPE_PTファンクション 1

- GET_PT_IDSファンクション 1

- Get_WKBメソッド 1

- Get_WKTメソッド 1

- GetFeatureTypeIdファンクション 1

- getIsXMLTableIndexCreatedメソッド 1

- GETNUMELEMファンクション 1

- GETNUMVERTICESファンクション 1

- GETNURBSAPPROXファンクション 1

- GetRecordTypeIdファンクション 1

- GETVERTICESファンクション 1

- GML(Geography Markup Language)

- ジオメトリの変換 1 , 2

- Google Maps

- 空間アプリケーションの使用に関する考慮事項 1

- grantFeatureTypeToUserメソッド 1

- GrantFeatureTypeToUserプロシージャ 1

- grantMDAccessToUserメソッド 1

- GrantMDAccessToUserプロシージャ 1

- grantRecordTypeToUserメソッド 1

- 重力に関係する高さ 1

- GTYPE(SDO_GTYPE属性)

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

- Get_Dimsメソッド 1

- Get_GTypeメソッド 1

- GET_LRS_Dimメソッド 1

H

- 空間アプリケーションのハードウェア要件 1

- height

- ellipsoidal 1

- 楕円体と非楕円体 1

- 重力に関係する高さ 1

I

- id属性

- ルート・リクエスト 1

- インポート・ユーティリティ

- 空間索引および空間データ 1

- 索引

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

- インデックス

- 作成

- クロススキーマ 1

- パラレル実行 1

- 空間索引の説明 1

- 空間索引付け機能の拡張 1

- SDO_GEOMETRYオブジエクトでのファンクション索引 1

- 空間索引統計収集のためのCREATE TABLEの付与 1

- パーティション化

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

- 再作成

- パラレル実行 1 , 2

- Rツリー

- 説明 1

- 作成前の要件 1

- サイズ(Rツリー) 1

- 索引構成表

- 空間索引を作成できない表 1 , 2

- INITファンクション 1 , 2

- INITIALIZE_INDEXES_FOR_TTSプロシージャ 1

- input_location要素 1

- InsertCapabilitiesInfoプロシージャ 1

- InsertDomainInfoプロシージャ 1

- InsertFtDataUpdatedプロシージャ 1

- InsertFtMDUpdatedプロシージャ 1

- 空間データの挿入

- PL/SQL 1

- InsertPluginMapプロシージャ 1

- InsertRecordViewMapプロシージャ 1

- InsertRtDataUpdatedプロシージャ 1

- InsertRtMDUpdatedプロシージャ 1

- INSIDE

- SDO_INSIDE演算子 1

- 位相関係 1

- インストール

- LocatorのOracle Multimedia要件 1

- INTEPRETATION(SDO_INTERPRETATION値) 1

- 相互作用

- ANYINTERACT 1

- 内部

- 領域 1

- INTERIOR_POINTファンクション 1

- ポリゴンの内部の輪 1 , 3

- 内側のソリッド 1

- ISO(国際標準化機構)

- 標準への空間の準拠 1

- 交差 1 , 2

- 共通部分

- GC_INTERSECTION_((lt))接尾辞((gt))表 1

- 逆フラット化 1 , 2

- IS_GEOM_SEGMENT_DEFINEDファンクション 1

- IS_MEASURE_DECREASINGファンクション 1

- IS_MEASURE_INCREASINGファンクション 1

- IS_SHAPE_PT_MEASUREファンクション 1

- ISO(国際標準化機構)

- 標準への空間の準拠 1

J

- SpatialのJava Application Programming Interface(API)

- WFSの管理 1

- 結合

- SDO_JOIN演算子 1

K

- Keyhole Markup Language (KML)

- FROM_KMLGEOMETRYファンクション 1

- TO_KMLGEOMETRYファンクション 1

- KML

- FROM_KMLGEOMETRYファンクション 1

- TO_KMLGEOMETRYファンクション 1

L

- レイヤー

- 変換 1

- コンテキストの検査 1

- layer_gtype

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

- 長さ

- SDO_LENGTHファンクション 1

- length_unit属性

- ルート・リクエスト 1

- 詳細のレベル(LOD)

- テーマでの確認 1

- 線

- ポリゴンの変換 1

- データ 1

- 長さ 1

- 線形フィーチャ 1

- 線形メジャー 1

- 線形参照システム(LRS)

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

- 測地データでの非サポート 1

- 概念および使用方法 1

- データ・モデル 1

- 例 1

- Get_LRS_Dimメソッド 1

- XおよびY次元に対する索引付けの制限 1

- LRS点 1

- セグメント 1

- サブプログラムのリファレンス情報 1

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

- 線ストリング

- 境界 1

- 複合 1 , 2

- 反転 1

- 自己交差 1

- LOAD_EPSG_MATRIXプロシージャ 1

- 空間データのロード 1

- ローカル座標 1 , 2

- ローカル座標系 1

- LOCALパーティション化

- 空間索引 1

- LOCATE_PTファンクション 1

- ルート・セグメントの位置 1

- 位置の予測 1

- Locator

- 手動によるインストール 1

- 詳細のレベル(LOD)

- テーマでの確認 1

- LRS

- 「線形参照システム(LRS)」を参照:

- LRS_INTERSECTIONファンクション 1

- LRS点 1

M

- MAKE_3Dファンクション 1

- MakeOpenLSClobRequestファンクション 1

- MakeOpenLSRequestファンクション 1

- MAP_EPSG_SRID_TO_ORACLEファンクション 1

- MAP_ORACLE_SRID_TO_EPSGファンクション 1

- 投影図

- MDSYS.SDO_PROJECTIONS_OLD_FORMAT表 1

- MDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT表 1

- 一致コード 1

- 一致モード 1

- 一致ベクトル(MatchVector属性)

- ジオコーディング 1

- max-corner値

- 3次元の矩形 1

- MBR

- 「最小境界矩形(MBR)」を参照:

- MDDATAアカウントおよびスキーマ 1

- mddins.sqlスクリプト 1

- mdinst.sqlスクリプト 1

- MDSYS.CS_SRS表 1

- MDSYS.MOVE_SDOプロシージャ 1

- MDSYS.SDO_ANGLE_UNITS表 1

- MDSYS.SDO_AREA_UNITSビュー 1

- MDSYS.SDO_CSパッケージ 1

- MDSYS.SDO_DATUMS_OLD_FORMAT表 1

- MDSYS.SDO_DATUMS_OLD_SNAPSHOT表 1

- MDSYS.SDO_DIST_UNITSビュー 1

- MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表 1

- MDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT表 1

- MDSYS.SDO_GCDRパッケージ 1

- MDSYS.SDO_GEOM_PATH_INFO型 1

- MDSYS.SDO_OLSパッケージ 1

- MDSYS.SDO_PROJECTIONS_OLD_FORMAT表 1

- MDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT表 1

- MDSYS.SDO_SAMパッケージ 1

- MDSYS.SDO_WFS_LOCKパッケージ 1

- MDSYS.SDO_WFS_PROCESSパッケージ 1 , 2

- MDSYSスキーマ

- 移行時に移行先データベースに存在することが必要 1

- MDXT_%objID%表 1

- 平均海水面(MSL) 1

- メジャー

- 移入 1

- リセット 1

- 反転 1

- 複数線ストリングおよび穴があるポリゴン 1

- MEASURE_RANGEファンクション 1

- MEASURE_TO_PERCENTAGEファンクション 1

- メジャー範囲 1

- メッセージ

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

- メソッド

- SDO_GEOMETRYオブジェクト型 1

- 移行 1 , 2

- 「アップグレード」も参照:

- min-corner値

- 3次元の矩形 1

- 最小境界円

- SDO_MBC_CENTERファンクション 1

- SDO_MBC_RADIUSファンクション 1

- SDO_MBCファンクション 1

- 最小境界矩形(MBR)

- AVERAGE_MBRプロシージャ 1

- EXTENT_OFファンクション 1

- 測地 1

- SDO_AGGR_MBR集計ファンクション 1

- SDO_MAX_MBR_ORDINATEファンクション 1

- SDO_MBRファンクション 1

- SDO_MIN_MBR_ORDINATEファンクション 1

- マイニング

- 「データ・マイニング」を参照:

- MIX_INFOプロシージャ 1

- MOVE_SDOプロシージャ 1

- MSL(平均海水面) 1

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

- 複数線ストリング

- 境界 1

- LRSメジャー値 1

- マルチマスター・レプリケーション

- SDO_GEOMETRYオブジェクト 1

- 複数のポリゴン 1

N

- NaC座標参照系 1

- NADCONグリッド

- Spatial XML形式からNADCON形式への変換 1

- Spatial XML形式への変換 1

- 名前の競合

- SQL Multimediaの実装による回避 1

- 名前付けに関する注意事項

- Spatialの表名および列名 1

- nav_strand 1

- ナビゲーション・ストランド(nav_strand) 1

- 最も近くにあるジオメトリ

- SDO_NN_DISTANCE演算子 1

- SDO_NN演算子 1

- 近隣の影響 1

- NODE表

- ルーティング・エンジンの使用 1 , 2 , 3

- 非楕円体高 1

- Non-Uniform Rational B-Spline (NURBS)曲線

- 例 1

- 法線ベクトル 1

- NTv2グリッド

- Spatial XML形式からNTv2形式への変換 1

- Spatial XML形式への変換 1

- NURBS曲線

- 例 1

- GETNURBSAPPROXファンクション 1

- Oracle Spatialのサポート 1

O

- オブジェクト・タイプ

- SDO_GEOMETRYオブジェクトの埋込み 1 , 2

- OCG(Open Geospatial Consortium)シンプル・フィーチャへの準拠 1

- OCI(Oracle Call Interface)の例 1

- オフセット

- FIND_OFFSETファンクション 1

- OFFSET_GEOM_SEGMENTファンクション 1

- オフセット設定

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

- OGC_XおよびOGC_Yファンクションの名前 1

- ON

- SDO_ON演算子 1

- 位相関係 1

- Open Geospatial Consortium(OCG)シンプル・フィーチャへの準拠 1

- OpenLS

- サブプログラムのリファレンス情報 1

- OPENLS_DIR_BUSINESS_CHAINS表 1

- OPENLS_DIR_BUSINESSES表 1

- OPENLS_DIR_CATEGORIES表 1

- OPENLS_DIR_CATEGORIZATIONS表 1

- OPENLS_DIR_CATEGORY_TYPES表 1

- OPENLS_DIR_SYNONYMS表 1

- 開いた行程(TSP) 1

- 演算子

- ORDEREDオプティマイザ・ヒント

- SDO_FILTER 1

- SDO_JOIN 1

- 概略 1

- パフォーマンスに関するガイドライン 1

- SDO_ANYINTERACT 1

- SDO_CONTAINS 1

- SDO_COVEREDBY 1

- SDO_COVERS 1

- SDO_EQUAL 1

- SDO_FILTER 1

- SDO_INSIDE 1

- SDO_JOIN 1

- SDO_NN 1

- SDO_NN_DISTANCE 1

- SDO_ON 1

- SDO_OVERLAPBDYDISJOINT 1

- SDO_OVERLAPBDYINTERSECT 1

- SDO_OVERLAPS 1

- SDO_POINTINPOLYGON 1

- SDO_RELATE 1

- SDO_TOUCH 1

- SDO_WITHIN_DISTANCE 1

- 最適化されたボックス 1

- 最適化された矩形

- 3次元 1

- 空間演算子を使用したオプティマイザ・ヒント(ORDERED)

- SDO_FILTER 1

- SDO_JOIN 1

- Oracle Call Interface(OCI)の例 1

- Oracle Database 10g

- Spatialのアップグレード 1

- Oracle Data Mining

- 空間分析およびマイニングの情報 1

- Oracle Locator

- 「Locator」を参照:

- Oracle Multimedia

- Locatorに必要な適切なインストール 1

- Oracle Workspace Manager

- WFSでの使用 1

- 空間演算子を使用したORDEREDオプティマイザ・ヒント

- SDO_FILTER 1

- SDO_JOIN 1

- Ordnance Surveyグリッド変換 1

- 方向付きの点

- 図および例 1

- 正標高 1

- OSTN02/OSGM02グリッド変換 1

- OVERLAPBDYDISJOINT

- SDO_OVERLAPBDYDISJOINT演算子 1

- 位相関係 1

- OVERLAPBDYINTERSECT

- SDO_OVERLAPBDYINTERSECT演算子 1

- 位相関係 1

- OVERLAPS

- SDO_OVERLAPS演算子 1

P

- 索引の作成および再作成のパラレル実行 1 , 2 , 3

- パーサー・プロファイル

- GC_PARSER_PROFILEAFS表 1

- GC_PARSER_PROFILES表 1

- パーティション化された空間索引

- パーティション交換 1

- PARTITION表

- ルーティング・エンジンの使用 1 , 2

- PERCENTAGE_TO_MEASUREファンクション 1

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

- 空間演算子 1

- PL/SQLおよびSQLの例 1

- プラグイン

- レコード・タイプの登録 1

- 点

- データ 1

- 点のみのジオメトリの図および例 1

- ポリゴン上の内部 1

- ジオメトリ・セグメントでの位置 1

- LRS 1

- ポリゴン上 1

- 方向付きの点 1

- ジオメトリ・セグメント上の投影 1 , 2

- shape 1

- POINT_AT_BEARINGファンクション 1

- 点群

- クリップ 1 , 2

- ジオメトリへの変換 1

- 輪郭ジオメトリの作成 1

- 依存性の削除 1

- 点IDの取得 1

- 初期化 1

- ソリッドのモデル化 1

- ピラミッド化 1

- サブプログラム 1

- 対象点(POI)

- GC_POI_((lt))接尾辞((gt))表 1

- ポリゴン

- 面積 1

- 境界 1

- バッファ 1

- 重心 1

- 複合 1

- 外部および内部の輪 1 , 3

- 内部の点 1

- 領域にある点 1

- 自己交差の非サポート 1

- 自己交差ポリゴン 1

- 穴のあるポリゴン(LRSメジャー値) 1

- ポリゴンの集合 1

- ポリゴン・データ 1

- POLYGONTOLINEファンクション 1

- PopulateFeatureTypeXMLInfoプロシージャ 1

- 移入

- メジャー 1

- pre_geocoded_location要素 1

- 1次フィルタ 1 , 2 , 3

- 基本タイプ 1

- 今回のリリースの問題点 1

- PROJECT_ORDINATES_ONTO_TINファンクション 1

- PROJECT_PTファンクション 1

- 投影座標 1 , 2

- 投影

- MDSYS.SDO_PROJECTIONS_OLD_FORMAT表 1

- MDSYS.SDO_PROJECTIONS_OLD_SNAPSHOT表 1

- PROJECT_PTファンクション 1

- publishFeatureTypeメソッド 1

- PublishFeatureTypeプロシージャ 1

- publishRecordTypeメソッド 1

- ピラミッド

- 点群 1

- TIN 1

Q

- 品質

- Rツリー 1

- 問合せ 1

- ジオメトリ・セグメントの問合せ

- サブプログラム 1

- Spatialの問合せモデル 1

- 問合せウィンドウ 1

R

- レンジ

- メジャー 1

- READMEファイル

- Spatial、GeoRasterおよびトポロジとネットワークのデータ・モデル 1

- 再作成

- 空間索引 1

- レコード・タイプ

- 削除 1

- IDの取得 1

- ユーザーへのアクセス権限の付与 1

- 公開 1

- プラグインの登録 1

- ユーザーからのアクセス権限の取消し 1

- 機能情報の設定 1

- レコード・ビューのマップ

- 削除 1

- レコード・ビューのマップ(設定) 1

- 矩形

- 最小境界 1

- 3次元の最適化 1

- タイプ 1

- ジオメトリの修正 1

- RECTIFY_GEOMETRYファンクション 1

- REDEFINE_GEOM_SEGMENTプロシージャ 1

- 再定義

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

- RegisterFeatureTableプロシージャ 1

- RegisterMTableViewプロシージャ 1

- registerTypePluginMapメソッド 1

- RELATEファンクション 1

- 「SDO_RELATE演算子」も参照:

- リレーショナル・フィーチャ・タイプ(WFS) 1

- リリース番号(Spatial)

- 取得 1

- REMOVE_DUPLICATE_VERTICESファンクション 1

- レプリケーション

- マルチマスター 1

- オブジェクト 1

- RESET_MEASUREプロシージャ 1

- 今回のリリースの制限事項 1

- return_route_geometry属性

- 一括ルート・リクエスト 1

- return_segment_geometry属性

- 一括ルート・リクエスト 1

- REVERSE_GEOCODEファンクション 1

- REVERSE_GEOMETRYファンクション 1

- REVERSE_LINESTRINGファンクション 1

- REVERSE_MEASUREファンクション 1

- 逆ジオコード 1

- REVOKE_PREFERENCE_FOR_OPプロシージャ 1

- revokeFeatureTypeFromUserメソッド 1

- RevokeFeatureTypeFromUserプロシージャ 1

- RevokeMDAccessFromUserプロシージャ 1

- revokeMDAccessToUserメソッド 1

- revokeRecordTypeFromUserメソッド 1

- 輪

- ポリゴンの外部および内部 1

- ジオメトリからの抽出 1 , 2

- road_preference属性

- 一括ルート・リクエスト 1

- 道路

- GC_ROAD_((lt))接尾辞((gt))表 1

- 道路セグメント

- GC_ROAD_SEGMENT_((lt))接尾辞((gt))表 1

- ロールバック・セグメント

- Rツリー索引の作成 1

- route_request要素 1

- route_type属性

- ルート・リクエスト 1

- ルート・リクエスト

- 例 1

- input_location要素 1

- pre_geocoded_location要素 1

- スキーマ定義 1

- ルート・レスポンス

- 例 1

- XML Schema定義 1

- ルーティング 1

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

- 管理 1

- 使用されるデータ構造 1

- 説明および使用方法 1

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

- 概略 1

- ルーティング 1

- 使用されるユーザー・データ構造 1

- XML API 1

- Rツリー索引

- 索引付け処理の説明 1

- 再作成 1

- 作成前の要件 1

- 順序オブジェクト 1

- Rツリーの品質 1

S

- SCALE_GEOM_SEGMENTファンクション 1

- スケール変更

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

- シーン

- 検証 1

- スキーマ

- 他のスキーマの表での索引作成 1

- 他のスキーマの表でのSDO_JOINの起動 1

- SDO_ADDR_ARRAYデータ型 1

- SDO_AGGR_CENTROID集計ファンクション 1

- SDO_AGGR_CONCAT_LINES集計ファンクション 1

- SDO_AGGR_CONVEXHULL集計ファンクション 1

- SDO_AGGR_LRS_CONCAT集計ファンクション 1

- SDO_AGGR_MBR集計ファンクション 1

- SDO_AGGR_SET_UNION集計ファンクション 1

- SDO_AGGR_UNION集計ファンクション 1

- SDO_ALPHA_SHAPEファンクション 1

- SDO_ANGLE_UNITS表 1

- SDO_ANYINTERACT演算子 1

- SDO_ARC_DENSIFYファンクション 1

- SDO_AREA_UNITSビュー 1

- SDO_AREAファンクション 1

- SDO_BUFFERファンクション 1

- SDO_CENTROIDファンクション 1

- SDO_CLOSEST_POINTSプロシージャ 1

- SDO_CONCAVEHULL_BOUNDARYファンクション 1

- SDO_CONCAVEHULLファンクション 1

- SDO_CONTAINS演算子 1

- SDO_CONVEXHULLファンクション 1

- SDO_COORD_AXES表 1

- SDO_COORD_AXIS_NAMES表 1

- SDO_COORD_OP_METHODS表 1

- SDO_COORD_OP_PARAM_USE表 1

- SDO_COORD_OP_PARAM_VALS表 1

- SDO_COORD_OP_PARAMS表 1

- SDO_COORD_OP_PATHS表 1

- SDO_COORD_OPS表 1

- SDO_COORD_REF_SYS表 1

- SDO_COORD_REF_SYSTEMビュー 1

- SDO_COORD_SYS表 1

- SDO_COVEREDBY演算子 1

- SDO_COVERS演算子 1

- SDO_CRS_COMPOUNDビュー 1

- SDO_CRS_ENGINEERINGビュー 1

- SDO_CRS_GEOCENTRICビュー 1

- SDO_CRS_GEOGRAPHIC2Dビュー 1

- SDO_CRS_GEOGRAPHIC3Dビュー 1

- SDO_CRS_PROJECTEDビュー 1

- SDO_CRS_VERTICALビュー 1

- SDO_CSパッケージ

- ADD_PREFERENCE_FOR_OP 1

- CONVERT_3D_SRID_TO_2D 1

- CONVERT_NADCON_TO_XML 1

- CONVERT_NTV2_TO_XML 1

- CONVERT_XML_TO_NADCON 1

- CONVERT_XML_TO_NTV2 1

- CREATE_CONCATENATED_OP 1

- CREATE_OBVIOUS_EPSG_RULES 1

- CREATE_PREF_CONCATENATED_OP 1

- DELETE_ALL_EPSG_RULES 1

- DELETE_OP 1

- DETERMINE_CHAIN 1

- DETERMINE_DEFAULT_CHAIN 1

- FIND_GEOG_CRS 1

- FIND_PROJ_CRS 1

- FIND_SRID 1

- FROM_OGC_SIMPLEFEATURE_SRS 1

- FROM_USNG 1

- GET_EPSG_DATA_VERSIONファンクション 1

- LOAD_EPSG_MATRIX 1

- MAKE_3D 1

- MAP_EPSG_SRID_TO_ORACLE 1

- MAP_ORACLE_SRID_TO_EPSG 1

- REVOKE_PREFERENCE_FOR_OP 1

- TO_OGC_SIMPLEFEATURE_SRS 1

- TO_USNG 1

- TRANSFORM 1

- TRANSFORM_LAYER 1

- UPDATE_WKTS_FOR_ALL_EPSG_CRS 1

- UPDATE_WKTS_FOR_EPSG_CRS 1

- UPDATE_WKTS_FOR_EPSG_DATUM 1

- UPDATE_WKTS_FOR_EPSG_ELLIPS 1

- UPDATE_WKTS_FOR_EPSG_OP 1

- UPDATE_WKTS_FOR_EPSG_PARAM 1

- UPDATE_WKTS_FOR_EPSG_PM 1

- VALIDATE_EPSG_MATRIX 1

- VALIDATE_WKT 1

- SDO_CSW_PROCESSパッケージ

- DeleteCapabilitiesInfo 1

- DeleteDomainInfo 1

- DeletePluginMap 1

- DeleteRecordViewMap 1

- GetRecordTypeId 1

- InsertCapabilitiesInfo 1

- InsertDomainInfo 1

- InsertPluginMap 1

- InsertRecordViewMap 1

- InsertRtDataUpdated 1

- InsertRtMDUpdated 1

- SDO_DATUM_ENGINEERINGビュー 1

- SDO_DATUM_GEODETICビュー 1

- SDO_DATUM_VERTICALビュー 1

- SDO_DATUMS_OLD_FORMAT表 1

- SDO_DATUMS_OLD_SNAPSHOT表 1

- SDO_DATUMS表 1

- SDO_DIAMETER_LINEファンクション 1

- SDO_DIAMETERファンクション 1

- SDO_DIFFERENCEファンクション 1

- SDO_DIST_UNITSビュー 1

- SDO_DISTANCEファンクション 1

- SDO_ELEM_INFO_ARRAY型 1

- SDO_ELEM_INFO属性 1

- SDO_ELLIPSOIDS_OLD_FORMAT表 1

- SDO_ELLIPSOIDS_OLD_SNAPSHOT表 1

- SDO_ELLIPSOIDS表 1

- SDO_EQUAL演算子 1

- SDO_ETYPE値 1

- SDO_FILTER演算子 1

- SDO_GCDRパッケージ

- CREATE_PROFILE_TABLES 1

- GEOCODE 1

- GEOCODE_ADDR 1

- GEOCODE_ADDR_ALL 1

- GEOCODE_ALL 1

- GEOCODE_AS_GEOMETRY 1

- REVERSE_GEOCODE 1

- SDO_GEO_ADDRデータ型およびコンストラクタ 1

- SDO_GEOM_MBR演算子 1

- SDO_GEOM_PATH_INFO

- MDSYS.SDO_GEOM_PATH_INFO型 1

- SDO_GEOMETRYオブジェクト型

- コンストラクタ 1

- ユーザー定義型への埋込み 1 , 2

- ファンクション索引 1

- メソッド(メンバー・ファンクション) 1

- SDO_GEOMパッケージ

- RELATE 1

- SDO_ALPHA_SHAPE 1

- SDO_ARC_DENSIFY 1

- SDO_AREA 1

- SDO_BUFFER 1

- SDO_CENTROID 1

- SDO_CLOSEST_POINTS 1

- SDO_CONCAVEHULL 1

- SDO_CONCAVEHULL_BOUNDARY 1

- SDO_CONVEXHULL 1

- SDO_DIAMETER 1

- SDO_DIAMETER_LINE 1

- SDO_DIFFERENCE 1

- SDO_DISTANCE 1

- SDO_INTERSECTION 1

- SDO_LENGTH 1

- SDO_MAX_MBR_ORDINATE 1

- SDO_MAXDISTANCE 1

- SDO_MAXDISTANCE_LINE 1

- SDO_MBC 1

- SDO_MBC_CENTER 1

- SDO_MBC_RADIUS 1

- SDO_MBR 1

- SDO_MIN_MBR_ORDINATE 1

- SDO_POINTONSURFACE 1

- SDO_SELF_UNION 1

- SDO_TRIANGULATE 1

- SDO_UNION 1

- SDO_VOLUME 1

- SDO_WIDTH 1

- SDO_WIDTH_LINE 1

- SDO_XOR 1

- VALIDATE_GEOMETRY_WITH_CONTEXT 1

- VALIDATE_LAYER_WITH_CONTEXT 1

- WITHIN_DISTANCE 1

- SDO_GTYPE属性

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

- Get_Dimsメソッド 1

- Get_GTypeメソッド 1

- Get_LRS_Dimメソッド 1

- 索引メタデータ・ビューのSDO_INDEX_TABLEエントリ 1

- SDO_INDX_DIMSキーワード 1 , 2

- SDO_INSIDE演算子 1

- SDO_INTERPRETATION値 1

- SDO_INTERSECTIONファンクション 1

- SDO_JOIN演算子

- クロススキーマでの使用 1

- SDO_KEYWORDARRAYデータ型 1

- SDO_LENGTHファンクション 1

- SDO_LRSパッケージ

- CLIP_GEOM_SEGMENT 1

- CONCATENATE_GEOM_SEGMENTS 1

- CONNECTED_GEOM_SEGMENTS 1

- CONVERT_TO_LRS_DIM_ARRAY 1

- CONVERT_TO_LRS_GEOM 1

- CONVERT_TO_LRS_LAYER 1

- CONVERT_TO_STD_DIM_ARRAY 1

- CONVERT_TO_STD_GEOM 1

- CONVERT_TO_STD_LAYER 1

- DEFINE_GEOM_SEGMENT 1

- DYNAMIC_SEGMENT 1

- FIND_LRS_DIM_POS 1

- FIND_MEASURE 1

- FIND_OFFSET 1

- GEOM_SEGMENT_END_MEASURE 1

- GEOM_SEGMENT_END_PT 1

- GEOM_SEGMENT_LENGTH 1

- GEOM_SEGMENT_START_MEASURE 1

- GEOM_SEGMENT_START_PT 1

- GET_MEASURE 1

- GET_NEXT_SHAPE_PT 1

- GET_NEXT_SHAPE_PT_MEASURE 1

- GET_PREV_SHAPE_PT 1

- GET_PREV_SHAPE_PT_MEASURE 1

- IS_GEOM_SEGMENT_DEFINED 1

- IS_MEASURE_DECREASING 1

- IS_MEASURE_INCREASING 1

- IS_SHAPE_PT_MEASURE 1

- LOCATE_PT 1

- LRS_INTERSECTION 1

- MEASURE_RANGE 1

- MEASURE_TO_PERCENTAGE 1

- OFFSET_GEOM_SEGMENT 1

- PERCENTAGE_TO_MEASURE 1

- PROJECT_PT 1

- REDEFINE_GEOM_SEGMENT 1

- RESET_MEASURE 1

- REVERSE_GEOMETRY 1

- REVERSE_MEASURE 1

- SCALE_GEOM_SEGMENT 1

- SET_PT_MEASURE 1

- SPLIT_GEOM_SEGMENT 1

- TRANSLATE_MEASURE 1

- VALID_GEOM_SEGMENT 1

- VALID_LRS_PT 1

- VALID_MEASURE 1

- VALIDATE_LRS_GEOMETRY 1

- SDO_MAX_MBR_ORDINATEファンクション 1

- SDO_MAXDISTANCE_LINEファンクション 1

- SDO_MAXDISTANCEファンクション 1

- SDO_MBC_CENTERファンクション 1

- SDO_MBC_RADIUSファンクション 1

- SDO_MBCファンクション 1

- SDO_MBRファンクション 1

- SDO_MIGRATEパッケージ

- TO_CURRENT 1

- SDO_MIN_MBR_ORDINATEファンクション 1

- SDO_NN_DISTANCE補助演算子 1

- SDO_NN_DISTANCE演算子

- 複雑な例 1

- SDO_NN演算子

- 複雑な例 1

- オプティマイザ・ヒント 1

- SDO_OLSパッケージ

- MakeOpenLSClobRequest 1

- MakeOpenLSRequest 1

- SDO_ON演算子 1

- SDO_ORDINATE_ARRAY型 1

- SDO_ORDINATES属性 1

- SDO_OVERLAPBDYDISJOINT演算子 1

- SDO_OVERLAPBDYINTERSECT演算子 1

- SDO_OVERLAPS演算子 1

- SDO_PC_BLK_TYPEオブジェクト型 1

- SDO_PC_BLKオブジェクト型 1

- SDO_PC_PKGパッケージ

- CLIP_PC 1

- CLIP_PC_FLAT 1

- CREATE_CONTOUR_GEOMETRIES 1

- CREATE_PC 1

- DROP_DEPENDENCIES 1

- GET_PT_IDS 1

- INIT 1

- TO_GEOMETRY 1

- SDO_PCオブジェクト型 1

- SDO_POINT_TYPEオブジェクト型 1

- SDO_POINT属性 1

- SDO_POINTINPOLYGON演算子 1

- SDO_POINTONSURFACEファンクション 1

- SDO_PREFERRED_OPS_SYSTEM表 1

- SDO_PREFERRED_OPS_USER表 1

- SDO_PRIME_MERIDIANS表 1

- SDO_PROJECTIONS_OLD_FORMAT表 1

- SDO_PROJECTIONS_OLD_SNAPSHOT表 1

- SDO_REGAGGRオブジェクト型 1 , 2

- SDO_REGAGGRSETオブジェクト型 1 , 2

- SDO_REGIONオブジェクト型 1

- SDO_REGIONSETオブジェクト型 1

- SDO_RELATE演算子 1

- SDO_ROWIDPAIRオブジェクト型 1

- SDO_ROWIDSETデータ型 1

- SDO_RTREE_SEQ_NAME順序オブジェクト 1

- SDO_SAMパッケージ

- AGGREGATES_FOR_GEOMETRY 1

- AGGREGATES_FOR_LAYER 1

- BIN_GEOMETRY 1

- BIN_LAYER 1

- COLOCATED_REFERENCE_FEATURES 1

- SIMPLIFY_GEOMETRY 1

- SIMPLIFY_LAYER 1

- SPATIAL_CLUSTERS 1

- TILED_AGGREGATES 1

- TILED_BINS 1

- SDO_SELF_UNIONファンクション 1

- SDO_SRID属性 1

- SDO_ST_TOLERANCE表 1

- SDO_STARTING_OFFSET値 1

- SDO_TFM_CHAIN型 1

- SDO_TIN_BLK_TYPEオブジェクト型 1

- SDO_TIN_BLKオブジェクト型 1

- SDO_TIN_PKGパッケージ

- CLIP_TIN 1

- CREATE_TIN 1

- DROP_DEPENDENCIES 1

- INIT 1

- PROJECT_ORDINATES_ONTO_TIN 1

- TO_DEM 1

- TO_GEOMETRY 1

- SDO_TINオブジェクト型 1

- SDO_TOUCH演算子 1

- SDO_TRIANGULATEファンクション 1

- SDO_TUNEパッケージ

- AVERAGE_MBR 1

- ESTIMATE_RTREE_INDEX_SIZE 1

- EXTENT_OF 1

- MIX_INFO 1

- SDO_UNIONファンクション 1

- SDO_UNIT列

- SDO_AREA_UNITS表 1

- SDO_DIST_UNITS表 1

- SDO_UNITS_OF_MEASURE表 1

- SDO_UTILパッケージ

- AFFINETRANSFORMS 1

- APPEND 1

- BEARING_TILT_FOR_POINTS 1

- CIRCLE_POLYGON 1

- CONCAT_LINES 1

- CONVERT_UNIT 1

- CONVERT3007TO3008 1

- DROP_WORK_TABLES 1

- ELLIPSE_POLYGON 1

- EXTRACT 1

- EXTRACT_ALL 1

- EXTRACT3D 1

- EXTRUDE 1

- FROM_GML311GEOMETRY 1

- FROM_GMLGEOMETRY 1

- FROM_KMLGEOMETRY 1

- FROM_WKBGEOMETRY 1

- FROM_WKTGEOMETRY 1

- GET_2D_FOOTPRINT 1

- GETNUMELEM 1

- GETNUMVERTICES 1

- GETNURBSAPPROX 1

- GETVERTICES 1

- INITIALIZE_INDEXES_FOR_TTS 1

- INTERIOR_POINT 1

- POINT_AT_BEARING 1

- POLYGONTOLINE 1

- RECTIFY_GEOMETRY 1

- REMOVE_DUPLICATE_VERTICES 1

- REVERSE_LINESTRING 1

- SIMPLIFY 1 , 2

- THEME3D_GET_BLOCK_TABLE 1

- THEME3D_HAS_LOD 1

- THEME3D_HAS_TEXTURE 1

- TO_GML311GEOMETRY 1

- TO_GMLGEOMETRY 1

- TO_KMLGEOMETRY 1

- TO_WKBGEOMETRY 1

- TO_WKTGEOMETRY 1

- VALIDATE_3DTHEME 1

- VALIDATE_SCENE 1

- VALIDATE_VIEWFRAME 1

- VALIDATE_WKBGEOMETRY 1

- VALIDATE_WKTGEOMETRY 1

- SDO_VERSIONファンクション 1

- SDO_VOLUMEファンクション 1

- SDO_WFS_LOCKパッケージ

- EnableDBTxns 1

- RegisterFeatureTable 1

- UnRegisterFeatureTable 1

- SDO_WFS_PROCESSパッケージ

- DropFeatureType 1

- DropFeatureTypes 1

- GenCollectionProcs 1

- GetFeatureTypeId 1

- GrantFeatureTypeToUser 1

- GrantMDAccessToUser 1

- InsertCapabilitiesInfo 1

- InsertFtDataUpdated 1

- InsertFtMDUpdated 1

- PopulateFeatureTypeXMLInfo 1

- PublishFeatureType 1

- RegisterMTableView 1

- RevokeFeatureTypeFromUser 1

- RevokeMDAccessFromUser 1

- UnRegisterMTableView 1

- SDO_WIDTH_LINEファンクション 1

- SDO_WIDTHファンクション 1

- SDO_WITHIN_DISTANCE演算子

- 複雑な例 1

- SDO_XORファンクション 1

- SDOAGGRTYPEオブジェクト・タイプ 1

- sdows.earファイル

- デプロイ 1

- 海面

- 重力に関係する高さ 1

- 2次フィルタ 1 , 2

- セグメント

- ジオメトリ 1

- 自己交差する線ストリングおよびポリゴン 1

- 自己交差ポリゴン 1

- 自己結合

- 最適化 1

- 自己和集合 1

- 半長径 1 , 2

- 半短径 1

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

- SET_PT_MEASUREプロシージャ 1

- setCapabilitiesInfoメソッド 1

- setDomainInfoメソッド 1

- setRecordViewMapメソッド 1

- setXMLTableIndexInfoメソッド 1

- シェープファイル

- 空間へのロード 1

- 形状点

- メジャー値が形状点であるかの判断 1

- 次のメジャーの取得 1

- 前のメジャーの取得 1

- 次の取得 1

- 前の取得 1

- SIGN_POST表

- ルーティング・エンジンの使用 1

- 単純な要素 1

- シンプル・フィーチャ(OGC)

- Oracle Spatialへの準拠 1

- ジオメトリの簡略化 1 , 2

- SIMPLIFY_GEOMETRYファンクション 1

- SIMPLIFY_LAYERプロシージャ 1

- SIMPLIFYファンクション 1 , 2

- 空間アプリケーションのサイズ(ハードウェア)要件 1

- ソリッド

- 外側および内側 1

- モデル化 1

- SDO_ETYPE値 1

- 容積 1

- SORT_AREA_SIZEパラメータ

- Rツリー索引の作成 1

- SPATIAL_CLUSTERSファンクション 1

- SPATIAL_CSW_ADMIN_USRアカウントおよびスキーマ 1

- SPATIAL_VECTOR_ACCELERATIONシステム・パラメータ 1

- SPATIAL_WFS_ADMIN_USRアカウントおよびスキーマ 1

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

- 「集計ファンクション」を参照:

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

- 概念および使用方法 1

- ファンクションのリファレンス情報 1

- Spatial and Graph Webサービス

- デモ・ファイル 1

- デプロイと構成 1

- 概要 1

- 空間のビニング

- ビンを参照 1

- 空間のクラスタ化 1

- 空間相関 1

- 空間データ・マイニング

- 概念および使用方法 1

- ファンクションのリファレンス情報 1

- 空間データ構造 1

- 空間データ型 1

- 空間索引

- 「索引」を参照:

- 空間結合

- SDO_JOIN演算子 1

- 表の空間的な有効化 1

- 空間メタデータ表

- 移動 1

- 空間演算子

- 「演算子」を参照:

- 空間問合せ 1

- 空間参照システム

- 概念および使用方法 1

- 例 1

- サブプログラムのリファレンス情報 1

- Spatialルーティング・エンジン

- 「ルーティング・エンジン」を参照:

- 球体

- MDSYS.SDO_ELLIPSOIDS_OLD_FORMAT表 1

- MDSYS.SDO_ELLIPSOIDS_OLD_SNAPSHOT表 1

- SPLIT_GEOM_SEGMENTプロシージャ 1

- 分割

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

- SQL*Loader 1

- SQLおよびSQLの例 1

- SQL Multimedia

- 名前の競合の回避 1

- FROM_WKBGEOMETRYファンクション 1

- FROM_WKTGEOMETRYファンクション 1

- ST_GEOMETRY型 1

- Spatialでのサポート 1

- TO_WKBGEOMETRYファンクション 1

- TO_WKTGEOMETRYファンクション 1

- 許容差 1

- VALIDATE_WKBGEOMETRYファンクション 1

- VALIDATE_WKTGEOMETRYファンクション 1

- SQL Multimedia規格

- ST_CoordDimメソッド 1

- ST_IsValidメソッド 1

- SQL文

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

- SRID

- 存在のチェック 1

- 検索 1

- USER_SDO_GEOM_METADATA 1

- OracleからEPSGへのマッピング 1

- SDO_GEOMETRYのSDO_SRID属性 1

- ST_ANNOTATION_TEXTコンストラクタ 1

- ST_CoordDimメソッド 1

- ST_GEOMETRY型 1

- ST_IsValidメソッド 1

- ルートの出発地 1

- サブプログラム

- 座標系変換 1

- データ・マイニング 1

- ジオコーディング 1

- ジオメトリ 1

- 線形参照 1

- OpenLS 1

- 点群 1

- SDO_MIGRATE 1

- 空間分析 1

- TIN 1

- チューニング 1

- ユーティリティ 1

- WFS 1

- WFS処理 1 , 2

- サブルート

- 説明 1

- 面法線 1

- 表面

- モデル化 1

- SDO_ETYPE値 1

T

- TABLE_NAME (USER_SDO_GEOM_METADATA内) 1

- 表名

- 空間表名の制限事項 1

- 表

- 空間的に有効化 1

- テクスチャ

- テーマでの確認 1

- 使用 1

- TFM_PLANオブジェクト型 1

- THEME3D_GET_BLOCK_TABLEファンクション 1

- THEME3D_HAS_LODファンクション 1

- THEME3D_HAS_TEXTUREファンクション 1

- テーマ

- LODの確認 1

- テクスチャの確認 1

- ブロック表の取得 1

- 検証 1

- 3次元(3D)

- LRSファンクションの形式

- 測地データでの非サポート 1

- 空間オブジェクト

- ソリッド 1

- 表面 1

- TILED_AGGREGATESファンクション 1

- TILED_BINSファンクション 1

- TIN

- クリップ 1

- DEMへの変換 1

- ジオメトリへの変換 1

- 作成 1 , 2

- 依存性の削除 1

- 初期化 1

- 座標の投影 1

- ピラミッド化 1

- サブプログラム 1

- TIN(Triangulated Irregular Networks) 1

- TO_CURRENTプロシージャおよびファンクション 1

- TO_DEMプロシージャ 1

- TO_GEOMETRYファンクション 1 , 2

- TO_GML311GEOMETRYファンクション 1

- TO_GMLGEOMETRYファンクション 1

- TO_KMLGEOMETRYファンクション 1

- TO_OGC_SIMPLEFEATURE_SRSファンクション 1

- TO_USNGファンクション 1

- TO_WKBGEOMETRYファンクション 1

- TO_WKTGEOMETRYファンクション 1

- 許容差

- SQL Multimedia型 1

- LRSファンクション 1

- 位相的な和集合 1

- TOUCH

- SDO_TOUCH演算子 1

- 位相関係 1

- 空間データのトランザクション挿入 1

- TRANSFORM_LAYERプロシージャ

- 変換したレイヤーの表 1

- 変換

- 円弧および円の非サポート 1

- TRANSFORMファンクション 1

- TRANSLATE_MEASUREファンクション 1

- トランスポータブル表領域

- 空間索引の初期化 1

- 巡回セールスマン(TSP)ルート 1

- Triangulated Irregular Networks(TIN) 1

- 三角分割

- SDO_TRIANGULATEファンクション 1

- truck_height属性

- ルート・リクエスト 1

- truck_length属性

- ルート・リクエスト 1

- truck_per_axle_weight属性

- ルート・リクエスト 1

- truck_type属性

- ルート・リクエスト 1

- truck_weight属性

- ルート・リクエスト 1

- truck_width属性

- ルート・リクエスト 1

- TSPルート 1

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

- 空間演算子 1

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

- 2層問合せモデル 1

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

U

- U.S. National Grid

- SDO_CS.FROM_USNGファンクション 1

- SDO_CS.TO_USNGファンクション 1

- Oracle Spatialのサポート 1

- 形式化されていない住所 1

- union 1

- UNIT_NAME列

- SDO_ANGLE_UNITS表 1

- SDO_AREA_UNITS表 1

- SDO_DIST_UNITS表 1

- 測定単位

- MDSYS表 1

- unknown CRS座標参照系 1

- UnRegisterFeatureTableプロシージャ 1

- UnRegisterMTableViewプロシージャ 1

- UPDATE_WKTS_FOR_ALL_EPSG_CRSプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_CRSプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_DATUMプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_ELLIPSプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_OPプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_PARAMプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_PMプロシージャ 1

- アップグレード

- 今回のリリースのSpatialへのデータのアップグレード 1

- GeoRaster 1

- 今回のリリースのOracle DatabaseへのSpatialのアップグレード 1

- 今回のリリースへの空間データのアップグレード 1

- USE_SPHERICALユースケース名 1

- 使用例

- 座標系変換 1

- USER_ANNOTATION_TEXT_METADATAビュー 1

- USER_SDO_3DTHEMESビュー 1

- USER_SDO_GEOM_METADATAビュー 1

- USER_SDO_INDEX_INFOビュー 1

- USER_SDO_INDEX_METADATAビュー 1

- USER_SDO_SCENESビュー 1

- USER_SDO_VIEWFRAMESビュー 1

- ユーザー定義の座標参照系 1

- ユーザー定義データ型

- SDO_GEOMETRYオブジェクトの埋込み 1 , 2

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

V

- VALID_GEOM_SEGMENTファンクション 1

- VALID_LRS_PTファンクション 1

- VALID_MEASUREファンクション 1

- VALIDATE_3DTHEMEファンクション 1

- VALIDATE_EPSG_MATRIXプロシージャ 1

- VALIDATE_GEOMETRY_WITH_CONTEXTファンクション 1

- VALIDATE_LAYER_WITH_CONTEXTプロシージャ 1

- VALIDATE_LRS_GEOMETRYファンクション 1

- VALIDATE_SCENEファンクション 1

- VALIDATE_VIEWFRAMEファンクション 1

- VALIDATE_WKBGEOMETRYファンクション 1

- VALIDATE_WKTファンクション 1

- VALIDATE_WKTGEOMETRYファンクション 1

- ジオメトリの検証

- 一般的なチェックおよび2次元のチェック 1

- 実行の重要性 1

- 3次元のチェック 1

- ベクトル・パフォーマンス・アクセラレータ(VPA)機能 1

- vehicle_type属性

- ルート・リクエスト 1

- ベンダー属性

- ルート・リクエスト 1

- バージョニング(CSW)

- 無効化 1

- 有効化 1

- バージョン番号(Spatial)

- 取得 1

- VERTEX_SET_TYPEデータ型 1

- VERTEX_TYPEオブジェクト型 1

- 頂点

- SDO_GEOMETRYオブジェクト内の最大数 1

- 重複の削除 1

- 戻されるジオメトリの座標 1

- ビューフレーム

- 検証 1

- ビュー

- ALL_ANNOTATION_TEXT_METADATA 1

- ALL_SDO_GEOM_METADATA 1

- ALL_SDO_INDEX_INFO 1

- ALL_SDO_INDEX_METADATA 1

- USER_ANNOTATION_TEXT_METADATA 1

- USER_SDO_GEOM_METADATA 1

- USER_SDO_INDEX_INFO 1

- USER_SDO_INDEX_METADATA 1

- ボリューム 1

- VPA (ベクトル・パフォーマンス・アクセラレータ)機能 1

W

- Webサービス

- デモ・ファイル 1

- デプロイと構成 1

- 概要 1

- well-knownバイナリ(WKB)

- 「WKB」を参照:

- well-knownテキスト(WKT)

- 「WKT」を参照:

- WFS

- エンジン 1

- フィーチャ・タイプ 1

- Java API 1

- サブプログラムのリファレンス情報 1

- Oracle Workspace Managerの使用 1

- WFSAdmin Javaクラス 1

- WFSの処理

- サブプログラムのリファレンス情報 1 , 2

- 幅

- SDO_WIDTH_LINEファンクション 1

- SDO_WIDTHファンクション 1

- WITHIN_DISTANCEファンクション 1

- 「SDO_WITHIN_DISTANCE演算子」も参照:

- WKB

- FROM_WKBGEOMETRYファンクション 1

- Get_WKBメソッド 1

- TO_WKBGEOMETRYファンクション 1

- VALIDATE_WKBGEOMETRYファンクション 1

- WKT

- FROM_WKTGEOMETRYファンクション 1

- Get_WKTメソッド 1

- 更新手順 1

- TO_WKTGEOMETRYファンクション 1

- UPDATE_WKTS_FOR_ALL_EPSG_CRSプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_CRSプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_DATUMプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_ELLIPSプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_OPプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_PARAMプロシージャ 1

- UPDATE_WKTS_FOR_EPSG_PMプロシージャ 1

- VALIDATE_WKTGEOMETRYファンクション 1

- 検査(SRIDを指定) 1

- MDSYS.CS_SRS表のWKTEXT列

- 値の更新手順 1

- Workspace Manager

- WFSでの使用 1

- wsclient.jarファイル 1

- WSConfig.xmlファイル 1

X

- XML API

- ルーティング・エンジン 1

- XML表の索引

- フィーチャ・タイプの情報の設定 1

- レコード・タイプの情報の設定 1

- XMLTABLEINDEX索引

- 存在のチェック 1

- フィーチャ表での作成 1

- フィーチャ表での削除 1

- XOR

- SDO_XORファンクション 1

Y

- イエロー・ページ

- 「ビジネス・ディレクトリ(YP)」を参照:

- YP

- 「ビジネス・ディレクトリ(YP)」を参照:

Z

- 0(ゼロ)

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

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

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

保証免責

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

制限付権利について

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

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 Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

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

第三者のコンテンツ、製品、サービスに対する免責事項

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

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

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

Oracle Supportへのアクセス

サポートをご契約のお客様には、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)を参照してください。