特定の地点がテーブル内に存在するか確認する (ST_CONTAINS)
この日記は RDBMS GIS アドベントカレンダー2018の13日目向けに書きました。
昨日のノリで軽い記事ですが…
ST_CONTAINS
テーブル内に存在するPOINT型の地点に対し、特定の緯度経度の地点が存在するか確認するなら
SELECT COUNT(*) FROM テーブル名 WHERE ST_CONTAINS(カラム名,ST_GEOMFROMTEXT('POINT(緯度 経度)', SRID));
というような感じでST_CONTAINS関数を使えばいい。
MySQL :: MySQL 8.0 Reference Manual :: 12.16.9.1 Spatial Relation Functions That Use Object Shapes
mysql> select count(*) from spacialtest.towns where st_contains(lonlat_point,ST_GeomFromText('POINT(35.670812 139.754182)',4326)); +----------+ | count(*) | +----------+ | 1 | +----------+ 1 row in set (0.00 sec)
ちなみに
SPATIAL INDEXって張ってみたものの、本当に使われてるのかな?と心配になってましたが、どうやら使ってそうです。