自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。
https://sakaik.hateblo.jp/entry/20260215/mysql_spatial_functions_plugin
STX_MakePolygon(ring [, inner_rings])
LINESTRINGを与えてPOLYGONを生成する。 MULTILINESTRINGを与えると、2つめ以降の部分はくりぬきとして扱われる。
LINESTRINGは始点と終点が一致している(閉じている)必要がある。
動作紹介
- LINESTRINGを与えてPOLYGON化するシンプルな例
mysql> SET @g=ST_GeomFromText('LINESTRING(1 1,5 1,5 5,4 6,3 5,2 2,1 2,1 1)');
mysql> SELECT ST_AsText(STX_MakePolygon(@g));
+--------------------------------------------+
| ST_AsText(STX_MakePolygon(@g)) |
+--------------------------------------------+
| POLYGON((1 1,1 2,2 2,3 5,4 6,5 5,5 1,1 1)) |
+--------------------------------------------+
1 row in set (0.000 sec).
- MULTIPOINTから、STX_MakeLine(), STX_MakePolygon を順に掛けてポリゴン生成することもできる
mysql> SET @g=ST_GeomFromText('MULTIPOINT((1 1),(5 1),(5 5),(4 6),(3 5),(2 2),(1 2),(1 1))');
mysql> SELECT ST_AsText(STX_MakePolygon(STX_MakeLine(@g)));
+----------------------------------------------+
| ST_AsText(STX_MakePolygon(STX_MakeLine(@g))) |
+----------------------------------------------+
| POLYGON((1 1,1 2,2 2,3 5,4 6,5 5,5 1,1 1)) |
+----------------------------------------------+
1 row in set (0.000 sec).
- 第2引数を与えてPOLYGONの中をくり抜き
mysql> SELECT ST_AsText(STX_Makepolygon(
-> ST_GeomFromText('LINESTRING(0 0,10 0,10 10,0 10,0 0)'),
-> ST_GeomFromText('MULTILINESTRING((2 2,4 2,4 4,2 4,2 2))'))) p;
+----------------------------------------------------------+
| p |
+----------------------------------------------------------+
| POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,4 2,4 4,2 4,2 2)) |
+----------------------------------------------------------+
1 row in set (0.000 sec)
