自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。
STX_RelateMatch(g1, g2, pattern)
与えた2つのジオメトリの関係が、第3引数で与えたDE-9IM関係行列とマッチすることを判定する。どうでもよい部分は "* "にして与える。マッチする場合は1、アンマッチの場合は0を返す。
動作紹介
- g1がg2に含まれる関係の判定
mysql> SELECT STX_RelateMatch(
-> ST_GeomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'),
-> ST_GeomFromText('POLYGON((0 0, 5 0, 5 5, 0 5, 0 0))'),
-> 'T*F**F***'
-> ) de9r;
+------+
| de9r |
+------+
| 1 |
+------+
1 row in set (0.000 sec)
- 同、敢えて判定にマッチしない文字列を与えたもの
mysql> SELECT STX_RelateMatch(
-> ST_GeomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'),
-> ST_GeomFromText('POLYGON((0 0, 5 0, 5 5, 0 5, 0 0))'),
-> 'T*T**F***'
-> ) de9r;
+------+
| de9r |
+------+
| 0 |
+------+
1 row in set (0.000 sec)
- 境界のみ接していることの確認
mysql> SELECT STX_RelateMatch(
-> ST_GeomFromText('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'),
-> ST_GeomFromText('POLYGON((1 0, 2 0, 2 1, 1 1, 1 0))'),
-> 'F***T****'
-> ) de9r;
+------+
| de9r |
+------+
| 1 |
+------+
1 row in set (0.000 sec)
- ラインがポリゴンを横断する例
mysql> SELECT STX_RelateMatch(
-> ST_GeomFromText('LINESTRING(0 0.5, 3 0.5)'),
-> ST_GeomFromText('POLYGON((1 0, 2 0, 2 1, 1 1, 1 0))'),
-> 'T*T***T**'
-> ) de9r;
+------+
| de9r |
+------+
| 1 |
+------+
1 row in set (0.000 sec)