MySQL GIS拡張関数: STX_Reverse()

 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)