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


MySQL GIS拡張関数: STX_Dwithin()

自作の、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
    -> ) dw;
+------+
| dw   |
+------+
|    1 |
+------+
1 row in set (0.000 sec)
  • 上の条件で、5以内のかわりに「4.9以内か?」と判定条件を変更すると(長さは5なので) False(0)
mysql> SELECT STX_DWithin(
    ->   ST_GeomFromText('POINT(0 0)'),
    ->   ST_GeomFromText('POINT(3 4)'),
    ->   4.9
    -> ) dw;
+------+
| dw   |
+------+
|    0 |
+------+
1 row in set (0.000 sec)
  • 点とポリゴンの距離
mysql> SELECT STX_DWithin(
    ->   ST_GeomFromText('POINT(5 0.5)'),
    ->   ST_GeomFromText('POLYGON((0 0, 3 0, 3 1, 0 1, 0 0))'),
    ->   3
    -> ) dw;
+------+
| dw   |
+------+
|    1 |
+------+
1 row in set (0.000 sec)
  • 点がポリゴンの内部にあるときは距離ゼロと判定されるので DWithin の判定値0で与えてもTrue(1)になる
mysql> SELECT STX_DWithin(
    ->   ST_GeomFromText('POINT(1 1)'),
    ->   ST_GeomFromText('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))'),
    ->   0
    -> ) dw;
+------+
| dw   |
+------+
|    1 |
+------+
1 row in set (0.000 sec)
  • 東京駅と新宿駅は10km以内?
mysql> SELECT STX_DWithin(
    ->   ST_GeomFromText('POINT(35.6812 139.7671)', 4326),
    ->   ST_GeomFromText('POINT(35.6905 139.7003 )', 4326),
    ->   10000
    -> ) dw;
+------+
| dw   |
+------+
|    1 |
+------+
1 row in set (0.000 sec)

ST_Within との違いは?

 名前の似ているMySQLの標準関数 ST_Within があります。 交差判定という用途も似ています。
ST_Withinは、与えられたジオメトリそのままでの比較を行いますが、ST_DWithinはその片方のジオメトリを少し膨らませたポリゴンを想定して、その交差を判定するという見方をすることもできます。厳密な包含ではなく、少し余裕を持たせた大きさにできるのが特徴ですね。細かい部分での動作の違いはあるのですが、概ね ST_DWithin は ST_Within + ST_Buffer を駆使して実現できるものと考えて良いでしょう。




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

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