41から始めました

文字通り41歳から始めたブログです。DB(MySQL)を使ってお仕事してるので、DB周りの話を中心に最近始めたこととかをTwitterのノリで書いています。なお、本サイトにおいて示されている見解は私個人の見解であり、所属団体や組織を代表するものではありません。

特定の地点がテーブル内に存在するか確認する (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って張ってみたものの、本当に使われてるのかな?と心配になってましたが、どうやら使ってそうです。

f:id:next4us-ti:20181212145115p:plain