名稱

ST_Crosses — 測試兩個幾何物件是否有一些,但非全部的內部點是共有的

概要

boolean ST_Crosses(geometry g1, geometry g2);

描述

比較兩個幾何物件,如果它們的交集「空間交叉」,則返回 true;也就是說,這些幾何物件有一些,但非全部的內部點是共有的。幾何物件內部的交集必須是非空的,且其維度必須小於兩個輸入幾何物件的最大維度,並且兩個幾何物件的交集不能等於任一幾何物件。否則,返回 false。交叉關係是對稱的且非自反的。

用數學術語表示:ST_Crosses(A, B) ⇔ (dim( Int(A) ⋂ Int(B) ) < max( dim( Int(A) ), dim( Int(B) ) )) ∧ (A ⋂ B ≠ A) ∧ (A ⋂ B ≠ B)

如果幾何物件的 DE-9IM 交集矩陣符合以下情況,則它們交叉:

  • T*T****** 用於點/線、點/面和線/面的情況

  • T*****T** 用於線/點、面/點和面/線的情況

  • 0******** 用於線/線的情況

  • 對於點/點和面/面的情況,結果為 false

[Note]

OpenGIS 簡單特徵規範僅為點/線、點/面、線/線和線/面情況定義了這個謂詞。 JTS / GEOS 將定義擴展到也適用於線/點、面/點和面/線的情況。這使得關係對稱。

[Note]

此函式會自動包含一個邊界框比較,該比較會使用幾何物件上可用的任何空間索引。

[Important]

增強功能:3.0.0 版本啟用了對 GEOMETRYCOLLECTION 的支援

此方法實作了OGC 簡單特徵 SQL 1.1 實作規範 s2.1.13.3

此方法實作了 SQL/MM 規範。SQL-MM 3: 5.1.29

範例

以下情況皆會返回 true

MULTIPOINT / LINESTRING

MULTIPOINT / POLYGON

LINESTRING / POLYGON

LINESTRING / LINESTRING

考慮一個使用者有兩個表格的情況:一個道路表格和一個高速公路表格。

CREATE TABLE roads (
  id serial NOT NULL,
  geom geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

CREATE TABLE highways (
  id serial NOT NULL,
  the_gem geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

要確定與高速公路交叉的道路列表,請使用類似以下的查詢:

SELECT roads.id
FROM roads, highways
WHERE ST_Crosses(roads.geom, highways.geom);