MySQL Spatial Functions Plugin(自作)の関数ひとつひとつ検証中。今回は STX_Reverse()。
STX_Reverse()
ポリゴンやラインを構成する点の順序を逆にする関数です。
動作紹介
- LINESTRINGに対して、構成点の順序を逆転する例
+---------------------------------------------------------------------------+
| ST_AsText(STX_Reverse(ST_GeomFromText('LINESTRING(1 2, 3 4, 5 6, 7 8)'))) |
+---------------------------------------------------------------------------+
| LINESTRING(7 8,5 6,3 4,1 2) |
+---------------------------------------------------------------------------+
1 row in set (0.001 sec)
- MULTILINESTRINGでも動作します。マルチ自体の順序は(そもそも順序という概念がない建前なので)ひっくり返されるわけではありません。
mysql> SELECT ST_AsText(STX_Reverse(ST_GeomFromText('MULTILINESTRING((1 2, 3 4, 5 6, 7 8),(2 4, 6 8, 10 12))'))) g;
+----------------------------------------------------+
| g |
+----------------------------------------------------+
| MULTILINESTRING((7 8,5 6,3 4,1 2),(10 12,6 8,2 4)) |
+----------------------------------------------------+
1 row in set (0.000 sec)
- 測地系つきでも、もちろん動作。
mysql> SET @g1=ST_GeomFromText('POLYGON((35 135, 35.5 135, 35.3 135.5, 35 135.5, 35 135))',6668);
mysql> SELECT ST_AsText(STX_Reverse(@g1));
+-------------------------------------------------------+
| ST_AsText(STX_Reverse(@g1)) |
+-------------------------------------------------------+
| POLYGON((35 135,35 135.5,35.3 135.5,35.5 135,35 135)) |
+-------------------------------------------------------+
1 row in set (0.000 sec)
- ちゃんとSRIDも保持されていることがわかります。
mysql> SELECT ST_SRID(STX_Reverse(@g1)); +---------------------------+ | ST_SRID(STX_Reverse(@g1)) | +---------------------------+ | 6668 | +---------------------------+ 1 row in set (0.000 sec)
- POINTの場合はエラーにはなりませんが、反転の概念がないのでそのままです。
mysql> SELECT ST_AsText(STX_Reverse(ST_GeomFromText('POINT(1 2)'))) g;
+------------+
| g |
+------------+
| POINT(1 2) |
+------------+
1 row in set (0.000 sec)
- MULTIPOINTでも何も起こりません。マルチの順序自体には意味がない(概念がない)のでひっくりかえりません
mysql> SELECT ST_AsText(STX_Reverse(ST_GeomFromText('MULTIPOINT(1 2, 3 4)'))) g;
+-------------------------+
| g |
+-------------------------+
| MULTIPOINT((1 2),(3 4)) |
+-------------------------+
1 row in set (0.000 sec)