MySQL 提供幾個 MySQL 特有的函數,用於測試兩個幾何物件 g1
和 g2
的最小邊界矩形 (MBR) 之間的關係。傳回值 1 和 0 分別表示真和假。
點的邊界框被解釋為既是邊界又是內部的點。
水平或垂直直線的邊界框被解釋為直線,其中直線的內部也是邊界。端點是邊界點。
如果任何參數是幾何集合,則這些參數的內部、邊界和外部是集合中所有元素的聯集。
本節中的函數會偵測笛卡爾或地理空間參考系統 (SRS) 中的引數,並傳回適用於 SRS 的結果。
除非另有說明,否則本節中的函數會依下列方式處理幾何引數
如果任何引數為
NULL
或空幾何物件,則傳回值為NULL
。如果任何幾何引數不是語法正確的幾何物件,則會發生
ER_GIS_INVALID_DATA
錯誤。如果任何幾何引數是未定義空間參考系統 (SRS) 中語法正確的幾何物件,則會發生
ER_SRS_NOT_FOUND
錯誤。對於採用多個幾何引數的函數,如果這些引數不在相同的 SRS 中,則會發生
ER_GIS_DIFFERENT_SRIDS
錯誤。如果任何引數在幾何上無效,則結果為 true 或 false(未定義),或發生錯誤。
對於地理 SRS 幾何引數,如果任何引數的經度或緯度超出範圍,則會發生錯誤
如果經度值不在範圍 (−180, 180] 中,則會發生
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
錯誤。如果緯度值不在範圍 [−90, 90] 中,則會發生
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
錯誤。
顯示的範圍以度為單位。如果 SRS 使用其他單位,則範圍會使用其單位中的對應值。由於浮點運算,確切的範圍限制會略有偏差。
否則,傳回值為非
NULL
。
這些 MBR 函數可用於測試幾何關係
傳回 1 或 0,表示
g1
的最小邊界矩形是否包含g2
的最小邊界矩形。這會測試與MBRWithin()
相反的關係。MBRContains()
會依照本節簡介中所述處理其引數。mysql> SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'); mysql> SET @g2 = ST_GeomFromText('Point(1 1)'); mysql> SELECT MBRContains(@g1,@g2), MBRWithin(@g2,@g1); +----------------------+--------------------+ | MBRContains(@g1,@g2) | MBRWithin(@g2,@g1) | +----------------------+--------------------+ | 1 | 1 | +----------------------+--------------------+
傳回 1 或 0,表示
g1
的最小邊界矩形是否被g2
的最小邊界矩形覆蓋。這會測試與MBRCovers()
相反的關係。MBRCoveredBy()
會依照本節簡介中所述處理其引數。mysql> SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'); mysql> SET @g2 = ST_GeomFromText('Point(1 1)'); mysql> SELECT MBRCovers(@g1,@g2), MBRCoveredby(@g1,@g2); +--------------------+-----------------------+ | MBRCovers(@g1,@g2) | MBRCoveredby(@g1,@g2) | +--------------------+-----------------------+ | 1 | 0 | +--------------------+-----------------------+ mysql> SELECT MBRCovers(@g2,@g1), MBRCoveredby(@g2,@g1); +--------------------+-----------------------+ | MBRCovers(@g2,@g1) | MBRCoveredby(@g2,@g1) | +--------------------+-----------------------+ | 0 | 1 | +--------------------+-----------------------+
傳回 1 或 0,表示
g1
的最小邊界矩形是否覆蓋g2
的最小邊界矩形。這會測試與MBRCoveredBy()
相反的關係。如需範例,請參閱MBRCoveredBy()
的說明。MBRCovers()
會依照本節簡介中所述處理其引數。傳回 1 或 0,表示兩個幾何物件
g1
和g2
的最小邊界矩形是否不相交(不相交)。MBRDisjoint()
依照本節引言所述的方式處理其引數。傳回 1 或 0,表示兩個幾何物件
g1
和g2
的最小邊界矩形是否相同。MBREquals()
依照本節引言所述的方式處理其引數,但不會針對空的幾何引數傳回NULL
。傳回 1 或 0,表示兩個幾何物件
g1
和g2
的最小邊界矩形是否相交。MBRIntersects()
依照本節引言所述的方式處理其引數。如果兩個幾何物件相交,且其交集產生的幾何物件具有相同的維度,但不等於任何一個給定的幾何物件,則稱這兩個幾何物件為空間重疊。
此函數傳回 1 或 0,表示兩個幾何物件
g1
和g2
的最小邊界矩形是否重疊。MBROverlaps()
依照本節引言所述的方式處理其引數。如果兩個幾何物件的內部不相交,但其中一個幾何物件的邊界與另一個幾何物件的邊界或內部相交,則稱這兩個幾何物件為空間接觸。
此函數傳回 1 或 0,表示兩個幾何物件
g1
和g2
的最小邊界矩形是否接觸。MBRTouches()
依照本節引言所述的方式處理其引數。傳回 1 或 0,表示
g1
的最小邊界矩形是否在g2
的最小邊界矩形內。此測試與MBRContains()
相反的關係。MBRWithin()
依照本節引言所述的方式處理其引數。mysql> SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'); mysql> SET @g2 = ST_GeomFromText('Polygon((0 0,0 5,5 5,5 0,0 0))'); mysql> SELECT MBRWithin(@g1,@g2), MBRWithin(@g2,@g1); +--------------------+--------------------+ | MBRWithin(@g1,@g2) | MBRWithin(@g2,@g1) | +--------------------+--------------------+ | 1 | 0 | +--------------------+--------------------+