Name

ST_Crosses — 与えられたジオメトリが共通の内部の点を持ち、かつそうでない内部の点を持つ場合に、TRUEを返します。

Synopsis

boolean ST_Crosses(geometry g1, geometry g2);

説明

二つのジオメトリを比較して、共有部が「空間的にクロスしている」場合にはtrueを返します。二つのジオメトリの内部の全部でない一部が共有されている、という意味です。二つのジオメトリの内部の共有部は空であってはならず、二つの入力ジオメトリの最大次元より小さい次元でなければなりません。さらに、二つのジオメトリの共有部は入力ジオメトリの一方とでも同じであってなりません。これらの条件に合わない場合には falseを返します。

数学的に述べると、次のようになります。

DE-9IMインタセクション行列が次の通り合致するとジオメトリはクロスしています。

  • Point/Line, Point/Area, Line/Areaの場合にはT*T******

  • Line/Point, Area/Point, Area/Lineの場合にはT*****T**

  • Line/Lineの場合には0********

Point/PointとArea/Areaの場合には、この述語はFALSEを返します。

OpenGIS Simple Feature Specificationでは、この述語はPoint/Line, Point/Area, Line/Line, Line/Areaの場合についてのみ定義されています。JTS/GEOSでは、Line/Point, Area/Point, Area/Lineについて拡張しています。これによって関係が対称になっています。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries.

[Important]

Enhanced: 3.0.0 GEOMETRYCOLLECTIONへの対応が可能となりました

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.13.3

This method implements the SQL/MM specification. SQL-MM 3: 5.1.29

次の場合には全てTRUEを返します。

MULTIPOINT / LINESTRING

MULTIPOINT / POLYGON

LINESTRING / POLYGON

LINESTRING / LINESTRING

roads (道路)とhighways (高速道路)の2つのテーブルを持っている場面を考えます。

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)
);

次のようなクエリを使って、highwayとクロスするroadsのリストを決定します。

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

関連情報

ST_Contains, ST_Overlaps