名前

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

概要

boolean ST_Crosses(geometry g1, geometry g2);

説明

ST_Crossesは2つのジオメトリを取り、インタセクションが「空間的にクロスする」、すなわち、ジオメトリが共通の内部の点を持ち、かつそうでない点を持つ場合にTRUEを返します。ジオメトリの内部のインタセクションは、空集合であってはならず、2つのジオメトリの最大次元より低い次元でなければなりません。さらに言うと、2つのジオメトリのインタセクションは、元のジオメトリのいずれとも一致してはなりません。これらを満たさない場合にはFALSEが返ります。

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

TODO: Insert appropriate MathML markup here or use a gif. Simple HTML markup does not work well in both IE and Firefox.

DE-9IMでは次のようになります。

  • T*T****** (Point/Line, Point/Area, Line/Areaの場合)

  • T*****T** (Line/Point, Area/Point, Area/Lineの場合)

  • 0******** (Line/Lineの場合)

他の次元の組み合わせでは、FALSEが返されます。

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

[重要]

GEOMETRYCOLLECTIONを引数にして呼ばないでください。

[注記]

この関数の呼び出しによって、ジオメトリで使用可能なインデクスを使用したバウンディングボックスの比較が自動的に行われます。

このメソッドはOpenGIS Simple Features Implementation Specification for SQL 1.1.の実装です s2.1.13.3

このメソッドはSQL/MM仕様の実装です。 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,
  the_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.the_geom, highways.the_geom);