自作の、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から最短の位置を決定して、割合を返す…
自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。 STX_ClosestPoint(geom1, geom2) geom2にもっとも近い位置となるような geom1上の点を返す。実は STX_ShortestLine() 関数が返すLINESTRINGの第1点と結果は同じ。 動作紹介 第一引数がPOINTならば、必ずそのPOINTが結果となる。 mysql> SELECT ST_AsText(STX_ClosestPoint( -> ST_GeomFromText('POINT(1 0)'), -> ST_Geom…
自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。 STX_ShortestLine(g1, g2) 2つのジオメトリ間の最短線分を返します。つまり、2つの点から構成される LINESTRING型を返します。 動作紹介 POINTとLINESTRINGの最短距離。この例ではLINESTRING側の端点が、POINTに一番近い mysql> SELECT ST_AsText(STX_Shortestline( -> ST_GeomFromText('POINT(0 0)'), -> ST_GeomFromText('L…
自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。 STX_Dwithin(g1, g2, dist) ふたつのジオメトリの間の距離が、第3引数の範囲内かを判定して 1(範囲内)か 0(範囲外)を返す。 動作紹介 辺が 3,4,5の長さとなる直角三角形の斜辺の長さは5 (つまり 5 以内か、の判定は True(1)) mysql> SELECT STX_DWithin( -> ST_GeomFromText('POINT(0 0)'), -> ST_GeomFromText('POINT(3 4)'), -> 5 -…
自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。 STX_RelateMatch(g1, g2, pattern) 与えた2つのジオメトリの関係が、第3引数で与えたDE-9IM関係行列とマッチすることを判定する。どうでもよい部分は "* "にして与える。マッチする場合は1、アンマッチの場合は0を返す。 動作紹介 g1がg2に含まれる関係の判定 mysql> SELECT STX_RelateMatch( -> ST_GeomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))')…
自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。 STX_Relate(g1, g2) DE-9IM 関係行列を返す。 2つの値について、以下の表のような相互の関係を求め、II IB IE BI BB BE EI EB EE の順となる9バイトの文字列にして返す。 g2の内部(I) g2の境界(B) g2の外部(E) ────────────────────────────────────── g1の内部(I) │ II │ IB │ IE g1の境界(B) │ BI │ BB │ BE g1の外部(E) │ EI…
自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。 STX_LineSubstring(line, start, end) LINESTRINGを指定した割合の場所でちょん切って返す関数です。 (0,0)-(0,100) のLINESTRINGを、0.3~0.75 の範囲で切り出すと (0,30)-(0,75) のLINESTRINGが返ってくる、といった動作をします。2点によるLINESTRINGのみでなく3点以上のLINESTRINGでも動作します。 第2、第3引数に与えるのは 0.0-1.0の範囲の割合で、第2…
MySQLにSpatial(GIS)関数をいっぱい追加したくて、Pluginを作っています。 sakaik.hateblo.jpテストを兼ねて一つ一つ関数を紹介しています。 STX_Project(point, dist, azimuth) 与えられた点を、指定された方向に、指定された距離だけ移動した点を返す。地理座標系の場合は地球の丸さを考慮して計算する。 方向は、北をゼロとした時計回りにラジアンで指定する。 LINESTRING や POLYGONでは動作しない(NULL)。 動作紹介 霞ヶ関付近から真北(0度)に1000m移動した点 mysql> SET @g=ST_GeomFromTe…
MySQL Spatial Functions Plugin、関数を動作確認して紹介するシリーズ。度分秒を変換する関数が欲しかったので追加しました。 STX_dms2deg(d, m, s) 度、分、秒の数字を与えて、小数点の度の数値へ変換する機能です。GISツールどこにもそんな機能はない(と思う)のですが、私が頻繁に使うので、関数として追加することにしました。 STX_deg2dms_deg/_min/_sec (d) 小数点表示の「度」の数値を度分秒に変換する関数です。3つの値を同時に返すことはできないので、それぞれの値を返す3つの関数にしました。度、分は整数、秒は(必要であれば)小数付き…
自作の MySQL Spatial Functions Plugin の関数をひとつひとつ検証しています。今回は Googleの Encoded Polyline 形式に変換したり、逆にEncoded PolylineからLINESTRINGに変換したりするエンコード、デコード関数を。 STX_AsEncodedPolyline(geom [, prec])、STX_LineFromEnccodedPolyline(text [, srid [, prec]]) LINESTRINGをGoogle の Encoded Polyline 形式にエンコード/デコードする関数です。Encoded P…