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);
11、sdo_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被排除。操...