文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  使用最小邊界矩形的空間關係函數

14.16.9.2 使用最小邊界矩形的空間關係函數

MySQL 提供幾個 MySQL 特有的函數,用於測試兩個幾何物件 g1g2 的最小邊界矩形 (MBR) 之間的關係。傳回值 1 和 0 分別表示真和假。

點的邊界框被解釋為既是邊界又是內部的點。

水平或垂直直線的邊界框被解釋為直線,其中直線的內部也是邊界。端點是邊界點。

如果任何參數是幾何集合,則這些參數的內部、邊界和外部是集合中所有元素的聯集。

本節中的函數會偵測笛卡爾或地理空間參考系統 (SRS) 中的引數,並傳回適用於 SRS 的結果。

除非另有說明,否則本節中的函數會依下列方式處理幾何引數

  • 如果任何引數為 NULL 或空幾何物件,則傳回值為 NULL

  • 如果任何幾何引數不是語法正確的幾何物件,則會發生 ER_GIS_INVALID_DATA 錯誤。

  • 如果任何幾何引數是未定義空間參考系統 (SRS) 中語法正確的幾何物件,則會發生 ER_SRS_NOT_FOUND 錯誤。

  • 對於採用多個幾何引數的函數,如果這些引數不在相同的 SRS 中,則會發生 ER_GIS_DIFFERENT_SRIDS 錯誤。

  • 如果任何引數在幾何上無效,則結果為 true 或 false(未定義),或發生錯誤。

  • 對於地理 SRS 幾何引數,如果任何引數的經度或緯度超出範圍,則會發生錯誤

    顯示的範圍以度為單位。如果 SRS 使用其他單位,則範圍會使用其單位中的對應值。由於浮點運算,確切的範圍限制會略有偏差。

  • 否則,傳回值為非 NULL

這些 MBR 函數可用於測試幾何關係

  • MBRContains(g1, g2)

    傳回 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 |
    +----------------------+--------------------+
  • MBRCoveredBy(g1, g2)

    傳回 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 |
    +--------------------+-----------------------+
  • MBRCovers(g1, g2)

    傳回 1 或 0,表示 g1 的最小邊界矩形是否覆蓋 g2 的最小邊界矩形。這會測試與 MBRCoveredBy() 相反的關係。如需範例,請參閱 MBRCoveredBy() 的說明。

    MBRCovers() 會依照本節簡介中所述處理其引數。

  • MBRDisjoint(g1, g2)

    傳回 1 或 0,表示兩個幾何物件 g1g2 的最小邊界矩形是否不相交(不相交)。

    MBRDisjoint() 依照本節引言所述的方式處理其引數。

  • MBREquals(g1, g2)

    傳回 1 或 0,表示兩個幾何物件 g1g2 的最小邊界矩形是否相同。

    MBREquals() 依照本節引言所述的方式處理其引數,但不會針對空的幾何引數傳回 NULL

  • MBRIntersects(g1, g2)

    傳回 1 或 0,表示兩個幾何物件 g1g2 的最小邊界矩形是否相交。

    MBRIntersects() 依照本節引言所述的方式處理其引數。

  • MBROverlaps(g1, g2)

    如果兩個幾何物件相交,且其交集產生的幾何物件具有相同的維度,但不等於任何一個給定的幾何物件,則稱這兩個幾何物件為空間重疊

    此函數傳回 1 或 0,表示兩個幾何物件 g1g2 的最小邊界矩形是否重疊。

    MBROverlaps() 依照本節引言所述的方式處理其引數。

  • MBRTouches(g1, g2)

    如果兩個幾何物件的內部不相交,但其中一個幾何物件的邊界與另一個幾何物件的邊界或內部相交,則稱這兩個幾何物件為空間接觸

    此函數傳回 1 或 0,表示兩個幾何物件 g1g2 的最小邊界矩形是否接觸。

    MBRTouches() 依照本節引言所述的方式處理其引數。

  • MBRWithin(g1, g2)

    傳回 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 |
    +--------------------+--------------------+