ST_Relate — intersectionMatrixPatternの値について、二つのジオメトリの内部、境界、外部のインタセクションを見て、指定したジオメトリがもうひとつのジオメトリと空間的に関係している場合に、TRUEを返します。intersectionMatrixPatternが無い場合には、二つのジオメトリについての最大のintersectionMatrixPatternを返します。
boolean ST_Relate(
geometry geomA, geometry geomB, text intersectionMatrixPattern)
;
text ST_Relate(
geometry geomA, geometry geomB)
;
text ST_Relate(
geometry geomA, geometry geomB, integer BoundaryNodeRule)
;
一つ目の形式: geomA, geomB, intersectionMatrixを取り、DE-9IM matrix patternの値によって指定される、二つのジオメトリの内部、境界、外部のインタセクションを見て、指定したジオメトリがもう一つのジオメトリと空間的に関係している場合に1 (TRUE)を返します。
これは特にインタセクト、クロス等の複合チェックを一度に行うために使われます。
ジオメトリコレクションを引数として呼ばないでください。
これは論理値を返して整数を返さないのが「許される」版です。これはOGC仕様で定められています。 |
この関数は、自動的にはインデクスを*呼びだしません*。非接続など、関連が否定的になるものがあるためです。インタセクションを必要とするパターンの関連を使うのでしたら、&&演算子でインデクスを呼び出して下さい。 |
Version 2: Takes geomA and geomB and returns the Section 4.3.6, “ここで、Dimensionally Extended 9 Intersection Modelまたは略してDE-9IMを見てみましょう。”
三つ目の形式: 二つ目の形式と同じですが、境界ノード規則 (1:OGC/MOD2, 2:Endpoint, 3:MultivalentEndpoint, 4:MonovalentEndpoint)を指定できます。
ジオメトリコレクションを引数として呼ばないでください。 |
OGC仕様にはありませんが実装しました。s2.1.13.2をご覧下さい。
GEOSモジュールによって実現しています。
This method implements the OpenGIS Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3
This method implements the SQL/MM specification. SQL-MM 3: 5.1.25
Enhanced: 2.0.0 - 境界ノード規則が追加されました (GEOS 3.0以上が必要です)。
-- あるポリゴンとインタセクトして接触しない (内部でインタセクトする)区域を -- 探索します。 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