空間查詢和分析元件提供查詢和分析空間幾何體的核心功能,包括幾何引擎(geometry engine)和索引引擎(index engine) 。
幾何引擎提供分析,比較操作幾何體的函式。 索引引擎為了提高空間查詢效率提供空間索引。索引引擎提供等價函式稱之為操作符。
注意:幾何體處理函式不使用空間索引,他們相對於空間操作符對空間資料要求更嚴格。
(1)、sdo_geom.sdo_distancesdo_geom.sdo_distance直接計算兩點間的距離,點的座標用經緯度表示,如果不指定投影引數 那麼
這個距離應該就是球面距離。
sdo_distance
( geometry1 in sdo_geometry,
geometry2 in sdo_geometry,
tolerance in number
)geometry1和geometry2是起始的兩個引數,它們表示sdo_geometry物件。
tolerance表示資料集的容差。對於大地測量的資料,它們通常是0.5或者0.1(0.5公尺或者是0.1公尺)。
eg:查詢離北京國貿飯店最近的五條道路
[sql]view plain
copy
select
rname
from
( select
r.pathname rname,
sdo_geom.sdo_distance(r.geoloc, p.geoloc, 0.5) distance
from
rbeijing r, pbeijing p
where
p.name
= '北京國貿飯店'
order
bydistance)
where
rownum <= 5
(2)、sdo_geom.relate
sdo_geom.relate(sdo_geometry1, 『mask』, sod_geometry2, tolerance ):用於判斷乙個幾何體與另
乙個幾何體的關係.
引數說明:
sdo_geometry1,sdo_geometry2為空間資料對應的幾何物件。
tolerance: 容許的精度範圍;
mask引數:
anyinteract: sdo_geometry2落在sdo_geometry1面上包括在邊上。
contains: sdo_geometry2完全包含在sdo_geometry1幾何物件中,並且兩個幾何物件的邊沒有交叉。
coveredby: sdo_geometry1完全包含在sdo_geometry2中,並且這兩個幾何物件的邊有乙個或多個點相互重疊。
covers: sdo_geometry2完全包含在sdo_geometry1中,並且這兩個幾何物件的邊有乙個或多個點相互重疊。
disjoint: 兩個幾何沒有重疊交叉點,也沒有共同的邊。
equal: 兩個幾何是相等的。
inside: sdo_geometry1完全包含在sdo_geometry2幾何物件中,並且兩個幾何物件的邊沒有交叉。
on: sdo_geometry1的邊和內部的線完全在sdo_geometry2上。
overlapbdydisjoint: 兩個幾何物件交迭,但是邊沒有交叉。
overlapbdyintersect: 兩個幾何物件交迭,並且邊有部分交叉。
touch: 兩個幾何物件有共同的邊,但沒有交叉。
eg:選擇拱辰北大街上的所有poi點
[sql]view plain
copy
select
p.poi_id, p.
name
, p.address
from
rbeijing r, pbeijing p
where
r.pathname =
'拱辰北大街'
andsdo_geom.relate(r.geoloc,
'anyinteract'
,p.geoloc, 0.5)=
'anyinteract'
(3)、sdo_geom.sdo_buffer
sdo_buffer
( geometry in sdo_geometry,
distance in number,
tolerance in number
[, params in varchar2]
) returns an sdo_geometry
其中geometry是乙個引數,表示將被緩衝的sdo_geometry物件。
distance是乙個引數,表示緩衝輸入的幾何體的數值距離。
tolerance是乙個引數,表示容差。
params是乙個可選的第四個引數,表示兩個引數:unit=和arc_
tolerance=。
unit=引數表示距離的單位。你可以通過查閱mdsys.sdo_dist_units表來獲得單位的可能取值。
eg:對北京國貿飯店做乙個25公尺的緩衝
[sql]view plain
copy
select
p.kind, sdo_geom.sdo_buffer(p.geoloc, 25, 0.5,
'unit= m'
) from
pbeijing p
where
p.name
= '北京國貿飯店'
(4)、幾何組合函式
a sdo_intersection b:返回a和b共有的區域。
a sdo_union b:返回a和b覆蓋的區域的並。
a sdo_difference b:返回被a覆蓋的但是不被b覆蓋的區域。
a sdo_xor b:返回a和b不相交的區域。
(5)、幾何分析函式
function_name
( geometry in sdo_geometry,
tolerance in number
[, units_params in varchar2]
) return number
其中geometry表示將被分析的幾何體。
tolerance表示在這個分析中的容差。
units_params是可選的第三個引數,表示返回的面積、長度和體積的單位。這個引數的 形式
是'unit='。可以檢視mdsys.sdo_dist_units表的length函式和 mdsys.sdo_area_units表的面積函式獲得這些單位的可能取值
sdo_area 此函式返回平面和立方體的面積。對於點和線,這個函式返回0。
[sql]view plain
copy
select
sdo_geom.sdo_area(bp.geoloc, 0.5,
'unit= sq_m'
) from
bpbeijing bp
where
bp.name
= '頤和園'
sdo_length 此函式返回一條線的長度和多邊形、平面和立方體的周長。對於點,這個函式返回0。
[sql]view plain
copy
select
sdo_geom.sdo_length(bp.geoloc, 0.1,
'unit=m'
) from
bpbeijing bp
where
bp.name
= '頤和園'
(6)、最小邊界矩形
sdo_geom.sdo_mbr(
geom in sdo_geometry
[, dim in sdo_dim_array]
) return sdo_geometry;
sdo_mbr函式把sdo_geometry作為乙個引數並且計算這個幾何體的mbr。它返回的是乙個sdo_geometry物件。
如果輸入的是乙個點,那麼sdo_mbr函式返回的是乙個點幾何體。
如果輸入的是一條平行於x或y軸的線串,那麼函式返回乙個線性幾何體。
否則,函式返回輸入幾何體的mbr,將它作為乙個sdo_geometry物件。
[sql]view plain
copy
select
sdo_geom.sdo_mbr(bp.geoloc, m.diminfo)
from
bpbeijing bp, user_sdo_geom_metadata m
where
m.table_name =
'bpbeijing'
andm.column_name =
'geoloc'
andbp.
name
= '頤和園'
;
Oracle Spatial 例項簡介
oracle spatial 例項簡介 oracle spatial 簡介 首先,oracle 支援自定義的資料型別,你可以用陣列,結構體或者帶有建構函式,功能函式的類來定義自己的物件型別。這樣的物件型別可以用於屬性列的資料型別,也可以用來建立物件表。而oracle spatial也正是基於此種特性...
Oracle spatial空間查詢的選擇度分析
接下來,我們來研究一下這個問題。建立表,並使用sdo geometry資料型別儲存向量資料。檢視表中記錄數 建立空間索引 create index tddcsde a3010 ix1 on tddcsde dltb20150705 shape indextype is mdsys spatial i...
Oracle Spatial 幾何物件之間的距離
sdo within distance 操作符是最簡單的空間操作符之一,可以用它來進行臨近分析,查詢時該操作符能夠使用空間索引,加快查詢速度。如給定乙個位置集,該操作符將從中返回在乙個查詢位置指定距離範圍內的所有位置。上圖查詢了距位置q距離為d的所有點,於是物件a,b,c被檢索出來,d,e被排除。操...