自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。
https://sakaik.hateblo.jp/entry/20260215/mysql_spatial_functions_plugin
STX_Makeline(p1, p2) / STX_Makeline(multipoint)
与えられた複数のポイント群からLINESTRINGを生成する関数です。
動作紹介
- 2つのPOINTを与えてLINESTRINGにする例
mysql> SET @g1=ST_GeomFromText('POINT(1 1)');
mysql> SET @g2=ST_GeomFromText('POINT(2 3)');
mysql> SELECT ST_AsText(STX_MakeLine(@g1,@g2));
+----------------------------------+
| ST_AsText(STX_MakeLine(@g1,@g2)) |
+----------------------------------+
| LINESTRING(1 1,2 3) |
+----------------------------------+
1 row in set (0.000 sec)
.
- 上と同じ事をMULTIPOINTを使って実施する例
mysql> SET @g=ST_GeomFromText('MULTIPOINT((1 1),(2 3))');
mysql> SELECT ST_AsText(STX_MakeLine(@g1,@g2));
+----------------------------------+
| ST_AsText(STX_MakeLine(@g1,@g2)) |
+----------------------------------+
| LINESTRING(1 1,2 3) |
+----------------------------------+
1 row in set (0.000 sec).
- 以下のようにテーブルの複数の行からPOINTをひっぱってきて、MultiPointにした後、本関数でLINESTRINGに変換、なんてこともできます。
CREATE TABLE g (id integer auto_increment primary key,
geom GEOMETRY);
INSERT INTO g (geom)
VALUES (ST_GeomFromText('POINT(1 2)')),
(ST_GeomFromText('POINT(3 4)')),
(ST_GeomFromText('POINT(5 6)')),
(ST_GeomFromText('POINT(7 8)'));mysql> SELECT ST_AsText(ST_Collect(geom)) FROM g; +-------------------------------------+ | ST_AsText(ST_Collect(geom)) | +-------------------------------------+ | MULTIPOINT((1 2),(3 4),(5 6),(7 8)) | +-------------------------------------+ 1 row in set (0.000 sec)
mysql> SELECT ST_AsText(STX_MakeLine(ST_Collect(geom))) FROM g; +-------------------------------------------+ | ST_AsText(STX_MakeLine(ST_Collect(geom))) | +-------------------------------------------+ | LINESTRING(1 2,3 4,5 6,7 8) | +-------------------------------------------+ 1 row in set (0.000 sec)
.
