前面幾節討論三種空間函數:
本節將介紹更多的函數類別:
數個函數傳回有關地理特徵彼此相關或彼此比較的方式之資訊。 通常這些稱為述詞的函數是指布林函數。 本節說明常用的一些述詞及個別討論每一個函數。
如果某個比較符合函數的準則,則述詞函數將傳回 1 (TRUE),若比較失敗,則會傳回 0 (FALSE)。 測試空間關係的述詞比較幾何配對,這些幾何可以是不同的類型或維度。
述詞會比較已提交的幾何的 X 與 Y 座標。 Z 座標與測量 (若有的話) 會被忽略。這會使具有 Z 座標或測量的幾何與不具有 Z 座標或測量的幾何做比較。
Dimensionally Extended 9 Intersection Model (DE-9IM) 1 是一個數學方法,它定義具有不同類型和維度的幾何之間的配對空間關係。 此模型把所有幾何類型之間的空間關係表達成其內部、界限和外部配對交集, 同時把產生的交集之維度列入考量。
給定的幾何 a和 b: I(a )、B(a ) 和 E(a ) 代表 a 的內部、界限和外部。而 I(b)、B(b) 和 E(b) 則代表 b 的內部、界限和外部。I(a)、 B(a) 和 E(a) 與 I(b)、B(b) 和 E(b) 的交集產生一個 3 x 3 矩陣。每一個交集可能產生不同維度的幾何。 例如,兩個多邊形界限的交集是由一個點和一條線串組成,此時 dim 函數會傳回最大維度 1。
dim 函數傳回 1、0、1 或 2 的值。1 對應至 NULL 設定或
dim(null),當找不到交集時會傳回它。
|
內部
|
界限
|
外部
|
內部
|
dim(I(a) &intersect. I(b))
|
dim(I(a) &intersect. B(b))
|
dim(I(a) &intersect. E(b))
|
界限
|
dim(B(a) &intersect. I(b))
|
dim(B(a) &intersect. B(b))
|
dim(B(a) &intersect. E(b))
|
外部
|
dim(E(a) &intersect. I(b))
|
dim(E(a) &intersect. B(b))
|
dim(E(a) &intersect. E(b))
|
空間關係述詞的結果,可藉由比較述詞結果與代表 DE-9IM 可接受值的型樣矩陣來驗證或瞭解。
型樣矩陣包含每一個交集矩陣資料格的可接受值。 可能的型樣值如下:
例如,ST_Within 述詞的下列型樣矩陣包括值 T、F 及 *。
用於幾何組合的 ST_Within 述詞之型樣矩陣。 | ||||
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
T
|
*
|
F
|
|
界限
|
*
|
*
|
F
|
|
外部
|
*
|
*
|
*
|
當兩個幾何的內部有交集,而且 a 的內部與界限沒有與 b 的外部交集時,ST_Within 述詞會傳回 TRUE。所有其它條件不重要。
每一個述詞至少有一個型樣矩陣,但某些述詞需要不止一個型樣矩陣來描述各種幾何類型組合的關係。
如果兩個相同類型的幾何具有完全相同的 X,Y 座標值,則 ST_Equals 傳回 1 (TRUE)。
圖 14. ST_Equals. 如果一些幾何具有符合的 X,Y 座標,則它們相等。
![]() |
相等的 DE-9IM 型樣矩陣可確保內部有交集,以及某幾何的內部或界限不會與另一幾何的外部交集。 | ||||
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
T
|
*
|
F
|
|
界限
|
*
|
*
|
F
|
|
外部
|
F
|
F
|
*
|
關於詳細資訊,請參閱ST_Equals。
ST_OrderingEquals 比較兩個幾何,如果幾何相等且座標順序相同, 則將傳回 1 (TRUE);否則會傳回 0 (FALSE)。關於詳細資訊,請參閱ST_OrderingEquals。
如果兩個幾何的交集是空集合,則 ST_Disjoint 傳回 1 (TRUE)。
圖 15. ST_Disjoint. 如果幾何在任何情況下彼此沒有交集,則它們是隔開的。
![]() |
ST_Disjoint 述詞的型樣矩陣簡單描述任一幾何的內部和界限均不交集。 | ||||
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
F
|
F
|
*
|
|
界限
|
F
|
F
|
*
|
|
外部
|
*
|
*
|
*
|
關於詳細資訊,請參閱ST_Disjoint。
如果交集沒有導致空集合,則 ST_Intersects 傳回 1 (TRUE)。 交集會傳回完全相反的 ST_Disjoint 結果。
如果下列任一型樣矩陣的條件傳回 TRUE,則 ST_Intersects 述詞傳回 TRUE。
如果兩個幾何的內部有交集,則 ST_Intersects 述詞傳回 TRUE。 | ||||
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
T
|
*
|
*
|
|
界限
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
如果第一個幾何的界限與第二個幾何的界限有交集, 則 ST_Intersects 述詞傳回 TRUE。 | ||||
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
*
|
T
|
*
|
|
界限
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
如果第一個幾何的界限與第二個幾何的內部有交集, 則 ST_Intersects 述詞傳回 TRUE。 | ||||
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
*
|
*
|
*
|
|
界限
|
T
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
如果任一幾何的界限有交集,則 ST_Intersects 述詞傳回 TRUE。 | ||||
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
*
|
*
|
*
|
|
界限
|
*
|
T
|
*
|
|
外部
|
*
|
*
|
*
|
關於詳細資訊,請參閱ST_Intersects。
如果兩個幾何的包封有交集,此函數傳回 1 (TRUE)。 它是有效執行 ST_Intersects 的便利函數 (ST_Envelope(g1)、ST_Envelope(g2))。 關於詳細資訊,請參閱EnvelopesIntersect。
如果兩個幾何共同的點沒有與其內部交集,則 ST_Touches 傳回 1 (TRUE)。 至少一個幾何必須是線串、多邊形、多線串或多重多邊形。
![]() |
當幾何的內部沒有交集,但幾何的界限與另一幾何的內部或界限有交集時,此型樣矩陣顯示
ST_Touches 述詞傳回 TRUE。
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
F
|
T
|
*
|
|
界限
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
F
|
*
|
*
|
|
界限
|
T
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
F
|
*
|
*
|
|
界限
|
*
|
T
|
*
|
|
外部
|
*
|
*
|
*
|
關於詳細資訊,請參閱ST_Touches。
ST_Overlaps 比較相同維度的兩個幾何。如果它們的交集導致某個幾何與它們不同,但有相同維度,則傳回 1 (TRUE)。
![]() |
表 50中的型樣矩陣適用於多邊形/多邊形、
多點/多點以及多重多邊形/多重多邊形覆蓋。針對這些組合,
如果兩個幾何的內部與其它幾何的內部和外部有交集,則此覆蓋述詞傳回 TRUE。
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
T
|
*
|
T
|
|
界限
|
*
|
*
|
*
|
|
外部
|
T
|
*
|
*
|
表 51中的型樣矩陣適用於線串/線串與多線串/多線串覆蓋。
在此情形下,幾何的交集必須導致具有維度 1 的幾何 (另一線串)。
如果內部交集的維度為 1,ST_Overlaps 述詞會傳回 FALSE, 不過,ST_Crosses
述詞會傳回 TRUE。
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
1
|
*
|
T
|
|
界限
|
*
|
*
|
*
|
|
外部
|
T
|
*
|
*
|
關於詳細資訊,請參閱ST_Overlaps。
如果交集導致幾何比兩個來源幾何的最大維度少一個維度, 而且交集為兩個來源幾何的內部,則 ST_Crosses 傳回 1 (TRUE)。 唯有進行多點/多邊形、多點/線串、線串/線串、線串/多邊形,及線串/多重多邊形比較時, ST_Crosses 才傳回 1 (TRUE)。
![]() |
表 52中的型樣矩陣適用於多點/線串、多點/多線串、多點/多邊形、
多點/多重多邊形、線串/多邊形及線串/多重多邊形。此矩陣描述內部必須交集,而且主要
(幾何 a) 的內部必須與次要 (幾何 b) 的外部交集。
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
T
|
*
|
T
|
|
界限
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
表 53中的型樣矩陣適用於線串/線串、線串/多線串及多線串/多線串。
此矩陣描述內部交集的維度必須是 0 (交集在一點上)。 如果此交集的維度是 1
(交集在一線串上),則 ST_Crosses 述詞傳回 FALSE;不過,ST_Overlaps 述詞傳回
TRUE。
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
0
|
*
|
*
|
|
界限
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
關於詳細資訊,請參閱ST_Crosses。
如果第一個幾何完全在第二個幾何內,則 ST_Within 傳回 1 (TRUE)。 ST_Within 傳回 ST_Contains 的完全相反結果。
![]() |
ST_Within 述詞型樣矩陣描述兩個幾何的內部必須交集, 但主要幾何 (幾何
a) 的內部及界限, 不可與次要幾何 (幾何 b) 的外部交集。
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
T
|
*
|
F
|
|
界限
|
*
|
*
|
F
|
|
外部
|
*
|
*
|
*
|
關於詳細資訊,請參閱ST_Within。
如果第二個幾何完全包含在第一個幾何內,則 ST_Contains 傳回 1 (TRUE)。 ST_Contains 述詞傳回與 ST_Within 述詞完全相反的結果。
![]() |
ST_Contains 述詞的型樣矩陣描述兩個幾何的內部必須有交集, 但次要幾何 (幾何
b) 的內部與界限,不可與主要幾何 (幾何 a) 的外部交集。
|
|
b
|
|
|
|
|
內部
|
界限
|
外部
|
a
|
內部
|
T
|
*
|
*
|
|
界限
|
*
|
*
|
*
|
|
外部
|
F
|
F
|
*
|
關於詳細資訊,請參閱ST_Contains。
ST_Relate 函數比較兩個幾何,如果幾何符合 DE-91M 型樣矩陣字串指定的條件, 則傳回 1 (TRUE);否則,此函數會傳回 0 (FALSE)。 關於詳細資訊,請參閱ST_Relate。
ST_Distance 函數會報告兩個隔開圖徵相隔的最小距離。 如果圖徵沒有隔開,此函數會報告最小距離 0。
例如,ST_Distance 報告兩位置之間飛機必須經過的最短距離。 圖 20會說明此資訊。
圖 20. 兩個都市間的最小距離. ST_Distance 可採用洛杉磯與芝加哥位置的座標為輸入,並傳回一值表示兩位置間的最小距離。
![]() |
關於詳細資訊,請參閱ST_Distance。
DB2 Spatial Extender 提供從現存的幾何產生新幾何的述詞與轉換函數。
ST_Intersection 函數傳回兩個幾何的交集。 此交集一定傳回為一個集合,即來源幾何的最小維度。 以一條與多邊形交集的線串為例,此交集函數會傳回多邊形內部與界限共用的線串部份所構成的多線串。 如果來源線串與含有兩個以上不連續區段的多邊形交集,則多線串包含不止一條線串。 如果幾何沒有交集,或交集產生一個小於兩個來源幾何的維度,則傳回空白幾何。
圖 21. ST_Intersection. ST_Intersection 函數的範例。
![]() |
關於詳細資訊,請參閱ST_Intersection。
ST_Difference 函數傳回未與次要幾何交集的主要幾何部份。 此即所謂空間的邏輯 AND NOT。ST_Difference 函數僅對於類似維度的幾何操作,並傳回與來源幾何具有相同維度的集合。在來源幾何相等的情況下,會傳回空白幾何。
![]() |
關於詳細資訊,請參閱ST_Difference。
ST_Union 函數傳回兩個幾何的聯集。此即所謂空間的邏輯 OR。 來源幾何必須具有類似維度。 ST_Union 傳回的結果一定是一個集合。
![]() |
關於詳細資訊,請參閱ST_Union。
ST_Buffer 函數產生幾何的方式是以指定的距離包圍一個幾何。 當主要幾何被放入緩衝區中,或某集合的元素很接近而足以讓所有緩衝區多邊形重疊時,便會產生一個多邊形。不過,當某個緩衝區集合的元素之間有足夠的距離時, 便會產生個別的緩衝區多邊形,在此情形下,ST_Buffer 函數會傳回一個多重多邊形。
![]() |
ST_Buffer 函數接受正負距離,不過,只有二維的幾何 (多邊形與多重多邊形) 適用負緩衝區。每當來源幾何的維度小於 2 (多邊形或多重多邊形以外的所有幾何) 時,會使用緩衝區距離的絕對值。
一般而言,使用外部環時,正緩衝區距離會產生一些遠離來源幾何中心點的多邊形環;而負緩衝區會產生朝向中心點的多邊形或多重多邊形環。 若是多邊形或多重多邊形的內部環,正緩衝區距離會產生朝向中心點的緩衝區環,而負緩衝區距離會產生遠離中心點的緩衝區環。
緩衝處理會合併一些重疊的多邊形。若負距離大於多邊形最大內部寬度的一半, 則會產生空白幾何。
關於詳細資訊,請參閱ST_Buffer。
以具有測量的幾何而言,可利用 LocateAlong 函數找到特定測量的位置。 LocateAlong 會將位置傳回為一個多點。如果來源幾何的維度是 0 (例如,一個點及一個多點),則完全相符是必要的,而且會將那些具有相符測量值的點傳回為一個多點。 不過,若來源幾何的維度大於 0,則位置會內插。 例如,如果輸入的測量值是 5.5,而且測出的線串頂點為分別是 3、4、5、6 及 7, 則會傳回剛好完全位於測量值 5 與 6 頂點之間的插入點。
![]() |
關於詳細資訊,請參閱LocateAlong。
LocateBetween 函數會從已測量的來源幾何傳回位於兩測量值之間的路徑或位置設定。 如果來源幾何的維度是 0,則 LocateBetween 傳回一個多點,內含兩來源測量之間測得的所有點。 若來源幾何的維度大於 0,如果可內插路徑,則 LocateBetween 傳回多線串;否則 LocateBetween 會傳回內含點位置的多點。 若 LocateBetween 無法內插路徑或找出測量之間的位置,則傳回一個空白點。 LocateBetween 會執行幾何的總括搜尋;因此,幾何的測量必須不小於從測量且不大於到測量。
![]() |
關於詳細資訊,請參閱LocateBetween。
ST_ConvexHull 函數會傳回至少有三個頂點形成一個凸形的任何幾何之凸狀多邊形。如果幾何的頂點沒有形成一個凸形,則 ST_ConvexHull 傳回 NULL。在透過一組點建立 TIN 網路的格式排列中, ST_ConvexHull 通常是第一個步驟。
![]() |
關於詳細資訊,請參閱ST_ConvexHull。
從線串產生多邊形。關於詳細資訊,請參閱ST_Polygon。
DB2 Spatial Extender 支援三個 GIS 資料交換格式:
DB2 Spatial Extender 具有從文字說明產生幾何的數個函數。
文字表示法是一種 ASCII 字串。它允許幾何以 ASCII 文字格式交換。 這些函數不需要定義任何空間程式結構來對映二進位表示法。 所以,可使用於 3GL 或 4GL 程式。
ST_AsText 函數可將現存的幾何值轉換成文字表示法。 關於詳細資訊,請參閱ST_AsText。
關於知名文字表示法的詳細說明,請參閱OGC 知名文字表示法。
DB2 Spatial Extender 具有從知名二進位 (WKB) 表示法產生幾何的數個函數。
知名二進位表示法為一連串的位元組。它允許幾何以二進位形式在 ODBC 從屬站與 SQL 資料庫之間交換。這些幾何函數需要定義 C 結構來對映二進位表示法。 所以,適合使用於 3GL 程式,但不適合在 4GL 環境中使用。
ST_AsBinary 函數可將現存的幾何值轉換成知名二進位表示法。 關於詳細資訊,請參閱ST_AsBinary。
關於知名二進位表示法的詳細說明,請參閱OGC 知名二進位 (WKB) 表示法。
DB2 Spatial Extender 具有從 ESRI 形狀表示法產生幾何的數個函數。 除了文字與知名二進位表示法支援的二維表示法之外,ESRI 形狀表示法還支援 Z 座標與測量。
這些函數的一般語法都相同。第一個引數是以 BLOB 資料類型輸入的形狀表示法。 第二個引數是將指定給幾何的空間參照識別字。 例如,GeometryFromShape 函數的語法如下:
GeometryFromShape(shapegeometry, SRID)
若要對映二進位表示法,則這些形狀函數需要定義 C 結構。 所以,適合使用於 3GL 程式,但不適合在 4GL 環境中使用。
AsBinaryShape 函數可將幾何值轉換成 ESRI 形狀表示法。關於詳細資訊,請參閱AsBinaryShape。
關於形狀表示法的詳細說明,請參閱ESRI 形狀表示法。