自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。
https://sakaik.hateblo.jp/entry/20260215/mysql_spatial_functions_plugin
STX_Points(geom)
与えられたジオメトリを構成する点をすべてPOINTにし、MULTIPOINT型として返す。LINESTRINGであればその構成点を、POLYGONの場合も同様に構成点を返します。POLYGONの場合は始点と終点が同じ点になりますが、結果にはそれぞれ(つまり同じ点が2つ)含まれます。
動作紹介
- POINT型を与えればそのままのPOINTがひとつ含まれたMULTIPOINTが得られる
mysql> SET @g=ST_GeomFromText('POINT(3 4)');
mysql> SELECT ST_AsText(STX_Points(@g)) mp;
+-------------------+
| mp |
+-------------------+
| MULTIPOINT((3 4)) |
+-------------------+
1 row in set (0.000 sec).
- POLYGONの場合は、必ず始点と終点が同じ点だが結果には両方含まれる
mysql> SET @g=ST_GeomFromText('POLYGON((1 1, 5 1, 5 5, 4 6, 3 5, 2 2, 1 2, 1 1))');
mysql> SELECT ST_AsText(STX_Points(@g)) mp;
+-------------------------------------------------------------+
| mp |
+-------------------------------------------------------------+
| MULTIPOINT((1 1),(5 1),(5 5),(4 6),(3 5),(2 2),(1 2),(1 1)) |
+-------------------------------------------------------------+
1 row in set (0.000 sec).
- LINESTRINGからも当然POINT化できる
mysql> SET @g=ST_GeomFromText('LINESTRING(1 1, 2 2, 3 1, 4 2, 5 1)');
mysql> SELECT ST_AsText(STX_Points(@g)) mp;
+-------------------------------------------+
| mp |
+-------------------------------------------+
| MULTIPOINT((1 1),(2 2),(3 1),(4 2),(5 1)) |
+-------------------------------------------+
1 row in set (0.000 sec).
- MULTILINESTRINGからでも同様に動作します
mysql> SET @g=ST_GeomFromText('MULTILINESTRING((1 1, 2 2, 3 1, 4 2, 5 1),(3 3, 4 3, 5 1))');
mysql> SELECT ST_AsText(STX_Points(@g)) mp;
+-------------------------------------------------------------+
| mp |
+-------------------------------------------------------------+
| MULTIPOINT((1 1),(2 2),(3 1),(4 2),(5 1),(3 3),(4 3),(5 1)) |
+-------------------------------------------------------------+
1 row in set (0.000 sec)