名前

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

概要

boolean ST_Crosses(geometry g1, geometry g2);

説明

ST_Crossesは二つのジオメトリを取り, インタセクションが「空間的にクロスする」,すなわち,ジオメトリが共通の内部の点を持ち,かつそうでない点を持つ場合にTRUEを返します. ジオメトリの内部のインタセクションは,空集合であってはならず,二つのジオメトリの最大次元より低い次元でなければなりません.さらに言うと,二つのジオメトリのインタセクションは,元のジオメトリのいずれとも一致してはなりません. これらを満たさない場合には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(高速道路)の二つのテーブルを持っている場面を考えます.

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