MySQL 提供數個 MySQL 特有的函數,用於測試兩個幾何體 g1
和 g2
的最小邊界矩形 (MBR) 之間的關係。傳回值 1 和 0 分別表示 true 和 false。
點的邊界框會解譯為既是邊界又是內部的點。
水平或垂直直線的邊界框會解譯為線,其中線的內部也是邊界。端點是邊界點。
如果任何參數是幾何集合,則這些參數的內部、邊界和外部是集合中所有元素的聯集。
本節中的函數會偵測笛卡爾或地理空間參考系統 (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 | +--------------------+--------------------+