Oracle spatial的空間操作符介紹

2021-09-09 01:36:22 字數 3283 閱讀 6793

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

and c.rowid2 = b.rowid

order by a.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'

and c.name < 'cola_d'

and rownum <= 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 by dist;

sdo_relate(geometry1, geometry2, param);

判斷兩個幾何體的關係

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

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