以下の内容はhttps://sakaik.hateblo.jp/entry/20260322/STX_LineLocatePoint_funcより取得しました。


MySQL GIS拡張関数: STX_LineLocatePoint()

自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。
https://sakaik.hateblo.jp/entry/20260215/mysql_spatial_functions_plugin

STX_LineLocatePoint(line, point)

 第2引数のPOINTから最も近い第1引数のLINESTRINGの点を求め、その位置をLINESTRING上の始点から比率で返す。戻値は0.0~1.0の範囲。

動作紹介

  • 長さ10のLINESTRING上に、少し離れたPOINTから最短の位置を決定して、割合を返す
mysql> SELECT STX_LineLocatePoint(
    ->   ST_GeomFromText('LINESTRING(0 3, 10 3)'),
    ->   ST_GeomFromText('POINT(4 0)')) ratio;
+-------+
| ratio |
+-------+
|   0.4 |
+-------+
1 row in set (0.000 sec)



.

  • 節を幾つも持つ(ふつうの)LINESTRINGでももちろん動作する
mysql> SELECT STX_LineLocatePoint(
    ->   ST_GeomFromText('LINESTRING(0 5, 5 5, 5 10)'),
    ->   ST_GeomFromText('POINT(7 6 )')) r;
+------+
| r    |
+------+
|  0.6 |
+------+
1 row in set (0.000 sec)

.

  • 第1引数がLINESTRINGでない場合はエラー
mysql> SELECT STX_LineLocatePoint(
    ->   ST_GeomFromText('POLYGON((0 5, 5 5, 5 10, 0 5))'),
    ->   ST_GeomFromText('POINT(7 6 )')) r;
ERROR 3516 (22S01): LINESTRING value is a geometry of unexpected type POLYGON in stx_linelocatepoint.
  • 第2筆数がPOINTでない場合はエラー
mysql> SELECT STX_Linelocatepoint(
    ->   ST_GeomFromText('LINESTRING(0 3, 10 3)'),
    ->   ST_GeomFromText('LINESTRING(1 2, 1 4)')) ratio;
ERROR 3516 (22S01): POINT value is a geometry of unexpected type LINESTRING in stx_linelocatepoint.



## 使い道の例
 ここで割合としてLINESTRING上の点を特定できると、この割合の値を使って STX_LinesSubstring() でLINESTRINGを分割できる。




以上の内容はhttps://sakaik.hateblo.jp/entry/20260322/STX_LineLocatePoint_funcより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14