Oracle spatial的空間操作符介紹

2021-09-06 02:09:20 字數 4026 閱讀 2987

2023年12月28日

參考《oracle spatial空間資訊管理》;oracle spatial11g手冊

sdo_filter(geometry1, geometry2, param);

判斷兩個幾何體是否有相交

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'

;sdo_join(table_name1, column_name1, table_name2, column_name2, params,

preserve_join_order) return sdo_rowidset;

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

andc.rowid2 = b.rowid

order

bya.name;

sdo_nn(geometry1, geometry2, param [, number]);

在指定的距離內,按順序返回離的最近的。

效能調優引數

sdo_num_res

指定返回離指定點最近的兩個市場

sdo_batch_size

指定了一次批量提取多少條記錄進行對比

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

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'

andc.name <

'cola_d'

andrownum

<= 2;

sdo_nn_distance(number);

number

必須與sdo_nn

操作符的最後乙個引數保持一致。

sdo_nn操作符是通過計算距離來識別客戶的,我們可以通過sdo_nn_distance輔助操作符來獲取這些距離。

在使用該操作符時,必須指定乙個效能調優引數,sdo_num_res或sdo_batch_size,如果不知道如何設定sdo_batch_size的值,就將其設為0,索引會在內部使用合適的值。

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

bydist;

sdo_relate(geometry1, geometry2, param);

判斷兩個幾何體的關係

select

a.gid

from

polygons a, query_polys b

where

b.gid = 1

andsdo_relate(a.geometry, b.geometry,

'mask=touch'

) =

'true'

union

all

select

a.gid

from

polygons a, query_polys b

where

b.gid = 1

andsdo_relate(a.geometry, b.geometry,

'mask=coveredby'

) =

'true';

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'

;sdo_within_distance(geometry1, ageom, params);

返回與指定點相距指定的距離內的某錶的幾何物件

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'

;語法:

操作符overlapbdydisjoint(geometry1, geometry2);

11sdo_touch

1、 空間操作符使用的表必須有空間索引;

空間操作符執行速度比函式快,因此可以採用操作符的情況下就使用操作符

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