ST_Relate — intersectionMatrixPatternの値について,二つのジオメトリの内部,境界,外部のインタセクションのテストを行い,ジオメトリが空間的にもう一つのジオメトリと関係している場合に,TRUEを返します.
boolean ST_Relate(geometry geomA, geometry geomB, text intersectionMatrixPattern);
text ST_Relate(geometry geomA, geometry geomB);
バージョン1: geomA, geomB, intersectionMatrixを取り,intersectionMatrixPatternの値について,二つのジオメトリの内部,境界,外部のインタセクションのテストを行い,ジオメトリが空間的にもう一つのジオメトリと関係している場合に,1(TRUE)を返します.
これは,インタセクション,クロス等の複合チェックを一度に行うのに,特に便利です.
![]() | |
ジオメトリコレクションを引数として呼ばないで下さい. |
![]() | |
ご注意: これは論理値を返して整数を返さないのが「許される」版です.これはOGC仕様で定められています. |
![]() | |
この関数は,なぜか自動的にインデクスを呼びだす,ということは行いません.非接続など,関連が否定的になるものがあるためです.インタセクションを必要とするパターンの関連を使うのでしたら,&&演算子を使用して下さい. |
バージョン2: geomAとgeomBを取り,DE-9IM (dimensionally extended nine-intersection matrix)を返します.
![]() | |
ジオメトリコレクションを引数として呼ばないで下さい. |
not in OGC spec, but implied. see s2.1.13.2
両方とも,GEOSモジュールで実現しています.
このメソッドは OpenGIS Simple Features Implementation Specification for SQL 1.1.を実装するものです. s2.1.1.2 // s2.1.13.3
このメソッドはSQL/MM仕様の実装です. SQL-MM 3: 5.1.25
--polyとインタセクトかつ非接触となる(内部でインタセクトする)coumpoundsの結果全て
SELECT l.* , b.name As poly_name
FROM polys As b
INNER JOIN compounds As l
ON (p.the_geom && b.the_geom
AND ST_Relate(l.the_geom, b.the_geom,'T********'));
SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2));
st_relate
-----------
0FFFFF212
SELECT ST_Relate(ST_GeometryFromText('LINESTRING(1 2, 3 4)'), ST_GeometryFromText('LINESTRING(5 6, 7 8)'));
st_relate
-----------
FF1FF0102
SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2), '0FFFFF212');
st_relate
-----------
t
SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2), '*FF*FF212');
st_relate
-----------
t