®
Oracle Spatialにおける
OGC仕様の実装と機能概要
日本オラクル株式会社
日本オラクル株式会社
日本オラクル株式会社
日本オラクル株式会社
日本オラクル株式会社
日本オラクル株式会社
日本オラクル株式会社
日本オラクル株式会社
この資料は、2000年5月25日に東京ビッグサイトで行われた空間データセミ
ナーにて用いたものです。
資料中のOracle Spatialの関数や機能については、Oracle8i R8.1.6 Spatial
の機能を記載しています。
®
Agenda
•
Spatial概要
概要
概要
概要
•
Spatialで何ができるか?
で何ができるか?
で何ができるか?
で何ができるか?
– Spatialデータモデル
データモデル
データモデル
データモデル
– 主要関数
主要関数
主要関数
主要関数
•
Oracle Corp.の取り組み
の取り組み
の取り組み
の取り組み
#1
80
年代前半年代前半年代前半年代前半80
年代後半年代後半年代後半年代後半90
年代前半年代前半年代前半年代前半90
年代後半年代後半年代後半年代後半 シンプルな シンプルな シンプルな シンプルなOLTP
Active
Database
データウェアハウス
データウェアハウス
データウェアハウス
データウェアハウス
ハイ・エンド
ハイ・エンド
ハイ・エンド
ハイ・エンド
OLTP
OLTP
OLTP
OLTP
Web対応
対応
対応
対応
データベース
データベース
データベース
データベース
データ中心型
データ中心型
データ中心型
データ中心型
アプリケーション
アプリケーション
アプリケーション
アプリケーション
プラットフォーム
プラットフォーム
プラットフォーム
プラットフォーム
としての
としての
としての
としてのDB
DB
DB
DB
リレーショナル
リレーショナル
リレーショナル
リレーショナルDB
DB
DB
DB
初期
初期
初期
初期
クライアント・サーバー
クライアント・サーバー
クライアント・サーバー
クライアント・サーバー
リレーショナル
リレーショナル
リレーショナル
リレーショナルDB
DB
DB
DB
エンタープライズ
エンタープライズ
エンタープライズ
エンタープライズ
リレーショナル
リレーショナル
リレーショナル
リレーショナルDB
DB
DB
DB
インターネット
インターネット
インターネット
インターネット
コンピューティング
コンピューティング
コンピューティング
コンピューティング
データベース・テクノロジーの変遷
データベース・テクノロジーの変遷
データベース・テクノロジーの変遷
データベース・テクノロジーの変遷
®
Oracle8i Spatialの変遷
Muti-Dimensional DimensionalOracle7.3.3
Oracle8
Oracle8i
Context Context Option Option Spatial Data Spatial Data Option Option Image Image Cartridge Cartridge Visual Image Visual Image Retrieval Retrieval Cartridge Cartridge Time Series Time Series Cartridge Cartridge Context Context Cartridge Cartridge Spatial Spatial Cartridge Cartridge
Oracle7.2
国内では認定アプリ 国内では認定アプリ ケーション限定で ケーション限定で R8.0.5 R8.0.5 より出荷より出荷 AVS/Express / Advanced Visual SystemsAVS/Express / Advanced Visual Systems
Formida Fire / Formida Software
Formida Fire / Formida Software
GeoMedia / Intergraph
GeoMedia / Intergraph
GeoMedia Pro / Intergraph
GeoMedia Pro / Intergraph
ModelServer Continuum / Bentley Systems
ModelServer Continuum / Bentley Systems
interMedia interMedia Image Image Audio Audio Video Video Text Text Locator Locator P lug - I n s P lug - I n s Se rv ic e s Se rv ic e s
Spatial
Spatial
Visual Image Visual Image Retrieval Retrieval Time Series Time Series 国内では 国内では認定アプリ認定アプリ ケーション限定で ケーション限定でR8.1.6R8.1.6 より出荷開始予定 より出荷開始予定 ( (20002000年年77月~月~88月)月)® GISアプリアプリアプリアプリC GISアプリアプリアプリアプリA GISアプリアプリアプリアプリB
従来の
GISシステムの問題点(1)
GIS
GIS
データが
データが
データが
データが
データが
データが
データが
データが
統一されていない
統一されていない
統一されていない
統一されていない
統一されていない
統一されていない
統一されていない
統一されていない
・GISデータはアプリによってデータ フォーマットが異なる ・異なるアプリ間でデータの連携を 行なうには、データの変換が必須 ・同じ情報でもアプリが異なると データは別々に用意一般にGISアプリケーションが異なると、GISデータのフォーマットも異なりま
す。
GISアプリケーションA用のGISデータを GISアプリケーションBで使用する
ことは基本的にはできません。GISデータをGISアプリケーションB用にコン
バートすることで、使用可能となる場合もありますが、時間、コストがかかって
しまいます。
®
GISデータの標準化
GISアプリアプリアプリアプリA GISアプリアプリアプリアプリB GISアプリアプリアプリアプリCOracle Spatial
Oracle SpatialはOGCに準拠した標準化された形でGISデータを格納します。
したがって、異なるアプリケーションでもGISデータを共用することが可能で
す。いちいちデータをコンバートする必要はありません。
また、データが標準化されることで、必要に応じて必要なデータだけを差し
替えて使用することが可能になります。
105
GISデータを使用する場合、そのGISデータは関連した属性データを有して
います。
例えば、山手通りから500m以内のコンビニの売上高を計算する場合、GIS
データとして、山手通りの形状と、各コンビニ店舗の位置情報を管理しておく
必要があります。また、各コンビニ店舗は、住所、電話番号、売上高などの属
性情報を保持しています。
ビジネスでGISデータを用いる場合、GIS情報と属性情報を絡めて使用する
場合がほとんどです。しかし、従来、GISデータはGIS専用サーバーで管理さ
れ、属性情報は
RDBMSサーバーで管理されるといった二重管理が行なわ
れてきました。
マシン管理者の負荷は高くなり、コストも増大します。また、GISデータと属性
データの整合性を保つための仕組を組み込む必要があります。
®従来の
GISシステムの問題点(2)
空間データ
空間データ
空間データ
空間データ
属性データ
属性データ
属性データ
属性データ
GISアプリケーションアプリケーションアプリケーションアプリケーション MISアプリケーションアプリケーションアプリケーションアプリケーションデータの二重管理
データの二重管理
データの二重管理
データの二重管理
®
・空間データと属性データを一元管理
・空間データと属性データを一元管理
・空間データと属性データを一元管理
・空間データと属性データを一元管理
Desktop Desktop GIS GIS Client Client Web Web Browser Browser Spatial MIS Spatial MIS Proprietary System Proprietary System Records空間データと属性データの融合
SpatialOracle SpatialではGISデータも属性データもOracle DBで一元管理します。
複数のサーバを管理する必要はありません。
また、空間データもトランザクションの対象となります。両者の整合性は
Oracleによって保証されます。
®
Oracle Spatialとは
•
OracleDBで空間データを扱うための関数、
で空間データを扱うための関数、
で空間データを扱うための関数、
で空間データを扱うための関数、
プロシージャ、演算子を提供するオプション
プロシージャ、演算子を提供するオプション
プロシージャ、演算子を提供するオプション
プロシージャ、演算子を提供するオプション
•
Oracleデータベースでの空間データの格納、
データベースでの空間データの格納、
データベースでの空間データの格納、
データベースでの空間データの格納、
アクセス、分析を効率的に処理することを目
アクセス、分析を効率的に処理することを目
アクセス、分析を効率的に処理することを目
アクセス、分析を効率的に処理することを目
的とする
的とする
的とする
的とする
Oracle Spatialは - 多次元データを格納することが可能 - 空間データの演算は2次元データに対して のみ有効Oracle Spatialは、
・多次元の空間データの格納
・空間データの演算(位相関係)
を行なうことができます。
ただし、次の点に注意してください。
Oracle Spatialでは、格納できる空間データは4次元までです。
また、Oracle Spatialが提供する関数を用いて演算を行なう場合、その対象と
できるのは2次元のデータです。もし、DB中に格納された3次元データを演
算にかけた場合、Spatialはそれのz値を無視して、x,yからなる2次元データと
見なして計算を行ないます。
®
•
東京駅から半径
東京駅から半径
東京駅から半径
東京駅から半径
500m以内の
以内の
以内の
以内の
ATMを検
を検
を検
を検
索する
索する
索する
索する
•
国道1号線が渡る一級河川を検索する
国道1号線が渡る一級河川を検索する
国道1号線が渡る一級河川を検索する
国道1号線が渡る一級河川を検索する
•
台風が通過したエリアに住む保険加入
台風が通過したエリアに住む保険加入
台風が通過したエリアに住む保険加入
台風が通過したエリアに住む保険加入
者のリストを求める
者のリストを求める
者のリストを求める
者のリストを求める
Spatialでできること
地図情報をグラフィカルに表示する
といった、視覚的に訴える機能は
備えていません
Oracle Spatialは、クライアントマシンに画像を表示する機能は備えていま
せん。Spatialが担当するのは、サーバー側でのGISデータの格納・管理・演
算です。
®
ORDB
Oracle8 R8.0より、Oracleデータベースは
オブジェクト・リレーショナル・データベース
となりました。
Oracle RDBMSはOracle8 R8.0より、オブジェクト・リレーショナル・データベー
スとなりました。
Oracle Spatialはこのオブジェクト機能を利用しています。
®
ORDBによる空間データの格納
山手線 中央線 (0,0) (10,9) 番号 10 20 ... 名称 名称 名称 名称 山手 山手 山手 山手 中央 中央 中央 中央 ... 営業キロ 営業キロ 営業キロ 営業キロ xxx xxx ... 地図情報 地図情報 地図情報 地図情報 (5,1) , (7,2) , (7,6) , ... , (5,1) (5,1) , (7,2) , (7,6) , ... , (5,1) (5,1) , (7,2) , (7,6) , ... , (5,1) (5,1) , (7,2) , (7,6) , ... , (5,1) (7,2) , (5,4) , (0,4) (7,2) , (5,4) , (0,4) (7,2) , (5,4) , (0,4) (7,2) , (5,4) , (0,4) ... ... ... ... 1つのセルに複数のデータが 格納されている®
Spatialデータのデータ型
Spatialデータは、オブジェクト型であるmdsys.sdo_geometry型として格納します mdsys.sdo_geometry ( GTYPE , SRID , SDOPOINT , mdsys.sdo_elem_info_array ( a1 , a2 , a3 , .... ) , mdsys.sdo_ordinate_array (x1 , y1 , x2 , y2 , x3 , y3 , ... , xn , yn) );GTYPE ... ジオメトリのタイプを指定 point/linestring/polygon/collection/multipoint/ ... etc SRID ... Spatial Reference System ID
SDOPOINT ... ジオメトリが1つの点で構成される場合、座標を指定する mdsys.sdo_elem_info_array ... ジオメトリを構成する座標の解釈を指定する mdsys.sdo_ordinate_array ... ジオメトリを構成する座標を指定する
®
insert文による新規ジオメトリの追加
1(5,10) 2(10,5) 3(15,10) 4(20,5)insert into star values ( ‘カシオペアカシオペアカシオペアカシオペア’, mdsys.sdo_geometry (2,null,null, mdsys.sdo_elem_info_array(1,2,1), mdsys.sdo_ordinate_array (5,10,10,5,15,10,20,5,25,10) ) );
CREATE TABLE star ( name VARCHAR2(30),
stargeo mdsys.SDO_GEOMETRY);
® 点(ポイント) 点(ポイント)点(ポイント) 点(ポイント) 線(ライン)線(ライン)線(ライン)線(ライン) ポリゴン(多角形)ポリゴン(多角形)ポリゴン(多角形)ポリゴン(多角形) 穴空きポリゴン 穴空きポリゴン 穴空きポリゴン 穴空きポリゴン 自己交差するライン自己交差するライン自己交差するライン自己交差するライン 自己交差するポリゴン自己交差するポリゴン自己交差するポリゴン自己交差するポリゴン 可能 可能可能 可能 不可能不可能不可能不可能 可能 可能 可能 可能
Spatialが扱うことができる基本図形
Spatialでは、演算の対象となる図形を、これら基本図形の集合として定義しますSpatialが扱える基本的な図形は
・点
・線
・多角形
の3つです。
ちなみに、Oracle8iのオブジェクト・リレーショナル型では上記に加えて、
・円
・弧
を扱うことが可能です。
(注意)
Oracle8iのリレーショナル型では点、線、多角形のみ扱える
®
Spatialが扱うことができる基本図形
円弧線ストリング 円弧線ストリング円弧線ストリング 円弧線ストリング 円弧ポリゴン円弧ポリゴン円弧ポリゴン円弧ポリゴン 複合ポリゴン複合ポリゴン複合ポリゴン複合ポリゴン 複合線ストリング 複合線ストリング 複合線ストリング 複合線ストリング 円円円円 四角形四角形四角形四角形(2点指定)®
Geometry Class Hierarchy
Geometry
Point Curve Surface GeometryCollection
LineString Line LinerRing Polygon Multi-Surface Multi-Curve Multi-Point Multi-Polygon Multi-LineString ※OpenGIS Simple Features Specification For SQL Revision 1.1 Figure2.1より抜粋
®
Agenda
•
Spatial概要
概要
概要
概要
•
Spatialで何ができるか?
で何ができるか?
で何ができるか?
で何ができるか?
– Spatialデータモデル
データモデル
データモデル
データモデル
– 主要関数
主要関数
主要関数
主要関数
•
Oracle Corp.の取り組み
の取り組み
の取り組み
の取り組み
®
データモデル(レイヤ)
東京
東京
東京
東京
23区と
区と
区と
区と
JR路線の空間問合せを行なうに
路線の空間問合せを行なうに
路線の空間問合せを行なうに
路線の空間問合せを行なうに
は
は
は
は
..
•
JRと区は性質が異なるため、と区は性質が異なるため、と区は性質が異なるため、と区は性質が異なるため、2つのグループ(つのグループ(つのグループ(つのグループ(23区グルー区グルー区グルー区グルー プと プと プと プとJRグループ)を定義する。グループ)を定義する。グループ)を定義する。グループ)を定義する。•
このグループのことをこのグループのことをこのグループのことをこのグループのことをレイヤレイヤレイヤレイヤと呼ぶ。と呼ぶ。と呼ぶ。と呼ぶ。•
23区レイヤには、新宿区と豊島区を定義する。区レイヤには、新宿区と豊島区を定義する。区レイヤには、新宿区と豊島区を定義する。区レイヤには、新宿区と豊島区を定義する。•
JRレイヤには、山手線と中央線を定義する。レイヤには、山手線と中央線を定義する。レイヤには、山手線と中央線を定義する。レイヤには、山手線と中央線を定義する。•
演算の対象となる最小単位「新宿区」、「豊島区」、「山手線」、演算の対象となる最小単位「新宿区」、「豊島区」、「山手線」、演算の対象となる最小単位「新宿区」、「豊島区」、「山手線」、演算の対象となる最小単位「新宿区」、「豊島区」、「山手線」、 「中央線」を 「中央線」を 「中央線」を 「中央線」をジオメトリジオメトリジオメトリジオメトリ(または形状)と呼ぶ。(または形状)と呼ぶ。(または形状)と呼ぶ。(または形状)と呼ぶ。•
ジオメトリには、それを一意に識別する番号ジオメトリには、それを一意に識別する番号ジオメトリには、それを一意に識別する番号ジオメトリには、それを一意に識別する番号(GID)を振る。を振る。を振る。を振る。 ※簡略化のため、東京23区は新宿区と豊島区、JRは山手線と中央線のみ考慮 JRレイヤ 201 山手線 202 中央線 23区レイヤ 101 新宿区 102 豊島区 山手線 中央線 豊島区 新宿区ここでは、「東京23区とJR路線の空間問合せ」を例にあげ、それを行なうまで
の手順を簡単に説明します。
どのようにして空間問合せを行なうか、その流れを掴んでください。細かな
説明は後に行ないますので、ここでは雰囲気を掴んでいただければ結構で
す。
®
データモデル
(座標)
•
ジオメトリは座標を用いてデータベース内で定義さジオメトリは座標を用いてデータベース内で定義さジオメトリは座標を用いてデータベース内で定義さジオメトリは座標を用いてデータベース内で定義さ れる。 れる。 れる。 れる。•
ジオメトリの座標の基準とするため、座標軸を定義ジオメトリの座標の基準とするため、座標軸を定義ジオメトリの座標の基準とするため、座標軸を定義ジオメトリの座標の基準とするため、座標軸を定義 する必要がある。今回は する必要がある。今回は する必要がある。今回は する必要がある。今回は(0,0)~~~~(100,100)の座標の座標の座標の座標 系の中で各ジオメトリを定義する。 系の中で各ジオメトリを定義する。 系の中で各ジオメトリを定義する。 系の中で各ジオメトリを定義する。•
座標軸は座標軸は座標軸は座標軸は(x,y)でもでもでもでも(緯度、経度)でも良い。緯度、経度)でも良い。緯度、経度)でも良い。緯度、経度)でも良い。 その格納データにあった定義を行なう。 その格納データにあった定義を行なう。 その格納データにあった定義を行なう。 その格納データにあった定義を行なう。(100,100)
(0,0)
JRレイヤ 201 山手線 202 中央線 23区レイヤ 101 新宿区 102 豊島区®
データモデル(エレメント)
•
中央線ジオメトリは次のような線から構成される。中央線ジオメトリは次のような線から構成される。中央線ジオメトリは次のような線から構成される。中央線ジオメトリは次のような線から構成される。 (100,100) (0,0) ! このようなジオメトリを構成する要素をこのようなジオメトリを構成する要素をこのようなジオメトリを構成する要素をこのようなジオメトリを構成する要素をエレメントエレメントエレメントエレメントと呼ぶ。と呼ぶ。と呼ぶ。と呼ぶ。 ! エレメントは点、線、円弧、円、ポリゴンとして構成される。エレメントは点、線、円弧、円、ポリゴンとして構成される。エレメントは点、線、円弧、円、ポリゴンとして構成される。エレメントは点、線、円弧、円、ポリゴンとして構成される。®
データモデル(エレメント)
•
複数のエレメントが1つのジオ
複数のエレメントが1つのジオ
複数のエレメントが1つのジオ
複数のエレメントが1つのジオ
メトリを構成する例として「ハワ
メトリを構成する例として「ハワ
メトリを構成する例として「ハワ
メトリを構成する例として「ハワ
イジオメトリ」が考えられる。
イジオメトリ」が考えられる。
イジオメトリ」が考えられる。
イジオメトリ」が考えられる。
エレメント1 エレメント2 エレメント3 エレメント4 エレメント5 エレメント6 エレメント7 ハワイジオメトリ ハワイジオメトリハワイジオメトリ ハワイジオメトリ•
ハワイジオメトリは
ハワイジオメトリは
ハワイジオメトリは
ハワイジオメトリは
7つのエレメ
つのエレメ
つのエレメ
つのエレメ
ントから構成される。
ントから構成される。
ントから構成される。
ントから構成される。
•
各エレメント(島)はポリゴンとし
各エレメント(島)はポリゴンとし
各エレメント(島)はポリゴンとし
各エレメント(島)はポリゴンとし
て定義される。
て定義される。
て定義される。
て定義される。
®
データモデル(
DB投影)
•
1つのレイヤはつのレイヤはつのレイヤはつのレイヤは1つの表によって定義される。つの表によって定義される。つの表によって定義される。つの表によって定義される。•
今回は今回は今回は今回はJRレイヤとレイヤとレイヤとレイヤと23区レイヤがあるので区レイヤがあるので区レイヤがあるので区レイヤがあるので2つの表によって定義される。つの表によって定義される。つの表によって定義される。つの表によって定義される。•
他に、ジオメトリのメタ情報を管理するための表を定義する必要がある。他に、ジオメトリのメタ情報を管理するための表を定義する必要がある。他に、ジオメトリのメタ情報を管理するための表を定義する必要がある。他に、ジオメトリのメタ情報を管理するための表を定義する必要がある。 JRレイヤ 201 山手線 202 中央線 (100,100) (0,0) 23区レイヤ 101 新宿区 102 豊島区 (100,100) (0,0) メタ情報管理表®
表に格納されたデータ
区番号 区名 面積 人口 101 102 新宿区 豊島区 xxx xxx xxx xxx 区形状 ... ... 23区表 路線番号 名称 営業キロ 始発駅 終着駅 路線形状 201 202 山手線 中央線 xxx xxx 東京 東京 東京 高尾 ... ... JR表 メタ情報管理表 TABLE_NAME 23区表 JR表 COLUMN_NAME 区形状 路線形状 DIMINFO ... ... それぞれの座標データを 格納する(オブジェクト型) ・座標データが格納されたカラムを指定 ・DIMINFO列はオブジェクト型であり、 座標系の最小値、最大値、誤差範囲を 指定する®
索引付け
•
空間問合せのパフォーマンスを向上させ
空間問合せのパフォーマンスを向上させ
空間問合せのパフォーマンスを向上させ
空間問合せのパフォーマンスを向上させ
るため、予め
るため、予め
るため、予め
るため、予め
空間索引
空間索引
空間索引
空間索引
を作成しておく
を作成しておく
を作成しておく
を作成しておく
CREATE INDEX JR_GEO_IDX on 表名 ( 列名 )
INDEXTYPE IS MDSYS.SPATIAL_INDEX
;
空間索引
定義域を細かい四角形に分割し、
各ジオメトリとそれを覆う四角形の
対応情報
®
固定サイズと可変サイズ
®
データモデル(演算)
•
これら表を用いて様々な演算を行なう
•
幾何演算用関数を用いることで、ジオメトリ間の空間
的関係を判断できる
– 新宿区を通るJR路線は?
– 豊島区を通るJR路線は?
(100,100) (0,0) (100,100) (0,0) メタ情報管理表 23区表 JR表®
新宿区を通る路線を求める
SELECT jrname,wardname
FROM jr,ward
WHERE wardname='新宿区'
AND mdsys.sdo_relate
(
ward.geometry,jr.geometry ,
'mask=anyinteract querytype=window’
) = 'TRUE';
JRNAME WARDNAME
---山手線 新宿区
中央線 新宿区
®
豊島区を通る路線を求める
SELECT jrname , wardname
FROM jr , ward
WHERE wardname='豊島区'
AND mdsys.sdo_relate
(
ward.geometry,jr.geometry,
'mask=anyinteract querytype=window'
) = 'TRUE';
JRNAME WARDNAME
---山手線 豊島区
®
Agenda
•
Spatial概要
概要
概要
概要
•
Spatialで何ができるか?
で何ができるか?
で何ができるか?
で何ができるか?
– Spatialデータモデル
データモデル
データモデル
データモデル
– 主要関数
主要関数
主要関数
主要関数
•
Oracle Corp.の取り組み
の取り組み
の取り組み
の取り組み
®
主な関数(
1)
ポリゴンの面積を計算する ポリゴンの面積を計算する ポリゴンの面積を計算する ポリゴンの面積を計算する 面積 面積面積面積 := := := sdo_geom.sdo_area(geometry,dim_array) := sdo_geom.sdo_area(geometry,dim_array)sdo_geom.sdo_area(geometry,dim_array)sdo_geom.sdo_area(geometry,dim_array)
ジオメトリ・オブジェクト データ型 : mdsys.sdo_geometry SDO_GEOM_METADATA表の ディメンション情報配列 データ型 : mdsys.sdo_dim_array ジオメトリの周囲の長さを計算する ジオメトリの周囲の長さを計算する ジオメトリの周囲の長さを計算する ジオメトリの周囲の長さを計算する 長さ 長さ長さ
長さ := := := := sdo_geom.sdo_length(geometry,dim_array)sdo_geom.sdo_length(geometry,dim_array)sdo_geom.sdo_length(geometry,dim_array)sdo_geom.sdo_length(geometry,dim_array)
ジオメトリにバッファ・ポリゴンを作成する ジオメトリにバッファ・ポリゴンを作成する ジオメトリにバッファ・ポリゴンを作成する ジオメトリにバッファ・ポリゴンを作成する ジオメトリ ジオメトリジオメトリ
ジオメトリ := := := sdo_geom.sdo_buffer(geometry,dim_array,distance) := sdo_geom.sdo_buffer(geometry,dim_array,distance)sdo_geom.sdo_buffer(geometry,dim_array,distance)sdo_geom.sdo_buffer(geometry,dim_array,distance)
距離 データ型 : number ジオメトリ・オブジェクトが
戻される
®
主な関数(
2)
2つのポリゴンの論理演算を行なう
sdo_geom.sdo_difference sdo_geom.sdo_difference sdo_geom.sdo_difference sdo_geom.sdo_difference sdo_geom.sdo_union sdo_geom.sdo_union sdo_geom.sdo_union sdo_geom.sdo_union sdo_geom.sdo_intersection sdo_geom.sdo_intersection sdo_geom.sdo_intersection sdo_geom.sdo_intersection sdo_geom.sdo_xor sdo_geom.sdo_xor sdo_geom.sdo_xor sdo_geom.sdo_xor Original Intersection Difference Union Xor 引数はどれも同じで(geometry1 , geometry2 , tolerance ) 戻り値はジオメトリ・オブジェクトで、 データ型はmdsys.sdo_geometry
®
こんなこともできます
...
半径
1の2つの円C1,C2の
交差部分の面積を求める
C1 intersect := sdo_geom.sdo_intersection (c1,c2,0);area := sdo_geom.sdo_area(intersect , dim_array);
area := 1.22836969860872
(10,10)
(11,10) (12,10) (13,10) (11,11) (12,11)
®
主な関数(
3)
ポリゴンの重心を求める ポリゴンの重心を求める ポリゴンの重心を求める ポリゴンの重心を求める 重心 重心重心重心 := := := := sdo_geom.sdo_centroid(geometry,dim_array)sdo_geom.sdo_centroid(geometry,dim_array)sdo_geom.sdo_centroid(geometry,dim_array)sdo_geom.sdo_centroid(geometry,dim_array)
ジオメトリを覆うおおよそのポリゴン求める ジオメトリを覆うおおよそのポリゴン求める ジオメトリを覆うおおよそのポリゴン求める ジオメトリを覆うおおよそのポリゴン求める ポリゴン ポリゴンポリゴン
ポリゴン := := := := sdo_geom.sdo_convexhull(geometry,dim_array)sdo_geom.sdo_convexhull(geometry,dim_array)sdo_geom.sdo_convexhull(geometry,dim_array)sdo_geom.sdo_convexhull(geometry,dim_array)
ジオメトリ間の距離を求める ジオメトリ間の距離を求める ジオメトリ間の距離を求める ジオメトリ間の距離を求める 距離 距離距離
距離 := := := := sdo_geom.sdo_distance(geometry,dim_array)sdo_geom.sdo_distance(geometry,dim_array)sdo_geom.sdo_distance(geometry,dim_array)sdo_geom.sdo_distance(geometry,dim_array)
重心
®
主な関数(
4)
2つのオブジェクトが指定された距離内にあるか判定する
sdo_geom.within_distance sdo_geom.within_distance sdo_geom.within_distance sdo_geom.within_distance (geometry1,distance,geometry2,tolerance) (geometry1,distance,geometry2,tolerance) (geometry1,distance,geometry2,tolerance) (geometry1,distance,geometry2,tolerance) 2つのオブジェクトが指定距離内にある場合TRUEを返し、そうでない場合は、FALSEを返すselect jrname,wardname from jr,ward where sdo_geom.within_distance (jr.geometry,34,ward.geometry,0) = 'TRUE' JRNAME WARDNAME --- ---山手線 新宿区 山手線 豊島区 中央線 新宿区
select jrname,wardname from jr,ward where sdo_geom.within_distance (jr.geometry,35,ward.geometry,0) = 'TRUE' JRNAME WARDNAME - ---山手線 新宿区 山手線 豊島区 中央線 新宿区 中央線 豊島区 区とJR路線の組み合わせのうち、距離34以内のもの 区とJR路線の組み合わせのうち、距離35以内のもの 今回のジオメトリ定義では、中央線と豊島区の距離が 34以上、35以内であったためヒットした
®
主な関数(
5)
文法 文法文法 文法 SDO_GEOM.RELATE (geometry1,dim_array1,mask,geometry2,dim_array2) geometry1, geometry2 dim_array1, dim_array2 mask 比較するジオメトリ・オブジェクトを指定 データ型はmdsys.sdo_geometry SDO_GEOM_METADATA表から選択される ディメンション情報配列を指定 データ型はmdsys.sdo_dim_array チェックする関係を指定する パラメータ パラメータ パラメータパラメータ 戻り値戻り値戻り値戻り値((((varchar2)varchar2)varchar2)varchar2)
- マスクに指定した関係を満たす場合 戻り値にその関係が返される - ANYINTERACTを含むマスクを指定 した場合、2つのジオメトリが非接続で なければTRUEを返す
2つのオブジェクトの空間的関係を判定する
®
Inside
contains
Covers covered by
Touch
Overlap
boundaries
intersect
Equal
Disjoint
SDO_GEOM.RELATEが判断できる関係
Overlap
boundaries
disjoint
これら、ジオメトリ間の関係は、
Open GIS Simple Features Specification For SQL Revision1.1で規定されて
いるものと同じです。
®
SDO_GEOM.RELATEのMASK
•
ANYINTERACT – 2つのオブジェクトが何らかの空間的関係を持つつのオブジェクトが何らかの空間的関係を持つつのオブジェクトが何らかの空間的関係を持つつのオブジェクトが何らかの空間的関係を持つ•
DISJOINT – 2つのオブジェクトに共通の境界または内点がないつのオブジェクトに共通の境界または内点がないつのオブジェクトに共通の境界または内点がないつのオブジェクトに共通の境界または内点がない•
CONTAINS – 第2のオブジェクトが完全に第1のオブジェクトの内部にあり、かつオブジェ第2のオブジェクトが完全に第1のオブジェクトの内部にあり、かつオブジェ第2のオブジェクトが完全に第1のオブジェクトの内部にあり、かつオブジェ第2のオブジェクトが完全に第1のオブジェクトの内部にあり、かつオブジェ クトの境界が接していない クトの境界が接していない クトの境界が接していない クトの境界が接していない•
INSIDE – 第第第第1のオブジェクトが完全に第のオブジェクトが完全に第のオブジェクトが完全に第のオブジェクトが完全に第2のオブジェクトの内部にあり、かつオブジェクのオブジェクトの内部にあり、かつオブジェクのオブジェクトの内部にあり、かつオブジェクのオブジェクトの内部にあり、かつオブジェク トの境界が接していない トの境界が接していない トの境界が接していない トの境界が接していない•
EQUAL – オブジェクトの境界と内部(オブジェクト内のすべての穴を含む)のすべてのオブジェクトの境界と内部(オブジェクト内のすべての穴を含む)のすべてのオブジェクトの境界と内部(オブジェクト内のすべての穴を含む)のすべてのオブジェクトの境界と内部(オブジェクト内のすべての穴を含む)のすべての 点を 点を 点を 点を2つのオブジェクトが共有しているつのオブジェクトが共有しているつのオブジェクトが共有しているつのオブジェクトが共有しているMASK
MASKには次の値を指定可能
には次の値を指定可能
には次の値を指定可能
には次の値を指定可能
には次の値を指定可能
には次の値を指定可能
には次の値を指定可能
には次の値を指定可能
®
SDO_GEOM.RELATEのMASK
•
COVERS – 第第第第2のオブジェクトが完全に第のオブジェクトが完全に第のオブジェクトが完全に第1のオブジェクトの内部にあり、かつ境界がのオブジェクトが完全に第 のオブジェクトの内部にあり、かつ境界がのオブジェクトの内部にあり、かつ境界がのオブジェクトの内部にあり、かつ境界が1 つ以上の位置で接する つ以上の位置で接する つ以上の位置で接する つ以上の位置で接する•
COVEREDBY – 第1のオブジェクトが完全に第2のオブジェクトの内部にあり、かつオブジェ第1のオブジェクトが完全に第2のオブジェクトの内部にあり、かつオブジェ第1のオブジェクトが完全に第2のオブジェクトの内部にあり、かつオブジェ第1のオブジェクトが完全に第2のオブジェクトの内部にあり、かつオブジェ クトの境界が クトの境界が クトの境界が クトの境界が1つ以上の点で接しているつ以上の点で接しているつ以上の点で接しているつ以上の点で接している•
OVERLAPBDYDISJOINT – 2つのオブジェクトが重なるがその境界が相互干渉しないつのオブジェクトが重なるがその境界が相互干渉しないつのオブジェクトが重なるがその境界が相互干渉しないつのオブジェクトが重なるがその境界が相互干渉しない•
OVERLAPBDYINTERSECT – 2つのオブジェクトが部分的に重なり、かつその境界がつのオブジェクトが部分的に重なり、かつその境界がつのオブジェクトが部分的に重なり、かつその境界が1つ以上の位置で交つのオブジェクトが部分的に重なり、かつその境界がつ以上の位置で交つ以上の位置で交つ以上の位置で交 差する 差する 差する 差する•
TOUCH – 2つのオブジェクトが1つの共通境界点を共有するが、共通の内点がないつのオブジェクトが1つの共通境界点を共有するが、共通の内点がないつのオブジェクトが1つの共通境界点を共有するが、共通の内点がないつのオブジェクトが1つの共通境界点を共有するが、共通の内点がない®
Agenda
•
Spatial概要
概要
概要
概要
•
Spatialで何ができるか?
で何ができるか?
で何ができるか?
で何ができるか?
– Spatialデータモデル
データモデル
データモデル
データモデル
– 主要関数
主要関数
主要関数
主要関数
•
Oracle Corp.の取り組み
の取り組み
の取り組み
の取り組み
®
Spatial Standards
OpenGIS Standardsへの対応
- Consortium RFP1 - Simple Features
- 1999年3月12日、Oracle8 Spatial Cartridgeにより
RFP1 conformance testに合格
- 1999年4月8日, Oracle8i SpatialによりRFP1
conformance testに合格
SQLMM 及び ISO211のspatial standards
initiativesにも参加
®
Oracle’s Contribution
OpenGIS
– Board of Directors
– Management Committee
– Technical Committee
ISO TC211
– HOD (Head of US Delegation)
– Project Leader Spatial Operators
– Liaison to SQL3MM
American National Standards Institute
– Chair National GIS Committee
®