Oracle spatial的幾何處理函式

2021-06-16 10:35:39 字數 4229 閱讀 4249

空間查詢和分析元件提供查詢和分析空間幾何體的核心功能,包括幾何引擎(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:查詢離北京國貿飯店最近的五條道路

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 by distance)

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點

select p.poi_id, p.name, p.address

from rbeijing r, pbeijing p

where r.pathname = '拱辰北大街'

and sdo_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公尺的緩衝

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。

select sdo_geom.sdo_area(bp.geoloc, 0.5, 'unit= sq_m')

from bpbeijing bp

where bp.name = '頤和園'

sdo_length  此函式返回一條線的長度和多邊形、平面和立方體的周長。對於點,這個函式返回0。

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物件。

select sdo_geom.sdo_mbr(bp.geoloc, m.diminfo)

from bpbeijing bp, user_sdo_geom_metadata m

where m.table_name = 'bpbeijing'

and m.column_name = 'geoloc'

and bp.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被排除。操...